<?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>22643</bug_id>
          
          <creation_ts>2008-12-04 01:50:20 -0800</creation_ts>
          <short_desc>Allow JIT to function without property access repatching and arithmetic optimizations.</short_desc>
          <delta_ts>2008-12-04 03:10:42 -0800</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>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101308</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-04 01:50:20 -0800</bug_when>
    <thetext>Removes about 1000 lines from JIT.cpp, reducing effort required to port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101309</commentid>
    <comment_count>1</comment_count>
      <attachid>25737</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-04 01:52:56 -0800</bug_when>
    <thetext>Created attachment 25737
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101310</commentid>
    <comment_count>2</comment_count>
      <attachid>25737</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-04 02:02:24 -0800</bug_when>
    <thetext>Comment on attachment 25737
The patch

You break every non-apple mac build :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101311</commentid>
    <comment_count>3</comment_count>
      <attachid>25738</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-04 02:11:10 -0800</bug_when>
    <thetext>Created attachment 25738
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101312</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-04 03:10:42 -0800</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/GNUmakefile.am
Sending        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
Sending        JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Sending        JavaScriptCore/jit/JIT.cpp
Sending        JavaScriptCore/jit/JIT.h
Adding         JavaScriptCore/jit/JITArithmetic.cpp
Adding         JavaScriptCore/jit/JITPropertyAccess.cpp
Sending        JavaScriptCore/wtf/Platform.h
Transmitting file data .........
Committed revision 38992.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25737</attachid>
            <date>2008-12-04 01:52:56 -0800</date>
            <delta_ts>2008-12-04 02:11:10 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.jitproparith2.txt</filename>
            <type>text/plain</type>
            <size>608545</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4OTkw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDgtMTIt
MDQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IEpJVCB0byBmdW5j
dGlvbiB3aXRob3V0IHByb3BlcnR5IGFjY2VzcyByZXBhdGNoaW5nIGFuZCBhcml0aG1ldGljIG9w
dGltaXphdGlvbnMuCisgICAgICAgIENvbnRyb2xsZWQgYnkgRU5BQkxFX0pJVF9PUFRJTUlaRV9Q
Uk9QRVJUWV9BQ0NFU1MgYW5kIEVOQUJMRV9KSVRfT1BUSU1JWkVfQVJJVEhNRVRJQyBzd2l0Y2hl
cy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2
NDMKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMp
OgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6
IENvcGllZCBmcm9tIGppdC9KSVQuY3BwLgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVCaW5h
cnlBcml0aE9wKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dD
YXNlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOiBDb3BpZWQgZnJvbSBq
aXQvSklULmNwcC4KKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVQdXRCeUlkSG90UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZVB1dEJ5SWRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OnJlc2l6ZVByb3BlcnR5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OnRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQzo6SklUOjpwYXRjaEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6SklUOjpwYXRjaFB1
dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW5ndGgpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDA4LTEyLTAzICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
T2xpdmVyIEh1bnQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDM4OTkwKQorKysgSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTAyLDkgKzEwMiwxMSBAQAogCQk4NjkwODMxNTBF
NjUxOEQ3MDAwRDM2RUQgLyogV1JFQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjkwODMxMzBFNjUxOEQ3MDAwRDM2RUQgLyogV1JFQy5jcHAgKi87
IH07CiAJCTg2OTA4MzE2MEU2NTE4RDcwMDBEMzZFRCAvKiBXUkVDLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjkwODMxNDBFNjUxOEQ3MDAwRDM2RUQg
LyogV1JFQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTg2OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjlFQkNCNjBFOEM2RDRBMDA4NzIy
Q0MgLyogUmVzdWx0VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTg2QTkwRUQwMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QTkwRUNG
MEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCAqLzsgfTsKIAkJODZDMzZFRUEw
RUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFj
cm9Bc3NlbWJsZXIuaCAqLzsgfTsKIAkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggKi87IH07
CiAJCTg2Q0M4NUEzMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0M4NUEyMEVFNzlCNzQwMDI4ODY4
MiAvKiBKSVRDYWxsLmNwcCAqLzsgfTsKKwkJODZDQzg1QzQwRUU3QTg5NDAwMjg4NjgyIC8qIEpJ
VFByb3BlcnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAgKi87IH07CiAJCTkwNUIwMkFFMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0Nv
dW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTA1QjAyQUQwRTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgKi87
IH07CiAJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDM0NjlC
MEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA3NTRDMTA4QjBGNjgwMDBB
QjMwNTYgLyogcGNyZV9jb21waWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMDc1NEJGMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUu
Y3BwICovOyB9OwpAQCAtNTQ5LDkgKzU1MSwxMSBAQAogCQk4NjkwODMxMzBFNjUxOEQ3MDAwRDM2
RUQgLyogV1JFQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXUkVD
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY5MDgzMTQwRTY1MThENzAwMEQz
NkVEIC8qIFdSRUMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV1JFQy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjlFQkNCNjBFOEM2RDRBMDA4NzIyQ0MgLyog
UmVzdWx0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN1bHRUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QTkwRUNGMEVFN0Q1MUYwMEFCMzUw
RCAvKiBKSVRBcml0aG1ldGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpJVEFyaXRobWV0aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMz
NkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZU1ldGhvZHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUSW5saW5lTWV0aG9kcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklU
Q2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDYWxsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZDQzg1QzMwRUU3QTg5NDAwMjg4Njgy
IC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVFByb3BlcnR5QWNjZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTA1QjAyQUQwRTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZDb3VudGVkTGVha0NvdW50
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MEQzNDY5QjBFMjg1MjgwMDA5
NDkyRUUgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlZkNvdW50ZWRMZWFrQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MzAzRjU2NzA5OTExOEZBMDBBRDcxQjggLyogT3duUHRyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93blB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtOTE2LDYgKzkyMCw4IEBACiAJCTE0MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTg2QTkwRUNG
MEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCAqLywKKwkJCQk4NkNDODVDMzBF
RTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovLAogCQkJCTg2Q0M4NUEy
MEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCAqLywKIAkJCQk4NkNDODVBMDBFRTc5QTQ3
MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oICovLAogCQkJCTE0MjlEOTJEMEVEMjJENzAw
MEI4OTYxOSAvKiBKSVQuY3BwICovLApAQCAtMTk3MSw2ICsxOTc3LDggQEAKIAkJCQkxNDI5REFD
MDBFRDI2M0U3MDBCODk2MTkgLyogV1JFQ1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDI5REFFMTBFRDI2NDVCMDBCODk2MTkgLyogV1JFQ0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkNDODVBMzBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZBOTBFRDAwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFy
aXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBqaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBqaXQvSklULmNwcAkocmV2aXNpb24gMzg5OTApCisrKyBqaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNDIgKzQ0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLSNpZiBQTEFURk9STShNQUMpCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NT
RTJQcmVzZW50KCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsgLy8gQWxsIFg4NiBNYWNzIGFyZSBndWFy
YW50ZWVkIHRvIHN1cHBvcnQgYXQgbGVhc3QgU1NFMgotfQotCi0jZWxzZQotCi1zdGF0aWMgYm9v
bCBpc1NTRTJQcmVzZW50KCkKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IFNTRTJGZWF0dXJlQml0
ID0gMSA8PCAyNjsKLSAgICBzdHJ1Y3QgU1NFMkNoZWNrIHsKLSAgICAgICAgU1NFMkNoZWNrKCkK
LSAgICAgICAgewotICAgICAgICAgICAgaW50IGZsYWdzOwotI2lmIENPTVBJTEVSKE1TVkMpCi0g
ICAgICAgICAgICBfYXNtIHsKLSAgICAgICAgICAgICAgICBtb3YgZWF4LCAxIC8vIGNwdWlkIGZ1
bmN0aW9uIDEgZ2l2ZXMgdXMgdGhlIHN0YW5kYXJkIGZlYXR1cmUgc2V0Ci0gICAgICAgICAgICAg
ICAgY3B1aWQ7Ci0gICAgICAgICAgICAgICAgbW92IGZsYWdzLCBlZHg7Ci0gICAgICAgICAgICB9
Ci0jZWxzZQotICAgICAgICAgICAgZmxhZ3MgPSAwOwotICAgICAgICAgICAgLy8gRklYTUU6IEFk
ZCBHQ0MgY29kZSB0byBkbyBhYm92ZSBhc20KLSNlbmRpZgotICAgICAgICAgICAgcHJlc2VudCA9
IChmbGFncyAmIFNTRTJGZWF0dXJlQml0KSAhPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wg
cHJlc2VudDsKLSAgICB9OwotICAgIHN0YXRpYyBTU0UyQ2hlY2sgY2hlY2s7Ci0gICAgcmV0dXJu
IGNoZWNrLnByZXNlbnQ7Ci19Ci0KLSNlbmRpZgotCiBDT01QSUxFX0FTU0VSVChDVElfQVJHU19j
b2RlID09IDB4QywgQ1RJX0FSR1NfY29kZV9pc19DKTsKIENPTVBJTEVfQVNTRVJUKENUSV9BUkdT
X2NhbGxGcmFtZSA9PSAweEUsIENUSV9BUkdTX2NhbGxGcmFtZV9pc19FKTsKIApAQCAtMzE2LDI0
NSArMjgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93U2NyaXB0Q2hlY2sodW5zaWduZWQgYgogICAg
IGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKIH0KIAotLyoKLSAgVGhpcyBpcyByZXF1aXJlZCBz
aW5jZSBudW1iZXIgcmVwcmVzZW50YXRpb24gaXMgY2Fub25pY2FsIC0gdmFsdWVzIHJlcHJlc2Vu
dGFibGUgYXMgYSBKU0ltbWVkaWF0ZSBzaG91bGQgbm90IGJlIHN0b3JlZCBpbiBhIEpTTnVtYmVy
Q2VsbC4KLSAgCi0gIEluIHRoZSBjb21tb24gY2FzZSwgdGhlIGRvdWJsZSB2YWx1ZSBmcm9tICd4
bW1Tb3VyY2UnIGlzIHdyaXR0ZW4gdG8gdGhlIHJldXNhYmxlIEpTTnVtYmVyQ2VsbCBwb2ludGVk
IHRvIGJ5ICdqc051bWJlckNlbGwnLCB0aGVuICdqc051bWJlckNlbGwnCi0gIGlzIHdyaXR0ZW4g
dG8gdGhlIG91dHB1dCBTRiBSZWdpc3RlciAnZHN0JywgYW5kIHRoZW4gYSBqdW1wIGlzIHBsYW50
ZWQgKHN0b3JlZCBpbnRvICp3cm90ZUpTTnVtYmVyQ2VsbCkuCi0gIAotICBIb3dldmVyIGlmIHRo
ZSB2YWx1ZSBmcm9tIHhtbVNvdXJjZSBpcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUs
IHRoZW4gdGhlIEpTSW1tZWRpYXRlIHZhbHVlIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgb3V0cHV0
LCBhbmQgZmxvdwotICBjb250cm9sIHdpbGwgZmFsbCB0aHJvdWdoIGZyb20gdGhlIGNvZGUgcGxh
bnRlZC4KLSovCi12b2lkIEpJVDo6cHV0RG91YmxlUmVzdWx0VG9KU051bWJlckNlbGxPckpTSW1t
ZWRpYXRlKFg4Njo6WE1NUmVnaXN0ZXJJRCB4bW1Tb3VyY2UsIFg4Njo6UmVnaXN0ZXJJRCBqc051
bWJlckNlbGwsIHVuc2lnbmVkIGRzdCwgSm1wU3JjKiB3cm90ZUpTTnVtYmVyQ2VsbCwgIFg4Njo6
WE1NUmVnaXN0ZXJJRCB0ZW1wWG1tLCBYODY6OlJlZ2lzdGVySUQgdGVtcFJlZzEsIFg4Njo6UmVn
aXN0ZXJJRCB0ZW1wUmVnMikKLXsKLSAgICAvLyBjb252ZXJ0IChkb3VibGUgLT4gSlNJbW1lZGlh
dGUgLT4gZG91YmxlKSwgYW5kIGNoZWNrIGlmIHRoZSB2YWx1ZSBpcyB1bmNoYW5nZWQgLSBpbiB3
aGljaCBjYXNlIHRoZSB2YWx1ZSBpcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUuCi0g
ICAgX18gY3Z0dHNkMnNpX3JyKHhtbVNvdXJjZSwgdGVtcFJlZzEpOwotICAgIF9fIGFkZGxfcnIo
dGVtcFJlZzEsIHRlbXBSZWcxKTsKLSAgICBfXyBzYXJsX2k4cigxLCB0ZW1wUmVnMSk7Ci0gICAg
X18gY3Z0c2kyc2RfcnIodGVtcFJlZzEsIHRlbXBYbW0pOwotICAgIC8vIENvbXBhcmUgJiBicmFu
Y2ggaWYgaW1tZWRpYXRlLiAKLSAgICBfXyB1Y29taXNfcnIodGVtcFhtbSwgeG1tU291cmNlKTsK
LSAgICBKbXBTcmMgcmVzdWx0SXNJbW0gPSBfXyBqZSgpOwotICAgIEptcERzdCByZXN1bHRMb29r
ZWRMaWtlSW1tQnV0QWN0dWFsbHlJc250ID0gX18gbGFiZWwoKTsKLSAgICAKLSAgICAvLyBTdG9y
ZSB0aGUgcmVzdWx0IHRvIHRoZSBKU051bWJlckNlbGwgYW5kIGp1bXAuCi0gICAgX18gbW92c2Rf
cm0oeG1tU291cmNlLCBGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwganNOdW1i
ZXJDZWxsKTsKLSAgICBpZiAoanNOdW1iZXJDZWxsICE9IFg4Njo6ZWF4KQotICAgICAgICBfXyBt
b3ZsX3JyKGpzTnVtYmVyQ2VsbCwgWDg2OjplYXgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLSAgICAqd3JvdGVKU051bWJlckNlbGwgPSBfXyBqbXAoKTsKLQotICAgIF9fIGxp
bmsocmVzdWx0SXNJbW0sIF9fIGxhYmVsKCkpOwotICAgIC8vIHZhbHVlID09IChkb3VibGUpKEpT
SW1tZWRpYXRlKXZhbHVlLi4uIG9yIGF0IGxlYXN0LCBpdCBsb29rcyB0aGF0IHdheS4uLgotICAg
IC8vIHVjb21pIHdpbGwgcmVwb3J0IHRoYXQgKDAgPT0gLTApLCBhbmQgd2lsbCByZXBvcnQgdHJ1
ZSBpZiBlaXRoZXIgaW5wdXQgaW4gTmFOIChyZXN1bHQgaXMgdW5vcmRlcmVkKS4KLSAgICBfXyBs
aW5rKF9fIGpwKCksIHJlc3VsdExvb2tlZExpa2VJbW1CdXRBY3R1YWxseUlzbnQpOyAvLyBBY3R1
YWxseSB3YXMgYSBOYU4KLSAgICBfXyBwZXh0cndfaXJyKDMsIHhtbVNvdXJjZSwgdGVtcFJlZzIp
OwotICAgIF9fIGNtcGxfaTMycigweDgwMDAsIHRlbXBSZWcyKTsKLSAgICBfXyBsaW5rKF9fIGpl
KCksIHJlc3VsdExvb2tlZExpa2VJbW1CdXRBY3R1YWxseUlzbnQpOyAvLyBBY3R1YWxseSB3YXMg
LTAKLSAgICAvLyBZZXMgaXQgcmVhbGx5IHJlYWxseSByZWFsbHkgaXMgcmVwcmVzZW50YWJsZSBh
cyBhIEpTSW1tZWRpYXRlLgotICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2sodGVtcFJl
ZzEpOwotICAgIGlmICh0ZW1wUmVnMSAhPSBYODY6OmVheCkKLSAgICAgICAgX18gbW92bF9ycih0
ZW1wUmVnMSwgWDg2OjplYXgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0K
LQotdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIG9wY29kZUlELCB1bnNp
Z25lZCBkc3QsIHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBl
cywgdW5zaWduZWQgaSkKLXsKLSAgICBTdHJ1Y3R1cmUqIG51bWJlclN0cnVjdHVyZSA9IG1fZ2xv
YmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlLmdldCgpOwotICAgIEptcFNyYyB3YXNKU051bWJlckNl
bGwxOwotICAgIEptcFNyYyB3YXNKU051bWJlckNlbGwxYjsKLSAgICBKbXBTcmMgd2FzSlNOdW1i
ZXJDZWxsMjsKLSAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMmI7Ci0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhzcmMxLCBYODY6OmVheCwgc3JjMiwgWDg2OjplZHgsIGkpOwotCi0gICAg
aWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKLSAg
ICAgICAgQVNTRVJUKHR5cGVzLnNlY29uZCgpLm1pZ2h0QmVOdW1iZXIoKSk7Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgb3AyIGlzIGEgbnVtYmVyCi0gICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlh
dGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVkeCk7Ci0gICAgICAgIEptcFNyYyBvcDJpbW0g
PSBfXyBqbmUoKTsKLSAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1i
ZXIoKSkgewotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWR4
LCBpLCBzcmMyKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihudW1iZXJTdHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZSksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAoMSkgSW4gdGhpcyBj
YXNlIHNyYzIgaXMgYSByZXVzYWJsZSBudW1iZXIgY2VsbC4KLSAgICAgICAgLy8gICAgIFNsb3cg
Y2FzZSBpZiBzcmMxIGlzIG5vdCBhIG51bWJlciB0eXBlLgotICAgICAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOwotICAgICAgICBKbXBT
cmMgb3AxaW1tID0gX18gam5lKCk7Ci0gICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0
ZWx5SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFg4Njo6ZWF4LCBpLCBzcmMxKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihudW1iZXJTdHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBt
X3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChT
bG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAoMWEp
IGlmIHdlIGdldCBoZXJlLCBzcmMxIGlzIGFsc28gYSBudW1iZXIgY2VsbAotICAgICAgICBfXyBt
b3ZzZF9tcihGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplYXgsIFg4
Njo6eG1tMCk7Ci0gICAgICAgIEptcFNyYyBsb2FkZWREb3VibGUgPSBfXyBqbXAoKTsKLSAgICAg
ICAgLy8gKDFiKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbiBpbW1lZGlhdGUKLSAgICAgICAg
X18gbGluayhvcDFpbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9J
bnQoWDg2OjplYXgpOwotICAgICAgICBfXyBjdnRzaTJzZF9ycihYODY6OmVheCwgWDg2Ojp4bW0w
KTsKLSAgICAgICAgLy8gKDFjKSAKLSAgICAgICAgX18gbGluayhsb2FkZWREb3VibGUsIF9fIGxh
YmVsKCkpOwotICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKQotICAgICAgICAgICAgX18g
YWRkc2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBY
ODY6OnhtbTApOwotICAgICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9zdWIpCi0gICAgICAg
ICAgICBfXyBzdWJzZF9tcihGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2
OjplZHgsIFg4Njo6eG1tMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG9w
Y29kZUlEID09IG9wX211bCk7Ci0gICAgICAgICAgICBfXyBtdWxzZF9tcihGSUVMRF9PRkZTRVQo
SlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplZHgsIFg4Njo6eG1tMCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBwdXREb3VibGVSZXN1bHRUb0pTTnVtYmVyQ2VsbE9ySlNJbW1lZGlhdGUoWDg2
Ojp4bW0wLCBYODY6OmVkeCwgZHN0LCAmd2FzSlNOdW1iZXJDZWxsMiwgWDg2Ojp4bW0xLCBYODY6
OmVjeCwgWDg2OjplYXgpOwotICAgICAgICB3YXNKU051bWJlckNlbGwyYiA9IF9fIGptcCgpOwot
Ci0gICAgICAgIC8vICgyKSBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgc3JjMiBpcyBhbiBpbW1l
ZGlhdGUgbnVtYmVyLgotICAgICAgICAvLyAgICAgVHdvIHNsb3cgY2FzZXMgLSBlaXRoZXIgc3Jj
MSBpc24ndCBhbiBpbW1lZGlhdGUsIG9yIHRoZSBzdWJ0cmFjdCBvdmVyZmxvd3MuCi0gICAgICAg
IF9fIGxpbmsob3AyaW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICB9IGVsc2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNS
ZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAgICAgICBBU1NFUlQodHlwZXMuZmly
c3QoKS5taWdodEJlTnVtYmVyKCkpOwotCi0gICAgICAgIC8vIENoZWNrIG9wMSBpcyBhIG51bWJl
cgotICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwg
WDg2OjplYXgpOwotICAgICAgICBKbXBTcmMgb3AxaW1tID0gX18gam5lKCk7Ci0gICAgICAgIGlm
ICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBzcmMxKTsKLSAgICAgICAgICAg
IF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihudW1iZXJTdHJ1Y3R1cmUp
LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyAoMSkgSW4gdGhpcyBjYXNlIHNyYzEgaXMgYSByZXVzYWJsZSBu
dW1iZXIgY2VsbC4KLSAgICAgICAgLy8gICAgIFNsb3cgY2FzZSBpZiBzcmMyIGlzIG5vdCBhIG51
bWJlciB0eXBlLgotICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBl
SW50ZWdlciwgWDg2OjplZHgpOwotICAgICAgICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7Ci0g
ICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVkeCwgaSwgc3JjMik7Ci0g
ICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVy
U3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCk7
Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwg
aSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMiBp
cyBhbHNvIGEgbnVtYmVyIGNlbGwKLSAgICAgICAgX18gbW92c2RfbXIoRklFTERfT0ZGU0VUKEpT
TnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTEpOwotICAgICAgICBKbXBT
cmMgbG9hZGVkRG91YmxlID0gX18gam1wKCk7Ci0gICAgICAgIC8vICgxYikgaWYgd2UgZ2V0IGhl
cmUsIHNyYzIgaXMgYW4gaW1tZWRpYXRlCi0gICAgICAgIF9fIGxpbmsob3AyaW1tLCBfXyBsYWJl
bCgpKTsKLSAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWR4KTsKLSAgICAgICAg
X18gY3Z0c2kyc2RfcnIoWDg2OjplZHgsIFg4Njo6eG1tMSk7Ci0gICAgICAgIC8vICgxYykgCi0g
ICAgICAgIF9fIGxpbmsobG9hZGVkRG91YmxlLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgX18gbW92
c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4LCBYODY6
OnhtbTApOwotICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKQotICAgICAgICAgICAgX18g
YWRkc2RfcnIoWDg2Ojp4bW0xLCBYODY6OnhtbTApOwotICAgICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9zdWIpCi0gICAgICAgICAgICBfXyBzdWJzZF9ycihYODY6OnhtbTEsIFg4Njo6eG1t
MCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX211
bCk7Ci0gICAgICAgICAgICBfXyBtdWxzZF9ycihYODY6OnhtbTEsIFg4Njo6eG1tMCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgX18gbW92c2Rfcm0oWDg2Ojp4bW0wLCBGSUVMRF9PRkZTRVQoSlNOdW1i
ZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0KLSAgICAgICAgcHV0RG91YmxlUmVzdWx0VG9KU051bWJlckNlbGxPckpTSW1t
ZWRpYXRlKFg4Njo6eG1tMCwgWDg2OjplYXgsIGRzdCwgJndhc0pTTnVtYmVyQ2VsbDEsIFg4Njo6
eG1tMSwgWDg2OjplY3gsIFg4Njo6ZWR4KTsKLSAgICAgICAgd2FzSlNOdW1iZXJDZWxsMWIgPSBf
XyBqbXAoKTsKLQotICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIHNyYzEg
aXMgYW4gaW1tZWRpYXRlIG51bWJlci4KLSAgICAgICAgLy8gICAgIFR3byBzbG93IGNhc2VzIC0g
ZWl0aGVyIHNyYzIgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUgc3VidHJhY3Qgb3ZlcmZsb3dz
LgotICAgICAgICBfXyBsaW5rKG9wMWltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKLQotICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpIHsKLSAgICAgICAgZW1pdEZhc3RBcml0aERlVGFnSW1t
ZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgX18gYWRkbF9ycihYODY6OmVkeCwgWDg2OjplYXgp
OwotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7
Ci0gICAgfSBlbHNlICBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKSB7Ci0gICAgICAgIF9fIHN1Ymxf
cnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlh
dGUoWDg2OjplYXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9tdWwpOwotICAgICAgICAvLyBjb252ZXJ0IGVheCAmIGVkeCBmcm9tIEpTSW1tZWRpYXRlcyB0
byBpbnRzLCBhbmQgY2hlY2sgaWYgZWl0aGVyIGFyZSB6ZXJvCi0gICAgICAgIGVtaXRGYXN0QXJp
dGhJbW1Ub0ludChYODY6OmVkeCk7Ci0gICAgICAgIEptcFNyYyBvcDFaZXJvID0gZW1pdEZhc3RB
cml0aERlVGFnSW1tZWRpYXRlSnVtcElmWmVybyhYODY6OmVheCk7Ci0gICAgICAgIF9fIHRlc3Rs
X3JyKFg4Njo6ZWR4LCBYODY6OmVkeCk7Ci0gICAgICAgIEptcFNyYyBvcDJOb25aZXJvID0gX18g
am5lKCk7Ci0gICAgICAgIF9fIGxpbmsob3AxWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAgIC8v
IGlmIGVpdGhlciBpbnB1dCBpcyB6ZXJvLCBhZGQgdGhlIHR3byB0b2dldGhlciwgYW5kIGNoZWNr
IGlmIHRoZSByZXN1bHQgaXMgPCAwLgotICAgICAgICAvLyBJZiBpdCBpcywgd2UgaGF2ZSBhIHBy
b2JsZW0gKE4gPCAwKSwgKE4gKiAwKSA9PSAtMCwgbm90IHJlcHJlc2VudGF0YmxlIGFzIGEgSlNJ
bW1lZGlhdGUuIAotICAgICAgICBfXyBtb3ZsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAg
ICAgIF9fIGFkZGxfcnIoWDg2OjplZHgsIFg4Njo6ZWN4KTsKLSAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoX18ganMoKSwgaSkpOwotICAgICAgICAvLyBTa2lwIHRoZSBh
Ym92ZSBjaGVjayBpZiBuZWl0aGVyIGlucHV0IGlzIHplcm8KLSAgICAgICAgX18gbGluayhvcDJO
b25aZXJvLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgX18gaW11bGxfcnIoWDg2OjplZHgsIFg4Njo6
ZWF4KTsKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwg
aSkpOwotICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAg
IH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KLSAgICBpZiAodHlwZXMuc2Vj
b25kKCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAgICAgICBfXyBsaW5r
KHdhc0pTTnVtYmVyQ2VsbDIsIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyBsaW5rKHdhc0pTTnVt
YmVyQ2VsbDJiLCBfXyBsYWJlbCgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZXMuZmlyc3Qo
KS5pc1JldXNhYmxlKCkgJiYgaXNTU0UyUHJlc2VudCgpKSB7Ci0gICAgICAgIF9fIGxpbmsod2Fz
SlNOdW1iZXJDZWxsMSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIF9fIGxpbmsod2FzSlNOdW1iZXJD
ZWxsMWIsIF9fIGxhYmVsKCkpOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlB
cml0aE9wU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGRzdCwgdW5zaWduZWQgc3JjMSwgdW5zaWduZWQgc3Jj
MiwgT3BlcmFuZFR5cGVzIHR5cGVzLCB1bnNpZ25lZCBpKQotewotICAgIEptcERzdCBoZXJlID0g
X18gbGFiZWwoKTsKLSAgICBfXyBsaW5rKGl0ZXItPmZyb20sIGhlcmUpOwotICAgIGlmICh0eXBl
cy5zZWNvbmQoKS5pc1JldXNhYmxlKCkgJiYgaXNTU0UyUHJlc2VudCgpKSB7Ci0gICAgICAgIGlm
ICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgaWYg
KGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMSkpCi0gICAgICAgICAgICAgICAg
KytpdGVyOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7Ci0g
ICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoKytpdGVyLCBzcmMyKSkKLSAg
ICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIGhl
cmUpOwotICAgICAgICB9Ci0gICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIGhlcmUpOwot
ICAgIH0gZWxzZSBpZiAodHlwZXMuZmlyc3QoKS5pc1JldXNhYmxlKCkgJiYgaXNTU0UyUHJlc2Vu
dCgpKSB7Ci0gICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkg
ewotICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMSkp
Ci0gICAgICAgICAgICAgICAgKytpdGVyOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9t
LCBoZXJlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRl
bHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
KytpdGVyLCBzcmMyKSkKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBs
aW5rKGl0ZXItPmZyb20sIGhlcmUpOwotICAgICAgICB9Ci0gICAgICAgIF9fIGxpbmsoKCsraXRl
ciktPmZyb20sIGhlcmUpOwotICAgIH0gZWxzZQotICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5m
cm9tLCBoZXJlKTsKLQotICAgIC8vIGFkZGl0aW9uYWwgZW50cnkgcG9pbnQgdG8gaGFuZGxlIC0w
IGNhc2VzLgotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9tdWwpCi0gICAgICAgIF9fIGxpbmsoKCsr
aXRlciktPmZyb20sIGhlcmUpOwotCi0gICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKQotICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7Ci0gICAgZWxzZSBp
ZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKQotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX3N1Yik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9tdWwpOwotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX211bCk7
Ci0gICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKQEAgLTY5Niw2MiArNDIxLDEy
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICAv
LyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQg
dGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgICAgICAgICAgLy8g
dG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3Rl
cnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgICAgICAgICAvLyBz
dWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRp
c3RhbmNlIGZyb20gdGhpcy4KLQotICAgICAgICAgICAgaW50IGJhc2VWUmVnID0gaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJhc2VWUmVnLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2Ojpl
ZHgsIGkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJbmRl
eCA9PSBpKTsKLQotICAgICAgICAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIg
dGhlIGJhc2Ugb2JqZWN0IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2Vz
IG5vdCBtYXRjaC4KLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6
OmVheCwgaSwgYmFzZVZSZWcpOwotCi0gICAgICAgICAgICBKbXBEc3QgaG90UGF0aEJlZ2luID0g
X18gbGFiZWwoKTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9b
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVn
aW47Ci0gICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKLQotICAg
ICAgICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlv
biBwbGFudHMgYSAzMmJpdCBpbW1lZGlhdGUsIGluIG9yZGVyIHRoYXQgaXQgY2FuIGJlIHBhdGNo
ZWQgb3Zlci4KLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJZERlZmF1bHRT
dHJ1Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOwot
ICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJl
bHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVj
dHVyZSk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBq
bmUoKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBQbGFudCBhIGxvYWQgZnJvbSBhIGJvZ3VzIG9m
c2V0IGluIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBtYXA7IHdlIHdpbGwgcGF0Y2ggdGhpcyBsYXRl
ciwgaWYgaXQgaXMgdG8gYmUgdXNlZC4KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCByZXBhdGNoR2V0QnlJZERlZmF1bHRPZmZz
ZXQsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZl
cmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9m
ZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7Ci0KKyAgICAgICAgICAgIGNvbXBpbGVQdXRC
eUlkSG90UGF0aChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSksIGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIGksIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrKTsKICAg
ICAgICAgICAgIGkgKz0gODsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkOiB7Ci0gICAgICAgICAgICAvLyBBcyBmb3IgcHV0X2J5X2lkLCBn
ZXRfYnlfaWQgcmVxdWlyZXMgdGhlIG9mZnNldCBvZiB0aGUgU3RydWN0dXJlIGFuZCB0aGUgb2Zm
c2V0IG9mIHRoZSBhY2Nlc3MgdG8gYmUgcmVwYXRjaGVkLgotICAgICAgICAgICAgLy8gQWRkaXRp
b25hbGx5LCBmb3IgZ2V0X2J5X2lkIHdlIG5lZWQgcmVwYXRjaCB0aGUgb2Zmc2V0IG9mIHRoZSBi
cmFuY2ggdG8gdGhlIHNsb3cgY2FzZSAod2UgcmVwYXRjaCB0aGlzIHRvIGp1bXAKLSAgICAgICAg
ICAgIC8vIHRvIGFycmF5LWxlbmd0aCAvIHByb3RvdHlwZSBhY2Nlc3MgdHJhbnBvbGluZXMsIGFu
ZCBmaW5hbGx5IHdlIGFsc28gdGhlIHRoZSBwcm9wZXJ0eS1tYXAgYWNjZXNzIG9mZnNldCBhcyBh
IGxhYmVsCi0gICAgICAgICAgICAvLyB0byBqdW1wIGJhY2sgdG8gaWYgb25lIG9mIHRoZXNlIHRy
YW1wb2xpZXMgZmluZHMgYSBtYXRjaC4KLQotICAgICAgICAgICAgaW50IGJhc2VWUmVnID0gaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uSW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZSZWcpOwotCi0gICAgICAgICAgICBK
bXBEc3QgaG90UGF0aEJlZ2luID0gX18gbGFiZWwoKTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlB
Y2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ob3RQ
YXRoQmVnaW4gPSBob3RQYXRoQmVnaW47Ci0gICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25JbmRleDsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlcGF0Y2hHZXRCeUlk
RGVmYXVsdFN0cnVjdHVyZSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0
d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRHZXRC
eUlkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXRE
aWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKHJlcGF0Y2hHZXRCeUlkRGVmYXVsdE9m
ZnNldCwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJs
ZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkg
PT0gcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotCisg
ICAgICAgICAgICBjb21waWxlR2V0QnlJZEhvdFBhdGgoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pLCBpLCBwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXgrKyk7CiAgICAgICAgICAgICBpICs9IDg7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMTk4Miw1MCArMTY1NywxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgICAg
ICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwot
Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWR4LCA4KTsKLSAgICAgICAgICAgIEptcFNyYyBjYWxsID0gZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWQpOwotCi0gICAgICAgICAgICAvLyBU
cmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292
ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
XS5ieXRlY29kZUluZGV4ID09IGkpOwotICAgICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBp
bGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2Nh
dGlvbiA9IGNhbGw7Ci0gICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRl
eDsKLQorICAgICAgICAgICAgY29tcGlsZVB1dEJ5SWRTbG93Q2FzZShpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kXSksIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIGksIGl0ZXIsIHBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrKTsKICAgICAgICAgICAgIGkgKz0gODsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7
Ci0gICAgICAgICAgICAvLyBBcyBmb3IgdGhlIGhvdCBwYXRoIG9mIGdldF9ieV9pZCwgYWJvdmUs
IHdlIGVuc3VyZSB0aGF0IHdlIGNhbiB1c2UgYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9mZnNl
dAotICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBvbmx5IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIg
aW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0cmFjayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0
aW9uCi0gICAgICAgICAgICAvLyBvZiB0aGUgY2FsbCAod2hpY2ggd2UgY2FuIHVzZSB0byBsb29r
IHVwIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uKSwgYnV0IHNob3VsZCBhIGFycmF5LWxlbmd0aCBv
cgotICAgICAgICAgICAgLy8gcHJvdG90eXBlIGFjY2VzcyB0cmFtcG9saW5lIGZhaWwgd2Ugd2Fu
dCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBUbyBkbyBzbyB3ZSBjYW4gc3VidHJhY3QgYmFj
awotICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGZyb20gdGhlIGNhbGwgdG8gdGhlIGhlYWQg
b2YgdGhlIHNsb3cgY2FzZS4KLQotICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKGl0ZXIsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBKbXBEc3QgY29sZFBhdGhCZWdpbiA9IF9fIGxh
YmVsKCk7Ci0jZW5kaWYgICAgICAgIAotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVh
eCwgMCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQp
OwotICAgICAgICAgICAgSm1wU3JjIGNhbGwgPSBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX2dldF9ieV9pZCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXRE
aWZmZXJlbmNlQmV0d2VlbkxhYmVscyhjb2xkUGF0aEJlZ2luLCBjYWxsKSA9PSByZXBhdGNoT2Zm
c2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotCi0gICAgICAgICAgICAvLyBUcmFj
ayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIg
cmVwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5i
eXRlY29kZUluZGV4ID09IGkpOwotICAgICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0
aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IGNhbGw7Ci0gICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsK
LQorICAgICAgICAgICAgY29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kXSksIGksIGl0ZXIsIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrKTsKICAgICAgICAgICAgIGkgKz0gODsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNDQ5LDQ0MCArMjA4Niw2IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZSgpCiAgICAgbV9jb2RlQmxvY2stPmN0aUNvZGUgPSBjb2RlOwogfQog
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICAvLyBD
aGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVz
dGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBmYWls
dXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0
cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEg
LSBnZXREaXJlY3RPZmZzZXQKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwg
bV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIo
Y2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAg
ICBfXyByZXQoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0g
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKLSAgICAK
LSAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUg
PSBjb2RlOwotICAgIAotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFk
ZHJlc3MsIGNvZGUpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8o
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBzaXpl
X3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSNpZiBVU0UoQ1RJX1JFUEFUQ0hfUElDKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBp
bmZvID0gbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRv
IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6
Y3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7Ci0KLSAgICAvLyBUaGUgcHJvdG90eXBlIG9i
amVjdCBkZWZpbml0ZWx5IGV4aXN0cyAoaWYgdGhpcyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2Nr
IGlzIHJlZmVyZW5jaW5nIGEgU3RydWN0dXJlIHRoYXQgaXMKLSAgICAvLyByZWZlcmVuY2luZyB0
aGUgcHJvdG90eXBlIG9iamVjdCAtIGxldCdzIHNwZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxl
IG5pY2UgYW5kIGVhcmx5ISkKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChz
dHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICBQcm9wZXJ0eVN0
b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3Rv
cmFnZTsKLSAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3Rv
cmFnZSksIFg4Njo6ZWR4KTsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhl
IHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0
dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBv
YmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgIFN0cnVjdHVyZSoqIHByb3Rv
dHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7Ci0gICAg
X18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVy
ZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMy
ID0gX18gam5lKCk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0
Ci0gICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVk
eCwgWDg2OjplYXgpOwotCi0gICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZv
aWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNo
IGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2lu
YWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgdm9pZCogc2xvd0Nhc2VCZWdpbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGluZm8uY2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRH
ZXRCeUlkU2xvd0Nhc2VDYWxsOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJl
Q2FzZXMxLCBzbG93Q2FzZUJlZ2luKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFp
bHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBi
YWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhl
IHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdl
dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3Vj
Y2VzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIC8vIFRy
YWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBs
YXRlci4KLSAgICBpbmZvLnN0dWJSb3V0aW5lID0gY29kZTsKLQotICAgIC8vIEZpbmFsbHkgcmVw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0
PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5j
aFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExv
Y2F0aW9uLCBjb2RlKTsKLSNlbHNlCi0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5p
dGVseSBleGlzdHMgKGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVu
Y2luZyBhIFN0cnVjdHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlw
ZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBl
YXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBwcm90
b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAg
X18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6
OmVkeCk7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1
Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgp
OwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1
cmVDYXNlczIgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8v
IENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4K
LSAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVj
dC0+bV9zdHJ1Y3R1cmUpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAg
ICBKbXBTcmMgZmFpbHVyZUNhc2VzMyA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBv
a2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6
ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKLQotICAgIF9fIHJldCgpOwotCi0g
ICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnBy
ZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLQotICAgIG1fY29kZUJsb2NrLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICBjdGlS
ZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLSNlbmRpZgot
fQotCi0jaWYgVVNFKENUSV9SRVBBVENIX1BJQykKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRTZWxmTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCkKLXsKLSAgICBKbXBT
cmMgZmFpbHVyZUNhc2UgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLSAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBY
ODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9m
KEpTVmFsdWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgc3VjY2VzcyA9IF9f
IGptcCgpOwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0gICAgQVNT
RVJUKGNvZGUpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
Ci0gICAgdm9pZCogbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Ci0gICAgaWYgKCFsYXN0UHJvdG9CZWdpbikK
LSAgICAgICAgbGFzdFByb3RvQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdHViSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxs
OwotCi0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlLCBsYXN0UHJvdG9C
ZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2gg
Y29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVz
LgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
c3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFw
T2Zmc2V0OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOwotCi0gICAgc3RydWN0dXJlLT5yZWYoKTsKLSAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FjaGVkT2Zm
c2V0LCBjb2RlLCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
LSAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dD
YXNlOwotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwg
Y29kZSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVm
aW5pdGVseSBleGlzdHMgKGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZl
cmVuY2luZyBhIFN0cnVjdHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3Rv
dHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFu
ZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBw
cm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0g
ICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBY
ODY6OmVkeCk7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBT
dHJ1Y3R1cmUuCi0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShYODY6
OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3Mg
U3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1
Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOwotICAgIF9fIGNtcGxf
aTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90
b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGpu
ZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIF9f
IG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6
ZWF4KTsKLQotICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBjb2Rl
ID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1h
dGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cg
Y2FzZSByb3V0aW5lLgotICAgIHZvaWQqIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKLSAgICBYODZBc3NlbWJs
ZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwotICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0
cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhv
dFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihzdWNjZXNzRGVzdCkpOwotCi0gICAgc3RydWN0dXJlLT5yZWYoKTsKLSAgICBwcm90b3R5cGVT
dHJ1Y3R1cmUtPnJlZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudElu
ZGV4XS5zZXQoY2FjaGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVy
ZSk7Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExv
Y2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdp
bikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1i
bGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKLX0KLQotdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJl
cywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKLXsKLSAgICBBU1NFUlQoY291bnQpOwotICAgIAotICAgIFZlY3RvcjxKbXBTcmM+
IGJ1Y2tldHNPZkZhaWw7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSBy
aWdodCBTdHJ1Y3R1cmUuCi0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUo
WDg2OjplYXgsIHN0cnVjdHVyZSkpOwotCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0g
c3RydWN0dXJlOwotICAgIFJlZlB0cjxTdHJ1Y3R1cmU+KiBjaGFpbkVudHJpZXMgPSBjaGFpbi0+
aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVj
dChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAg
IGN1cnJTdHJ1Y3R1cmUgPSBjaGFpbkVudHJpZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgLy8gQ2hl
Y2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAg
ICAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVj
dC0+bV9zdHJ1Y3R1cmUpOwotICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oY3VyclN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOwotICAg
ICAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgfQotICAgIEFTU0VSVChw
cm90b09iamVjdCk7Ci0KLSAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdl
ID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBfXyBtb3ZsX21yKHN0YXRp
Y19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKLSAgICBfXyBt
b3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVh
eCk7Ci0gICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBf
XyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9u
IHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNl
IHJvdXRpbmUuCi0gICAgdm9pZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1Y2tldHNPZkZhaWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBidWNrZXRzT2ZGYWlsW2ldLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0
cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhv
dFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihzdWNjZXNzRGVzdCkpOwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0cnVjdHVyZS0+cmVmKCk7
Ci0gICAgY2hhaW4tPnJlZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4XS5zZXQoY2FjaGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIGNoYWluKTsKLQotICAg
IC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0
Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOwotfQotI2VuZGlmCi0KLXZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQq
IHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotI2lmIFVTRShDVElfUkVQ
QVRDSF9QSUMpCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0
Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljLgotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3QpKTsKLQotICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNyYz4g
YnVja2V0c09mRmFpbDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJp
Z2h0IFN0cnVjdHVyZS4KLSAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShY
ODY6OmVheCwgc3RydWN0dXJlKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7Ci0gICAgUmVmUHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5o
ZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0
KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAg
Y3VyclN0cnVjdHVyZSA9IGNoYWluRW50cmllc1tpXS5nZXQoKTsKLQotICAgICAgICAvLyBDaGVj
ayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCi0gICAg
ICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0
LT5tX3N0cnVjdHVyZSk7Ci0gICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVp
bnQzMl90PihjdXJyU3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7Ci0gICAg
ICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICB9Ci0gICAgQVNTRVJUKHBy
b3RvT2JqZWN0KTsKLQotICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2Ug
PSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOwotICAgIF9fIG1vdmxfbXIoc3RhdGlj
X2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwotICAgIF9fIG1v
dmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4
KTsKLSAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAgdm9pZCogY29kZSA9IF9f
IGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KLSAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGw7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVja2V0c09mRmFpbC5zaXpl
KCk7ICsraSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxb
aV0sIHNsb3dDYXNlQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KLSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJv
cGVydHlNYXBPZmZzZXQ7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7Ci0KLSAgICAvLyBUcmFjayB0aGUg
c3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0g
ICAgaW5mby5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgotICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dD
YXNlOwotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwg
Y29kZSk7Ci0jZWxzZQotICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNy
Yz4gYnVja2V0c09mRmFpbDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhl
IHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNr
LCBYODY6OmVheCk7Ci0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoX18gam5lKCkpOwotICAgIGJ1
Y2tldHNPZkZhaWwuYXBwZW5kKGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpKTsK
LQotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBSZWZQdHI8
U3RydWN0dXJlPiogY2hhaW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKLSAgICBKU09iamVjdCog
cHJvdG9PYmplY3QgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90
eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICBjdXJyU3RydWN0dXJlID0gY2hhaW5F
bnRyaWVzW2ldLmdldCgpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0
J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICAgICAgU3RydWN0dXJlKiogcHJvdG90
eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKLSAgICAg
ICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1Y3R1cmUp
LCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICAgICAgYnVja2V0c09mRmFpbC5hcHBl
bmQoX18gam5lKCkpOwotICAgIH0KLSAgICBBU1NFUlQocHJvdG9PYmplY3QpOwotCi0gICAgUHJv
cGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9w
ZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9w
ZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7Ci0gICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBz
aXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOwotICAgIF9fIHJldCgpOwotCi0g
ICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnVja2V0c09mRmFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxbaV0sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLQotICAgIG1fY29k
ZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0K
LSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsK
LSNlbmRpZgotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkUmVwbGFjZShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVz
cykKLXsKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1
cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwot
ICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVD
YXNlczIgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIGNo
ZWNrcyBvdXQgb2theSEgLSBwdXREaXJlY3RPZmZzZXQKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwot
ICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiks
IFg4Njo6ZWF4KTsKLSAgICBfXyByZXQoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRh
YmxlQ29weSgpOwotICAgIAotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2Fz
ZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9p
ZF9mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwp
KTsKLQotICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91
dGluZSA9IGNvZGU7Ci0gICAgCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0
dXJuQWRkcmVzcywgY29kZSk7Ci19Ci0KLWV4dGVybiAiQyIgewotCi0gICAgc3RhdGljIEpTT2Jq
ZWN0KiByZXNpemVQcm9wZXJ0eVN0b3JhZ2UoSlNPYmplY3QqIGJhc2VPYmplY3QsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIGJhc2VPYmplY3QtPmFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlSW5saW5lKG9sZFNpemUsIG5ld1NpemUpOwotICAgICAgICByZXR1
cm4gYmFzZU9iamVjdDsKLSAgICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBib29sIHRyYW5zaXRp
b25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSkKLXsKLSAgICByZXR1cm4gb2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0
b3JhZ2VDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHko
KTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBzaXplX3QgY2FjaGVk
T2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0g
ICAgVmVjdG9yPEptcFNyYywgMTY+IGZhaWx1cmVDYXNlczsKLSAgICAvLyBDaGVjayBlYXggaXMg
YW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18g
am5lKCkpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihvbGRT
dHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsK
LSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBWZWN0b3I8Sm1wU3JjPiBz
dWNjZXNzQ2FzZXM7Ci0KLSAgICAvLyAgZWN4ID0gYmFzZU9iamVjdAotICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgIC8vIHByb3RvKGVjeCkgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlKCkK
LSAgICBfXyBjbXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90
eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChTdHJ1Y3R1cmUsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAK
LSAgICAvLyBlY3ggPSBiYXNlT2JqZWN0LT5tX3N0cnVjdHVyZQotICAgIGZvciAoUmVmUHRyPFN0
cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgIC8vIG51
bGwgY2hlY2sgdGhlIHByb3RvdHlwZQotICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKGpz
TnVsbCgpKSwgWDg2OjplY3gpOwotICAgICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKF9fIGplKCkp
OwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUgaWQKLSAgICAgICAgX18gY21wbF9p
MzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGl0LT5nZXQoKSksIEZJRUxEX09GRlNFVChK
U0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplY3gpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKF9fIGpuZSgpKTsKLSAgICAgICAgCi0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgICAgICBfXyBj
bXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykg
KyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKFN0cnVjdHVyZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIH0K
LQotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdWNjZXNzQ2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIF9fIGxpbmsoc3Vj
Y2Vzc0Nhc2VzW2ldLCBfXyBsYWJlbCgpKTsKLQotICAgIEptcFNyYyBjYWxsVGFyZ2V0OwotCi0g
ICAgLy8gZW1pdCBhIGNhbGwgb25seSBpZiBzdG9yYWdlIHJlYWxsb2MgaXMgbmVlZGVkCi0gICAg
aWYgKHRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3Ry
dWN0dXJlKSkgewotICAgICAgICBfXyBwdXNobF9yKFg4Njo6ZWR4KTsKLSAgICAgICAgX18gcHVz
aGxfaTMyKG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IF9fIHB1c2hsX2kzMihvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOwot
ICAgICAgICBfXyBwdXNobF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgY2FsbFRhcmdldCA9IF9fIGNh
bGwoKTsKLSAgICAgICAgX18gYWRkbF9pMzJyKDMgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7
Ci0gICAgICAgIF9fIHBvcGxfcihYODY6OmVkeCk7Ci0gICAgfQotCi0gICAgLy8gQXNzdW1lcyBt
X3JlZkNvdW50IGNhbiBiZSBkZWNyZW1lbnRlZCBlYXNpbHksIHJlZmNvdW50IGRlY3JlbWVudCBp
cyBzYWZlIGFzIAotICAgIC8vIGNvZGVibG9jayBzaG91bGQgZW5zdXJlIG9sZFN0cnVjdHVyZS0+
bV9yZWZDb3VudCA+IDAKLSAgICBfXyBzdWJsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihvbGRTdHJ1Y3R1cmUpKTsKLSAgICBfXyBhZGRsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihuZXdTdHJ1Y3R1cmUpKTsKLSAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4obmV3U3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
LCBYODY6OmVheCk7Ci0KLSAgICAvLyB3cml0ZSB0aGUgdmFsdWUKLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2Ojpl
YXgpOwotICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1Zh
bHVlKiksIFg4Njo6ZWF4KTsKLQotICAgIF9fIHJldCgpOwotICAgIAotICAgIEptcFNyYyBmYWls
dXJlSnVtcDsKLSAgICBpZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZmFpbHVyZUNhc2VzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
X18gbGluayhmYWlsdXJlQ2FzZXNbaV0sIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7Ci0gICAgICAgIGZhaWx1cmVKdW1wID0g
X18gam1wKCk7Ci0gICAgfQotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7
Ci0KLSAgICBpZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGZhaWx1cmVKdW1wLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRl
cjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7Ci0KLSAgICBpZiAodHJhbnNpdGlvbldpbGxOZWVk
U3RvcmFnZVJlYWxsb2Mob2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKQotICAgICAgICBYODZB
c3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVzaXplUHJvcGVydHlTdG9yYWdlKSk7Ci0gICAgCi0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJ
bmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKLSAgICAKLSAgICBjdGlSZXBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLX0KLQogdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKCkKIHsKICAgICAvLyAoMSkg
VGhlIGZpcnN0IGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBhcnJh
eSBsZW5ndGgKQEAgLTMwODIsNzQgKzIyODUsNiBAQCB2b2lkIEpJVDo6ZnJlZUNUSU1hY2hpbmVU
cmFtcG9saW5lcyhJbnRlCiAgICAgV1RGOjpmYXN0RnJlZUV4ZWN1dGFibGUoaW50ZXJwcmV0ZXIt
Pm1fY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lKTsKIH0KIAotdm9pZCBKSVQ6OnBhdGNoR2V0QnlJ
ZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
Y2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQotewotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBpbmZvID0gY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLQotICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBn
byB0byBjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMuCi0gICAgLy8gU2hvdWxkIHByb2JhYmx5IGdv
IHRvIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3Qg
ZG8gYW55dGhpbmcgaW50ZXJlc3RpbmcgcmlnaHQgbm93LgotICAgIGN0aVJlcGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotCi0gICAgLy8gUmVwYXRjaCB0
aGUgb2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHJlcGF0
Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4KLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hE
aXNwbGFjZW1lbnQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4p
ICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCwgY2FjaGVkT2Zmc2V0ICog
c2l6ZW9mKEpTVmFsdWUqKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoSW1tZWRpYXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZz
ZXRHZXRCeUlkU3RydWN0dXJlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUp
KTsKLX0KLQotdm9pZCBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1
cm5BZGRyZXNzKQotewotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9p
ZF9nZW5lcmljLgotICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBJbnRlcnByZXRlcjo6Y3Rp
X29wX3B1dF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nIGludGVyZXN0
aW5nIHJpZ2h0IG5vdy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5B
ZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9i
eV9pZF9nZW5lcmljKSk7Ci0KLSAgICAvLyBSZXBhdGNoIHRoZSBvZmZzZXQgaW50byB0aGUgcHJv
cG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0aGUgU3RydWN0dXJlIHRvIGxv
b2sgZm9yLgotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3BsYWNlbWVudChyZWludGVycHJl
dF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0UHV0QnlJ
ZFByb3BlcnR5TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKTsKLSAg
ICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUsIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOwotfQotCi12b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0g
ICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0
dXJuQWRkcmVzcyk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFu
IG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIGN0
aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKLQot
ICAgIC8vIENoZWNrIGVheCBpcyBhbiBhcnJheQotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgp
OwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0KLSAgICAvLyBDaGVja3Mg
b3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7
Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCksIFg4
Njo6ZWN4LCBYODY6OmVjeCk7Ci0KLSAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6Om1heElt
bWVkaWF0ZUludCwgWDg2OjplY3gpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gamEo
KTsKLQotICAgIF9fIGFkZGxfcnIoWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICBfXyBhZGRsX2k4
cigxLCBYODY6OmVjeCk7Ci0gICAgX18gbW92bF9ycihYODY6OmVjeCwgWDg2OjplYXgpOwotICAg
IEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0
YWJsZUNvcHkoKTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5r
IHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5l
LgotICAgIHZvaWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsK
LSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgc2xvd0Nhc2VCZWdp
bik7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHNsb3dDYXNl
QmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNo
IGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1
cy4KLSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZz
ZXQ7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7Ci0KLSAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZl
IGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgbV9jb2RlQmxv
Y2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKLQotICAg
IC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzb3cgY2FzZSBiYWNrIGluIHRoZSBob3Qg
cGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZz
ZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFu
Y2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOwotfQotCiB2b2lkIEpJVDo6ZW1pdEdldFZhcmlh
YmxlT2JqZWN0UmVnaXN0ZXIoUmVnaXN0ZXJJRCB2YXJpYWJsZU9iamVjdCwgaW50IGluZGV4LCBS
ZWdpc3RlcklEIGRzdCkKIHsKICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU1ZhcmlhYmxl
T2JqZWN0LCBkKSwgdmFyaWFibGVPYmplY3QsIGRzdCk7CkluZGV4OiBqaXQvSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaml0L0pJVC5oCShyZXZpc2lvbiAzODk5MCkKKysrIGppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzkyLDYgKzM5MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcygpOwogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCh2b2lkKiByZXR1cm5BZGRyZXNzKTsKIAor
ICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgcmVzdWx0VlJlZywgaW50IGJh
c2VWUmVnLCBJZGVudGlmaWVyKiBpZGVudCwgdW5zaWduZWQgaSwgdW5zaWduZWQgcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbkluZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZFNsb3dD
YXNlKGludCByZXN1bHRWUmVnLCBpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqIGlkZW50LCB1bnNp
Z25lZCBpLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVQdXRC
eUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqIGlkZW50LCBpbnQgdmFsdWVWUmVn
LCB1bnNpZ25lZCBpLCB1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpOwor
ICAgICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkU2xvd0Nhc2UoaW50IGJhc2VWUmVnLCBJZGVudGlm
aWVyKiBpZGVudCwgaW50IHZhbHVlVlJlZywgdW5zaWduZWQgaSwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbklu
ZGV4KTsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKE9wY29kZUlELCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGksIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOwogICAgICAgICB2
b2lkIGNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IGppdC9KSVRB
cml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlz
aW9uIDM4OTg0KQkoZnJvbSBqaXQvSklULmNwcDozODk4NCkKKysrIGppdC9KSVRBcml0aG1ldGlj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpJVC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAi
UmVzdWx0VHlwZS5oIgorI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorCisjaWZuZGVmIE5ERUJV
RworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwor
bmFtZXNwYWNlIEpTQyB7CisKKyNpZiBQTEFURk9STShNQUMpCisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc1NTRTJQcmVzZW50KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsgLy8gQWxsIFg4NiBNYWNzIGFy
ZSBndWFyYW50ZWVkIHRvIHN1cHBvcnQgYXQgbGVhc3QgU1NFMgorfQorCisjZWxzZQorCitzdGF0
aWMgYm9vbCBpc1NTRTJQcmVzZW50KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IFNTRTJGZWF0
dXJlQml0ID0gMSA8PCAyNjsKKyAgICBzdHJ1Y3QgU1NFMkNoZWNrIHsKKyAgICAgICAgU1NFMkNo
ZWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZsYWdzOworI2lmIENPTVBJTEVSKE1T
VkMpCisgICAgICAgICAgICBfYXNtIHsKKyAgICAgICAgICAgICAgICBtb3YgZWF4LCAxIC8vIGNw
dWlkIGZ1bmN0aW9uIDEgZ2l2ZXMgdXMgdGhlIHN0YW5kYXJkIGZlYXR1cmUgc2V0CisgICAgICAg
ICAgICAgICAgY3B1aWQ7CisgICAgICAgICAgICAgICAgbW92IGZsYWdzLCBlZHg7CisgICAgICAg
ICAgICB9CisjZWxzZQorICAgICAgICAgICAgZmxhZ3MgPSAwOworICAgICAgICAgICAgLy8gRklY
TUU6IEFkZCBHQ0MgY29kZSB0byBkbyBhYm92ZSBhc20KKyNlbmRpZgorICAgICAgICAgICAgcHJl
c2VudCA9IChmbGFncyAmIFNTRTJGZWF0dXJlQml0KSAhPSAwOworICAgICAgICB9CisgICAgICAg
IGJvb2wgcHJlc2VudDsKKyAgICB9OworICAgIHN0YXRpYyBTU0UyQ2hlY2sgY2hlY2s7CisgICAg
cmV0dXJuIGNoZWNrLnByZXNlbnQ7Cit9CisKKyNlbmRpZgorCitDT01QSUxFX0FTU0VSVChDVElf
QVJHU19jb2RlID09IDB4QywgQ1RJX0FSR1NfY29kZV9pc19DKTsKK0NPTVBJTEVfQVNTRVJUKENU
SV9BUkdTX2NhbGxGcmFtZSA9PSAweEUsIENUSV9BUkdTX2NhbGxGcmFtZV9pc19FKTsKKworI2lm
IENPTVBJTEVSKEdDQykgJiYgUExBVEZPUk0oWDg2KQorCisjaWYgUExBVEZPUk0oREFSV0lOKQor
I2RlZmluZSBTWU1CT0xfU1RSSU5HKG5hbWUpICJfIiAjbmFtZQorI2Vsc2UKKyNkZWZpbmUgU1lN
Qk9MX1NUUklORyhuYW1lKSAjbmFtZQorI2VuZGlmCisKK2FzbSgKKyIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkg
IjoiICJcbiIKKyAgICAicHVzaGwgJWVzaSIgIlxuIgorICAgICJwdXNobCAlZWRpIiAiXG4iCisg
ICAgInB1c2hsICVlYngiICJcbiIKKyAgICAic3VibCAkMHgyMCwgJWVzcCIgIlxuIgorICAgICJt
b3ZsICQ1MTIsICVlc2kiICJcbiIKKyAgICAibW92bCAweDM4KCVlc3ApLCAlZWRpIiAiXG4iIC8v
IE94MzggPSAweDBFICogNCwgMHgwRSA9IENUSV9BUkdTX2NhbGxGcmFtZSAoc2VlIGFzc2VydGlv
biBhYm92ZSkKKyAgICAiY2FsbCAqMHgzMCglZXNwKSIgIlxuIiAvLyBPeDMwID0gMHgwQyAqIDQs
IDB4MEMgPSBDVElfQVJHU19jb2RlIChzZWUgYXNzZXJ0aW9uIGFib3ZlKQorICAgICJhZGRsICQw
eDIwLCAlZXNwIiAiXG4iCisgICAgInBvcGwgJWVieCIgIlxuIgorICAgICJwb3BsICVlZGkiICJc
biIKKyAgICAicG9wbCAlZXNpIiAiXG4iCisgICAgInJldCIgIlxuIgorKTsKKworYXNtKAorIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKK1NZTUJPTF9T
VFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAiXG4iCisjaWYgVVNFKENUSV9BUkdVTUVO
VCkKKyNpZiBVU0UoRkFTVF9DQUxMX0NUSV9BUkdVTUVOVCkKKyAgICAibW92bCAlZXNwLCAlZWN4
IiAiXG4iCisjZWxzZQorICAgICJtb3ZsICVlc3AsIDAoJWVzcCkiICJcbiIKKyNlbmRpZgorICAg
ICJjYWxsICIgU1lNQk9MX1NUUklORyhfWk4zSlNDMTFJbnRlcnByZXRlcjEyY3RpX3ZtX3Rocm93
RVBQdikgIlxuIgorI2Vsc2UKKyAgICAiY2FsbCAiIFNZTUJPTF9TVFJJTkcoX1pOM0pTQzExSW50
ZXJwcmV0ZXIxMmN0aV92bV90aHJvd0VQdnopICJcbiIKKyNlbmRpZgorICAgICJhZGRsICQweDIw
LCAlZXNwIiAiXG4iCisgICAgInBvcGwgJWVieCIgIlxuIgorICAgICJwb3BsICVlZGkiICJcbiIK
KyAgICAicG9wbCAlZXNpIiAiXG4iCisgICAgInJldCIgIlxuIgorKTsKKyAgICAKKyNlbGlmIENP
TVBJTEVSKE1TVkMpCisKK2V4dGVybiAiQyIgeworICAgIAorICAgIF9fZGVjbHNwZWMobmFrZWQp
IEpTVmFsdWUqIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZy
YW1lKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikKKyAg
ICB7CisgICAgICAgIF9fYXNtIHsKKyAgICAgICAgICAgIHB1c2ggZXNpOworICAgICAgICAgICAg
cHVzaCBlZGk7CisgICAgICAgICAgICBwdXNoIGVieDsKKyAgICAgICAgICAgIHN1YiBlc3AsIDB4
MjA7CisgICAgICAgICAgICBtb3YgZXNpLCA1MTI7CisgICAgICAgICAgICBtb3YgZWN4LCBlc3A7
CisgICAgICAgICAgICBtb3YgZWRpLCBbZXNwICsgMHgzOF07CisgICAgICAgICAgICBjYWxsIFtl
c3AgKyAweDMwXTsgLy8gT3gzMCA9IDB4MEMgKiA0LCAweDBDID0gQ1RJX0FSR1NfY29kZSAoc2Vl
IGFzc2VydGlvbiBhYm92ZSkKKyAgICAgICAgICAgIGFkZCBlc3AsIDB4MjA7CisgICAgICAgICAg
ICBwb3AgZWJ4OworICAgICAgICAgICAgcG9wIGVkaTsKKyAgICAgICAgICAgIHBvcCBlc2k7Cisg
ICAgICAgICAgICByZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgX19kZWNsc3BlYyhu
YWtlZCkgdm9pZCBjdGlWTVRocm93VHJhbXBvbGluZSgpCisgICAgeworICAgICAgICBfX2FzbSB7
CisgICAgICAgICAgICBtb3YgZWN4LCBlc3A7CisgICAgICAgICAgICBjYWxsIEpTQzo6SW50ZXJw
cmV0ZXI6OmN0aV92bV90aHJvdzsKKyAgICAgICAgICAgIGFkZCBlc3AsIDB4MjA7CisgICAgICAg
ICAgICBwb3AgZWJ4OworICAgICAgICAgICAgcG9wIGVkaTsKKyAgICAgICAgICAgIHBvcCBlc2k7
CisgICAgICAgICAgICByZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCit9CisKKyNlbmRpZgor
Cit2b2lkIGN0aVNldFJldHVybkFkZHJlc3Modm9pZCoqIHdoZXJlLCB2b2lkKiB3aGF0KQorewor
ICAgICp3aGVyZSA9IHdoYXQ7Cit9CisKK3ZvaWQgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJl
c3Modm9pZCogd2hlcmUsIHZvaWQqIHdoYXQpCit7CisgICAgKHN0YXRpY19jYXN0PHZvaWQqKj4o
d2hlcmUpKVstMV0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4od2hhdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4od2hlcmUpKTsKK30K
KworI2lmbmRlZiBOREVCVUcKKwordm9pZCBKSVQ6OnByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXMo
dW5zaWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMikKK3sKKyAgICBjaGFyIHdoaWNoMSA9ICcqJzsK
KyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzEpKSB7Cisg
ICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYzEpOwor
ICAgICAgICB3aGljaDEgPSAKKyAgICAgICAgICAgIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2
YWx1ZSkgPworICAgICAgICAgICAgICAgIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpID8g
J2knIDoKKyAgICAgICAgICAgICAgICBKU0ltbWVkaWF0ZTo6aXNCb29sZWFuKHZhbHVlKSA/ICdi
JyA6CisgICAgICAgICAgICAgICAgdmFsdWUtPmlzVW5kZWZpbmVkKCkgPyAndScgOgorICAgICAg
ICAgICAgICAgIHZhbHVlLT5pc051bGwoKSA/ICduJyA6ICc/JykKKyAgICAgICAgICAgICAgICA6
CisgICAgICAgICAgICAodmFsdWUtPmlzU3RyaW5nKCkgPyAncycgOgorICAgICAgICAgICAgdmFs
dWUtPmlzT2JqZWN0KCkgPyAnbycgOgorICAgICAgICAgICAgJ2snKTsKKyAgICB9CisgICAgY2hh
ciB3aGljaDIgPSAnKic7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChzcmMyKSkgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMyKTsKKyAgICAgICAgd2hpY2gyID0gCisgICAgICAgICAgICBKU0ltbWVkaWF0
ZTo6aXNJbW1lZGlhdGUodmFsdWUpID8KKyAgICAgICAgICAgICAgICAoSlNJbW1lZGlhdGU6Omlz
TnVtYmVyKHZhbHVlKSA/ICdpJyA6CisgICAgICAgICAgICAgICAgSlNJbW1lZGlhdGU6OmlzQm9v
bGVhbih2YWx1ZSkgPyAnYicgOgorICAgICAgICAgICAgICAgIHZhbHVlLT5pc1VuZGVmaW5lZCgp
ID8gJ3UnIDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+aXNOdWxsKCkgPyAnbicgOiAnPycpCisg
ICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgKHZhbHVlLT5pc1N0cmluZygpID8gJ3MnIDoK
KyAgICAgICAgICAgIHZhbHVlLT5pc09iamVjdCgpID8gJ28nIDoKKyAgICAgICAgICAgICdrJyk7
CisgICAgfQorICAgIGlmICgod2hpY2gxICE9ICcqJykgfCAod2hpY2gyICE9ICcqJykpCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiVHlwZXMgJWMgJWNcbiIsIHdoaWNoMSwgd2hpY2gyKTsKK30K
KworI2VuZGlmCisKK0pJVDo6SklUKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgOiBtX2ludGVycHJldGVyKGdsb2JhbERhdGEtPmludGVycHJldGVy
KQorICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCisgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9u
cy5zaXplKCkgOiAwKQorICAgICwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbyhjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSA6IDAp
CisgICAgLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvKGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCkgOiAwKQorICAgICwgbV9sYXN0UmVzdWx0Qnl0
ZWNvZGVSZWdpc3RlcihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICwgbV9q
dW1wVGFyZ2V0c1Bvc2l0aW9uKDApCit7Cit9CisKKyNkZWZpbmUgQ1RJX0NPTVBJTEVfQklOQVJZ
X09QKG5hbWUpIFwKKyAgICBjYXNlIG5hbWU6IHsgXAorICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVj
eCk7IFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCisgICAgICAgIGkgKz0gNDsg
XAorICAgICAgICBicmVhazsgXAorICAgIH0KKworI2RlZmluZSBDVElfQ09NUElMRV9VTkFSWV9P
UChuYW1lKSBcCisgICAgY2FzZSBuYW1lOiB7IFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21W
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gp
OyBcCisgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOyBcCisgICAgICAgIGkgKz0gMzsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwordm9p
ZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWdu
ZWQgaSwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit7CisgICAgYm9vbCBuZWdhdGVkID0g
KHR5cGUgPT0gT3BOU3RyaWN0RXEpOworCisgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVkeCwg
aSk7CisKKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7
CisgICAgSm1wU3JjIGZpcnN0Tm90SW1tZWRpYXRlID0gX18gamUoKTsKKyAgICBfXyB0ZXN0bF9p
MzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVkeCk7CisgICAgSm1wU3JjIHNlY29uZE5v
dEltbWVkaWF0ZSA9IF9fIGplKCk7CisKKyAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVh
eCk7CisgICAgaWYgKG5lZ2F0ZWQpCisgICAgICAgIF9fIHNldG5lX3IoWDg2OjplYXgpOworICAg
IGVsc2UKKyAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKKyAgICBfXyBtb3Z6YmxfcnIoWDg2
OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIAorICAgIEptcFNyYyBib3RoV2VyZUltbWVkaWF0ZXMgPSBfXyBqbXAoKTsK
KworICAgIF9fIGxpbmsoZmlyc3ROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworCisgICAgLy8g
Y2hlY2sgdGhhdCBlZHggaXMgaW1tZWRpYXRlIGJ1dCBub3QgdGhlIHplcm8gaW1tZWRpYXRlCisg
ICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplZHgpOworICAgIF9f
IHNldHpfcihYODY6OmVjeCk7CisgICAgX18gbW92emJsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7
IC8vIGVjeCBpcyBub3cgMSBpZiBlZHggd2FzIG5vbmltbWVkaWF0ZQorICAgIF9fIGNtcGxfaTMy
cihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKKyAg
ICBfXyBzZXRlX3IoWDg2OjplZHgpOworICAgIF9fIG1vdnpibF9ycihYODY6OmVkeCwgWDg2Ojpl
ZHgpOyAvLyBlZHggaXMgbm93IDEgaWYgZWR4IHdhcyB0aGUgMCBpbW1lZGlhdGUKKyAgICBfXyBv
cmxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKKworICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7CisKKyAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGpz
Qm9vbGVhbihuZWdhdGVkKSksIFg4Njo6ZWF4KTsKKworICAgIEptcFNyYyBmaXJzdFdhc05vdElt
bWVkaWF0ZSA9IF9fIGptcCgpOworCisgICAgX18gbGluayhzZWNvbmROb3RJbW1lZGlhdGUsIF9f
IGxhYmVsKCkpOworICAgIC8vIGNoZWNrIHRoYXQgZWF4IGlzIG5vdCB0aGUgemVybyBpbW1lZGlh
dGUgKHdlIGtub3cgaXQgbXVzdCBiZSBpbW1lZGlhdGUpCisgICAgX18gY21wbF9pMzJyKGFzSW50
ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsKKworICAgIF9fIG1vdmxf
aTMycihhc0ludGVnZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOworCisgICAgX18g
bGluayhib3RoV2VyZUltbWVkaWF0ZXMsIF9fIGxhYmVsKCkpOworICAgIF9fIGxpbmsoZmlyc3RX
YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNpZ25lZCBieXRl
Y29kZUluZGV4KQoreworICAgIF9fIHN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKKyAgICBKbXBTcmMg
c2tpcFRpbWVvdXQgPSBfXyBqbmUoKTsKKyAgICBlbWl0Q1RJQ2FsbChieXRlY29kZUluZGV4LCBJ
bnRlcnByZXRlcjo6Y3RpX3RpbWVvdXRfY2hlY2spOworCisgICAgZW1pdEdldENUSVBhcmFtKENU
SV9BUkdTX2dsb2JhbERhdGEsIFg4Njo6ZWN4KTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChKU0dsb2JhbERhdGEsIGludGVycHJldGVyKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChJbnRlcnByZXRlciwgbV90aWNrc1VudGlsTmV4dFRpbWVv
dXRDaGVjayksIFg4Njo6ZWN4LCBYODY6OmVzaSk7CisgICAgX18gbGluayhza2lwVGltZW91dCwg
X18gbGFiZWwoKSk7CisKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9CisKKy8qCisg
IFRoaXMgaXMgcmVxdWlyZWQgc2luY2UgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGlzIGNhbm9uaWNh
bCAtIHZhbHVlcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUgc2hvdWxkIG5vdCBiZSBz
dG9yZWQgaW4gYSBKU051bWJlckNlbGwuCisgIAorICBJbiB0aGUgY29tbW9uIGNhc2UsIHRoZSBk
b3VibGUgdmFsdWUgZnJvbSAneG1tU291cmNlJyBpcyB3cml0dGVuIHRvIHRoZSByZXVzYWJsZSBK
U051bWJlckNlbGwgcG9pbnRlZCB0byBieSAnanNOdW1iZXJDZWxsJywgdGhlbiAnanNOdW1iZXJD
ZWxsJworICBpcyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgU0YgUmVnaXN0ZXIgJ2RzdCcsIGFuZCB0
aGVuIGEganVtcCBpcyBwbGFudGVkIChzdG9yZWQgaW50byAqd3JvdGVKU051bWJlckNlbGwpLgor
ICAKKyAgSG93ZXZlciBpZiB0aGUgdmFsdWUgZnJvbSB4bW1Tb3VyY2UgaXMgcmVwcmVzZW50YWJs
ZSBhcyBhIEpTSW1tZWRpYXRlLCB0aGVuIHRoZSBKU0ltbWVkaWF0ZSB2YWx1ZSB3aWxsIGJlIHdy
aXR0ZW4gdG8gdGhlIG91dHB1dCwgYW5kIGZsb3cKKyAgY29udHJvbCB3aWxsIGZhbGwgdGhyb3Vn
aCBmcm9tIHRoZSBjb2RlIHBsYW50ZWQuCisqLwordm9pZCBKSVQ6OnB1dERvdWJsZVJlc3VsdFRv
SlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OlhNTVJlZ2lzdGVySUQgeG1tU291cmNlLCBY
ODY6OlJlZ2lzdGVySUQganNOdW1iZXJDZWxsLCB1bnNpZ25lZCBkc3QsIEptcFNyYyogd3JvdGVK
U051bWJlckNlbGwsICBYODY6OlhNTVJlZ2lzdGVySUQgdGVtcFhtbSwgWDg2OjpSZWdpc3RlcklE
IHRlbXBSZWcxLCBYODY6OlJlZ2lzdGVySUQgdGVtcFJlZzIpCit7CisgICAgLy8gY29udmVydCAo
ZG91YmxlIC0+IEpTSW1tZWRpYXRlIC0+IGRvdWJsZSksIGFuZCBjaGVjayBpZiB0aGUgdmFsdWUg
aXMgdW5jaGFuZ2VkIC0gaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcmVwcmVzZW50YWJsZSBh
cyBhIEpTSW1tZWRpYXRlLgorICAgIF9fIGN2dHRzZDJzaV9ycih4bW1Tb3VyY2UsIHRlbXBSZWcx
KTsKKyAgICBfXyBhZGRsX3JyKHRlbXBSZWcxLCB0ZW1wUmVnMSk7CisgICAgX18gc2FybF9pOHIo
MSwgdGVtcFJlZzEpOworICAgIF9fIGN2dHNpMnNkX3JyKHRlbXBSZWcxLCB0ZW1wWG1tKTsKKyAg
ICAvLyBDb21wYXJlICYgYnJhbmNoIGlmIGltbWVkaWF0ZS4gCisgICAgX18gdWNvbWlzX3JyKHRl
bXBYbW0sIHhtbVNvdXJjZSk7CisgICAgSm1wU3JjIHJlc3VsdElzSW1tID0gX18gamUoKTsKKyAg
ICBKbXBEc3QgcmVzdWx0TG9va2VkTGlrZUltbUJ1dEFjdHVhbGx5SXNudCA9IF9fIGxhYmVsKCk7
CisgICAgCisgICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byB0aGUgSlNOdW1iZXJDZWxsIGFuZCBq
dW1wLgorICAgIF9fIG1vdnNkX3JtKHhtbVNvdXJjZSwgRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2Vs
bCwgbV92YWx1ZSksIGpzTnVtYmVyQ2VsbCk7CisgICAgaWYgKGpzTnVtYmVyQ2VsbCAhPSBYODY6
OmVheCkKKyAgICAgICAgX18gbW92bF9ycihqc051bWJlckNlbGwsIFg4Njo6ZWF4KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgKndyb3RlSlNOdW1iZXJDZWxsID0gX18g
am1wKCk7CisKKyAgICBfXyBsaW5rKHJlc3VsdElzSW1tLCBfXyBsYWJlbCgpKTsKKyAgICAvLyB2
YWx1ZSA9PSAoZG91YmxlKShKU0ltbWVkaWF0ZSl2YWx1ZS4uLiBvciBhdCBsZWFzdCwgaXQgbG9v
a3MgdGhhdCB3YXkuLi4KKyAgICAvLyB1Y29taSB3aWxsIHJlcG9ydCB0aGF0ICgwID09IC0wKSwg
YW5kIHdpbGwgcmVwb3J0IHRydWUgaWYgZWl0aGVyIGlucHV0IGluIE5hTiAocmVzdWx0IGlzIHVu
b3JkZXJlZCkuCisgICAgX18gbGluayhfXyBqcCgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0
dWFsbHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIGEgTmFOCisgICAgX18gcGV4dHJ3X2lycigzLCB4
bW1Tb3VyY2UsIHRlbXBSZWcyKTsKKyAgICBfXyBjbXBsX2kzMnIoMHg4MDAwLCB0ZW1wUmVnMik7
CisgICAgX18gbGluayhfXyBqZSgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0dWFsbHlJc250
KTsgLy8gQWN0dWFsbHkgd2FzIC0wCisgICAgLy8gWWVzIGl0IHJlYWxseSByZWFsbHkgcmVhbGx5
IGlzIHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZS4KKyAgICBlbWl0RmFzdEFyaXRoSW50
VG9JbW1Ob0NoZWNrKHRlbXBSZWcxKTsKKyAgICBpZiAodGVtcFJlZzEgIT0gWDg2OjplYXgpCisg
ICAgICAgIF9fIG1vdmxfcnIodGVtcFJlZzEsIFg4Njo6ZWF4KTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcChPcGNv
ZGVJRCBvcGNvZGVJRCwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMy
LCBPcGVyYW5kVHlwZXMgdHlwZXMsIHVuc2lnbmVkIGkpCit7CisgICAgU3RydWN0dXJlKiBudW1i
ZXJTdHJ1Y3R1cmUgPSBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVyZS5nZXQoKTsKKyAgICBK
bXBTcmMgd2FzSlNOdW1iZXJDZWxsMTsKKyAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMWI7Cisg
ICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDI7CisgICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDJi
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgsIHNyYzIsIFg4
Njo6ZWR4LCBpKTsKKworICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxlKCkgJiYgaXNT
U0UyUHJlc2VudCgpKSB7CisgICAgICAgIEFTU0VSVCh0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVt
YmVyKCkpOworCisgICAgICAgIC8vIENoZWNrIG9wMiBpcyBhIG51bWJlcgorICAgICAgICBfXyB0
ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplZHgpOworICAg
ICAgICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7CisgICAgICAgIGlmICghdHlwZXMuc2Vjb25k
KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChYODY6OmVkeCwgaSwgc3JjMik7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0o
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VU
KEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gKDEpIEluIHRoaXMgY2FzZSBzcmMyIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCisg
ICAgICAgIC8vICAgICBTbG93IGNhc2UgaWYgc3JjMSBpcyBub3QgYSBudW1iZXIgdHlwZS4KKyAg
ICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6
ZWF4KTsKKyAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpuZSgpOworICAgICAgICBpZiAoIXR5
cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3JjMSk7CisgICAgICAgICAgICBfXyBj
bXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklF
TERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7CisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbHNvIGEgbnVtYmVy
IGNlbGwKKyAgICAgICAgX18gbW92c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92
YWx1ZSksIFg4Njo6ZWF4LCBYODY6OnhtbTApOworICAgICAgICBKbXBTcmMgbG9hZGVkRG91Ymxl
ID0gX18gam1wKCk7CisgICAgICAgIC8vICgxYikgaWYgd2UgZ2V0IGhlcmUsIHNyYzEgaXMgYW4g
aW1tZWRpYXRlCisgICAgICAgIF9fIGxpbmsob3AxaW1tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWF4KTsKKyAgICAgICAgX18gY3Z0c2kyc2RfcnIo
WDg2OjplYXgsIFg4Njo6eG1tMCk7CisgICAgICAgIC8vICgxYykgCisgICAgICAgIF9fIGxpbmso
bG9hZGVkRG91YmxlLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2Fk
ZCkKKyAgICAgICAgICAgIF9fIGFkZHNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1f
dmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0wKTsKKyAgICAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3Bfc3ViKQorICAgICAgICAgICAgX18gc3Vic2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVy
Q2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTApOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAgICAgICAgX18gbXVs
c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6
OnhtbTApOworICAgICAgICB9CisKKyAgICAgICAgcHV0RG91YmxlUmVzdWx0VG9KU051bWJlckNl
bGxPckpTSW1tZWRpYXRlKFg4Njo6eG1tMCwgWDg2OjplZHgsIGRzdCwgJndhc0pTTnVtYmVyQ2Vs
bDIsIFg4Njo6eG1tMSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKKyAgICAgICAgd2FzSlNOdW1iZXJD
ZWxsMmIgPSBfXyBqbXAoKTsKKworICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVzIGNhc2VzIHdo
ZXJlIHNyYzIgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KKyAgICAgICAgLy8gICAgIFR3byBzbG93
IGNhc2VzIC0gZWl0aGVyIHNyYzEgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUgc3VidHJhY3Qg
b3ZlcmZsb3dzLgorICAgICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgfSBlbHNlIGlm
ICh0eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKKyAgICAg
ICAgQVNTRVJUKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpKTsKKworICAgICAgICAvLyBD
aGVjayBvcDEgaXMgYSBudW1iZXIKKyAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6
VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKKyAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9f
IGpuZSgpOworICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkp
IHsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwg
c3JjMSk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBY
ODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShf
XyBqbmUoKSwgaSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gKDEpIEluIHRoaXMgY2FzZSBz
cmMxIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCisgICAgICAgIC8vICAgICBTbG93IGNhc2Ug
aWYgc3JjMiBpcyBub3QgYSBudW1iZXIgdHlwZS4KKyAgICAgICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKKyAgICAgICAgSm1wU3JjIG9w
MmltbSA9IF9fIGpuZSgpOworICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJ
c051bWJlcigpKSB7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2
OjplZHgsIGksIHNyYzIpOworICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQ+KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlKSwgWDg2OjplZHgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoX18gam5lKCksIGkpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICgxYSkgaWYg
d2UgZ2V0IGhlcmUsIHNyYzIgaXMgYWxzbyBhIG51bWJlciBjZWxsCisgICAgICAgIF9fIG1vdnNk
X21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4
bW0xKTsKKyAgICAgICAgSm1wU3JjIGxvYWRlZERvdWJsZSA9IF9fIGptcCgpOworICAgICAgICAv
LyAoMWIpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFuIGltbWVkaWF0ZQorICAgICAgICBfXyBs
aW5rKG9wMmltbSwgX18gbGFiZWwoKSk7CisgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChY
ODY6OmVkeCk7CisgICAgICAgIF9fIGN2dHNpMnNkX3JyKFg4Njo6ZWR4LCBYODY6OnhtbTEpOwor
ICAgICAgICAvLyAoMWMpIAorICAgICAgICBfXyBsaW5rKGxvYWRlZERvdWJsZSwgX18gbGFiZWwo
KSk7CisgICAgICAgIF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFs
dWUpLCBYODY6OmVheCwgWDg2Ojp4bW0wKTsKKyAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2Fk
ZCkKKyAgICAgICAgICAgIF9fIGFkZHNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0wKTsKKyAgICAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKQorICAgICAgICAgICAgX18gc3Vic2RfcnIo
WDg2Ojp4bW0xLCBYODY6OnhtbTApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChvcGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAgICAgICAgX18gbXVsc2RfcnIoWDg2Ojp4bW0x
LCBYODY6OnhtbTApOworICAgICAgICB9CisgICAgICAgIF9fIG1vdnNkX3JtKFg4Njo6eG1tMCwg
RklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgIHB1dERvdWJsZVJlc3VsdFRv
SlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OnhtbTAsIFg4Njo6ZWF4LCBkc3QsICZ3YXNK
U051bWJlckNlbGwxLCBYODY6OnhtbTEsIFg4Njo6ZWN4LCBYODY6OmVkeCk7CisgICAgICAgIHdh
c0pTTnVtYmVyQ2VsbDFiID0gX18gam1wKCk7CisKKyAgICAgICAgLy8gKDIpIFRoaXMgaGFuZGxl
cyBjYXNlcyB3aGVyZSBzcmMxIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCisgICAgICAgIC8vICAg
ICBUd28gc2xvdyBjYXNlcyAtIGVpdGhlciBzcmMyIGlzbid0IGFuIGltbWVkaWF0ZSwgb3IgdGhl
IHN1YnRyYWN0IG92ZXJmbG93cy4KKyAgICAgICAgX18gbGluayhvcDFpbW0sIF9fIGxhYmVsKCkp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBY
ODY6OmVkeCwgaSk7CisKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKSB7CisgICAgICAgIGVt
aXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7CisgICAgICAgIF9fIGFkZGxfcnIo
WDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam8oKSwgaSkpOworICAgIH0gZWxzZSAgaWYgKG9wY29kZUlEID09IG9wX3N1Yikg
eworICAgICAgICBfXyBzdWJsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgZW1pdEZh
c3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBB
U1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKKyAgICAgICAgLy8gY29udmVydCBlYXggJiBlZHgg
ZnJvbSBKU0ltbWVkaWF0ZXMgdG8gaW50cywgYW5kIGNoZWNrIGlmIGVpdGhlciBhcmUgemVybwor
ICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOworICAgICAgICBKbXBTcmMg
b3AxWmVybyA9IGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oWDg2OjplYXgp
OworICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVkeCwgWDg2OjplZHgpOworICAgICAgICBKbXBT
cmMgb3AyTm9uWmVybyA9IF9fIGpuZSgpOworICAgICAgICBfXyBsaW5rKG9wMVplcm8sIF9fIGxh
YmVsKCkpOworICAgICAgICAvLyBpZiBlaXRoZXIgaW5wdXQgaXMgemVybywgYWRkIHRoZSB0d28g
dG9nZXRoZXIsIGFuZCBjaGVjayBpZiB0aGUgcmVzdWx0IGlzIDwgMC4KKyAgICAgICAgLy8gSWYg
aXQgaXMsIHdlIGhhdmUgYSBwcm9ibGVtIChOIDwgMCksIChOICogMCkgPT0gLTAsIG5vdCByZXBy
ZXNlbnRhdGJsZSBhcyBhIEpTSW1tZWRpYXRlLiAKKyAgICAgICAgX18gbW92bF9ycihYODY6OmVh
eCwgWDg2OjplY3gpOworICAgICAgICBfXyBhZGRsX3JyKFg4Njo6ZWR4LCBYODY6OmVjeCk7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpzKCksIGkpKTsKKyAg
ICAgICAgLy8gU2tpcCB0aGUgYWJvdmUgY2hlY2sgaWYgbmVpdGhlciBpbnB1dCBpcyB6ZXJvCisg
ICAgICAgIF9fIGxpbmsob3AyTm9uWmVybywgX18gbGFiZWwoKSk7CisgICAgICAgIF9fIGltdWxs
X3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRp
YXRlKFg4Njo6ZWF4KTsKKyAgICB9CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
CisgICAgaWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkp
IHsKKyAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwyLCBfXyBsYWJlbCgpKTsKKyAgICAg
ICAgX18gbGluayh3YXNKU051bWJlckNlbGwyYiwgX18gbGFiZWwoKSk7CisgICAgfQorICAgIGVs
c2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewor
ICAgICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDEsIF9fIGxhYmVsKCkpOworICAgICAgICBf
XyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDFiLCBfXyBsYWJlbCgpKTsKKyAgICB9Cit9CisKK3ZvaWQg
SklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBkc3QsIHVuc2lnbmVk
IHNyYzEsIHVuc2lnbmVkIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcywgdW5zaWduZWQgaSkKK3sK
KyAgICBKbXBEc3QgaGVyZSA9IF9fIGxhYmVsKCk7CisgICAgX18gbGluayhpdGVyLT5mcm9tLCBo
ZXJlKTsKKyAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNl
bnQoKSkgeworICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkp
IHsKKyAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzEp
KQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgaGVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0
ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KCsraXRlciwgc3JjMikpCisgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAgICAgICAgX18g
bGluayhpdGVyLT5mcm9tLCBoZXJlKTsKKyAgICAgICAgfQorICAgICAgICBfXyBsaW5rKCgrK2l0
ZXIpLT5mcm9tLCBoZXJlKTsKKyAgICB9IGVsc2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJs
ZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgeworICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVm
aW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbCgrK2l0ZXIsIHNyYzEpKQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAg
IF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0eXBl
cy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgaWYgKGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMikpCisgICAgICAgICAgICAgICAgKytpdGVy
OworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKKyAgICAgICAgfQorICAg
ICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
X18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7CisKKyAgICAvLyBhZGRpdGlvbmFsIGVudHJ5
IHBvaW50IHRvIGhhbmRsZSAtMCBjYXNlcy4KKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbXVsKQor
ICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKworICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAgaWYgKG9wY29k
ZUlEID09IG9wX2FkZCkKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9hZGQpOworICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKKyAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zdWIpOworICAgIGVsc2UgeworICAgICAgICBB
U1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9tdWwpOworICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKK3sKKyAgICBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7
CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMuc2l6ZSgpOworCisgICAgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
ID0gMDsKKyAgICB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCA9IDA7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UobV9pbnRlcnByZXRlci0+aXNPcGNvZGUoaW5zdHJ1Y3Rpb25baV0udS5vcGNv
ZGUpLCAicHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgaSk7CisKKyNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICBpZiAoaSA+IDApIC8vIEF2b2lkIHRoZSBv
dmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KKyAgICAgICAgICAgIF9fIG1vdmxf
aTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShpbnN0cnVjdGlvbiAr
IGkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisjZW5kaWYKKwor
ICAgICAgICBtX2xhYmVsc1tpXSA9IF9fIGxhYmVsKCk7CisgICAgICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25baV0udS5vcGNvZGUp
OworICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgIGNhc2Ugb3BfbW92OiB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwor
ICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
KQorICAgICAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIobV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYykpLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2FkZDogeworICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1
ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgeworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOworICAgICAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAg
ICAgICAgICAgX18gYWRkbF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUp
LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam8oKSwgaSkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25z
dGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIF9f
IGFkZGxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgp
OworICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpv
KCksIGkpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9
IE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgICAgICBpZiAodHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkgJiYgdHlwZXMu
c2Vjb25kKCkubWlnaHRCZU51bWJlcigpKQorICAgICAgICAgICAgICAgICAgICBjb21waWxlQmlu
YXJ5QXJpdGhPcChvcF9hZGQsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIE9wZXJh
bmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9t
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4
KTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2VuZDogeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWlu
KQorICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZW5k
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gcHVzaGxfbShSZWdpc3Rl
ckZpbGU6OlJldHVyblBDICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2
OjplZGkpOworICAgICAgICAgICAgX18gcmV0KCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2ptcDogeworICAgICAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBpICsgMSArIHRh
cmdldCkpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9wcmVfaW5jOiB7CisgICAgICAgICAgICBpbnQgc3JjRHN0ID0g
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gYWRkbF9pOHIoZ2V0
RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBY
ODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShf
XyBqbygpLCBpKSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7
CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2xvb3A6IHsKKyAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7
CisKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwg
aSArIDEgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7CisgICAgICAgICAg
ICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOworCisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgSlNWYWx1ZSogc3Jj
MmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6
OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4
Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKHNyYzJp
bW0pLCBYODY6OmVkeCk7CisgICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFi
bGUoX18gamwoKSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4
LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2Ojpl
YXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6
OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2OjplYXgp
OworICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpsKCksIGkg
KyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2Vx
OiB7CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOworCisgICAgICAgICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAg
ICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIo
YXNJbnRlZ2VyKHNyYzJpbW0pLCBYODY6OmVkeCk7CisgICAgICAgICAgICAgICAgbV9qbXBUYWJs
ZS5hcHBlbmQoSm1wVGFibGUoX18gamxlKCksIGkgKyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2
OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBU
YWJsZShfXyBqbGUoKSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfbmV3X29iamVjdDogeworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9uZXdfb2JqZWN0KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZDogewor
ICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXBhdGNoIGJvdGggdGhlIFN0
cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKKyAg
ICAgICAgICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVk
IGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQorICAg
ICAgICAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBh
dCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCisKKyAgICAgICAgICAgIGludCBiYXNlVlJl
ZyA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQsIFg4Njo6ZWR4LCBpKTsKKworICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5w
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhd
LmJ5dGVjb2RlSW5kZXggPT0gaSk7CisKKyAgICAgICAgICAgIC8vIEp1bXAgdG8gYSBzbG93IGNh
c2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRoZSBT
dHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoWDg2OjplYXgsIGksIGJhc2VWUmVnKTsKKworICAgICAgICAgICAgSm1wRHN0IGhv
dFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2lu
ID0gaG90UGF0aEJlZ2luOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
SW5kZXg7CisKKyAgICAgICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dp
bmcgaW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBpbiBvcmRlciB0aGF0IGl0
IGNhbiBiZSBwYXRjaGVkIG92ZXIuCisgICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVwYXRjaEdl
dEJ5SWREZWZhdWx0U3RydWN0dXJlLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSks
IFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVu
Y2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNl
dFB1dEJ5SWRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgLy8gUGxhbnQgYSBsb2FkIGZy
b20gYSBib2d1cyBvZnNldCBpbiB0aGUgb2JqZWN0J3MgcHJvcGVydHkgbWFwOyB3ZSB3aWxsIHBh
dGNoIHRoaXMgbGF0ZXIsIGlmIGl0IGlzIHRvIGJlIHVzZWQuCisgICAgICAgICAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwg
WDg2OjplYXgpOworICAgICAgICAgICAgX18gbW92bF9ybShYODY6OmVkeCwgcmVwYXRjaEdldEJ5
SWREZWZhdWx0T2Zmc2V0LCBYODY6OmVheCk7CisgICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1i
bGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkp
ID09IHJlcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOworCisgICAgICAgICAg
ICBpICs9IDg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2dldF9ieV9pZDogeworICAgICAgICAgICAgLy8gQXMgZm9yIHB1dF9ieV9pZCwgZ2V0X2J5X2lk
IHJlcXVpcmVzIHRoZSBvZmZzZXQgb2YgdGhlIFN0cnVjdHVyZSBhbmQgdGhlIG9mZnNldCBvZiB0
aGUgYWNjZXNzIHRvIGJlIHJlcGF0Y2hlZC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwg
Zm9yIGdldF9ieV9pZCB3ZSBuZWVkIHJlcGF0Y2ggdGhlIG9mZnNldCBvZiB0aGUgYnJhbmNoIHRv
IHRoZSBzbG93IGNhc2UgKHdlIHJlcGF0Y2ggdGhpcyB0byBqdW1wCisgICAgICAgICAgICAvLyB0
byBhcnJheS1sZW5ndGggLyBwcm90b3R5cGUgYWNjZXNzIHRyYW5wb2xpbmVzLCBhbmQgZmluYWxs
eSB3ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHktbWFwIGFjY2VzcyBvZmZzZXQgYXMgYSBsYWJlbAor
ICAgICAgICAgICAgLy8gdG8ganVtcCBiYWNrIHRvIGlmIG9uZSBvZiB0aGVzZSB0cmFtcG9saWVz
IGZpbmRzIGEgbWF0Y2guCisKKyAgICAgICAgICAgIGludCBiYXNlVlJlZyA9IGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
XS5ieXRlY29kZUluZGV4ID09IGkpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoWDg2OjplYXgsIGksIGJhc2VWUmVnKTsKKworICAgICAgICAgICAgSm1wRHN0IGhv
dFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2lu
ID0gaG90UGF0aEJlZ2luOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
SW5kZXg7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJZERlZmF1bHRT
dHJ1Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJl
bHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVj
dHVyZSk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBq
bmUoKSwgaSkpOworICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5j
ZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0
R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOworCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgp
OworICAgICAgICAgICAgX18gbW92bF9tcihyZXBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQsIFg4
Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXRE
aWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0
Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOworICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKworICAgICAgICAg
ICAgaSArPSA4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsgLy8gdmFsdWUKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
WDg2OjplY3gsIGkpOyAvLyBiYXNlVmFsCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcHJvdG8K
KworICAgICAgICAgICAgLy8gY2hlY2sgaWYgYW55IGFyZSBpbW1lZGlhdGVzCisgICAgICAgICAg
ICBfXyBvcmxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIG9ybF9ycihY
ODY6OmVkeCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0
ZTo6VGFnTWFzaywgWDg2OjplY3gpOworCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqbnooKSwgaSkpOworCisgICAgICAgICAgICAvLyBjaGVjayB0aGF0
IGFsbCBhcmUgb2JqZWN0IHR5cGUgLSB0aGlzIGlzIGEgYml0IG9mIGEgYml0aGFjayB0byBhdm9p
ZCBleGNlc3MgYnJhbmNoaW5nOworICAgICAgICAgICAgLy8gd2UgY2hlY2sgdGhhdCB0aGUgc3Vt
IG9mIHRoZSB0aHJlZSB0eXBlIGNvZGVzIGZyb20gU3RydWN0dXJlcyBpcyBleGFjdGx5IDMgKiBP
YmplY3RUeXBlLAorICAgICAgICAgICAgLy8gdGhpcyB3b3JrcyBiZWNhdXNlIE51bWJlclR5cGUg
YW5kIFN0cmluZ1R5cGUgYXJlIHNtYWxsZXIKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycigzICog
T2JqZWN0VHlwZSwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZT
RVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplZHgs
IFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIHN1YmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVy
ZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAgICAg
X18gc3VibF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSksIFg4
Njo6ZWR4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcmVsb2FkIGJhc2VW
YWwKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1
cmUpLCBYODY6OmVkeCwgWDg2OjplZHgpOworICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVj
eCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVkeCk7
CisKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgp
LCBpKSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgYmFzZVZhbCdzIGZsYWdzIGluY2x1
ZGUgSW1wbGVtZW50c0hhc0luc3RhbmNlIGJ1dCBub3QgT3ZlcnJpZGVzSGFzSW5zdGFuY2UKKyAg
ICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5t
X2ZsYWdzKSwgWDg2OjplZHgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFuZGxfaTMycihJ
bXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNIYXNJbnN0YW5jZSwgWDg2OjplY3gpOwor
ICAgICAgICAgICAgX18gY21wbF9pMzJyKEltcGxlbWVudHNIYXNJbnN0YW5jZSwgWDg2OjplY3gp
OworCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUo
KSwgaSkpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsgLy8gcmVsb2FkIHZhbHVlCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQs
IFg4Njo6ZWR4LCBpKTsgLy8gcmVsb2FkIHByb3RvCisKKyAgICAgICAgICAgIC8vIG9wdGltaXN0
aWNhbGx5IGxvYWQgdHJ1ZSByZXN1bHQKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVn
ZXIoanNCb29sZWFuKHRydWUpKSwgWDg2OjplYXgpOworCisgICAgICAgICAgICBKbXBEc3QgbG9v
cCA9IF9fIGxhYmVsKCk7CisKKyAgICAgICAgICAgIC8vIGxvYWQgdmFsdWUncyBwcm90b3R5cGUK
KyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
LCBYODY6OmVjeCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZT
RVQoU3RydWN0dXJlLCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKKyAgICAg
ICAgICAgIEptcFNyYyBleGl0ID0gX18gamUoKTsKKworICAgICAgICAgICAgX18gY21wbF9pMzJy
KGFzSW50ZWdlcihqc051bGwoKSksIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIEptcFNyYyBnb1Rv
TG9vcCA9IF9fIGpuZSgpOworICAgICAgICAgICAgX18gbGluayhnb1RvTG9vcCwgbG9vcCk7CisK
KyAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKGZhbHNlKSksIFg4
Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayhleGl0LCBfXyBsYWJlbCgpKTsKKworICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKKworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKKyAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwg
NCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9i
eV9pZCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25l
ZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworCisgICAgICAgICAgICAv
LyBGb3Igbm93LCBvbmx5IHBsYW50IGEgZmFzdCBpbnQgY2FzZSBpZiB0aGUgY29uc3RhbnQgb3Bl
cmFuZCBpcyBncmVhdGVyIHRoYW4gemVyby4KKyAgICAgICAgICAgIEpTVmFsdWUqIHNyYzFWYWx1
ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKTsKKyAgICAgICAgICAgIEpT
VmFsdWUqIHNyYzJWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKTsK
KyAgICAgICAgICAgIGludDMyX3QgdmFsdWU7CisgICAgICAgICAgICBpZiAoc3JjMVZhbHVlICYm
ICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMVZhbHVlKSkgPiAwKSkgeworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOwor
ICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
CisgICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgICAgICBfXyBpbXVsbF9pMzJyKFg4Njo6ZWF4LCB2YWx1ZSwgWDg2OjplYXgp
OworICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpv
KCksIGkpKTsKKyAgICAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2
OjplYXgpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc3JjMlZhbHVlICYmICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6
aW50VmFsdWUoc3JjMlZhbHVlKSkgPiAwKSkgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEZh
c3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBpbXVs
bF9pMzJyKFg4Njo6ZWF4LCB2YWx1ZSwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgICAgICAg
ICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9wX211bCwgaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51
Lm9wZXJhbmQpLCBpKTsKKworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogeworICAgICAgICAgICAgRnVu
Y0RlY2xOb2RlKiBmdW5jID0gKG1fY29kZUJsb2NrLT5mdW5jdGlvbnNbaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZF0pLmdldCgpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMpLCAwKTsKKyAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Z1bmMpOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIGNhc2Ugb3Bf
Y29uc3RydWN0OiB7CisgICAgICAgICAgICBjb21waWxlT3BDYWxsKG9wY29kZUlELCBpbnN0cnVj
dGlvbiArIGksIGksIGNhbGxMaW5rSW5mb0luZGV4KyspOworICAgICAgICAgICAgaSArPSAob3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0ID8gNyA6IDUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogeworICAgICAgICAgICAgSlNW
YXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVj
dCo+KGluc3RydWN0aW9uW2kgKyAyXS51LmpzQ2VsbCk7CisgICAgICAgICAgICBfXyBtb3ZsX2kz
MnIoYXNJbnRlZ2VyKGdsb2JhbE9iamVjdCksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3Zhcjog
eworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaW5zdHJ1Y3Rpb25b
aSArIDFdLnUuanNDZWxsKTsKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoZ2xv
YmFsT2JqZWN0KSwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0
UmVnaXN0ZXIoWDg2OjplZHgsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6IHsKKyAgICAgICAgICAgIGludCBza2lwID0g
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29w
ZUNoYWluOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbiwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgd2hpbGUgKHNraXAtLSkK
KyAgICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwg
bmV4dCksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6OmVheCwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2OjplYXgsIGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X3B1dF9zY29wZWRfdmFyOiB7CisgICAgICAgICAgICBpbnQgc2tpcCA9IGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbjsKKworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4s
IFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgd2hpbGUg
KHNraXAtLSkKKyAgICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNo
YWluTm9kZSwgbmV4dCksIFg4Njo6ZWR4LCBYODY6OmVkeCk7CisKKyAgICAgICAgICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6OmVkeCwgWDg2
OjplZHgpOworICAgICAgICAgICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2Ojpl
YXgsIFg4Njo6ZWR4LCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
dGVhcl9vZmZfYWN0aXZhdGlvbjogeworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwor
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90ZWFyX29mZl9h
Y3RpdmF0aW9uKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7CisgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyk7
CisgICAgICAgICAgICBpICs9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX3JldDogeworICAgICAgICAgICAgLy8gV2UgY291bGQgSklUIGdlbmVyYXRl
IHRoZSBkZXJlZiwgb25seSBjYWxsaW5nIG91dCB0byBDIHdoZW4gdGhlIHJlZmNvdW50IGhpdHMg
emVyby4KKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikK
KyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3JldF9z
Y29wZUNoYWluKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4K
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgWDg2OjplYXgsIGkpOworCisgICAgICAgICAgICAvLyBHcmFiIHRoZSByZXR1cm4g
YWRkcmVzcy4KKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJGaWxl
OjpSZXR1cm5QQywgWDg2OjplZHgsIGkpOworCisgICAgICAgICAgICAvLyBSZXN0b3JlIG91ciBj
YWxsZXIncyAiciIuCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVy
RmlsZTo6Q2FsbGVyRnJhbWUsIFg4Njo6ZWRpLCBpKTsKKworICAgICAgICAgICAgLy8gUmV0dXJu
LgorICAgICAgICAgICAgX18gcHVzaGxfcihYODY6OmVkeCk7CisgICAgICAgICAgICBfXyByZXQo
KTsKKworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6IHsKKyAgICAgICAgICAgIF9fIGxlYWxfbXIoc2l6
ZW9mKFJlZ2lzdGVyKSAqIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWRpLCBY
ODY6OmVkeCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKKyAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
LCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3
X2FycmF5KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmU6IHsKKyAgICAgICAgICAgIElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUpOworICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZlcmlmeTogeworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAg
ICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpuZSgpOworICAgICAgICAgICAgX18gbW92
bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVj
eCk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0
cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgIEptcFNyYyBpc09iamVjdCA9IF9fIGplKCk7CisKKyAgICAg
ICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVh
eCwgaSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgX18gbGluayhpc09iamVjdCwgX18gbGFiZWwo
KSk7CisKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBlbWl0RmFz
dEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOworICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMy
bShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRy
KSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhcnJheTsgZ2V0
IHRoZSBtX3N0b3JhZ2UgcG9pbnRlciBpbnRvIGVjeCwgdGhlbiBjaGVjayBpZiB0aGUgaW5kZXgg
aXMgYmVsb3cgdGhlIGZhc3QgY3V0b2ZmCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAg
ICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fZmFzdEFjY2Vz
c0N1dG9mZiksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGpiZSgpLCBpKSk7CisKKyAgICAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUg
ZnJvbSB0aGUgdmVjdG9yCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1
ZSopLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Z1bmM6IHsKKyAg
ICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNb
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7CisgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfZnVuYyk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N1YjogeworICAgICAgICAg
ICAgY29tcGlsZUJpbmFyeUFyaXRoT3Aob3Bfc3ViLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFu
ZCksIGkpOworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRG
YXN0QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpT
SW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAgICAgX18gY21wbF9p
MzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNBcnJheVZw
dHIpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShfXyBqbmUoKSwgaSkpOworCisgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFycmF5OyBn
ZXQgdGhlIG1fc3RvcmFnZSBwb2ludGVyIGludG8gZWN4LCB0aGVuIGNoZWNrIGlmIHRoZSBpbmRl
eCBpcyBiZWxvdyB0aGUgZmFzdCBjdXRvZmYKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAg
ICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9mYXN0QWNj
ZXNzQ3V0b2ZmKSwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGluRmFzdFZlY3RvciA9
IF9fIGphKCk7CisgICAgICAgICAgICAvLyBObzsgb2ggd2VsbCwgY2hlY2sgaWYgdGhlIGFjY2Vz
cyBpZiB3aXRoaW4gdGhlIHZlY3RvciAtIGlmIHNvLCB3ZSBtYXkgc3RpbGwgYmUgb2theS4KKyAg
ICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yTGVuZ3RoKSwgWDg2OjplY3gpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gamJlKCksIGkpKTsKKworICAgICAgICAgICAgLy8gVGhpcyBp
cyBhIHdyaXRlIHRvIHRoZSBzbG93IHBhcnQgb2YgdGhlIHZlY3RvcjsgZmlyc3QsIHdlIGhhdmUg
dG8gY2hlY2sgaWYgdGhpcyB3b3VsZCBiZSB0aGUgZmlyc3Qgd3JpdGUgdG8gdGhpcyBsb2NhdGlv
bi4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgaW5pdGlh
bCB3cml0ZSB0byBhcnJheTsgaW5jcmVtZW50IHRoZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRo
ZSBhcnJheSwgYW5kIHBvdGVudGlhbGx5IHVwZGF0ZSBmYXN0IGFjY2VzcyBjdXRvZmYuIAorICAg
ICAgICAgICAgX18gY21wbF9pOG0oMCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pLCBYODY6OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKikpOworICAgICAgICAg
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamUoKSwgaSkpOworCisgICAg
ICAgICAgICAvLyBBbGwgZ29vZCAtIHB1dCB0aGUgdmFsdWUgaW50byB0aGUgYXJyYXkuCisgICAg
ICAgICAgICBfXyBsaW5rKGluRmFzdFZlY3RvciwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6
ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIG1vdmxfcm0oWDg2OjplYXgsIEZJRUxEX09GRlNFVChB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNW
YWx1ZSopKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9sZXNzZXEpCisgICAgICAgIGNh
c2Ugb3BfbG9vcF9pZl90cnVlOiB7CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkp
OworCisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMy
cihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIEptcFNyYyBpc1plcm8gPSBfXyBqZSgpOworICAgICAgICAgICAgX18gdGVzdGxf
aTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpuZSgpLCBpICsgMiArIHRhcmdldCkp
OworCisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp0cnVl
SW1tZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChK
bXBUYWJsZShfXyBqZSgpLCBpICsgMiArIHRhcmdldCkpOworICAgICAgICAgICAgX18gY21wbF9p
MzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBp
KSk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNaZXJvLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAgICAgICBjYXNl
IG9wX3Jlc29sdmVfYmFzZTogeworICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Cisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4oaWRlbnQpLCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfcmVzb2x2ZV9iYXNlKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lZ2F0ZTogeworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9uZWdhdGUpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0g
MzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2
ZV9za2lwOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCks
IDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiwgNCk7CisgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfc2tpcCk7
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDogeworICAgICAgICAgICAgLy8g
RmFzdCBjYXNlCisgICAgICAgICAgICB1bnNpZ25lZCBnbG9iYWxPYmplY3QgPSBhc0ludGVnZXIo
aW5zdHJ1Y3Rpb25baSArIDJdLnUuanNDZWxsKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZF0pOworICAgICAgICAgICAgdm9pZCogc3RydWN0dXJlQWRkcmVzcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGluc3RydWN0aW9uICsgaSArIDQpOworICAgICAgICAgICAgdm9pZCogb2Zm
c2V0QWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3RydWN0aW9uICsgaSArIDUpOwor
CisgICAgICAgICAgICAvLyBDaGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVjdAorICAgICAg
ICAgICAgX18gbW92bF9pMzJyKGdsb2JhbE9iamVjdCwgWDg2OjplYXgpOworICAgICAgICAgICAg
X18gbW92bF9tcihzdHJ1Y3R1cmVBZGRyZXNzLCBYODY6OmVkeCk7CisgICAgICAgICAgICBfXyBj
bXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIEptcFNyYyBub01hdGNoID0gX18gam5lKCk7IC8vIFN0cnVjdHVy
ZXMgZG9uJ3QgbWF0Y2gKKworICAgICAgICAgICAgLy8gTG9hZCBjYWNoZWQgcHJvcGVydHkKKyAg
ICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTR2xvYmFsT2JqZWN0LCBtX3Byb3Bl
cnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyBtb3ZsX21y
KG9mZnNldEFkZHIsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoMCwgWDg2Ojpl
YXgsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCk7CisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgSm1wU3JjIGVuZCA9IF9fIGptcCgpOworCisgICAgICAgICAgICAvLyBTbG93IGNh
c2UKKyAgICAgICAgICAgIF9fIGxpbmsobm9NYXRjaCwgX18gbGFiZWwoKSk7CisgICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoZ2xvYmFsT2JqZWN0LCAwKTsKKyAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQ+KGluc3RydWN0aW9uICsgaSksIDgpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7CisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgX18gbGluayhlbmQsIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgaSArPSA2OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9w
X2RpdikKKyAgICAgICAgY2FzZSBvcF9wcmVfZGVjOiB7CisgICAgICAgICAgICBpbnQgc3JjRHN0
ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gc3VibF9pOHIo
Z2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkp
LCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqbygpLCBpKSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2pubGVzczogeworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJp
bW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoc3JjMmltbSkgeworICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2Ojpl
ZHgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6
OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihzcmMyaW1t
KSwgWDg2OjplZHgpOworICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxl
KF9fIGpnZSgpLCBpICsgMyArIHRhcmdldCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgs
IGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVh
eCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7
CisgICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamdlKCksIGkg
KyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25vdDogeworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyB4b3JsX2k4cihKU0ltbWVkaWF0ZTo6RnVs
bFRhZ1R5cGVCb29sLCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1t
ZWRpYXRlOjpGdWxsVGFnVHlwZU1hc2ssIFg4Njo6ZWF4KTsgLy8gaTg/CisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAg
ICAgX18geG9ybF9pOHIoKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wgfCBKU0ltbWVkaWF0
ZTo6RXh0ZW5kZWRQYXlsb2FkQml0Qm9vbFZhbHVlKSwgWDg2OjplYXgpOworICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfamZhbHNlOiB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAg
ICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSks
IFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpl
KCksIGkgKyAyICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGlz
Tm9uWmVybyA9IF9fIGpuZSgpOworCisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2Vy
KEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAg
bV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKKyAg
ICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlh
dGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNOb25aZXJvLCBf
XyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9OworICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9f
IHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAgICAg
IEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsK
KyAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklFTERf
T0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOworICAgICAg
ICAgICAgX18gc2V0bnpfcihYODY6OmVheCk7CisKKyAgICAgICAgICAgIEptcFNyYyB3YXNOb3RJ
bW1lZGlhdGUgPSBfXyBqbXAoKTsKKworICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwg
X18gbGFiZWwoKSk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1lZGlhdGU6OkV4
dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBhbmRsX3Jy
KFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlh
dGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gc2V0ZV9yKFg4
Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVs
KCkpOworCisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIF9fIGNtcGxfaTMycigwLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ptcFRh
YmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsgICAgICAgICAg
ICAKKworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH07
CisgICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMg
PSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgdGFy
Z2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIHRlc3Rs
X2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEptcFNy
YyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAg
ICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZGU0VU
KFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOworICAgICAgICAgICAg
X18gc2V0el9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgSm1wU3JjIHdhc05vdEltbWVkaWF0
ZSA9IF9fIGptcCgpOworCisgICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJl
bCgpKTsKKworICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRU
YWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6RnVs
bFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6ZWF4
KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwor
CisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIF9fIGNtcGxfaTMycigwLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFw
cGVuZChKbXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsgICAgICAgICAgICAKKwor
ICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9wb3N0X2luYzogeworICAgICAgICAgICAgaW50IHNyY0RzdCA9IGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVheCwg
WDg2OjplZHgpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIGFkZGxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1l
ZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplZHgpOworICAgICAgICAg
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOworICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX3VuZXhwZWN0ZWRfbG9hZDogeworICAgICAgICAgICAgSlNWYWx1ZSogdiA9
IG1fY29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmRdOworICAgICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcih2KSwgWDg2OjplYXgp
OworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfanNyOiB7CisgICAgICAgICAgICBpbnQgcmV0QWRkckRz
dCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgdGFyZ2V0
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIF9fIG1vdmxfaTMy
bSgwLCBzaXplb2YoUmVnaXN0ZXIpICogcmV0QWRkckRzdCwgWDg2OjplZGkpOworICAgICAgICAg
ICAgSm1wRHN0IGFkZHJQb3NpdGlvbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBtX2ptcFRh
YmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDIgKyB0YXJnZXQpKTsKKyAgICAgICAg
ICAgIEptcERzdCBzcmV0VGFyZ2V0ID0gX18gbGFiZWwoKTsKKyAgICAgICAgICAgIG1fanNyU2l0
ZXMuYXBwZW5kKEpTUkluZm8oYWRkclBvc2l0aW9uLCBzcmV0VGFyZ2V0KSk7CisgICAgICAgICAg
ICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X3NyZXQ6IHsKKyAgICAgICAgICAgIF9fIGptcF9tKHNpemVvZihSZWdpc3RlcikgKiBpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVkaSk7CisgICAgICAgICAgICBpICs9IDI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VxOiB7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkp
OworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2
OjplZHgsIGkpOworICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIG1vdnpibF9y
cihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0
ZShYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sc2hpZnQ6IHsKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4
Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7CisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsKKyAgICAgICAg
ICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0RmFz
dEFyaXRoSW1tVG9JbnQoWDg2OjplY3gpOworICAgICAgICAgICAgX18gc2hsbF9DTHIoWDg2Ojpl
YXgpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tT3JTbG93Q2FzZShYODY6OmVh
eCwgaSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5z
aWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1
bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAg
aWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEp
KSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBYODY6OmVh
eCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwg
WDg2OjplYXgpOyAvLyBGSVhNRTogbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhpcyBpcyByZWx5aW5n
IG9uIHRoZSBmb3JtYXQgb2YgSlNJbW1lZGlhdGUKKyAgICAgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWUqIHZhbHVl
ID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7CisgICAgICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAg
ICAgICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwgWDg2OjplYXgpOworICAgICAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2Ojpl
YXgsIHNyYzIsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBhbmRsX3JyKFg4Njo6
ZWR4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICAgICAg
dW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhz
cmMyKSkgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2
OjplYXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShY
ODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgLy8gTWFzayB3aXRoIDB4MWYgYXMgcGVyIGVj
bWEtMjYyIDExLjcuMiBzdGVwIDcuCisgICAgICAgICAgICAgICAgX18gc2FybF9pOHIoSlNJbW1l
ZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMih2YWx1ZSkgJiAweDFmLCBYODY6OmVheCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVjeCwgaSk7CisgICAgICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGkpOworICAgICAgICAgICAgICAg
IGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgX18gc2Fy
bF9DTHIoWDg2OjplYXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW1pdEZhc3RBcml0
aFBvdGVudGlhbGx5UmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfYml0bm90OiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyB4b3JsX2k4
cih+SlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7CisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhfYmFzZTogeworICAgICAgICAgICAgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UpOworICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCk7
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6IHsKKyAgICAgICAgICAgIEZ1bmNF
eHByTm9kZSogZnVuYyA9IChtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByZXNzaW9uc1tpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kXSkuZ2V0KCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oZnVuYyksIDApOworICAgICAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZnVuY19leHApOworICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbU51bShYODY6OmVjeCwgaSk7CisgICAgICAgICAgICBlbWl0RmFzdEFyaXRoRGVU
YWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlSnVtcElmWmVybyhYODY6OmVj
eCksIGkpKTsKKyAgICAgICAgICAgIF9fIGNkcSgpOworICAgICAgICAgICAgX18gaWRpdmxfcihY
ODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2Ojpl
ZHgpOworICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplYXgpOworICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfanRydWU6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKworICAg
ICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0
ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGlzWmVybyA9IF9fIGplKCk7Cisg
ICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwg
WDg2OjplYXgpOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam5l
KCksIGkgKyAyICsgdGFyZ2V0KSk7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVn
ZXIoSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAg
IG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsgdGFyZ2V0KSk7Cisg
ICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpmYWxzZUltbWVk
aWF0ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgX18gbGluayhpc1plcm8sIF9f
IGxhYmVsKCkpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX2xlc3MpCisgICAgICAgIGNh
c2Ugb3BfbmVxOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtcyhYODY6OmVheCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgX18gY21wbF9ycihYODY6
OmVheCwgWDg2OjplZHgpOworCisgICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAg
ZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShYODY6OmVheCk7CisKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisKKyAgICAgICAg
ICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfcG9zdF9kZWM6IHsKKyAgICAgICAgICAgIGludCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplYXgsIFg4Njo6ZWR4
KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
CisgICAgICAgICAgICBfXyBzdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpT
SW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7CisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ1RJ
X0NPTVBJTEVfQklOQVJZX09QKG9wX3Vyc2hpZnQpCisgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2Ojpl
ZHgsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVh
eCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgX18geG9ybF9ycihYODY6OmVkeCwgWDg2Ojpl
YXgpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKKyAgICAgICAgICAgIFJlZ0V4cCog
cmVnRXhwID0gbV9jb2RlQmxvY2stPnJlZ2V4cHNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZF0uZ2V0KCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZD4ocmVnRXhwKSwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX25ld19yZWdleHApOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkg
Kz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0
b3I6IHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBY
ODY6OmVkeCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4
Njo6ZWF4LCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBfXyBvcmxfcnIoWDg2OjplZHgsIFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Rocm93OiB7CisgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
LCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX3Rocm93KTsKKyAgICAgICAgICAgIF9fIGFkZGxfaThyKDB4MjAsIFg4Njo6ZXNwKTsK
KyAgICAgICAgICAgIF9fIHBvcGxfcihYODY6OmVieCk7CisgICAgICAgICAgICBfXyBwb3BsX3Io
WDg2OjplZGkpOworICAgICAgICAgICAgX18gcG9wbF9yKFg4Njo6ZXNpKTsKKyAgICAgICAgICAg
IF9fIHJldCgpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7CisgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAw
LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2dldF9wbmFtZXMpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV4dF9wbmFtZTogeworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfbmV4dF9wbmFtZSk7CisgICAgICAgICAgICBfXyB0ZXN0
bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGVuZE9mSXRlciA9
IF9fIGplKCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFi
bGUoX18gam1wKCksIGkgKyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBfXyBsaW5rKGVuZE9m
SXRlciwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1c2hfc2NvcGU6IHsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfcHVzaF9zY29wZSk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3BvcF9zY29wZTogeworICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3Bfc2NvcGUpOworICAg
ICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Q1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfdHlwZW9mKQorICAgICAgICBDVElfQ09NUElMRV9VTkFS
WV9PUChvcF9pc191bmRlZmluZWQpCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lz
X2Jvb2xlYW4pCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX251bWJlcikKKyAg
ICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfc3RyaW5nKQorICAgICAgICBDVElfQ09N
UElMRV9VTkFSWV9PUChvcF9pc19vYmplY3QpCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09Q
KG9wX2lzX2Z1bmN0aW9uKQorICAgICAgICBjYXNlIG9wX3N0cmljdGVxOiB7CisgICAgICAgICAg
ICBjb21waWxlT3BTdHJpY3RFcShpbnN0cnVjdGlvbiArIGksIGksIE9wU3RyaWN0RXEpOworICAg
ICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6IHsKKyAgICAgICAgICAgIGNvbXBpbGVPcFN0cmljdEVxKGluc3Ry
dWN0aW9uICsgaSwgaSwgT3BOU3RyaWN0RXEpOworICAgICAgICAgICAgaSArPSA0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b19qc251bWJlcjogewor
ICAgICAgICAgICAgaW50IHNyY1ZSZWcgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBYODY6OmVheCwgaSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRh
Z0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMgd2FzSW1tZWRp
YXRlID0gX18gam56KCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChYODY6OmVheCwgaSwgc3JjVlJlZyk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgICAg
ICAgICAgX18gY21wbF9pMzJtKE51bWJlclR5cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1f
dHlwZUluZm8ubV90eXBlKSwgWDg2OjplY3gpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBfXyBsaW5rKHdhc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7CisKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2luOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7
CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2luKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9
IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1c2hf
bmV3X3Njb3BlOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVu
dCksIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX25ld19zY29wZSk7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9B
UkdTX2NhbGxGcmFtZSwgWDg2OjplZGkpOyAvLyBlZGkgOj0gcgorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3Bfam1wX3Njb3BlczogeworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGNv
dW50LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
am1wX3Njb3Blcyk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUo
X18gam1wKCksIGkgKyAyICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDogewor
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQpOworICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZCwgOCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9wdXRfYnlfaW5kZXgpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CisgICAg
ICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KKyAg
ICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5pbW1l
ZGlhdGVTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUpKTsKKyAgICAgICAgICAgIGp1bXBUYWJsZS0+Y3RpT2Zmc2V0cy5n
cm93KGp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkpOworCisgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0KTsKKyAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX2ltbSk7CisgICAg
ICAgICAgICBfXyBqbXBfcihYODY6OmVheCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
KyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5j
aGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIGp1bXBUYWJsZS0+Y3RpT2Zmc2V0
cy5ncm93KGp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkpOworCisgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4Njo6ZWN4KTsK
KyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0KTsKKyAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX2NoYXIpOwor
ICAgICAgICAgICAgX18gam1wX3IoWDg2OjplYXgpOworICAgICAgICAgICAgaSArPSA0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5n
OiB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0g
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCkp
OworCisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJs
ZUluZGV4LCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlf
b3Bfc3dpdGNoX3N0cmluZyk7CisgICAgICAgICAgICBfXyBqbXBfcihYODY6OmVheCk7CisgICAg
ICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2RlbF9ieV92YWw6IHsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X3ZhbCk7CisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
aSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9w
dXRfZ2V0dGVyOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAg
ICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgOCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9wdXRfZ2V0dGVyKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X3NldHRlcjogeworICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7
CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZD4oaWRlbnQpLCA0KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKKyAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X3NldHRlcik7Cisg
ICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX25ld19lcnJvcjogeworICAgICAgICAgICAgSlNWYWx1ZSogbWVzc2FnZSA9IG1f
Y29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmRdOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGFzSW50
ZWdlcihtZXNzYWdlKSwgNCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQobV9j
b2RlQmxvY2stPmxpbmVOdW1iZXJGb3JWUEMoJmluc3RydWN0aW9uW2ldKSwgOCk7CisgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19lcnJvcik7CisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9kZWJ1ZzogeworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0
YW50KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDApOworICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQpOworICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQs
IDgpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWJ1
Zyk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0g
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMgaXNJ
bW1lZGlhdGUgPSBfXyBqbnooKTsKKworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZT
RVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAgICAg
ICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZJRUxEX09GRlNFVChTdHJ1
Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIHNl
dG56X3IoWDg2OjplYXgpOworCisgICAgICAgICAgICBKbXBTcmMgd2FzTm90SW1tZWRpYXRlID0g
X18gam1wKCk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkp
OworCisgICAgICAgICAgICBfXyBtb3ZsX2kzMnIofkpTSW1tZWRpYXRlOjpFeHRlbmRlZFRhZ0Jp
dFVuZGVmaW5lZCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gYW5kbF9ycihYODY6OmVheCwg
WDg2OjplY3gpOworICAgICAgICAgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjpGdWxsVGFn
VHlwZU51bGwsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIHNldGVfcihYODY6OmVheCk7CisK
KyAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKKworICAg
ICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBl
bWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogeworICAgICAgICAgICAg
dW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAg
ICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6
ZWN4KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
RklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOwor
ICAgICAgICAgICAgX18gc2V0el9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgSm1wU3JjIHdh
c05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOworCisgICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRp
YXRlLCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0
ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFu
ZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0lt
bWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBzZXRu
ZV9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9f
IGxhYmVsKCkpOworCisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4
KTsKKyAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBpICs9IDM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VudGVyOiB7
CisgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5p
dGlhbGl6ZSBvdXIgY29uc3RhbnQKKyAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3Rh
bGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZworICAgICAgICAg
ICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgorICAgICAg
ICAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMgKyBtX2NvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7
IGogPCBjb3VudDsgKytqKQorICAgICAgICAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIoaik7CisK
KyAgICAgICAgICAgIGkrPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9lbnRlcl93aXRoX2FjdGl2YXRpb246IHsKKyAgICAgICAgICAgIC8vIEV2ZW4g
dGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAor
ICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQg
dW5uZWNlc3NhcmlseSBwcm9sb25naW5nCisgICAgICAgICAgICAvLyBvYmplY3QgbGlmZXRpbWUg
YW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCisgICAgICAgICAgICBzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtVmFycyArIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNvdW50OyArK2opCisgICAg
ICAgICAgICAgICAgZW1pdEluaXRSZWdpc3RlcihqKTsKKworICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24pOworICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKwor
ICAgICAgICAgICAgaSs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycyA9PSAxKSA/IEludGVycHJldGVyOjpjdGlfb3Bf
Y3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMgOiBJbnRlcnByZXRlcjo6Y3RpX29wX2NyZWF0ZV9h
cmd1bWVudHMpOworICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgs
IGkpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgs
IGkpOworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVj
dHVyZSksIFg4Njo6ZWF4LCBYODY6OmVkeCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE5l
ZWRzVGhpc0NvbnZlcnNpb24sIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9m
bGFncyksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpueigpLCBpKSk7CisKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsK
KyAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSwg
WDg2OjplYXgpOworICAgICAgICAgICAgX18gY21wbF9pMzJtKDAsIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIEptcFNyYyBub1Byb2ZpbGVyID0gX18gamUoKTsKKyAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAs
IFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlf
b3BfcHJvZmlsZV93aWxsX2NhbGwpOworICAgICAgICAgICAgX18gbGluayhub1Byb2ZpbGVyLCBf
XyBsYWJlbCgpKTsKKworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOiB7CisgICAgICAgICAg
ICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2UsIFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIF9fIGNtcGxfaTMybSgwLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBT
cmMgbm9Qcm9maWxlciA9IF9fIGplKCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVheCk7
CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Byb2ZpbGVf
ZGlkX2NhbGwpOworICAgICAgICAgICAgX18gbGluayhub1Byb2ZpbGVyLCBfXyBsYWJlbCgpKTsK
KworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9jaGFpbjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xp
c3Q6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3NlbGZfbGlzdDoKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKKyAg
ICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgY2FzZSBvcF9wdXRfYnlf
aWRfcmVwbGFjZToKKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbjoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNT
RVJUKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBtX2NvZGVCbG9jay0+cHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZvSW5k
ZXggPT0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgpKTsKK30KKworCit2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCit7CisgICAgdW5zaWduZWQgam1wVGFibGVDb3Vu
dCA9IG1fam1wVGFibGUuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqbXBU
YWJsZUNvdW50OyArK2kpCisgICAgICAgIF9fIGxpbmsobV9qbXBUYWJsZVtpXS5mcm9tLCBtX2xh
YmVsc1ttX2ptcFRhYmxlW2ldLnRvXSk7CisgICAgbV9qbXBUYWJsZS5jbGVhcigpOworfQorCisj
ZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0UobmFtZSkgXAorICAgIGNhc2Ug
bmFtZTogeyBcCisgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7IFwKKyAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsg
XAorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsgXAorICAgICAgICBpICs9IDQ7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKKyNkZWZp
bmUgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VCTEVfRU5UUlkobmFtZSkgXAor
ICAgIGNhc2UgbmFtZTogeyBcCisgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7IFwKKyAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7ICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRQ
dXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQs
IDQsIFg4Njo6ZWN4KTsgXAorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
XyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsgXAorICAgICAgICBpICs9IDQ7IFwKKyAgICAgICAgYnJlYWs7IFwK
KyAgICB9CisgICAgCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQoreworICAg
IHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7CisgICAgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXggPSAwOworCisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOworICAgIGZvciAoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAh
PSBtX3Nsb3dDYXNlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIC8vIEZJWE1FOiBlbmFibGUg
cGVlcGhvbGUgb3B0aW1pemF0aW9ucyBmb3Igc2xvdyBjYXNlcyB3aGVuIGFwcGxpY2FibGUKKyAg
ICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworCisgICAgICAgIHVuc2lnbmVkIGkgPSBp
dGVyLT50bzsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBpOwor
I2VuZGlmCisKKyAgICAgICAgc3dpdGNoIChPcGNvZGVJRCBvcGNvZGVJRCA9IG1faW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uW2ldLnUub3Bjb2RlKSkgeworICAgICAgICBjYXNl
IG9wX2NvbnZlcnRfdGhpczogeworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBs
YWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnZlcnRfdGhpcyk7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0
cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVl
ID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7CisgICAgICAgICAgICAg
ICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207CisgICAgICAgICAgICAgICAgX18gbGluaygo
KytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgX18gc3VibF9pMzJy
KGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBYODY6OmVheCk7CisgICAgICAg
ICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCA0KTsKKyAgICAgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7CisgICAgICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChKU1Zh
bHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgeworICAg
ICAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgICAg
IF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIF9f
IHN1YmxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgp
OworICAgICAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAgICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOworICAgICAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFuZFR5cGVzOjpm
cm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlm
ICh0eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSAmJiB0eXBlcy5zZWNvbmQoKS5taWdodEJl
TnVtYmVyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nh
c2Uob3BfYWRkLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBpKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKKyAgICAgICAgICAgIC8vIFRo
ZSBzbG93IGNhc2UgdGhhdCBoYW5kbGVzIGFjY2Vzc2VzIHRvIGFycmF5cyAoYmVsb3cpIG1heSBq
dW1wIGJhY2sgdXAgdG8gaGVyZS4gCisgICAgICAgICAgICBKbXBEc3QgYmVnaW5HZXRCeVZhbFNs
b3cgPSBfXyBsYWJlbCgpOworCisgICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJv
bTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAg
ICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAg
ICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9f
IGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2
OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV92YWwpOwor
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIF9fIGxpbmsoX18gam1wKCksIG1fbGFiZWxzW2kgKyA0XSk7
CisKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc2xvdyBjYXNlIHRoYXQgaGFuZGxlcyBhY2Nlc3Nl
cyB0byBhcnJheXMgYWJvdmUgdGhlIGZhc3QgY3V0LW9mZi4KKyAgICAgICAgICAgIC8vIEZpcnN0
LCBjaGVjayBpZiB0aGlzIGlzIGFuIGFjY2VzcyB0byB0aGUgdmVjdG9yCisgICAgICAgICAgICBf
XyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGNtcGxf
cm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yTGVuZ3RoKSwg
WDg2OjplY3gpOworICAgICAgICAgICAgX18gbGluayhfXyBqYmUoKSwgYmVnaW5HZXRCeVZhbFNs
b3cpOworCisgICAgICAgICAgICAvLyBva2F5LCBtaXNzZWQgdGhlIGZhc3QgcmVnaW9uLCBidXQg
aXQgaXMgc3RpbGwgaW4gdGhlIHZlY3Rvci4gIEdldCB0aGUgdmFsdWUuCisgICAgICAgICAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2Ojpl
Y3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVjeCk7CisgICAgICAgICAgICAv
LyBDaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBsb2FkZWQgaXMgemVybzsgaWYgc28gd2UgbmVlZCB0
byByZXR1cm4gdW5kZWZpbmVkLgorICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplY3gsIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwgYmVnaW5HZXRCeVZhbFNsb3cp
OworICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVjeCwgWDg2OjplYXgpOworICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBY
ODY6OmVheCk7CisKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3ViOiB7CisgICAgICAgICAgICBjb21waWxlQmluYXJ5
QXJpdGhPcFNsb3dDYXNlKG9wX3N1YiwgaXRlciwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQp
LCBpKTsKKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0g
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+
ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBpZiAoZ2V0Q29uc3RhbnRJbW1lZGlhdGVO
dW1lcmljQXJnKHNyYzIpKQorICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVh
bFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KTsKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2xzaGlmdDogeworICAgICAgICAgICAgSm1wU3JjIG5vdEltbTEgPSBpdGVyLT5mcm9tOworICAg
ICAgICAgICAgSm1wU3JjIG5vdEltbTIgPSAoKytpdGVyKS0+ZnJvbTsKKyAgICAgICAgICAgIF9f
IGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGlu
c3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgICAgIF9f
IGxpbmsobm90SW1tMSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBsaW5rKG5vdEltbTIs
IF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Cisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKKyAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbHNoaWZ0KTsKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2xvb3BfaWZfbGVzczogeworICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsK
KworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0
ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBp
ZiAoc3JjMmltbSkgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFi
ZWwoKSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7CisgICAg
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzKTsKKyAgICAgICAgICAgICAg
ICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9fIGxp
bmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Cisg
ICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAg
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOworICAgICAgICAgICAgICAgIF9f
IHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgX18gbGluayhf
XyBqbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfcHV0X2J5X2lkOiB7CisgICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoaXRlciwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICAgICAg
KytpdGVyOworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKwor
ICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
c1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKKyAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVkeCwgOCk7CisgICAgICAgICAgICBKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkKTsKKworICAgICAgICAgICAgLy8gVHJh
Y2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVy
IHJlcGF0Y2ggaW5mb3JtYXRpb24uCisgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0u
Ynl0ZWNvZGVJbmRleCA9PSBpKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxh
dGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRp
b24gPSBjYWxsOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7
CisKKyAgICAgICAgICAgIGkgKz0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7CisgICAgICAgICAgICAvLyBBcyBmb3IgdGhlIGhv
dCBwYXRoIG9mIGdldF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiB1c2UgYW4g
YXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9mZnNldAorICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBv
bmx5IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0
cmFjayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uCisgICAgICAgICAgICAvLyBvZiB0aGUgY2Fs
bCAod2hpY2ggd2UgY2FuIHVzZSB0byBsb29rIHVwIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uKSwg
YnV0IHNob3VsZCBhIGFycmF5LWxlbmd0aCBvcgorICAgICAgICAgICAgLy8gcHJvdG90eXBlIGFj
Y2VzcyB0cmFtcG9saW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBU
byBkbyBzbyB3ZSBjYW4gc3VidHJhY3QgYmFjaworICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNl
IGZyb20gdGhlIGNhbGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2FzZS4KKworICAgICAgICAg
ICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQpKQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgIF9fIGxpbmso
aXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBK
bXBEc3QgY29sZFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisjZW5kaWYgICAgICAgIAorICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgICAgICAgICAgSm1wU3JjIGNhbGwgPSBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZCk7CisgICAgICAgICAg
ICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhjb2xkUGF0
aEJlZ2luLCBjYWxsKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOworCisgICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRo
aXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KKyAgICAgICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOworICAgICAgICAg
ICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7CisgICAgICAgICAgICArK3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKworICAgICAgICAgICAgaSArPSA4OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3NlcTog
eworICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKKworICAgICAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoc3JjMmltbSkgeworICAg
ICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7CisgICAgICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwg
NCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOworICAgICAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4
Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9s
YWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBf
XyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4
Njo6ZWR4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX2xvb3BfaWZfbGVzc2VxKTsKKyAgICAgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6
OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFi
ZWxzW2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3ByZV9pbmM6
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKKyAgICAgICAg
ICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18g
c3VibF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1t
ZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFi
ZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2luYyk7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgICAgICAgICBpICs9IDI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92
YWw6IHsKKyAgICAgICAgICAgIC8vIE5vcm1hbCBzbG93IGNhc2VzIC0gZWl0aGVyIGlzIG5vdCBh
biBpbW1lZGlhdGUgaW1tLCBvciBpcyBhbiBhcnJheS4KKyAgICAgICAgICAgIEptcFNyYyBub3RJ
bW0gPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18g
bGFiZWwoKSk7CisgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgp
KTsKKyAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2OjplZHgpOwor
ICAgICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVj
eCwgaSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVjeCwgOCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX3B1dF9ieV92YWwpOworICAgICAgICAgICAgX18gbGluayhfXyBqbXAoKSwgbV9sYWJl
bHNbaSArIDRdKTsKKworICAgICAgICAgICAgLy8gc2xvdyBjYXNlcyBmb3IgaW1tZWRpYXRlIGlu
dCBhY2Nlc3NlcyB0byBhcnJheXMKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20s
IF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFi
ZWwoKSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmco
WDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Cisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA4KTsKKyAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheSk7CisKKyAgICAg
ICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfbG9vcF9pZl90cnVlOiB7CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkp
OworCisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKKyAgICAgICAgICAgIF9fIHRlc3RsX3Jy
KFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwg
bV9sYWJlbHNbaSArIDIgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJlX2RlYzogeworICAgICAg
ICAgICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgX18gbGlu
aygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBhZGRsX2k4cihn
ZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSks
IFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7CisgICAgICAg
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAg
ICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0Fy
ZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1t
KSB7CisgICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAg
ICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKKyAgICAgICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9qbGVzcyk7CisgICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2
OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1fbGFi
ZWxzW2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgX18g
bGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgZW1pdFB1
dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVkeCwgNCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9qbGVzcyk7CisgICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1fbGFiZWxzW2kgKyAzICsg
dGFyZ2V0XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25vdDogeworICAgICAgICAgICAg
X18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIHhvcmxfaThy
KEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVt
aXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9ub3QpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7Cisg
ICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKKyAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6
ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhfXyBqZSgpLCBtX2xhYmVs
c1tpICsgMiArIHRhcmdldF0pOyAvLyBpbnZlcnRlZCEKKyAgICAgICAgICAgIGkgKz0gMzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcG9zdF9pbmM6IHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfcG9zdF9pbmMpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2JpdG5vdDog
eworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRub3QpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkg
Kz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0
YW5kOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNB
cmcoc3JjMSkpIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVs
KCkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNy
YzEsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4
LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X2JpdGFuZCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3Jj
MikpIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwor
ICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsK
KyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFu
ZCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6
ZWR4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2JpdGFuZCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qdHJ1ZTogeworICAgICAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2
OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9qdHJ1ZSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAyICsgdGFyZ2V0
XSk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX3Bvc3RfZGVjOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3Qg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhpdGVy
LT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20s
IF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Cisg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Bvc3RfZGVjKTsK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+
ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAw
KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXR4b3IpOworICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfYml0b3I6IHsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFi
ZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRvcik7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSAr
PSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lcTog
eworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVkeCwgNCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX2VxKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lcTogeworICAgICAgICAgICAgX18g
bGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmco
WDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Cisg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25lcSk7CisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VCTEVfRU5UUlkob3Bf
c3RyaWN0ZXEpOworICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNFX0RPVUJM
RV9FTlRSWShvcF9uc3RyaWN0ZXEpOworICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKKyAg
ICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBf
XyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmso
KCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2Ojpl
Y3gpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCwg
OCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9pbnN0YW5jZW9mKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX21vZDogeworICAgICAgICAg
ICAgSm1wU3JjIG5vdEltbTEgPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgSm1wU3JjIG5vdElt
bTIgPSAoKytpdGVyKS0+ZnJvbTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20s
IF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVj
eCk7CisgICAgICAgICAgICBfXyBsaW5rKG5vdEltbTEsIF9fIGxhYmVsKCkpOworICAgICAgICAg
ICAgX18gbGluayhub3RJbW0yLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElB
cmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgNCk7
CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX21vZCk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNyYzEgPSBpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNyYzIgPSBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgSlNWYWx1ZSogc3JjMVZhbHVlID0gZ2V0Q29u
c3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpOworICAgICAgICAgICAgSlNWYWx1ZSogc3Jj
MlZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpOworICAgICAgICAg
ICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChzcmMxVmFsdWUgJiYgKCh2YWx1ZSA9
IEpTSW1tZWRpYXRlOjppbnRWYWx1ZShzcmMxVmFsdWUpKSA+IDApKSB7CisgICAgICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICAvLyBUaGVy
ZSBpcyBhbiBleHRyYSBzbG93IGNhc2UgZm9yIChvcDEgKiAtTikgb3IgKC1OICogb3AyKSwgdG8g
Y2hlY2sgZm9yIDAgc2luY2UgdGhpcyBzaG91bGQgcHJvZHVjZSBhIHJlc3VsdCBvZiAtMC4KKyAg
ICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBY
ODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfbXVsKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNyYzJWYWx1ZSAmJiAoKHZhbHVl
ID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzJWYWx1ZSkpID4gMCkpIHsKKyAgICAgICAgICAg
ICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIF9f
IGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIGFuIGV4dHJhIHNsb3cgY2FzZSBmb3IgKG9wMSAqIC1OKSBvciAoLU4gKiBvcDIpLCB0
byBjaGVjayBmb3IgMCBzaW5jZSB0aGlzIHNob3VsZCBwcm9kdWNlIGEgcmVzdWx0IG9mIC0wLgor
ICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAs
IFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNvbXBp
bGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uob3BfbXVsLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIE9w
ZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7Cisg
ICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIGNh
c2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2UoaW5z
dHJ1Y3Rpb24gKyBpLCBpLCBpdGVyLCBjYWxsTGlua0luZm9JbmRleCsrLCBvcGNvZGVJRCk7Cisg
ICAgICAgICAgICBpICs9IChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyA3IDogNSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX2pzbnVtYmVyOiB7
CisgICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgZW1pdFB1
dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3RvX2pzbnVtYmVyKTsKKworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0g
MzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKChpdGVyICsgMSkgPT0gbV9zbG93
Q2FzZXMuZW5kKCkgfHwgZmlyc3RUbyAhPSAoaXRlciArIDEpLT50bywiTm90IGVub3VnaCBqdW1w
cyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoZmlyc3RUbyA9PSBpdGVyLT50bywgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKworICAgICAgICBfXyBsaW5rKF9fIGptcCgpLCBtX2xhYmVsc1tp
XSk7CisgICAgfQorCisgICAgQVNTRVJUKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9
PSBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpKTsKKyAgICBB
U1NFUlQoY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6
ZSgpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlKCkKK3sKKyNpZiBFTkFCTEUoQ09E
RUJMT0NLX1NBTVBMSU5HKQorICAgICAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZD4obV9jb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9j
a1Nsb3QoKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICBf
XyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5z
YW1wbGVTbG90KCkpOworI2VuZGlmCisKKyAgICAvLyBDb3VsZCB1c2UgYSBwb3BsX20sIGJ1dCB3
b3VsZCBuZWVkIHRvIG9mZnNldCB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlmIHNvLgorICAg
IF9fIHBvcGxfcihYODY6OmVjeCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFg4Njo6
ZWN4LCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKworICAgIEptcFNyYyBzbG93UmVnaXN0ZXJG
aWxlQ2hlY2s7CisgICAgSm1wRHN0IGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2s7CisgICAgaWYgKG1f
Y29kZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICAgICAgLy8gSW4gdGhl
IGNhc2Ugb2YgYSBmYXN0IGxpbmtlZCBjYWxsLCB3ZSBkbyBub3Qgc2V0IHRoaXMgdXAgaW4gdGhl
IGNhbGxlci4KKyAgICAgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KG1fY29kZUJsb2NrKSwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisKKyAgICAgICAgZW1pdEdldENUSVBhcmFt
KENUSV9BUkdTX3JlZ2lzdGVyRmlsZSwgWDg2OjplYXgpOworICAgICAgICBfXyBsZWFsX21yKG1f
Y29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVk
aSwgWDg2OjplZHgpOworICAgICAgICBfXyBjbXBsX21yKEZJRUxEX09GRlNFVChSZWdpc3RlckZp
bGUsIG1fZW5kKSwgWDg2OjplYXgsIFg4Njo6ZWR4KTsKKyAgICAgICAgc2xvd1JlZ2lzdGVyRmls
ZUNoZWNrID0gX18gamcoKTsKKyAgICAgICAgYWZ0ZXJSZWdpc3RlckZpbGVDaGVjayA9IF9fIGxh
YmVsKCk7CisgICAgfQorCisgICAgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOworICAgIHByaXZh
dGVDb21waWxlTGlua1Bhc3MoKTsKKyAgICBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOworCisg
ICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICAgICAg
X18gbGluayhzbG93UmVnaXN0ZXJGaWxlQ2hlY2ssIF9fIGxhYmVsKCkpOworICAgICAgICBlbWl0
Q1RJQ2FsbCgwLCBJbnRlcnByZXRlcjo6Y3RpX3JlZ2lzdGVyX2ZpbGVfY2hlY2spOworICAgICAg
ICBKbXBTcmMgYmFja1RvQm9keSA9IF9fIGptcCgpOworICAgICAgICBfXyBsaW5rKGJhY2tUb0Jv
ZHksIGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2spOworICAgIH0KKworICAgIEFTU0VSVChtX2ptcFRh
YmxlLmlzRW1wdHkoKSk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsK
KworICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2Vu
ZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN3aXRjaFJlY29yZCByZWNv
cmQgPSBtX3N3aXRjaGVzW2ldOworICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gcmVj
b3JkLmJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgaWYgKHJlY29yZC50eXBlICE9IFN3aXRjaFJl
Y29yZDo6U3RyaW5nKSB7CisgICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5cGUgPT0gU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUgfHwgcmVjb3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXIpOyAKKyAgICAgICAgICAgIEFTU0VSVChyZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJs
ZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkgPT0gcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFi
bGUtPmN0aU9mZnNldHMuc2l6ZSgpKTsKKworICAgICAgICAgICAgcmVjb3JkLmp1bXBUYWJsZS5z
aW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUs
IG1fbGFiZWxzW2J5dGVjb2RlSW5kZXggKyAzICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlY29yZC5qdW1wVGFibGUuc2lt
cGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmJy
YW5jaE9mZnNldHNbal07CisgICAgICAgICAgICAgICAgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVK
dW1wVGFibGUtPmN0aU9mZnNldHNbal0gPSBvZmZzZXQgPyBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNz
KGNvZGUsIG1fbGFiZWxzW2J5dGVjb2RlSW5kZXggKyAzICsgb2Zmc2V0XSkgOiByZWNvcmQuanVt
cFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNv
cmQ6OlN0cmluZyk7CisKKyAgICAgICAgICAgIHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlLT5jdGlEZWZhdWx0ID0gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1ti
eXRlY29kZUluZGV4ICsgMyArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CisKKyAgICAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHJlY29y
ZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5lbmQoKTsgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6
aXRlcmF0b3IgaXQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFi
bGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gaXQtPnNlY29uZC5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgaXQtPnNl
Y29uZC5jdGlPZmZzZXQgPSBvZmZzZXQgPyBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1f
bGFiZWxzW2J5dGVjb2RlSW5kZXggKyAzICsgb2Zmc2V0XSkgOiByZWNvcmQuanVtcFRhYmxlLnN0
cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGZvciAoVmVjdG9yPEhhbmRsZXJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fY29k
ZUJsb2NrLT5leGNlcHRpb25IYW5kbGVycy5iZWdpbigpOyBpdGVyICE9IG1fY29kZUJsb2NrLT5l
eGNlcHRpb25IYW5kbGVycy5lbmQoKTsgKytpdGVyKQorICAgICAgICAgaXRlci0+bmF0aXZlQ29k
ZSA9IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbaXRlci0+dGFyZ2V0XSk7
CisKKyAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMu
YmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0
ZXItPnRvKQorICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGl0ZXItPmZyb20s
IGl0ZXItPnRvKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAu
YWRkKF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgaXRlci0+ZnJvbSksIGl0ZXItPmJ5dGVj
b2RlSW5kZXgpOworICAgIH0KKworICAgIC8vIExpbmsgYWJzb2x1dGUgYWRkcmVzc2VzIGZvciBq
c3IKKyAgICBmb3IgKFZlY3RvcjxKU1JJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fanNyU2l0ZXMu
YmVnaW4oKTsgaXRlciAhPSBtX2pzclNpdGVzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIFg4NkFz
c2VtYmxlcjo6bGlua0Fic29sdXRlQWRkcmVzcyhjb2RlLCBpdGVyLT5hZGRyUG9zaXRpb24sIGl0
ZXItPnRhcmdldCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2st
PnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zW2ldOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IFg4NkFzc2VtYmxlcjo6
Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZv
W2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gWDg2
QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fcHJvcGVydHlBY2Nlc3NDb21w
aWxhdGlvbkluZm9baV0uaG90UGF0aEJlZ2luKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm9zW2ldOwor
ICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2Nh
dGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNh
bGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gWDg2QXNzZW1i
bGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm9baV0uaG90UGF0aEJlZ2luKTsKKyAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBY
ODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoT3RoZXIpOworICAgICAgICBpbmZvLmNvbGRQYXRo
T3RoZXIgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3Ry
dWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jb2xkUGF0aE90aGVyKTsKKyAgICB9CisKKyAg
ICBtX2NvZGVCbG9jay0+Y3RpQ29kZSA9IGNvZGU7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRTZWxmKFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCB2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qg
b2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpU
YWdNYXNrLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczEgPSBfXyBqbmUoKTsK
KyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1
Y3R1cmUpOworCisgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAorICAg
IF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4
Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2Yo
SlNWYWx1ZSopLCBYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIHJldCgpOworCisgICAgdm9p
ZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisKKyAgICBYODZBc3NlbWJsZXI6Omxpbmso
Y29kZSwgZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7CisgICAgCisgICAgY3Rp
UmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29kZSk7Cit9CisKK3Zv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
U3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQq
IHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworI2lmIFVTRShDVElfUkVQ
QVRDSF9QSUMpCisgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0
Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljLgorICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3QpKTsKKworICAgIC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0IGRlZmluaXRlbHkgZXhpc3Rz
IChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1
Y3R1cmUgdGhhdCBpcworICAgIC8vIHJlZmVyZW5jaW5nIHRoZSBwcm90b3R5cGUgb2JqZWN0IC0g
bGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3MgdGFibGUgbmljZSBhbmQgZWFybHkhKQorICAg
IEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJvdG90eXBlRm9y
TG9va3VwKGNhbGxGcmFtZSkpOworICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0
b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOworICAgIF9fIG1vdmxfbXIo
c3RhdGljX2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOworCisg
ICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgorICAg
IEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVy
ZSk7CisKKyAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQg
bm90IGNoYW5nZWQuCisgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyA9
ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4ocHJvdG90eXBlU3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJl
QWRkcmVzcyk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBfXyBqbmUoKTsKKworICAgIC8v
IENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKKyAgICBfXyBtb3ZsX21yKGNhY2hl
ZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7CisKKyAgICBK
bXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFi
bGVDb3B5KCk7CisKKyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0
aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4K
KyAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5mby5j
YWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7Cisg
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHNsb3dDYXNlQmVnaW4p
OworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJl
Z2luKTsKKworICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBj
b2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMu
CisgICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihp
bmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0
OworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdWNjZXNzRGVzdCkpOworCisgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBj
cmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgorICAgIGluZm8uc3R1YlJv
dXRpbmUgPSBjb2RlOworCisgICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1wIHRvIHNsb3cg
Y2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KKyAgICBpbnRw
dHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0
aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKKyAgICBYODZB
c3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOworI2Vsc2UK
KyAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4aXN0cyAoaWYgdGhpcyBz
dHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEgU3RydWN0dXJlIHRoYXQg
aXMKKyAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVjdCAtIGxldCdzIHNwZWN1
bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkKKyAgICBKU09iamVjdCog
cHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxs
RnJhbWUpKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnBy
b3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKKyAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0
PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKKworICAgIC8vIENoZWNr
IGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBfXyB0ZXN0bF9p
MzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGZhaWx1cmVD
YXNlczEgPSBfXyBqbmUoKTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IGNoZWNrU3RydWN0
dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOworCisgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBv
YmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgorICAgIFN0cnVjdHVyZSoqIHByb3Rv
dHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7CisgICAg
X18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVy
ZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOworICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMz
ID0gX18gam5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0
CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVk
eCwgWDg2OjplYXgpOworCisgICAgX18gcmV0KCk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhl
Y3V0YWJsZUNvcHkoKTsKKworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2Fz
ZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9p
ZF9wcm90b19mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNl
czIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lk
X3Byb3RvX2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2Vz
MywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRf
cHJvdG9fZmFpbCkpOworCisgICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpLnN0dWJSb3V0aW5lID0gY29kZTsKKworICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOworI2VuZGlmCit9CisKKyNpZiBVU0UoQ1RJX1JFUEFU
Q0hfUElDKQordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5
bW9ycGhpY1N0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzaXplX3QgY2FjaGVkT2Zmc2V0KQoreworICAgIEptcFNyYyBmYWlsdXJlQ2FzZSA9IGNoZWNr
U3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Cisg
ICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCwg
WDg2OjplYXgpOworICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7CisKKyAgICB2b2lkKiBj
b2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKyAgICBBU1NFUlQoY29kZSk7CisKKyAgICAvLyBV
c2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNr
IHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAgICB2b2lkKiBsYXN0UHJvdG9C
ZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHVi
Um91dGluZTsKKyAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQorICAgICAgICBsYXN0UHJvdG9CZWdp
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24p
IC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7CisKKyAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgZmFpbHVyZUNhc2UsIGxhc3RQcm90b0JlZ2luKTsKKworICAgIC8vIE9uIHN1
Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdp
bGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRyX3Qgc3VjY2Vz
c0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2lu
KSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CisgICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NE
ZXN0KSk7CisKKyAgICBzdHJ1Y3R1cmUtPnJlZigpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWNoZWRPZmZzZXQsIGNvZGUsIHN0cnVjdHVyZSk7
CisKKyAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4g
dGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgorICAgIGludHB0cl90IGptcExvY2F0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikg
KyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7CisgICAgWDg2QXNzZW1ibGVy
OjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKK30KKwordm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywg
aW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90
eXBlU3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
K3sKKyAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4aXN0cyAoaWYgdGhp
cyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEgU3RydWN0dXJlIHRo
YXQgaXMKKyAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVjdCAtIGxldCdzIHNw
ZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkKKyAgICBKU09iamVj
dCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChj
YWxsRnJhbWUpKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0g
JnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKKyAgICBfXyBtb3ZsX21yKHN0YXRpY19j
YXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKKworICAgIC8vIENo
ZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBKbXBTcmMg
ZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOworCisg
ICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFu
Z2VkLgorICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3Rv
T2JqZWN0LT5tX3N0cnVjdHVyZSk7CisgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3Mp
OworICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7CisKKyAgICAvLyBDaGVja3Mg
b3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQg
KiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOworCisgICAgSm1wU3JjIHN1
Y2Nlc3MgPSBfXyBqbXAoKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgp
OworCisgICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1
cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCisgICAgdm9p
ZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJl
Q2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZh
aWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKKworICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJu
IGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0
aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hP
ZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7CisKKyAg
ICBzdHJ1Y3R1cmUtPnJlZigpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZS0+cmVmKCk7CisgICAg
cHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWNoZWRPZmZzZXQs
IGNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKKworICAgIC8vIEZpbmFsbHkg
cmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCisgICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9j
YXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRC
eUlkQnJhbmNoVG9TbG93Q2FzZTsKKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZz
ZXQoam1wTG9jYXRpb24sIGNvZGUpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQs
IHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIEFTU0VS
VChjb3VudCk7CisgICAgCisgICAgVmVjdG9yPEptcFNyYz4gYnVja2V0c09mRmFpbDsKKworICAg
IC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBi
dWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKSk7
CisKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgUmVmUHRy
PFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5oZWFkKCk7CisgICAgSlNPYmplY3Qq
IHByb3RvT2JqZWN0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNoYWlu
RW50cmllc1tpXS5nZXQoKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVj
dCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCisgICAgICAgIFN0cnVjdHVyZSoqIHByb3Rv
dHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7CisgICAg
ICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihjdXJyU3RydWN0dXJl
KSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwuYXBw
ZW5kKF9fIGpuZSgpKTsKKyAgICB9CisgICAgQVNTRVJUKHByb3RvT2JqZWN0KTsKKworICAgIFBy
b3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJv
cGVydHlTdG9yYWdlOworICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHByb3RvUHJv
cGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOworICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICog
c2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3VjY2Vz
cyA9IF9fIGptcCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisK
KyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAgICB2b2lkKiBs
YXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVja2V0c09m
RmFpbC5zaXplKCk7ICsraSkKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGJ1Y2tl
dHNPZkZhaWxbaV0sIGxhc3RQcm90b0JlZ2luKTsKKworICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJu
IGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0
aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hP
ZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7CisKKyAg
ICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRl
bGV0ZWQgbGF0ZXIuCisgICAgc3RydWN0dXJlLT5yZWYoKTsKKyAgICBjaGFpbi0+cmVmKCk7Cisg
ICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWNoZWRPZmZz
ZXQsIGNvZGUsIHN0cnVjdHVyZSwgY2hhaW4pOworCisgICAgLy8gRmluYWxseSByZXBhdGNoIHRo
ZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5z
dGVhZC4KKyAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlOworICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2Nh
dGlvbiwgY29kZSk7Cit9CisjZW5kaWYKKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVf
dCBjb3VudCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcywgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCit7CisjaWYgVVNFKENUSV9SRVBBVENIX1BJQykKKyAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGlu
IGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCisgICAgY3RpUmVwYXRjaENh
bGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOworCisgICAgQVNTRVJU
KGNvdW50KTsKKyAgICAKKyAgICBWZWN0b3I8Sm1wU3JjPiBidWNrZXRzT2ZGYWlsOworCisgICAg
Ly8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgorICAgIGJ1
Y2tldHNPZkZhaWwuYXBwZW5kKGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpKTsK
KworICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBSZWZQdHI8
U3RydWN0dXJlPiogY2hhaW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKKyAgICBKU09iamVjdCog
cHJvdG9PYmplY3QgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90
eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOworICAgICAgICBjdXJyU3RydWN0dXJlID0gY2hhaW5F
bnRyaWVzW2ldLmdldCgpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0
J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KKyAgICAgICAgU3RydWN0dXJlKiogcHJvdG90
eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKKyAgICAg
ICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1Y3R1cmUp
LCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKKyAgICAgICAgYnVja2V0c09mRmFpbC5hcHBl
bmQoX18gam5lKCkpOworICAgIH0KKyAgICBBU1NFUlQocHJvdG9PYmplY3QpOworCisgICAgUHJv
cGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9w
ZXJ0eVN0b3JhZ2U7CisgICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9w
ZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBz
aXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOworICAgIEptcFNyYyBzdWNjZXNz
ID0gX18gam1wKCk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKwor
ICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNh
c2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgorICAgIHZvaWQqIHNs
b3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBidWNrZXRzT2ZGYWlsLnNpemUoKTsgKytpKQorICAgICAgICBYODZB
c3NlbWJsZXI6OmxpbmsoY29kZSwgYnVja2V0c09mRmFpbFtpXSwgc2xvd0Nhc2VCZWdpbik7CisK
KyAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQg
YSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgorICAgIGlu
dHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQ
YXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKKyAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c3VjY2Vzc0Rlc3QpKTsKKworICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBz
byB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KKyAgICBpbmZvLnN0dWJSb3V0aW5lID0g
Y29kZTsKKworICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFj
ayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCisgICAgaW50cHRyX3Qgam1w
TG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikg
KyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7CisgICAgWDg2QXNzZW1ibGVy
OjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKKyNlbHNlCisgICAgQVNT
RVJUKGNvdW50KTsKKyAgICAKKyAgICBWZWN0b3I8Sm1wU3JjPiBidWNrZXRzT2ZGYWlsOworCisg
ICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgorICAg
IF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICBidWNr
ZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7CisgICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hl
Y2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSkpOworCisgICAgU3RydWN0dXJlKiBjdXJy
U3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIFJlZlB0cjxTdHJ1Y3R1cmU+KiBjaGFpbkVudHJp
ZXMgPSBjaGFpbi0+aGVhZCgpOworICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgcHJvdG9PYmpl
Y3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1l
KSk7CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjaGFpbkVudHJpZXNbaV0uZ2V0KCk7CisKKyAg
ICAgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBj
aGFuZ2VkLgorICAgICAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0g
Jihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOworICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdD4oY3VyclN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFk
ZHJlc3MpOworICAgICAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7CisgICAgfQor
ICAgIEFTU0VSVChwcm90b09iamVjdCk7CisKKyAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJv
cGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKKyAgICBfXyBt
b3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4
KTsKKyAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6
ZWR4LCBYODY6OmVheCk7CisgICAgX18gcmV0KCk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhl
Y3V0YWJsZUNvcHkoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWNrZXRzT2ZG
YWlsLnNpemUoKTsgKytpKQorICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYnVja2V0
c09mRmFpbFtpXSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfcHJvdG9fZmFpbCkpOworCisgICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKKworICAgIGN0aVJlcGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOworI2VuZGlmCit9CisKK3ZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5SWRSZXBsYWNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXpl
X3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIC8vIENoZWNrIGVh
eCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNl
czEgPSBfXyBqbmUoKTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IGNoZWNrU3RydWN0dXJl
KFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOworCisgICAgLy8gY2hlY2tzIG91dCBva2F5ISAtIHB1dERp
cmVjdE9mZnNldAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3Bl
cnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9ybShYODY6OmVk
eCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgpOworICAgIF9fIHJl
dCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisgICAgCisgICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKKyAgICBYODZBc3Nl
bWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
SW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOworCisgICAgbV9jb2RlQmxvY2st
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKKyAgICAKKyAg
ICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKK30K
KworZXh0ZXJuICJDIiB7CisKKyAgICBzdGF0aWMgSlNPYmplY3QqIHJlc2l6ZVByb3BlcnR5U3Rv
cmFnZShKU09iamVjdCogYmFzZU9iamVjdCwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KQorICAgIHsKKyAgICAgICAgYmFzZU9iamVjdC0+YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VJbmxp
bmUob2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgICAgIHJldHVybiBiYXNlT2JqZWN0OworICAgIH0K
KworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgdHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxs
b2MoU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQorewor
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkgIT0gbmV3
U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOworfQorCit2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWZWN0b3I8Sm1wU3JjLCAxNj4g
ZmFpbHVyZUNhc2VzOworICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0
IFN0cnVjdHVyZS4KKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6
OmVheCk7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7CisgICAgX18gY21wbF9p
MzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KG9sZFN0cnVjdHVyZSksIEZJRUxEX09GRlNF
VChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOworICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoX18gam5lKCkpOworICAgIFZlY3RvcjxKbXBTcmM+IHN1Y2Nlc3NDYXNlczsKKworICAgIC8v
ICBlY3ggPSBiYXNlT2JqZWN0CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBt
X3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgLy8gcHJvdG8oZWN4KSA9IGJh
c2VPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGUoKQorICAgIF9fIGNtcGxfaTMybShPYmpl
Y3RUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJRUxEX09GRlNF
VChUeXBlSW5mbywgbV90eXBlKSwgWDg2OjplY3gpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
X18gam5lKCkpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV9wcm90
b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOworICAgIAorICAgIC8vIGVjeCA9IGJhc2VPYmpl
Y3QtPm1fc3RydWN0dXJlCisgICAgZm9yIChSZWZQdHI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+
aGVhZCgpOyAqaXQ7ICsraXQpIHsKKyAgICAgICAgLy8gbnVsbCBjaGVjayB0aGUgcHJvdG90eXBl
CisgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoanNOdWxsKCkpLCBYODY6OmVjeCk7Cisg
ICAgICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoX18gamUoKSk7CisKKyAgICAgICAgLy8gQ2hlY2sg
dGhlIHN0cnVjdHVyZSBpZAorICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oaXQtPmdldCgpKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBY
ODY6OmVjeCk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOworICAgICAg
ICAKKyAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSks
IFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgICAgIF9fIGNtcGxfaTMybShPYmplY3RUeXBlLCBG
SUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJRUxEX09GRlNFVChUeXBlSW5m
bywgbV90eXBlKSwgWDg2OjplY3gpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpu
ZSgpKTsKKyAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3Byb3Rv
dHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgfQorCisgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChfXyBqbmUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN1Y2Nlc3NDYXNl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgX18gbGluayhzdWNjZXNzQ2FzZXNbaV0sIF9fIGxhYmVs
KCkpOworCisgICAgSm1wU3JjIGNhbGxUYXJnZXQ7CisKKyAgICAvLyBlbWl0IGEgY2FsbCBvbmx5
IGlmIHN0b3JhZ2UgcmVhbGxvYyBpcyBuZWVkZWQKKyAgICBpZiAodHJhbnNpdGlvbldpbGxOZWVk
U3RvcmFnZVJlYWxsb2Mob2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKSB7CisgICAgICAgIF9f
IHB1c2hsX3IoWDg2OjplZHgpOworICAgICAgICBfXyBwdXNobF9pMzIobmV3U3RydWN0dXJlLT5w
cm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgX18gcHVzaGxfaTMyKG9sZFN0cnVj
dHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIF9fIHB1c2hsX3IoWDg2
OjplYXgpOworICAgICAgICBjYWxsVGFyZ2V0ID0gX18gY2FsbCgpOworICAgICAgICBfXyBhZGRs
X2kzMnIoMyAqIHNpemVvZih2b2lkKiksIFg4Njo6ZXNwKTsKKyAgICAgICAgX18gcG9wbF9yKFg4
Njo6ZWR4KTsKKyAgICB9CisKKyAgICAvLyBBc3N1bWVzIG1fcmVmQ291bnQgY2FuIGJlIGRlY3Jl
bWVudGVkIGVhc2lseSwgcmVmY291bnQgZGVjcmVtZW50IGlzIHNhZmUgYXMgCisgICAgLy8gY29k
ZWJsb2NrIHNob3VsZCBlbnN1cmUgb2xkU3RydWN0dXJlLT5tX3JlZkNvdW50ID4gMAorICAgIF9f
IHN1YmxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9sZFN0cnVjdHVyZSkpOworICAg
IF9fIGFkZGxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5ld1N0cnVjdHVyZSkpOwor
ICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihuZXdTdHJ1Y3R1cmUp
LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKKworICAgIC8v
IHdyaXRlIHRoZSB2YWx1ZQorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBt
X3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9ybShY
ODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgpOworCisg
ICAgX18gcmV0KCk7CisgICAgCisgICAgSm1wU3JjIGZhaWx1cmVKdW1wOworICAgIGlmIChmYWls
dXJlQ2FzZXMuc2l6ZSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYWls
dXJlQ2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBfXyBsaW5rKGZhaWx1cmVDYXNlc1tp
XSwgX18gbGFiZWwoKSk7CisgICAgICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRy
YW1wb2xpbmUoKTsKKyAgICAgICAgZmFpbHVyZUp1bXAgPSBfXyBqbXAoKTsKKyAgICB9CisKKyAg
ICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKworICAgIGlmIChmYWlsdXJlQ2Fz
ZXMuc2l6ZSgpKQorICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUp1bXAs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2Zh
aWwpKTsKKworICAgIGlmICh0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhvbGRTdHJ1
Y3R1cmUsIG5ld1N0cnVjdHVyZSkpCisgICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBj
YWxsVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihyZXNpemVQcm9wZXJ0eVN0b3JhZ2Up
KTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1
YlJvdXRpbmUgPSBjb2RlOworICAgIAorICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KHJldHVybkFkZHJlc3MsIGNvZGUpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElN
YWNoaW5lVHJhbXBvbGluZXMoKQoreworICAgIC8vICgxKSBUaGUgZmlyc3QgZnVuY3Rpb24gcHJv
dmlkZXMgZmFzdCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGFycmF5IGxlbmd0aAorICAgIAorICAgIC8v
IENoZWNrIGVheCBpcyBhbiBhcnJheQorICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRh
Z01hc2ssIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgYXJyYXlfZmFpbHVyZUNhc2VzMSA9IF9fIGpu
ZSgpOworICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVy
cHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgpOworICAgIEptcFNyYyBhcnJheV9mYWls
dXJlQ2FzZXMyID0gX18gam5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRo
ZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpT
QXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCksIFg4Njo6ZWF4LCBYODY6OmVheCk7
CisKKyAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCwgWDg2Ojpl
YXgpOworICAgIEptcFNyYyBhcnJheV9mYWlsdXJlQ2FzZXMzID0gX18gamEoKTsKKworICAgIF9f
IGFkZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBhZGRsX2k4cigxLCBYODY6OmVh
eCk7CisgICAgCisgICAgX18gcmV0KCk7CisKKyAgICAvLyAoMikgVGhlIHNlY29uZCBmdW5jdGlv
biBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxlbmd0aAorICAgIAor
ICAgIEptcERzdCBzdHJpbmdMZW5ndGhCZWdpbiA9IF9fIGFsaWduKDE2KTsKKworICAgIC8vIENo
ZWNrIGVheCBpcyBhIHN0cmluZworICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01h
c2ssIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3RyaW5nX2ZhaWx1cmVDYXNlczEgPSBfXyBqbmUo
KTsKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnBy
ZXRlci0+bV9qc1N0cmluZ1ZwdHIpLCBYODY6OmVheCk7CisgICAgSm1wU3JjIHN0cmluZ19mYWls
dXJlQ2FzZXMyID0gX18gam5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRo
ZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4KKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U1N0cmluZywgbV92YWx1ZSkgKyBGSUVMRF9PRkZTRVQoVVN0cmluZywgbV9yZXApLCBYODY6OmVh
eCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFVTdHJpbmc6OlJlcCwg
bGVuKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKworICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0
ZTo6bWF4SW1tZWRpYXRlSW50LCBYODY6OmVheCk7CisgICAgSm1wU3JjIHN0cmluZ19mYWlsdXJl
Q2FzZXMzID0gX18gamEoKTsKKworICAgIF9fIGFkZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsK
KyAgICBfXyBhZGRsX2k4cigxLCBYODY6OmVheCk7CisgICAgCisgICAgX18gcmV0KCk7CisKKyAg
ICAvLyAoMykgVHJhbXBvbGluZXMgZm9yIHRoZSBzbG93IGNhc2VzIG9mIG9wX2NhbGwgLyBvcF9j
YWxsX2V2YWwgLyBvcF9jb25zdHJ1Y3QuCisgICAgCisgICAgSm1wRHN0IHZpcnR1YWxDYWxsUHJl
TGlua0JlZ2luID0gX18gYWxpZ24oMTYpOworCisgICAgLy8gTG9hZCB0aGUgY2FsbGVlIENvZGVC
bG9jayogaW50byBlYXgKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBt
X2JvZHkpLCBYODY6OmVjeCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEZ1bmN0aW9uQm9keU5vZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18g
dGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgaGFzQ29kZUJsb2NrMSA9
IF9fIGpuZSgpOworICAgIF9fIHBvcGxfcihYODY6OmVieCk7CisgICAgX18gcmVzdG9yZUFyZ3Vt
ZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19j
YWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjEgPSBfXyBjYWxsKCk7CisgICAg
ZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7CisgICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVk
eCk7CisgICAgX18gcHVzaGxfcihYODY6OmVieCk7CisgICAgX18gbGluayhoYXNDb2RlQmxvY2sx
LCBfXyBsYWJlbCgpKTsKKworICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVlIGFy
aXR5LgorICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG51
bVBhcmFtZXRlcnMpLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGFyaXR5Q2hlY2tPa2F5MSA9IF9f
IGplKCk7CisgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6
ZWJ4LCA0KTsKKyAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7CisgICAgX18gcmVzdG9y
ZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElf
QVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxsQXJpdHlDaGVjazEgPSBfXyBjYWxsKCk7
CisgICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOworICAgIGVtaXRHZXRDVElBcmco
MCwgWDg2OjplY3gpOworICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOworICAgIF9fIHB1
c2hsX3IoWDg2OjplYngpOworICAgIF9fIGxpbmsoYXJpdHlDaGVja09rYXkxLCBfXyBsYWJlbCgp
KTsKKworICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CisKKyAgICBfXyBw
b3BsX3IoWDg2OjplYngpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOworICAgIF9f
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVk
aSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbERvbnRMYXp5TGlua0NhbGwg
PSBfXyBjYWxsKCk7CisgICAgX18gcHVzaGxfcihYODY6OmVieCk7CisKKyAgICBfXyBqbXBfcihY
ODY6OmVheCk7CisKKyAgICBKbXBEc3QgdmlydHVhbENhbGxMaW5rQmVnaW4gPSBfXyBhbGlnbigx
Nik7CisKKyAgICAvLyBMb2FkIHRoZSBjYWxsZWUgQ29kZUJsb2NrKiBpbnRvIGVheAorICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fYm9keSksIFg4Njo6ZWN4LCBYODY6
OmVheCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoRnVuY3Rpb25Cb2R5Tm9kZSwgbV9j
b2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2
OjplYXgpOworICAgIEptcFNyYyBoYXNDb2RlQmxvY2syID0gX18gam5lKCk7CisgICAgX18gcG9w
bF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBl
bWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3Jj
IGNhbGxKU0Z1bmN0aW9uMiA9IF9fIGNhbGwoKTsKKyAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6
ZWN4KTsKKyAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKKyAgICBfXyBwdXNobF9yKFg4
Njo6ZWJ4KTsKKyAgICBfXyBsaW5rKGhhc0NvZGVCbG9jazIsIF9fIGxhYmVsKCkpOworCisgICAg
Ly8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAgX18gY21wbF9ybShY
ODY6OmVkeCwgRklFTERfT0ZGU0VUKENvZGVCbG9jaywgbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4
KTsKKyAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkyID0gX18gamUoKTsKKyAgICBfXyBwb3BsX3Io
WDg2OjplYngpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOworICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplYXgsIDEyKTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
KyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAg
Sm1wU3JjIGNhbGxBcml0eUNoZWNrMiA9IF9fIGNhbGwoKTsKKyAgICBfXyBtb3ZsX3JyKFg4Njo6
ZWR4LCBYODY6OmVkaSk7CisgICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7CisgICAgZW1p
dEdldENUSUFyZyg4LCBYODY6OmVkeCk7CisgICAgX18gcHVzaGxfcihYODY6OmVieCk7CisgICAg
X18gbGluayhhcml0eUNoZWNrT2theTIsIF9fIGxhYmVsKCkpOworCisgICAgY29tcGlsZU9wQ2Fs
bEluaXRpYWxpemVDYWxsRnJhbWUoKTsKKworICAgIF9fIHBvcGxfcihYODY6OmVieCk7CisgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVieCwgNCk7CisgICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUp
OworICAgIEptcFNyYyBjYWxsTGF6eUxpbmtDYWxsID0gX18gY2FsbCgpOworICAgIF9fIHB1c2hs
X3IoWDg2OjplYngpOworCisgICAgX18gam1wX3IoWDg2OjplYXgpOworCisgICAgSm1wRHN0IHZp
cnR1YWxDYWxsQmVnaW4gPSBfXyBhbGlnbigxNik7CisKKyAgICAvLyBMb2FkIHRoZSBjYWxsZWUg
Q29kZUJsb2NrKiBpbnRvIGVheAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTRnVuY3Rp
b24sIG1fYm9keSksIFg4Njo6ZWN4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoRnVuY3Rpb25Cb2R5Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAg
ICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgIEptcFNyYyBoYXNDb2RlQmxv
Y2szID0gX18gam5lKCk7CisgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9B
UkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMyA9IF9fIGNhbGwoKTsK
KyAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4
Njo6ZWR4KTsKKyAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyBsaW5rKGhhc0NvZGVC
bG9jazMsIF9fIGxhYmVsKCkpOworCisgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxs
ZWUgYXJpdHkuCisgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKENvZGVCbG9j
aywgbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkz
ID0gX18gamUoKTsKKyAgICBfXyBwb3BsX3IoWDg2OjplYngpOworICAgIGVtaXRQdXRDVElBcmco
WDg2OjplYngsIDQpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDEyKTsKKyAgICBfXyBy
ZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGks
IENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGxBcml0eUNoZWNrMyA9IF9fIGNh
bGwoKTsKKyAgICBfXyBtb3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7CisgICAgZW1pdEdldENU
SUFyZygwLCBYODY6OmVjeCk7CisgICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7CisgICAg
X18gcHVzaGxfcihYODY6OmVieCk7CisgICAgX18gbGluayhhcml0eUNoZWNrT2theTMsIF9fIGxh
YmVsKCkpOworCisgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKKworICAg
IC8vIGxvYWQgY3RpQ29kZSBmcm9tIHRoZSBuZXcgY29kZUJsb2NrLgorICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKENvZGVCbG9jaywgY3RpQ29kZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisK
KyAgICBfXyBqbXBfcihYODY6OmVheCk7CisKKyAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3Ry
dWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJz
IG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxl
Q29weSgpOworCisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFycmF5X2ZhaWx1cmVDYXNl
czEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lk
X2FycmF5X2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYXJyYXlfZmFpbHVy
ZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfYXJyYXlfZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBhcnJheV9m
YWlsdXJlQ2FzZXMzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN0
cmluZ19mYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6
Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBzdHJpbmdfZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgc3RyaW5nX2ZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CisgICAgWDg2QXNz
ZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxBcml0eUNoZWNrMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKKyAgICBYODZBc3NlbWJs
ZXI6OmxpbmsoY29kZSwgY2FsbEFyaXR5Q2hlY2syLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJ
bnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOworICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBjYWxsQXJpdHlDaGVjazMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVy
cHJldGVyOjpjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5r
KGNvZGUsIGNhbGxKU0Z1bmN0aW9uMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0
ZXI6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29k
ZSwgY2FsbEpTRnVuY3Rpb24yLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6
Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBj
YWxsSlNGdW5jdGlvbjMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlf
b3BfY2FsbF9KU0Z1bmN0aW9uKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxE
b250TGF6eUxpbmtDYWxsLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3Rp
X3ZtX2RvbnRMYXp5TGlua0NhbGwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2Fs
bExhenlMaW5rQ2FsbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV92
bV9sYXp5TGlua0NhbGwpKTsKKworICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpQXJyYXlMZW5ndGhU
cmFtcG9saW5lID0gY29kZTsKKyAgICBtX2ludGVycHJldGVyLT5tX2N0aVN0cmluZ0xlbmd0aFRy
YW1wb2xpbmUgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgc3RyaW5n
TGVuZ3RoQmVnaW4pOworICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGxQcmVMaW5r
ID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZpcnR1YWxDYWxsUHJl
TGlua0JlZ2luKTsKKyAgICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsTGluayA9IFg4
NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0dWFsQ2FsbExpbmtCZWdp
bik7CisgICAgbV9pbnRlcnByZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbCA9IFg4NkFzc2VtYmxlcjo6
Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0dWFsQ2FsbEJlZ2luKTsKK30KKwordm9pZCBK
SVQ6OmZyZWVDVElNYWNoaW5lVHJhbXBvbGluZXMoSW50ZXJwcmV0ZXIqIGludGVycHJldGVyKQor
eworICAgIFdURjo6ZmFzdEZyZWVFeGVjdXRhYmxlKGludGVycHJldGVyLT5tX2N0aUFycmF5TGVu
Z3RoVHJhbXBvbGluZSk7Cit9CisKK3ZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwg
dm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IGNv
ZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisKKyAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX2dl
dF9ieV9pZF9nZW5lcmljLgorICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBJbnRlcnByZXRl
cjo6Y3RpX29wX2dldF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nIGlu
dGVyZXN0aW5nIHJpZ2h0IG5vdy4KKyAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhy
ZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKKworICAgIC8vIFJlcGF0Y2ggdGhlIG9mZnNldCBpbnRv
IHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQgZnJvbSwgdGhlbiByZXBhdGNoIHRoZSBTdHJ1Y3R1
cmUgdG8gbG9vayBmb3IuCisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoRGlzcGxhY2VtZW50KHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZz
ZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVl
KikpOworICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEltbWVkaWF0ZShyZWludGVycHJldF9jYXN0
PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVj
dHVyZSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlKSk7Cit9CisKK3ZvaWQg
SklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0
dXJuQWRkcmVzcyk7CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUg
dGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KKyAg
ICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRf
ZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cu
CisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykp
OworCisgICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8g
bG9hZCBmcm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4KKyAgICBY
ODZBc3NlbWJsZXI6OnJlcGF0Y2hEaXNwbGFjZW1lbnQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9m
ZnNldCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgWDg2QXNzZW1ibGVy
OjpyZXBhdGNoSW1tZWRpYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0
aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlLCByZWludGVycHJldF9jYXN0
PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbmd0aCh2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwor
CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0
dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KKyAgICBjdGlSZXBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CisKKyAgICAvLyBDaGVjayBl
YXggaXMgYW4gYXJyYXkKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4obV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMg
ZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOworCisgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdl
dCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLCBYODY6OmVjeCwgWDg2Ojpl
Y3gpOworCisgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJbW1lZGlhdGVJbnQsIFg4
Njo6ZWN4KTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGphKCk7CisKKyAgICBfXyBh
ZGRsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgX18gYWRkbF9pOHIoMSwgWDg2OjplY3gp
OworICAgIF9fIG1vdmxfcnIoWDg2OjplY3gsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3VjY2Vz
cyA9IF9fIGptcCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisK
KyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAgICB2b2lkKiBz
bG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5mby5jYWxsUmV0dXJuTG9j
YXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7CisgICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHNsb3dDYXNlQmVnaW4pOworICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJlZ2luKTsKKworICAg
IC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBv
aW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRy
X3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhC
ZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OworICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNj
ZXNzRGVzdCkpOworCisgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRo
YXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgorICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7CisKKyAgICAvLyBGaW5hbGx5IHJl
cGF0Y2ggdGhlIGp1bXAgdG8gc293IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCisgICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0
PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5j
aFRvU2xvd0Nhc2U7CisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExv
Y2F0aW9uLCBjb2RlKTsKK30KKwordm9pZCBKSVQ6OmVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lz
dGVyKFJlZ2lzdGVySUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCwgUmVnaXN0ZXJJRCBkc3Qp
Cit7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZh
cmlhYmxlT2JqZWN0LCBkc3QpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFi
bGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhLCByZWdpc3RlcnMpLCBkc3QsIGRzdCk7Cisg
ICAgX18gbW92bF9tcihpbmRleCAqIHNpemVvZihSZWdpc3RlciksIGRzdCwgZHN0KTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIHZhcmlhYmxlT2JqZWN0LCBpbnQgaW5kZXgpCit7CisgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZhcmlhYmxlT2JqZWN0LCB2YXJpYWJs
ZU9iamVjdCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdDo6
SlNWYXJpYWJsZU9iamVjdERhdGEsIHJlZ2lzdGVycyksIHZhcmlhYmxlT2JqZWN0LCB2YXJpYWJs
ZU9iamVjdCk7CisgICAgX18gbW92bF9ybShzcmMsIGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSwg
dmFyaWFibGVPYmplY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShKSVQpCkluZGV4OiBqaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0
L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAzODk4NCkKKysrIGppdC9KSVRBcml0aG1ldGlj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMzAgQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiAhRU5BQkxFKEpJVF9PUFRJTUlaRV9BUklUSE1F
VElDKQorCit2b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgb3Bjb2RlSUQs
IHVuc2lnbmVkIGRzdCwgdW5zaWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMiwgT3BlcmFuZFR5cGVz
LCB1bnNpZ25lZCBpKQoreworICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNy
YzEsIDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihz
cmMyLCA0LCBYODY6OmVjeCk7CisgICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCkKKyAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOworICAgIGVsc2UgaWYgKG9w
Y29kZUlEID09IG9wX3N1YikKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9zdWIpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVs
KTsKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOworICAg
IH0KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjpjb21w
aWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE9wY29kZUlELCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgT3BlcmFuZFR5cGVzLCB1
bnNpZ25lZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworI2Vsc2UKKwogI2lm
IFBMQVRGT1JNKE1BQykKIAogc3RhdGljIGlubGluZSBib29sIGlzU1NFMlByZXNlbnQoKQpAQCAt
ODAsMjQyICsxMDQsNiBAQCBzdGF0aWMgYm9vbCBpc1NTRTJQcmVzZW50KCkKIAogI2VuZGlmCiAK
LUNPTVBJTEVfQVNTRVJUKENUSV9BUkdTX2NvZGUgPT0gMHhDLCBDVElfQVJHU19jb2RlX2lzX0Mp
OwotQ09NUElMRV9BU1NFUlQoQ1RJX0FSR1NfY2FsbEZyYW1lID09IDB4RSwgQ1RJX0FSR1NfY2Fs
bEZyYW1lX2lzX0UpOwotCi0jaWYgQ09NUElMRVIoR0NDKSAmJiBQTEFURk9STShYODYpCi0KLSNp
ZiBQTEFURk9STShEQVJXSU4pCi0jZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgIl8iICNuYW1l
Ci0jZWxzZQotI2RlZmluZSBTWU1CT0xfU1RSSU5HKG5hbWUpICNuYW1lCi0jZW5kaWYKLQotYXNt
KAotIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgotU1lNQk9MX1NU
UklORyhjdGlUcmFtcG9saW5lKSAiOiIgIlxuIgotICAgICJwdXNobCAlZXNpIiAiXG4iCi0gICAg
InB1c2hsICVlZGkiICJcbiIKLSAgICAicHVzaGwgJWVieCIgIlxuIgotICAgICJzdWJsICQweDIw
LCAlZXNwIiAiXG4iCi0gICAgIm1vdmwgJDUxMiwgJWVzaSIgIlxuIgotICAgICJtb3ZsIDB4Mzgo
JWVzcCksICVlZGkiICJcbiIgLy8gT3gzOCA9IDB4MEUgKiA0LCAweDBFID0gQ1RJX0FSR1NfY2Fs
bEZyYW1lIChzZWUgYXNzZXJ0aW9uIGFib3ZlKQotICAgICJjYWxsICoweDMwKCVlc3ApIiAiXG4i
IC8vIE94MzAgPSAweDBDICogNCwgMHgwQyA9IENUSV9BUkdTX2NvZGUgKHNlZSBhc3NlcnRpb24g
YWJvdmUpCi0gICAgImFkZGwgJDB4MjAsICVlc3AiICJcbiIKLSAgICAicG9wbCAlZWJ4IiAiXG4i
Ci0gICAgInBvcGwgJWVkaSIgIlxuIgotICAgICJwb3BsICVlc2kiICJcbiIKLSAgICAicmV0IiAi
XG4iCi0pOwotCi1hc20oCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBv
bGluZSkgIlxuIgotU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIjoiICJcbiIK
LSNpZiBVU0UoQ1RJX0FSR1VNRU5UKQotI2lmIFVTRShGQVNUX0NBTExfQ1RJX0FSR1VNRU5UKQot
ICAgICJtb3ZsICVlc3AsICVlY3giICJcbiIKLSNlbHNlCi0gICAgIm1vdmwgJWVzcCwgMCglZXNw
KSIgIlxuIgotI2VuZGlmCi0gICAgImNhbGwgIiBTWU1CT0xfU1RSSU5HKF9aTjNKU0MxMUludGVy
cHJldGVyMTJjdGlfdm1fdGhyb3dFUFB2KSAiXG4iCi0jZWxzZQotICAgICJjYWxsICIgU1lNQk9M
X1NUUklORyhfWk4zSlNDMTFJbnRlcnByZXRlcjEyY3RpX3ZtX3Rocm93RVB2eikgIlxuIgotI2Vu
ZGlmCi0gICAgImFkZGwgJDB4MjAsICVlc3AiICJcbiIKLSAgICAicG9wbCAlZWJ4IiAiXG4iCi0g
ICAgInBvcGwgJWVkaSIgIlxuIgotICAgICJwb3BsICVlc2kiICJcbiIKLSAgICAicmV0IiAiXG4i
Ci0pOwotICAgIAotI2VsaWYgQ09NUElMRVIoTVNWQykKLQotZXh0ZXJuICJDIiB7Ci0gICAgCi0g
ICAgX19kZWNsc3BlYyhuYWtlZCkgSlNWYWx1ZSogY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBS
ZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uLCBQcm9maWxlcioq
LCBKU0dsb2JhbERhdGEqKQotICAgIHsKLSAgICAgICAgX19hc20gewotICAgICAgICAgICAgcHVz
aCBlc2k7Ci0gICAgICAgICAgICBwdXNoIGVkaTsKLSAgICAgICAgICAgIHB1c2ggZWJ4OwotICAg
ICAgICAgICAgc3ViIGVzcCwgMHgyMDsKLSAgICAgICAgICAgIG1vdiBlc2ksIDUxMjsKLSAgICAg
ICAgICAgIG1vdiBlY3gsIGVzcDsKLSAgICAgICAgICAgIG1vdiBlZGksIFtlc3AgKyAweDM4XTsK
LSAgICAgICAgICAgIGNhbGwgW2VzcCArIDB4MzBdOyAvLyBPeDMwID0gMHgwQyAqIDQsIDB4MEMg
PSBDVElfQVJHU19jb2RlIChzZWUgYXNzZXJ0aW9uIGFib3ZlKQotICAgICAgICAgICAgYWRkIGVz
cCwgMHgyMDsKLSAgICAgICAgICAgIHBvcCBlYng7Ci0gICAgICAgICAgICBwb3AgZWRpOwotICAg
ICAgICAgICAgcG9wIGVzaTsKLSAgICAgICAgICAgIHJldDsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBfX2RlY2xzcGVjKG5ha2VkKSB2b2lkIGN0aVZNVGhyb3dUcmFtcG9saW5lKCkKLSAg
ICB7Ci0gICAgICAgIF9fYXNtIHsKLSAgICAgICAgICAgIG1vdiBlY3gsIGVzcDsKLSAgICAgICAg
ICAgIGNhbGwgSlNDOjpJbnRlcnByZXRlcjo6Y3RpX3ZtX3Rocm93OwotICAgICAgICAgICAgYWRk
IGVzcCwgMHgyMDsKLSAgICAgICAgICAgIHBvcCBlYng7Ci0gICAgICAgICAgICBwb3AgZWRpOwot
ICAgICAgICAgICAgcG9wIGVzaTsKLSAgICAgICAgICAgIHJldDsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLX0KLQotI2VuZGlmCi0KLXZvaWQgY3RpU2V0UmV0dXJuQWRkcmVzcyh2b2lkKiogd2hl
cmUsIHZvaWQqIHdoYXQpCi17Ci0gICAgKndoZXJlID0gd2hhdDsKLX0KLQotdm9pZCBjdGlSZXBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyh2b2lkKiB3aGVyZSwgdm9pZCogd2hhdCkKLXsKLSAgICAo
c3RhdGljX2Nhc3Q8dm9pZCoqPih3aGVyZSkpWy0xXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih3aGF0KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pih3aGVyZSkpOwotfQotCi0jaWZuZGVmIE5ERUJVRwotCi12b2lkIEpJVDo6cHJpbnRC
eXRlY29kZU9wZXJhbmRUeXBlcyh1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyKQotewotICAg
IGNoYXIgd2hpY2gxID0gJyonOwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoc3JjMSkpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjMSk7Ci0gICAgICAgIHdoaWNoMSA9IAotICAgICAgICAgICAgSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSA/Ci0gICAgICAgICAgICAgICAgKEpTSW1tZWRpYXRl
Ojppc051bWJlcih2YWx1ZSkgPyAnaScgOgotICAgICAgICAgICAgICAgIEpTSW1tZWRpYXRlOjpp
c0Jvb2xlYW4odmFsdWUpID8gJ2InIDoKLSAgICAgICAgICAgICAgICB2YWx1ZS0+aXNVbmRlZmlu
ZWQoKSA/ICd1JyA6Ci0gICAgICAgICAgICAgICAgdmFsdWUtPmlzTnVsbCgpID8gJ24nIDogJz8n
KQotICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICh2YWx1ZS0+aXNTdHJpbmcoKSA/ICdz
JyA6Ci0gICAgICAgICAgICB2YWx1ZS0+aXNPYmplY3QoKSA/ICdvJyA6Ci0gICAgICAgICAgICAn
aycpOwotICAgIH0KLSAgICBjaGFyIHdoaWNoMiA9ICcqJzsKLSAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzIpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVl
ID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYzIpOwotICAgICAgICB3aGljaDIgPSAKLSAg
ICAgICAgICAgIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkgPwotICAgICAgICAgICAg
ICAgIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpID8gJ2knIDoKLSAgICAgICAgICAgICAg
ICBKU0ltbWVkaWF0ZTo6aXNCb29sZWFuKHZhbHVlKSA/ICdiJyA6Ci0gICAgICAgICAgICAgICAg
dmFsdWUtPmlzVW5kZWZpbmVkKCkgPyAndScgOgotICAgICAgICAgICAgICAgIHZhbHVlLT5pc051
bGwoKSA/ICduJyA6ICc/JykKLSAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAodmFsdWUt
PmlzU3RyaW5nKCkgPyAncycgOgotICAgICAgICAgICAgdmFsdWUtPmlzT2JqZWN0KCkgPyAnbycg
OgotICAgICAgICAgICAgJ2snKTsKLSAgICB9Ci0gICAgaWYgKCh3aGljaDEgIT0gJyonKSB8ICh3
aGljaDIgIT0gJyonKSkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJUeXBlcyAlYyAlY1xuIiwg
d2hpY2gxLCB3aGljaDIpOwotfQotCi0jZW5kaWYKLQotSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IG1faW50ZXJwcmV0ZXIoZ2xv
YmFsRGF0YS0+aW50ZXJwcmV0ZXIpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAg
ICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLnNpemUoKSA6IDApCi0gICAgLCBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbnMuc2l6ZSgpIDogMCkKLSAgICAsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlv
bkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKSA6IDApCi0g
ICAgLCBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpCi0gICAgLCBtX2p1bXBUYXJnZXRzUG9zaXRpb24oMCkKLXsKLX0KLQotI2RlZmlu
ZSBDVElfQ09NUElMRV9CSU5BUllfT1AobmFtZSkgXAotICAgIGNhc2UgbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7IFwK
LSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV8jI25hbWUpOyBcCi0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
IFwKLSAgICAgICAgaSArPSA0OyBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgfQotCi0jZGVmaW5l
IENUSV9DT01QSUxFX1VOQVJZX09QKG5hbWUpIFwKLSAgICBjYXNlIG5hbWU6IHsgXAotICAgICAg
ICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCAwLCBYODY6OmVjeCk7IFwKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV8jI25hbWUpOyBcCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7IFwKLSAgICAgICAgaSArPSAzOyBcCi0gICAgICAgIGJy
ZWFrOyBcCi0gICAgfQotCi12b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCB1bnNpZ25lZCBpLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKLXsK
LSAgICBib29sIG5lZ2F0ZWQgPSAodHlwZSA9PSBPcE5TdHJpY3RFcSk7Ci0KLSAgICB1bnNpZ25l
ZCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc3JjMSA9IGlu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2Ojpl
YXgsIHNyYzIsIFg4Njo6ZWR4LCBpKTsKLQotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6
OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgZmlyc3ROb3RJbW1lZGlhdGUgPSBfXyBq
ZSgpOwotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWR4KTsK
LSAgICBKbXBTcmMgc2Vjb25kTm90SW1tZWRpYXRlID0gX18gamUoKTsKLQotICAgIF9fIGNtcGxf
cnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICBpZiAobmVnYXRlZCkKLSAgICAgICAgX18gc2V0
bmVfcihYODY6OmVheCk7Ci0gICAgZWxzZQotICAgICAgICBfXyBzZXRlX3IoWDg2OjplYXgpOwot
ICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgIGVtaXRUYWdBc0Jvb2xJ
bW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgCi0gICAgSm1wU3JjIGJvdGhXZXJlSW1t
ZWRpYXRlcyA9IF9fIGptcCgpOwotCi0gICAgX18gbGluayhmaXJzdE5vdEltbWVkaWF0ZSwgX18g
bGFiZWwoKSk7Ci0KLSAgICAvLyBjaGVjayB0aGF0IGVkeCBpcyBpbW1lZGlhdGUgYnV0IG5vdCB0
aGUgemVybyBpbW1lZGlhdGUKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNr
LCBYODY6OmVkeCk7Ci0gICAgX18gc2V0el9yKFg4Njo6ZWN4KTsKLSAgICBfXyBtb3Z6YmxfcnIo
WDg2OjplY3gsIFg4Njo6ZWN4KTsgLy8gZWN4IGlzIG5vdyAxIGlmIGVkeCB3YXMgbm9uaW1tZWRp
YXRlCi0gICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0
ZSgpKSwgWDg2OjplZHgpOwotICAgIF9fIHNldGVfcihYODY6OmVkeCk7Ci0gICAgX18gbW92emJs
X3JyKFg4Njo6ZWR4LCBYODY6OmVkeCk7IC8vIGVkeCBpcyBub3cgMSBpZiBlZHggd2FzIHRoZSAw
IGltbWVkaWF0ZQotICAgIF9fIG9ybF9ycihYODY6OmVjeCwgWDg2OjplZHgpOwotCi0gICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam56KCksIGkpKTsKLQotICAgIF9fIG1v
dmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOwotCi0gICAg
Sm1wU3JjIGZpcnN0V2FzTm90SW1tZWRpYXRlID0gX18gam1wKCk7Ci0KLSAgICBfXyBsaW5rKHNl
Y29uZE5vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0gICAgLy8gY2hlY2sgdGhhdCBlYXggaXMg
bm90IHRoZSB6ZXJvIGltbWVkaWF0ZSAod2Uga25vdyBpdCBtdXN0IGJlIGltbWVkaWF0ZSkKLSAg
ICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpLCBY
ODY6OmVheCk7Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamUoKSwg
aSkpOwotCi0gICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcihqc0Jvb2xlYW4obmVnYXRlZCkpLCBY
ODY6OmVheCk7Ci0KLSAgICBfXyBsaW5rKGJvdGhXZXJlSW1tZWRpYXRlcywgX18gbGFiZWwoKSk7
Ci0gICAgX18gbGluayhmaXJzdFdhc05vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd1Njcmlw
dENoZWNrKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgX18gc3VibF9pOHIoMSwgWDg2
Ojplc2kpOwotICAgIEptcFNyYyBza2lwVGltZW91dCA9IF9fIGpuZSgpOwotICAgIGVtaXRDVElD
YWxsKGJ5dGVjb2RlSW5kZXgsIEludGVycHJldGVyOjpjdGlfdGltZW91dF9jaGVjayk7Ci0KLSAg
ICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfZ2xvYmFsRGF0YSwgWDg2OjplY3gpOwotICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTR2xvYmFsRGF0YSwgaW50ZXJwcmV0ZXIpLCBYODY6OmVj
eCwgWDg2OjplY3gpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEludGVycHJldGVyLCBt
X3RpY2tzVW50aWxOZXh0VGltZW91dENoZWNrKSwgWDg2OjplY3gsIFg4Njo6ZXNpKTsKLSAgICBf
XyBsaW5rKHNraXBUaW1lb3V0LCBfXyBsYWJlbCgpKTsKLQotICAgIGtpbGxMYXN0UmVzdWx0UmVn
aXN0ZXIoKTsKLX0KLQogLyoKICAgVGhpcyBpcyByZXF1aXJlZCBzaW5jZSBudW1iZXIgcmVwcmVz
ZW50YXRpb24gaXMgY2Fub25pY2FsIC0gdmFsdWVzIHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVk
aWF0ZSBzaG91bGQgbm90IGJlIHN0b3JlZCBpbiBhIEpTTnVtYmVyQ2VsbC4KICAgCkBAIC01NTUs
MjYxNSArMzQzLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2UoTwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQotewotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNv
dW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5zaXplKCk7Ci0KLSAgICB1bnNpZ25lZCBw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOwotICAgIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4ID0gMDsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0cnVjdGlv
bkNvdW50OyApIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2ludGVycHJldGVyLT5p
c09wY29kZShpbnN0cnVjdGlvbltpXS51Lm9wY29kZSksICJwcml2YXRlQ29tcGlsZU1haW5QYXNz
IGdvbmUgYmFkIEAgJWQiLCBpKTsKLQotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAg
ICAgIGlmIChpID4gMCkgLy8gQXZvaWQgdGhlIG92ZXJoZWFkIG9mIHNhbXBsaW5nIG9wX2VudGVy
IHR3aWNlLgotICAgICAgICAgICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIo
KS0+ZW5jb2RlU2FtcGxlKGluc3RydWN0aW9uICsgaSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIo
KS0+c2FtcGxlU2xvdCgpKTsKICNlbmRpZgogCi0gICAgICAgIG1fbGFiZWxzW2ldID0gX18gbGFi
ZWwoKTsKLSAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX2ludGVycHJldGVyLT5nZXRPcGNv
ZGVJRChpbnN0cnVjdGlvbltpXS51Lm9wY29kZSk7Ci0gICAgICAgIHN3aXRjaCAob3Bjb2RlSUQp
IHsKLSAgICAgICAgY2FzZSBvcF9tb3Y6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpCi0gICAgICAgICAgICAgICAgX18gbW92bF9p
MzJyKGFzSW50ZWdlcihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKSksIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYWRkOiB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLQot
ICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1l
cmljQXJnKHNyYzEpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBhZGRsX2kzMnIoZ2V0RGVU
YWdnZWRDb25zdGFudEltbWVkaWF0ZSh2YWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMy
KSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6
OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gYWRkbF9pMzJyKGdldERlVGFnZ2VkQ29uc3Rh
bnRJbW1lZGlhdGUodmFsdWUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3Ry
dWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlcy5maXJz
dCgpLm1pZ2h0QmVOdW1iZXIoKSAmJiB0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9wX2FkZCwgaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9u
W2kgKyA0XS51Lm9wZXJhbmQpLCBpKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
LCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfYWRkKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZW5kOiB7Ci0gICAgICAgICAgICBpZiAobV9j
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCi0gICAgICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9lbmQpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0g
ICAgICAgICAgICBfXyBwdXNobF9tKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci0gICAgICAgICAgICBfXyByZXQo
KTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3Bfam1wOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQo
Sm1wVGFibGUoX18gam1wKCksIGkgKyAxICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBpICs9IDI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3ByZV9pbmM6
IHsKLSAgICAgICAgICAgIGludCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
OwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWF4LCBp
KTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICBfXyBhZGRsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpT
SW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbG9vcDogewotICAgICAg
ICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgdGFy
Z2V0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fam1wVGFi
bGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBpICsgMSArIHRhcmdldCkpOwotICAgICAgICAg
ICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9sb29wX2lmX2xlc3M6IHsKLSAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7Ci0K
LSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVO
dW1lcmljQXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYg
KHNyYzJpbW0pIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAg
IF9fIGNtcGxfaTMycihhc0ludGVnZXIoc3JjMmltbSksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAg
ICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbCgpLCBpICsgMyArIHRhcmdldCkp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBf
XyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9qbXBUYWJs
ZS5hcHBlbmQoSm1wVGFibGUoX18gamwoKSwgaSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzZXE6IHsKLSAgICAgICAgICAgIGVtaXRTbG93U2Ny
aXB0Q2hlY2soaSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9u
W2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29u
c3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaWYgKHNyYzJpbW0pIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAg
ICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwot
ICAgICAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoc3JjMmltbSksIFg4Njo6ZWR4
KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbGUoKSwg
aSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2
OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAg
ICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0g
ICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpsZSgpLCBpICsgMyArIHRhcmdl
dCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OiB7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19vYmplY3QpOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICAvLyBJbiBvcmRlciB0byBi
ZSBhYmxlIHRvIHJlcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZz
ZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgICAgICAgICAgLy8gdG8ganVzdCBhZnRlciB0
aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdp
bicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgICAgICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0
cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhp
cy4KLQotICAgICAgICAgICAgaW50IGJhc2VWUmVnID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBYODY6
OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotCi0gICAg
ICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKLQotICAg
ICAgICAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhlIGJhc2Ugb2JqZWN0
IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5vdCBtYXRjaC4KLSAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZS
ZWcpOwotCi0gICAgICAgICAgICBKbXBEc3QgaG90UGF0aEJlZ2luID0gX18gbGFiZWwoKTsKLSAg
ICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4XS5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW47Ci0gICAgICAgICAg
ICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKLQotICAgICAgICAgICAgLy8gSXQg
aXMgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBwbGFudHMgYSAzMmJp
dCBpbW1lZGlhdGUsIGluIG9yZGVyIHRoYXQgaXQgY2FuIGJlIHBhdGNoZWQgb3Zlci4KLSAgICAg
ICAgICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUsIEZJRUxE
X09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgQVNT
RVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2lu
LCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0g
ICAgICAgICAgICAvLyBQbGFudCBhIGxvYWQgZnJvbSBhIGJvZ3VzIG9mc2V0IGluIHRoZSBvYmpl
Y3QncyBwcm9wZXJ0eSBtYXA7IHdlIHdpbGwgcGF0Y2ggdGhpcyBsYXRlciwgaWYgaXQgaXMgdG8g
YmUgdXNlZC4KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBt
X3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBt
b3ZsX3JtKFg4Njo6ZWR4LCByZXBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQsIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFi
ZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldFB1dEJ5SWRQcm9w
ZXJ0eU1hcE9mZnNldCk7Ci0KLSAgICAgICAgICAgIGkgKz0gODsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7Ci0gICAgICAgICAgICAv
LyBBcyBmb3IgcHV0X2J5X2lkLCBnZXRfYnlfaWQgcmVxdWlyZXMgdGhlIG9mZnNldCBvZiB0aGUg
U3RydWN0dXJlIGFuZCB0aGUgb2Zmc2V0IG9mIHRoZSBhY2Nlc3MgdG8gYmUgcmVwYXRjaGVkLgot
ICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBmb3IgZ2V0X2J5X2lkIHdlIG5lZWQgcmVwYXRj
aCB0aGUgb2Zmc2V0IG9mIHRoZSBicmFuY2ggdG8gdGhlIHNsb3cgY2FzZSAod2UgcmVwYXRjaCB0
aGlzIHRvIGp1bXAKLSAgICAgICAgICAgIC8vIHRvIGFycmF5LWxlbmd0aCAvIHByb3RvdHlwZSBh
Y2Nlc3MgdHJhbnBvbGluZXMsIGFuZCBmaW5hbGx5IHdlIGFsc28gdGhlIHRoZSBwcm9wZXJ0eS1t
YXAgYWNjZXNzIG9mZnNldCBhcyBhIGxhYmVsCi0gICAgICAgICAgICAvLyB0byBqdW1wIGJhY2sg
dG8gaWYgb25lIG9mIHRoZXNlIHRyYW1wb2xpZXMgZmluZHMgYSBtYXRjaC4KLQotICAgICAgICAg
ICAgaW50IGJhc2VWUmVnID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIFg4Njo6ZWF4LCBpKTsKLQotICAg
ICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7Ci0KLSAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZS
ZWcpOwotCi0gICAgICAgICAgICBKbXBEc3QgaG90UGF0aEJlZ2luID0gX18gbGFiZWwoKTsKLSAg
ICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4XS5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW47Ci0gICAgICAgICAg
ICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKLQotICAgICAgICAgICAgX18gY21w
bF9pMzJtKHJlcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSwgRklFTERfT0ZGU0VUKEpTQ2Vs
bCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1i
bGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkp
ID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4s
IF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7Ci0K
LSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5
U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKHJl
cGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBh
dGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9m
ZnNldCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwotCi0gICAgICAgICAgICBpICs9IDg7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2
OjplYXgsIGkpOyAvLyB2YWx1ZQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7IC8vIGJhc2VWYWwKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3Bl
cmFuZCwgWDg2OjplZHgsIGkpOyAvLyBwcm90bwotCi0gICAgICAgICAgICAvLyBjaGVjayBpZiBh
bnkgYXJlIGltbWVkaWF0ZXMKLSAgICAgICAgICAgIF9fIG9ybF9ycihYODY6OmVheCwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgX18gb3JsX3JyKFg4Njo6ZWR4LCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVjeCk7Ci0KLSAg
ICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7
Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgYWxsIGFyZSBvYmplY3QgdHlwZSAtIHRoaXMg
aXMgYSBiaXQgb2YgYSBiaXRoYWNrIHRvIGF2b2lkIGV4Y2VzcyBicmFuY2hpbmc7Ci0gICAgICAg
ICAgICAvLyB3ZSBjaGVjayB0aGF0IHRoZSBzdW0gb2YgdGhlIHRocmVlIHR5cGUgY29kZXMgZnJv
bSBTdHJ1Y3R1cmVzIGlzIGV4YWN0bHkgMyAqIE9iamVjdFR5cGUsCi0gICAgICAgICAgICAvLyB0
aGlzIHdvcmtzIGJlY2F1c2UgTnVtYmVyVHlwZSBhbmQgU3RyaW5nVHlwZSBhcmUgc21hbGxlcgot
ICAgICAgICAgICAgX18gbW92bF9pMzJyKDMgKiBPYmplY3RUeXBlLCBYODY6OmVjeCk7Ci0gICAg
ICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2
OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpT
Q2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCwgWDg2OjplZHgpOwotICAgICAgICAgICAgX18g
c3VibF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSksIFg4Njo6
ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzdWJsX21yKEZJRUxEX09GRlNFVChTdHJ1
Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBlKSwgWDg2OjplZHgsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
WDg2OjplZHgsIGkpOyAvLyByZWxvYWQgYmFzZVZhbAotICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWR4LCBYODY6OmVkeCk7Ci0g
ICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBt
X3R5cGVJbmZvLm1fdHlwZSksIFg4Njo6ZWR4KTsKLQotICAgICAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLQotICAgICAgICAgICAgLy8gY2hl
Y2sgdGhhdCBiYXNlVmFsJ3MgZmxhZ3MgaW5jbHVkZSBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgYnV0
IG5vdCBPdmVycmlkZXNIYXNJbnN0YW5jZQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVkeCwgWDg2OjplY3gp
OwotICAgICAgICAgICAgX18gYW5kbF9pMzJyKEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJy
aWRlc0hhc0luc3RhbmNlLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoSW1w
bGVtZW50c0hhc0luc3RhbmNlLCBYODY6OmVjeCk7Ci0KLSAgICAgICAgICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplY3gs
IGkpOyAvLyByZWxvYWQgdmFsdWUKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOyAvLyByZWxvYWQgcHJv
dG8KLQotICAgICAgICAgICAgLy8gb3B0aW1pc3RpY2FsbHkgbG9hZCB0cnVlIHJlc3VsdAotICAg
ICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcihqc0Jvb2xlYW4odHJ1ZSkpLCBYODY6OmVh
eCk7Ci0KLSAgICAgICAgICAgIEptcERzdCBsb29wID0gX18gbGFiZWwoKTsKLQotICAgICAgICAg
ICAgLy8gbG9hZCB2YWx1ZSdzIHByb3RvdHlwZQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVM
RF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAg
ICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fcHJvdG90eXBlKSwg
WDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgX18gY21wbF9y
cihYODY6OmVjeCwgWDg2OjplZHgpOwotICAgICAgICAgICAgSm1wU3JjIGV4aXQgPSBfXyBqZSgp
OwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKGpzTnVsbCgpKSwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgSm1wU3JjIGdvVG9Mb29wID0gX18gam5lKCk7Ci0gICAgICAgICAg
ICBfXyBsaW5rKGdvVG9Mb29wLCBsb29wKTsKLQotICAgICAgICAgICAgX18gbW92bF9pMzJyKGFz
SW50ZWdlcihqc0Jvb2xlYW4oZmFsc2UpKSwgWDg2OjplYXgpOwotCi0gICAgICAgICAgICBfXyBs
aW5rKGV4aXQsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotCi0gICAgICAgICAgICBpICs9IDU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlbF9ieV9p
ZDogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsg
M10udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X2lkKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X211bDogewotICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8vIEZvciBub3csIG9ubHkgcGxhbnQgYSBmYXN0
IGludCBjYXNlIGlmIHRoZSBjb25zdGFudCBvcGVyYW5kIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLgot
ICAgICAgICAgICAgSlNWYWx1ZSogc3JjMVZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1l
cmljQXJnKHNyYzEpOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMlZhbHVlID0gZ2V0Q29uc3Rh
bnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpOwotICAgICAgICAgICAgaW50MzJfdCB2YWx1ZTsK
LSAgICAgICAgICAgIGlmIChzcmMxVmFsdWUgJiYgKCh2YWx1ZSA9IEpTSW1tZWRpYXRlOjppbnRW
YWx1ZShzcmMxVmFsdWUpKSA+IDApKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMyLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0RmFzdEFy
aXRoRGVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGltdWxsX2kz
MnIoWDg2OjplYXgsIHZhbHVlLCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgICAgIGVt
aXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMyVmFs
dWUgJiYgKCh2YWx1ZSA9IEpTSW1tZWRpYXRlOjppbnRWYWx1ZShzcmMyVmFsdWUpKSA+IDApKSB7
Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwg
aSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4
LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUoWDg2Ojpl
YXgpOwotICAgICAgICAgICAgICAgIF9fIGltdWxsX2kzMnIoWDg2OjplYXgsIHZhbHVlLCBYODY6
OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnko
X18gam8oKSwgaSkpOwotICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0
ZShYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRo
T3Aob3BfbXVsLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBPcGVyYW5kVHlwZXM6
OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCksIGkpOwotCi0gICAgICAgICAg
ICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X25ld19mdW5jOiB7Ci0gICAgICAgICAgICBGdW5jRGVjbE5vZGUqIGZ1bmMgPSAobV9jb2RlQmxv
Y2stPmZ1bmN0aW9uc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSkuZ2V0KCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
ZnVuYyksIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9uZXdfZnVuYyk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYXNlIG9w
X2NhbGxfZXZhbDoKLSAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIGNv
bXBpbGVPcENhbGwob3Bjb2RlSUQsIGluc3RydWN0aW9uICsgaSwgaSwgY2FsbExpbmtJbmZvSW5k
ZXgrKyk7Ci0gICAgICAgICAgICBpICs9IChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyA3IDog
NSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9n
bG9iYWxfdmFyOiB7Ci0gICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaW5zdHJ1Y3Rpb25baSArIDJdLnUuanND
ZWxsKTsKLSAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoZ2xvYmFsT2JqZWN0KSwg
WDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2
OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFyOiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAg
ICAgICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpT
VmFyaWFibGVPYmplY3QqPihpbnN0cnVjdGlvbltpICsgMV0udS5qc0NlbGwpOwotICAgICAgICAg
ICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcihnbG9iYWxPYmplY3QpLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmFyaWFibGVPYmplY3RSZWdpc3RlcihYODY6OmVkeCwgWDg2OjplYXgs
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfc2NvcGVkX3Zh
cjogewotICAgICAgICAgICAgaW50IHNraXAgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
ICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW47Ci0KLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCBYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICB3aGlsZSAoc2tpcC0tKQotICAgICAgICAgICAgICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsK
LQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbk5vZGUsIG9i
amVjdCksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmFyaWFibGVP
YmplY3RSZWdpc3RlcihYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2
OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6IHsKLSAgICAgICAg
ICAgIGludCBza2lwID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCArIG1fY29kZUJsb2Nr
LT5uZWVkc0Z1bGxTY29wZUNoYWluOwotCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6
OmVheCwgaSk7Ci0gICAgICAgICAgICB3aGlsZSAoc2tpcC0tKQotICAgICAgICAgICAgICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSwgWDg2OjplZHgsIFg4
Njo6ZWR4KTsKLQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU2NvcGVDaGFp
bk5vZGUsIG9iamVjdCksIFg4Njo6ZWR4LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmFyaWFibGVPYmplY3RSZWdpc3RlcihYODY6OmVheCwgWDg2OjplZHgsIGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOiB7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOwotICAgICAgICAgICAgaSAr
PSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90ZWFy
X29mZl9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKTsKLSAgICAgICAgICAgIGkgKz0gMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcmV0OiB7Ci0gICAgICAg
ICAgICAvLyBXZSBjb3VsZCBKSVQgZ2VuZXJhdGUgdGhlIGRlcmVmLCBvbmx5IGNhbGxpbmcgb3V0
IHRvIEMgd2hlbiB0aGUgcmVmY291bnQgaGl0cyB6ZXJvLgotICAgICAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfcmV0X3Njb3BlQ2hhaW4pOwotCi0gICAgICAgICAgICAv
LyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0KLSAg
ICAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlckZpbGU6OlJldHVyblBDLCBYODY6OmVkeCwgaSk7Ci0K
LSAgICAgICAgICAgIC8vIFJlc3RvcmUgb3VyIGNhbGxlcidzICJyIi4KLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgWDg2OjplZGks
IGkpOwotCi0gICAgICAgICAgICAvLyBSZXR1cm4uCi0gICAgICAgICAgICBfXyBwdXNobF9yKFg4
Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIHJldCgpOwotCi0gICAgICAgICAgICBpICs9IDI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19hcnJheTog
ewotICAgICAgICAgICAgX18gbGVhbF9tcihzaXplb2YoUmVnaXN0ZXIpICogaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgWDg2OjplZGksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplZHgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfYXJyYXkpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZTogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRl
bnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
cmVzb2x2ZSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmVyaWZ5OiB7Ci0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQsIFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0
ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGlzSW1tZWRpYXRlID0g
X18gam5lKCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1f
c3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMy
bShPYmplY3RUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJRUxE
X09GRlNFVChUeXBlSW5mbywgbV90eXBlKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgSm1wU3Jj
IGlzT2JqZWN0ID0gX18gamUoKTsKLQotICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwg
X18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBfXyBsaW5rKGlzT2JqZWN0LCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgaSArPSAzOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFs
OiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2
OjplZHgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7Ci0g
ICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwg
aSkpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KG1faW50ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0gICAgICAg
ICAgICAvLyBUaGlzIGlzIGFuIGFycmF5OyBnZXQgdGhlIG1fc3RvcmFnZSBwb2ludGVyIGludG8g
ZWN4LCB0aGVuIGNoZWNrIGlmIHRoZSBpbmRleCBpcyBiZWxvdyB0aGUgZmFzdCBjdXRvZmYKLSAg
ICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4
Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVM
RF9PRkZTRVQoSlNBcnJheSwgbV9mYXN0QWNjZXNzQ3V0b2ZmKSwgWDg2OjplYXgpOwotICAgICAg
ICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamJlKCksIGkpKTsKLQot
ICAgICAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB2ZWN0b3IKLSAgICAgICAgICAg
IF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pLCBYODY6
OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3Jlc29sdmVfZnVuYzogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
XSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZD4oaWRlbnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgpOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3Bfc3ViOiB7Ci0gICAgICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhPcChvcF9z
dWIsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJvbUlu
dChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7Ci0gICAgICAgICAgICBpICs9IDU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92
YWw6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBY
ODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2
OjplZHgsIGkpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWR4KTsK
LSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgp
LCBpKSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4obV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYW4gYXJyYXk7IGdldCB0aGUgbV9zdG9yYWdlIHBvaW50ZXIgaW50
byBlY3gsIHRoZW4gY2hlY2sgaWYgdGhlIGluZGV4IGlzIGJlbG93IHRoZSBmYXN0IGN1dG9mZgot
ICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSwg
WDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJ
RUxEX09GRlNFVChKU0FycmF5LCBtX2Zhc3RBY2Nlc3NDdXRvZmYpLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBKbXBTcmMgaW5GYXN0VmVjdG9yID0gX18gamEoKTsKLSAgICAgICAgICAgIC8vIE5v
OyBvaCB3ZWxsLCBjaGVjayBpZiB0aGUgYWNjZXNzIGlmIHdpdGhpbiB0aGUgdmVjdG9yIC0gaWYg
c28sIHdlIG1heSBzdGlsbCBiZSBva2F5LgotICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVk
eCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JMZW5ndGgpLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqYmUoKSwg
aSkpOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgd3JpdGUgdG8gdGhlIHNsb3cgcGFydCBv
ZiB0aGUgdmVjdG9yOyBmaXJzdCwgd2UgaGF2ZSB0byBjaGVjayBpZiB0aGlzIHdvdWxkIGJlIHRo
ZSBmaXJzdCB3cml0ZSB0byB0aGlzIGxvY2F0aW9uLgotICAgICAgICAgICAgLy8gRklYTUU6IHNo
b3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBpbml0aWFsIHdyaXRlIHRvIGFycmF5OyBpbmNyZW1lbnQg
dGhlIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGFycmF5LCBhbmQgcG90ZW50aWFsbHkgdXBk
YXRlIGZhc3QgYWNjZXNzIGN1dG9mZi4gCi0gICAgICAgICAgICBfXyBjbXBsX2k4bSgwLCBGSUVM
RF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6OmVkeCwg
c2l6ZW9mKEpTVmFsdWUqKSk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIEFsbCBnb29kIC0gcHV0IHRo
ZSB2YWx1ZSBpbnRvIHRoZSBhcnJheS4KLSAgICAgICAgICAgIF9fIGxpbmsoaW5GYXN0VmVjdG9y
LCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gbW92
bF9ybShYODY6OmVheCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pLCBY
ODY6OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKikpOwotICAgICAgICAgICAgaSArPSA0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQ1RJX0NPTVBJTEVfQklO
QVJZX09QKG9wX2xlc3NlcSkKLSAgICAgICAgY2FzZSBvcF9sb29wX2lmX3RydWU6IHsKLSAgICAg
ICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBp
KTsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVy
b0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGlzWmVybyA9IF9f
IGplKCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBl
SW50ZWdlciwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFi
bGUoX18gam5lKCksIGkgKyAyICsgdGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgIF9fIGNtcGxfaTMy
cihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsgdGFy
Z2V0KSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpm
YWxzZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLQotICAgICAgICAgICAgX18gbGluayhp
c1plcm8sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH07Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOiB7Ci0gICAgICAg
ICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25z
dGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2Jhc2UpOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfbmVnYXRlOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25lZ2F0ZSk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3NraXA6IHsKLSAgICAgICAgICAgIElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5u
ZWVkc0Z1bGxTY29wZUNoYWluLCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9za2lwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29s
dmVfZ2xvYmFsOiB7Ci0gICAgICAgICAgICAvLyBGYXN0IGNhc2UKLSAgICAgICAgICAgIHVuc2ln
bmVkIGdsb2JhbE9iamVjdCA9IGFzSW50ZWdlcihpbnN0cnVjdGlvbltpICsgMl0udS5qc0NlbGwp
OwotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICB2b2lkKiBz
dHJ1Y3R1cmVBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zdHJ1Y3Rpb24gKyBp
ICsgNCk7Ci0gICAgICAgICAgICB2b2lkKiBvZmZzZXRBZGRyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oaW5zdHJ1Y3Rpb24gKyBpICsgNSk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIFN0cnVj
dHVyZSBvZiBnbG9iYWwgb2JqZWN0Ci0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoZ2xvYmFsT2Jq
ZWN0LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKHN0cnVjdHVyZUFkZHJlc3Ms
IFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNF
VChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIG5v
TWF0Y2ggPSBfXyBqbmUoKTsgLy8gU3RydWN0dXJlcyBkb24ndCBtYXRjaAotCi0gICAgICAgICAg
ICAvLyBMb2FkIGNhY2hlZCBwcm9wZXJ0eQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoSlNHbG9iYWxPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIob2Zmc2V0QWRkciwgWDg2OjplZHgpOwotICAg
ICAgICAgICAgX18gbW92bF9tcigwLCBYODY6OmVheCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVl
KiksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBKbXBTcmMgZW5kID0gX18gam1w
KCk7Ci0KLSAgICAgICAgICAgIC8vIFNsb3cgY2FzZQotICAgICAgICAgICAgX18gbGluayhub01h
dGNoLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChnbG9i
YWxPYmplY3QsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaW5zdHJ1Y3Rpb24gKyBpKSwgOCk7
Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVf
Z2xvYmFsKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBfXyBsaW5rKGVuZCwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICBpICs9IDY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfZGl2KQotICAgICAgICBjYXNlIG9wX3ByZV9k
ZWM6IHsKLSAgICAgICAgICAgIGludCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWF4
LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwg
aSk7Ci0gICAgICAgICAgICBfXyBzdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRl
KEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
OwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVt
ZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChz
cmMyaW1tKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBf
XyBjbXBsX2kzMnIoYXNJbnRlZ2VyKHNyYzJpbW0pLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICAg
ICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamdlKCksIGkgKyAzICsgdGFyZ2V0KSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIF9f
IGNtcGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxl
LmFwcGVuZChKbXBUYWJsZShfXyBqZ2UoKSwgaSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3Bfbm90OiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAg
IF9fIHhvcmxfaThyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wsIFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTWFzaywgWDg2
OjplYXgpOyAvLyBpOD8KLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgICAgICBfXyB4b3JsX2k4cigoSlNJbW1lZGlhdGU6
OkZ1bGxUYWdUeXBlQm9vbCB8IEpTSW1tZWRpYXRlOjpFeHRlbmRlZFBheWxvYWRCaXRCb29sVmFs
dWUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQsIFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihK
U0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9q
bXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLSAgICAg
ICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNOb25aZXJvID0gX18gam5lKCk7Ci0KLSAgICAg
ICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRl
KCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShf
XyBqZSgpLCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50
ZWdlcihKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLQotICAg
ICAgICAgICAgX18gbGluayhpc05vblplcm8sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgaSAr
PSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH07Ci0gICAgICAgIGNhc2Ugb3BfamVx
X251bGw6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kOwotCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
WDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFn
TWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGlzSW1tZWRpYXRlID0gX18gam56
KCk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMybShN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZv
Lm1fZmxhZ3MpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXRuel9yKFg4Njo6ZWF4KTsK
LQotICAgICAgICAgICAgSm1wU3JjIHdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOwotCi0gICAg
ICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAg
X18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAg
ICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICBfXyBzZXRlX3IoWDg2OjplYXgpOwotCi0gICAgICAgICAgICBfXyBs
aW5rKHdhc05vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdnpi
bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKDAsIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpueigp
LCBpICsgMiArIHRhcmdldCkpOyAgICAgICAgICAgIAotCi0gICAgICAgICAgICBpICs9IDM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kOwotCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywg
WDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGlzSW1tZWRpYXRlID0gX18gam56KCk7Ci0K
LSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
LCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMybShNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxh
Z3MpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXR6X3IoWDg2OjplYXgpOwotCi0gICAg
ICAgICAgICBKbXBTcmMgd2FzTm90SW1tZWRpYXRlID0gX18gam1wKCk7Ci0KLSAgICAgICAgICAg
IF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBfXyBtb3Zs
X2kzMnIofkpTSW1tZWRpYXRlOjpFeHRlbmRlZFRhZ0JpdFVuZGVmaW5lZCwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgX18gYW5kbF9ycihYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAg
X18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZU51bGwsIFg4Njo6ZWN4KTsKLSAg
ICAgICAgICAgIF9fIHNldG5lX3IoWDg2OjplYXgpOwotCi0gICAgICAgICAgICBfXyBsaW5rKHdh
c05vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdnpibF9ycihY
ODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKDAsIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpueigpLCBpICsg
MiArIHRhcmdldCkpOyAgICAgICAgICAgIAotCi0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Bvc3RfaW5jOiB7Ci0gICAg
ICAgICAgICBpbnQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7Ci0gICAg
ICAgICAgICBfXyBtb3ZsX3JyKFg4Njo6ZWF4LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gYWRk
bF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRp
YXRlKCkpLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdW5leHBlY3RlZF9sb2Fk
OiB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2ID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25z
dGFudHNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBfXyBtb3Zs
X2kzMnIoYXNJbnRlZ2VyKHYpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSAr
PSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qc3I6
IHsKLSAgICAgICAgICAgIGludCByZXRBZGRyRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kOwotICAgICAgICAgICAgX18gbW92bF9pMzJtKDAsIHNpemVvZihSZWdpc3RlcikgKiByZXRB
ZGRyRHN0LCBYODY6OmVkaSk7Ci0gICAgICAgICAgICBKbXBEc3QgYWRkclBvc2l0aW9uID0gX18g
bGFiZWwoKTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgp
LCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAgSm1wRHN0IHNyZXRUYXJnZXQgPSBfXyBs
YWJlbCgpOwotICAgICAgICAgICAgbV9qc3JTaXRlcy5hcHBlbmQoSlNSSW5mbyhhZGRyUG9zaXRp
b24sIHNyZXRUYXJnZXQpKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3JldDogewotICAgICAgICAgICAgX18gam1w
X20oc2l6ZW9mKFJlZ2lzdGVyKSAqIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6
ZWRpKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBfXyBj
bXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBzZXRlX3IoWDg2Ojpl
YXgpOwotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2xzaGlmdDogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1OdW0oWDg2OjplY3gsIGkpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBfXyBzaGxsX0NMcihYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFy
aXRoSW50VG9JbW1PclNsb3dDYXNlKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2JpdGFuZDogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25z
dGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSkpIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzIsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIF9f
IGFuZGxfaTMycihhc0ludGVnZXIodmFsdWUpLCBYODY6OmVheCk7IC8vIEZJWE1FOiBtYWtlIGl0
IG1vcmUgb2J2aW91cyB0aGlzIGlzIHJlbHlpbmcgb24gdGhlIGZvcm1hdCBvZiBKU0ltbWVkaWF0
ZQotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVy
aWNBcmcoc3JjMikpIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGFuZGxfaTMycihhc0ludGVn
ZXIodmFsdWUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhzcmMxLCBYODY6OmVheCwgc3JjMiwgWDg2OjplZHgsIGkpOwotICAg
ICAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfcnNoaWZ0OiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0
Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7Ci0gICAgICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAg
ICAvLyBNYXNrIHdpdGggMHgxZiBhcyBwZXIgZWNtYS0yNjIgMTEuNy4yIHN0ZXAgNy4KLSAgICAg
ICAgICAgICAgICBfXyBzYXJsX2k4cihKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHZh
bHVlKSAmIDB4MWYsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgsIHNyYzIsIFg4Njo6
ZWN4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2
OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShY
ODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgICAgICBfXyBzYXJsX0NMcihYODY6OmVheCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoUG90ZW50aWFsbHlSZVRhZ0ltbWVkaWF0ZShY
ODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRub3Q6IHsKLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4
LCBpKTsKLSAgICAgICAgICAgIF9fIHhvcmxfaThyKH5KU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUlu
dGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF9iYXNl
OiB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwot
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX3dp
dGhfYmFzZSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19m
dW5jX2V4cDogewotICAgICAgICAgICAgRnVuY0V4cHJOb2RlKiBmdW5jID0gKG1fY29kZUJsb2Nr
LT5mdW5jdGlvbkV4cHJlc3Npb25zW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKS5nZXQo
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihmdW5jKSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX25ld19mdW5jX2V4cCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9tb2Q6IHsKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwg
aSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkp
OwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsK
LSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbWl0RmFzdEFyaXRoRGVU
YWdJbW1lZGlhdGVKdW1wSWZaZXJvKFg4Njo6ZWN4KSwgaSkpOwotICAgICAgICAgICAgX18gY2Rx
KCk7Ci0gICAgICAgICAgICBfXyBpZGl2bF9yKFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRG
YXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX3Jy
KFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qdHJ1ZTogewotICAg
ICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRl
Z2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBKbXBTcmMgaXNaZXJvID0gX18gamUoKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJ
bW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2pt
cFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbmUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLQotICAg
ICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0
ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUo
X18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0lu
dGVnZXIoSlNJbW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAg
ICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0g
ICAgICAgICAgICBfXyBsaW5rKGlzWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBpICs9
IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9C
SU5BUllfT1Aob3BfbGVzcykKLSAgICAgICAgY2FzZSBvcF9uZXE6IHsKLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6
ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwgaSk7
Ci0gICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWF4LCBYODY6OmVkeCk7Ci0KLSAgICAgICAg
ICAgIF9fIHNldG5lX3IoWDg2OjplYXgpOwotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6
ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6
ZWF4KTsKLQotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wb3N0X2RlYzogewotICAgICAgICAgICAg
aW50IHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAg
X18gbW92bF9ycihYODY6OmVheCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHN1YmxfaThyKGdl
dERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwg
WDg2OjplZHgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnko
X18gam8oKSwgaSkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfdXJzaGlm
dCkKLSAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAg
ICBfXyB4b3JsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFy
aXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0g
NTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDogewotICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBtX2NvZGVCbG9jay0+cmVnZXhw
c1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXS5nZXQoKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihyZWdFeHApLCAwKTsK
LSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X3JlZ2V4
cCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRvcjogewotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGlu
c3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKLSAgICAg
ICAgICAgIF9fIG9ybF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfdGhyb3c6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfdGhyb3cpOwotICAgICAgICAgICAg
X18gYWRkbF9pOHIoMHgyMCwgWDg2Ojplc3ApOwotICAgICAgICAgICAgX18gcG9wbF9yKFg4Njo6
ZWJ4KTsKLSAgICAgICAgICAgIF9fIHBvcGxfcihYODY6OmVkaSk7Ci0gICAgICAgICAgICBfXyBw
b3BsX3IoWDg2Ojplc2kpOwotICAgICAgICAgICAgX18gcmV0KCk7Ci0gICAgICAgICAgICBpICs9
IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9w
bmFtZXM6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X3BuYW1lcyk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9uZXh0X3BuYW1lOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXh0
X3BuYW1lKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBKbXBTcmMgZW5kT2ZJdGVyID0gX18gamUoKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDMgKyB0YXJnZXQp
KTsKLSAgICAgICAgICAgIF9fIGxpbmsoZW5kT2ZJdGVyLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfcHVzaF9zY29wZTogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX3Njb3BlKTsKLSAg
ICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfcG9wX3Njb3BlOiB7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3BvcF9zY29wZSk7Ci0gICAgICAgICAgICBpICs9IDE7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF90eXBl
b2YpCi0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX3VuZGVmaW5lZCkKLSAgICAg
ICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfYm9vbGVhbikKLSAgICAgICAgQ1RJX0NPTVBJ
TEVfVU5BUllfT1Aob3BfaXNfbnVtYmVyKQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChv
cF9pc19zdHJpbmcpCi0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX29iamVjdCkK
LSAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfZnVuY3Rpb24pCi0gICAgICAgIGNh
c2Ugb3Bfc3RyaWN0ZXE6IHsKLSAgICAgICAgICAgIGNvbXBpbGVPcFN0cmljdEVxKGluc3RydWN0
aW9uICsgaSwgaSwgT3BTdHJpY3RFcSk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25zdHJpY3RlcTogewotICAgICAg
ICAgICAgY29tcGlsZU9wU3RyaWN0RXEoaW5zdHJ1Y3Rpb24gKyBpLCBpLCBPcE5TdHJpY3RFcSk7
Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3RvX2pzbnVtYmVyOiB7Ci0gICAgICAgICAgICBpbnQgc3JjVlJlZyA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY1ZSZWcsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIEptcFNyYyB3YXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBzcmNWUmVnKTsKLQot
ICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSks
IFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0oTnVtYmVyVHlw
ZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIF9fIGxpbmsod2Fz
SW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaW46IHsKLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfaW4p
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHVzaF9uZXdfc2NvcGU6IHsKLSAgICAgICAgICAgIElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NhdGNoOiB7Ci0gICAg
ICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfY2FsbEZyYW1lLCBYODY6OmVkaSk7IC8v
IGVkaSA6PSByCi0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbXBfc2NvcGVzOiB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjb3VudCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoY291bnQsIDApOwotICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qbXBfc2NvcGVzKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDIgKyB0YXJnZXQpKTsK
LSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfcHV0X2J5X2luZGV4OiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZCwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pbmRleCk7Ci0g
ICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3N3aXRjaF9pbW06IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5kZXgg
PSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgZGVm
YXVsdE9mZnNldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBzY3J1dGluZWUgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotCi0gICAg
ICAgICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJh
Y2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlKiBq
dW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07Ci0gICAgICAgICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBpLCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwotICAgICAg
ICAgICAganVtcFRhYmxlLT5jdGlPZmZzZXRzLmdyb3coanVtcFRhYmxlLT5icmFuY2hPZmZzZXRz
LnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0
YW50KHRhYmxlSW5kZXgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9zd2l0Y2hfaW1tKTsKLSAgICAgICAgICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5k
ZXggPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQg
ZGVmYXVsdE9mZnNldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzY3J1dGluZWUgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotCi0g
ICAgICAgICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxl
KiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Ci0gICAgICAgICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBpLCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwotICAg
ICAgICAgICAganVtcFRhYmxlLT5jdGlPZmZzZXRzLmdyb3coanVtcFRhYmxlLT5icmFuY2hPZmZz
ZXRzLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHRhYmxlSW5kZXgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9zd2l0Y2hfY2hhcik7Ci0gICAgICAgICAgICBfXyBqbXBfcihYODY6OmVh
eCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRh
YmxlSW5kZXggPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5z
aWduZWQgZGVmYXVsdE9mZnNldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
OwotCi0gICAgICAgICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgICAgICAgICAgU3RyaW5nSnVt
cFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07Ci0gICAgICAgICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBpLCBkZWZhdWx0T2Zmc2V0KSk7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgMCwgWDg2OjplY3gpOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHRhYmxlSW5kZXgsIDQpOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKTsKLSAgICAgICAg
ICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDogewotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21W
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gp
OwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlf
dmFsKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXI6IHsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOwotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KGlkZW50KSwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9nZXR0ZXIpOwotICAgICAg
ICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAg
ICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2lu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdD
b25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUu
b3BlcmFuZCwgOCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9wdXRfc2V0dGVyKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Vycm9yOiB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlKiBtZXNzYWdlID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFu
dHNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXNJbnRlZ2VyKG1lc3NhZ2UpLCA0KTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChtX2NvZGVCbG9jay0+bGluZU51bWJlckZvclZQQygm
aW5zdHJ1Y3Rpb25baV0pLCA4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfbmV3X2Vycm9yKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlYnVnOiB7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQo
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgOCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2RlYnVnKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogewot
ICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
OwotCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBp
KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOwotCi0gICAg
ICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2
OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwg
WDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0bnpfcihYODY6OmVheCk7Ci0KLSAgICAgICAg
ICAgIEptcFNyYyB3YXNOb3RJbW1lZGlhdGUgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAgX18g
bGluayhpc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfaTMy
cih+SlNJbW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0gICAg
ICAgICAgICBfXyBhbmRsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBj
bXBsX2kzMnIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgX18gbGluayh3YXNOb3RJ
bW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2Ojpl
YXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgICAg
ICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX25lcV9udWxsOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMSwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0
ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGlzSW1tZWRpYXRlID0g
X18gam56KCk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwg
bV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gdGVzdGxf
aTMybShNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5
cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXR6X3IoWDg2Ojpl
YXgpOwotCi0gICAgICAgICAgICBKbXBTcmMgd2FzTm90SW1tZWRpYXRlID0gX18gam1wKCk7Ci0K
LSAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAg
ICAgICBfXyBtb3ZsX2kzMnIofkpTSW1tZWRpYXRlOjpFeHRlbmRlZFRhZ0JpdFVuZGVmaW5lZCwg
WDg2OjplY3gpOwotICAgICAgICAgICAgX18gYW5kbF9ycihYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZU51bGwsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNldG5lX3IoWDg2OjplYXgpOwotCi0gICAgICAgICAg
ICBfXyBsaW5rKHdhc05vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9f
IG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFRhZ0FzQm9v
bEltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci0KLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfZW50ZXI6IHsKLSAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdo
IENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAotICAgICAg
ICAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNl
c3NhcmlseSBwcm9sb25naW5nCi0gICAgICAgICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGlu
Y3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVC
bG9jay0+bnVtVmFycyArIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNvdW50OyArK2opCi0gICAgICAgICAg
ICAgICAgZW1pdEluaXRSZWdpc3RlcihqKTsKLQotICAgICAgICAgICAgaSs9IDE7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VudGVyX3dpdGhfYWN0aXZh
dGlvbjogewotICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0s
IHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50Ci0gICAgICAgICAgICAvLyByZWdpc3RlcnMgdG8g
emFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKLSAg
ICAgICAgICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4K
LSAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzICsgbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSAwOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgICAgICAgICBlbWl0SW5pdFJlZ2lzdGVy
KGopOwotCi0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1
c2hfYWN0aXZhdGlvbik7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotCi0gICAgICAgICAgICBpKz0gMjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czog
ewotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
ID09IDEpID8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRzX25vX3BhcmFtcyA6
IEludGVycHJldGVyOjpjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAgICAgICAgICBpICs9
IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NvbnZl
cnRfdGhpczogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWR4KTsK
LSAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTmVlZHNUaGlzQ29udmVyc2lvbiwgRklFTERfT0ZG
U0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplZHgpOwotICAgICAgICAg
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam56KCksIGkpKTsKLQotICAg
ICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDogewotICAgICAgICAgICAgZW1pdEdldENUSVBhcmFt
KENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBj
bXBsX2kzMm0oMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIG5vUHJvZmlsZXIgPSBf
XyBqZSgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbCk7Ci0gICAg
ICAgICAgICBfXyBsaW5rKG5vUHJvZmlsZXIsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBp
ICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3By
b2ZpbGVfZGlkX2NhbGw6IHsKLSAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19w
cm9maWxlclJlZmVyZW5jZSwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKDAs
IFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBub1Byb2ZpbGVyID0gX18gamUoKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbCk7Ci0gICAgICAgICAgICBfXyBs
aW5rKG5vUHJvZmlsZXIsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBpICs9IDI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5n
dGg6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgotICAgICAgICBjYXNlIG9wX2dl
dF9ieV9pZF9nZW5lcmljOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKLSAgICAg
ICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWRfc2VsZjoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0OgotICAgICAgICBj
YXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgotICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF9nZW5l
cmljOgotICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgICAgICBjYXNlIG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bkluZGV4ID09IG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkp
OwotICAgIEFTU0VSVChjYWxsTGlua0luZm9JbmRleCA9PSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJ
bmZvcy5zaXplKCkpOwotfQotCi0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkK
LXsKLSAgICB1bnNpZ25lZCBqbXBUYWJsZUNvdW50ID0gbV9qbXBUYWJsZS5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGptcFRhYmxlQ291bnQ7ICsraSkKLSAgICAgICAgX18g
bGluayhtX2ptcFRhYmxlW2ldLmZyb20sIG1fbGFiZWxzW21fam1wVGFibGVbaV0udG9dKTsKLSAg
ICBtX2ptcFRhYmxlLmNsZWFyKCk7Ci19Ci0KLSNkZWZpbmUgQ1RJX0NPTVBJTEVfQklOQVJZX09Q
X1NMT1dfQ0FTRShuYW1lKSBcCi0gICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsgXAotICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7IFwK
LSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCi0gICAgICAgIGkgKz0gNDsgXAotICAg
ICAgICBicmVhazsgXAotICAgIH0KLQotI2RlZmluZSBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xP
V19DQVNFX0RPVUJMRV9FTlRSWShuYW1lKSBcCi0gICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAg
X18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsgXAotICAgICAgICBfXyBsaW5rKCgrK2l0
ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsgICAgICAgICAgICAgICAgXAotICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAw
LCBYODY6OmVjeCk7IFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCi0gICAgICAg
IGkgKz0gNDsgXAotICAgICAgICBicmVhazsgXAotICAgIH0KLSAgICAKLXZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCi17Ci0gICAgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbkluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCA9IDA7Ci0K
LSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
LmJlZ2luKCk7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgLy8gRklYTUU6IGVuYWJsZSBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZvciBz
bG93IGNhc2VzIHdoZW4gYXBwbGljYWJsZQotICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVy
KCk7Ci0KLSAgICAgICAgdW5zaWduZWQgaSA9IGl0ZXItPnRvOwotI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgdW5zaWduZWQgZmlyc3RUbyA9IGk7Ci0jZW5kaWYKLQotICAgICAgICBzd2l0Y2ggKE9w
Y29kZUlEIG9wY29kZUlEID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25b
aV0udS5vcGNvZGUpKSB7Ci0gICAgICAgIGNhc2Ugb3BfY29udmVydF90aGlzOiB7Ci0gICAgICAg
ICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGlu
aygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
KFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfY29udmVydF90aGlzKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2FkZDogewotICAgICAg
ICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVy
aWNBcmcoc3JjMSkpIHsKLSAgICAgICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJv
bTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgICAgICAgICBfXyBzdWJsX2kzMnIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0
ZSh2YWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2
OjplYXgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfYWRkKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1l
ZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7Ci0gICAgICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9
IGl0ZXItPmZyb207Ci0gICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgX18gc3VibF9pMzJyKGdldERlVGFnZ2VkQ29uc3Rh
bnRJbW1lZGlhdGUodmFsdWUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhu
b3RJbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KHNyYzIsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2FkZCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBPcGVyYW5k
VHlwZXMgdHlwZXMgPSBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJl
cigpICYmIHR5cGVzLnNlY29uZCgpLm1pZ2h0QmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShvcF9hZGQsIGl0ZXIsIGRzdCwgc3JjMSwg
c3JjMiwgdHlwZXMsIGkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGkg
Kz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0
X2J5X3ZhbDogewotICAgICAgICAgICAgLy8gVGhlIHNsb3cgY2FzZSB0aGF0IGhhbmRsZXMgYWNj
ZXNzZXMgdG8gYXJyYXlzIChiZWxvdykgbWF5IGp1bXAgYmFjayB1cCB0byBoZXJlLiAKLSAgICAg
ICAgICAgIEptcERzdCBiZWdpbkdldEJ5VmFsU2xvdyA9IF9fIGxhYmVsKCk7Ci0KLSAgICAgICAg
ICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgX18gbGluaygoKytp
dGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5m
cm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hl
Y2soWDg2OjplZHgpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X3ZhbCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgX18gbGlu
ayhfXyBqbXAoKSwgbV9sYWJlbHNbaSArIDRdKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBz
bG93IGNhc2UgdGhhdCBoYW5kbGVzIGFjY2Vzc2VzIHRvIGFycmF5cyBhYm92ZSB0aGUgZmFzdCBj
dXQtb2ZmLgotICAgICAgICAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHRoaXMgaXMgYW4gYWNjZXNz
IHRvIHRoZSB2ZWN0b3IKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JMZW5ndGgpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBs
aW5rKF9fIGpiZSgpLCBiZWdpbkdldEJ5VmFsU2xvdyk7Ci0KLSAgICAgICAgICAgIC8vIG9rYXks
IG1pc3NlZCB0aGUgZmFzdCByZWdpb24sIGJ1dCBpdCBpcyBzdGlsbCBpbiB0aGUgdmVjdG9yLiAg
R2V0IHRoZSB2YWx1ZS4KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pLCBYODY6OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVl
KiksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHZhbHVlIGxv
YWRlZCBpcyB6ZXJvOyBpZiBzbyB3ZSBuZWVkIHRvIHJldHVybiB1bmRlZmluZWQuCi0gICAgICAg
ICAgICBfXyB0ZXN0bF9ycihYODY6OmVjeCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gbGlu
ayhfXyBqZSgpLCBiZWdpbkdldEJ5VmFsU2xvdyk7Ci0gICAgICAgICAgICBfXyBtb3ZsX3JyKFg4
Njo6ZWN4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgaSAr
PSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zdWI6
IHsKLSAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uob3Bfc3ViLCBpdGVy
LCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQo
aW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCksIGkpOwotICAgICAgICAgICAgaSArPSA1Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yc2hpZnQ6IHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
OwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpCi0gICAgICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gp
OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+
ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVj
eCwgNCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9y
c2hpZnQpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7Ci0gICAgICAgICAgICBKbXBT
cmMgbm90SW1tMSA9IGl0ZXItPmZyb207Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tMiA9ICgr
K2l0ZXIpLT5mcm9tOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFi
ZWwoKSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
WDg2OjplY3gsIGkpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0xLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgICAgIF9fIGxpbmsobm90SW1tMiwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2
OjplY3gsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9sc2hpZnQpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7Ci0gICAgICAg
ICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSog
c3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7Ci0gICAgICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0LCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9s
b29wX2lmX2xlc3MpOwotICAgICAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6
OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDMg
KyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0
ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4
Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsK
LSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3Bf
aWZfbGVzcyk7Ci0gICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMyArIHRh
cmdldF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAg
ICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKSkKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5r
KGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVh
eCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA4KTsKLSAgICAgICAg
ICAgIEptcFNyYyBjYWxsID0gZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRf
YnlfaWQpOwotCi0gICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7
IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICAg
ICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwotICAgICAg
ICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgICAgICArK3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKLQotICAgICAgICAgICAgaSArPSA4OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsK
LSAgICAgICAgICAgIC8vIEFzIGZvciB0aGUgaG90IHBhdGggb2YgZ2V0X2J5X2lkLCBhYm92ZSwg
d2UgZW5zdXJlIHRoYXQgd2UgY2FuIHVzZSBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgb2Zmc2V0
Ci0gICAgICAgICAgICAvLyBzbyB0aGF0IHdlIG9ubHkgbmVlZCB0cmFjayBvbmUgcG9pbnRlciBp
bnRvIHRoZSBzbG93IGNhc2UgY29kZSAtIHdlIHRyYWNrIGEgcG9pbnRlciB0byB0aGUgbG9jYXRp
b24KLSAgICAgICAgICAgIC8vIG9mIHRoZSBjYWxsICh3aGljaCB3ZSBjYW4gdXNlIHRvIGxvb2sg
dXAgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24pLCBidXQgc2hvdWxkIGEgYXJyYXktbGVuZ3RoIG9y
Ci0gICAgICAgICAgICAvLyBwcm90b3R5cGUgYWNjZXNzIHRyYW1wb2xpbmUgZmFpbCB3ZSB3YW50
IHRvIGJhaWwgb3V0IGJhY2sgdG8gaGVyZS4gIFRvIGRvIHNvIHdlIGNhbiBzdWJ0cmFjdCBiYWNr
Ci0gICAgICAgICAgICAvLyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2FsbCB0byB0aGUgaGVhZCBv
ZiB0aGUgc2xvdyBjYXNlLgotCi0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoaXRlciwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICAgICAg
KytpdGVyOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIEptcERzdCBjb2xkUGF0aEJlZ2luID0gX18gbGFi
ZWwoKTsKLSNlbmRpZiAgICAgICAgCi0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4
LCAwKTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7
Ci0gICAgICAgICAgICBKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkKTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGNvbGRQYXRoQmVnaW4sIGNhbGwpID09IHJlcGF0Y2hPZmZz
ZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0KLSAgICAgICAgICAgIC8vIFRyYWNr
IHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBy
ZXBhdGNoIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5
dGVjb2RlSW5kZXggPT0gaSk7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRp
b25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uY2FsbFJldHVybkxvY2F0aW9u
ID0gY2FsbDsKLSAgICAgICAgICAgICsrcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4Owot
Ci0gICAgICAgICAgICBpICs9IDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1Njcmlw
dENoZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0
YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIGlmIChzcmMyaW1tKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5m
cm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4
LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3NlcSk7Ci0g
ICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgICAgICBfXyBsaW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9f
IGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOwotICAg
ICAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJlX2luYzogewotICAgICAgICAgICAgdW5zaWduZWQgc3Jj
RHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEptcFNyYyBu
b3RJbW0gPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwg
X18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBzdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50
SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9wcmVfaW5jKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAgICAgICAgLy8gTm9ybWFs
IHNsb3cgY2FzZXMgLSBlaXRoZXIgaXMgbm90IGFuIGltbWVkaWF0ZSBpbW0sIG9yIGlzIGFuIGFy
cmF5LgotICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207Ci0gICAgICAgICAg
ICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxp
bmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0
aEludFRvSW1tTm9DaGVjayhYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwg
X18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwg
NCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA4KTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbCk7Ci0gICAgICAg
ICAgICBfXyBsaW5rKF9fIGptcCgpLCBtX2xhYmVsc1tpICsgNF0pOwotCi0gICAgICAgICAgICAv
LyBzbG93IGNhc2VzIGZvciBpbW1lZGlhdGUgaW50IGFjY2Vzc2VzIHRvIGFycmF5cwotICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBf
XyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkp
OwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2
OjplY3gsIDgpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9wdXRfYnlfdmFsX2FycmF5KTsKLQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb29wX2lmX3RydWU6IHsKLSAgICAg
ICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXRl
ci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4
LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfanRy
dWUpOwotICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBfXyBsaW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMiArIHRhcmdldF0pOwot
ICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9wcmVfZGVjOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0
ZXItPmZyb207Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgICAgIF9fIGFkZGxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUo
SlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18g
bGluayhub3RJbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X3ByZV9kZWMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwot
ICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9qbmxlc3M6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0g
Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgaWYgKHNyYzJpbW0pIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5r
KGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmco
WDg2OjplZHgsIDApOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2psZXNzKTsKLSAg
ICAgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgICAgIF9fIGxpbmsoX18gamUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBs
YWJlbCgpKTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJl
bCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2psZXNzKTsKLSAgICAgICAgICAgICAg
ICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxp
bmsoX18gamUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3Bfbm90OiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgX18geG9ybF9pOHIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlQm9v
bCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0g
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25vdCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsK
LSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfanRydWUpOwot
ICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBfXyBsaW5rKF9fIGplKCksIG1fbGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7IC8vIGludmVy
dGVkIQotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9wb3N0X2luYzogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRl
ci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9t
LCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwot
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3N0X2luYyk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplZHgpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0bm90OiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXIt
PmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwg
MCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdG5v
dCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaWYg
KGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgewotICAgICAgICAgICAgICAg
IF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgICAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYml0YW5kKTsKLSAgICAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGdldENv
bnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgewotICAgICAgICAgICAgICAgIF9fIGxp
bmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfYml0YW5kKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYml0YW5kKTsKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2p0cnVlOiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKLSAgICAgICAgICAgIF9fIHRl
c3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgX18gbGluayhfXyBq
bmUoKSwgbV9sYWJlbHNbaSArIDIgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcG9zdF9kZWM6IHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfcG9zdF9kZWMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2JpdHhvcjog
ewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX2JpdHhvcik7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRvcjogewotICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwg
NCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdG9y
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2VxOiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXIt
PmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwg
MCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZXEpOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfbmVxOiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfbmVxKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9CSU5BUllf
T1BfU0xPV19DQVNFX0RPVUJMRV9FTlRSWShvcF9zdHJpY3RlcSk7Ci0gICAgICAgIENUSV9DT01Q
SUxFX0JJTkFSWV9PUF9TTE9XX0NBU0VfRE9VQkxFX0VOVFJZKG9wX25zdHJpY3RlcSk7Ci0gICAg
ICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9t
LCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBY
ODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2luc3RhbmNlb2YpOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfbW9kOiB7Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tMSA9IGl0ZXItPmZy
b207Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tMiA9ICgrK2l0ZXIpLT5mcm9tOwotICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBl
bWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdEZh
c3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90
SW1tMSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbTIsIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfbW9kKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX211bDogewot
ICAgICAgICAgICAgaW50IGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBKU1ZhbHVlKiBzcmMxVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3Jj
MSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0
ZU51bWVyaWNBcmcoc3JjMik7Ci0gICAgICAgICAgICBpbnQzMl90IHZhbHVlOwotICAgICAgICAg
ICAgaWYgKHNyYzFWYWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzFW
YWx1ZSkpID4gMCkpIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGFuIGV4dHJhIHNsb3cgY2FzZSBmb3Ig
KG9wMSAqIC1OKSBvciAoLU4gKiBvcDIpLCB0byBjaGVjayBmb3IgMCBzaW5jZSB0aGlzIHNob3Vs
ZCBwcm9kdWNlIGEgcmVzdWx0IG9mIC0wLgotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAg
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOwotICAg
ICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3JjMlZhbHVlICYmICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3Jj
MlZhbHVlKSkgPiAwKSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFi
ZWwoKSk7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gZXh0cmEgc2xvdyBjYXNlIGZv
ciAob3AxICogLU4pIG9yICgtTiAqIG9wMiksIHRvIGNoZWNrIGZvciAwIHNpbmNlIHRoaXMgc2hv
dWxkIHByb2R1Y2UgYSByZXN1bHQgb2YgLTAuCi0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKLSAg
ICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX211bCk7Ci0g
ICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShvcF9t
dWwsIGl0ZXIsIGRzdCwgc3JjMSwgc3JjMiwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0
aW9uW2kgKyA0XS51Lm9wZXJhbmQpLCBpKTsKLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBj
YXNlIG9wX2NhbGxfZXZhbDoKLSAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAg
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShpbnN0cnVjdGlvbiArIGksIGksIGl0ZXIsIGNhbGxM
aW5rSW5mb0luZGV4KyssIG9wY29kZUlEKTsKLSAgICAgICAgICAgIGkgKz0gKG9wY29kZUlEID09
IG9wX2NvbnN0cnVjdCA/IDcgOiA1KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfdG9fanNudW1iZXI6IHsKLSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKSkKLSAgICAg
ICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOwotCi0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfdG9fanNudW1iZXIpOwot
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoKGl0ZXIgKyAxKSA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvICE9IChp
dGVyICsgMSktPnRvLCJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdl
bi4iKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvID09IGl0ZXItPnRvLCAi
VG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotCi0gICAgICAg
IF9fIGxpbmsoX18gam1wKCksIG1fbGFiZWxzW2ldKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQocHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID09IG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5zaXplKCkpOwotICAgIEFTU0VSVChjYWxsTGlua0luZm9JbmRleCA9PSBt
X2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCkpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGUoKQotewotI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCi0gICAgICAgIF9f
IG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jayksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKTsKLSNlbmRpZgotI2lmIEVOQUJM
RShPUENPREVfU0FNUExJTkcpCi0gICAgICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkp
LCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Ci0jZW5kaWYKLQotICAg
IC8vIENvdWxkIHVzZSBhIHBvcGxfbSwgYnV0IHdvdWxkIG5lZWQgdG8gb2Zmc2V0IHRoZSBmb2xs
b3dpbmcgaW5zdHJ1Y3Rpb24gaWYgc28uCi0gICAgX18gcG9wbF9yKFg4Njo6ZWN4KTsKLSAgICBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoWDg2OjplY3gsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMp
OwotCi0gICAgSm1wU3JjIHNsb3dSZWdpc3RlckZpbGVDaGVjazsKLSAgICBKbXBEc3QgYWZ0ZXJS
ZWdpc3RlckZpbGVDaGVjazsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlID09IEZ1bmN0
aW9uQ29kZSkgewotICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGZhc3QgbGlua2VkIGNhbGws
IHdlIGRvIG5vdCBzZXQgdGhpcyB1cCBpbiB0aGUgY2FsbGVyLgotICAgICAgICBfXyBtb3ZsX2kz
Mm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2spLCBSZWdpc3RlckZpbGU6
OkNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRp
KTsKLQotICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcmVnaXN0ZXJGaWxlLCBYODY6
OmVheCk7Ci0gICAgICAgIF9fIGxlYWxfbXIobV9jb2RlQmxvY2stPm51bUNhbGxlZVJlZ2lzdGVy
cyAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpLCBYODY6OmVkeCk7Ci0gICAgICAgIF9fIGNt
cGxfbXIoRklFTERfT0ZGU0VUKFJlZ2lzdGVyRmlsZSwgbV9lbmQpLCBYODY6OmVheCwgWDg2Ojpl
ZHgpOwotICAgICAgICBzbG93UmVnaXN0ZXJGaWxlQ2hlY2sgPSBfXyBqZygpOwotICAgICAgICBh
ZnRlclJlZ2lzdGVyRmlsZUNoZWNrID0gX18gbGFiZWwoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCk7Ci0gICAgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwotICAgIHBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7Ci0KLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBl
ID09IEZ1bmN0aW9uQ29kZSkgewotICAgICAgICBfXyBsaW5rKHNsb3dSZWdpc3RlckZpbGVDaGVj
aywgX18gbGFiZWwoKSk7Ci0gICAgICAgIGVtaXRDVElDYWxsKDAsIEludGVycHJldGVyOjpjdGlf
cmVnaXN0ZXJfZmlsZV9jaGVjayk7Ci0gICAgICAgIEptcFNyYyBiYWNrVG9Cb2R5ID0gX18gam1w
KCk7Ci0gICAgICAgIF9fIGxpbmsoYmFja1RvQm9keSwgYWZ0ZXJSZWdpc3RlckZpbGVDaGVjayk7
Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fam1wVGFibGUuaXNFbXB0eSgpKTsKLQotICAgIHZvaWQq
IGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8gVHJhbnNsYXRlIHZQQyBvZmZz
ZXRzIGludG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0ZWQgY29kZSwgZm9yIHN3aXRjaCB0YWJs
ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3dpdGNoZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgU3dpdGNoUmVjb3JkIHJlY29yZCA9IG1fc3dpdGNoZXNbaV07Ci0gICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSByZWNvcmQuYnl0ZWNvZGVJbmRleDsKLQotICAgICAg
ICBpZiAocmVjb3JkLnR5cGUgIT0gU3dpdGNoUmVjb3JkOjpTdHJpbmcpIHsKLSAgICAgICAgICAg
IEFTU0VSVChyZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSB8fCByZWNvcmQu
dHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcik7IAotICAgICAgICAgICAgQVNTRVJUKHJl
Y29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKSA9PSBy
ZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpT2Zmc2V0cy5zaXplKCkpOwotCi0g
ICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9
IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbYnl0ZWNvZGVJbmRleCArIDMg
KyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmJyYW5jaE9mZnNldHMu
c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSByZWNvcmQu
anVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0c1tqXTsKLSAgICAgICAgICAg
ICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpT2Zmc2V0c1tqXSA9IG9m
ZnNldCA/IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbYnl0ZWNvZGVJbmRl
eCArIDMgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlE
ZWZhdWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6U3RyaW5nKTsKLQotICAgICAgICAgICAg
cmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBfXyBnZXRSZWxv
Y2F0ZWRBZGRyZXNzKGNvZGUsIG1fbGFiZWxzW2J5dGVjb2RlSW5kZXggKyAzICsgcmVjb3JkLmRl
ZmF1bHRPZmZzZXRdKTsKLQotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZz
ZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUt
Pm9mZnNldFRhYmxlLmVuZCgpOyAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChTdHJpbmdK
dW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBpdCA9IHJlY29yZC5qdW1wVGFi
bGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9m
ZnNldDsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmN0aU9mZnNldCA9IG9mZnNldCA/IF9f
IGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbYnl0ZWNvZGVJbmRleCArIDMgKyBv
ZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChWZWN0b3I8SGFuZGxl
ckluZm8+OjppdGVyYXRvciBpdGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXJzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXJzLmVuZCgpOyArK2l0
ZXIpCi0gICAgICAgICBpdGVyLT5uYXRpdmVDb2RlID0gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhj
b2RlLCBtX2xhYmVsc1tpdGVyLT50YXJnZXRdKTsKLQotICAgIGZvciAoVmVjdG9yPENhbGxSZWNv
cmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5k
KCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+dG8pCi0gICAgICAgICAgICBYODZBc3Nl
bWJsZXI6OmxpbmsoY29kZSwgaXRlci0+ZnJvbSwgaXRlci0+dG8pOwotICAgICAgICBtX2NvZGVC
bG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5hZGQoX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhj
b2RlLCBpdGVyLT5mcm9tKSwgaXRlci0+Ynl0ZWNvZGVJbmRleCk7Ci0gICAgfQotCi0gICAgLy8g
TGluayBhYnNvbHV0ZSBhZGRyZXNzZXMgZm9yIGpzcgotICAgIGZvciAoVmVjdG9yPEpTUkluZm8+
OjppdGVyYXRvciBpdGVyID0gbV9qc3JTaXRlcy5iZWdpbigpOyBpdGVyICE9IG1fanNyU2l0ZXMu
ZW5kKCk7ICsraXRlcikKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rQWJzb2x1dGVBZGRyZXNz
KGNvZGUsIGl0ZXItPmFkZHJQb3NpdGlvbiwgaXRlci0+dGFyZ2V0KTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVC
bG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV07Ci0gICAgICAgIGluZm8uY2FsbFJl
dHVybkxvY2F0aW9uID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1f
cHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxvY2F0aW9uKTsKLSAg
ICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJl
c3MoY29kZSwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4p
OwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPmNhbGxM
aW5rSW5mb3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9j
b2RlQmxvY2stPmNhbGxMaW5rSW5mb3NbaV07Ci0gICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0
aW9uID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICAgICAg
aW5mby5ob3RQYXRoQmVnaW4gPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29k
ZSwgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwot
ICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRk
cmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhP
dGhlcik7Ci0gICAgICAgIGluZm8uY29sZFBhdGhPdGhlciA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVs
b2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ld
LmNvbGRQYXRoT3RoZXIpOwotICAgIH0KLQotICAgIG1fY29kZUJsb2NrLT5jdGlDb2RlID0gY29k
ZTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGYoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0g
ICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAg
IF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICBKbXBT
cmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0g
Y2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0
IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNP
YmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBt
b3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4LCBYODY6OmVh
eCk7Ci0gICAgX18gcmV0KCk7Ci0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHko
KTsKLQotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwp
KTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7
Ci0gICAgCi0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpLnN0dWJS
b3V0aW5lID0gY29kZTsKLSAgICAKLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhy
ZXR1cm5BZGRyZXNzLCBjb2RlKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCi17Ci0jaWYgVVNFKENUSV9SRVBBVENIX1BJQykKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLQot
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVy
ZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgY3RpUmVwYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwotCi0gICAgLy8gVGhlIHByb3Rv
dHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENv
ZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJl
bmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQn
cyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNP
YmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJv
cGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9w
ZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9w
ZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0
IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczEgPSBjaGVj
a1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrIHRoZSBwcm90
b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBTdHJ1Y3R1cmUq
KiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUp
OwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihwcm90b3R5cGVT
dHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICBKbXBTcmMgZmFpbHVy
ZUNhc2VzMiA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVj
dE9mZnNldAotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwg
WDg2OjplZHgsIFg4Njo6ZWF4KTsKLQotICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7Ci0K
LSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIC8vIFVzZSB0aGUg
cmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIHZvaWQqIHNsb3dDYXNlQmVnaW4gPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNo
T2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
ZmFpbHVyZUNhc2VzMSwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyBy
ZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJm
b3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hP
ZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7Ci0KLSAg
ICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRl
bGV0ZWQgbGF0ZXIuCi0gICAgaW5mby5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICAvLyBGaW5h
bGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRv
IGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5
SWRCcmFuY2hUb1Nsb3dDYXNlOwotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNl
dChqbXBMb2NhdGlvbiwgY29kZSk7Ci0jZWxzZQotICAgIC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0
IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMg
cmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwotICAgIC8vIHJlZmVyZW5jaW5nIHRoZSBw
cm90b3R5cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3MgdGFibGUgbmlj
ZSBhbmQgZWFybHkhKQotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVj
dHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgIFByb3BlcnR5U3RvcmFn
ZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdl
OwotICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdl
KSwgWDg2OjplZHgpOwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmln
aHQgU3RydWN0dXJlLgotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4
Njo6ZWF4KTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOwotICAgIEptcFNy
YyBmYWlsdXJlQ2FzZXMyID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSk7Ci0K
LSAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNo
YW5nZWQuCi0gICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJv
dG9PYmplY3QtPm1fc3RydWN0dXJlKTsKLSAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdD4ocHJvdG90eXBlU3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVz
cyk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczMgPSBfXyBqbmUoKTsKLQotICAgIC8vIENoZWNr
cyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKLSAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNl
dCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0KLSAgICBfXyByZXQo
KTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgWDg2QXNz
ZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLSAgICBYODZBc3Nl
bWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOwotICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJ
bnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0KLSAgICBtX2NvZGVC
bG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOwotCi0g
ICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29kZSk7Ci0j
ZW5kaWYKLX0KLQotI2lmIFVTRShDVElfUkVQQVRDSF9QSUMpCi12b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkU2VsZkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcywgaW50IGN1cnJl
bnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQpCi17Ci0g
ICAgSm1wU3JjIGZhaWx1cmVDYXNlID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVy
ZSk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9y
YWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAq
IHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIHN1Y2Nl
c3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwot
ICAgIEFTU0VSVChjb2RlKTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0
byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSBy
b3V0aW5lLgotICAgIHZvaWQqIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOwotICAgIGlmICghbGFzdFByb3Rv
QmVnaW4pCi0gICAgICAgIGxhc3RQcm90b0JlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
c3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dD
YXNlQ2FsbDsKLQotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZSwgbGFz
dFByb3RvQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90
IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0
IGZvciB1cy4KLSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9w
ZXJ0eU1hcE9mZnNldDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIHN0cnVjdHVyZS0+cmVm
KCk7Ci0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNh
Y2hlZE9mZnNldCwgY29kZSwgc3RydWN0dXJlKTsKLQotICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0
cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNo
VG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9j
YXRpb24sIGNvZGUpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9M
aXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRP
ZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIC8vIFRoZSBwcm90b3R5cGUgb2Jq
ZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sg
aXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwotICAgIC8vIHJlZmVyZW5jaW5nIHRo
ZSBwcm90b3R5cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3MgdGFibGUg
bmljZSBhbmQgZWFybHkhKQotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0
cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgIFByb3BlcnR5U3Rv
cmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9y
YWdlOwotICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9y
YWdlKSwgWDg2OjplZHgpOwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUg
cmlnaHQgU3RydWN0dXJlLgotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gY2hlY2tTdHJ1Y3R1
cmUoWDg2OjplYXgsIHN0cnVjdHVyZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9i
amVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCi0gICAgU3RydWN0dXJlKiogcHJvdG90
eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKLSAgICBf
XyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4ocHJvdG90eXBlU3RydWN0dXJl
KSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIg
PSBfXyBqbmUoKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQK
LSAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4
LCBYODY6OmVheCk7Ci0KLSAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAgdm9p
ZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICAvLyBVc2UgdGhlIHJlcGF0Y2gg
aW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5h
bCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICB2b2lkKiBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlw
ZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Ci0gICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKLSAg
ICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgbGFzdFByb3RvQmVnaW4p
OwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUs
IGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAg
ICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNl
dDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIHN0cnVjdHVyZS0+cmVmKCk7Ci0gICAgcHJv
dG90eXBlU3RydWN0dXJlLT5yZWYoKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleF0uc2V0KGNhY2hlZE9mZnNldCwgY29kZSwgc3RydWN0dXJlLCBwcm90b3R5cGVT
dHJ1Y3R1cmUpOwotCi0gICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2Fz
ZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBpbnRwdHJf
dCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOwotICAgIFg4
NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7Ci19Ci0K
LXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0
cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgQVNTRVJUKGNvdW50KTsKLSAgICAKLSAgICBWZWN0b3I8
Sm1wU3JjPiBidWNrZXRzT2ZGYWlsOwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBv
ZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGNoZWNrU3Ry
dWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpKTsKLQotICAgIFN0cnVjdHVyZSogY3VyclN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKLSAgICBSZWZQdHI8U3RydWN0dXJlPiogY2hhaW5FbnRyaWVzID0g
Y2hhaW4tPmhlYWQoKTsKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHByb3RvT2JqZWN0ID0g
YXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwot
ICAgICAgICBjdXJyU3RydWN0dXJlID0gY2hhaW5FbnRyaWVzW2ldLmdldCgpOwotCi0gICAgICAg
IC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdl
ZC4KLSAgICAgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJv
dG9PYmplY3QtPm1fc3RydWN0dXJlKTsKLSAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNz
KTsKLSAgICAgICAgYnVja2V0c09mRmFpbC5hcHBlbmQoX18gam5lKCkpOwotICAgIH0KLSAgICBB
U1NFUlQocHJvdG9PYmplY3QpOwotCi0gICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5
U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92bF9t
cihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7Ci0g
ICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwg
WDg2OjplYXgpOwotICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBj
b2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZv
cm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNs
b3cgY2FzZSByb3V0aW5lLgotICAgIHZvaWQqIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3Ry
dWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBidWNrZXRzT2ZGYWlsLnNpemUoKTsgKytpKQotICAgICAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYnVja2V0c09mRmFpbFtpXSwgbGFzdFByb3RvQmVnaW4p
OwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUs
IGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAg
ICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNl
dDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUg
Y3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHJ1Y3R1cmUt
PnJlZigpOwotICAgIGNoYWluLT5yZWYoKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleF0uc2V0KGNhY2hlZE9mZnNldCwgY29kZSwgc3RydWN0dXJlLCBjaGFpbik7
Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4g
dGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExvY2F0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikg
KyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1ibGVy
OjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKLX0KLSNlbmRpZgotCi12
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCB2b2lkKiByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSNpZiBVU0Uo
Q1RJX1JFUEFUQ0hfUElDKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9p
ZF9wcm90b19saXN0KSk7Ci0KLSAgICBBU1NFUlQoY291bnQpOwotICAgIAotICAgIFZlY3RvcjxK
bXBTcmM+IGJ1Y2tldHNPZkZhaWw7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9m
IHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1
Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSkpOwotCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0
dXJlID0gc3RydWN0dXJlOwotICAgIFJlZlB0cjxTdHJ1Y3R1cmU+KiBjaGFpbkVudHJpZXMgPSBj
aGFpbi0+aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBh
c09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0g
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjaGFpbkVudHJpZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2Vk
LgotICAgICAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90
b09iamVjdC0+bV9zdHJ1Y3R1cmUpOwotICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdD4oY3VyclN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3Mp
OwotICAgICAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgfQotICAgIEFT
U0VSVChwcm90b09iamVjdCk7Ci0KLSAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlT
dG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBfXyBtb3ZsX21y
KHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKLSAg
ICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBY
ODY6OmVheCk7Ci0gICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNv
ZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9y
bWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xv
dyBjYXNlIHJvdXRpbmUuCi0gICAgdm9pZCogc2xvd0Nhc2VCZWdpbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGluZm8uY2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlk
U2xvd0Nhc2VDYWxsOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1Y2tldHNPZkZh
aWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBidWNrZXRz
T2ZGYWlsW2ldLCBzbG93Q2FzZUJlZ2luKTsKLQotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0
QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNj
ZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOwotCi0gICAgLy8gVHJh
Y2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxh
dGVyLgotICAgIGluZm8uc3R1YlJvdXRpbmUgPSBjb2RlOwotCi0gICAgLy8gRmluYWxseSByZXBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KLSAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNo
VG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9j
YXRpb24sIGNvZGUpOwotI2Vsc2UKLSAgICBBU1NFUlQoY291bnQpOwotICAgIAotICAgIFZlY3Rv
cjxKbXBTcmM+IGJ1Y2tldHNPZkZhaWw7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0
IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6
VGFnTWFzaywgWDg2OjplYXgpOwotICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKF9fIGpuZSgpKTsK
LSAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0
dXJlKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
UmVmUHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5oZWFkKCk7Ci0gICAgSlNP
YmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUt
PnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZSA9
IGNoYWluRW50cmllc1tpXS5nZXQoKTsKLQotICAgICAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBl
IG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCi0gICAgICAgIFN0cnVjdHVyZSoq
IHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7
Ci0gICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihjdXJyU3Ry
dWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7Ci0gICAgICAgIGJ1Y2tldHNPZkZh
aWwuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICB9Ci0gICAgQVNTRVJUKHByb3RvT2JqZWN0KTsKLQot
ICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3Qt
Pm1fcHJvcGVydHlTdG9yYWdlOwotICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHBy
b3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICBfXyByZXQo
KTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1Y2tldHNPZkZhaWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIFg4
NkFzc2VtYmxlcjo6bGluayhjb2RlLCBidWNrZXRzT2ZGYWlsW2ldLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0KLSAg
ICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBj
b2RlOwotCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywg
Y29kZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFJlcGxh
Y2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVy
bkFkZHJlc3MpCi17Ci0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQg
U3RydWN0dXJlLgotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6
ZWF4KTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOwotICAgIEptcFNyYyBm
YWlsdXJlQ2FzZXMyID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSk7Ci0KLSAg
ICAvLyBjaGVja3Mgb3V0IG9rYXkhIC0gcHV0RGlyZWN0T2Zmc2V0Ci0gICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6
ZWF4KTsKLSAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNW
YWx1ZSopLCBYODY6OmVheCk7Ci0gICAgX18gcmV0KCk7Ci0KLSAgICB2b2lkKiBjb2RlID0gX18g
ZXhlY3V0YWJsZUNvcHkoKTsKLSAgICAKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFp
bHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9w
dXRfYnlfaWRfZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2Fz
ZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9p
ZF9mYWlsKSk7Ci0KLSAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyku
c3R1YlJvdXRpbmUgPSBjb2RlOwotICAgIAotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOwotfQotCi1leHRlcm4gIkMiIHsKLQotICAgIHN0YXRp
YyBKU09iamVjdCogcmVzaXplUHJvcGVydHlTdG9yYWdlKEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBz
aXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCi0gICAgewotICAgICAgICBiYXNlT2JqZWN0
LT5hbGxvY2F0ZVByb3BlcnR5U3RvcmFnZUlubGluZShvbGRTaXplLCBuZXdTaXplKTsKLSAgICAg
ICAgcmV0dXJuIGJhc2VPYmplY3Q7Ci0gICAgfQotCi19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCB0
cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCi17Ci0gICAgcmV0dXJuIG9sZFN0cnVjdHVyZS0+cHJv
cGVydHlTdG9yYWdlQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNh
cGFjaXR5KCk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9u
KFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgc2l6ZV90
IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB2b2lkKiByZXR1cm5BZGRyZXNz
KQotewotICAgIFZlY3RvcjxKbXBTcmMsIDE2PiBmYWlsdXJlQ2FzZXM7Ci0gICAgLy8gQ2hlY2sg
ZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIF9fIHRlc3RsX2kz
MnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKF9fIGpuZSgpKTsKLSAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4ob2xkU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6
OmVheCk7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgVmVjdG9yPEpt
cFNyYz4gc3VjY2Vzc0Nhc2VzOwotCi0gICAgLy8gIGVjeCA9IGJhc2VPYmplY3QKLSAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6
ZWN4KTsKLSAgICAvLyBwcm90byhlY3gpID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCktPnByb3Rv
dHlwZSgpCi0gICAgX18gY21wbF9pMzJtKE9iamVjdFR5cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1
cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZGU0VUKFR5cGVJbmZvLCBtX3R5cGUpLCBYODY6OmVj
eCk7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7
Ci0gICAgCi0gICAgLy8gZWN4ID0gYmFzZU9iamVjdC0+bV9zdHJ1Y3R1cmUKLSAgICBmb3IgKFJl
ZlB0cjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewotICAgICAg
ICAvLyBudWxsIGNoZWNrIHRoZSBwcm90b3R5cGUKLSAgICAgICAgX18gY21wbF9pMzJyKGFzSW50
ZWdlcihqc051bGwoKSksIFg4Njo6ZWN4KTsKLSAgICAgICAgc3VjY2Vzc0Nhc2VzLmFwcGVuZChf
XyBqZSgpKTsKLQotICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlIGlkCi0gICAgICAgIF9f
IGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihpdC0+Z2V0KCkpLCBGSUVMRF9P
RkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgICAgIAotICAgICAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAg
ICAgX18gY21wbF9pMzJtKE9iamVjdFR5cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlw
ZUluZm8pICsgRklFTERfT0ZGU0VUKFR5cGVJbmZvLCBtX3R5cGUpLCBYODY6OmVjeCk7Ci0gICAg
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgICAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsK
LSAgICB9Ci0KLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3VjY2Vzc0Nhc2VzLnNpemUoKTsgKytpKQotICAgICAgICBfXyBs
aW5rKHN1Y2Nlc3NDYXNlc1tpXSwgX18gbGFiZWwoKSk7Ci0KLSAgICBKbXBTcmMgY2FsbFRhcmdl
dDsKLQotICAgIC8vIGVtaXQgYSBjYWxsIG9ubHkgaWYgc3RvcmFnZSByZWFsbG9jIGlzIG5lZWRl
ZAotICAgIGlmICh0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhvbGRTdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSkpIHsKLSAgICAgICAgX18gcHVzaGxfcihYODY6OmVkeCk7Ci0gICAgICAg
IF9fIHB1c2hsX2kzMihuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOwot
ICAgICAgICBfXyBwdXNobF9pMzIob2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0
eSgpKTsKLSAgICAgICAgX18gcHVzaGxfcihYODY6OmVheCk7Ci0gICAgICAgIGNhbGxUYXJnZXQg
PSBfXyBjYWxsKCk7Ci0gICAgICAgIF9fIGFkZGxfaTMycigzICogc2l6ZW9mKHZvaWQqKSwgWDg2
Ojplc3ApOwotICAgICAgICBfXyBwb3BsX3IoWDg2OjplZHgpOwotICAgIH0KLQotICAgIC8vIEFz
c3VtZXMgbV9yZWZDb3VudCBjYW4gYmUgZGVjcmVtZW50ZWQgZWFzaWx5LCByZWZjb3VudCBkZWNy
ZW1lbnQgaXMgc2FmZSBhcyAKLSAgICAvLyBjb2RlYmxvY2sgc2hvdWxkIGVuc3VyZSBvbGRTdHJ1
Y3R1cmUtPm1fcmVmQ291bnQgPiAwCi0gICAgX18gc3VibF9pOG0oMSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ob2xkU3RydWN0dXJlKSk7Ci0gICAgX18gYWRkbF9pOG0oMSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4obmV3U3RydWN0dXJlKSk7Ci0gICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KG5ld1N0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlKSwgWDg2OjplYXgpOwotCi0gICAgLy8gd3JpdGUgdGhlIHZhbHVlCi0gICAgX18gbW92
bF9tcihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgs
IFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXpl
b2YoSlNWYWx1ZSopLCBYODY6OmVheCk7Ci0KLSAgICBfXyByZXQoKTsKLSAgICAKLSAgICBKbXBT
cmMgZmFpbHVyZUp1bXA7Ci0gICAgaWYgKGZhaWx1cmVDYXNlcy5zaXplKCkpIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWx1cmVDYXNlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIF9fIGxpbmsoZmFpbHVyZUNhc2VzW2ldLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgX18g
cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwotICAgICAgICBmYWlsdXJl
SnVtcCA9IF9fIGptcCgpOwotICAgIH0KLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxl
Q29weSgpOwotCi0gICAgaWYgKGZhaWx1cmVDYXNlcy5zaXplKCkpCi0gICAgICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBmYWlsdXJlSnVtcCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50
ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwotCi0gICAgaWYgKHRyYW5zaXRpb25X
aWxsTmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSkKLSAgICAg
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlc2l6ZVByb3BlcnR5U3RvcmFnZSkpOwotICAgIAotICAgIG1fY29kZUJsb2NrLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0gICAgCi0gICAg
Y3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29kZSk7Ci19Ci0K
LXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcygpCi17Ci0gICAg
Ly8gKDEpIFRoZSBmaXJzdCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBm
b3IgYXJyYXkgbGVuZ3RoCi0gICAgCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIGFycmF5Ci0gICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNy
YyBhcnJheV9mYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgX18gY21wbF9pMzJtKHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIpLCBYODY6
OmVheCk7Ci0gICAgSm1wU3JjIGFycmF5X2ZhaWx1cmVDYXNlczIgPSBfXyBqbmUoKTsKLQotICAg
IC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0g
ICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSwgWDg2OjplYXgs
IFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1f
bGVuZ3RoKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLQotICAgIF9fIGNtcGxfaTMycihKU0ltbWVk
aWF0ZTo6bWF4SW1tZWRpYXRlSW50LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFycmF5X2ZhaWx1
cmVDYXNlczMgPSBfXyBqYSgpOwotCi0gICAgX18gYWRkbF9ycihYODY6OmVheCwgWDg2OjplYXgp
OwotICAgIF9fIGFkZGxfaThyKDEsIFg4Njo6ZWF4KTsKLSAgICAKLSAgICBfXyByZXQoKTsKLQot
ICAgIC8vICgyKSBUaGUgc2Vjb25kIGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNj
ZXNzIGZvciBzdHJpbmcgbGVuZ3RoCi0gICAgCi0gICAgSm1wRHN0IHN0cmluZ0xlbmd0aEJlZ2lu
ID0gX18gYWxpZ24oMTYpOwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGEgc3RyaW5nCi0gICAgX18g
dGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBz
dHJpbmdfZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzU3RyaW5nVnB0ciksIFg4Njo6
ZWF4KTsKLSAgICBKbXBTcmMgc3RyaW5nX2ZhaWx1cmVDYXNlczIgPSBfXyBqbmUoKTsKLQotICAg
IC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBVc3RyaW5nLgot
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTU3RyaW5nLCBtX3ZhbHVlKSArIEZJRUxEX09G
RlNFVChVU3RyaW5nLCBtX3JlcCksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoVVN0cmluZzo6UmVwLCBsZW4pLCBYODY6OmVheCwgWDg2OjplYXgpOwot
Ci0gICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJbW1lZGlhdGVJbnQsIFg4Njo6ZWF4
KTsKLSAgICBKbXBTcmMgc3RyaW5nX2ZhaWx1cmVDYXNlczMgPSBfXyBqYSgpOwotCi0gICAgX18g
YWRkbF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIGFkZGxfaThyKDEsIFg4Njo6ZWF4
KTsKLSAgICAKLSAgICBfXyByZXQoKTsKLQotICAgIC8vICgzKSBUcmFtcG9saW5lcyBmb3IgdGhl
IHNsb3cgY2FzZXMgb2Ygb3BfY2FsbCAvIG9wX2NhbGxfZXZhbCAvIG9wX2NvbnN0cnVjdC4KLSAg
ICAKLSAgICBKbXBEc3QgdmlydHVhbENhbGxQcmVMaW5rQmVnaW4gPSBfXyBhbGlnbigxNik7Ci0K
LSAgICAvLyBMb2FkIHRoZSBjYWxsZWUgQ29kZUJsb2NrKiBpbnRvIGVheAotICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fYm9keSksIFg4Njo6ZWN4LCBYODY6OmVheCk7
Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoRnVuY3Rpb25Cb2R5Tm9kZSwgbV9jb2RlKSwg
WDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgp
OwotICAgIEptcFNyYyBoYXNDb2RlQmxvY2sxID0gX18gam5lKCk7Ci0gICAgX18gcG9wbF9yKFg4
Njo6ZWJ4KTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0
Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxK
U0Z1bmN0aW9uMSA9IF9fIGNhbGwoKTsKLSAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsK
LSAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKLSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4
KTsKLSAgICBfXyBsaW5rKGhhc0NvZGVCbG9jazEsIF9fIGxhYmVsKCkpOwotCi0gICAgLy8gQ2hl
Y2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCi0gICAgX18gY21wbF9ybShYODY6OmVk
eCwgRklFTERfT0ZGU0VUKENvZGVCbG9jaywgbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4KTsKLSAg
ICBKbXBTcmMgYXJpdHlDaGVja09rYXkxID0gX18gamUoKTsKLSAgICBfXyBwb3BsX3IoWDg2Ojpl
YngpOwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwotICAgIGVtaXRQdXRDVElBcmco
WDg2OjplYXgsIDEyKTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBl
bWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3Jj
IGNhbGxBcml0eUNoZWNrMSA9IF9fIGNhbGwoKTsKLSAgICBfXyBtb3ZsX3JyKFg4Njo6ZWR4LCBY
ODY6OmVkaSk7Ci0gICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENU
SUFyZyg4LCBYODY6OmVkeCk7Ci0gICAgX18gcHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18gbGlu
ayhhcml0eUNoZWNrT2theTEsIF9fIGxhYmVsKCkpOwotCi0gICAgY29tcGlsZU9wQ2FsbEluaXRp
YWxpemVDYWxsRnJhbWUoKTsKLQotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgZW1pdFB1
dENUSUFyZyhYODY6OmVieCwgNCk7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7
Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAg
IEptcFNyYyBjYWxsRG9udExhenlMaW5rQ2FsbCA9IF9fIGNhbGwoKTsKLSAgICBfXyBwdXNobF9y
KFg4Njo6ZWJ4KTsKLQotICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLQotICAgIEptcERzdCB2aXJ0
dWFsQ2FsbExpbmtCZWdpbiA9IF9fIGFsaWduKDE2KTsKLQotICAgIC8vIExvYWQgdGhlIGNhbGxl
ZSBDb2RlQmxvY2sqIGludG8gZWF4Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNGdW5j
dGlvbiwgbV9ib2R5KSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChGdW5jdGlvbkJvZHlOb2RlLCBtX2NvZGUpLCBYODY6OmVheCwgWDg2OjplYXgpOwot
ICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGhhc0NvZGVC
bG9jazIgPSBfXyBqbmUoKTsKLSAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIF9fIHJlc3Rv
cmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJ
X0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEpTRnVuY3Rpb24yID0gX18gY2FsbCgp
OwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwg
WDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoaGFzQ29k
ZUJsb2NrMiwgX18gbGFiZWwoKSk7Ci0KLSAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVzIGNh
bGxlZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29kZUJs
b2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBhcml0eUNoZWNrT2th
eTIgPSBfXyBqZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVieCwgNCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMTIpOwotICAgIF9f
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVk
aSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEFyaXR5Q2hlY2syID0gX18g
Y2FsbCgpOwotICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWRpKTsKLSAgICBlbWl0R2V0
Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKLSAg
ICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyBsaW5rKGFyaXR5Q2hlY2tPa2F5MiwgX18g
bGFiZWwoKSk7Ci0KLSAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOwotCi0g
ICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsK
LSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0o
WDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxMYXp5TGlua0Nh
bGwgPSBfXyBjYWxsKCk7Ci0gICAgX18gcHVzaGxfcihYODY6OmVieCk7Ci0KLSAgICBfXyBqbXBf
cihYODY6OmVheCk7Ci0KLSAgICBKbXBEc3QgdmlydHVhbENhbGxCZWdpbiA9IF9fIGFsaWduKDE2
KTsKLQotICAgIC8vIExvYWQgdGhlIGNhbGxlZSBDb2RlQmxvY2sqIGludG8gZWF4Ci0gICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoSlNGdW5jdGlvbiwgbV9ib2R5KSwgWDg2OjplY3gsIFg4Njo6
ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChGdW5jdGlvbkJvZHlOb2RlLCBtX2Nv
ZGUpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6
OmVheCk7Ci0gICAgSm1wU3JjIGhhc0NvZGVCbG9jazMgPSBfXyBqbmUoKTsKLSAgICBfXyBwb3Bs
X3IoWDg2OjplYngpOwotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVt
aXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMg
Y2FsbEpTRnVuY3Rpb24zID0gX18gY2FsbCgpOwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2Ojpl
Y3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2
OjplYngpOwotICAgIF9fIGxpbmsoaGFzQ29kZUJsb2NrMywgX18gbGFiZWwoKSk7Ci0KLSAgICAv
LyBDaGVjayBhcmdDb3VudCBtYXRjaGVzIGNhbGxlZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4
Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29kZUJsb2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgp
OwotICAgIEptcFNyYyBhcml0eUNoZWNrT2theTMgPSBfXyBqZSgpOwotICAgIF9fIHBvcGxfcihY
ODY6OmVieCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVieCwgNCk7Ci0gICAgZW1pdFB1dENU
SUFyZyhYODY6OmVheCwgMTIpOwotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwot
ICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBK
bXBTcmMgY2FsbEFyaXR5Q2hlY2szID0gX18gY2FsbCgpOwotICAgIF9fIG1vdmxfcnIoWDg2Ojpl
ZHgsIFg4Njo6ZWRpKTsKLSAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0
R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKLSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBf
XyBsaW5rKGFyaXR5Q2hlY2tPa2F5MywgX18gbGFiZWwoKSk7Ci0KLSAgICBjb21waWxlT3BDYWxs
SW5pdGlhbGl6ZUNhbGxGcmFtZSgpOwotCi0gICAgLy8gbG9hZCBjdGlDb2RlIGZyb20gdGhlIG5l
dyBjb2RlQmxvY2suCi0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoQ29kZUJsb2NrLCBjdGlD
b2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLQotICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLQot
ICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1
cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotCi0g
ICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgYXJyYXlfZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwotICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBhcnJheV9mYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci0gICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFycmF5X2ZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKLSAg
ICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3RyaW5nX2ZhaWx1cmVDYXNlczEsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWls
KSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN0cmluZ19mYWlsdXJlQ2FzZXMyLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zdHJp
bmdfZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdHJpbmdfZmFpbHVyZUNh
c2VzMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlf
aWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbEFyaXR5
Q2hlY2sxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxf
YXJpdHlDaGVjaykpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsQXJpdHlDaGVj
azIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9hcml0
eUNoZWNrKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxBcml0eUNoZWNrMywg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2FyaXR5Q2hl
Y2spKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbEpTRnVuY3Rpb24xLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikp
OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsSlNGdW5jdGlvbjIsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7Ci0g
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxKU0Z1bmN0aW9uMywgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKLSAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbERvbnRMYXp5TGlua0NhbGwsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfdm1fZG9udExhenlMaW5rQ2FsbCkpOwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsTGF6eUxpbmtDYWxsLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX3ZtX2xhenlMaW5rQ2FsbCkpOwotCi0gICAgbV9p
bnRlcnByZXRlci0+bV9jdGlBcnJheUxlbmd0aFRyYW1wb2xpbmUgPSBjb2RlOwotICAgIG1faW50
ZXJwcmV0ZXItPm1fY3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IFg4NkFzc2VtYmxlcjo6Z2V0
UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBzdHJpbmdMZW5ndGhCZWdpbik7Ci0gICAgbV9pbnRlcnBy
ZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbFByZUxpbmsgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRl
ZEFkZHJlc3MoY29kZSwgdmlydHVhbENhbGxQcmVMaW5rQmVnaW4pOwotICAgIG1faW50ZXJwcmV0
ZXItPm1fY3RpVmlydHVhbENhbGxMaW5rID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRy
ZXNzKGNvZGUsIHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKLSAgICBtX2ludGVycHJldGVyLT5tX2N0
aVZpcnR1YWxDYWxsID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZp
cnR1YWxDYWxsQmVnaW4pOwotfQotCi12b2lkIEpJVDo6ZnJlZUNUSU1hY2hpbmVUcmFtcG9saW5l
cyhJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIpCi17Ci0gICAgV1RGOjpmYXN0RnJlZUV4ZWN1dGFi
bGUoaW50ZXJwcmV0ZXItPm1fY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lKTsKLX0KLQotdm9pZCBK
SVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQotewotICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5B
ZGRyZXNzKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25j
ZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMuCi0gICAgLy8gU2hv
dWxkIHByb2JhYmx5IGdvIHRvIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2ZhaWwsIGJ1
dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3RpbmcgcmlnaHQgbm93LgotICAgIGN0
aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotCi0g
ICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBm
cm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4KLSAgICBYODZBc3Nl
bWJsZXI6OnJlcGF0Y2hEaXNwbGFjZW1lbnQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5m
by5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCwg
Y2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBh
dGNoSW1tZWRpYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2lu
KSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlLCByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90PihzdHJ1Y3R1cmUpKTsKLX0KLQotdm9pZCBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zm
c2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQotewotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZv
ID0gY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICAKLSAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8g
Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBJ
bnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFu
eXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRl
cjo6Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7Ci0KLSAgICAvLyBSZXBhdGNoIHRoZSBvZmZz
ZXQgaW50byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0aGUg
U3RydWN0dXJlIHRvIGxvb2sgZm9yLgotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3BsYWNl
bWVudChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBh
dGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXplb2Yo
SlNWYWx1ZSopKTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5
SWRTdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOwotfQot
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKHZvaWQqIHJldHVy
bkFkZHJlc3MpCi17Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJl
cGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9n
ZW5lcmljLgotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2Fy
cmF5X2ZhaWwpKTsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBhcnJheQotICAgIF9fIGNtcGxf
aTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlW
cHRyKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0K
LSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFn
ZQotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6
ZWF4LCBYODY6OmVjeCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0KLSAgICBfXyBjbXBsX2kzMnIoSlNJ
bW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCwgWDg2OjplY3gpOwotICAgIEptcFNyYyBmYWlsdXJl
Q2FzZXMyID0gX18gamEoKTsKLQotICAgIF9fIGFkZGxfcnIoWDg2OjplY3gsIFg4Njo6ZWN4KTsK
LSAgICBfXyBhZGRsX2k4cigxLCBYODY6OmVjeCk7Ci0gICAgX18gbW92bF9ycihYODY6OmVjeCwg
WDg2OjplYXgpOwotICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBj
b2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZv
cm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNs
b3cgY2FzZSByb3V0aW5lLgotICAgIHZvaWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJ
ZFNsb3dDYXNlQ2FsbDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2Vz
MSwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVD
YXNlczIsIHNsb3dDYXNlQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0
byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9y
ZSB0byBkZXN0IGZvciB1cy4KLSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlk
UHJvcGVydHlNYXBPZmZzZXQ7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7Ci0KLSAgICAvLyBUcmFjayB0
aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIu
Ci0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5l
ID0gY29kZTsKLQotICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzb3cgY2FzZSBi
YWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBpbnRwdHJfdCBq
bXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2lu
KSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJs
ZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoUmVnaXN0ZXJJRCB2YXJpYWJsZU9iamVj
dCwgaW50IGluZGV4LCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU1ZhcmlhYmxlT2JqZWN0LCBkKSwgdmFyaWFibGVPYmplY3QsIGRzdCk7Ci0gICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERh
dGEsIHJlZ2lzdGVycyksIGRzdCwgZHN0KTsKLSAgICBfXyBtb3ZsX21yKGluZGV4ICogc2l6ZW9m
KFJlZ2lzdGVyKSwgZHN0LCBkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dFZhcmlhYmxlT2Jq
ZWN0UmVnaXN0ZXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgdmFyaWFibGVPYmplY3QsIGlu
dCBpbmRleCkKLXsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU1ZhcmlhYmxlT2JqZWN0
LCBkKSwgdmFyaWFibGVPYmplY3QsIHZhcmlhYmxlT2JqZWN0KTsKLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU1ZhcmlhYmxlT2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0RGF0YSwgcmVnaXN0
ZXJzKSwgdmFyaWFibGVPYmplY3QsIHZhcmlhYmxlT2JqZWN0KTsKLSAgICBfXyBtb3ZsX3JtKHNy
YywgaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpLCB2YXJpYWJsZU9iamVjdCk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IGppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMzg5ODQpCShmcm9tIGppdC9KSVQuY3BwOjM4OTg0KQorKysgaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpJVC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJKU0FycmF5
LmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisj
aW5jbHVkZSAiUmVzdWx0VHlwZS5oIgorI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorCisjaWZu
ZGVmIE5ERUJVRworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IHN0ZDsKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBQTEFURk9STShNQUMpCisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc1NTRTJQcmVzZW50KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsgLy8gQWxsIFg4
NiBNYWNzIGFyZSBndWFyYW50ZWVkIHRvIHN1cHBvcnQgYXQgbGVhc3QgU1NFMgorfQorCisjZWxz
ZQorCitzdGF0aWMgYm9vbCBpc1NTRTJQcmVzZW50KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50
IFNTRTJGZWF0dXJlQml0ID0gMSA8PCAyNjsKKyAgICBzdHJ1Y3QgU1NFMkNoZWNrIHsKKyAgICAg
ICAgU1NFMkNoZWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZsYWdzOworI2lmIENP
TVBJTEVSKE1TVkMpCisgICAgICAgICAgICBfYXNtIHsKKyAgICAgICAgICAgICAgICBtb3YgZWF4
LCAxIC8vIGNwdWlkIGZ1bmN0aW9uIDEgZ2l2ZXMgdXMgdGhlIHN0YW5kYXJkIGZlYXR1cmUgc2V0
CisgICAgICAgICAgICAgICAgY3B1aWQ7CisgICAgICAgICAgICAgICAgbW92IGZsYWdzLCBlZHg7
CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgZmxhZ3MgPSAwOworICAgICAgICAg
ICAgLy8gRklYTUU6IEFkZCBHQ0MgY29kZSB0byBkbyBhYm92ZSBhc20KKyNlbmRpZgorICAgICAg
ICAgICAgcHJlc2VudCA9IChmbGFncyAmIFNTRTJGZWF0dXJlQml0KSAhPSAwOworICAgICAgICB9
CisgICAgICAgIGJvb2wgcHJlc2VudDsKKyAgICB9OworICAgIHN0YXRpYyBTU0UyQ2hlY2sgY2hl
Y2s7CisgICAgcmV0dXJuIGNoZWNrLnByZXNlbnQ7Cit9CisKKyNlbmRpZgorCitDT01QSUxFX0FT
U0VSVChDVElfQVJHU19jb2RlID09IDB4QywgQ1RJX0FSR1NfY29kZV9pc19DKTsKK0NPTVBJTEVf
QVNTRVJUKENUSV9BUkdTX2NhbGxGcmFtZSA9PSAweEUsIENUSV9BUkdTX2NhbGxGcmFtZV9pc19F
KTsKKworI2lmIENPTVBJTEVSKEdDQykgJiYgUExBVEZPUk0oWDg2KQorCisjaWYgUExBVEZPUk0o
REFSV0lOKQorI2RlZmluZSBTWU1CT0xfU1RSSU5HKG5hbWUpICJfIiAjbmFtZQorI2Vsc2UKKyNk
ZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAjbmFtZQorI2VuZGlmCisKK2FzbSgKKyIuZ2xvYmwg
IiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVHJh
bXBvbGluZSkgIjoiICJcbiIKKyAgICAicHVzaGwgJWVzaSIgIlxuIgorICAgICJwdXNobCAlZWRp
IiAiXG4iCisgICAgInB1c2hsICVlYngiICJcbiIKKyAgICAic3VibCAkMHgyMCwgJWVzcCIgIlxu
IgorICAgICJtb3ZsICQ1MTIsICVlc2kiICJcbiIKKyAgICAibW92bCAweDM4KCVlc3ApLCAlZWRp
IiAiXG4iIC8vIE94MzggPSAweDBFICogNCwgMHgwRSA9IENUSV9BUkdTX2NhbGxGcmFtZSAoc2Vl
IGFzc2VydGlvbiBhYm92ZSkKKyAgICAiY2FsbCAqMHgzMCglZXNwKSIgIlxuIiAvLyBPeDMwID0g
MHgwQyAqIDQsIDB4MEMgPSBDVElfQVJHU19jb2RlIChzZWUgYXNzZXJ0aW9uIGFib3ZlKQorICAg
ICJhZGRsICQweDIwLCAlZXNwIiAiXG4iCisgICAgInBvcGwgJWVieCIgIlxuIgorICAgICJwb3Bs
ICVlZGkiICJcbiIKKyAgICAicG9wbCAlZXNpIiAiXG4iCisgICAgInJldCIgIlxuIgorKTsKKwor
YXNtKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIK
K1NZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAiXG4iCisjaWYgVVNFKENU
SV9BUkdVTUVOVCkKKyNpZiBVU0UoRkFTVF9DQUxMX0NUSV9BUkdVTUVOVCkKKyAgICAibW92bCAl
ZXNwLCAlZWN4IiAiXG4iCisjZWxzZQorICAgICJtb3ZsICVlc3AsIDAoJWVzcCkiICJcbiIKKyNl
bmRpZgorICAgICJjYWxsICIgU1lNQk9MX1NUUklORyhfWk4zSlNDMTFJbnRlcnByZXRlcjEyY3Rp
X3ZtX3Rocm93RVBQdikgIlxuIgorI2Vsc2UKKyAgICAiY2FsbCAiIFNZTUJPTF9TVFJJTkcoX1pO
M0pTQzExSW50ZXJwcmV0ZXIxMmN0aV92bV90aHJvd0VQdnopICJcbiIKKyNlbmRpZgorICAgICJh
ZGRsICQweDIwLCAlZXNwIiAiXG4iCisgICAgInBvcGwgJWVieCIgIlxuIgorICAgICJwb3BsICVl
ZGkiICJcbiIKKyAgICAicG9wbCAlZXNpIiAiXG4iCisgICAgInJldCIgIlxuIgorKTsKKyAgICAK
KyNlbGlmIENPTVBJTEVSKE1TVkMpCisKK2V4dGVybiAiQyIgeworICAgIAorICAgIF9fZGVjbHNw
ZWMobmFrZWQpIEpTVmFsdWUqIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgUmVnaXN0ZXJGaWxl
KiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxE
YXRhKikKKyAgICB7CisgICAgICAgIF9fYXNtIHsKKyAgICAgICAgICAgIHB1c2ggZXNpOworICAg
ICAgICAgICAgcHVzaCBlZGk7CisgICAgICAgICAgICBwdXNoIGVieDsKKyAgICAgICAgICAgIHN1
YiBlc3AsIDB4MjA7CisgICAgICAgICAgICBtb3YgZXNpLCA1MTI7CisgICAgICAgICAgICBtb3Yg
ZWN4LCBlc3A7CisgICAgICAgICAgICBtb3YgZWRpLCBbZXNwICsgMHgzOF07CisgICAgICAgICAg
ICBjYWxsIFtlc3AgKyAweDMwXTsgLy8gT3gzMCA9IDB4MEMgKiA0LCAweDBDID0gQ1RJX0FSR1Nf
Y29kZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkKKyAgICAgICAgICAgIGFkZCBlc3AsIDB4MjA7Cisg
ICAgICAgICAgICBwb3AgZWJ4OworICAgICAgICAgICAgcG9wIGVkaTsKKyAgICAgICAgICAgIHBv
cCBlc2k7CisgICAgICAgICAgICByZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgX19k
ZWNsc3BlYyhuYWtlZCkgdm9pZCBjdGlWTVRocm93VHJhbXBvbGluZSgpCisgICAgeworICAgICAg
ICBfX2FzbSB7CisgICAgICAgICAgICBtb3YgZWN4LCBlc3A7CisgICAgICAgICAgICBjYWxsIEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV92bV90aHJvdzsKKyAgICAgICAgICAgIGFkZCBlc3AsIDB4MjA7
CisgICAgICAgICAgICBwb3AgZWJ4OworICAgICAgICAgICAgcG9wIGVkaTsKKyAgICAgICAgICAg
IHBvcCBlc2k7CisgICAgICAgICAgICByZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCit9CisK
KyNlbmRpZgorCit2b2lkIGN0aVNldFJldHVybkFkZHJlc3Modm9pZCoqIHdoZXJlLCB2b2lkKiB3
aGF0KQoreworICAgICp3aGVyZSA9IHdoYXQ7Cit9CisKK3ZvaWQgY3RpUmVwYXRjaENhbGxCeVJl
dHVybkFkZHJlc3Modm9pZCogd2hlcmUsIHZvaWQqIHdoYXQpCit7CisgICAgKHN0YXRpY19jYXN0
PHZvaWQqKj4od2hlcmUpKVstMV0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4od2hhdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4od2hl
cmUpKTsKK30KKworI2lmbmRlZiBOREVCVUcKKwordm9pZCBKSVQ6OnByaW50Qnl0ZWNvZGVPcGVy
YW5kVHlwZXModW5zaWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMikKK3sKKyAgICBjaGFyIHdoaWNo
MSA9ICcqJzsKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNy
YzEpKSB7CisgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYzEpOworICAgICAgICB3aGljaDEgPSAKKyAgICAgICAgICAgIEpTSW1tZWRpYXRlOjppc0lt
bWVkaWF0ZSh2YWx1ZSkgPworICAgICAgICAgICAgICAgIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIo
dmFsdWUpID8gJ2knIDoKKyAgICAgICAgICAgICAgICBKU0ltbWVkaWF0ZTo6aXNCb29sZWFuKHZh
bHVlKSA/ICdiJyA6CisgICAgICAgICAgICAgICAgdmFsdWUtPmlzVW5kZWZpbmVkKCkgPyAndScg
OgorICAgICAgICAgICAgICAgIHZhbHVlLT5pc051bGwoKSA/ICduJyA6ICc/JykKKyAgICAgICAg
ICAgICAgICA6CisgICAgICAgICAgICAodmFsdWUtPmlzU3RyaW5nKCkgPyAncycgOgorICAgICAg
ICAgICAgdmFsdWUtPmlzT2JqZWN0KCkgPyAnbycgOgorICAgICAgICAgICAgJ2snKTsKKyAgICB9
CisgICAgY2hhciB3aGljaDIgPSAnKic7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMyKSkgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMyKTsKKyAgICAgICAgd2hpY2gyID0gCisgICAgICAgICAgICBK
U0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodmFsdWUpID8KKyAgICAgICAgICAgICAgICAoSlNJbW1l
ZGlhdGU6OmlzTnVtYmVyKHZhbHVlKSA/ICdpJyA6CisgICAgICAgICAgICAgICAgSlNJbW1lZGlh
dGU6OmlzQm9vbGVhbih2YWx1ZSkgPyAnYicgOgorICAgICAgICAgICAgICAgIHZhbHVlLT5pc1Vu
ZGVmaW5lZCgpID8gJ3UnIDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+aXNOdWxsKCkgPyAnbicg
OiAnPycpCisgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgKHZhbHVlLT5pc1N0cmluZygp
ID8gJ3MnIDoKKyAgICAgICAgICAgIHZhbHVlLT5pc09iamVjdCgpID8gJ28nIDoKKyAgICAgICAg
ICAgICdrJyk7CisgICAgfQorICAgIGlmICgod2hpY2gxICE9ICcqJykgfCAod2hpY2gyICE9ICcq
JykpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVHlwZXMgJWMgJWNcbiIsIHdoaWNoMSwgd2hp
Y2gyKTsKK30KKworI2VuZGlmCisKK0pJVDo6SklUKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2ludGVycHJldGVyKGdsb2JhbERhdGEtPmlu
dGVycHJldGVyKQorICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCisgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucy5zaXplKCkgOiAwKQorICAgICwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mbyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNp
emUoKSA6IDApCisgICAgLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvKGNvZGVC
bG9jayA/IGNvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCkgOiAwKQorICAgICwgbV9sYXN0
UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQor
ICAgICwgbV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKDApCit7Cit9CisKKyNkZWZpbmUgQ1RJX0NPTVBJ
TEVfQklOQVJZX09QKG5hbWUpIFwKKyAgICBjYXNlIG5hbWU6IHsgXAorICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAw
LCBYODY6OmVjeCk7IFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCisgICAgICAg
IGkgKz0gNDsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKworI2RlZmluZSBDVElfQ09NUElM
RV9VTkFSWV9PUChuYW1lKSBcCisgICAgY2FzZSBuYW1lOiB7IFwKKyAgICAgICAgZW1pdFB1dENU
SUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwg
WDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfIyNu
YW1lKTsgXAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOyBcCisgICAgICAgIGkgKz0gMzsgXAorICAgICAgICBicmVhazsgXAorICAg
IH0KKwordm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgaSwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit7CisgICAgYm9vbCBu
ZWdhdGVkID0gKHR5cGUgPT0gT3BOU3RyaWN0RXEpOworCisgICAgdW5zaWduZWQgZHN0ID0gaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBY
ODY6OmVkeCwgaSk7CisKKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBY
ODY6OmVheCk7CisgICAgSm1wU3JjIGZpcnN0Tm90SW1tZWRpYXRlID0gX18gamUoKTsKKyAgICBf
XyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVkeCk7CisgICAgSm1wU3Jj
IHNlY29uZE5vdEltbWVkaWF0ZSA9IF9fIGplKCk7CisKKyAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4
LCBYODY6OmVheCk7CisgICAgaWYgKG5lZ2F0ZWQpCisgICAgICAgIF9fIHNldG5lX3IoWDg2Ojpl
YXgpOworICAgIGVsc2UKKyAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKKyAgICBfXyBtb3Z6
YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIAorICAgIEptcFNyYyBib3RoV2VyZUltbWVkaWF0ZXMgPSBf
XyBqbXAoKTsKKworICAgIF9fIGxpbmsoZmlyc3ROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwor
CisgICAgLy8gY2hlY2sgdGhhdCBlZHggaXMgaW1tZWRpYXRlIGJ1dCBub3QgdGhlIHplcm8gaW1t
ZWRpYXRlCisgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplZHgp
OworICAgIF9fIHNldHpfcihYODY6OmVjeCk7CisgICAgX18gbW92emJsX3JyKFg4Njo6ZWN4LCBY
ODY6OmVjeCk7IC8vIGVjeCBpcyBub3cgMSBpZiBlZHggd2FzIG5vbmltbWVkaWF0ZQorICAgIF9f
IGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6
ZWR4KTsKKyAgICBfXyBzZXRlX3IoWDg2OjplZHgpOworICAgIF9fIG1vdnpibF9ycihYODY6OmVk
eCwgWDg2OjplZHgpOyAvLyBlZHggaXMgbm93IDEgaWYgZWR4IHdhcyB0aGUgMCBpbW1lZGlhdGUK
KyAgICBfXyBvcmxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKKworICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7CisKKyAgICBfXyBtb3ZsX2kzMnIoYXNJ
bnRlZ2VyKGpzQm9vbGVhbihuZWdhdGVkKSksIFg4Njo6ZWF4KTsKKworICAgIEptcFNyYyBmaXJz
dFdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOworCisgICAgX18gbGluayhzZWNvbmROb3RJbW1l
ZGlhdGUsIF9fIGxhYmVsKCkpOworICAgIC8vIGNoZWNrIHRoYXQgZWF4IGlzIG5vdCB0aGUgemVy
byBpbW1lZGlhdGUgKHdlIGtub3cgaXQgbXVzdCBiZSBpbW1lZGlhdGUpCisgICAgX18gY21wbF9p
MzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwor
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsKKworICAg
IF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOwor
CisgICAgX18gbGluayhib3RoV2VyZUltbWVkaWF0ZXMsIF9fIGxhYmVsKCkpOworICAgIF9fIGxp
bmsoZmlyc3RXYXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworCisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQoreworICAgIF9fIHN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKKyAg
ICBKbXBTcmMgc2tpcFRpbWVvdXQgPSBfXyBqbmUoKTsKKyAgICBlbWl0Q1RJQ2FsbChieXRlY29k
ZUluZGV4LCBJbnRlcnByZXRlcjo6Y3RpX3RpbWVvdXRfY2hlY2spOworCisgICAgZW1pdEdldENU
SVBhcmFtKENUSV9BUkdTX2dsb2JhbERhdGEsIFg4Njo6ZWN4KTsKKyAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU0dsb2JhbERhdGEsIGludGVycHJldGVyKSwgWDg2OjplY3gsIFg4Njo6ZWN4
KTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChJbnRlcnByZXRlciwgbV90aWNrc1VudGls
TmV4dFRpbWVvdXRDaGVjayksIFg4Njo6ZWN4LCBYODY6OmVzaSk7CisgICAgX18gbGluayhza2lw
VGltZW91dCwgX18gbGFiZWwoKSk7CisKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9
CisKKy8qCisgIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGlz
IGNhbm9uaWNhbCAtIHZhbHVlcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUgc2hvdWxk
IG5vdCBiZSBzdG9yZWQgaW4gYSBKU051bWJlckNlbGwuCisgIAorICBJbiB0aGUgY29tbW9uIGNh
c2UsIHRoZSBkb3VibGUgdmFsdWUgZnJvbSAneG1tU291cmNlJyBpcyB3cml0dGVuIHRvIHRoZSBy
ZXVzYWJsZSBKU051bWJlckNlbGwgcG9pbnRlZCB0byBieSAnanNOdW1iZXJDZWxsJywgdGhlbiAn
anNOdW1iZXJDZWxsJworICBpcyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgU0YgUmVnaXN0ZXIgJ2Rz
dCcsIGFuZCB0aGVuIGEganVtcCBpcyBwbGFudGVkIChzdG9yZWQgaW50byAqd3JvdGVKU051bWJl
ckNlbGwpLgorICAKKyAgSG93ZXZlciBpZiB0aGUgdmFsdWUgZnJvbSB4bW1Tb3VyY2UgaXMgcmVw
cmVzZW50YWJsZSBhcyBhIEpTSW1tZWRpYXRlLCB0aGVuIHRoZSBKU0ltbWVkaWF0ZSB2YWx1ZSB3
aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCwgYW5kIGZsb3cKKyAgY29udHJvbCB3aWxsIGZh
bGwgdGhyb3VnaCBmcm9tIHRoZSBjb2RlIHBsYW50ZWQuCisqLwordm9pZCBKSVQ6OnB1dERvdWJs
ZVJlc3VsdFRvSlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OlhNTVJlZ2lzdGVySUQgeG1t
U291cmNlLCBYODY6OlJlZ2lzdGVySUQganNOdW1iZXJDZWxsLCB1bnNpZ25lZCBkc3QsIEptcFNy
Yyogd3JvdGVKU051bWJlckNlbGwsICBYODY6OlhNTVJlZ2lzdGVySUQgdGVtcFhtbSwgWDg2OjpS
ZWdpc3RlcklEIHRlbXBSZWcxLCBYODY6OlJlZ2lzdGVySUQgdGVtcFJlZzIpCit7CisgICAgLy8g
Y29udmVydCAoZG91YmxlIC0+IEpTSW1tZWRpYXRlIC0+IGRvdWJsZSksIGFuZCBjaGVjayBpZiB0
aGUgdmFsdWUgaXMgdW5jaGFuZ2VkIC0gaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcmVwcmVz
ZW50YWJsZSBhcyBhIEpTSW1tZWRpYXRlLgorICAgIF9fIGN2dHRzZDJzaV9ycih4bW1Tb3VyY2Us
IHRlbXBSZWcxKTsKKyAgICBfXyBhZGRsX3JyKHRlbXBSZWcxLCB0ZW1wUmVnMSk7CisgICAgX18g
c2FybF9pOHIoMSwgdGVtcFJlZzEpOworICAgIF9fIGN2dHNpMnNkX3JyKHRlbXBSZWcxLCB0ZW1w
WG1tKTsKKyAgICAvLyBDb21wYXJlICYgYnJhbmNoIGlmIGltbWVkaWF0ZS4gCisgICAgX18gdWNv
bWlzX3JyKHRlbXBYbW0sIHhtbVNvdXJjZSk7CisgICAgSm1wU3JjIHJlc3VsdElzSW1tID0gX18g
amUoKTsKKyAgICBKbXBEc3QgcmVzdWx0TG9va2VkTGlrZUltbUJ1dEFjdHVhbGx5SXNudCA9IF9f
IGxhYmVsKCk7CisgICAgCisgICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byB0aGUgSlNOdW1iZXJD
ZWxsIGFuZCBqdW1wLgorICAgIF9fIG1vdnNkX3JtKHhtbVNvdXJjZSwgRklFTERfT0ZGU0VUKEpT
TnVtYmVyQ2VsbCwgbV92YWx1ZSksIGpzTnVtYmVyQ2VsbCk7CisgICAgaWYgKGpzTnVtYmVyQ2Vs
bCAhPSBYODY6OmVheCkKKyAgICAgICAgX18gbW92bF9ycihqc051bWJlckNlbGwsIFg4Njo6ZWF4
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgKndyb3RlSlNOdW1iZXJD
ZWxsID0gX18gam1wKCk7CisKKyAgICBfXyBsaW5rKHJlc3VsdElzSW1tLCBfXyBsYWJlbCgpKTsK
KyAgICAvLyB2YWx1ZSA9PSAoZG91YmxlKShKU0ltbWVkaWF0ZSl2YWx1ZS4uLiBvciBhdCBsZWFz
dCwgaXQgbG9va3MgdGhhdCB3YXkuLi4KKyAgICAvLyB1Y29taSB3aWxsIHJlcG9ydCB0aGF0ICgw
ID09IC0wKSwgYW5kIHdpbGwgcmVwb3J0IHRydWUgaWYgZWl0aGVyIGlucHV0IGluIE5hTiAocmVz
dWx0IGlzIHVub3JkZXJlZCkuCisgICAgX18gbGluayhfXyBqcCgpLCByZXN1bHRMb29rZWRMaWtl
SW1tQnV0QWN0dWFsbHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIGEgTmFOCisgICAgX18gcGV4dHJ3
X2lycigzLCB4bW1Tb3VyY2UsIHRlbXBSZWcyKTsKKyAgICBfXyBjbXBsX2kzMnIoMHg4MDAwLCB0
ZW1wUmVnMik7CisgICAgX18gbGluayhfXyBqZSgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0
dWFsbHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIC0wCisgICAgLy8gWWVzIGl0IHJlYWxseSByZWFs
bHkgcmVhbGx5IGlzIHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZS4KKyAgICBlbWl0RmFz
dEFyaXRoSW50VG9JbW1Ob0NoZWNrKHRlbXBSZWcxKTsKKyAgICBpZiAodGVtcFJlZzEgIT0gWDg2
OjplYXgpCisgICAgICAgIF9fIG1vdmxfcnIodGVtcFJlZzEsIFg4Njo6ZWF4KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJp
dGhPcChPcGNvZGVJRCBvcGNvZGVJRCwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNp
Z25lZCBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMsIHVuc2lnbmVkIGkpCit7CisgICAgU3RydWN0
dXJlKiBudW1iZXJTdHJ1Y3R1cmUgPSBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVyZS5nZXQo
KTsKKyAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMTsKKyAgICBKbXBTcmMgd2FzSlNOdW1iZXJD
ZWxsMWI7CisgICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDI7CisgICAgSm1wU3JjIHdhc0pTTnVt
YmVyQ2VsbDJiOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgs
IHNyYzIsIFg4Njo6ZWR4LCBpKTsKKworICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxl
KCkgJiYgaXNTU0UyUHJlc2VudCgpKSB7CisgICAgICAgIEFTU0VSVCh0eXBlcy5zZWNvbmQoKS5t
aWdodEJlTnVtYmVyKCkpOworCisgICAgICAgIC8vIENoZWNrIG9wMiBpcyBhIG51bWJlcgorICAg
ICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2Ojpl
ZHgpOworICAgICAgICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7CisgICAgICAgIGlmICghdHlw
ZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVkeCwgaSwgc3JjMik7CisgICAgICAgICAgICBfXyBj
bXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklF
TERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCk7CisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gKDEpIEluIHRoaXMgY2FzZSBzcmMyIGlzIGEgcmV1c2FibGUgbnVtYmVy
IGNlbGwuCisgICAgICAgIC8vICAgICBTbG93IGNhc2UgaWYgc3JjMSBpcyBub3QgYSBudW1iZXIg
dHlwZS4KKyAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVn
ZXIsIFg4Njo6ZWF4KTsKKyAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpuZSgpOworICAgICAg
ICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3JjMSk7CisgICAgICAg
ICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0
dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbHNv
IGEgbnVtYmVyIGNlbGwKKyAgICAgICAgX18gbW92c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVy
Q2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4LCBYODY6OnhtbTApOworICAgICAgICBKbXBTcmMgbG9h
ZGVkRG91YmxlID0gX18gam1wKCk7CisgICAgICAgIC8vICgxYikgaWYgd2UgZ2V0IGhlcmUsIHNy
YzEgaXMgYW4gaW1tZWRpYXRlCisgICAgICAgIF9fIGxpbmsob3AxaW1tLCBfXyBsYWJlbCgpKTsK
KyAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWF4KTsKKyAgICAgICAgX18gY3Z0
c2kyc2RfcnIoWDg2OjplYXgsIFg4Njo6eG1tMCk7CisgICAgICAgIC8vICgxYykgCisgICAgICAg
IF9fIGxpbmsobG9hZGVkRG91YmxlLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgaWYgKG9wY29kZUlE
ID09IG9wX2FkZCkKKyAgICAgICAgICAgIF9fIGFkZHNkX21yKEZJRUxEX09GRlNFVChKU051bWJl
ckNlbGwsIG1fdmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0wKTsKKyAgICAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3Bfc3ViKQorICAgICAgICAgICAgX18gc3Vic2RfbXIoRklFTERfT0ZGU0VU
KEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTApOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAgICAg
ICAgX18gbXVsc2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6
ZWR4LCBYODY6OnhtbTApOworICAgICAgICB9CisKKyAgICAgICAgcHV0RG91YmxlUmVzdWx0VG9K
U051bWJlckNlbGxPckpTSW1tZWRpYXRlKFg4Njo6eG1tMCwgWDg2OjplZHgsIGRzdCwgJndhc0pT
TnVtYmVyQ2VsbDIsIFg4Njo6eG1tMSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKKyAgICAgICAgd2Fz
SlNOdW1iZXJDZWxsMmIgPSBfXyBqbXAoKTsKKworICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVz
IGNhc2VzIHdoZXJlIHNyYzIgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KKyAgICAgICAgLy8gICAg
IFR3byBzbG93IGNhc2VzIC0gZWl0aGVyIHNyYzEgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUg
c3VidHJhY3Qgb3ZlcmZsb3dzLgorICAgICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAg
fSBlbHNlIGlmICh0eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkp
IHsKKyAgICAgICAgQVNTRVJUKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpKTsKKworICAg
ICAgICAvLyBDaGVjayBvcDEgaXMgYSBudW1iZXIKKyAgICAgICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKKyAgICAgICAgSm1wU3JjIG9w
MWltbSA9IF9fIGpuZSgpOworICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlz
TnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6
OmVheCwgaSwgc3JjMSk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmUpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gKDEpIEluIHRo
aXMgY2FzZSBzcmMxIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCisgICAgICAgIC8vICAgICBT
bG93IGNhc2UgaWYgc3JjMiBpcyBub3QgYSBudW1iZXIgdHlwZS4KKyAgICAgICAgX18gdGVzdGxf
aTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKKyAgICAgICAg
Sm1wU3JjIG9wMmltbSA9IF9fIGpuZSgpOworICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRl
ZmluaXRlbHlJc051bWJlcigpKSB7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoWDg2OjplZHgsIGksIHNyYzIpOworICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0Nl
bGwsIG1fc3RydWN0dXJlKSwgWDg2OjplZHgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
ICgxYSkgaWYgd2UgZ2V0IGhlcmUsIHNyYzIgaXMgYWxzbyBhIG51bWJlciBjZWxsCisgICAgICAg
IF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVk
eCwgWDg2Ojp4bW0xKTsKKyAgICAgICAgSm1wU3JjIGxvYWRlZERvdWJsZSA9IF9fIGptcCgpOwor
ICAgICAgICAvLyAoMWIpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFuIGltbWVkaWF0ZQorICAg
ICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7CisgICAgICAgIGVtaXRGYXN0QXJpdGhJ
bW1Ub0ludChYODY6OmVkeCk7CisgICAgICAgIF9fIGN2dHNpMnNkX3JyKFg4Njo6ZWR4LCBYODY6
OnhtbTEpOworICAgICAgICAvLyAoMWMpIAorICAgICAgICBfXyBsaW5rKGxvYWRlZERvdWJsZSwg
X18gbGFiZWwoKSk7CisgICAgICAgIF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNl
bGwsIG1fdmFsdWUpLCBYODY6OmVheCwgWDg2Ojp4bW0wKTsKKyAgICAgICAgaWYgKG9wY29kZUlE
ID09IG9wX2FkZCkKKyAgICAgICAgICAgIF9fIGFkZHNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0w
KTsKKyAgICAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKQorICAgICAgICAgICAgX18g
c3Vic2RfcnIoWDg2Ojp4bW0xLCBYODY6OnhtbTApOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAgICAgICAgX18gbXVsc2RfcnIo
WDg2Ojp4bW0xLCBYODY6OnhtbTApOworICAgICAgICB9CisgICAgICAgIF9fIG1vdnNkX3JtKFg4
Njo6eG1tMCwgRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgIHB1dERvdWJs
ZVJlc3VsdFRvSlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OnhtbTAsIFg4Njo6ZWF4LCBk
c3QsICZ3YXNKU051bWJlckNlbGwxLCBYODY6OnhtbTEsIFg4Njo6ZWN4LCBYODY6OmVkeCk7Cisg
ICAgICAgIHdhc0pTTnVtYmVyQ2VsbDFiID0gX18gam1wKCk7CisKKyAgICAgICAgLy8gKDIpIFRo
aXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBzcmMxIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCisgICAg
ICAgIC8vICAgICBUd28gc2xvdyBjYXNlcyAtIGVpdGhlciBzcmMyIGlzbid0IGFuIGltbWVkaWF0
ZSwgb3IgdGhlIHN1YnRyYWN0IG92ZXJmbG93cy4KKyAgICAgICAgX18gbGluayhvcDFpbW0sIF9f
IGxhYmVsKCkpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgs
IGkpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4
Njo6ZWF4LCBYODY6OmVkeCwgaSk7CisKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKSB7Cisg
ICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7CisgICAgICAgIF9f
IGFkZGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOworICAgIH0gZWxzZSAgaWYgKG9wY29kZUlEID09
IG9wX3N1YikgeworICAgICAgICBfXyBzdWJsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAg
ICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKKyAgICAgICAgLy8gY29udmVydCBl
YXggJiBlZHggZnJvbSBKU0ltbWVkaWF0ZXMgdG8gaW50cywgYW5kIGNoZWNrIGlmIGVpdGhlciBh
cmUgemVybworICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOworICAgICAg
ICBKbXBTcmMgb3AxWmVybyA9IGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8o
WDg2OjplYXgpOworICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVkeCwgWDg2OjplZHgpOworICAg
ICAgICBKbXBTcmMgb3AyTm9uWmVybyA9IF9fIGpuZSgpOworICAgICAgICBfXyBsaW5rKG9wMVpl
cm8sIF9fIGxhYmVsKCkpOworICAgICAgICAvLyBpZiBlaXRoZXIgaW5wdXQgaXMgemVybywgYWRk
IHRoZSB0d28gdG9nZXRoZXIsIGFuZCBjaGVjayBpZiB0aGUgcmVzdWx0IGlzIDwgMC4KKyAgICAg
ICAgLy8gSWYgaXQgaXMsIHdlIGhhdmUgYSBwcm9ibGVtIChOIDwgMCksIChOICogMCkgPT0gLTAs
IG5vdCByZXByZXNlbnRhdGJsZSBhcyBhIEpTSW1tZWRpYXRlLiAKKyAgICAgICAgX18gbW92bF9y
cihYODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICBfXyBhZGRsX3JyKFg4Njo6ZWR4LCBYODY6
OmVjeCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpzKCks
IGkpKTsKKyAgICAgICAgLy8gU2tpcCB0aGUgYWJvdmUgY2hlY2sgaWYgbmVpdGhlciBpbnB1dCBp
cyB6ZXJvCisgICAgICAgIF9fIGxpbmsob3AyTm9uWmVybywgX18gbGFiZWwoKSk7CisgICAgICAg
IF9fIGltdWxsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgZW1pdEZhc3RBcml0aFJl
VGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICB9CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworCisgICAgaWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQ
cmVzZW50KCkpIHsKKyAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwyLCBfXyBsYWJlbCgp
KTsKKyAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwyYiwgX18gbGFiZWwoKSk7CisgICAg
fQorICAgIGVsc2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNl
bnQoKSkgeworICAgICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDEsIF9fIGxhYmVsKCkpOwor
ICAgICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDFiLCBfXyBsYWJlbCgpKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE9wY29kZUlEIG9wY29k
ZUlELCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBkc3Qs
IHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcywgdW5zaWdu
ZWQgaSkKK3sKKyAgICBKbXBEc3QgaGVyZSA9IF9fIGxhYmVsKCk7CisgICAgX18gbGluayhpdGVy
LT5mcm9tLCBoZXJlKTsKKyAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIGlz
U1NFMlByZXNlbnQoKSkgeworICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlz
TnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0
ZXIsIHNyYzEpKQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgIF9fIGxpbmso
aXRlci0+ZnJvbSwgaGVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQo
KS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKCsraXRlciwgc3JjMikpCisgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAg
ICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKKyAgICAgICAgfQorICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKyAgICB9IGVsc2UgaWYgKHR5cGVzLmZpcnN0KCku
aXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgeworICAgICAgICBpZiAoIXR5cGVzLmZp
cnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzEpKQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAg
ICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAg
aWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMikpCisgICAgICAgICAgICAg
ICAgKytpdGVyOworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKKyAgICAg
ICAgfQorICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7CisKKyAgICAvLyBhZGRpdGlv
bmFsIGVudHJ5IHBvaW50IHRvIGhhbmRsZSAtMCBjYXNlcy4KKyAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfbXVsKQorICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKworICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAg
aWYgKG9wY29kZUlEID09IG9wX2FkZCkKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9hZGQpOworICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKKyAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zdWIpOworICAgIGVsc2Ugewor
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKKyAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOworICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKK3sK
KyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
LmJlZ2luKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuc2l6ZSgpOworCisgICAgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbkluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCA9IDA7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9pbnRlcnByZXRlci0+aXNPcGNvZGUoaW5zdHJ1Y3Rpb25b
aV0udS5vcGNvZGUpLCAicHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgaSk7
CisKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICBpZiAoaSA+IDApIC8vIEF2
b2lkIHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KKyAgICAgICAgICAg
IF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShpbnN0
cnVjdGlvbiArIGkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Cisj
ZW5kaWYKKworICAgICAgICBtX2xhYmVsc1tpXSA9IF9fIGxhYmVsKCk7CisgICAgICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25baV0u
dS5vcGNvZGUpOworICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgIGNhc2Ugb3Bf
bW92OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kOworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChzcmMpKQorICAgICAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIobV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYykpLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX2FkZDogeworICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0g
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc3Jj
MiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisKKyAgICAgICAgICAgIGlmIChKU1Zh
bHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgeworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOwor
ICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
CisgICAgICAgICAgICAgICAgX18gYWRkbF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlh
dGUodmFsdWUpLCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogdmFsdWUg
PSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKKyAgICAgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAg
ICAgICAgIF9fIGFkZGxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwg
WDg2OjplYXgpOworICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE9wZXJhbmRUeXBl
cyB0eXBlcyA9IE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkg
JiYgdHlwZXMuc2Vjb25kKCkubWlnaHRCZU51bWJlcigpKQorICAgICAgICAgICAgICAgICAgICBj
b21waWxlQmluYXJ5QXJpdGhPcChvcF9hZGQsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQs
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwg
aSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAs
IFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAg
ICAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2VuZDogeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxT
Y29wZUNoYWluKQorICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfZW5kKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gcHVzaGxf
bShSZWdpc3RlckZpbGU6OlJldHVyblBDICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSwgWDg2OjplZGkpOworICAgICAgICAgICAgX18gcmV0KCk7CisgICAgICAgICAgICBpICs9
IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2ptcDog
eworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBp
ICsgMSArIHRhcmdldCkpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wcmVfaW5jOiB7CisgICAgICAgICAgICBpbnQg
c3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gYWRk
bF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRp
YXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbygpLCBpKSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX2xvb3A6IHsKKyAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0
Q2hlY2soaSk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShf
XyBqbXAoKSwgaSArIDEgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7Cisg
ICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOworCisgICAgICAgICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgSlNW
YWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7CisgICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRl
Z2VyKHNyYzJpbW0pLCBYODY6OmVkeCk7CisgICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBl
bmQoSm1wVGFibGUoX18gamwoKSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQs
IFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bU51bShYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwg
WDg2OjplYXgpOworICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9f
IGpsKCksIGkgKyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9
IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xvb3Bf
aWZfbGVzc2VxOiB7CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOworCisgICAg
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwor
ICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJp
Y0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMy
aW1tKSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBj
bXBsX2kzMnIoYXNJbnRlZ2VyKHNyYzJpbW0pLCBYODY6OmVkeCk7CisgICAgICAgICAgICAgICAg
bV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamxlKCksIGkgKyAzICsgdGFyZ2V0KSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIF9fIGNt
cGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFw
cGVuZChKbXBUYWJsZShfXyBqbGUoKSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfbmV3X29iamVjdDogeworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfb2JqZWN0KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9
IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9i
eV9pZDogeworICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXBhdGNoIGJv
dGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9p
bnRlciwKKyAgICAgICAgICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJl
ZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUg
Y29kZQorICAgICAgICAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJl
IGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCisKKyAgICAgICAgICAgIGlu
dCBiYXNlVlJlZyA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgWDg2OjplYXgsIGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKKworICAgICAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uSW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7CisKKyAgICAgICAgICAgIC8vIEp1bXAgdG8g
YSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9y
IGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgsIGksIGJhc2VWUmVnKTsKKworICAgICAgICAgICAg
Sm1wRHN0IGhvdFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90
UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXg7CisKKyAgICAgICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHRo
ZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBpbiBvcmRl
ciB0aGF0IGl0IGNhbiBiZSBwYXRjaGVkIG92ZXIuCisgICAgICAgICAgICBfXyBjbXBsX2kzMm0o
cmVwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0
cnVjdHVyZSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6Omdl
dERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVw
YXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgLy8gUGxhbnQg
YSBsb2FkIGZyb20gYSBib2d1cyBvZnNldCBpbiB0aGUgb2JqZWN0J3MgcHJvcGVydHkgbWFwOyB3
ZSB3aWxsIHBhdGNoIHRoaXMgbGF0ZXIsIGlmIGl0IGlzIHRvIGJlIHVzZWQuCisgICAgICAgICAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBY
ODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgX18gbW92bF9ybShYODY6OmVkeCwgcmVw
YXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0LCBYODY6OmVheCk7CisgICAgICAgICAgICBBU1NFUlQo
WDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9f
IGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOworCisg
ICAgICAgICAgICBpICs9IDg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZDogeworICAgICAgICAgICAgLy8gQXMgZm9yIHB1dF9ieV9pZCwg
Z2V0X2J5X2lkIHJlcXVpcmVzIHRoZSBvZmZzZXQgb2YgdGhlIFN0cnVjdHVyZSBhbmQgdGhlIG9m
ZnNldCBvZiB0aGUgYWNjZXNzIHRvIGJlIHJlcGF0Y2hlZC4KKyAgICAgICAgICAgIC8vIEFkZGl0
aW9uYWxseSwgZm9yIGdldF9ieV9pZCB3ZSBuZWVkIHJlcGF0Y2ggdGhlIG9mZnNldCBvZiB0aGUg
YnJhbmNoIHRvIHRoZSBzbG93IGNhc2UgKHdlIHJlcGF0Y2ggdGhpcyB0byBqdW1wCisgICAgICAg
ICAgICAvLyB0byBhcnJheS1sZW5ndGggLyBwcm90b3R5cGUgYWNjZXNzIHRyYW5wb2xpbmVzLCBh
bmQgZmluYWxseSB3ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHktbWFwIGFjY2VzcyBvZmZzZXQgYXMg
YSBsYWJlbAorICAgICAgICAgICAgLy8gdG8ganVtcCBiYWNrIHRvIGlmIG9uZSBvZiB0aGVzZSB0
cmFtcG9saWVzIGZpbmRzIGEgbWF0Y2guCisKKyAgICAgICAgICAgIGludCBiYXNlVlJlZyA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOworCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgsIGksIGJhc2VWUmVnKTsKKworICAgICAgICAgICAg
Sm1wRHN0IGhvdFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90
UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXg7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJ
ZERlZmF1bHRTdHJ1Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2
OjplYXgpOworICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJl
dHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0
QnlJZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBh
dGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOworCisgICAgICAgICAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwg
WDg2OjplYXgpOworICAgICAgICAgICAgX18gbW92bF9tcihyZXBhdGNoR2V0QnlJZERlZmF1bHRP
ZmZzZXQsIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1i
bGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkp
ID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOworICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKwor
ICAgICAgICAgICAgaSArPSA4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsgLy8gdmFsdWUK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUu
b3BlcmFuZCwgWDg2OjplY3gsIGkpOyAvLyBiYXNlVmFsCisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsg
Ly8gcHJvdG8KKworICAgICAgICAgICAgLy8gY2hlY2sgaWYgYW55IGFyZSBpbW1lZGlhdGVzCisg
ICAgICAgICAgICBfXyBvcmxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9f
IG9ybF9ycihYODY6OmVkeCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gdGVzdGxfaTMycihK
U0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplY3gpOworCisgICAgICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbnooKSwgaSkpOworCisgICAgICAgICAgICAvLyBj
aGVjayB0aGF0IGFsbCBhcmUgb2JqZWN0IHR5cGUgLSB0aGlzIGlzIGEgYml0IG9mIGEgYml0aGFj
ayB0byBhdm9pZCBleGNlc3MgYnJhbmNoaW5nOworICAgICAgICAgICAgLy8gd2UgY2hlY2sgdGhh
dCB0aGUgc3VtIG9mIHRoZSB0aHJlZSB0eXBlIGNvZGVzIGZyb20gU3RydWN0dXJlcyBpcyBleGFj
dGx5IDMgKiBPYmplY3RUeXBlLAorICAgICAgICAgICAgLy8gdGhpcyB3b3JrcyBiZWNhdXNlIE51
bWJlclR5cGUgYW5kIFN0cmluZ1R5cGUgYXJlIHNtYWxsZXIKKyAgICAgICAgICAgIF9fIG1vdmxf
aTMycigzICogT2JqZWN0VHlwZSwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Cisg
ICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwg
WDg2OjplZHgsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIHN1YmxfbXIoRklFTERfT0ZGU0VU
KFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAg
ICAgICAgICAgX18gc3VibF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1f
dHlwZSksIFg4Njo6ZWR4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcmVs
b2FkIGJhc2VWYWwKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwg
bV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCwgWDg2OjplZHgpOworICAgICAgICAgICAgX18gY21wbF9y
bShYODY6OmVjeCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBY
ODY6OmVkeCk7CisKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5
KF9fIGpuZSgpLCBpKSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgYmFzZVZhbCdzIGZs
YWdzIGluY2x1ZGUgSW1wbGVtZW50c0hhc0luc3RhbmNlIGJ1dCBub3QgT3ZlcnJpZGVzSGFzSW5z
dGFuY2UKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90
eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplZHgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFu
ZGxfaTMycihJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNIYXNJbnN0YW5jZSwgWDg2
OjplY3gpOworICAgICAgICAgICAgX18gY21wbF9pMzJyKEltcGxlbWVudHNIYXNJbnN0YW5jZSwg
WDg2OjplY3gpOworCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqbmUoKSwgaSkpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsgLy8gcmVsb2FkIHZhbHVl
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyA0XS51
Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcmVsb2FkIHByb3RvCisKKyAgICAgICAgICAgIC8v
IG9wdGltaXN0aWNhbGx5IGxvYWQgdHJ1ZSByZXN1bHQKKyAgICAgICAgICAgIF9fIG1vdmxfaTMy
cihhc0ludGVnZXIoanNCb29sZWFuKHRydWUpKSwgWDg2OjplYXgpOworCisgICAgICAgICAgICBK
bXBEc3QgbG9vcCA9IF9fIGxhYmVsKCk7CisKKyAgICAgICAgICAgIC8vIGxvYWQgdmFsdWUncyBw
cm90b3R5cGUKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4
KTsKKyAgICAgICAgICAgIEptcFNyYyBleGl0ID0gX18gamUoKTsKKworICAgICAgICAgICAgX18g
Y21wbF9pMzJyKGFzSW50ZWdlcihqc051bGwoKSksIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIEpt
cFNyYyBnb1RvTG9vcCA9IF9fIGpuZSgpOworICAgICAgICAgICAgX18gbGluayhnb1RvTG9vcCwg
bG9vcCk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKGZh
bHNlKSksIFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayhleGl0LCBfXyBsYWJlbCgp
KTsKKworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKKworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKKyAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KGlkZW50KSwgNCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2RlbF9ieV9pZCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworCisgICAg
ICAgICAgICAvLyBGb3Igbm93LCBvbmx5IHBsYW50IGEgZmFzdCBpbnQgY2FzZSBpZiB0aGUgY29u
c3RhbnQgb3BlcmFuZCBpcyBncmVhdGVyIHRoYW4gemVyby4KKyAgICAgICAgICAgIEpTVmFsdWUq
IHNyYzFWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKTsKKyAgICAg
ICAgICAgIEpTVmFsdWUqIHNyYzJWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0Fy
ZyhzcmMyKTsKKyAgICAgICAgICAgIGludDMyX3QgdmFsdWU7CisgICAgICAgICAgICBpZiAoc3Jj
MVZhbHVlICYmICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMVZhbHVlKSkgPiAw
KSkgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2Ojpl
YXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6
OmVheCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBpbXVsbF9pMzJyKFg4Njo6ZWF4LCB2YWx1ZSwg
WDg2OjplYXgpOworICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1l
ZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjMlZhbHVlICYmICgodmFsdWUgPSBKU0lt
bWVkaWF0ZTo6aW50VmFsdWUoc3JjMlZhbHVlKSkgPiAwKSkgeworICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICAg
ICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAg
ICBfXyBpbXVsbF9pMzJyKFg4Njo6ZWF4LCB2YWx1ZSwgWDg2OjplYXgpOworICAgICAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAg
ICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9wX211bCwgaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9u
W2kgKyA0XS51Lm9wZXJhbmQpLCBpKTsKKworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogeworICAgICAg
ICAgICAgRnVuY0RlY2xOb2RlKiBmdW5jID0gKG1fY29kZUJsb2NrLT5mdW5jdGlvbnNbaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pLmdldCgpOworICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMpLCAwKTsKKyAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Z1bmMpOworICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAg
IGNhc2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBjb21waWxlT3BDYWxsKG9wY29kZUlE
LCBpbnN0cnVjdGlvbiArIGksIGksIGNhbGxMaW5rSW5mb0luZGV4KyspOworICAgICAgICAgICAg
aSArPSAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gNyA6IDUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogeworICAgICAg
ICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJp
YWJsZU9iamVjdCo+KGluc3RydWN0aW9uW2kgKyAyXS51LmpzQ2VsbCk7CisgICAgICAgICAgICBf
XyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGdsb2JhbE9iamVjdCksIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfZ2xv
YmFsX3ZhcjogeworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBKU1ZhcmlhYmxl
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaW5z
dHJ1Y3Rpb25baSArIDFdLnUuanNDZWxsKTsKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0lu
dGVnZXIoZ2xvYmFsT2JqZWN0KSwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFB1dFZhcmlh
YmxlT2JqZWN0UmVnaXN0ZXIoWDg2OjplZHgsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6IHsKKyAgICAgICAgICAgIGlu
dCBza2lwID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJl
Z2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgd2hpbGUg
KHNraXAtLSkKKyAgICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNo
YWluTm9kZSwgbmV4dCksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisKKyAgICAgICAgICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6OmVheCwgWDg2
OjplYXgpOworICAgICAgICAgICAgZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2Ojpl
YXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3B1dF9zY29wZWRfdmFyOiB7CisgICAgICAgICAgICBpbnQgc2tpcCA9IGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFp
bjsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlckZpbGU6OlNj
b3BlQ2hhaW4sIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOworICAgICAgICAg
ICAgd2hpbGUgKHNraXAtLSkKKyAgICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChTY29wZUNoYWluTm9kZSwgbmV4dCksIFg4Njo6ZWR4LCBYODY6OmVkeCk7CisKKyAgICAgICAg
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6
OmVkeCwgWDg2OjplZHgpOworICAgICAgICAgICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0
ZXIoWDg2OjplYXgsIFg4Njo6ZWR4LCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjogeworICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2
OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90
ZWFyX29mZl9hY3RpdmF0aW9uKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7Cisg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3RlYXJfb2ZmX2Fy
Z3VtZW50cyk7CisgICAgICAgICAgICBpICs9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX3JldDogeworICAgICAgICAgICAgLy8gV2UgY291bGQgSklU
IGdlbmVyYXRlIHRoZSBkZXJlZiwgb25seSBjYWxsaW5nIG91dCB0byBDIHdoZW4gdGhlIHJlZmNv
dW50IGhpdHMgemVyby4KKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbikKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3JldF9zY29wZUNoYWluKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQg
aW4gJWVheC4KKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOworCisgICAgICAgICAgICAvLyBHcmFiIHRo
ZSByZXR1cm4gYWRkcmVzcy4KKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVn
aXN0ZXJGaWxlOjpSZXR1cm5QQywgWDg2OjplZHgsIGkpOworCisgICAgICAgICAgICAvLyBSZXN0
b3JlIG91ciBjYWxsZXIncyAiciIuCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIFg4Njo6ZWRpLCBpKTsKKworICAgICAgICAgICAg
Ly8gUmV0dXJuLgorICAgICAgICAgICAgX18gcHVzaGxfcihYODY6OmVkeCk7CisgICAgICAgICAg
ICBfXyByZXQoKTsKKworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6IHsKKyAgICAgICAgICAgIF9fIGxl
YWxfbXIoc2l6ZW9mKFJlZ2lzdGVyKSAqIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4
Njo6ZWRpLCBYODY6OmVkeCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAw
KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfbmV3X2FycmF5KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmU6IHsKKyAgICAg
ICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7CisgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUpOworICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZlcmlmeTogeworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisK
KyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4
KTsKKyAgICAgICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpuZSgpOworICAgICAgICAg
ICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4
LCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERf
T0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1f
dHlwZSksIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIEptcFNyYyBpc09iamVjdCA9IF9fIGplKCk7
CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgX18gbGluayhpc09iamVjdCwg
X18gbGFiZWwoKSk7CisKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2Ojpl
YXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7CisgICAgICAgICAg
ICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOworICAgICAgICAgICAgX18gdGVzdGxf
aTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKKyAgICAgICAgICAgIF9f
IGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pz
QXJyYXlWcHRyKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBh
cnJheTsgZ2V0IHRoZSBtX3N0b3JhZ2UgcG9pbnRlciBpbnRvIGVjeCwgdGhlbiBjaGVjayBpZiB0
aGUgaW5kZXggaXMgYmVsb3cgdGhlIGZhc3QgY3V0b2ZmCisgICAgICAgICAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOwor
ICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1f
ZmFzdEFjY2Vzc0N1dG9mZiksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpiZSgpLCBpKSk7CisKKyAgICAgICAgICAgIC8vIEdldCB0
aGUgdmFsdWUgZnJvbSB0aGUgdmVjdG9yCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXpl
b2YoSlNWYWx1ZSopLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Z1
bmM6IHsKKyAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7
CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVf
ZnVuYyk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N1Yjogewor
ICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3Aob3Bfc3ViLCBpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRd
LnUub3BlcmFuZCksIGkpOworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6
OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAg
ICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7CisgICAgICAgICAgICBfXyB0ZXN0
bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAgICAg
X18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1f
anNBcnJheVZwdHIpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworCisgICAgICAgICAgICAvLyBUaGlzIGlzIGFu
IGFycmF5OyBnZXQgdGhlIG1fc3RvcmFnZSBwb2ludGVyIGludG8gZWN4LCB0aGVuIGNoZWNrIGlm
IHRoZSBpbmRleCBpcyBiZWxvdyB0aGUgZmFzdCBjdXRvZmYKKyAgICAgICAgICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7
CisgICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwg
bV9mYXN0QWNjZXNzQ3V0b2ZmKSwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGluRmFz
dFZlY3RvciA9IF9fIGphKCk7CisgICAgICAgICAgICAvLyBObzsgb2ggd2VsbCwgY2hlY2sgaWYg
dGhlIGFjY2VzcyBpZiB3aXRoaW4gdGhlIHZlY3RvciAtIGlmIHNvLCB3ZSBtYXkgc3RpbGwgYmUg
b2theS4KKyAgICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yTGVuZ3RoKSwgWDg2OjplY3gpOworICAgICAgICAgICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamJlKCksIGkpKTsKKworICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIHdyaXRlIHRvIHRoZSBzbG93IHBhcnQgb2YgdGhlIHZlY3RvcjsgZmlyc3Qs
IHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhpcyB3b3VsZCBiZSB0aGUgZmlyc3Qgd3JpdGUgdG8gdGhp
cyBsb2NhdGlvbi4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBoYW5k
bGUgaW5pdGlhbCB3cml0ZSB0byBhcnJheTsgaW5jcmVtZW50IHRoZSB0aGUgbnVtYmVyIG9mIGl0
ZW1zIGluIHRoZSBhcnJheSwgYW5kIHBvdGVudGlhbGx5IHVwZGF0ZSBmYXN0IGFjY2VzcyBjdXRv
ZmYuIAorICAgICAgICAgICAgX18gY21wbF9pOG0oMCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pLCBYODY6OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKikpOwor
ICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamUoKSwgaSkp
OworCisgICAgICAgICAgICAvLyBBbGwgZ29vZCAtIHB1dCB0aGUgdmFsdWUgaW50byB0aGUgYXJy
YXkuCisgICAgICAgICAgICBfXyBsaW5rKGluRmFzdFZlY3RvciwgX18gbGFiZWwoKSk7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIG1vdmxfcm0oWDg2OjplYXgsIEZJRUxE
X09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBz
aXplb2YoSlNWYWx1ZSopKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9sZXNzZXEpCisg
ICAgICAgIGNhc2Ugb3BfbG9vcF9pZl90cnVlOiB7CisgICAgICAgICAgICBlbWl0U2xvd1Njcmlw
dENoZWNrKGkpOworCisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAgIF9f
IGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIEptcFNyYyBpc1plcm8gPSBfXyBqZSgpOworICAgICAgICAgICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpuZSgpLCBpICsgMiAr
IHRhcmdldCkpOworCisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRp
YXRlOjp0cnVlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ptcFRhYmxl
LmFwcGVuZChKbXBUYWJsZShfXyBqZSgpLCBpICsgMiArIHRhcmdldCkpOworICAgICAgICAgICAg
X18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9f
IGpuZSgpLCBpKSk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNaZXJvLCBfXyBsYWJlbCgpKTsK
KyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAg
ICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZTogeworICAgICAgICAgICAgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9iYXNlKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9
IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lZ2F0
ZTogeworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZWdhdGUpOworICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZV9za2lwOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
PihpZGVudCksIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiwg
NCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29s
dmVfc2tpcCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDogeworICAgICAg
ICAgICAgLy8gRmFzdCBjYXNlCisgICAgICAgICAgICB1bnNpZ25lZCBnbG9iYWxPYmplY3QgPSBh
c0ludGVnZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUuanNDZWxsKTsKKyAgICAgICAgICAgIElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgdm9pZCogc3RydWN0dXJlQWRkcmVzcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3RydWN0aW9uICsgaSArIDQpOworICAgICAgICAgICAg
dm9pZCogb2Zmc2V0QWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3RydWN0aW9uICsg
aSArIDUpOworCisgICAgICAgICAgICAvLyBDaGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVj
dAorICAgICAgICAgICAgX18gbW92bF9pMzJyKGdsb2JhbE9iamVjdCwgWDg2OjplYXgpOworICAg
ICAgICAgICAgX18gbW92bF9tcihzdHJ1Y3R1cmVBZGRyZXNzLCBYODY6OmVkeCk7CisgICAgICAg
ICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEptcFNyYyBub01hdGNoID0gX18gam5lKCk7IC8v
IFN0cnVjdHVyZXMgZG9uJ3QgbWF0Y2gKKworICAgICAgICAgICAgLy8gTG9hZCBjYWNoZWQgcHJv
cGVydHkKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTR2xvYmFsT2JqZWN0
LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBf
XyBtb3ZsX21yKG9mZnNldEFkZHIsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIG1vdmxfbXIo
MCwgWDg2OjplYXgsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCk7CisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgSm1wU3JjIGVuZCA9IF9fIGptcCgpOworCisgICAgICAgICAgICAv
LyBTbG93IGNhc2UKKyAgICAgICAgICAgIF9fIGxpbmsobm9NYXRjaCwgX18gbGFiZWwoKSk7Cisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoZ2xvYmFsT2JqZWN0LCAwKTsKKyAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihp
ZGVudCksIDQpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KGluc3RydWN0aW9uICsgaSksIDgpOworICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7CisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgX18gbGluayhlbmQsIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgaSArPSA2
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ1RJX0NPTVBJTEVfQklO
QVJZX09QKG9wX2RpdikKKyAgICAgICAgY2FzZSBvcF9wcmVfZGVjOiB7CisgICAgICAgICAgICBp
bnQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18g
c3VibF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1t
ZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2pubGVzczogeworICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIEpTVmFs
dWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoc3JjMmltbSkgeworICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bU51bShYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdl
cihzcmMyaW1tKSwgWDg2OjplZHgpOworICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5k
KEptcFRhYmxlKF9fIGpnZSgpLCBpICsgMyArIHRhcmdldCkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwg
WDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBY
ODY6OmVheCk7CisgICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18g
amdlKCksIGkgKyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9
IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25vdDog
eworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyB4b3JsX2k4cihKU0ltbWVk
aWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9p
MzJyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZU1hc2ssIFg4Njo6ZWF4KTsgLy8gaTg/CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwor
ICAgICAgICAgICAgX18geG9ybF9pOHIoKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wgfCBK
U0ltbWVkaWF0ZTo6RXh0ZW5kZWRQYXlsb2FkQml0Qm9vbFZhbHVlKSwgWDg2OjplYXgpOworICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisK
KyAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1l
ZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRh
YmxlKF9fIGplKCksIGkgKyAyICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOworICAgICAgICAgICAg
Sm1wU3JjIGlzTm9uWmVybyA9IF9fIGpuZSgpOworCisgICAgICAgICAgICBfXyBjbXBsX2kzMnIo
YXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAg
ICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJn
ZXQpKTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OnRy
dWVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNO
b25aZXJvLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9OworICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKKyAgICAg
ICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gp
OworICAgICAgICAgICAgX18gc2V0bnpfcihYODY6OmVheCk7CisKKyAgICAgICAgICAgIEptcFNy
YyB3YXNOb3RJbW1lZGlhdGUgPSBfXyBqbXAoKTsKKworICAgICAgICAgICAgX18gbGluayhpc0lt
bWVkaWF0ZSwgX18gbGFiZWwoKSk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1l
ZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7CisgICAgICAgICAgICBf
XyBhbmRsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMnIo
SlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18g
c2V0ZV9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUs
IF9fIGxhYmVsKCkpOworCisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycigwLCBYODY6OmVheCk7CisgICAgICAgICAg
ICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsg
ICAgICAgICAgICAKKworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH07CisgICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7CisgICAgICAgICAgICB1bnNp
Z25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAg
IF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4
KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklF
TERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOworICAg
ICAgICAgICAgX18gc2V0el9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgSm1wU3JjIHdhc05v
dEltbWVkaWF0ZSA9IF9fIGptcCgpOworCisgICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRl
LCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6
RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFuZGxf
cnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVk
aWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBzZXRuZV9y
KFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxh
YmVsKCkpOworCisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIF9fIGNtcGxfaTMycigwLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2pt
cFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsgICAgICAg
ICAgICAKKworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9wb3N0X2luYzogeworICAgICAgICAgICAgaW50IHNyY0RzdCA9
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gbW92bF9ycihY
ODY6OmVheCwgWDg2OjplZHgpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIGFkZGxfaThyKGdldERlVGFnZ2VkQ29u
c3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplZHgpOwor
ICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkp
OworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX3VuZXhwZWN0ZWRfbG9hZDogeworICAgICAgICAgICAgSlNW
YWx1ZSogdiA9IG1fY29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmRdOworICAgICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcih2KSwg
WDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfanNyOiB7CisgICAgICAgICAgICBpbnQg
cmV0QWRkckRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIF9f
IG1vdmxfaTMybSgwLCBzaXplb2YoUmVnaXN0ZXIpICogcmV0QWRkckRzdCwgWDg2OjplZGkpOwor
ICAgICAgICAgICAgSm1wRHN0IGFkZHJQb3NpdGlvbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAg
ICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDIgKyB0YXJnZXQpKTsK
KyAgICAgICAgICAgIEptcERzdCBzcmV0VGFyZ2V0ID0gX18gbGFiZWwoKTsKKyAgICAgICAgICAg
IG1fanNyU2l0ZXMuYXBwZW5kKEpTUkluZm8oYWRkclBvc2l0aW9uLCBzcmV0VGFyZ2V0KSk7Cisg
ICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3NyZXQ6IHsKKyAgICAgICAgICAgIF9fIGptcF9tKHNpemVvZihSZWdpc3Rlcikg
KiBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVkaSk7CisgICAgICAgICAgICBp
ICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2Vx
OiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2
OjplZHgsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6
OmVheCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2
OjplYXgpOworICAgICAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIF9f
IG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFRhZ0FzQm9v
bEltbWVkaWF0ZShYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sc2hpZnQ6IHsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwg
aSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkp
OworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsK
KyAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVheCk7CisgICAgICAgICAg
ICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplY3gpOworICAgICAgICAgICAgX18gc2hsbF9D
THIoWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tT3JTbG93Q2Fz
ZShYODY6OmVheCwgaSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAg
ICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAg
ICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmlj
QXJnKHNyYzEpKSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMy
LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2Vy
KHZhbHVlKSwgWDg2OjplYXgpOyAvLyBGSVhNRTogbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhpcyBp
cyByZWx5aW5nIG9uIHRoZSBmb3JtYXQgb2YgSlNJbW1lZGlhdGUKKyAgICAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFs
dWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Cisg
ICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsK
KyAgICAgICAgICAgICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwgWDg2OjplYXgp
OworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3Jj
MSwgWDg2OjplYXgsIHNyYzIsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBhbmRs
X3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3JzaGlmdDogeworICAg
ICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVt
ZXJpY0FyZyhzcmMyKSkgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMSwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgLy8gTWFzayB3aXRoIDB4MWYg
YXMgcGVyIGVjbWEtMjYyIDExLjcuMiBzdGVwIDcuCisgICAgICAgICAgICAgICAgX18gc2FybF9p
OHIoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMih2YWx1ZSkgJiAweDFmLCBYODY6OmVh
eCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVjeCwgaSk7CisgICAgICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGkpOworICAgICAg
ICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVjeCk7CisgICAgICAgICAgICAg
ICAgX18gc2FybF9DTHIoWDg2OjplYXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW1p
dEZhc3RBcml0aFBvdGVudGlhbGx5UmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfYml0bm90OiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICBf
XyB4b3JsX2k4cih+SlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhfYmFzZTogeworICAgICAgICAgICAgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UpOworICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBY
ODY6OmVkeCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6IHsKKyAgICAgICAg
ICAgIEZ1bmNFeHByTm9kZSogZnVuYyA9IChtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByZXNzaW9u
c1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSkuZ2V0KCk7CisgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oZnVuYyksIDApOwor
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZnVuY19l
eHApOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVjeCwgaSk7CisgICAgICAgICAgICBlbWl0RmFz
dEFyaXRoRGVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlSnVtcElmWmVy
byhYODY6OmVjeCksIGkpKTsKKyAgICAgICAgICAgIF9fIGNkcSgpOworICAgICAgICAgICAgX18g
aWRpdmxfcihYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlh
dGUoWDg2OjplZHgpOworICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplYXgp
OworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfanRydWU6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBp
KTsKKworICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVy
b0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGlzWmVybyA9IF9f
IGplKCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBl
SW50ZWdlciwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFi
bGUoX18gam5lKCksIGkgKyAyICsgdGFyZ2V0KSk7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMy
cihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsgdGFy
Z2V0KSk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpm
YWxzZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgX18gbGluayhp
c1plcm8sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX2xlc3MpCisg
ICAgICAgIGNhc2Ugb3BfbmVxOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgX18gY21w
bF9ycihYODY6OmVheCwgWDg2OjplZHgpOworCisgICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAg
ICAgICAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShYODY6OmVheCk7CisKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisK
KyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfcG9zdF9kZWM6IHsKKyAgICAgICAgICAgIGludCBzcmNEc3QgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplYXgs
IFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6
OmVheCwgaSk7CisgICAgICAgICAgICBfXyBzdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1t
ZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKKyAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX3Vyc2hpZnQpCisgICAgICAgIGNhc2Ugb3Bf
Yml0eG9yOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
cyhYODY6OmVheCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgX18geG9ybF9ycihYODY6OmVk
eCwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKKyAgICAgICAgICAg
IFJlZ0V4cCogcmVnRXhwID0gbV9jb2RlQmxvY2stPnJlZ2V4cHNbaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZF0uZ2V0KCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZD4ocmVnRXhwKSwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19yZWdleHApOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfYml0b3I6IHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBfXyBvcmxfcnIoWDg2
OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Rocm93OiB7CisgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX3Rocm93KTsKKyAgICAgICAgICAgIF9fIGFkZGxfaThyKDB4MjAsIFg4
Njo6ZXNwKTsKKyAgICAgICAgICAgIF9fIHBvcGxfcihYODY6OmVieCk7CisgICAgICAgICAgICBf
XyBwb3BsX3IoWDg2OjplZGkpOworICAgICAgICAgICAgX18gcG9wbF9yKFg4Njo6ZXNpKTsKKyAg
ICAgICAgICAgIF9fIHJldCgpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7CisgICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2dldF9wbmFtZXMpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV4dF9wbmFt
ZTogeworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV4dF9wbmFtZSk7CisgICAgICAgICAg
ICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGVu
ZE9mSXRlciA9IF9fIGplKCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBl
bmQoSm1wVGFibGUoX18gam1wKCksIGkgKyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBfXyBs
aW5rKGVuZE9mSXRlciwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1c2hfc2NvcGU6IHsKKyAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfcHVzaF9zY29wZSk7CisgICAgICAgICAgICBpICs9IDI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3BvcF9zY29wZTog
eworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3Bfc2Nv
cGUpOworICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfdHlwZW9mKQorICAgICAgICBDVElfQ09N
UElMRV9VTkFSWV9PUChvcF9pc191bmRlZmluZWQpCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZ
X09QKG9wX2lzX2Jvb2xlYW4pCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX251
bWJlcikKKyAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfc3RyaW5nKQorICAgICAg
ICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19vYmplY3QpCisgICAgICAgIENUSV9DT01QSUxF
X1VOQVJZX09QKG9wX2lzX2Z1bmN0aW9uKQorICAgICAgICBjYXNlIG9wX3N0cmljdGVxOiB7Cisg
ICAgICAgICAgICBjb21waWxlT3BTdHJpY3RFcShpbnN0cnVjdGlvbiArIGksIGksIE9wU3RyaWN0
RXEpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9uc3RyaWN0ZXE6IHsKKyAgICAgICAgICAgIGNvbXBpbGVPcFN0cmlj
dEVxKGluc3RydWN0aW9uICsgaSwgaSwgT3BOU3RyaWN0RXEpOworICAgICAgICAgICAgaSArPSA0
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b19qc251
bWJlcjogeworICAgICAgICAgICAgaW50IHNyY1ZSZWcgPSBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBYODY6
OmVheCwgaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1l
ZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMg
d2FzSW1tZWRpYXRlID0gX18gam56KCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3JjVlJlZyk7CisKKyAgICAgICAgICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gp
OworICAgICAgICAgICAgX18gY21wbF9pMzJtKE51bWJlclR5cGUsIEZJRUxEX09GRlNFVChTdHJ1
Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBlKSwgWDg2OjplY3gpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBfXyBsaW5rKHdhc0ltbWVkaWF0ZSwgX18gbGFiZWwo
KSk7CisKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2luOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBY
ODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2luKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX3B1c2hfbmV3X3Njb3BlOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsK
KyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkPihpZGVudCksIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX25ld19zY29wZSk7
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICAgICAgZW1pdEdldENUSVBh
cmFtKENUSV9BUkdTX2NhbGxGcmFtZSwgWDg2OjplZGkpOyAvLyBlZGkgOj0gcgorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3Bfam1wX3Njb3BlczogeworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KGNvdW50LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3Bfam1wX3Njb3Blcyk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQo
Sm1wVGFibGUoX18gam1wKCksIGkgKyAyICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBpICs9IDM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV9p
bmRleDogeworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQpOworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgOCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaW5kZXgpOworICAgICAgICAgICAgaSArPSA0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1t
OiB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0g
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJs
b2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNl
dCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKKyAgICAgICAgICAgIGp1bXBUYWJsZS0+Y3Rp
T2Zmc2V0cy5ncm93KGp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkpOworCisgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4Njo6
ZWN4KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0KTsK
KyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX2lt
bSk7CisgICAgICAgICAgICBfXyBqbXBfcihYODY6OmVheCk7CisgICAgICAgICAgICBpICs9IDQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N3aXRjaF9j
aGFyOiB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVl
ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29k
ZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIGp1bXBUYWJsZS0+
Y3RpT2Zmc2V0cy5ncm93KGp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkpOworCisgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0
KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNo
X2NoYXIpOworICAgICAgICAgICAgX18gam1wX3IoWDg2OjplYXgpOworICAgICAgICAgICAgaSAr
PSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zd2l0
Y2hfc3RyaW5nOiB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2Ny
dXRpbmVlID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0g
Jm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAg
ICAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVs
dE9mZnNldCkpOworCisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25z
dGFudCh0YWJsZUluZGV4LCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3Bfc3dpdGNoX3N0cmluZyk7CisgICAgICAgICAgICBfXyBqbXBfcihYODY6OmVh
eCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2RlbF9ieV92YWw6IHsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6
ZWN4KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X3ZhbCk7CisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9wdXRfZ2V0dGVyOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Cisg
ICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJz
W2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZCwgOCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfZ2V0dGVyKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X3NldHRlcjogewor
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9t
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4
KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X3Nl
dHRlcik7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX25ld19lcnJvcjogeworICAgICAgICAgICAgSlNWYWx1ZSogbWVz
c2FnZSA9IG1fY29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0
YW50KGFzSW50ZWdlcihtZXNzYWdlKSwgNCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29u
c3RhbnQobV9jb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JWUEMoJmluc3RydWN0aW9uW2ldKSwgOCk7
CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19lcnJv
cik7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9kZWJ1ZzogeworICAgICAgICAgICAgZW1pdFB1dENU
SUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDApOworICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQsIDgpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9kZWJ1Zyk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25l
ZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyB0
ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgICAgICAgICBK
bXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKKworICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Cisg
ICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZJRUxEX09G
RlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsKKyAgICAgICAg
ICAgIF9fIHNldG56X3IoWDg2OjplYXgpOworCisgICAgICAgICAgICBKbXBTcmMgd2FzTm90SW1t
ZWRpYXRlID0gX18gam1wKCk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9f
IGxhYmVsKCkpOworCisgICAgICAgICAgICBfXyBtb3ZsX2kzMnIofkpTSW1tZWRpYXRlOjpFeHRl
bmRlZFRhZ0JpdFVuZGVmaW5lZCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gYW5kbF9ycihY
ODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRl
OjpGdWxsVGFnVHlwZU51bGwsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIHNldGVfcihYODY6
OmVheCk7CisKKyAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBfXyBsYWJlbCgp
KTsKKworICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAg
ICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgaSArPSAzOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogeworICAg
ICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwor
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsK
KyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4
KTsKKyAgICAgICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAg
ICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2Ojpl
YXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2
OjplY3gpOworICAgICAgICAgICAgX18gc2V0el9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAg
Sm1wU3JjIHdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOworCisgICAgICAgICAgICBfXyBsaW5r
KGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgX18gbW92bF9pMzJyKH5K
U0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKKyAgICAgICAg
ICAgIF9fIGFuZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGNtcGxf
aTMycihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7CisgICAgICAgICAg
ICBfXyBzZXRuZV9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1l
ZGlhdGUsIF9fIGxhYmVsKCkpOworCisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgs
IFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgp
OworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAg
ICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2VudGVyOiB7CisgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhl
bSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKKyAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB0
byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwor
ICAgICAgICAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJl
LgorICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMgKyBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBjb3VudDsgKytqKQorICAgICAgICAgICAgICAgIGVtaXRJbml0UmVnaXN0
ZXIoaik7CisKKyAgICAgICAgICAgIGkrPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9lbnRlcl93aXRoX2FjdGl2YXRpb246IHsKKyAgICAgICAgICAg
IC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBj
b25zdGFudAorICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywg
dG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCisgICAgICAgICAgICAvLyBvYmplY3Qg
bGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCisgICAgICAgICAgICBzaXplX3Qg
Y291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycyArIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVycy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNvdW50OyAr
K2opCisgICAgICAgICAgICAgICAgZW1pdEluaXRSZWdpc3RlcihqKTsKKworICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24pOworICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKKworICAgICAgICAgICAgaSs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycyA9PSAxKSA/IEludGVycHJldGVy
OjpjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMgOiBJbnRlcnByZXRlcjo6Y3RpX29w
X2NyZWF0ZV9hcmd1bWVudHMpOworICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwg
WDg2OjplYXgsIGkpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
WDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxs
LCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVkeCk7CisgICAgICAgICAgICBfXyB0ZXN0
bF9pMzJtKE5lZWRzVGhpc0NvbnZlcnNpb24sIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlw
ZUluZm8ubV9mbGFncyksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7CisKKyAgICAgICAgICAgIGkgKz0gMjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxs
X2NhbGw6IHsKKyAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19wcm9maWxlclJl
ZmVyZW5jZSwgWDg2OjplYXgpOworICAgICAgICAgICAgX18gY21wbF9pMzJtKDAsIFg4Njo6ZWF4
KTsKKyAgICAgICAgICAgIEptcFNyYyBub1Byb2ZpbGVyID0gX18gamUoKTsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQsIDAsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwpOworICAgICAgICAgICAgX18gbGluayhub1By
b2ZpbGVyLCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOiB7Cisg
ICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2UsIFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMybSgwLCBYODY6OmVheCk7CisgICAgICAg
ICAgICBKbXBTcmMgbm9Qcm9maWxlciA9IF9fIGplKCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBY
ODY6OmVheCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X3Byb2ZpbGVfZGlkX2NhbGwpOworICAgICAgICAgICAgX18gbGluayhub1Byb2ZpbGVyLCBfXyBs
YWJlbCgpKTsKKworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICBjYXNlIG9w
X2dldF9ieV9pZF9jaGFpbjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAg
ICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X3Byb3RvX2xpc3Q6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdDoKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xl
bmd0aDoKKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWRfcmVwbGFjZToKKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlv
bjoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgQVNTRVJUKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBtX2NvZGVCbG9j
ay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoY2FsbExp
bmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgpKTsKK30KKwor
Cit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCit7CisgICAgdW5zaWduZWQgam1w
VGFibGVDb3VudCA9IG1fam1wVGFibGUuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBqbXBUYWJsZUNvdW50OyArK2kpCisgICAgICAgIF9fIGxpbmsobV9qbXBUYWJsZVtpXS5m
cm9tLCBtX2xhYmVsc1ttX2ptcFRhYmxlW2ldLnRvXSk7CisgICAgbV9qbXBUYWJsZS5jbGVhcigp
OworfQorCisjZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0UobmFtZSkgXAor
ICAgIGNhc2UgbmFtZTogeyBcCisgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7IFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4
Njo6ZWN4KTsgXAorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFt
ZSk7IFwKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsgXAorICAgICAgICBpICs9IDQ7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9
CisKKyNkZWZpbmUgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VCTEVfRU5UUlko
bmFtZSkgXAorICAgIGNhc2UgbmFtZTogeyBcCisgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwg
X18gbGFiZWwoKSk7IFwKKyAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwo
KSk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAg
ICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsgXAorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsgXAorICAgICAgICBpICs9IDQ7IFwKKyAgICAgICAg
YnJlYWs7IFwKKyAgICB9CisgICAgCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQoreworICAgIHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7Cisg
ICAgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXggPSAwOworCisgICAgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOworICAgIGZvciAo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4o
KTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIC8vIEZJWE1F
OiBlbmFibGUgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyBmb3Igc2xvdyBjYXNlcyB3aGVuIGFwcGxp
Y2FibGUKKyAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworCisgICAgICAgIHVuc2ln
bmVkIGkgPSBpdGVyLT50bzsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIHVuc2lnbmVkIGZpcnN0
VG8gPSBpOworI2VuZGlmCisKKyAgICAgICAgc3dpdGNoIChPcGNvZGVJRCBvcGNvZGVJRCA9IG1f
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uW2ldLnUub3Bjb2RlKSkgeworICAg
ICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczogeworICAgICAgICAgICAgX18gbGluayhpdGVyLT5m
cm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9f
IGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnZlcnRfdGhpcyk7
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9
IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMx
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNy
YzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgaWYgKEpTVmFs
dWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7CisgICAg
ICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207CisgICAgICAgICAgICAgICAg
X18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgX18g
c3VibF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBYODY6OmVheCk7
CisgICAgICAgICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOworICAgICAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4
KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCA0KTsKKyAgICAgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7CisgICAgICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMy
KSkgeworICAgICAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOworICAgICAg
ICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAg
ICAgICAgIF9fIHN1YmxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwg
WDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsK
KyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7
CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQp
OworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFu
ZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgICAgIGlmICh0eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSAmJiB0eXBlcy5zZWNvbmQo
KS5taWdodEJlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0
aE9wU2xvd0Nhc2Uob3BfYWRkLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBpKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKKyAgICAgICAg
ICAgIC8vIFRoZSBzbG93IGNhc2UgdGhhdCBoYW5kbGVzIGFjY2Vzc2VzIHRvIGFycmF5cyAoYmVs
b3cpIG1heSBqdW1wIGJhY2sgdXAgdG8gaGVyZS4gCisgICAgICAgICAgICBKbXBEc3QgYmVnaW5H
ZXRCeVZhbFNsb3cgPSBfXyBsYWJlbCgpOworCisgICAgICAgICAgICBKbXBTcmMgbm90SW1tID0g
aXRlci0+ZnJvbTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVs
KCkpOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Cisg
ICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4Njo6ZWR4KTsKKyAgICAg
ICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwg
NCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9i
eV92YWwpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIF9fIGxpbmsoX18gam1wKCksIG1fbGFiZWxz
W2kgKyA0XSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc2xvdyBjYXNlIHRoYXQgaGFuZGxl
cyBhY2Nlc3NlcyB0byBhcnJheXMgYWJvdmUgdGhlIGZhc3QgY3V0LW9mZi4KKyAgICAgICAgICAg
IC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIGlzIGFuIGFjY2VzcyB0byB0aGUgdmVjdG9yCisgICAg
ICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAg
IF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
TGVuZ3RoKSwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gbGluayhfXyBqYmUoKSwgYmVnaW5H
ZXRCeVZhbFNsb3cpOworCisgICAgICAgICAgICAvLyBva2F5LCBtaXNzZWQgdGhlIGZhc3QgcmVn
aW9uLCBidXQgaXQgaXMgc3RpbGwgaW4gdGhlIHZlY3Rvci4gIEdldCB0aGUgdmFsdWUuCisgICAg
ICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVjeCk7CisgICAg
ICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBsb2FkZWQgaXMgemVybzsgaWYgc28g
d2UgbmVlZCB0byByZXR1cm4gdW5kZWZpbmVkLgorICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2
OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwgYmVnaW5HZXRC
eVZhbFNsb3cpOworICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVjeCwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kLCBYODY6OmVheCk7CisKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3ViOiB7CisgICAgICAgICAgICBjb21w
aWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKG9wX3N1YiwgaXRlciwgaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51
Lm9wZXJhbmQpLCBpKTsKKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIF9fIGxp
bmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBpZiAoZ2V0Q29uc3RhbnRJ
bW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKQorICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwor
ICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KTsKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2xzaGlmdDogeworICAgICAgICAgICAgSm1wU3JjIG5vdEltbTEgPSBpdGVyLT5m
cm9tOworICAgICAgICAgICAgSm1wU3JjIG5vdEltbTIgPSAoKytpdGVyKS0+ZnJvbTsKKyAgICAg
ICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2
OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKKyAgICAg
ICAgICAgIF9fIGxpbmsobm90SW1tMSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBsaW5r
KG5vdEltbTIsIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVh
eCwgMCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKKyAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbHNoaWZ0KTsKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzczogeworICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRD
aGVjayhpKTsKKworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFu
dEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBpZiAoc3JjMmltbSkgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwg
MCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzKTsKKyAgICAg
ICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAg
ICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFi
ZWwoKSk7CisgICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwo
KSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOworICAgICAgICAg
ICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAg
X18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7CisgICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoaXRlciwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCkpCisgICAgICAg
ICAgICAgICAgKytpdGVyOworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKKworICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7CisgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0
KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgOCk7CisgICAgICAgICAgICBKbXBTcmMgY2FsbCA9IGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkKTsKKworICAgICAgICAg
ICAgLy8gVHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0
byByZWNvdmVyIHJlcGF0Y2ggaW5mb3JtYXRpb24uCisgICAgICAgICAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0
dXJuTG9jYXRpb24gPSBjYWxsOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uSW5kZXg7CisKKyAgICAgICAgICAgIGkgKz0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7CisgICAgICAgICAgICAvLyBBcyBm
b3IgdGhlIGhvdCBwYXRoIG9mIGdldF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdlIGNh
biB1c2UgYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9mZnNldAorICAgICAgICAgICAgLy8gc28g
dGhhdCB3ZSBvbmx5IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNv
ZGUgLSB3ZSB0cmFjayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uCisgICAgICAgICAgICAvLyBv
ZiB0aGUgY2FsbCAod2hpY2ggd2UgY2FuIHVzZSB0byBsb29rIHVwIHRoZSByZXBhdGNoIGluZm9y
bWF0aW9uKSwgYnV0IHNob3VsZCBhIGFycmF5LWxlbmd0aCBvcgorICAgICAgICAgICAgLy8gcHJv
dG90eXBlIGFjY2VzcyB0cmFtcG9saW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRv
IGhlcmUuICBUbyBkbyBzbyB3ZSBjYW4gc3VidHJhY3QgYmFjaworICAgICAgICAgICAgLy8gdGhl
IGRpc3RhbmNlIGZyb20gdGhlIGNhbGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2FzZS4KKwor
ICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAg
IF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAg
ICAgICAgICBKbXBEc3QgY29sZFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisjZW5kaWYgICAgICAg
IAorICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9u
W2kgKyAzXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgICAgICAgICAgSm1wU3Jj
IGNhbGwgPSBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZCk7Cisg
ICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVs
cyhjb2xkUGF0aEJlZ2luLCBjYWxsKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2Fs
bCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOworCisgICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhl
IGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4K
KyAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwor
ICAgICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7CisgICAgICAgICAg
ICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKworICAgICAgICAgICAgaSArPSA4
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sb29wX2lm
X2xlc3NlcTogeworICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKKworICAgICAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNB
cmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoc3JjMmlt
bSkgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Cisg
ICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7CisgICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOworICAgICAgICAgICAgICAgIF9fIHRl
c3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgX18gbGluayhfXyBq
bmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKTsKKyAgICAgICAgICAgICAgICBfXyB0ZXN0
bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gam5l
KCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X3ByZV9pbmM6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsK
KyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAg
ICAgICAgX18gc3VibF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0
ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyBsaW5rKG5vdElt
bSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsK
KyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2luYyk7
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgICAgICAg
ICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X3B1dF9ieV92YWw6IHsKKyAgICAgICAgICAgIC8vIE5vcm1hbCBzbG93IGNhc2VzIC0gZWl0aGVy
IGlzIG5vdCBhbiBpbW1lZGlhdGUgaW1tLCBvciBpcyBhbiBhcnJheS4KKyAgICAgICAgICAgIEpt
cFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+
ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBf
XyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2
OjplZHgpOworICAgICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
LCBYODY6OmVjeCwgaSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsK
KyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVjeCwgOCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWwpOworICAgICAgICAgICAgX18gbGluayhfXyBqbXAo
KSwgbV9sYWJlbHNbaSArIDRdKTsKKworICAgICAgICAgICAgLy8gc2xvdyBjYXNlcyBmb3IgaW1t
ZWRpYXRlIGludCBhY2Nlc3NlcyB0byBhcnJheXMKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRl
ciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJv
bSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVk
eCwgNCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA4KTsKKyAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheSk7
CisKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfbG9vcF9pZl90cnVlOiB7CisgICAgICAgICAgICBlbWl0U2xvd1Njcmlw
dENoZWNrKGkpOworCisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKKyAgICAgICAgICAgIF9f
IHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhf
XyBqbmUoKSwgbV9sYWJlbHNbaSArIDIgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIGkgKz0gMzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJlX2RlYzog
eworICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOworICAgICAgICAg
ICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBh
ZGRsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1l
ZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJl
bCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICAgICAgICAgIGkgKz0gMjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7
CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kOworICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRl
TnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlm
IChzcmMyaW1tKSB7CisgICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKKyAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qbGVzcyk7CisgICAgICAgICAgICAgICAgX18gdGVz
dGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGpl
KCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9qbGVzcyk7CisgICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1fbGFiZWxz
W2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25vdDogeworICAg
ICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9f
IHhvcmxfaThyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wsIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9ub3QpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkg
Kz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfamZh
bHNlOiB7CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKKyAgICAgICAgICAgIF9fIHRlc3Rs
X3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhfXyBqZSgp
LCBtX2xhYmVsc1tpICsgMiArIHRhcmdldF0pOyAvLyBpbnZlcnRlZCEKKyAgICAgICAgICAgIGkg
Kz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcG9z
dF9pbmM6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcG9zdF9pbmMpOworICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2JpdG5vdDogeworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsK
KyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRub3QpOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfYml0YW5kOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlmIChnZXRDb25zdGFudEltbWVkaWF0
ZU51bWVyaWNBcmcoc3JjMSkpIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20s
IF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
KFg4Njo6ZWF4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX2JpdGFuZCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVy
aWNBcmcoc3JjMikpIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2JpdGFuZCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZy
b20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVh
bFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWR4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2JpdGFuZCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSArPSA1OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qdHJ1ZTogeworICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9qdHJ1ZSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2
OjplYXgpOworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAy
ICsgdGFyZ2V0XSk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX3Bvc3RfZGVjOiB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18g
bGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRl
ciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVh
eCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Bv
c3RfZGVjKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6
OmVkeCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKKyAgICAgICAgICAgIF9fIGxp
bmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4
Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXR4b3IpOworICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsK
KyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRvcik7CisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9lcTogeworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsK
KyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2VxKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lcTogeworICAgICAg
ICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVk
eCwgNCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25l
cSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VCTEVf
RU5UUlkob3Bfc3RyaWN0ZXEpOworICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19D
QVNFX0RPVUJMRV9FTlRSWShvcF9uc3RyaWN0ZXEpOworICAgICAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6IHsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAg
ICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAg
IF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwg
MCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDRdLnUu
b3BlcmFuZCwgOCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9pbnN0YW5jZW9mKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX21vZDogewor
ICAgICAgICAgICAgSm1wU3JjIG5vdEltbTEgPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgSm1w
U3JjIG5vdEltbTIgPSAoKytpdGVyKS0+ZnJvbTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRl
ciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1t
ZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0
ZShYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBsaW5rKG5vdEltbTEsIF9fIGxhYmVsKCkpOwor
ICAgICAgICAgICAgX18gbGluayhub3RJbW0yLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVt
aXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVjeCwgNCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X21vZCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgICAgIGludCBkc3Qg
PSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNyYzEgPSBp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNyYzIgPSBpbnN0
cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgSlNWYWx1ZSogc3JjMVZhbHVl
ID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpOworICAgICAgICAgICAgSlNW
YWx1ZSogc3JjMlZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpOwor
ICAgICAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChzcmMxVmFsdWUgJiYg
KCh2YWx1ZSA9IEpTSW1tZWRpYXRlOjppbnRWYWx1ZShzcmMxVmFsdWUpKSA+IDApKSB7CisgICAg
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAg
ICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAg
ICAvLyBUaGVyZSBpcyBhbiBleHRyYSBzbG93IGNhc2UgZm9yIChvcDEgKiAtTikgb3IgKC1OICog
b3AyKSwgdG8gY2hlY2sgZm9yIDAgc2luY2UgdGhpcyBzaG91bGQgcHJvZHVjZSBhIHJlc3VsdCBv
ZiAtMC4KKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihz
cmMxLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0
dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbXVsKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNyYzJWYWx1ZSAm
JiAoKHZhbHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzJWYWx1ZSkpID4gMCkpIHsKKyAg
ICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAg
ICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAg
ICAgIC8vIFRoZXJlIGlzIGFuIGV4dHJhIHNsb3cgY2FzZSBmb3IgKG9wMSAqIC1OKSBvciAoLU4g
KiBvcDIpLCB0byBjaGVjayBmb3IgMCBzaW5jZSB0aGlzIHNob3VsZCBwcm9kdWNlIGEgcmVzdWx0
IG9mIC0wLgorICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOworICAgICAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uob3BfbXVsLCBpdGVyLCBkc3QsIHNyYzEs
IHNyYzIsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5k
KSwgaSk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6Cisg
ICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2UoaW5zdHJ1Y3Rpb24gKyBpLCBpLCBpdGVyLCBjYWxsTGlua0luZm9JbmRleCsrLCBvcGNv
ZGVJRCk7CisgICAgICAgICAgICBpICs9IChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyA3IDog
NSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX2pz
bnVtYmVyOiB7CisgICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwg
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICAgICAgKytpdGVyOwor
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKworICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX3RvX2pzbnVtYmVyKTsKKworICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKChpdGVyICsgMSkg
PT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUbyAhPSAoaXRlciArIDEpLT50bywiTm90IGVu
b3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUbyA9PSBpdGVyLT50bywgIlRvbyBtYW55IGp1bXBzIGxpbmtl
ZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKworICAgICAgICBfXyBsaW5rKF9fIGptcCgpLCBt
X2xhYmVsc1tpXSk7CisgICAgfQorCisgICAgQVNTRVJUKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleCA9PSBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgp
KTsKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2stPmNhbGxMaW5r
SW5mb3Muc2l6ZSgpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlKCkKK3sKKyNpZiBF
TkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQorICAgICAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCkt
PmNvZGVCbG9ja1Nsb3QoKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQor
ICAgICAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1w
bGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpKSwgbV9pbnRlcnByZXRlci0+c2Ft
cGxlcigpLT5zYW1wbGVTbG90KCkpOworI2VuZGlmCisKKyAgICAvLyBDb3VsZCB1c2UgYSBwb3Bs
X20sIGJ1dCB3b3VsZCBuZWVkIHRvIG9mZnNldCB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlm
IHNvLgorICAgIF9fIHBvcGxfcihYODY6OmVjeCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKFg4Njo6ZWN4LCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKworICAgIEptcFNyYyBzbG93
UmVnaXN0ZXJGaWxlQ2hlY2s7CisgICAgSm1wRHN0IGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2s7Cisg
ICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICAgICAg
Ly8gSW4gdGhlIGNhc2Ugb2YgYSBmYXN0IGxpbmtlZCBjYWxsLCB3ZSBkbyBub3Qgc2V0IHRoaXMg
dXAgaW4gdGhlIGNhbGxlci4KKyAgICAgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQ+KG1fY29kZUJsb2NrKSwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2sgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisKKyAgICAgICAgZW1pdEdl
dENUSVBhcmFtKENUSV9BUkdTX3JlZ2lzdGVyRmlsZSwgWDg2OjplYXgpOworICAgICAgICBfXyBs
ZWFsX21yKG1fY29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
LCBYODY6OmVkaSwgWDg2OjplZHgpOworICAgICAgICBfXyBjbXBsX21yKEZJRUxEX09GRlNFVChS
ZWdpc3RlckZpbGUsIG1fZW5kKSwgWDg2OjplYXgsIFg4Njo6ZWR4KTsKKyAgICAgICAgc2xvd1Jl
Z2lzdGVyRmlsZUNoZWNrID0gX18gamcoKTsKKyAgICAgICAgYWZ0ZXJSZWdpc3RlckZpbGVDaGVj
ayA9IF9fIGxhYmVsKCk7CisgICAgfQorCisgICAgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwor
ICAgIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKKyAgICBwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpOworCisgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsK
KyAgICAgICAgX18gbGluayhzbG93UmVnaXN0ZXJGaWxlQ2hlY2ssIF9fIGxhYmVsKCkpOworICAg
ICAgICBlbWl0Q1RJQ2FsbCgwLCBJbnRlcnByZXRlcjo6Y3RpX3JlZ2lzdGVyX2ZpbGVfY2hlY2sp
OworICAgICAgICBKbXBTcmMgYmFja1RvQm9keSA9IF9fIGptcCgpOworICAgICAgICBfXyBsaW5r
KGJhY2tUb0JvZHksIGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2spOworICAgIH0KKworICAgIEFTU0VS
VChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJs
ZUNvcHkoKTsKKworICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBp
biBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN3aXRjaFJl
Y29yZCByZWNvcmQgPSBtX3N3aXRjaGVzW2ldOworICAgICAgICB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4ID0gcmVjb3JkLmJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgaWYgKHJlY29yZC50eXBlICE9
IFN3aXRjaFJlY29yZDo6U3RyaW5nKSB7CisgICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5cGUg
PT0gU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUgfHwgcmVjb3JkLnR5cGUgPT0gU3dpdGNoUmVjb3Jk
OjpDaGFyYWN0ZXIpOyAKKyAgICAgICAgICAgIEFTU0VSVChyZWNvcmQuanVtcFRhYmxlLnNpbXBs
ZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkgPT0gcmVjb3JkLmp1bXBUYWJsZS5zaW1w
bGVKdW1wVGFibGUtPmN0aU9mZnNldHMuc2l6ZSgpKTsKKworICAgICAgICAgICAgcmVjb3JkLmp1
bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBfXyBnZXRSZWxvY2F0ZWRBZGRy
ZXNzKGNvZGUsIG1fbGFiZWxzW2J5dGVjb2RlSW5kZXggKyAzICsgcmVjb3JkLmRlZmF1bHRPZmZz
ZXRdKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlY29yZC5qdW1w
VGFibGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1w
VGFibGUtPmJyYW5jaE9mZnNldHNbal07CisgICAgICAgICAgICAgICAgcmVjb3JkLmp1bXBUYWJs
ZS5zaW1wbGVKdW1wVGFibGUtPmN0aU9mZnNldHNbal0gPSBvZmZzZXQgPyBfXyBnZXRSZWxvY2F0
ZWRBZGRyZXNzKGNvZGUsIG1fbGFiZWxzW2J5dGVjb2RlSW5kZXggKyAzICsgb2Zmc2V0XSkgOiBy
ZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZyk7CisKKyAgICAgICAgICAgIHJlY29yZC5qdW1wVGFibGUuc3Ry
aW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBt
X2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CisKKyAg
ICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVu
ZCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5lbmQoKTsg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZz
ZXRUYWJsZTo6aXRlcmF0b3IgaXQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+
b2Zmc2V0VGFibGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gaXQtPnNlY29uZC5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgaXQtPnNlY29uZC5jdGlPZmZzZXQgPSBvZmZzZXQgPyBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNz
KGNvZGUsIG1fbGFiZWxzW2J5dGVjb2RlSW5kZXggKyAzICsgb2Zmc2V0XSkgOiByZWNvcmQuanVt
cFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoVmVjdG9yPEhhbmRsZXJJbmZvPjo6aXRlcmF0b3IgaXRl
ciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVycy5iZWdpbigpOyBpdGVyICE9IG1fY29k
ZUJsb2NrLT5leGNlcHRpb25IYW5kbGVycy5lbmQoKTsgKytpdGVyKQorICAgICAgICAgaXRlci0+
bmF0aXZlQ29kZSA9IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbaXRlci0+
dGFyZ2V0XSk7CisKKyAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9
IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAg
ICAgaWYgKGl0ZXItPnRvKQorICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGl0
ZXItPmZyb20sIGl0ZXItPnRvKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmN0aVJldHVybkFkZHJl
c3NWUENNYXAuYWRkKF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgaXRlci0+ZnJvbSksIGl0
ZXItPmJ5dGVjb2RlSW5kZXgpOworICAgIH0KKworICAgIC8vIExpbmsgYWJzb2x1dGUgYWRkcmVz
c2VzIGZvciBqc3IKKyAgICBmb3IgKFZlY3RvcjxKU1JJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1f
anNyU2l0ZXMuYmVnaW4oKTsgaXRlciAhPSBtX2pzclNpdGVzLmVuZCgpOyArK2l0ZXIpCisgICAg
ICAgIFg4NkFzc2VtYmxlcjo6bGlua0Fic29sdXRlQWRkcmVzcyhjb2RlLCBpdGVyLT5hZGRyUG9z
aXRpb24sIGl0ZXItPnRhcmdldCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
b2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zW2ldOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IFg4NkFz
c2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX3Byb3BlcnR5QWNjZXNzQ29tcGls
YXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8uaG90UGF0aEJl
Z2luID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fcHJvcGVydHlB
Y2Nlc3NDb21waWxhdGlvbkluZm9baV0uaG90UGF0aEJlZ2luKTsKKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKTsgKytp
KSB7CisgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0lu
Zm9zW2ldOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IFg4NkFzc2VtYmxlcjo6
Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0g
WDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aEJlZ2luKTsKKyAgICAgICAgaW5mby5ob3RQYXRo
T3RoZXIgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3Ry
dWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoT3RoZXIpOworICAgICAgICBpbmZv
LmNvbGRQYXRoT3RoZXIgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwg
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jb2xkUGF0aE90aGVyKTsKKyAg
ICB9CisKKyAgICBtX2NvZGVCbG9jay0+Y3RpQ29kZSA9IGNvZGU7Cit9CisKK3ZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmKFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2Fj
aGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIC8vIENoZWNrIGVheCBpcyBh
biBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1t
ZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczEgPSBf
XyBqbmUoKTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IGNoZWNrU3RydWN0dXJlKFg4Njo6
ZWF4LCBzdHJ1Y3R1cmUpOworCisgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9m
ZnNldAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3Rv
cmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQg
KiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIHJldCgpOwor
CisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisKKyAgICBYODZBc3NlbWJs
ZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50
ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOworICAgIAorICAgIG1fY29kZUJs
b2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7CisgICAg
CisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29kZSk7
Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZz
ZXQsIHZvaWQqIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworI2lmIFVT
RShDVElfUkVQQVRDSF9QSUMpCisgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVC
bG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisKKyAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9i
eV9pZF9nZW5lcmljLgorICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFk
ZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkX3Byb3RvX2xpc3QpKTsKKworICAgIC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0IGRlZmluaXRl
bHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMgcmVmZXJlbmNp
bmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcworICAgIC8vIHJlZmVyZW5jaW5nIHRoZSBwcm90b3R5cGUg
b2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3MgdGFibGUgbmljZSBhbmQgZWFy
bHkhKQorICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOworICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Q
cm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOworICAgIF9f
IG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2Ojpl
ZHgpOworCisgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0
dXJlLgorICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgs
IHN0cnVjdHVyZSk7CisKKyAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVj
dHVyZSBoYWQgbm90IGNoYW5nZWQuCisgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJl
QWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKKyAgICBfXyBjbXBsX2kzMm0o
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4ocHJvdG90eXBlU3RydWN0dXJlKSwgcHJvdG90eXBl
U3RydWN0dXJlQWRkcmVzcyk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBfXyBqbmUoKTsK
KworICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKKyAgICBfXyBtb3Zs
X21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7
CisKKyAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOworCisgICAgdm9pZCogY29kZSA9IF9f
IGV4ZWN1dGFibGVDb3B5KCk7CisKKyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KKyAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGw7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHNsb3dD
YXNlQmVnaW4pOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCBz
bG93Q2FzZUJlZ2luKTsKKworICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhv
dCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVz
dCBmb3IgdXMuCisgICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5
TWFwT2Zmc2V0OworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOworCisgICAgLy8gVHJhY2sgdGhlIHN0dWIg
d2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgorICAgIGlu
Zm8uc3R1YlJvdXRpbmUgPSBjb2RlOworCisgICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
KyAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu
Zm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsK
KyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUp
OworI2Vsc2UKKyAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4aXN0cyAo
aWYgdGhpcyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEgU3RydWN0
dXJlIHRoYXQgaXMKKyAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVjdCAtIGxl
dCdzIHNwZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkKKyAgICBK
U09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxv
b2t1cChjYWxsRnJhbWUpKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9y
YWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKKyAgICBfXyBtb3ZsX21yKHN0
YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKKworICAg
IC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBf
XyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgSm1wU3Jj
IGZhaWx1cmVDYXNlczEgPSBfXyBqbmUoKTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IGNo
ZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOworCisgICAgLy8gQ2hlY2sgdGhlIHBy
b3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgorICAgIFN0cnVjdHVy
ZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVy
ZSk7CisgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlw
ZVN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOworICAgIEptcFNyYyBmYWls
dXJlQ2FzZXMzID0gX18gam5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGly
ZWN0T2Zmc2V0CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSop
LCBYODY6OmVkeCwgWDg2OjplYXgpOworCisgICAgX18gcmV0KCk7CisKKyAgICB2b2lkKiBjb2Rl
ID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBm
YWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9wcm90b19mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZh
aWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3Bf
Z2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFp
bHVyZUNhc2VzMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfcHJvdG9fZmFpbCkpOworCisgICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKKworICAgIGN0aVJlcGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOworI2VuZGlmCit9CisKKyNpZiBVU0Uo
Q1RJX1JFUEFUQ0hfUElDKQordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0
KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0KQoreworICAgIEptcFNyYyBmYWlsdXJlQ2Fz
ZSA9IGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOworICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6
OmVheCk7CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBY
ODY6OmVheCwgWDg2OjplYXgpOworICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7CisKKyAg
ICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKyAgICBBU1NFUlQoY29kZSk7CisK
KyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAgICB2b2lkKiBs
YXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXgg
LSAxXS5zdHViUm91dGluZTsKKyAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQorICAgICAgICBsYXN0
UHJvdG9CZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7CisKKyAgICBYODZB
c3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2UsIGxhc3RQcm90b0JlZ2luKTsKKworICAg
IC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBv
aW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRy
X3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90
UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CisgICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHN1Y2Nlc3NEZXN0KSk7CisKKyAgICBzdHJ1Y3R1cmUtPnJlZigpOworICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWNoZWRPZmZzZXQsIGNvZGUsIHN0
cnVjdHVyZSk7CisKKyAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgorICAgIGludHB0cl90
IGptcExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBh
dGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7CisgICAgWDg2
QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKK30KKwor
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3Ry
dWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVy
ZSogcHJvdG90eXBlU3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKK3sKKyAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4aXN0
cyAoaWYgdGhpcyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEgU3Ry
dWN0dXJlIHRoYXQgaXMKKyAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVjdCAt
IGxldCdzIHNwZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkKKyAg
ICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChjYWxsRnJhbWUpKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlT
dG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKKyAgICBfXyBtb3ZsX21y
KHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKKwor
ICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAg
ICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1
cmUpOworCisgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFk
IG5vdCBjaGFuZ2VkLgorICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3Mg
PSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7CisgICAgX18gY21wbF9pMzJtKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVy
ZUFkZHJlc3MpOworICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7CisKKyAgICAv
LyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0CisgICAgX18gbW92bF9tcihjYWNo
ZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOworCisgICAg
Sm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRh
YmxlQ29weSgpOworCisgICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
CisgICAgdm9pZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2Rl
LCBmYWlsdXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5r
KGNvZGUsIGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKKworICAgIC8vIE9uIHN1Y2Nl
c3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwg
cGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRyX3Qgc3VjY2Vzc0Rl
c3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSAr
IHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CisgICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0
KSk7CisKKyAgICBzdHJ1Y3R1cmUtPnJlZigpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZS0+cmVm
KCk7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWNo
ZWRPZmZzZXQsIGNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKKworICAgIC8v
IEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCisgICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hP
ZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hC
cmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVu
dEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXpl
X3QgY291bnQsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIEFTU0VSVChjb3VudCk7CisgICAgCisgICAgVmVjdG9yPEptcFNyYz4gYnVja2V0c09mRmFp
bDsKKworICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVy
ZS4KKyAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3Ry
dWN0dXJlKSk7CisKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Cisg
ICAgUmVmUHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5oZWFkKCk7CisgICAg
SlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1
cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKKyAgICAgICAgY3VyclN0cnVjdHVy
ZSA9IGNoYWluRW50cmllc1tpXS5nZXQoKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgcHJvdG90
eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCisgICAgICAgIFN0cnVjdHVy
ZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVy
ZSk7CisgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihjdXJy
U3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7CisgICAgICAgIGJ1Y2tldHNP
ZkZhaWwuYXBwZW5kKF9fIGpuZSgpKTsKKyAgICB9CisgICAgQVNTRVJUKHByb3RvT2JqZWN0KTsK
KworICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmpl
Y3QtPm1fcHJvcGVydHlTdG9yYWdlOworICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+
KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOworICAgIF9fIG1vdmxfbXIoY2FjaGVk
T2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICBKbXBT
cmMgc3VjY2VzcyA9IF9fIGptcCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVD
b3B5KCk7CisKKyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUg
ZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAg
ICB2b2lkKiBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YnVja2V0c09mRmFpbC5zaXplKCk7ICsraSkKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGJ1Y2tldHNPZkZhaWxbaV0sIGxhc3RQcm90b0JlZ2luKTsKKworICAgIC8vIE9uIHN1Y2Nl
c3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwg
cGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRyX3Qgc3VjY2Vzc0Rl
c3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSAr
IHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CisgICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0
KSk7CisKKyAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3
aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCisgICAgc3RydWN0dXJlLT5yZWYoKTsKKyAgICBjaGFpbi0+
cmVmKCk7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChj
YWNoZWRPZmZzZXQsIGNvZGUsIHN0cnVjdHVyZSwgY2hhaW4pOworCisgICAgLy8gRmluYWxseSBy
ZXBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KKyAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5
SWRCcmFuY2hUb1Nsb3dDYXNlOworICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNl
dChqbXBMb2NhdGlvbiwgY29kZSk7Cit9CisjZW5kaWYKKwordm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVz
cywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisjaWYgVVNFKENUSV9SRVBBVENIX1BJQykKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4g
b25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCisgICAgY3Rp
UmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOworCisg
ICAgQVNTRVJUKGNvdW50KTsKKyAgICAKKyAgICBWZWN0b3I8Sm1wU3JjPiBidWNrZXRzT2ZGYWls
OworCisgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJl
LgorICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1
Y3R1cmUpKTsKKworICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAg
ICBSZWZQdHI8U3RydWN0dXJlPiogY2hhaW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKKyAgICBK
U09iamVjdCogcHJvdG9PYmplY3QgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CisgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVy
ZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOworICAgICAgICBjdXJyU3RydWN0dXJl
ID0gY2hhaW5FbnRyaWVzW2ldLmdldCgpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5
cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KKyAgICAgICAgU3RydWN0dXJl
KiogcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJl
KTsKKyAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJT
dHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKKyAgICAgICAgYnVja2V0c09m
RmFpbC5hcHBlbmQoX18gam5lKCkpOworICAgIH0KKyAgICBBU1NFUlQocHJvdG9PYmplY3QpOwor
CisgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVj
dC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CisgICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4o
cHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7CisgICAgX18gbW92bF9tcihjYWNoZWRP
ZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOworICAgIEptcFNy
YyBzdWNjZXNzID0gX18gam1wKCk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNv
cHkoKTsKKworICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgorICAg
IHZvaWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWNrZXRzT2ZGYWlsLnNpemUoKTsgKytpKQorICAg
ICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYnVja2V0c09mRmFpbFtpXSwgc2xvd0Nhc2VC
ZWdpbik7CisKKyAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2gg
Y29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVz
LgorICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
aW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNl
dDsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKKworICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUg
Y3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KKyAgICBpbmZvLnN0dWJS
b3V0aW5lID0gY29kZTsKKworICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93
IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCisgICAgaW50
cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBh
dGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7CisgICAgWDg2
QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKKyNlbHNl
CisgICAgQVNTRVJUKGNvdW50KTsKKyAgICAKKyAgICBWZWN0b3I8Sm1wU3JjPiBidWNrZXRzT2ZG
YWlsOworCisgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0
dXJlLgorICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsK
KyAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7CisgICAgYnVja2V0c09mRmFpbC5h
cHBlbmQoY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSkpOworCisgICAgU3RydWN0
dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIFJlZlB0cjxTdHJ1Y3R1cmU+KiBj
aGFpbkVudHJpZXMgPSBjaGFpbi0+aGVhZCgpOworICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
cHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAo
Y2FsbEZyYW1lKSk7CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjaGFpbkVudHJpZXNbaV0uZ2V0
KCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUg
aGFkIG5vdCBjaGFuZ2VkLgorICAgICAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVB
ZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOworICAgICAgICBfXyBjbXBsX2kz
Mm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY3VyclN0cnVjdHVyZSksIHByb3RvdHlwZVN0
cnVjdHVyZUFkZHJlc3MpOworICAgICAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7
CisgICAgfQorICAgIEFTU0VSVChwcm90b09iamVjdCk7CisKKyAgICBQcm9wZXJ0eVN0b3JhZ2Uq
IHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsK
KyAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSks
IFg4Njo6ZWR4KTsKKyAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVl
KiksIFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgX18gcmV0KCk7CisKKyAgICB2b2lkKiBjb2Rl
ID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
dWNrZXRzT2ZGYWlsLnNpemUoKTsgKytpKQorICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29k
ZSwgYnVja2V0c09mRmFpbFtpXSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOworCisgICAgbV9jb2RlQmxvY2stPmdldFN0
dWJJbmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKKworICAgIGN0aVJlcGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOworI2VuZGlmCit9CisK
K3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRSZXBsYWNlKFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIC8v
IENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBfXyB0
ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGZh
aWx1cmVDYXNlczEgPSBfXyBqbmUoKTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IGNoZWNr
U3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOworCisgICAgLy8gY2hlY2tzIG91dCBva2F5
ISAtIHB1dERpcmVjdE9mZnNldAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0
LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9y
bShYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgpOwor
ICAgIF9fIHJldCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Cisg
ICAgCisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKKyAg
ICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOworCisgICAgbV9j
b2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsK
KyAgICAKKyAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBj
b2RlKTsKK30KKworZXh0ZXJuICJDIiB7CisKKyAgICBzdGF0aWMgSlNPYmplY3QqIHJlc2l6ZVBy
b3BlcnR5U3RvcmFnZShKU09iamVjdCogYmFzZU9iamVjdCwgc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgYmFzZU9iamVjdC0+YWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2VJbmxpbmUob2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgICAgIHJldHVybiBiYXNlT2JqZWN0
OworICAgIH0KKworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgdHJhbnNpdGlvbldpbGxOZWVkU3Rv
cmFnZVJlYWxsb2MoU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlKQoreworICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5
KCkgIT0gbmV3U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOworfQorCit2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWZWN0b3I8Sm1w
U3JjLCAxNj4gZmFpbHVyZUNhc2VzOworICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2Yg
dGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdN
YXNrLCBYODY6OmVheCk7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7CisgICAg
X18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KG9sZFN0cnVjdHVyZSksIEZJ
RUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOworICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoX18gam5lKCkpOworICAgIFZlY3RvcjxKbXBTcmM+IHN1Y2Nlc3NDYXNlczsK
KworICAgIC8vICBlY3ggPSBiYXNlT2JqZWN0CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
SlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgLy8gcHJvdG8o
ZWN4KSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGUoKQorICAgIF9fIGNtcGxf
aTMybShPYmplY3RUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJ
RUxEX09GRlNFVChUeXBlSW5mbywgbV90eXBlKSwgWDg2OjplY3gpOworICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoX18gam5lKCkpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVy
ZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOworICAgIAorICAgIC8vIGVjeCA9
IGJhc2VPYmplY3QtPm1fc3RydWN0dXJlCisgICAgZm9yIChSZWZQdHI8U3RydWN0dXJlPiogaXQg
PSBjaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKKyAgICAgICAgLy8gbnVsbCBjaGVjayB0aGUg
cHJvdG90eXBlCisgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoanNOdWxsKCkpLCBYODY6
OmVjeCk7CisgICAgICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoX18gamUoKSk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZSBpZAorICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4oaXQtPmdldCgpKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmUpLCBYODY6OmVjeCk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkp
OworICAgICAgICAKKyAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0
cnVjdHVyZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgICAgIF9fIGNtcGxfaTMybShPYmpl
Y3RUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJRUxEX09GRlNF
VChUeXBlSW5mbywgbV90eXBlKSwgWDg2OjplY3gpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKF9fIGpuZSgpKTsKKyAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJl
LCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgfQorCisgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN1
Y2Nlc3NDYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgX18gbGluayhzdWNjZXNzQ2FzZXNbaV0s
IF9fIGxhYmVsKCkpOworCisgICAgSm1wU3JjIGNhbGxUYXJnZXQ7CisKKyAgICAvLyBlbWl0IGEg
Y2FsbCBvbmx5IGlmIHN0b3JhZ2UgcmVhbGxvYyBpcyBuZWVkZWQKKyAgICBpZiAodHJhbnNpdGlv
bldpbGxOZWVkU3RvcmFnZVJlYWxsb2Mob2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKSB7Cisg
ICAgICAgIF9fIHB1c2hsX3IoWDg2OjplZHgpOworICAgICAgICBfXyBwdXNobF9pMzIobmV3U3Ry
dWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgX18gcHVzaGxfaTMy
KG9sZFN0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIF9fIHB1
c2hsX3IoWDg2OjplYXgpOworICAgICAgICBjYWxsVGFyZ2V0ID0gX18gY2FsbCgpOworICAgICAg
ICBfXyBhZGRsX2kzMnIoMyAqIHNpemVvZih2b2lkKiksIFg4Njo6ZXNwKTsKKyAgICAgICAgX18g
cG9wbF9yKFg4Njo6ZWR4KTsKKyAgICB9CisKKyAgICAvLyBBc3N1bWVzIG1fcmVmQ291bnQgY2Fu
IGJlIGRlY3JlbWVudGVkIGVhc2lseSwgcmVmY291bnQgZGVjcmVtZW50IGlzIHNhZmUgYXMgCisg
ICAgLy8gY29kZWJsb2NrIHNob3VsZCBlbnN1cmUgb2xkU3RydWN0dXJlLT5tX3JlZkNvdW50ID4g
MAorICAgIF9fIHN1YmxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9sZFN0cnVjdHVy
ZSkpOworICAgIF9fIGFkZGxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5ld1N0cnVj
dHVyZSkpOworICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihuZXdT
dHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsK
KworICAgIC8vIHdyaXRlIHRoZSB2YWx1ZQorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpT
T2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18g
bW92bF9ybShYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2Ojpl
YXgpOworCisgICAgX18gcmV0KCk7CisgICAgCisgICAgSm1wU3JjIGZhaWx1cmVKdW1wOworICAg
IGlmIChmYWlsdXJlQ2FzZXMuc2l6ZSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmYWlsdXJlQ2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBfXyBsaW5rKGZhaWx1
cmVDYXNlc1tpXSwgX18gbGFiZWwoKSk7CisgICAgICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVy
ZW5jZUZvclRyYW1wb2xpbmUoKTsKKyAgICAgICAgZmFpbHVyZUp1bXAgPSBfXyBqbXAoKTsKKyAg
ICB9CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKworICAgIGlmIChm
YWlsdXJlQ2FzZXMuc2l6ZSgpKQorICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFp
bHVyZUp1bXAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0
X2J5X2lkX2ZhaWwpKTsKKworICAgIGlmICh0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxv
YyhvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkpCisgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBjYWxsVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihyZXNpemVQcm9wZXJ0
eVN0b3JhZ2UpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRk
cmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOworICAgIAorICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoKQoreworICAgIC8vICgxKSBUaGUgZmlyc3QgZnVu
Y3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGFycmF5IGxlbmd0aAorICAg
IAorICAgIC8vIENoZWNrIGVheCBpcyBhbiBhcnJheQorICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1l
ZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgYXJyYXlfZmFpbHVyZUNhc2Vz
MSA9IF9fIGpuZSgpOworICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
PihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgpOworICAgIEptcFNyYyBh
cnJheV9mYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkh
IC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQorICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCksIFg4Njo6ZWF4LCBY
ODY6OmVheCk7CisKKyAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUlu
dCwgWDg2OjplYXgpOworICAgIEptcFNyYyBhcnJheV9mYWlsdXJlQ2FzZXMzID0gX18gamEoKTsK
KworICAgIF9fIGFkZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBhZGRsX2k4cigx
LCBYODY6OmVheCk7CisgICAgCisgICAgX18gcmV0KCk7CisKKyAgICAvLyAoMikgVGhlIHNlY29u
ZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxlbmd0
aAorICAgIAorICAgIEptcERzdCBzdHJpbmdMZW5ndGhCZWdpbiA9IF9fIGFsaWduKDE2KTsKKwor
ICAgIC8vIENoZWNrIGVheCBpcyBhIHN0cmluZworICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlh
dGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3RyaW5nX2ZhaWx1cmVDYXNlczEg
PSBfXyBqbmUoKTsKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
bV9pbnRlcnByZXRlci0+bV9qc1N0cmluZ1ZwdHIpLCBYODY6OmVheCk7CisgICAgSm1wU3JjIHN0
cmluZ19mYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkh
IC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4KKyAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU1N0cmluZywgbV92YWx1ZSkgKyBGSUVMRF9PRkZTRVQoVVN0cmluZywgbV9yZXAp
LCBYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFVTdHJp
bmc6OlJlcCwgbGVuKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKworICAgIF9fIGNtcGxfaTMycihK
U0ltbWVkaWF0ZTo6bWF4SW1tZWRpYXRlSW50LCBYODY6OmVheCk7CisgICAgSm1wU3JjIHN0cmlu
Z19mYWlsdXJlQ2FzZXMzID0gX18gamEoKTsKKworICAgIF9fIGFkZGxfcnIoWDg2OjplYXgsIFg4
Njo6ZWF4KTsKKyAgICBfXyBhZGRsX2k4cigxLCBYODY6OmVheCk7CisgICAgCisgICAgX18gcmV0
KCk7CisKKyAgICAvLyAoMykgVHJhbXBvbGluZXMgZm9yIHRoZSBzbG93IGNhc2VzIG9mIG9wX2Nh
bGwgLyBvcF9jYWxsX2V2YWwgLyBvcF9jb25zdHJ1Y3QuCisgICAgCisgICAgSm1wRHN0IHZpcnR1
YWxDYWxsUHJlTGlua0JlZ2luID0gX18gYWxpZ24oMTYpOworCisgICAgLy8gTG9hZCB0aGUgY2Fs
bGVlIENvZGVCbG9jayogaW50byBlYXgKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Z1
bmN0aW9uLCBtX2JvZHkpLCBYODY6OmVjeCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKEZ1bmN0aW9uQm9keU5vZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7
CisgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgaGFzQ29k
ZUJsb2NrMSA9IF9fIGpuZSgpOworICAgIF9fIHBvcGxfcihYODY6OmVieCk7CisgICAgX18gcmVz
dG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBD
VElfQVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjEgPSBfXyBjYWxs
KCk7CisgICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7CisgICAgZW1pdEdldENUSUFyZyg4
LCBYODY6OmVkeCk7CisgICAgX18gcHVzaGxfcihYODY6OmVieCk7CisgICAgX18gbGluayhoYXND
b2RlQmxvY2sxLCBfXyBsYWJlbCgpKTsKKworICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMg
Y2FsbGVlIGFyaXR5LgorICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChDb2Rl
QmxvY2ssIG51bVBhcmFtZXRlcnMpLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGFyaXR5Q2hlY2tP
a2F5MSA9IF9fIGplKCk7CisgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWJ4LCA0KTsKKyAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7CisgICAg
X18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6
ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxsQXJpdHlDaGVjazEgPSBf
XyBjYWxsKCk7CisgICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOworICAgIGVtaXRH
ZXRDVElBcmcoMCwgWDg2OjplY3gpOworICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOwor
ICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOworICAgIF9fIGxpbmsoYXJpdHlDaGVja09rYXkxLCBf
XyBsYWJlbCgpKTsKKworICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CisK
KyAgICBfXyBwb3BsX3IoWDg2OjplYngpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQp
OworICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJh
bShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbERvbnRMYXp5
TGlua0NhbGwgPSBfXyBjYWxsKCk7CisgICAgX18gcHVzaGxfcihYODY6OmVieCk7CisKKyAgICBf
XyBqbXBfcihYODY6OmVheCk7CisKKyAgICBKbXBEc3QgdmlydHVhbENhbGxMaW5rQmVnaW4gPSBf
XyBhbGlnbigxNik7CisKKyAgICAvLyBMb2FkIHRoZSBjYWxsZWUgQ29kZUJsb2NrKiBpbnRvIGVh
eAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fYm9keSksIFg4Njo6
ZWN4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoRnVuY3Rpb25Cb2R5
Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyB0ZXN0bF9ycihYODY6
OmVheCwgWDg2OjplYXgpOworICAgIEptcFNyYyBoYXNDb2RlQmxvY2syID0gX18gam5lKCk7Cisg
ICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2Uo
KTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Cisg
ICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMiA9IF9fIGNhbGwoKTsKKyAgICBlbWl0R2V0Q1RJQXJn
KDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKKyAgICBfXyBw
dXNobF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyBsaW5rKGhhc0NvZGVCbG9jazIsIF9fIGxhYmVsKCkp
OworCisgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAgX18g
Y21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKENvZGVCbG9jaywgbnVtUGFyYW1ldGVycyks
IFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkyID0gX18gamUoKTsKKyAgICBf
XyBwb3BsX3IoWDg2OjplYngpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOworICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDEyKTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFt
ZSk7CisgICAgSm1wU3JjIGNhbGxBcml0eUNoZWNrMiA9IF9fIGNhbGwoKTsKKyAgICBfXyBtb3Zs
X3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7CisgICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7
CisgICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7CisgICAgX18gcHVzaGxfcihYODY6OmVi
eCk7CisgICAgX18gbGluayhhcml0eUNoZWNrT2theTIsIF9fIGxhYmVsKCkpOworCisgICAgY29t
cGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKKworICAgIF9fIHBvcGxfcihYODY6OmVi
eCk7CisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVieCwgNCk7CisgICAgX18gcmVzdG9yZUFyZ3Vt
ZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19j
YWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxsTGF6eUxpbmtDYWxsID0gX18gY2FsbCgpOworICAg
IF9fIHB1c2hsX3IoWDg2OjplYngpOworCisgICAgX18gam1wX3IoWDg2OjplYXgpOworCisgICAg
Sm1wRHN0IHZpcnR1YWxDYWxsQmVnaW4gPSBfXyBhbGlnbigxNik7CisKKyAgICAvLyBMb2FkIHRo
ZSBjYWxsZWUgQ29kZUJsb2NrKiBpbnRvIGVheAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEpTRnVuY3Rpb24sIG1fYm9keSksIFg4Njo6ZWN4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoRnVuY3Rpb25Cb2R5Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgsIFg4Njo6
ZWF4KTsKKyAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgIEptcFNyYyBo
YXNDb2RlQmxvY2szID0gX18gam5lKCk7CisgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBf
XyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2Ojpl
ZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMyA9IF9f
IGNhbGwoKTsKKyAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0R2V0Q1RJ
QXJnKDgsIFg4Njo6ZWR4KTsKKyAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyBsaW5r
KGhhc0NvZGVCbG9jazMsIF9fIGxhYmVsKCkpOworCisgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0
Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VU
KENvZGVCbG9jaywgbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgYXJpdHlD
aGVja09rYXkzID0gX18gamUoKTsKKyAgICBfXyBwb3BsX3IoWDg2OjplYngpOworICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplYngsIDQpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDEyKTsK
KyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0o
WDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGxBcml0eUNoZWNr
MyA9IF9fIGNhbGwoKTsKKyAgICBfXyBtb3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7CisgICAg
ZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7CisgICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVk
eCk7CisgICAgX18gcHVzaGxfcihYODY6OmVieCk7CisgICAgX18gbGluayhhcml0eUNoZWNrT2th
eTMsIF9fIGxhYmVsKCkpOworCisgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUo
KTsKKworICAgIC8vIGxvYWQgY3RpQ29kZSBmcm9tIHRoZSBuZXcgY29kZUJsb2NrLgorICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKENvZGVCbG9jaywgY3RpQ29kZSksIFg4Njo6ZWF4LCBYODY6
OmVheCk7CisKKyAgICBfXyBqbXBfcihYODY6OmVheCk7CisKKyAgICAvLyBBbGwgdHJhbXBvbGlu
ZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhl
IHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KKworICAgIHZvaWQqIGNvZGUgPSBfXyBl
eGVjdXRhYmxlQ29weSgpOworCisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFycmF5X2Zh
aWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3Bf
Z2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYXJy
YXlfZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2Rl
LCBhcnJheV9mYWlsdXJlQ2FzZXMzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRl
cjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5r
KGNvZGUsIHN0cmluZ19mYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOworICAgIFg4NkFzc2VtYmxl
cjo6bGluayhjb2RlLCBzdHJpbmdfZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKKyAgICBYODZB
c3NlbWJsZXI6OmxpbmsoY29kZSwgc3RyaW5nX2ZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Cisg
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxBcml0eUNoZWNrMSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKKyAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbEFyaXR5Q2hlY2syLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOworICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBjYWxsQXJpdHlDaGVjazMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7CisgICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIGNhbGxKU0Z1bmN0aW9uMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
SW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKKyAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgY2FsbEpTRnVuY3Rpb24yLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOworICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBjYWxsSlNGdW5jdGlvbjMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGNhbGxEb250TGF6eUxpbmtDYWxsLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnBy
ZXRlcjo6Y3RpX3ZtX2RvbnRMYXp5TGlua0NhbGwpKTsKKyAgICBYODZBc3NlbWJsZXI6Omxpbmso
Y29kZSwgY2FsbExhenlMaW5rQ2FsbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0
ZXI6OmN0aV92bV9sYXp5TGlua0NhbGwpKTsKKworICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpQXJy
YXlMZW5ndGhUcmFtcG9saW5lID0gY29kZTsKKyAgICBtX2ludGVycHJldGVyLT5tX2N0aVN0cmlu
Z0xlbmd0aFRyYW1wb2xpbmUgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29k
ZSwgc3RyaW5nTGVuZ3RoQmVnaW4pOworICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENh
bGxQcmVMaW5rID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZpcnR1
YWxDYWxsUHJlTGlua0JlZ2luKTsKKyAgICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxs
TGluayA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0dWFsQ2Fs
bExpbmtCZWdpbik7CisgICAgbV9pbnRlcnByZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbCA9IFg4NkFz
c2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0dWFsQ2FsbEJlZ2luKTsKK30K
Kwordm9pZCBKSVQ6OmZyZWVDVElNYWNoaW5lVHJhbXBvbGluZXMoSW50ZXJwcmV0ZXIqIGludGVy
cHJldGVyKQoreworICAgIFdURjo6ZmFzdEZyZWVFeGVjdXRhYmxlKGludGVycHJldGVyLT5tX2N0
aUFycmF5TGVuZ3RoVHJhbXBvbGluZSk7Cit9CisKK3ZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxm
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hl
ZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
aW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisKKyAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8g
Y3RpX29wX2dldF9ieV9pZF9nZW5lcmljLgorICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBJ
bnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFu
eXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KKyAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRl
cjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKKworICAgIC8vIFJlcGF0Y2ggdGhlIG9m
ZnNldCBpbnRvIHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQgZnJvbSwgdGhlbiByZXBhdGNoIHRo
ZSBTdHJ1Y3R1cmUgdG8gbG9vayBmb3IuCisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoRGlzcGxh
Y2VtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJl
cGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQsIGNhY2hlZE9mZnNldCAqIHNpemVv
ZihKU1ZhbHVlKikpOworICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEltbWVkaWF0ZShyZWludGVy
cHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0
QnlJZFN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlKSk7Cit9
CisKK3ZvaWQgSklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRk
cmVzcykKK3sKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBh
dGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2Vu
ZXJpYy4KKyAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9w
dXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyBy
aWdodCBub3cuCisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVz
cywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYykpOworCisgICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0
eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZv
ci4KKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hEaXNwbGFjZW1lbnQocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRQcm9w
ZXJ0eU1hcE9mZnNldCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgWDg2
QXNzZW1ibGVyOjpyZXBhdGNoSW1tZWRpYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu
Zm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlLCByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCh2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFk
ZHJlc3MpOworCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNl
IC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KKyAgICBjdGlSZXBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CisKKyAgICAv
LyBDaGVjayBlYXggaXMgYW4gYXJyYXkKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsKKyAg
ICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOworCisgICAgLy8gQ2hlY2tzIG91dCBv
a2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKKyAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAg
IF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLCBYODY6OmVj
eCwgWDg2OjplY3gpOworCisgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJbW1lZGlh
dGVJbnQsIFg4Njo6ZWN4KTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGphKCk7CisK
KyAgICBfXyBhZGRsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgX18gYWRkbF9pOHIoMSwg
WDg2OjplY3gpOworICAgIF9fIG1vdmxfcnIoWDg2OjplY3gsIFg4Njo6ZWF4KTsKKyAgICBKbXBT
cmMgc3VjY2VzcyA9IF9fIGptcCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVD
b3B5KCk7CisKKyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUg
ZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAg
ICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5mby5jYWxs
UmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7CisgICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHNsb3dDYXNlQmVnaW4pOwor
ICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJlZ2lu
KTsKKworICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2Rl
LCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisg
ICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZv
LmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0Owor
ICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihzdWNjZXNzRGVzdCkpOworCisgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVh
dGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgorICAgIG1fY29kZUJsb2NrLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7CisKKyAgICAvLyBG
aW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc293IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCisgICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0
QnlJZEJyYW5jaFRvU2xvd0Nhc2U7CisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zm
c2V0KGptcExvY2F0aW9uLCBjb2RlKTsKK30KKwordm9pZCBKSVQ6OmVtaXRHZXRWYXJpYWJsZU9i
amVjdFJlZ2lzdGVyKFJlZ2lzdGVySUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCwgUmVnaXN0
ZXJJRCBkc3QpCit7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVj
dCwgZCksIHZhcmlhYmxlT2JqZWN0LCBkc3QpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhLCByZWdpc3RlcnMpLCBkc3Qs
IGRzdCk7CisgICAgX18gbW92bF9tcihpbmRleCAqIHNpemVvZihSZWdpc3RlciksIGRzdCwgZHN0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIHZhcmlhYmxlT2JqZWN0LCBpbnQgaW5kZXgpCit7CisgICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZhcmlhYmxlT2JqZWN0
LCB2YXJpYWJsZU9iamVjdCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJs
ZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGEsIHJlZ2lzdGVycyksIHZhcmlhYmxlT2JqZWN0
LCB2YXJpYWJsZU9iamVjdCk7CisgICAgX18gbW92bF9ybShzcmMsIGluZGV4ICogc2l6ZW9mKFJl
Z2lzdGVyKSwgdmFyaWFibGVPYmplY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDM4OTg0KQorKysg
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjQwOSArNDQs
MzI2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgUExB
VEZPUk0oTUFDKQorI2lmICFFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykKIAot
c3RhdGljIGlubGluZSBib29sIGlzU1NFMlByZXNlbnQoKQordm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkSG90UGF0aChpbnQgcmVzdWx0VlJlZywgaW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiBpZGVu
dCwgdW5zaWduZWQgaSwgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KQog
ewotICAgIHJldHVybiB0cnVlOyAvLyBBbGwgWDg2IE1hY3MgYXJlIGd1YXJhbnRlZWQgdG8gc3Vw
cG9ydCBhdCBsZWFzdCBTU0UyCi19CisgICAgLy8gQXMgZm9yIHB1dF9ieV9pZCwgZ2V0X2J5X2lk
IHJlcXVpcmVzIHRoZSBvZmZzZXQgb2YgdGhlIFN0cnVjdHVyZSBhbmQgdGhlIG9mZnNldCBvZiB0
aGUgYWNjZXNzIHRvIGJlIHJlcGF0Y2hlZC4KKyAgICAvLyBBZGRpdGlvbmFsbHksIGZvciBnZXRf
YnlfaWQgd2UgbmVlZCByZXBhdGNoIHRoZSBvZmZzZXQgb2YgdGhlIGJyYW5jaCB0byB0aGUgc2xv
dyBjYXNlICh3ZSByZXBhdGNoIHRoaXMgdG8ganVtcAorICAgIC8vIHRvIGFycmF5LWxlbmd0aCAv
IHByb3RvdHlwZSBhY2Nlc3MgdHJhbnBvbGluZXMsIGFuZCBmaW5hbGx5IHdlIGFsc28gdGhlIHRo
ZSBwcm9wZXJ0eS1tYXAgYWNjZXNzIG9mZnNldCBhcyBhIGxhYmVsCisgICAgLy8gdG8ganVtcCBi
YWNrIHRvIGlmIG9uZSBvZiB0aGVzZSB0cmFtcG9saWVzIGZpbmRzIGEgbWF0Y2guCiAKLSNlbHNl
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgWDg2OjplYXgsIGkpOwogCi1z
dGF0aWMgYm9vbCBpc1NTRTJQcmVzZW50KCkKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IFNTRTJG
ZWF0dXJlQml0ID0gMSA8PCAyNjsKLSAgICBzdHJ1Y3QgU1NFMkNoZWNrIHsKLSAgICAgICAgU1NF
MkNoZWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZsYWdzOwotI2lmIENPTVBJTEVS
KE1TVkMpCi0gICAgICAgICAgICBfYXNtIHsKLSAgICAgICAgICAgICAgICBtb3YgZWF4LCAxIC8v
IGNwdWlkIGZ1bmN0aW9uIDEgZ2l2ZXMgdXMgdGhlIHN0YW5kYXJkIGZlYXR1cmUgc2V0Ci0gICAg
ICAgICAgICAgICAgY3B1aWQ7Ci0gICAgICAgICAgICAgICAgbW92IGZsYWdzLCBlZHg7Ci0gICAg
ICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgZmxhZ3MgPSAwOwotICAgICAgICAgICAgLy8g
RklYTUU6IEFkZCBHQ0MgY29kZSB0byBkbyBhYm92ZSBhc20KKyNpZmRlZiBOREVCVUcKKyAgICBV
TlVTRURfUEFSQU0ocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KTsKICNlbmRpZgotICAg
ICAgICAgICAgcHJlc2VudCA9IChmbGFncyAmIFNTRTJGZWF0dXJlQml0KSAhPSAwOwotICAgICAg
ICB9Ci0gICAgICAgIGJvb2wgcHJlc2VudDsKLSAgICB9OwotICAgIHN0YXRpYyBTU0UyQ2hlY2sg
Y2hlY2s7Ci0gICAgcmV0dXJuIGNoZWNrLnByZXNlbnQ7Ci19CisgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
SW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7CiAKLSNlbmRpZgorI2lmbmRlZiBOREVCVUcKKyAg
ICBKbXBEc3QgY29sZFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisjZW5kaWYgICAgICAgIAorICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgIEptcFNyYyBjYWxsID0g
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyk7Cisg
ICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoY29sZFBh
dGhCZWdpbiwgY2FsbCkgPT0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiAKLUNPTVBJTEVfQVNTRVJUKENU
SV9BUkdTX2NvZGUgPT0gMHhDLCBDVElfQVJHU19jb2RlX2lzX0MpOwotQ09NUElMRV9BU1NFUlQo
Q1RJX0FSR1NfY2FsbEZyYW1lID09IDB4RSwgQ1RJX0FSR1NfY2FsbEZyYW1lX2lzX0UpOworICAg
IC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8g
cmVjb3ZlciByZXBhdGNoIGluZm9ybWF0aW9uLgorICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5i
eXRlY29kZUluZGV4ID09IGkpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9b
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxs
OworfQogCi0jaWYgQ09NUElMRVIoR0NDKSAmJiBQTEFURk9STShYODYpCiAKLSNpZiBQTEFURk9S
TShEQVJXSU4pCi0jZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgIl8iICNuYW1lCi0jZWxzZQot
I2RlZmluZSBTWU1CT0xfU1RSSU5HKG5hbWUpICNuYW1lCi0jZW5kaWYKK3ZvaWQgSklUOjpjb21w
aWxlR2V0QnlJZFNsb3dDYXNlKGludCwgaW50LCBJZGVudGlmaWVyKiwgdW5zaWduZWQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KIAotYXNtKAotIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBv
bGluZSkgIlxuIgotU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiOiIgIlxuIgotICAgICJw
dXNobCAlZXNpIiAiXG4iCi0gICAgInB1c2hsICVlZGkiICJcbiIKLSAgICAicHVzaGwgJWVieCIg
IlxuIgotICAgICJzdWJsICQweDIwLCAlZXNwIiAiXG4iCi0gICAgIm1vdmwgJDUxMiwgJWVzaSIg
IlxuIgotICAgICJtb3ZsIDB4MzgoJWVzcCksICVlZGkiICJcbiIgLy8gT3gzOCA9IDB4MEUgKiA0
LCAweDBFID0gQ1RJX0FSR1NfY2FsbEZyYW1lIChzZWUgYXNzZXJ0aW9uIGFib3ZlKQotICAgICJj
YWxsICoweDMwKCVlc3ApIiAiXG4iIC8vIE94MzAgPSAweDBDICogNCwgMHgwQyA9IENUSV9BUkdT
X2NvZGUgKHNlZSBhc3NlcnRpb24gYWJvdmUpCi0gICAgImFkZGwgJDB4MjAsICVlc3AiICJcbiIK
LSAgICAicG9wbCAlZWJ4IiAiXG4iCi0gICAgInBvcGwgJWVkaSIgIlxuIgotICAgICJwb3BsICVl
c2kiICJcbiIKLSAgICAicmV0IiAiXG4iCi0pOwotCi1hc20oCi0iLmdsb2JsICIgU1lNQk9MX1NU
UklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgotU1lNQk9MX1NUUklORyhjdGlWTVRocm93
VHJhbXBvbGluZSkgIjoiICJcbiIKLSNpZiBVU0UoQ1RJX0FSR1VNRU5UKQotI2lmIFVTRShGQVNU
X0NBTExfQ1RJX0FSR1VNRU5UKQotICAgICJtb3ZsICVlc3AsICVlY3giICJcbiIKLSNlbHNlCi0g
ICAgIm1vdmwgJWVzcCwgMCglZXNwKSIgIlxuIgotI2VuZGlmCi0gICAgImNhbGwgIiBTWU1CT0xf
U1RSSU5HKF9aTjNKU0MxMUludGVycHJldGVyMTJjdGlfdm1fdGhyb3dFUFB2KSAiXG4iCi0jZWxz
ZQotICAgICJjYWxsICIgU1lNQk9MX1NUUklORyhfWk4zSlNDMTFJbnRlcnByZXRlcjEyY3RpX3Zt
X3Rocm93RVB2eikgIlxuIgotI2VuZGlmCi0gICAgImFkZGwgJDB4MjAsICVlc3AiICJcbiIKLSAg
ICAicG9wbCAlZWJ4IiAiXG4iCi0gICAgInBvcGwgJWVkaSIgIlxuIgotICAgICJwb3BsICVlc2ki
ICJcbiIKLSAgICAicmV0IiAiXG4iCi0pOwotICAgIAotI2VsaWYgQ09NUElMRVIoTVNWQykKK3Zv
aWQgSklUOjpjb21waWxlUHV0QnlJZEhvdFBhdGgoaW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiBp
ZGVudCwgaW50IHZhbHVlVlJlZywgdW5zaWduZWQgaSwgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4KQoreworICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVwYXRj
aCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25l
IHBvaW50ZXIsCisgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBs
b2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2Rl
CisgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0
aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLWV4dGVybiAiQyIgewotICAgIAotICAgIF9f
ZGVjbHNwZWMobmFrZWQpIEpTVmFsdWUqIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgUmVnaXN0
ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNH
bG9iYWxEYXRhKikKLSAgICB7Ci0gICAgICAgIF9fYXNtIHsKLSAgICAgICAgICAgIHB1c2ggZXNp
OwotICAgICAgICAgICAgcHVzaCBlZGk7Ci0gICAgICAgICAgICBwdXNoIGVieDsKLSAgICAgICAg
ICAgIHN1YiBlc3AsIDB4MjA7Ci0gICAgICAgICAgICBtb3YgZXNpLCA1MTI7Ci0gICAgICAgICAg
ICBtb3YgZWN4LCBlc3A7Ci0gICAgICAgICAgICBtb3YgZWRpLCBbZXNwICsgMHgzOF07Ci0gICAg
ICAgICAgICBjYWxsIFtlc3AgKyAweDMwXTsgLy8gT3gzMCA9IDB4MEMgKiA0LCAweDBDID0gQ1RJ
X0FSR1NfY29kZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkKLSAgICAgICAgICAgIGFkZCBlc3AsIDB4
MjA7Ci0gICAgICAgICAgICBwb3AgZWJ4OwotICAgICAgICAgICAgcG9wIGVkaTsKLSAgICAgICAg
ICAgIHBvcCBlc2k7Ci0gICAgICAgICAgICByZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgX19kZWNsc3BlYyhuYWtlZCkgdm9pZCBjdGlWTVRocm93VHJhbXBvbGluZSgpCi0gICAgewot
ICAgICAgICBfX2FzbSB7Ci0gICAgICAgICAgICBtb3YgZWN4LCBlc3A7Ci0gICAgICAgICAgICBj
YWxsIEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV92bV90aHJvdzsKLSAgICAgICAgICAgIGFkZCBlc3As
IDB4MjA7Ci0gICAgICAgICAgICBwb3AgZWJ4OwotICAgICAgICAgICAgcG9wIGVkaTsKLSAgICAg
ICAgICAgIHBvcCBlc2k7Ci0gICAgICAgICAgICByZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci19CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIFg4Njo6ZWF4LCB2YWx1
ZVZSZWcsIFg4Njo6ZWR4LCBpKTsKIAotI2VuZGlmCisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7CisgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVheCwgMCk7CisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgOCk7CisgICAgSm1w
U3JjIGNhbGwgPSBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9n
ZW5lcmljKTsKIAotdm9pZCBjdGlTZXRSZXR1cm5BZGRyZXNzKHZvaWQqKiB3aGVyZSwgdm9pZCog
d2hhdCkKLXsKLSAgICAqd2hlcmUgPSB3aGF0OworICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBv
ZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciByZXBhdGNoIGluZm9ybWF0
aW9uLgorICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNb
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOworICAg
IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwogfQogCi12b2lkIGN0aVJlcGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKHZvaWQqIHdoZXJlLCB2b2lkKiB3aGF0KQordm9pZCBKSVQ6OmNv
bXBpbGVQdXRCeUlkU2xvd0Nhc2UoaW50LCBJZGVudGlmaWVyKiwgaW50LCB1bnNpZ25lZCwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkKQogewotICAgIChzdGF0aWNf
Y2FzdDx2b2lkKio+KHdoZXJlKSlbLTFdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHdoYXQpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHdoZXJlKSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLSNpZm5kZWYgTkRFQlVH
CisjZWxzZQogCi12b2lkIEpJVDo6cHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyh1bnNpZ25lZCBz
cmMxLCB1bnNpZ25lZCBzcmMyKQordm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQg
cmVzdWx0VlJlZywgaW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiwgdW5zaWduZWQgaSwgdW5zaWdu
ZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KQogewotICAgIGNoYXIgd2hpY2gxID0g
JyonOwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjMSkp
IHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
MSk7Ci0gICAgICAgIHdoaWNoMSA9IAotICAgICAgICAgICAgSlNJbW1lZGlhdGU6OmlzSW1tZWRp
YXRlKHZhbHVlKSA/Ci0gICAgICAgICAgICAgICAgKEpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1
ZSkgPyAnaScgOgotICAgICAgICAgICAgICAgIEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4odmFsdWUp
ID8gJ2InIDoKLSAgICAgICAgICAgICAgICB2YWx1ZS0+aXNVbmRlZmluZWQoKSA/ICd1JyA6Ci0g
ICAgICAgICAgICAgICAgdmFsdWUtPmlzTnVsbCgpID8gJ24nIDogJz8nKQotICAgICAgICAgICAg
ICAgIDoKLSAgICAgICAgICAgICh2YWx1ZS0+aXNTdHJpbmcoKSA/ICdzJyA6Ci0gICAgICAgICAg
ICB2YWx1ZS0+aXNPYmplY3QoKSA/ICdvJyA6Ci0gICAgICAgICAgICAnaycpOwotICAgIH0KLSAg
ICBjaGFyIHdoaWNoMiA9ICcqJzsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYzIpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYzIpOwotICAgICAgICB3aGljaDIgPSAKLSAgICAgICAgICAgIEpTSW1t
ZWRpYXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkgPwotICAgICAgICAgICAgICAgIChKU0ltbWVkaWF0
ZTo6aXNOdW1iZXIodmFsdWUpID8gJ2knIDoKLSAgICAgICAgICAgICAgICBKU0ltbWVkaWF0ZTo6
aXNCb29sZWFuKHZhbHVlKSA/ICdiJyA6Ci0gICAgICAgICAgICAgICAgdmFsdWUtPmlzVW5kZWZp
bmVkKCkgPyAndScgOgotICAgICAgICAgICAgICAgIHZhbHVlLT5pc051bGwoKSA/ICduJyA6ICc/
JykKLSAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAodmFsdWUtPmlzU3RyaW5nKCkgPyAn
cycgOgotICAgICAgICAgICAgdmFsdWUtPmlzT2JqZWN0KCkgPyAnbycgOgotICAgICAgICAgICAg
J2snKTsKLSAgICB9Ci0gICAgaWYgKCh3aGljaDEgIT0gJyonKSB8ICh3aGljaDIgIT0gJyonKSkK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJUeXBlcyAlYyAlY1xuIiwgd2hpY2gxLCB3aGljaDIp
OworICAgIC8vIEFzIGZvciBwdXRfYnlfaWQsIGdldF9ieV9pZCByZXF1aXJlcyB0aGUgb2Zmc2V0
IG9mIHRoZSBTdHJ1Y3R1cmUgYW5kIHRoZSBvZmZzZXQgb2YgdGhlIGFjY2VzcyB0byBiZSByZXBh
dGNoZWQuCisgICAgLy8gQWRkaXRpb25hbGx5LCBmb3IgZ2V0X2J5X2lkIHdlIG5lZWQgcmVwYXRj
aCB0aGUgb2Zmc2V0IG9mIHRoZSBicmFuY2ggdG8gdGhlIHNsb3cgY2FzZSAod2UgcmVwYXRjaCB0
aGlzIHRvIGp1bXAKKyAgICAvLyB0byBhcnJheS1sZW5ndGggLyBwcm90b3R5cGUgYWNjZXNzIHRy
YW5wb2xpbmVzLCBhbmQgZmluYWxseSB3ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHktbWFwIGFjY2Vz
cyBvZmZzZXQgYXMgYSBsYWJlbAorICAgIC8vIHRvIGp1bXAgYmFjayB0byBpZiBvbmUgb2YgdGhl
c2UgdHJhbXBvbGllcyBmaW5kcyBhIG1hdGNoLgorCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgWDg2OjplYXgsIGkpOworCisgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5
dGVjb2RlSW5kZXggPT0gaSk7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2
OjplYXgsIGksIGJhc2VWUmVnKTsKKworICAgIEptcERzdCBob3RQYXRoQmVnaW4gPSBfXyBsYWJl
bCgpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4XS5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW47CisKKyAgICBfXyBj
bXBsX2kzMm0ocmVwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlLCBGSUVMRF9PRkZTRVQoSlND
ZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKKyAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpn
ZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJl
cGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKTsKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRj
aE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKKworICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7
CisgICAgX18gbW92bF9tcihyZXBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQsIFg4Njo6ZWF4LCBY
ODY6OmVheCk7CisgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5M
YWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFBy
b3BlcnR5TWFwT2Zmc2V0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OwogfQogCi0jZW5kaWYKIAotSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IG1faW50ZXJwcmV0ZXIoZ2xvYmFsRGF0YS0+aW50ZXJw
cmV0ZXIpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fY29kZUJsb2Nr
KGNvZGVCbG9jaykKLSAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zLnNpemUoKSA6IDApCi0gICAgLCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZv
KGNvZGVCbG9jayA/IGNvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgp
IDogMCkKLSAgICAsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKSA6IDApCi0gICAgLCBtX2xhc3RSZXN1
bHRCeXRlY29kZVJlZ2lzdGVyKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0gICAg
LCBtX2p1bXBUYXJnZXRzUG9zaXRpb24oMCkKK3ZvaWQgSklUOjpjb21waWxlR2V0QnlJZFNsb3dD
YXNlKGludCByZXN1bHRWUmVnLCBpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqIGlkZW50LCB1bnNp
Z25lZCBpLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpCiB7Ci19CisgICAgLy8gQXMgZm9yIHRoZSBo
b3QgcGF0aCBvZiBnZXRfYnlfaWQsIGFib3ZlLCB3ZSBlbnN1cmUgdGhhdCB3ZSBjYW4gdXNlIGFu
IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBvZmZzZXQKKyAgICAvLyBzbyB0aGF0IHdlIG9ubHkgbmVl
ZCB0cmFjayBvbmUgcG9pbnRlciBpbnRvIHRoZSBzbG93IGNhc2UgY29kZSAtIHdlIHRyYWNrIGEg
cG9pbnRlciB0byB0aGUgbG9jYXRpb24KKyAgICAvLyBvZiB0aGUgY2FsbCAod2hpY2ggd2UgY2Fu
IHVzZSB0byBsb29rIHVwIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uKSwgYnV0IHNob3VsZCBhIGFy
cmF5LWxlbmd0aCBvcgorICAgIC8vIHByb3RvdHlwZSBhY2Nlc3MgdHJhbXBvbGluZSBmYWlsIHdl
IHdhbnQgdG8gYmFpbCBvdXQgYmFjayB0byBoZXJlLiAgVG8gZG8gc28gd2UgY2FuIHN1YnRyYWN0
IGJhY2sKKyAgICAvLyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2FsbCB0byB0aGUgaGVhZCBvZiB0
aGUgc2xvdyBjYXNlLgogCi0jZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUChuYW1lKSBcCi0g
ICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCi0gICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQsIDQsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpXyMjbmFtZSk7IFwKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsgXAotICAgICAgICBpICs9IDQ7IFwKLSAgICAgICAgYnJl
YWs7IFwKLSAgICB9CisgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VW
UmVnKSkKKyAgICAgICAgKytpdGVyOworICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7CiAKLSNkZWZpbmUgQ1RJX0NPTVBJTEVfVU5BUllfT1AobmFtZSkgXAotICAgIGNhc2UgbmFt
ZTogeyBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsgXAotICAgICAgICBpICs9IDM7
IFwKLSAgICAgICAgYnJlYWs7IFwKLSAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIEptcERzdCBj
b2xkUGF0aEJlZ2luID0gX18gbGFiZWwoKTsKKyNlbmRpZiAgICAgICAgCisgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVheCwgMCk7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7CisgICAgSm1wU3JjIGNhbGwgPSBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZCk7CisgICAgQVNTRVJUKFg4NkFzc2Vt
Ymxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoY29sZFBhdGhCZWdpbiwgY2FsbCkgPT0g
cmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7CisKKyAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNh
bGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KKyAg
ICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKKyAgICBtX3Byb3Bl
cnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0u
Y2FsbFJldHVybkxvY2F0aW9uID0gY2FsbDsKK30KIAotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmlj
dEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgaSwgQ29tcGlsZU9wU3RyaWN0
RXFUeXBlIHR5cGUpCit2b2lkIEpJVDo6Y29tcGlsZVB1dEJ5SWRIb3RQYXRoKGludCBiYXNlVlJl
ZywgSWRlbnRpZmllciosIGludCB2YWx1ZVZSZWcsIHVuc2lnbmVkIGksIHVuc2lnbmVkIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCkKIHsKLSAgICBib29sIG5lZ2F0ZWQgPSAodHlwZSA9
PSBPcE5TdHJpY3RFcSk7CisgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXBhdGNoIGJv
dGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9p
bnRlciwKKyAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRl
ZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKKyAg
ICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBz
YW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIFg4Njo6ZWF4LCB2YWx1ZVZSZWcsIFg4
Njo6ZWR4LCBpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4
LCBzcmMyLCBYODY6OmVkeCwgaSk7CisgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5dGVjb2Rl
SW5kZXggPT0gaSk7CiAKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBY
ODY6OmVheCk7Ci0gICAgSm1wU3JjIGZpcnN0Tm90SW1tZWRpYXRlID0gX18gamUoKTsKLSAgICBf
XyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVkeCk7Ci0gICAgSm1wU3Jj
IHNlY29uZE5vdEltbWVkaWF0ZSA9IF9fIGplKCk7Ci0KLSAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4
LCBYODY6OmVheCk7Ci0gICAgaWYgKG5lZ2F0ZWQpCi0gICAgICAgIF9fIHNldG5lX3IoWDg2Ojpl
YXgpOwotICAgIGVsc2UKLSAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKLSAgICBfXyBtb3Z6
YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIAotICAgIEptcFNyYyBib3RoV2VyZUltbWVkaWF0ZXMgPSBf
XyBqbXAoKTsKLQotICAgIF9fIGxpbmsoZmlyc3ROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwot
Ci0gICAgLy8gY2hlY2sgdGhhdCBlZHggaXMgaW1tZWRpYXRlIGJ1dCBub3QgdGhlIHplcm8gaW1t
ZWRpYXRlCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplZHgp
OwotICAgIF9fIHNldHpfcihYODY6OmVjeCk7Ci0gICAgX18gbW92emJsX3JyKFg4Njo6ZWN4LCBY
ODY6OmVjeCk7IC8vIGVjeCBpcyBub3cgMSBpZiBlZHggd2FzIG5vbmltbWVkaWF0ZQotICAgIF9f
IGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6
ZWR4KTsKLSAgICBfXyBzZXRlX3IoWDg2OjplZHgpOwotICAgIF9fIG1vdnpibF9ycihYODY6OmVk
eCwgWDg2OjplZHgpOyAvLyBlZHggaXMgbm93IDEgaWYgZWR4IHdhcyB0aGUgMCBpbW1lZGlhdGUK
LSAgICBfXyBvcmxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKLQotICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7Ci0KLSAgICBfXyBtb3ZsX2kzMnIoYXNJ
bnRlZ2VyKGpzQm9vbGVhbihuZWdhdGVkKSksIFg4Njo6ZWF4KTsKLQotICAgIEptcFNyYyBmaXJz
dFdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOwotCi0gICAgX18gbGluayhzZWNvbmROb3RJbW1l
ZGlhdGUsIF9fIGxhYmVsKCkpOwotICAgIC8vIGNoZWNrIHRoYXQgZWF4IGlzIG5vdCB0aGUgemVy
byBpbW1lZGlhdGUgKHdlIGtub3cgaXQgbXVzdCBiZSBpbW1lZGlhdGUpCi0gICAgX18gY21wbF9p
MzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwot
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsKLQotICAg
IF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOwot
Ci0gICAgX18gbGluayhib3RoV2VyZUltbWVkaWF0ZXMsIF9fIGxhYmVsKCkpOwotICAgIF9fIGxp
bmsoZmlyc3RXYXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQotewotICAgIF9fIHN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKLSAg
ICBKbXBTcmMgc2tpcFRpbWVvdXQgPSBfXyBqbmUoKTsKLSAgICBlbWl0Q1RJQ2FsbChieXRlY29k
ZUluZGV4LCBJbnRlcnByZXRlcjo6Y3RpX3RpbWVvdXRfY2hlY2spOwotCi0gICAgZW1pdEdldENU
SVBhcmFtKENUSV9BUkdTX2dsb2JhbERhdGEsIFg4Njo6ZWN4KTsKLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU0dsb2JhbERhdGEsIGludGVycHJldGVyKSwgWDg2OjplY3gsIFg4Njo6ZWN4
KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChJbnRlcnByZXRlciwgbV90aWNrc1VudGls
TmV4dFRpbWVvdXRDaGVjayksIFg4Njo6ZWN4LCBYODY6OmVzaSk7Ci0gICAgX18gbGluayhza2lw
VGltZW91dCwgX18gbGFiZWwoKSk7Ci0KLSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci19
Ci0KLS8qCi0gIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGlz
IGNhbm9uaWNhbCAtIHZhbHVlcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUgc2hvdWxk
IG5vdCBiZSBzdG9yZWQgaW4gYSBKU051bWJlckNlbGwuCi0gIAotICBJbiB0aGUgY29tbW9uIGNh
c2UsIHRoZSBkb3VibGUgdmFsdWUgZnJvbSAneG1tU291cmNlJyBpcyB3cml0dGVuIHRvIHRoZSBy
ZXVzYWJsZSBKU051bWJlckNlbGwgcG9pbnRlZCB0byBieSAnanNOdW1iZXJDZWxsJywgdGhlbiAn
anNOdW1iZXJDZWxsJwotICBpcyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgU0YgUmVnaXN0ZXIgJ2Rz
dCcsIGFuZCB0aGVuIGEganVtcCBpcyBwbGFudGVkIChzdG9yZWQgaW50byAqd3JvdGVKU051bWJl
ckNlbGwpLgotICAKLSAgSG93ZXZlciBpZiB0aGUgdmFsdWUgZnJvbSB4bW1Tb3VyY2UgaXMgcmVw
cmVzZW50YWJsZSBhcyBhIEpTSW1tZWRpYXRlLCB0aGVuIHRoZSBKU0ltbWVkaWF0ZSB2YWx1ZSB3
aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCwgYW5kIGZsb3cKLSAgY29udHJvbCB3aWxsIGZh
bGwgdGhyb3VnaCBmcm9tIHRoZSBjb2RlIHBsYW50ZWQuCi0qLwotdm9pZCBKSVQ6OnB1dERvdWJs
ZVJlc3VsdFRvSlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OlhNTVJlZ2lzdGVySUQgeG1t
U291cmNlLCBYODY6OlJlZ2lzdGVySUQganNOdW1iZXJDZWxsLCB1bnNpZ25lZCBkc3QsIEptcFNy
Yyogd3JvdGVKU051bWJlckNlbGwsICBYODY6OlhNTVJlZ2lzdGVySUQgdGVtcFhtbSwgWDg2OjpS
ZWdpc3RlcklEIHRlbXBSZWcxLCBYODY6OlJlZ2lzdGVySUQgdGVtcFJlZzIpCi17Ci0gICAgLy8g
Y29udmVydCAoZG91YmxlIC0+IEpTSW1tZWRpYXRlIC0+IGRvdWJsZSksIGFuZCBjaGVjayBpZiB0
aGUgdmFsdWUgaXMgdW5jaGFuZ2VkIC0gaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcmVwcmVz
ZW50YWJsZSBhcyBhIEpTSW1tZWRpYXRlLgotICAgIF9fIGN2dHRzZDJzaV9ycih4bW1Tb3VyY2Us
IHRlbXBSZWcxKTsKLSAgICBfXyBhZGRsX3JyKHRlbXBSZWcxLCB0ZW1wUmVnMSk7Ci0gICAgX18g
c2FybF9pOHIoMSwgdGVtcFJlZzEpOwotICAgIF9fIGN2dHNpMnNkX3JyKHRlbXBSZWcxLCB0ZW1w
WG1tKTsKLSAgICAvLyBDb21wYXJlICYgYnJhbmNoIGlmIGltbWVkaWF0ZS4gCi0gICAgX18gdWNv
bWlzX3JyKHRlbXBYbW0sIHhtbVNvdXJjZSk7Ci0gICAgSm1wU3JjIHJlc3VsdElzSW1tID0gX18g
amUoKTsKLSAgICBKbXBEc3QgcmVzdWx0TG9va2VkTGlrZUltbUJ1dEFjdHVhbGx5SXNudCA9IF9f
IGxhYmVsKCk7Ci0gICAgCi0gICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byB0aGUgSlNOdW1iZXJD
ZWxsIGFuZCBqdW1wLgotICAgIF9fIG1vdnNkX3JtKHhtbVNvdXJjZSwgRklFTERfT0ZGU0VUKEpT
TnVtYmVyQ2VsbCwgbV92YWx1ZSksIGpzTnVtYmVyQ2VsbCk7Ci0gICAgaWYgKGpzTnVtYmVyQ2Vs
bCAhPSBYODY6OmVheCkKLSAgICAgICAgX18gbW92bF9ycihqc051bWJlckNlbGwsIFg4Njo6ZWF4
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgKndyb3RlSlNOdW1iZXJD
ZWxsID0gX18gam1wKCk7Ci0KLSAgICBfXyBsaW5rKHJlc3VsdElzSW1tLCBfXyBsYWJlbCgpKTsK
LSAgICAvLyB2YWx1ZSA9PSAoZG91YmxlKShKU0ltbWVkaWF0ZSl2YWx1ZS4uLiBvciBhdCBsZWFz
dCwgaXQgbG9va3MgdGhhdCB3YXkuLi4KLSAgICAvLyB1Y29taSB3aWxsIHJlcG9ydCB0aGF0ICgw
ID09IC0wKSwgYW5kIHdpbGwgcmVwb3J0IHRydWUgaWYgZWl0aGVyIGlucHV0IGluIE5hTiAocmVz
dWx0IGlzIHVub3JkZXJlZCkuCi0gICAgX18gbGluayhfXyBqcCgpLCByZXN1bHRMb29rZWRMaWtl
SW1tQnV0QWN0dWFsbHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIGEgTmFOCi0gICAgX18gcGV4dHJ3
X2lycigzLCB4bW1Tb3VyY2UsIHRlbXBSZWcyKTsKLSAgICBfXyBjbXBsX2kzMnIoMHg4MDAwLCB0
ZW1wUmVnMik7Ci0gICAgX18gbGluayhfXyBqZSgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0
dWFsbHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIC0wCi0gICAgLy8gWWVzIGl0IHJlYWxseSByZWFs
bHkgcmVhbGx5IGlzIHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZS4KLSAgICBlbWl0RmFz
dEFyaXRoSW50VG9JbW1Ob0NoZWNrKHRlbXBSZWcxKTsKLSAgICBpZiAodGVtcFJlZzEgIT0gWDg2
OjplYXgpCi0gICAgICAgIF9fIG1vdmxfcnIodGVtcFJlZzEsIFg4Njo6ZWF4KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJp
dGhPcChPcGNvZGVJRCBvcGNvZGVJRCwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNp
Z25lZCBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMsIHVuc2lnbmVkIGkpCi17Ci0gICAgU3RydWN0
dXJlKiBudW1iZXJTdHJ1Y3R1cmUgPSBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVyZS5nZXQo
KTsKLSAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMTsKLSAgICBKbXBTcmMgd2FzSlNOdW1iZXJD
ZWxsMWI7Ci0gICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDI7Ci0gICAgSm1wU3JjIHdhc0pTTnVt
YmVyQ2VsbDJiOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgs
IHNyYzIsIFg4Njo6ZWR4LCBpKTsKLQotICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxl
KCkgJiYgaXNTU0UyUHJlc2VudCgpKSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlcy5zZWNvbmQoKS5t
aWdodEJlTnVtYmVyKCkpOwotCi0gICAgICAgIC8vIENoZWNrIG9wMiBpcyBhIG51bWJlcgotICAg
ICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2Ojpl
ZHgpOwotICAgICAgICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7Ci0gICAgICAgIGlmICghdHlw
ZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVkeCwgaSwgc3JjMik7Ci0gICAgICAgICAgICBfXyBj
bXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklF
TERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gKDEpIEluIHRoaXMgY2FzZSBzcmMyIGlzIGEgcmV1c2FibGUgbnVtYmVy
IGNlbGwuCi0gICAgICAgIC8vICAgICBTbG93IGNhc2UgaWYgc3JjMSBpcyBub3QgYSBudW1iZXIg
dHlwZS4KLSAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVn
ZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpuZSgpOwotICAgICAg
ICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3JjMSk7Ci0gICAgICAg
ICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0
dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbHNv
IGEgbnVtYmVyIGNlbGwKLSAgICAgICAgX18gbW92c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVy
Q2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4LCBYODY6OnhtbTApOwotICAgICAgICBKbXBTcmMgbG9h
ZGVkRG91YmxlID0gX18gam1wKCk7Ci0gICAgICAgIC8vICgxYikgaWYgd2UgZ2V0IGhlcmUsIHNy
YzEgaXMgYW4gaW1tZWRpYXRlCi0gICAgICAgIF9fIGxpbmsob3AxaW1tLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWF4KTsKLSAgICAgICAgX18gY3Z0
c2kyc2RfcnIoWDg2OjplYXgsIFg4Njo6eG1tMCk7Ci0gICAgICAgIC8vICgxYykgCi0gICAgICAg
IF9fIGxpbmsobG9hZGVkRG91YmxlLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgaWYgKG9wY29kZUlE
ID09IG9wX2FkZCkKLSAgICAgICAgICAgIF9fIGFkZHNkX21yKEZJRUxEX09GRlNFVChKU051bWJl
ckNlbGwsIG1fdmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0wKTsKLSAgICAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3Bfc3ViKQotICAgICAgICAgICAgX18gc3Vic2RfbXIoRklFTERfT0ZGU0VU
KEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTApOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOwotICAgICAgICAg
ICAgX18gbXVsc2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6
ZWR4LCBYODY6OnhtbTApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHV0RG91YmxlUmVzdWx0VG9K
U051bWJlckNlbGxPckpTSW1tZWRpYXRlKFg4Njo6eG1tMCwgWDg2OjplZHgsIGRzdCwgJndhc0pT
TnVtYmVyQ2VsbDIsIFg4Njo6eG1tMSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICAgICAgd2Fz
SlNOdW1iZXJDZWxsMmIgPSBfXyBqbXAoKTsKLQotICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVz
IGNhc2VzIHdoZXJlIHNyYzIgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KLSAgICAgICAgLy8gICAg
IFR3byBzbG93IGNhc2VzIC0gZWl0aGVyIHNyYzEgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUg
c3VidHJhY3Qgb3ZlcmZsb3dzLgotICAgICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAg
fSBlbHNlIGlmICh0eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkp
IHsKLSAgICAgICAgQVNTRVJUKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpKTsKLQotICAg
ICAgICAvLyBDaGVjayBvcDEgaXMgYSBudW1iZXIKLSAgICAgICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgSm1wU3JjIG9w
MWltbSA9IF9fIGpuZSgpOwotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlz
TnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6
OmVheCwgaSwgc3JjMSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDEpIEluIHRo
aXMgY2FzZSBzcmMxIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCi0gICAgICAgIC8vICAgICBT
bG93IGNhc2UgaWYgc3JjMiBpcyBub3QgYSBudW1iZXIgdHlwZS4KLSAgICAgICAgX18gdGVzdGxf
aTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKLSAgICAgICAg
Sm1wU3JjIG9wMmltbSA9IF9fIGpuZSgpOwotICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRl
ZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoWDg2OjplZHgsIGksIHNyYzIpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0Nl
bGwsIG1fc3RydWN0dXJlKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
ICgxYSkgaWYgd2UgZ2V0IGhlcmUsIHNyYzIgaXMgYWxzbyBhIG51bWJlciBjZWxsCi0gICAgICAg
IF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVk
eCwgWDg2Ojp4bW0xKTsKLSAgICAgICAgSm1wU3JjIGxvYWRlZERvdWJsZSA9IF9fIGptcCgpOwot
ICAgICAgICAvLyAoMWIpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFuIGltbWVkaWF0ZQotICAg
ICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhJ
bW1Ub0ludChYODY6OmVkeCk7Ci0gICAgICAgIF9fIGN2dHNpMnNkX3JyKFg4Njo6ZWR4LCBYODY6
OnhtbTEpOwotICAgICAgICAvLyAoMWMpIAotICAgICAgICBfXyBsaW5rKGxvYWRlZERvdWJsZSwg
X18gbGFiZWwoKSk7Ci0gICAgICAgIF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNl
bGwsIG1fdmFsdWUpLCBYODY6OmVheCwgWDg2Ojp4bW0wKTsKLSAgICAgICAgaWYgKG9wY29kZUlE
ID09IG9wX2FkZCkKLSAgICAgICAgICAgIF9fIGFkZHNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0w
KTsKLSAgICAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKQotICAgICAgICAgICAgX18g
c3Vic2RfcnIoWDg2Ojp4bW0xLCBYODY6OnhtbTApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOwotICAgICAgICAgICAgX18gbXVsc2RfcnIo
WDg2Ojp4bW0xLCBYODY6OnhtbTApOwotICAgICAgICB9Ci0gICAgICAgIF9fIG1vdnNkX3JtKFg4
Njo6eG1tMCwgRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4KTsK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgICAgIHB1dERvdWJs
ZVJlc3VsdFRvSlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OnhtbTAsIFg4Njo6ZWF4LCBk
c3QsICZ3YXNKU051bWJlckNlbGwxLCBYODY6OnhtbTEsIFg4Njo6ZWN4LCBYODY6OmVkeCk7Ci0g
ICAgICAgIHdhc0pTTnVtYmVyQ2VsbDFiID0gX18gam1wKCk7Ci0KLSAgICAgICAgLy8gKDIpIFRo
aXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBzcmMxIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCi0gICAg
ICAgIC8vICAgICBUd28gc2xvdyBjYXNlcyAtIGVpdGhlciBzcmMyIGlzbid0IGFuIGltbWVkaWF0
ZSwgb3IgdGhlIHN1YnRyYWN0IG92ZXJmbG93cy4KLSAgICAgICAgX18gbGluayhvcDFpbW0sIF9f
IGxhYmVsKCkpOwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgs
IGkpOwotICAgIH0gZWxzZQotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4
Njo6ZWF4LCBYODY6OmVkeCwgaSk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKSB7Ci0g
ICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgIF9f
IGFkZGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgIH0gZWxzZSAgaWYgKG9wY29kZUlEID09
IG9wX3N1YikgewotICAgICAgICBfXyBzdWJsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAg
ICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKLSAgICAgICAgLy8gY29udmVydCBl
YXggJiBlZHggZnJvbSBKU0ltbWVkaWF0ZXMgdG8gaW50cywgYW5kIGNoZWNrIGlmIGVpdGhlciBh
cmUgemVybwotICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAg
ICBKbXBTcmMgb3AxWmVybyA9IGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8o
WDg2OjplYXgpOwotICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVkeCwgWDg2OjplZHgpOwotICAg
ICAgICBKbXBTcmMgb3AyTm9uWmVybyA9IF9fIGpuZSgpOwotICAgICAgICBfXyBsaW5rKG9wMVpl
cm8sIF9fIGxhYmVsKCkpOwotICAgICAgICAvLyBpZiBlaXRoZXIgaW5wdXQgaXMgemVybywgYWRk
IHRoZSB0d28gdG9nZXRoZXIsIGFuZCBjaGVjayBpZiB0aGUgcmVzdWx0IGlzIDwgMC4KLSAgICAg
ICAgLy8gSWYgaXQgaXMsIHdlIGhhdmUgYSBwcm9ibGVtIChOIDwgMCksIChOICogMCkgPT0gLTAs
IG5vdCByZXByZXNlbnRhdGJsZSBhcyBhIEpTSW1tZWRpYXRlLiAKLSAgICAgICAgX18gbW92bF9y
cihYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICBfXyBhZGRsX3JyKFg4Njo6ZWR4LCBYODY6
OmVjeCk7Ci0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpzKCks
IGkpKTsKLSAgICAgICAgLy8gU2tpcCB0aGUgYWJvdmUgY2hlY2sgaWYgbmVpdGhlciBpbnB1dCBp
cyB6ZXJvCi0gICAgICAgIF9fIGxpbmsob3AyTm9uWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAg
IF9fIGltdWxsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgZW1pdEZhc3RBcml0aFJl
VGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9i
amVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2gu
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBiYXNlVlJlZyk7
CiAKLSAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQo
KSkgewotICAgICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDIsIF9fIGxhYmVsKCkpOwotICAg
ICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDJiLCBfXyBsYWJlbCgpKTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAodHlwZXMuZmlyc3QoKS5pc1JldXNhYmxlKCkgJiYgaXNTU0UyUHJlc2VudCgpKSB7
Ci0gICAgICAgIF9fIGxpbmsod2FzSlNOdW1iZXJDZWxsMSwgX18gbGFiZWwoKSk7Ci0gICAgICAg
IF9fIGxpbmsod2FzSlNOdW1iZXJDZWxsMWIsIF9fIGxhYmVsKCkpOwotICAgIH0KLX0KKyAgICBK
bXBEc3QgaG90UGF0aEJlZ2luID0gX18gbGFiZWwoKTsKKyAgICBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2lu
ID0gaG90UGF0aEJlZ2luOwogCi12b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2Fz
ZShPcGNvZGVJRCBvcGNvZGVJRCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
ciwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyLCBPcGVyYW5kVHlw
ZXMgdHlwZXMsIHVuc2lnbmVkIGkpCi17Ci0gICAgSm1wRHN0IGhlcmUgPSBfXyBsYWJlbCgpOwot
ICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgaWYgKHR5cGVzLnNlY29uZCgpLmlz
UmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKLSAgICAgICAgaWYgKCF0eXBlcy5maXJz
dCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoKytpdGVyLCBzcmMxKSkKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAg
ICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIGhlcmUpOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGlm
IChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzIpKQotICAgICAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7Ci0gICAgfSBlbHNlIGlm
ICh0eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKLSAgICAg
ICAgaWYgKCF0eXBlcy5maXJzdCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAg
ICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoKytpdGVyLCBzcmMxKSkKLSAgICAgICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIGhlcmUpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkp
IHsKLSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzIp
KQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgaGVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVy
ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIGhlcmUpOwot
Ci0gICAgLy8gYWRkaXRpb25hbCBlbnRyeSBwb2ludCB0byBoYW5kbGUgLTAgY2FzZXMuCi0gICAg
aWYgKG9wY29kZUlEID09IG9wX211bCkKLSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwg
aGVyZSk7Ci0KLSAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBY
ODY6OmVjeCk7Ci0gICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwg
WDg2OjplY3gpOwotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpCi0gICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYWRkKTsKLSAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9zdWIpCi0gICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3Vi
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX211bCk7Ci0gICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbXVsKTsKLSAgICB9Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0
IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBpbiBv
cmRlciB0aGF0IGl0IGNhbiBiZSBwYXRjaGVkIG92ZXIuCisgICAgX18gY21wbF9pMzJtKHJlcGF0
Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1
cmUpLCBYODY6OmVheCk7CisgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJl
dHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0UHV0
QnlJZFN0cnVjdHVyZSk7CisgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18g
am5lKCksIGkpKTsKKworICAgIC8vIFBsYW50IGEgbG9hZCBmcm9tIGEgYm9ndXMgb2ZzZXQgaW4g
dGhlIG9iamVjdCdzIHByb3BlcnR5IG1hcDsgd2Ugd2lsbCBwYXRjaCB0aGlzIGxhdGVyLCBpZiBp
dCBpcyB0byBiZSB1c2VkLgorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBt
X3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9ybShY
ODY6OmVkeCwgcmVwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0LCBYODY6OmVheCk7CisgICAgQVNT
RVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2lu
LCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KTsK
IH0KIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQordm9pZCBKSVQ6OmNvbXBp
bGVQdXRCeUlkU2xvd0Nhc2UoaW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiBpZGVudCwgaW50LCB1
bnNpZ25lZCBpLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25l
ZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpCiB7Ci0gICAgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOwotICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLnNpemUoKTsK
KyAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcpKQorICAgICAg
ICArK2l0ZXI7CisgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKIAotICAgIHVu
c2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7Ci0gICAgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXggPSAwOworICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDgpOworICAgIEptcFNyYyBjYWxs
ID0gZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWQpOwogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1faW50ZXJwcmV0ZXItPmlzT3Bjb2RlKGluc3RydWN0aW9uW2ld
LnUub3Bjb2RlKSwgInByaXZhdGVDb21waWxlTWFpblBhc3MgZ29uZSBiYWQgQCAlZCIsIGkpOwor
ICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQg
dG8gcmVjb3ZlciByZXBhdGNoIGluZm9ybWF0aW9uLgorICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
XS5ieXRlY29kZUluZGV4ID09IGkpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBj
YWxsOworfQogCi0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAgICAgaWYgKGkgPiAw
KSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCi0gICAg
ICAgICAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1w
bGUoaW5zdHJ1Y3Rpb24gKyBpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90
KCkpOwogI2VuZGlmCiAKLSAgICAgICAgbV9sYWJlbHNbaV0gPSBfXyBsYWJlbCgpOwotICAgICAg
ICBPcGNvZGVJRCBvcGNvZGVJRCA9IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0
aW9uW2ldLnUub3Bjb2RlKTsKLSAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBj
YXNlIG9wX21vdjogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoc3JjKSkKLSAgICAgICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2Vy
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBYODY6OmVh
eCwgaSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hZGQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotCi0gICAgICAgICAgICBp
ZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSkp
IHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIFg4Njo6ZWF4
LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGFkZGxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50
SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWUq
IHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7Ci0gICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0gICAg
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAg
ICAgICAgICAgICAgICBfXyBhZGRsX2kzMnIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZSh2
YWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBPcGVy
YW5kVHlwZXMgdHlwZXMgPSBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51
bWJlcigpICYmIHR5cGVzLnNlY29uZCgpLm1pZ2h0QmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3Aob3BfYWRkLCBpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3Bl
cmFuZCksIGkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9t
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4
KTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9hZGQpOwotICAgICAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9lbmQ6IHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVl
ZHNGdWxsU2NvcGVDaGFpbikKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2VuZCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9f
IHB1c2hsX20oUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIF9fIHJldCgpOwotICAgICAgICAg
ICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9qbXA6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBq
bXAoKSwgaSArIDEgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJlX2luYzogewotICAgICAgICAg
ICAgaW50IHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAg
IF9fIGFkZGxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9u
ZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb29wOiB7Ci0gICAgICAgICAgICBlbWl0U2xv
d1NjcmlwdENoZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1w
VGFibGUoX18gam1wKCksIGkgKyAxICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVz
czogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmltbSkgewot
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gY21wbF9pMzJy
KGFzSW50ZWdlcihzcmMyaW1tKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgICAgIG1fam1wVGFi
bGUuYXBwZW5kKEptcFRhYmxlKF9fIGpsKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2
OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBU
YWJsZShfXyBqbCgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9sb29wX2lmX2xlc3NlcTogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsK
LQotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0
ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBp
ZiAoc3JjMmltbSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAg
ICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihzcmMyaW1tKSwgWDg2OjplZHgpOwotICAgICAgICAg
ICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpsZSgpLCBpICsgMyArIHRhcmdl
dCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAg
ICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9qbXBU
YWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamxlKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX25ld19vYmplY3Q6IHsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X29iamVjdCk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVw
YXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUg
b25lIHBvaW50ZXIsCi0gICAgICAgICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMg
aGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdl
bmVyYXRlIGNvZGUKLSAgICAgICAgICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zm
c2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgICAg
ICAgICBpbnQgYmFzZVZSZWcgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIFg4Njo6ZWF4LCBpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0KLSAgICAgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwotCi0gICAgICAgICAgICAvLyBK
dW1wIHRvIGEgc2xvdyBjYXNlIGlmIGVpdGhlciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1tZWRp
YXRlLCBvciBpZiB0aGUgU3RydWN0dXJlIGRvZXMgbm90IG1hdGNoLgotICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBiYXNlVlJlZyk7Ci0KLSAgICAg
ICAgICAgIEptcERzdCBob3RQYXRoQmVnaW4gPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAgbV9w
cm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXhdLmhvdFBhdGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKLSAgICAgICAgICAgICsrcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbkluZGV4OwotCi0gICAgICAgICAgICAvLyBJdCBpcyBpbXBvcnRhbnQg
dGhhdCB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMyYml0IGltbWVkaWF0ZSwg
aW4gb3JkZXIgdGhhdCBpdCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgotICAgICAgICAgICAgX18gY21w
bF9pMzJtKHJlcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSwgRklFTERfT0ZGU0VUKEpTQ2Vs
bCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1i
bGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkp
ID09IHJlcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8v
IFBsYW50IGEgbG9hZCBmcm9tIGEgYm9ndXMgb2ZzZXQgaW4gdGhlIG9iamVjdCdzIHByb3BlcnR5
IG1hcDsgd2Ugd2lsbCBwYXRjaCB0aGlzIGxhdGVyLCBpZiBpdCBpcyB0byBiZSB1c2VkLgotICAg
ICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9y
YWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfcm0oWDg2Ojpl
ZHgsIHJlcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCwgWDg2OjplYXgpOwotICAgICAgICAgICAg
QVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJl
Z2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0
KTsKLQotICAgICAgICAgICAgaSArPSA4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIC8vIEFzIGZvciBwdXRf
YnlfaWQsIGdldF9ieV9pZCByZXF1aXJlcyB0aGUgb2Zmc2V0IG9mIHRoZSBTdHJ1Y3R1cmUgYW5k
IHRoZSBvZmZzZXQgb2YgdGhlIGFjY2VzcyB0byBiZSByZXBhdGNoZWQuCi0gICAgICAgICAgICAv
LyBBZGRpdGlvbmFsbHksIGZvciBnZXRfYnlfaWQgd2UgbmVlZCByZXBhdGNoIHRoZSBvZmZzZXQg
b2YgdGhlIGJyYW5jaCB0byB0aGUgc2xvdyBjYXNlICh3ZSByZXBhdGNoIHRoaXMgdG8ganVtcAot
ICAgICAgICAgICAgLy8gdG8gYXJyYXktbGVuZ3RoIC8gcHJvdG90eXBlIGFjY2VzcyB0cmFucG9s
aW5lcywgYW5kIGZpbmFsbHkgd2UgYWxzbyB0aGUgdGhlIHByb3BlcnR5LW1hcCBhY2Nlc3Mgb2Zm
c2V0IGFzIGEgbGFiZWwKLSAgICAgICAgICAgIC8vIHRvIGp1bXAgYmFjayB0byBpZiBvbmUgb2Yg
dGhlc2UgdHJhbXBvbGllcyBmaW5kcyBhIG1hdGNoLgotCi0gICAgICAgICAgICBpbnQgYmFzZVZS
ZWcgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKLQotICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBiYXNlVlJlZyk7Ci0KLSAgICAg
ICAgICAgIEptcERzdCBob3RQYXRoQmVnaW4gPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAgbV9w
cm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXhdLmhvdFBhdGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKLSAgICAgICAgICAgICsrcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbkluZGV4OwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVwYXRj
aEdldEJ5SWREZWZhdWx0U3RydWN0dXJlLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZl
cmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9m
ZnNldEdldEJ5SWRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJs
ZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkg
PT0gcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKLQotICAgICAgICAgICAg
X18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2
OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIocmVwYXRjaEdldEJ5SWRE
ZWZhdWx0T2Zmc2V0LCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgQVNTRVJUKFg4
NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBs
YWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7Ci0KLSAgICAgICAgICAgIGkgKz0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7IC8v
IHZhbHVlCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsgLy8gYmFzZVZhbAotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kLCBYODY6OmVk
eCwgaSk7IC8vIHByb3RvCi0KLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFueSBhcmUgaW1tZWRp
YXRlcwotICAgICAgICAgICAgX18gb3JsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBfXyBvcmxfcnIoWDg2OjplZHgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHRlc3Rs
X2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWN4KTsKLQotICAgICAgICAgICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam56KCksIGkpKTsKLQotICAgICAgICAg
ICAgLy8gY2hlY2sgdGhhdCBhbGwgYXJlIG9iamVjdCB0eXBlIC0gdGhpcyBpcyBhIGJpdCBvZiBh
IGJpdGhhY2sgdG8gYXZvaWQgZXhjZXNzIGJyYW5jaGluZzsKLSAgICAgICAgICAgIC8vIHdlIGNo
ZWNrIHRoYXQgdGhlIHN1bSBvZiB0aGUgdGhyZWUgdHlwZSBjb2RlcyBmcm9tIFN0cnVjdHVyZXMg
aXMgZXhhY3RseSAzICogT2JqZWN0VHlwZSwKLSAgICAgICAgICAgIC8vIHRoaXMgd29ya3MgYmVj
YXVzZSBOdW1iZXJUeXBlIGFuZCBTdHJpbmdUeXBlIGFyZSBzbWFsbGVyCi0gICAgICAgICAgICBf
XyBtb3ZsX2kzMnIoMyAqIE9iamVjdFR5cGUsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVj
dHVyZSksIFg4Njo6ZWR4LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBzdWJsX21yKEZJRUxE
X09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBlKSwgWDg2OjplYXgsIFg4Njo6ZWN4
KTsKLSAgICAgICAgICAgIF9fIHN1YmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBl
SW5mby5tX3R5cGUpLCBYODY6OmVkeCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7
IC8vIHJlbG9hZCBiYXNlVmFsCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplZHgsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9f
IGNtcGxfcm0oWDg2OjplY3gsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90
eXBlKSwgWDg2OjplZHgpOwotCi0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBjaGVjayB0aGF0IGJhc2VW
YWwncyBmbGFncyBpbmNsdWRlIEltcGxlbWVudHNIYXNJbnN0YW5jZSBidXQgbm90IE92ZXJyaWRl
c0hhc0luc3RhbmNlCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1
cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWR4LCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICBfXyBhbmRsX2kzMnIoSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFu
Y2UsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihJbXBsZW1lbnRzSGFzSW5z
dGFuY2UsIFg4Njo6ZWN4KTsKLQotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoX18gam5lKCksIGkpKTsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7IC8vIHJlbG9h
ZCB2YWx1ZQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgNF0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7IC8vIHJlbG9hZCBwcm90bwotCi0gICAgICAg
ICAgICAvLyBvcHRpbWlzdGljYWxseSBsb2FkIHRydWUgcmVzdWx0Ci0gICAgICAgICAgICBfXyBt
b3ZsX2kzMnIoYXNJbnRlZ2VyKGpzQm9vbGVhbih0cnVlKSksIFg4Njo6ZWF4KTsKLQotICAgICAg
ICAgICAgSm1wRHN0IGxvb3AgPSBfXyBsYWJlbCgpOwotCi0gICAgICAgICAgICAvLyBsb2FkIHZh
bHVlJ3MgcHJvdG90eXBlCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Nl
bGwsIG1fc3RydWN0dXJlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2
OjplY3gpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWN4LCBY
ODY6OmVkeCk7Ci0gICAgICAgICAgICBKbXBTcmMgZXhpdCA9IF9fIGplKCk7Ci0KLSAgICAgICAg
ICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoanNOdWxsKCkpLCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBKbXBTcmMgZ29Ub0xvb3AgPSBfXyBqbmUoKTsKLSAgICAgICAgICAgIF9fIGxpbmsoZ29U
b0xvb3AsIGxvb3ApOwotCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGpzQm9v
bGVhbihmYWxzZSkpLCBYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoZXhpdCwgX18g
bGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7Ci0KLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVsX2J5X2lkOiB7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRd
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9kZWxfYnlfaWQpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbXVsOiB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsK
LQotICAgICAgICAgICAgLy8gRm9yIG5vdywgb25seSBwbGFudCBhIGZhc3QgaW50IGNhc2UgaWYg
dGhlIGNvbnN0YW50IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIHplcm8uCi0gICAgICAgICAgICBK
U1ZhbHVlKiBzcmMxVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSk7
Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51
bWVyaWNBcmcoc3JjMik7Ci0gICAgICAgICAgICBpbnQzMl90IHZhbHVlOwotICAgICAgICAgICAg
aWYgKHNyYzFWYWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzFWYWx1
ZSkpID4gMCkpIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIs
IFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVk
aWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gaW11bGxfaTMycihYODY6OmVheCwg
dmFsdWUsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJl
VGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNyYzJWYWx1ZSAmJiAoKHZhbHVl
ID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzJWYWx1ZSkpID4gMCkpIHsKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAg
ICAgICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAg
ICAgICAgICAgX18gaW11bGxfaTMycihYODY6OmVheCwgdmFsdWUsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7
Ci0gICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhPcChvcF9tdWwsIGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQs
IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0
cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7Ci0KLSAgICAgICAgICAgIGkgKz0gNTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsK
LSAgICAgICAgICAgIEZ1bmNEZWNsTm9kZSogZnVuYyA9IChtX2NvZGVCbG9jay0+ZnVuY3Rpb25z
W2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKS5nZXQoKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihmdW5jKSwgMCk7Ci0g
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19mdW5jKTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgot
ICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgY29tcGlsZU9wQ2FsbChv
cGNvZGVJRCwgaW5zdHJ1Y3Rpb24gKyBpLCBpLCBjYWxsTGlua0luZm9JbmRleCsrKTsKLSAgICAg
ICAgICAgIGkgKz0gKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IDcgOiA1KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2dsb2JhbF92YXI6IHsK
LSAgICAgICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0
PEpTVmFyaWFibGVPYmplY3QqPihpbnN0cnVjdGlvbltpICsgMl0udS5qc0NlbGwpOwotICAgICAg
ICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcihnbG9iYWxPYmplY3QpLCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBlbWl0R2V0VmFyaWFibGVPYmplY3RSZWdpc3RlcihYODY6OmVheCwgaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
cHV0X2dsb2JhbF92YXI6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgSlNW
YXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVj
dCo+KGluc3RydWN0aW9uW2kgKyAxXS51LmpzQ2VsbCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX2kz
MnIoYXNJbnRlZ2VyKGdsb2JhbE9iamVjdCksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWR4LCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9zY29wZWRfdmFyOiB7Ci0gICAgICAg
ICAgICBpbnQgc2tpcCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9j
ay0+bmVlZHNGdWxsU2NvcGVDaGFpbjsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAg
IHdoaWxlIChza2lwLS0pCi0gICAgICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
U2NvcGVDaGFpbk5vZGUsIG5leHQpLCBYODY6OmVheCwgWDg2OjplYXgpOwotCi0gICAgICAgICAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwgb2JqZWN0KSwgWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVy
KFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9wdXRfc2NvcGVkX3ZhcjogewotICAgICAgICAgICAgaW50IHNraXAg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNj
b3BlQ2hhaW47Ci0KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJG
aWxlOjpTY29wZUNoYWluLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAg
ICAgICAgICAgIHdoaWxlIChza2lwLS0pCi0gICAgICAgICAgICAgICAgX18gbW92bF9tcihGSUVM
RF9PRkZTRVQoU2NvcGVDaGFpbk5vZGUsIG5leHQpLCBYODY6OmVkeCwgWDg2OjplZHgpOwotCi0g
ICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwgb2JqZWN0
KSwgWDg2OjplZHgsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWYXJpYWJsZU9iamVj
dFJlZ2lzdGVyKFg4Njo6ZWF4LCBYODY6OmVkeCwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb246IHsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQs
IDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbik7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50
czogewotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90ZWFy
X29mZl9hcmd1bWVudHMpOwotICAgICAgICAgICAgaSArPSAxOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXQ6IHsKLSAgICAgICAgICAgIC8vIFdlIGNv
dWxkIEpJVCBnZW5lcmF0ZSB0aGUgZGVyZWYsIG9ubHkgY2FsbGluZyBvdXQgdG8gQyB3aGVuIHRo
ZSByZWZjb3VudCBoaXRzIHplcm8uCi0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRz
RnVsbFNjb3BlQ2hhaW4pCi0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9yZXRfc2NvcGVDaGFpbik7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB0aGUg
cmVzdWx0IGluICVlYXguCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgLy8g
R3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIFg4Njo6ZWR4LCBpKTsKLQotICAgICAgICAgICAg
Ly8gUmVzdG9yZSBvdXIgY2FsbGVyJ3MgInIiLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCBYODY6OmVkaSwgaSk7Ci0KLSAgICAg
ICAgICAgIC8vIFJldHVybi4KLSAgICAgICAgICAgIF9fIHB1c2hsX3IoWDg2OjplZHgpOwotICAg
ICAgICAgICAgX18gcmV0KCk7Ci0KLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OiB7Ci0gICAgICAgICAg
ICBfXyBsZWFsX21yKHNpemVvZihSZWdpc3RlcikgKiBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCBYODY6OmVkaSwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVkeCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX25ld19hcnJheSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlOiB7
Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92ZXJpZnk6IHsKLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgs
IGkpOwotCi0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbmUoKTsKLSAg
ICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBY
ODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKE9iamVjdFR5cGUs
IEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZGU0VUKFR5cGVJ
bmZvLCBtX3R5cGUpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNPYmplY3QgPSBf
XyBqZSgpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIF9fIGxpbmsoaXNP
YmplY3QsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQs
IFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0g
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAg
ICAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9f
IHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAg
ICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRl
ci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgYW4gYXJyYXk7IGdldCB0aGUgbV9zdG9yYWdlIHBvaW50ZXIgaW50byBlY3gsIHRoZW4gY2hl
Y2sgaWYgdGhlIGluZGV4IGlzIGJlbG93IHRoZSBmYXN0IGN1dG9mZgotICAgICAgICAgICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChKU0Fy
cmF5LCBtX2Zhc3RBY2Nlc3NDdXRvZmYpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dD
YXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqYmUoKSwgaSkpOwotCi0gICAgICAgICAgICAv
LyBHZXQgdGhlIHZhbHVlIGZyb20gdGhlIHZlY3RvcgotICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6OmVk
eCwgc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkg
Kz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcmVz
b2x2ZV9mdW5jOiB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVu
dCksIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9y
ZXNvbHZlX2Z1bmMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
aSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9z
dWI6IHsKLSAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9wX3N1YiwgaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9u
W2kgKyA0XS51Lm9wZXJhbmQpLCBpKTsKLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsK
LSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0g
ICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAgICAgICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAgICAg
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAg
ICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJl
dGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLQotICAgICAgICAgICAgLy8gVGhp
cyBpcyBhbiBhcnJheTsgZ2V0IHRoZSBtX3N0b3JhZ2UgcG9pbnRlciBpbnRvIGVjeCwgdGhlbiBj
aGVjayBpZiB0aGUgaW5kZXggaXMgYmVsb3cgdGhlIGZhc3QgY3V0b2ZmCi0gICAgICAgICAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2
OjplY3gpOwotICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpT
QXJyYXksIG1fZmFzdEFjY2Vzc0N1dG9mZiksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNy
YyBpbkZhc3RWZWN0b3IgPSBfXyBqYSgpOwotICAgICAgICAgICAgLy8gTm87IG9oIHdlbGwsIGNo
ZWNrIGlmIHRoZSBhY2Nlc3MgaWYgd2l0aGluIHRoZSB2ZWN0b3IgLSBpZiBzbywgd2UgbWF5IHN0
aWxsIGJlIG9rYXkuCi0gICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZT
RVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvckxlbmd0aCksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpiZSgpLCBpKSk7Ci0KLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc2xvdyBwYXJ0IG9mIHRoZSB2ZWN0b3I7
IGZpcnN0LCB3ZSBoYXZlIHRvIGNoZWNrIGlmIHRoaXMgd291bGQgYmUgdGhlIGZpcnN0IHdyaXRl
IHRvIHRoaXMgbG9jYXRpb24uCi0gICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGJlIGFibGUg
dG8gaGFuZGxlIGluaXRpYWwgd3JpdGUgdG8gYXJyYXk7IGluY3JlbWVudCB0aGUgdGhlIG51bWJl
ciBvZiBpdGVtcyBpbiB0aGUgYXJyYXksIGFuZCBwb3RlbnRpYWxseSB1cGRhdGUgZmFzdCBhY2Nl
c3MgY3V0b2ZmLiAKLSAgICAgICAgICAgIF9fIGNtcGxfaThtKDAsIEZJRUxEX09GRlNFVChBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1
ZSopKTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpl
KCksIGkpKTsKLQotICAgICAgICAgICAgLy8gQWxsIGdvb2QgLSBwdXQgdGhlIHZhbHVlIGludG8g
dGhlIGFycmF5LgotICAgICAgICAgICAgX18gbGluayhpbkZhc3RWZWN0b3IsIF9fIGxhYmVsKCkp
OwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWF4
LCBGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6
OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfbGVz
c2VxKQotICAgICAgICBjYXNlIG9wX2xvb3BfaWZfdHJ1ZTogewotICAgICAgICAgICAgZW1pdFNs
b3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAg
ICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNaZXJvID0gX18gamUoKTsKLSAgICAg
ICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbmUoKSwg
aSArIDIgKyB0YXJnZXQpKTsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihK
U0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9q
bXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLSAgICAg
ICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRl
KCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShfXyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzWmVybywgX18gbGFi
ZWwoKSk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fTsKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6IHsKLSAgICAgICAgICAgIElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfYmFzZSk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9uZWdhdGU6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmVnYXRlKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3Jlc29sdmVfc2tpcDogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
XSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZD4oaWRlbnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4sIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9yZXNvbHZlX3NraXApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWw6IHsK
LSAgICAgICAgICAgIC8vIEZhc3QgY2FzZQotICAgICAgICAgICAgdW5zaWduZWQgZ2xvYmFsT2Jq
ZWN0ID0gYXNJbnRlZ2VyKGluc3RydWN0aW9uW2kgKyAyXS51LmpzQ2VsbCk7Ci0gICAgICAgICAg
ICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIHZvaWQqIHN0cnVjdHVyZUFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnN0cnVjdGlvbiArIGkgKyA0KTsKLSAgICAg
ICAgICAgIHZvaWQqIG9mZnNldEFkZHIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnN0cnVj
dGlvbiArIGkgKyA1KTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgU3RydWN0dXJlIG9mIGdsb2Jh
bCBvYmplY3QKLSAgICAgICAgICAgIF9fIG1vdmxfaTMycihnbG9iYWxPYmplY3QsIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoc3RydWN0dXJlQWRkcmVzcywgWDg2OjplZHgpOwot
ICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgbm9NYXRjaCA9IF9fIGpu
ZSgpOyAvLyBTdHJ1Y3R1cmVzIGRvbid0IG1hdGNoCi0KLSAgICAgICAgICAgIC8vIExvYWQgY2Fj
aGVkIHByb3BlcnR5Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0dsb2Jh
bE9iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAg
ICAgICAgX18gbW92bF9tcihvZmZzZXRBZGRyLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBt
b3ZsX21yKDAsIFg4Njo6ZWF4LCBYODY6OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIEptcFNyYyBlbmQgPSBfXyBqbXAoKTsKLQotICAgICAg
ICAgICAgLy8gU2xvdyBjYXNlCi0gICAgICAgICAgICBfXyBsaW5rKG5vTWF0Y2gsIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGdsb2JhbE9iamVjdCwgMCk7
Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkPihpbnN0cnVjdGlvbiArIGkpLCA4KTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9nbG9iYWwpOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIF9fIGxpbmsoZW5kLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
IGkgKz0gNjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01Q
SUxFX0JJTkFSWV9PUChvcF9kaXYpCi0gICAgICAgIGNhc2Ugb3BfcHJlX2RlYzogewotICAgICAg
ICAgICAgaW50IHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAg
ICAgIF9fIHN1YmxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6
Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKHNyYzJpbW0pIHsKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGNtcGxfaTMycihh
c0ludGVnZXIoc3JjMmltbSksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxl
LmFwcGVuZChKbXBUYWJsZShfXyBqZ2UoKSwgaSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6
OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRh
YmxlKF9fIGpnZSgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9ub3Q6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18geG9ybF9pOHIo
SlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlQm9vbCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18g
dGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVNYXNrLCBYODY6OmVheCk7IC8vIGk4
PwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCks
IGkpKTsKLSAgICAgICAgICAgIF9fIHhvcmxfaThyKChKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVC
b29sIHwgSlNJbW1lZGlhdGU6OkV4dGVuZGVkUGF5bG9hZEJpdEJvb2xWYWx1ZSksIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2pmYWxzZTogewotICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgs
IGkpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp6
ZXJvSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVu
ZChKbXBUYWJsZShfXyBqZSgpLCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAgX18gdGVz
dGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIEptcFNyYyBpc05vblplcm8gPSBfXyBqbmUoKTsKLQotICAgICAgICAgICAgX18gY21w
bF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAy
ICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRp
YXRlOjp0cnVlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICBfXyBs
aW5rKGlzTm9uWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICAgICAgY2FzZSBvcF9qZXFfbnVsbDogewotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7
Ci0KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAg
ICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6
ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNldG56X3IoWDg2OjplYXgpOwotCi0gICAgICAgICAg
ICBKbXBTcmMgd2FzTm90SW1tZWRpYXRlID0gX18gam1wKCk7Ci0KLSAgICAgICAgICAgIF9fIGxp
bmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIo
fkpTSW1tZWRpYXRlOjpFeHRlbmRlZFRhZ0JpdFVuZGVmaW5lZCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgX18gYW5kbF9ycihYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gY21w
bF9pMzJyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZU51bGwsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIF9fIHNldGVfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1t
ZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoMCwgWDg2OjplYXgpOwotICAg
ICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam56KCksIGkgKyAyICsgdGFy
Z2V0KSk7ICAgICAgICAgICAgCi0KLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9OwotICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDogewotICAgICAgICAg
ICAgdW5zaWduZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBYODY6OmVheCwgaSk7Ci0gICAg
ICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAgICAgICAg
X18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBY
ODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4
KTsKLSAgICAgICAgICAgIF9fIHNldHpfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIEptcFNy
YyB3YXNOb3RJbW1lZGlhdGUgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAgX18gbGluayhpc0lt
bWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1l
ZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBf
XyBhbmRsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIo
SlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18g
c2V0bmVfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRl
LCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoMCwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam56KCksIGkgKyAyICsgdGFyZ2V0KSk7
ICAgICAgICAgICAgCi0KLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcG9zdF9pbmM6IHsKLSAgICAgICAgICAgIGludCBz
cmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIG1v
dmxfcnIoWDg2OjplYXgsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyBhZGRsX2k4cihnZXREZVRh
Z2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6
ZWR4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpv
KCksIGkpKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6
OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF91bmV4cGVjdGVkX2xvYWQ6IHsKLSAgICAgICAg
ICAgIEpTVmFsdWUqIHYgPSBtX2NvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50c1tpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVn
ZXIodiksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2pzcjogewotICAgICAgICAg
ICAgaW50IHJldEFkZHJEc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBfXyBtb3ZsX2kzMm0oMCwgc2l6ZW9mKFJlZ2lzdGVyKSAqIHJldEFkZHJEc3QsIFg4Njo6
ZWRpKTsKLSAgICAgICAgICAgIEptcERzdCBhZGRyUG9zaXRpb24gPSBfXyBsYWJlbCgpOwotICAg
ICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam1wKCksIGkgKyAyICsgdGFy
Z2V0KSk7Ci0gICAgICAgICAgICBKbXBEc3Qgc3JldFRhcmdldCA9IF9fIGxhYmVsKCk7Ci0gICAg
ICAgICAgICBtX2pzclNpdGVzLmFwcGVuZChKU1JJbmZvKGFkZHJQb3NpdGlvbiwgc3JldFRhcmdl
dCkpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9zcmV0OiB7Ci0gICAgICAgICAgICBfXyBqbXBfbShzaXplb2YoUmVn
aXN0ZXIpICogaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplZGkpOwotICAgICAg
ICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9lcTogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2Ojpl
ZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIHNldGVfcihYODY6OmVheCk7Ci0gICAgICAg
ICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRU
YWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0g
NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbHNoaWZ0
OiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2
OjplY3gsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWF4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVj
eCwgaSk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplYXgpOwotICAg
ICAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9f
IHNobGxfQ0xyKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU9y
U2xvd0Nhc2UoWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
OwotICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRl
TnVtZXJpY0FyZyhzcmMxKSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gYW5kbF9pMzJyKGFz
SW50ZWdlcih2YWx1ZSksIFg4Njo6ZWF4KTsgLy8gRklYTUU6IG1ha2UgaXQgbW9yZSBvYnZpb3Vz
IHRoaXMgaXMgcmVseWluZyBvbiB0aGUgZm9ybWF0IG9mIEpTSW1tZWRpYXRlCi0gICAgICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkg
ewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgs
IGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVh
eCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gYW5kbF9pMzJyKGFzSW50ZWdlcih2YWx1ZSksIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAg
X18gYW5kbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA1
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yc2hpZnQ6
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVk
aWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIC8vIE1hc2sgd2l0
aCAweDFmIGFzIHBlciBlY21hLTI2MiAxMS43LjIgc3RlcCA3LgotICAgICAgICAgICAgICAgIF9f
IHNhcmxfaThyKEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIodmFsdWUpICYgMHgxZiwg
WDg2OjplYXgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhzcmMxLCBYODY6OmVheCwgc3JjMiwgWDg2OjplY3gsIGkpOwotICAg
ICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0g
ICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsK
LSAgICAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplY3gpOwotICAgICAg
ICAgICAgICAgIF9fIHNhcmxfQ0xyKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVtaXRGYXN0QXJpdGhQb3RlbnRpYWxseVJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2JpdG5vdDogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0gICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAg
ICAgICAgX18geG9ybF9pOHIofkpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV93aXRoX2Jhc2U6IHsKLSAgICAgICAg
ICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0
YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7Ci0g
ICAgICAgICAgICBGdW5jRXhwck5vZGUqIGZ1bmMgPSAobV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhw
cmVzc2lvbnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pLmdldCgpOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMp
LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3
X2Z1bmNfZXhwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX21vZDogewotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2Ojpl
YXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGkpOwotICAgICAgICAgICAg
ZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1
bXBJZlplcm8oWDg2OjplY3gpLCBpKSk7Ci0gICAgICAgICAgICBfXyBjZHEoKTsKLSAgICAgICAg
ICAgIF9fIGlkaXZsX3IoWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFn
SW1tZWRpYXRlKFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2p0cnVlOiB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6
OmVheCwgaSk7Ci0KLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlh
dGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc1pl
cm8gPSBfXyBqZSgpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFn
Qml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5k
KEptcFRhYmxlKF9fIGpuZSgpLCBpICsgMiArIHRhcmdldCkpOwotCi0gICAgICAgICAgICBfXyBj
bXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkpLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqZSgpLCBpICsg
MiArIHRhcmdldCkpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVk
aWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIF9f
IGxpbmsoaXNaZXJvLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9s
ZXNzKQotICAgICAgICBjYXNlIG9wX25lcTogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAg
IF9fIGNtcGxfcnIoWDg2OjplYXgsIFg4Njo6ZWR4KTsKLQotICAgICAgICAgICAgX18gc2V0bmVf
cihYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOwotCi0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOwotCi0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3Bvc3RfZGVjOiB7Ci0gICAgICAgICAgICBpbnQgc3JjRHN0ID0g
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyBtb3ZsX3JyKFg4
Njo6ZWF4LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gc3VibF9pOHIoZ2V0RGVUYWdnZWRDb25z
dGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVkeCk7Ci0g
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplZHgpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF91cnNoaWZ0KQotICAgICAgICBj
YXNlIG9wX2JpdHhvcjogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEltbU51bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIF9fIHhvcmxfcnIo
WDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVk
aWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7Ci0gICAg
ICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IG1fY29kZUJsb2NrLT5yZWdleHBzW2luc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmRdLmdldCgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0
YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KHJlZ0V4cCksIDApOwotICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfcmVnZXhwKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2JpdG9yOiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgX18gb3Js
X3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90aHJvdzogewot
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90aHJvdyk7Ci0gICAgICAgICAgICBfXyBhZGRsX2k4cigw
eDIwLCBYODY6OmVzcCk7Ci0gICAgICAgICAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgICAg
ICAgICAgX18gcG9wbF9yKFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIF9fIHBvcGxfcihYODY6OmVz
aSk7Ci0gICAgICAgICAgICBfXyByZXQoKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczogewotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfcG5hbWVzKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBp
ICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25l
eHRfcG5hbWU6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25leHRfcG5hbWUpOwotICAg
ICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEpt
cFNyYyBlbmRPZkl0ZXIgPSBfXyBqZSgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIG1fam1wVGFi
bGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAg
ICAgX18gbGluayhlbmRPZkl0ZXIsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgaSArPSA0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXNoX3Njb3Bl
OiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1c2hfc2NvcGUpOwotICAgICAgICAgICAgaSAr
PSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wb3Bf
c2NvcGU6IHsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
cG9wX3Njb3BlKTsKLSAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX3R5cGVvZikKLSAgICAgICAg
Q1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfdW5kZWZpbmVkKQotICAgICAgICBDVElfQ09NUElM
RV9VTkFSWV9PUChvcF9pc19ib29sZWFuKQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChv
cF9pc19udW1iZXIpCi0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX3N0cmluZykK
LSAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfb2JqZWN0KQotICAgICAgICBDVElf
Q09NUElMRV9VTkFSWV9PUChvcF9pc19mdW5jdGlvbikKLSAgICAgICAgY2FzZSBvcF9zdHJpY3Rl
cTogewotICAgICAgICAgICAgY29tcGlsZU9wU3RyaWN0RXEoaW5zdHJ1Y3Rpb24gKyBpLCBpLCBP
cFN0cmljdEVxKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbnN0cmljdGVxOiB7Ci0gICAgICAgICAgICBjb21waWxl
T3BTdHJpY3RFcShpbnN0cnVjdGlvbiArIGksIGksIE9wTlN0cmljdEVxKTsKLSAgICAgICAgICAg
IGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
dG9fanNudW1iZXI6IHsKLSAgICAgICAgICAgIGludCBzcmNWUmVnID0gaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJl
ZywgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOwotICAgICAgICAgICAg
Sm1wU3JjIHdhc0ltbWVkaWF0ZSA9IF9fIGpueigpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgsIGksIHNyY1ZSZWcpOwotCi0gICAgICAgICAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShOdW1iZXJUeXBlLCBGSUVMRF9PRkZT
RVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCks
IGkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgX18gbGluayh3YXNJbW1lZGlhdGUsIF9f
IGxhYmVsKCkpOwotCi0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pbjogewotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbik7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9wdXNoX25ld19zY29wZTogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsK
LSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHVzaF9uZXdf
c2NvcGUpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKLSAgICAgICAgICAgIGVtaXRH
ZXRDVElQYXJhbShDVElfQVJHU19jYWxsRnJhbWUsIFg4Njo6ZWRpKTsgLy8gZWRpIDo9IHIKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2ptcF9zY29wZXM6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNv
dW50ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdDb25zdGFudChjb3VudCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2ptcF9zY29wZXMpOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fam1wVGFibGUu
YXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAg
aSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9w
dXRfYnlfaW5kZXg6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2luZGV4KTsKLSAgICAgICAgICAgIGkg
Kz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbTogewotICAgICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0g
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNjcnV0
aW5lZSA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCi0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZt
X2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICAg
ICAgICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGksIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7Ci0gICAgICAgICAgICBqdW1wVGFi
bGUtPmN0aU9mZnNldHMuZ3JvdyhqdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKLQot
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCAw
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQodGFibGVJbmRl
eCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3N3
aXRjaF9pbW0pOwotICAgICAgICAgICAgX18gam1wX3IoWDg2OjplYXgpOwotICAgICAgICAgICAg
aSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9z
d2l0Y2hfY2hhcjogewotICAgICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNj
cnV0aW5lZSA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCi0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9
ICZtX2NvZGVCbG9jay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAg
ICAgICAgICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGksIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBqdW1w
VGFibGUtPmN0aU9mZnNldHMuZ3JvdyhqdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsK
LQotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQodGFibGVJ
bmRleCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X3N3aXRjaF9jaGFyKTsKLSAgICAgICAgICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3Bfc3dpdGNoX3N0cmluZzogewotICAgICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0
T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNjcnV0aW5lZSA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAg
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBU
YWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
LSAgICAgICAgICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGks
IGRlZmF1bHRPZmZzZXQpKTsKLQotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnQ29uc3RhbnQodGFibGVJbmRleCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9zdHJpbmcpOwotICAgICAgICAgICAgX18gam1wX3Io
WDg2OjplYXgpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWxfYnlfdmFsOiB7Ci0gICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAw
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV92YWwpOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcjogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAzXS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2dldHRlcik7Ci0gICAgICAgICAgICBpICs9IDQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zZXR0
ZXI6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA4LCBY
ODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X3B1dF9zZXR0ZXIpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfZXJyb3I6IHsKLSAgICAgICAgICAgIEpTVmFs
dWUqIG1lc3NhZ2UgPSBtX2NvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50c1tpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdDb25zdGFudChhc0ludGVnZXIobWVzc2FnZSksIDQpOwotICAgICAgICAgICAgZW1pdFB1dENU
SUFyZ0NvbnN0YW50KG1fY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKCZpbnN0cnVjdGlvbltp
XSksIDgpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9u
ZXdfZXJyb3IpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCA0KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kLCA4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfZGVidWcpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lcV9udWxsOiB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
dW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOwotICAgICAgICAg
ICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAg
ICAgICAgSm1wU3JjIGlzSW1tZWRpYXRlID0gX18gam56KCk7Ci0KLSAgICAgICAgICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMybShNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBG
SUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBfXyBzZXRuel9yKFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgSm1wU3JjIHdh
c05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRp
YXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0
ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGFu
ZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0lt
bWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXRl
X3IoWDg2OjplYXgpOwotCi0gICAgICAgICAgICBfXyBsaW5rKHdhc05vdEltbWVkaWF0ZSwgX18g
bGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgp
OwotICAgICAgICAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KLSAgICAgICAgICAgIGkgKz0gMzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmVxX251bGw6
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZDsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVh
eCwgaSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQot
ICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSks
IFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFn
cyksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNldHpfcihYODY6OmVheCk7Ci0KLSAgICAg
ICAgICAgIEptcFNyYyB3YXNOb3RJbW1lZGlhdGUgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAg
X18gbGluayhpc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxf
aTMycih+SlNJbW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBfXyBhbmRsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBf
XyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgX18gc2V0bmVfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsod2Fz
Tm90SW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4
Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAg
ICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9lbnRlcjogewotICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3Qg
dXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50Ci0gICAgICAgICAgICAvLyByZWdp
c3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xv
bmdpbmcKLSAgICAgICAgICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBw
cmVzc3VyZS4KLSAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJz
ICsgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGogPSAwOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgICAgICAgICBlbWl0SW5p
dFJlZ2lzdGVyKGopOwotCi0gICAgICAgICAgICBpKz0gMTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZW50ZXJfd2l0aF9hY3RpdmF0aW9uOiB7Ci0gICAg
ICAgICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6
ZSBvdXIgY29uc3RhbnQKLSAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwotICAgICAgICAgICAgLy8g
b2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgICAgICAgICAg
c2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMgKyBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBj
b3VudDsgKytqKQotICAgICAgICAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIoaik7Ci0KLSAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHVzaF9hY3RpdmF0aW9u
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7Ci0KLSAgICAgICAgICAgIGkrPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOiB7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCAobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMgPT0gMSkgPyBJbnRl
cnByZXRlcjo6Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zIDogSW50ZXJwcmV0ZXI6
OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKTsKLSAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29udmVydF90aGlzOiB7Ci0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplZHgpOwotICAgICAgICAgICAg
X18gdGVzdGxfaTMybShOZWVkc1RoaXNDb252ZXJzaW9uLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJl
LCBtX3R5cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbnooKSwgaSkpOwotCi0gICAgICAgICAgICBpICs9
IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Byb2Zp
bGVfd2lsbF9jYWxsOiB7Ci0gICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJv
ZmlsZXJSZWZlcmVuY2UsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybSgwLCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgbm9Qcm9maWxlciA9IF9fIGplKCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCAwLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX3Byb2ZpbGVfd2lsbF9jYWxsKTsKLSAgICAgICAgICAgIF9fIGxp
bmsobm9Qcm9maWxlciwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2Fs
bDogewotICAgICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJl
bmNlLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0oMCwgWDg2OjplYXgpOwot
ICAgICAgICAgICAgSm1wU3JjIG5vUHJvZmlsZXIgPSBfXyBqZSgpOwotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCwgMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9wcm9maWxlX2RpZF9jYWxsKTsKLSAgICAgICAgICAgIF9fIGxpbmsobm9Qcm9maWxl
ciwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVy
aWM6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgotICAgICAgICBjYXNlIG9wX2dl
dF9ieV9pZF9wcm90b19saXN0OgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgotICAg
ICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmX2xpc3Q6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3N0
cmluZ19sZW5ndGg6Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3Ry
YW5zaXRpb246Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPT0gbV9j
b2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSk7Ci0gICAgQVNTRVJU
KGNhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKSk7
CitzdGF0aWMgSlNPYmplY3QqIHJlc2l6ZVByb3BlcnR5U3RvcmFnZShKU09iamVjdCogYmFzZU9i
amVjdCwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAgIGJhc2VPYmplY3Qt
PmFsbG9jYXRlUHJvcGVydHlTdG9yYWdlSW5saW5lKG9sZFNpemUsIG5ld1NpemUpOworICAgIHJl
dHVybiBiYXNlT2JqZWN0OwogfQogCi0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNz
KCkKK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCiB7Ci0gICAg
dW5zaWduZWQgam1wVGFibGVDb3VudCA9IG1fam1wVGFibGUuc2l6ZSgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBqbXBUYWJsZUNvdW50OyArK2kpCi0gICAgICAgIF9fIGxpbmsobV9q
bXBUYWJsZVtpXS5mcm9tLCBtX2xhYmVsc1ttX2ptcFRhYmxlW2ldLnRvXSk7Ci0gICAgbV9qbXBU
YWJsZS5jbGVhcigpOworICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNh
cGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOwogfQog
Ci0jZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0UobmFtZSkgXAotICAgIGNh
c2UgbmFtZTogeyBcCi0gICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7IFwK
LSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9t
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4
KTsgXAotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsgXAotICAgICAgICBpICs9IDQ7IFwKLSAgICAgICAgYnJlYWs7IFwKK3ZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCB2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIFZlY3RvcjxKbXBTcmMsIDE2
PiBmYWlsdXJlQ2FzZXM7CisgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmln
aHQgU3RydWN0dXJlLgorICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4
Njo6ZWF4KTsKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKKyAgICBfXyBjbXBs
X2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4ob2xkU3RydWN0dXJlKSwgRklFTERfT0ZG
U0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7CisgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChfXyBqbmUoKSk7CisgICAgVmVjdG9yPEptcFNyYz4gc3VjY2Vzc0Nhc2VzOworCisgICAg
Ly8gIGVjeCA9IGJhc2VPYmplY3QKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGws
IG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAvLyBwcm90byhlY3gpID0g
YmFzZU9iamVjdC0+c3RydWN0dXJlKCktPnByb3RvdHlwZSgpCisgICAgX18gY21wbF9pMzJtKE9i
amVjdFR5cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZG
U0VUKFR5cGVJbmZvLCBtX3R5cGUpLCBYODY6OmVjeCk7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChfXyBqbmUoKSk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3By
b3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgCisgICAgLy8gZWN4ID0gYmFzZU9i
amVjdC0+bV9zdHJ1Y3R1cmUKKyAgICBmb3IgKFJlZlB0cjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWlu
LT5oZWFkKCk7ICppdDsgKytpdCkgeworICAgICAgICAvLyBudWxsIGNoZWNrIHRoZSBwcm90b3R5
cGUKKyAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihqc051bGwoKSksIFg4Njo6ZWN4KTsK
KyAgICAgICAgc3VjY2Vzc0Nhc2VzLmFwcGVuZChfXyBqZSgpKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGUgc3RydWN0dXJlIGlkCisgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0
PHVpbnQzMl90PihpdC0+Z2V0KCkpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSks
IFg4Njo6ZWN4KTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7CisgICAg
ICAgIAorICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJl
KSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAgICAgX18gY21wbF9pMzJtKE9iamVjdFR5cGUs
IEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZGU0VUKFR5cGVJ
bmZvLCBtX3R5cGUpLCBYODY6OmVjeCk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18g
am5lKCkpOworICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fcHJv
dG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKICAgICB9CiAKLSNkZWZpbmUgQ1RJX0NPTVBJ
TEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VCTEVfRU5UUlkobmFtZSkgXAotICAgIGNhc2UgbmFt
ZTogeyBcCi0gICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7IFwKLSAgICAg
ICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7ICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9t
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4
KTsgXAotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsgXAotICAgICAgICBpICs9IDQ7IFwKLSAgICAgICAgYnJlYWs7IFwKKyAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Vj
Y2Vzc0Nhc2VzLnNpemUoKTsgKytpKQorICAgICAgICBfXyBsaW5rKHN1Y2Nlc3NDYXNlc1tpXSwg
X18gbGFiZWwoKSk7CisKKyAgICBKbXBTcmMgY2FsbFRhcmdldDsKKworICAgIC8vIGVtaXQgYSBj
YWxsIG9ubHkgaWYgc3RvcmFnZSByZWFsbG9jIGlzIG5lZWRlZAorICAgIGlmICh0cmFuc2l0aW9u
V2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkpIHsKKyAg
ICAgICAgX18gcHVzaGxfcihYODY6OmVkeCk7CisgICAgICAgIF9fIHB1c2hsX2kzMihuZXdTdHJ1
Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICBfXyBwdXNobF9pMzIo
b2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgX18gcHVz
aGxfcihYODY6OmVheCk7CisgICAgICAgIGNhbGxUYXJnZXQgPSBfXyBjYWxsKCk7CisgICAgICAg
IF9fIGFkZGxfaTMycigzICogc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOworICAgICAgICBfXyBw
b3BsX3IoWDg2OjplZHgpOwogICAgIH0KKworICAgIC8vIEFzc3VtZXMgbV9yZWZDb3VudCBjYW4g
YmUgZGVjcmVtZW50ZWQgZWFzaWx5LCByZWZjb3VudCBkZWNyZW1lbnQgaXMgc2FmZSBhcyAKKyAg
ICAvLyBjb2RlYmxvY2sgc2hvdWxkIGVuc3VyZSBvbGRTdHJ1Y3R1cmUtPm1fcmVmQ291bnQgPiAw
CisgICAgX18gc3VibF9pOG0oMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2xkU3RydWN0dXJl
KSk7CisgICAgX18gYWRkbF9pOG0oMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmV3U3RydWN0
dXJlKSk7CisgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KG5ld1N0
cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOwor
CisgICAgLy8gd3JpdGUgdGhlIHZhbHVlCisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNP
YmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBt
b3ZsX3JtKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVh
eCk7CisKKyAgICBfXyByZXQoKTsKICAgICAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCi17Ci0gICAgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0g
MDsKLSAgICB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCA9IDA7CisgICAgSm1wU3JjIGZhaWx1
cmVKdW1wOworICAgIGlmIChmYWlsdXJlQ2FzZXMuc2l6ZSgpKSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmYWlsdXJlQ2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBf
XyBsaW5rKGZhaWx1cmVDYXNlc1tpXSwgX18gbGFiZWwoKSk7CisgICAgICAgIF9fIHJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKKyAgICAgICAgZmFpbHVyZUp1bXAgPSBf
XyBqbXAoKTsKKyAgICB9CiAKLSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nh
c2VzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgLy8gRklYTUU6IGVuYWJsZSBwZWVwaG9sZSBv
cHRpbWl6YXRpb25zIGZvciBzbG93IGNhc2VzIHdoZW4gYXBwbGljYWJsZQotICAgICAgICBraWxs
TGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5
KCk7CiAKLSAgICAgICAgdW5zaWduZWQgaSA9IGl0ZXItPnRvOwotI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgdW5zaWduZWQgZmlyc3RUbyA9IGk7Ci0jZW5kaWYKKyAgICBpZiAoZmFpbHVyZUNhc2Vz
LnNpemUoKSkKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVKdW1wLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWls
KSk7CiAKLSAgICAgICAgc3dpdGNoIChPcGNvZGVJRCBvcGNvZGVJRCA9IG1faW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGluc3RydWN0aW9uW2ldLnUub3Bjb2RlKSkgewotICAgICAgICBjYXNlIG9w
X2NvbnZlcnRfdGhpczogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnZlcnRfdGhpcyk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9hZGQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0g
Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7Ci0gICAgICAgICAgICAgICAg
Sm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207Ci0gICAgICAgICAgICAgICAgX18gbGluaygoKytp
dGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgX18gc3VibF9pMzJyKGdl
dERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCA0KTsKLSAgICAgICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7Ci0gICAgICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVl
KiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgewotICAgICAg
ICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgICAgIF9f
IGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIF9fIHN1
YmxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgpOwot
ICAgICAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOwotICAgICAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFuZFR5cGVzOjpmcm9t
SW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmICh0
eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSAmJiB0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVt
YmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uo
b3BfYWRkLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKLSAgICAgICAgICAgIC8vIFRoZSBz
bG93IGNhc2UgdGhhdCBoYW5kbGVzIGFjY2Vzc2VzIHRvIGFycmF5cyAoYmVsb3cpIG1heSBqdW1w
IGJhY2sgdXAgdG8gaGVyZS4gCi0gICAgICAgICAgICBKbXBEc3QgYmVnaW5HZXRCeVZhbFNsb3cg
PSBfXyBsYWJlbCgpOwotCi0gICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsK
LSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBl
bWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIGxp
bmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV92YWwpOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gam1wKCksIG1fbGFiZWxzW2kgKyA0XSk7Ci0K
LSAgICAgICAgICAgIC8vIFRoaXMgaXMgc2xvdyBjYXNlIHRoYXQgaGFuZGxlcyBhY2Nlc3NlcyB0
byBhcnJheXMgYWJvdmUgdGhlIGZhc3QgY3V0LW9mZi4KLSAgICAgICAgICAgIC8vIEZpcnN0LCBj
aGVjayBpZiB0aGlzIGlzIGFuIGFjY2VzcyB0byB0aGUgdmVjdG9yCi0gICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfcm0o
WDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yTGVuZ3RoKSwgWDg2
OjplY3gpOwotICAgICAgICAgICAgX18gbGluayhfXyBqYmUoKSwgYmVnaW5HZXRCeVZhbFNsb3cp
OwotCi0gICAgICAgICAgICAvLyBva2F5LCBtaXNzZWQgdGhlIGZhc3QgcmVnaW9uLCBidXQgaXQg
aXMgc3RpbGwgaW4gdGhlIHZlY3Rvci4gIEdldCB0aGUgdmFsdWUuCi0gICAgICAgICAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gs
IFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAvLyBD
aGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBsb2FkZWQgaXMgemVybzsgaWYgc28gd2UgbmVlZCB0byBy
ZXR1cm4gdW5kZWZpbmVkLgotICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplY3gsIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwgYmVnaW5HZXRCeVZhbFNsb3cpOwot
ICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVjeCwgWDg2OjplYXgpOwotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6
OmVheCk7Ci0KLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3ViOiB7Ci0gICAgICAgICAgICBjb21waWxlQmluYXJ5QXJp
dGhPcFNsb3dDYXNlKG9wX3N1YiwgaXRlciwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwg
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpLCBp
KTsKLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0gaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBpZiAoZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1l
cmljQXJnKHNyYzIpKQotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDQpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBp
ICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xz
aGlmdDogewotICAgICAgICAgICAgSm1wU3JjIG5vdEltbTEgPSBpdGVyLT5mcm9tOwotICAgICAg
ICAgICAgSm1wU3JjIG5vdEltbTIgPSAoKytpdGVyKS0+ZnJvbTsKLSAgICAgICAgICAgIF9fIGxp
bmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIF9fIGxp
bmsobm90SW1tMSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbTIsIF9f
IGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbHNoaWZ0KTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2xvb3BfaWZfbGVzczogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQot
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51
bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAo
c3JjMmltbSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7Ci0gICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzKTsKLSAgICAgICAgICAgICAgICBf
XyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxpbmso
X18gam5lKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAg
ICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOwotICAgICAgICAgICAgICAgIF9fIHRl
c3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhfXyBq
bmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
aXRlciwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICAgICAgKytp
dGVyOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLQotICAg
ICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVkeCwgOCk7Ci0gICAgICAgICAgICBKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkKTsKLQotICAgICAgICAgICAgLy8gVHJhY2sg
dGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHJl
cGF0Y2ggaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0
ZWNvZGVJbmRleCA9PSBpKTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlv
bkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24g
PSBjYWxsOwotICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7Ci0K
LSAgICAgICAgICAgIGkgKz0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7Ci0gICAgICAgICAgICAvLyBBcyBmb3IgdGhlIGhvdCBw
YXRoIG9mIGdldF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiB1c2UgYW4gYXJj
aGl0ZWN0dXJlIHNwZWNpZmljIG9mZnNldAotICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBvbmx5
IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0cmFj
ayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyBvZiB0aGUgY2FsbCAo
d2hpY2ggd2UgY2FuIHVzZSB0byBsb29rIHVwIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uKSwgYnV0
IHNob3VsZCBhIGFycmF5LWxlbmd0aCBvcgotICAgICAgICAgICAgLy8gcHJvdG90eXBlIGFjY2Vz
cyB0cmFtcG9saW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBUbyBk
byBzbyB3ZSBjYW4gc3VidHJhY3QgYmFjawotICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGZy
b20gdGhlIGNhbGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2FzZS4KLQotICAgICAgICAgICAg
aWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQpKQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRl
ci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgaWYgKHRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VS
ZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSkKKyAgICAgICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIGNhbGxUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlc2l6ZVBy
b3BlcnR5U3RvcmFnZSkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7CisgICAgCisgICAgY3RpUmVwYXRjaENhbGxC
eVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29kZSk7Cit9CiAKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgICAgICBKbXBEc3QgY29sZFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7Ci0jZW5kaWYg
ICAgICAgIAotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAg
ICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25z
dGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAgICAg
Sm1wU3JjIGNhbGwgPSBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9p
ZCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhjb2xkUGF0aEJlZ2luLCBjYWxsKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dD
YXNlQ2FsbCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwotCi0gICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24g
b2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1h
dGlvbi4KLSAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09
IGkpOwotICAgICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAg
ICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKLQotICAgICAgICAgICAg
aSArPSA4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9s
b29wX2lmX2xlc3NlcTogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQot
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51
bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAo
c3JjMmltbSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7Ci0gICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOwotICAgICAgICAgICAgICAg
IF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGlu
ayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAg
ICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKTsKLSAgICAgICAgICAgICAgICBf
XyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxpbmso
X18gam5lKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3ByZV9pbmM6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+
ZnJvbTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgX18gc3VibF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0lt
bWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBsaW5r
KG5vdEltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4
LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJl
X2luYyk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Ci0gICAg
ICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIC8vIE5vcm1hbCBzbG93IGNhc2VzIC0g
ZWl0aGVyIGlzIG5vdCBhbiBpbW1lZGlhdGUgaW1tLCBvciBpcyBhbiBhcnJheS4KLSAgICAgICAg
ICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgX18gbGluaygoKytp
dGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5m
cm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hl
Y2soWDg2OjplZHgpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCBYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4
LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgOCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWwpOwotICAgICAgICAgICAgX18gbGluayhf
XyBqbXAoKSwgbV9sYWJlbHNbaSArIDRdKTsKLQotICAgICAgICAgICAgLy8gc2xvdyBjYXNlcyBm
b3IgaW1tZWRpYXRlIGludCBhY2Nlc3NlcyB0byBhcnJheXMKLSAgICAgICAgICAgIF9fIGxpbmso
KCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVy
KS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA4KTsKLSAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbF9h
cnJheSk7Ci0KLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfbG9vcF9pZl90cnVlOiB7Ci0gICAgICAgICAgICBlbWl0U2xv
d1NjcmlwdENoZWNrKGkpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKLSAgICAgICAg
ICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgX18g
bGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDIgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIGkg
Kz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJl
X2RlYzogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOwotICAg
ICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAg
ICBfXyBhZGRsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpv
bmVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBf
XyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKLSAgICAgICAgICAgIGkg
Kz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5s
ZXNzOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1t
ZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGlmIChzcmMyaW1tKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBf
XyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsK
LSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qbGVzcyk7Ci0gICAgICAgICAgICAgICAg
X18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBsaW5r
KF9fIGplKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAg
ICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9qbGVzcyk7Ci0gICAgICAgICAgICAgICAgX18gdGVzdGxfcnIo
WDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1f
bGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25vdDog
ewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIF9fIHhvcmxfaThyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wsIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9ub3QpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfamZhbHNlOiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKLSAgICAgICAgICAgIF9f
IHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgX18gbGluayhf
XyBqZSgpLCBtX2xhYmVsc1tpICsgMiArIHRhcmdldF0pOyAvLyBpbnZlcnRlZCEKLSAgICAgICAg
ICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfcG9zdF9pbmM6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcG9zdF9pbmMpOwotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2JpdG5vdDogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRub3QpOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfYml0YW5kOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0
cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlmIChnZXRDb25zdGFudElt
bWVkaWF0ZU51bWVyaWNBcmcoc3JjMSkpIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXIt
PmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWF4LCA0KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2JpdGFuZCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRDb25zdGFudEltbWVkaWF0
ZU51bWVyaWNBcmcoc3JjMikpIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20s
IF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDAp
OwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIs
IDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX2JpdGFuZCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0
ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9t
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA1OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qdHJ1ZTogewotICAg
ICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVh
eCwgWDg2OjplYXgpOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxz
W2kgKyAyICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Bvc3RfZGVjOiB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmso
KCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3Bvc3RfZGVjKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKLSAgICAgICAgICAg
IF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQp
OwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXR4b3Ip
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRl
ci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4
LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRvcik7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9lcTogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2VxKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25lcTogewot
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX25lcSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9E
T1VCTEVfRU5UUlkob3Bfc3RyaWN0ZXEpOwotICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Bf
U0xPV19DQVNFX0RPVUJMRV9FTlRSWShvcF9uc3RyaWN0ZXEpOwotICAgICAgICBjYXNlIG9wX2lu
c3RhbmNlb2Y6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDRdLnUub3BlcmFuZCwgOCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9pbnN0YW5jZW9mKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBp
ICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX21v
ZDogewotICAgICAgICAgICAgSm1wU3JjIG5vdEltbTEgPSBpdGVyLT5mcm9tOwotICAgICAgICAg
ICAgSm1wU3JjIG5vdEltbTIgPSAoKytpdGVyKS0+ZnJvbTsKLSAgICAgICAgICAgIF9fIGxpbmso
KCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJl
VGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0lt
bWVkaWF0ZShYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbTEsIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0yLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVjeCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX21vZCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9tdWw6IHsKLSAgICAgICAgICAgIGlu
dCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNy
YzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNyYzIg
PSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3Jj
MVZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpOwotICAgICAgICAg
ICAgSlNWYWx1ZSogc3JjMlZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNy
YzIpOwotICAgICAgICAgICAgaW50MzJfdCB2YWx1ZTsKLSAgICAgICAgICAgIGlmIChzcmMxVmFs
dWUgJiYgKCh2YWx1ZSA9IEpTSW1tZWRpYXRlOjppbnRWYWx1ZShzcmMxVmFsdWUpKSA+IDApKSB7
Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgICAgICAvLyBUaGVyZSBpcyBhbiBleHRyYSBzbG93IGNhc2UgZm9yIChvcDEgKiAtTikgb3Ig
KC1OICogb3AyKSwgdG8gY2hlY2sgZm9yIDAgc2luY2UgdGhpcyBzaG91bGQgcHJvZHVjZSBhIHJl
c3VsdCBvZiAtMC4KLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihzcmMxLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbXVsKTsKLSAgICAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNyYzJW
YWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzJWYWx1ZSkpID4gMCkp
IHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgICAgIC8vIFRoZXJlIGlzIGFuIGV4dHJhIHNsb3cgY2FzZSBmb3IgKG9wMSAqIC1OKSBv
ciAoLU4gKiBvcDIpLCB0byBjaGVjayBmb3IgMCBzaW5jZSB0aGlzIHNob3VsZCBwcm9kdWNlIGEg
cmVzdWx0IG9mIC0wLgotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOwotICAgICAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uob3BfbXVsLCBpdGVyLCBkc3Qs
IHNyYzEsIHNyYzIsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5v
cGVyYW5kKSwgaSk7Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAgY2FzZSBvcF9jYWxsX2V2
YWw6Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAgICAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2UoaW5zdHJ1Y3Rpb24gKyBpLCBpLCBpdGVyLCBjYWxsTGlua0luZm9JbmRleCsr
LCBvcGNvZGVJRCk7Ci0gICAgICAgICAgICBpICs9IChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Qg
PyA3IDogNSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X3RvX2pzbnVtYmVyOiB7Ci0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
aXRlciwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICAgICAgKytp
dGVyOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLQotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3RvX2pzbnVtYmVyKTsKLQotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KK3ZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwg
dm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IGNv
ZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAKLSAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSgoaXRlciArIDEpID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8gIT0g
KGl0ZXIgKyAxKS0+dG8sIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2Rl
Z2VuLiIpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8gPT0gaXRlci0+dG8s
ICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRv
IGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYy4KKyAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8g
SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBh
bnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7CiAKLSAgICAgICAgX18gbGluayhfXyBq
bXAoKSwgbV9sYWJlbHNbaV0pOwotICAgIH0KKyAgICAvLyBSZXBhdGNoIHRoZSBvZmZzZXQgaW50
byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0aGUgU3RydWN0
dXJlIHRvIGxvb2sgZm9yLgorICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3BsYWNlbWVudChy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zm
c2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1
ZSopKTsKKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRTdHJ1
Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOworfQogCi0gICAg
QVNTRVJUKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBtX2NvZGVCbG9jay0+cHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoY2FsbExpbmtJbmZv
SW5kZXggPT0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgpKTsKK3ZvaWQgSklUOjpw
YXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRk
cmVzcyk7CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBv
bmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KKyAgICAvLyBT
aG91bGQgcHJvYmFibHkgZ28gdG8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCwg
YnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCisgICAg
Y3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOworCisg
ICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBm
cm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4KKyAgICBYODZBc3Nl
bWJsZXI6OnJlcGF0Y2hEaXNwbGFjZW1lbnQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5m
by5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCwg
Y2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgWDg2QXNzZW1ibGVyOjpyZXBh
dGNoSW1tZWRpYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2lu
KSArIHJlcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlLCByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90PihzdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlKCkKK3ZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgodm9pZCogcmV0dXJuQWRkcmVz
cykKIHsKLSNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQotICAgICAgICBfXyBtb3ZsX2kz
Mm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2spLCBtX2ludGVycHJldGVy
LT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKQotICAgICAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigp
LT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpKSwgbV9pbnRl
cnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCisgICAgU3RydWN0dXJl
U3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
CiAKLSAgICAvLyBDb3VsZCB1c2UgYSBwb3BsX20sIGJ1dCB3b3VsZCBuZWVkIHRvIG9mZnNldCB0
aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlmIHNvLgotICAgIF9fIHBvcGxfcihYODY6OmVjeCk7
Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFg4Njo6ZWN4LCBSZWdpc3RlckZpbGU6OlJl
dHVyblBDKTsKLQotICAgIEptcFNyYyBzbG93UmVnaXN0ZXJGaWxlQ2hlY2s7Ci0gICAgSm1wRHN0
IGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2s7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSA9
PSBGdW5jdGlvbkNvZGUpIHsKLSAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBmYXN0IGxpbmtl
ZCBjYWxsLCB3ZSBkbyBub3Qgc2V0IHRoaXMgdXAgaW4gdGhlIGNhbGxlci4KLSAgICAgICAgX18g
bW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrKSwgUmVnaXN0
ZXJGaWxlOjpDb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBY
ODY6OmVkaSk7Ci0KLSAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX3JlZ2lzdGVyRmls
ZSwgWDg2OjplYXgpOwotICAgICAgICBfXyBsZWFsX21yKG1fY29kZUJsb2NrLT5udW1DYWxsZWVS
ZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSwgWDg2OjplZHgpOwotICAgICAg
ICBfXyBjbXBsX21yKEZJRUxEX09GRlNFVChSZWdpc3RlckZpbGUsIG1fZW5kKSwgWDg2OjplYXgs
IFg4Njo6ZWR4KTsKLSAgICAgICAgc2xvd1JlZ2lzdGVyRmlsZUNoZWNrID0gX18gamcoKTsKLSAg
ICAgICAgYWZ0ZXJSZWdpc3RlckZpbGVDaGVjayA9IF9fIGxhYmVsKCk7Ci0gICAgfQorICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0
byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwogCi0gICAgcHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpOwotICAgIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKLSAgICBwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpOwotCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5jdGlv
bkNvZGUpIHsKLSAgICAgICAgX18gbGluayhzbG93UmVnaXN0ZXJGaWxlQ2hlY2ssIF9fIGxhYmVs
KCkpOwotICAgICAgICBlbWl0Q1RJQ2FsbCgwLCBJbnRlcnByZXRlcjo6Y3RpX3JlZ2lzdGVyX2Zp
bGVfY2hlY2spOwotICAgICAgICBKbXBTcmMgYmFja1RvQm9keSA9IF9fIGptcCgpOwotICAgICAg
ICBfXyBsaW5rKGJhY2tUb0JvZHksIGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2spOwotICAgIH0KKyAg
ICAvLyBDaGVjayBlYXggaXMgYW4gYXJyYXkKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsK
KyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOworCisgICAgLy8gQ2hlY2tzIG91
dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKKyAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOwor
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLCBYODY6
OmVjeCwgWDg2OjplY3gpOwogCi0gICAgQVNTRVJUKG1fam1wVGFibGUuaXNFbXB0eSgpKTsKKyAg
ICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCwgWDg2OjplY3gpOwor
ICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gamEoKTsKIAotICAgIHZvaWQqIGNvZGUgPSBf
XyBleGVjdXRhYmxlQ29weSgpOworICAgIF9fIGFkZGxfcnIoWDg2OjplY3gsIFg4Njo6ZWN4KTsK
KyAgICBfXyBhZGRsX2k4cigxLCBYODY6OmVjeCk7CisgICAgX18gbW92bF9ycihYODY6OmVjeCwg
WDg2OjplYXgpOworICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7CiAKLSAgICAvLyBUcmFu
c2xhdGUgdlBDIG9mZnNldHMgaW50byBhZGRyZXNzZXMgaW4gSklUIGdlbmVyYXRlZCBjb2RlLCBm
b3Igc3dpdGNoIHRhYmxlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zd2l0Y2hl
cy5zaXplKCk7ICsraSkgewotICAgICAgICBTd2l0Y2hSZWNvcmQgcmVjb3JkID0gbV9zd2l0Y2hl
c1tpXTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHJlY29yZC5ieXRlY29kZUlu
ZGV4OwotCi0gICAgICAgIGlmIChyZWNvcmQudHlwZSAhPSBTd2l0Y2hSZWNvcmQ6OlN0cmluZykg
ewotICAgICAgICAgICAgQVNTRVJUKHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6SW1tZWRp
YXRlIHx8IHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKTsgCi0gICAgICAg
ICAgICBBU1NFUlQocmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmJyYW5jaE9mZnNl
dHMuc2l6ZSgpID09IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlPZmZzZXRz
LnNpemUoKSk7Ci0KLSAgICAgICAgICAgIHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxl
LT5jdGlEZWZhdWx0ID0gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tieXRl
Y29kZUluZGV4ICsgMyArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7Ci0KLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+
YnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzW2pd
OwotICAgICAgICAgICAgICAgIHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlP
ZmZzZXRzW2pdID0gb2Zmc2V0ID8gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVs
c1tieXRlY29kZUluZGV4ICsgMyArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVK
dW1wVGFibGUtPmN0aURlZmF1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpTdHJpbmcpOwot
Ci0gICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVs
dCA9IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbYnl0ZWNvZGVJbmRleCAr
IDMgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwotCi0gICAgICAgICAgICBTdHJpbmdKdW1wVGFi
bGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSByZWNvcmQuanVtcFRhYmxlLnN0
cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUuZW5kKCk7ICAgICAgICAgICAgCi0gICAgICAgICAg
ICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ID0g
cmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGl0LT5z
ZWNvbmQuYnJhbmNoT2Zmc2V0OwotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuY3RpT2Zmc2V0
ID0gb2Zmc2V0ID8gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tieXRlY29k
ZUluZGV4ICsgMyArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUt
PmN0aURlZmF1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgdm9pZCog
Y29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CiAKLSAgICBmb3IgKFZlY3RvcjxIYW5kbGVySW5m
bz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnMuYmVnaW4o
KTsgaXRlciAhPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnMuZW5kKCk7ICsraXRlcikK
LSAgICAgICAgIGl0ZXItPm5hdGl2ZUNvZGUgPSBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUs
IG1fbGFiZWxzW2l0ZXItPnRhcmdldF0pOworICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1h
dGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cg
Y2FzZSByb3V0aW5lLgorICAgIHZvaWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNs
b3dDYXNlQ2FsbDsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwg
c2xvd0Nhc2VCZWdpbik7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNl
czIsIHNsb3dDYXNlQmVnaW4pOwogCi0gICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBpdGVyLT5mcm9tLCBpdGVyLT50byk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5jdGlS
ZXR1cm5BZGRyZXNzVlBDTWFwLmFkZChfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIGl0ZXIt
PmZyb20pLCBpdGVyLT5ieXRlY29kZUluZGV4KTsKLSAgICB9CisgICAgLy8gT24gc3VjY2VzcyBy
ZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJm
b3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KKyAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hP
ZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7CiAKLSAg
ICAvLyBMaW5rIGFic29sdXRlIGFkZHJlc3NlcyBmb3IganNyCi0gICAgZm9yIChWZWN0b3I8SlNS
SW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzclNpdGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qc3JT
aXRlcy5lbmQoKTsgKytpdGVyKQotICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtBYnNvbHV0ZUFk
ZHJlc3MoY29kZSwgaXRlci0+YWRkclBvc2l0aW9uLCBpdGVyLT50YXJnZXQpOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1f
Y29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXTsKLSAgICAgICAgaW5mby5j
YWxsUmV0dXJuTG9jYXRpb24gPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29k
ZSwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24p
OwotICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVk
QWRkcmVzcyhjb2RlLCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhC
ZWdpbik7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
Y2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewotICAgICAgICBDYWxsTGlua0luZm8mIGluZm8g
PSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvc1tpXTsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJu
TG9jYXRpb24gPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwotICAg
ICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVz
cyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdp
bik7Ci0gICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0
ZWRBZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90
UGF0aE90aGVyKTsKLSAgICAgICAgaW5mby5jb2xkUGF0aE90aGVyID0gWDg2QXNzZW1ibGVyOjpn
ZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm9baV0uY29sZFBhdGhPdGhlcik7Ci0gICAgfQorICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhh
dmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KKyAgICBtX2NvZGVC
bG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOwogCi0g
ICAgbV9jb2RlQmxvY2stPmN0aUNvZGUgPSBjb2RlOworICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0
aGUganVtcCB0byBzb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5z
dGVhZC4KKyAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93
Q2FzZTsKKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24s
IGNvZGUpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZihTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykK
QEAgLTI3ODUsMzg1ICs3MDIsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkUmVw
bGFjZShTCiAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywg
Y29kZSk7CiB9CiAKLWV4dGVybiAiQyIgewotCi0gICAgc3RhdGljIEpTT2JqZWN0KiByZXNpemVQ
cm9wZXJ0eVN0b3JhZ2UoSlNPYmplY3QqIGJhc2VPYmplY3QsIHNpemVfdCBvbGRTaXplLCBzaXpl
X3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIGJhc2VPYmplY3QtPmFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlSW5saW5lKG9sZFNpemUsIG5ld1NpemUpOwotICAgICAgICByZXR1cm4gYmFzZU9iamVj
dDsKLSAgICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBib29sIHRyYW5zaXRpb25XaWxsTmVlZFN0
b3JhZ2VSZWFsbG9jKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSkKLXsKLSAgICByZXR1cm4gb2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0
eSgpICE9IG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKTsKLX0KLQotdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sIHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVmVjdG9yPEpt
cFNyYywgMTY+IGZhaWx1cmVDYXNlczsKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9m
IHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFn
TWFzaywgWDg2OjplYXgpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAg
IF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihvbGRTdHJ1Y3R1cmUpLCBG
SUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKLSAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBWZWN0b3I8Sm1wU3JjPiBzdWNjZXNzQ2FzZXM7
Ci0KLSAgICAvLyAgZWN4ID0gYmFzZU9iamVjdAotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgIC8vIHByb3Rv
KGVjeCkgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlKCkKLSAgICBfXyBjbXBs
X2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBG
SUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1
cmUsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAKLSAgICAvLyBlY3gg
PSBiYXNlT2JqZWN0LT5tX3N0cnVjdHVyZQotICAgIGZvciAoUmVmUHRyPFN0cnVjdHVyZT4qIGl0
ID0gY2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgIC8vIG51bGwgY2hlY2sgdGhl
IHByb3RvdHlwZQotICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKGpzTnVsbCgpKSwgWDg2
OjplY3gpOwotICAgICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKF9fIGplKCkpOwotCi0gICAgICAg
IC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUgaWQKLSAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3Q+KGl0LT5nZXQoKSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlKSwgWDg2OjplY3gpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgp
KTsKLSAgICAgICAgCi0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgICAgICBfXyBjbXBsX2kzMm0oT2Jq
ZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9PRkZT
RVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChfXyBqbmUoKSk7Ci0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVy
ZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIH0KLQotICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dWNjZXNzQ2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIF9fIGxpbmsoc3VjY2Vzc0Nhc2VzW2ld
LCBfXyBsYWJlbCgpKTsKLQotICAgIEptcFNyYyBjYWxsVGFyZ2V0OwotCi0gICAgLy8gZW1pdCBh
IGNhbGwgb25seSBpZiBzdG9yYWdlIHJlYWxsb2MgaXMgbmVlZGVkCi0gICAgaWYgKHRyYW5zaXRp
b25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSkgewot
ICAgICAgICBfXyBwdXNobF9yKFg4Njo6ZWR4KTsKLSAgICAgICAgX18gcHVzaGxfaTMyKG5ld1N0
cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIF9fIHB1c2hsX2kz
MihvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAgICBfXyBw
dXNobF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgY2FsbFRhcmdldCA9IF9fIGNhbGwoKTsKLSAgICAg
ICAgX18gYWRkbF9pMzJyKDMgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7Ci0gICAgICAgIF9f
IHBvcGxfcihYODY6OmVkeCk7Ci0gICAgfQotCi0gICAgLy8gQXNzdW1lcyBtX3JlZkNvdW50IGNh
biBiZSBkZWNyZW1lbnRlZCBlYXNpbHksIHJlZmNvdW50IGRlY3JlbWVudCBpcyBzYWZlIGFzIAot
ICAgIC8vIGNvZGVibG9jayBzaG91bGQgZW5zdXJlIG9sZFN0cnVjdHVyZS0+bV9yZWZDb3VudCA+
IDAKLSAgICBfXyBzdWJsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvbGRTdHJ1Y3R1
cmUpKTsKLSAgICBfXyBhZGRsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihuZXdTdHJ1
Y3R1cmUpKTsKLSAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4obmV3
U3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7
Ci0KLSAgICAvLyB3cml0ZSB0aGUgdmFsdWUKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9f
IG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6
ZWF4KTsKLQotICAgIF9fIHJldCgpOwotICAgIAotICAgIEptcFNyYyBmYWlsdXJlSnVtcDsKLSAg
ICBpZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZmFpbHVyZUNhc2VzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgX18gbGluayhmYWls
dXJlQ2FzZXNbaV0sIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2VGb3JUcmFtcG9saW5lKCk7Ci0gICAgICAgIGZhaWx1cmVKdW1wID0gX18gam1wKCk7Ci0g
ICAgfQotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBpZiAo
ZmFpbHVyZUNhc2VzLnNpemUoKSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZh
aWx1cmVKdW1wLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1
dF9ieV9pZF9mYWlsKSk7Ci0KLSAgICBpZiAodHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxs
b2Mob2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKQotICAgICAgICBYODZBc3NlbWJsZXI6Omxp
bmsoY29kZSwgY2FsbFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVzaXplUHJvcGVy
dHlTdG9yYWdlKSk7Ci0gICAgCi0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFk
ZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKLSAgICAKLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKCkKLXsKLSAgICAvLyAoMSkgVGhlIGZpcnN0IGZ1
bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBhcnJheSBsZW5ndGgKLSAg
ICAKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gYXJyYXkKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1t
ZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFycmF5X2ZhaWx1cmVDYXNl
czEgPSBfXyBqbmUoKTsKLSAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4obV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMg
YXJyYXlfZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5
ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKLSAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLCBYODY6OmVheCwg
WDg2OjplYXgpOwotCi0gICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJbW1lZGlhdGVJ
bnQsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgYXJyYXlfZmFpbHVyZUNhc2VzMyA9IF9fIGphKCk7
Ci0KLSAgICBfXyBhZGRsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18gYWRkbF9pOHIo
MSwgWDg2OjplYXgpOwotICAgIAotICAgIF9fIHJldCgpOwotCi0gICAgLy8gKDIpIFRoZSBzZWNv
bmQgZnVuY3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIHN0cmluZyBsZW5n
dGgKLSAgICAKLSAgICBKbXBEc3Qgc3RyaW5nTGVuZ3RoQmVnaW4gPSBfXyBhbGlnbigxNik7Ci0K
LSAgICAvLyBDaGVjayBlYXggaXMgYSBzdHJpbmcKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIHN0cmluZ19mYWlsdXJlQ2FzZXMx
ID0gX18gam5lKCk7Ci0gICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KG1faW50ZXJwcmV0ZXItPm1fanNTdHJpbmdWcHRyKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBz
dHJpbmdfZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5
ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCi0gICAgX18gbW92bF9tcihGSUVM
RF9PRkZTRVQoSlNTdHJpbmcsIG1fdmFsdWUpICsgRklFTERfT0ZGU0VUKFVTdHJpbmcsIG1fcmVw
KSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChVU3Ry
aW5nOjpSZXAsIGxlbiksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0KLSAgICBfXyBjbXBsX2kzMnIo
SlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCwgWDg2OjplYXgpOwotICAgIEptcFNyYyBzdHJp
bmdfZmFpbHVyZUNhc2VzMyA9IF9fIGphKCk7Ci0KLSAgICBfXyBhZGRsX3JyKFg4Njo6ZWF4LCBY
ODY6OmVheCk7Ci0gICAgX18gYWRkbF9pOHIoMSwgWDg2OjplYXgpOwotICAgIAotICAgIF9fIHJl
dCgpOwotCi0gICAgLy8gKDMpIFRyYW1wb2xpbmVzIGZvciB0aGUgc2xvdyBjYXNlcyBvZiBvcF9j
YWxsIC8gb3BfY2FsbF9ldmFsIC8gb3BfY29uc3RydWN0LgotICAgIAotICAgIEptcERzdCB2aXJ0
dWFsQ2FsbFByZUxpbmtCZWdpbiA9IF9fIGFsaWduKDE2KTsKLQotICAgIC8vIExvYWQgdGhlIGNh
bGxlZSBDb2RlQmxvY2sqIGludG8gZWF4Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNG
dW5jdGlvbiwgbV9ib2R5KSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChGdW5jdGlvbkJvZHlOb2RlLCBtX2NvZGUpLCBYODY6OmVheCwgWDg2OjplYXgp
OwotICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGhhc0Nv
ZGVCbG9jazEgPSBfXyBqbmUoKTsKLSAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIF9fIHJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwg
Q1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEpTRnVuY3Rpb24xID0gX18gY2Fs
bCgpOwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmco
OCwgWDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoaGFz
Q29kZUJsb2NrMSwgX18gbGFiZWwoKSk7Ci0KLSAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVz
IGNhbGxlZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29k
ZUJsb2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBhcml0eUNoZWNr
T2theTEgPSBfXyBqZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgZW1pdFB1dENU
SUFyZyhYODY6OmVieCwgNCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMTIpOwotICAg
IF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6
OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEFyaXR5Q2hlY2sxID0g
X18gY2FsbCgpOwotICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWRpKTsKLSAgICBlbWl0
R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsK
LSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyBsaW5rKGFyaXR5Q2hlY2tPa2F5MSwg
X18gbGFiZWwoKSk7Ci0KLSAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOwot
Ci0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0
KTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFy
YW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxEb250TGF6
eUxpbmtDYWxsID0gX18gY2FsbCgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotCi0gICAg
X18gam1wX3IoWDg2OjplYXgpOwotCi0gICAgSm1wRHN0IHZpcnR1YWxDYWxsTGlua0JlZ2luID0g
X18gYWxpZ24oMTYpOwotCi0gICAgLy8gTG9hZCB0aGUgY2FsbGVlIENvZGVCbG9jayogaW50byBl
YXgKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBtX2JvZHkpLCBYODY6
OmVjeCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEZ1bmN0aW9uQm9k
eU5vZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18gdGVzdGxfcnIoWDg2
OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgaGFzQ29kZUJsb2NrMiA9IF9fIGpuZSgpOwot
ICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
KCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwot
ICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjIgPSBfXyBjYWxsKCk7Ci0gICAgZW1pdEdldENUSUFy
ZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7Ci0gICAgX18g
cHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18gbGluayhoYXNDb2RlQmxvY2syLCBfXyBsYWJlbCgp
KTsKLQotICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVlIGFyaXR5LgotICAgIF9f
IGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG51bVBhcmFtZXRlcnMp
LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFyaXR5Q2hlY2tPa2F5MiA9IF9fIGplKCk7Ci0gICAg
X18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKLSAg
ICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVm
ZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJh
bWUpOwotICAgIEptcFNyYyBjYWxsQXJpdHlDaGVjazIgPSBfXyBjYWxsKCk7Ci0gICAgX18gbW92
bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gp
OwotICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2Ojpl
YngpOwotICAgIF9fIGxpbmsoYXJpdHlDaGVja09rYXkyLCBfXyBsYWJlbCgpKTsKLQotICAgIGNv
bXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7Ci0KLSAgICBfXyBwb3BsX3IoWDg2Ojpl
YngpOwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwotICAgIF9fIHJlc3RvcmVBcmd1
bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1Nf
Y2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbExhenlMaW5rQ2FsbCA9IF9fIGNhbGwoKTsKLSAg
ICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLQotICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLQotICAg
IEptcERzdCB2aXJ0dWFsQ2FsbEJlZ2luID0gX18gYWxpZ24oMTYpOwotCi0gICAgLy8gTG9hZCB0
aGUgY2FsbGVlIENvZGVCbG9jayogaW50byBlYXgKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChKU0Z1bmN0aW9uLCBtX2JvZHkpLCBYODY6OmVjeCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKEZ1bmN0aW9uQm9keU5vZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6
OmVheCk7Ci0gICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMg
aGFzQ29kZUJsb2NrMyA9IF9fIGpuZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAg
X18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6
ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjMgPSBf
XyBjYWxsKCk7Ci0gICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENU
SUFyZyg4LCBYODY6OmVkeCk7Ci0gICAgX18gcHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18gbGlu
ayhoYXNDb2RlQmxvY2szLCBfXyBsYWJlbCgpKTsKLQotICAgIC8vIENoZWNrIGFyZ0NvdW50IG1h
dGNoZXMgY2FsbGVlIGFyaXR5LgotICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNF
VChDb2RlQmxvY2ssIG51bVBhcmFtZXRlcnMpLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFyaXR5
Q2hlY2tPa2F5MyA9IF9fIGplKCk7Ci0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0
UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7
Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFt
KFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsQXJpdHlDaGVj
azMgPSBfXyBjYWxsKCk7Ci0gICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOwotICAg
IGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2Ojpl
ZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoYXJpdHlDaGVja09r
YXkzLCBfXyBsYWJlbCgpKTsKLQotICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1l
KCk7Ci0KLSAgICAvLyBsb2FkIGN0aUNvZGUgZnJvbSB0aGUgbmV3IGNvZGVCbG9jay4KLSAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIGN0aUNvZGUpLCBYODY6OmVheCwgWDg2
OjplYXgpOwotCi0gICAgX18gam1wX3IoWDg2OjplYXgpOwotCi0gICAgLy8gQWxsIHRyYW1wb2xp
bmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRo
ZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0KLSAgICB2b2lkKiBjb2RlID0gX18g
ZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBhcnJheV9m
YWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFy
cmF5X2ZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29k
ZSwgYXJyYXlfZmFpbHVyZUNhc2VzMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBzdHJpbmdfZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50
ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBYODZBc3NlbWJs
ZXI6OmxpbmsoY29kZSwgc3RyaW5nX2ZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN0cmluZ19mYWlsdXJlQ2FzZXMzLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwot
ICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsQXJpdHlDaGVjazEsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7Ci0gICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxBcml0eUNoZWNrMiwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKLSAgICBYODZB
c3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbEFyaXR5Q2hlY2szLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOwotICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBjYWxsSlNGdW5jdGlvbjEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7Ci0gICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIGNhbGxKU0Z1bmN0aW9uMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50
ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKLSAgICBYODZBc3NlbWJsZXI6Omxp
bmsoY29kZSwgY2FsbEpTRnVuY3Rpb24zLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnBy
ZXRlcjo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBjYWxsRG9udExhenlMaW5rQ2FsbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV92bV9kb250TGF6eUxpbmtDYWxsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5r
KGNvZGUsIGNhbGxMYXp5TGlua0NhbGwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfdm1fbGF6eUxpbmtDYWxsKSk7Ci0KLSAgICBtX2ludGVycHJldGVyLT5tX2N0aUFy
cmF5TGVuZ3RoVHJhbXBvbGluZSA9IGNvZGU7Ci0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlTdHJp
bmdMZW5ndGhUcmFtcG9saW5lID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNv
ZGUsIHN0cmluZ0xlbmd0aEJlZ2luKTsKLSAgICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxD
YWxsUHJlTGluayA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0
dWFsQ2FsbFByZUxpbmtCZWdpbik7Ci0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlWaXJ0dWFsQ2Fs
bExpbmsgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgdmlydHVhbENh
bGxMaW5rQmVnaW4pOwotICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGwgPSBYODZB
c3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgdmlydHVhbENhbGxCZWdpbik7Ci19
Ci0KLXZvaWQgSklUOjpmcmVlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEludGVycHJldGVyKiBpbnRl
cnByZXRlcikKLXsKLSAgICBXVEY6OmZhc3RGcmVlRXhlY3V0YWJsZShpbnRlcnByZXRlci0+bV9j
dGlBcnJheUxlbmd0aFRyYW1wb2xpbmUpOwotfQotCi12b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2Vs
ZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNo
ZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0gICAgU3RydWN0dXJlU3R1YkluZm8m
IGluZm8gPSBjb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRv
IGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYy4KLSAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8g
SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBh
bnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7Ci0KLSAgICAvLyBSZXBhdGNoIHRoZSBv
ZmZzZXQgaW50byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0
aGUgU3RydWN0dXJlIHRvIGxvb2sgZm9yLgotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3Bs
YWNlbWVudChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyBy
ZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXpl
b2YoSlNWYWx1ZSopKTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdl
dEJ5SWRTdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOwot
fQotCi12b2lkIEpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFk
ZHJlc3MpCi17Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBjb2RlQmxvY2stPmdldFN0
dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVw
YXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dl
bmVyaWMuCi0gICAgLy8gU2hvdWxkIHByb2JhYmx5IGdvIHRvIEludGVycHJldGVyOjpjdGlfb3Bf
cHV0X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rpbmcg
cmlnaHQgbm93LgotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJl
c3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lk
X2dlbmVyaWMpKTsKLQotICAgIC8vIFJlcGF0Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wb2Vy
dHkgbWFwIHRvIGxvYWQgZnJvbSwgdGhlbiByZXBhdGNoIHRoZSBTdHJ1Y3R1cmUgdG8gbG9vayBm
b3IuCi0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoRGlzcGxhY2VtZW50KHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRQdXRCeUlkUHJv
cGVydHlNYXBPZmZzZXQsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpOwotICAgIFg4
NkFzc2VtYmxlcjo6cmVwYXRjaEltbWVkaWF0ZShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihp
bmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSwgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgodm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5B
ZGRyZXNzKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25j
ZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgY3RpUmVw
YXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwotCi0gICAg
Ly8gQ2hlY2sgZWF4IGlzIGFuIGFycmF5Ci0gICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIpLCBYODY6OmVheCk7Ci0g
ICAgSm1wU3JjIGZhaWx1cmVDYXNlczEgPSBfXyBqbmUoKTsKLQotICAgIC8vIENoZWNrcyBvdXQg
b2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSwgWDg2Ojpl
Y3gsIFg4Njo6ZWN4KTsKLQotICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6bWF4SW1tZWRp
YXRlSW50LCBYODY6OmVjeCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBfXyBqYSgpOwot
Ci0gICAgX18gYWRkbF9ycihYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIF9fIGFkZGxfaThyKDEs
IFg4Njo6ZWN4KTsKLSAgICBfXyBtb3ZsX3JyKFg4Njo6ZWN4LCBYODY6OmVheCk7Ci0gICAgSm1w
U3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxl
Q29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhl
IGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0g
ICAgdm9pZCogc2xvd0Nhc2VCZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluZm8uY2Fs
bFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsOwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCBzbG93Q2FzZUJlZ2luKTsK
LSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdp
bik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29k
ZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgot
ICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5m
by5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsK
LSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBtX2NvZGVCbG9jay0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOwotCi0gICAgLy8g
RmluYWxseSByZXBhdGNoIHRoZSBqdW1wIHRvIHNvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdl
dEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOwotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9m
ZnNldChqbXBMb2NhdGlvbiwgY29kZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0VmFyaWFibGVP
YmplY3RSZWdpc3RlcihSZWdpc3RlcklEIHZhcmlhYmxlT2JqZWN0LCBpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgZHN0KQotewotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFibGVPYmpl
Y3QsIGQpLCB2YXJpYWJsZU9iamVjdCwgZHN0KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChKU1ZhcmlhYmxlT2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0RGF0YSwgcmVnaXN0ZXJzKSwgZHN0
LCBkc3QpOwotICAgIF9fIG1vdmxfbXIoaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpLCBkc3QsIGRz
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0VmFyaWFibGVPYmplY3RSZWdpc3RlcihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCB2YXJpYWJsZU9iamVjdCwgaW50IGluZGV4KQotewotICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFibGVPYmplY3QsIGQpLCB2YXJpYWJsZU9iamVj
dCwgdmFyaWFibGVPYmplY3QpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFi
bGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhLCByZWdpc3RlcnMpLCB2YXJpYWJsZU9iamVj
dCwgdmFyaWFibGVPYmplY3QpOwotICAgIF9fIG1vdmxfcm0oc3JjLCBpbmRleCAqIHNpemVvZihS
ZWdpc3RlciksIHZhcmlhYmxlT2JqZWN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
d3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDM4OTkwKQorKysgd3RmL1BsYXRmb3JtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyNyw2ICs0MjcsOCBAQAogI2lmICFkZWZpbmVkKEVOQUJMRV9KSVQpICYm
IFBMQVRGT1JNKFg4NikgJiYgKFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKSkKICNkZWZp
bmUgRU5BQkxFX0pJVCAxCiAjZGVmaW5lIEVOQUJMRV9KSVRfT1BUSU1JWkVfQ0FMTCAxCisjZGVm
aW5lIEVOQUJMRV9KSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTIDEKKyNkZWZpbmUgRU5BQkxF
X0pJVF9PUFRJTUlaRV9BUklUSE1FVElDIDEKICNlbmRpZgogCiAvKiBXUkVDIG9ubHkgc3VwcG9y
dHMgeDg2IGF0IHRoZSBtb21lbnQsIGFuZCBoYXMgb25seSBiZWVuIHRlc3RlZCBvbiBNYWMgYW5k
IFdpbmRvd3MuICovCg==
</data>
<flag name="review"
          id="12032"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25738</attachid>
            <date>2008-12-04 02:11:10 -0800</date>
            <delta_ts>2008-12-04 02:14:04 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>patch.jitproparith3.txt</filename>
            <type>text/plain</type>
            <size>324494</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAzODk5MCkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3
NSw4IEBACiAJSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVQcmVmaXguaCBcCiAJSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBc
CisJSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCisJSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgg
XAogCUphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmggXAogCUphdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgXApJbmRleDogd3RmL1BsYXRmb3JtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDM4OTkwKQorKysgd3RmL1BsYXRmb3Jt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNyw2ICs0MjcsOCBAQAogI2lmICFkZWZpbmVkKEVOQUJM
RV9KSVQpICYmIFBMQVRGT1JNKFg4NikgJiYgKFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lO
KSkKICNkZWZpbmUgRU5BQkxFX0pJVCAxCiAjZGVmaW5lIEVOQUJMRV9KSVRfT1BUSU1JWkVfQ0FM
TCAxCisjZGVmaW5lIEVOQUJMRV9KSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTIDEKKyNkZWZp
bmUgRU5BQkxFX0pJVF9PUFRJTUlaRV9BUklUSE1FVElDIDEKICNlbmRpZgogCiAvKiBXUkVDIG9u
bHkgc3VwcG9ydHMgeDg2IGF0IHRoZSBtb21lbnQsIGFuZCBoYXMgb25seSBiZWVuIHRlc3RlZCBv
biBNYWMgYW5kIFdpbmRvd3MuICovCkluZGV4OiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9u
IDM4OTkwKQorKysgSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI2Niw2ICsxMjY2LDMwIEBACiAJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxqaXRcSklUUHJvcGVydHlBY2Nlc3MuY3BwIg0KKwkJCQk+DQorCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+
DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hv
bGVQcm9ncmFtT3B0aW1pemF0aW9uPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caml0XEpJVEFyaXRobWV0aWMuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlv
bg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0K
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1p
emF0aW9uPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caml0XEpJVC5oIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IGppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBqaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDM4OTg0KQorKysgaml0L0pJ
VEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwzMCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorI2lmICFFTkFCTEUoSklUX09QVElNSVpFX0FSSVRITUVUSUMpCisKK3Zv
aWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcChPcGNvZGVJRCBvcGNvZGVJRCwgdW5zaWduZWQg
ZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyLCBPcGVyYW5kVHlwZXMsIHVuc2lnbmVk
IGkpCit7CisgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgMCwgWDg2
OjplY3gpOworICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4
Njo6ZWN4KTsKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKQorICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7CisgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0g
b3Bfc3ViKQorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3N1Yik7
CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX211bCk7CisgICAgfQorICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlB
cml0aE9wU2xvd0Nhc2UoT3Bjb2RlSUQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCBPcGVyYW5kVHlwZXMsIHVuc2lnbmVkKQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisjZWxzZQorCiAjaWYgUExBVEZPUk0o
TUFDKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNTU0UyUHJlc2VudCgpCkBAIC04MCwyNDIgKzEw
NCw2IEBACiAKICNlbmRpZgogCi1DT01QSUxFX0FTU0VSVChDVElfQVJHU19jb2RlID09IDB4Qywg
Q1RJX0FSR1NfY29kZV9pc19DKTsKLUNPTVBJTEVfQVNTRVJUKENUSV9BUkdTX2NhbGxGcmFtZSA9
PSAweEUsIENUSV9BUkdTX2NhbGxGcmFtZV9pc19FKTsKLQotI2lmIENPTVBJTEVSKEdDQykgJiYg
UExBVEZPUk0oWDg2KQotCi0jaWYgUExBVEZPUk0oREFSV0lOKQotI2RlZmluZSBTWU1CT0xfU1RS
SU5HKG5hbWUpICJfIiAjbmFtZQotI2Vsc2UKLSNkZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAj
bmFtZQotI2VuZGlmCi0KLWFzbSgKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xp
bmUpICJcbiIKLVNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKLSAgICAicHVz
aGwgJWVzaSIgIlxuIgotICAgICJwdXNobCAlZWRpIiAiXG4iCi0gICAgInB1c2hsICVlYngiICJc
biIKLSAgICAic3VibCAkMHgyMCwgJWVzcCIgIlxuIgotICAgICJtb3ZsICQ1MTIsICVlc2kiICJc
biIKLSAgICAibW92bCAweDM4KCVlc3ApLCAlZWRpIiAiXG4iIC8vIE94MzggPSAweDBFICogNCwg
MHgwRSA9IENUSV9BUkdTX2NhbGxGcmFtZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkKLSAgICAiY2Fs
bCAqMHgzMCglZXNwKSIgIlxuIiAvLyBPeDMwID0gMHgwQyAqIDQsIDB4MEMgPSBDVElfQVJHU19j
b2RlIChzZWUgYXNzZXJ0aW9uIGFib3ZlKQotICAgICJhZGRsICQweDIwLCAlZXNwIiAiXG4iCi0g
ICAgInBvcGwgJWVieCIgIlxuIgotICAgICJwb3BsICVlZGkiICJcbiIKLSAgICAicG9wbCAlZXNp
IiAiXG4iCi0gICAgInJldCIgIlxuIgotKTsKLQotYXNtKAotIi5nbG9ibCAiIFNZTUJPTF9TVFJJ
TkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKLVNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1Ry
YW1wb2xpbmUpICI6IiAiXG4iCi0jaWYgVVNFKENUSV9BUkdVTUVOVCkKLSNpZiBVU0UoRkFTVF9D
QUxMX0NUSV9BUkdVTUVOVCkKLSAgICAibW92bCAlZXNwLCAlZWN4IiAiXG4iCi0jZWxzZQotICAg
ICJtb3ZsICVlc3AsIDAoJWVzcCkiICJcbiIKLSNlbmRpZgotICAgICJjYWxsICIgU1lNQk9MX1NU
UklORyhfWk4zSlNDMTFJbnRlcnByZXRlcjEyY3RpX3ZtX3Rocm93RVBQdikgIlxuIgotI2Vsc2UK
LSAgICAiY2FsbCAiIFNZTUJPTF9TVFJJTkcoX1pOM0pTQzExSW50ZXJwcmV0ZXIxMmN0aV92bV90
aHJvd0VQdnopICJcbiIKLSNlbmRpZgotICAgICJhZGRsICQweDIwLCAlZXNwIiAiXG4iCi0gICAg
InBvcGwgJWVieCIgIlxuIgotICAgICJwb3BsICVlZGkiICJcbiIKLSAgICAicG9wbCAlZXNpIiAi
XG4iCi0gICAgInJldCIgIlxuIgotKTsKLSAgICAKLSNlbGlmIENPTVBJTEVSKE1TVkMpCi0KLWV4
dGVybiAiQyIgewotICAgIAotICAgIF9fZGVjbHNwZWMobmFrZWQpIEpTVmFsdWUqIGN0aVRyYW1w
b2xpbmUodm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSoqIGV4
Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikKLSAgICB7Ci0gICAgICAgIF9fYXNt
IHsKLSAgICAgICAgICAgIHB1c2ggZXNpOwotICAgICAgICAgICAgcHVzaCBlZGk7Ci0gICAgICAg
ICAgICBwdXNoIGVieDsKLSAgICAgICAgICAgIHN1YiBlc3AsIDB4MjA7Ci0gICAgICAgICAgICBt
b3YgZXNpLCA1MTI7Ci0gICAgICAgICAgICBtb3YgZWN4LCBlc3A7Ci0gICAgICAgICAgICBtb3Yg
ZWRpLCBbZXNwICsgMHgzOF07Ci0gICAgICAgICAgICBjYWxsIFtlc3AgKyAweDMwXTsgLy8gT3gz
MCA9IDB4MEMgKiA0LCAweDBDID0gQ1RJX0FSR1NfY29kZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkK
LSAgICAgICAgICAgIGFkZCBlc3AsIDB4MjA7Ci0gICAgICAgICAgICBwb3AgZWJ4OwotICAgICAg
ICAgICAgcG9wIGVkaTsKLSAgICAgICAgICAgIHBvcCBlc2k7Ci0gICAgICAgICAgICByZXQ7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgX19kZWNsc3BlYyhuYWtlZCkgdm9pZCBjdGlWTVRo
cm93VHJhbXBvbGluZSgpCi0gICAgewotICAgICAgICBfX2FzbSB7Ci0gICAgICAgICAgICBtb3Yg
ZWN4LCBlc3A7Ci0gICAgICAgICAgICBjYWxsIEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV92bV90aHJv
dzsKLSAgICAgICAgICAgIGFkZCBlc3AsIDB4MjA7Ci0gICAgICAgICAgICBwb3AgZWJ4OwotICAg
ICAgICAgICAgcG9wIGVkaTsKLSAgICAgICAgICAgIHBvcCBlc2k7Ci0gICAgICAgICAgICByZXQ7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi19Ci0KLSNlbmRpZgotCi12b2lkIGN0aVNldFJldHVy
bkFkZHJlc3Modm9pZCoqIHdoZXJlLCB2b2lkKiB3aGF0KQotewotICAgICp3aGVyZSA9IHdoYXQ7
Ci19Ci0KLXZvaWQgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3Modm9pZCogd2hlcmUsIHZv
aWQqIHdoYXQpCi17Ci0gICAgKHN0YXRpY19jYXN0PHZvaWQqKj4od2hlcmUpKVstMV0gPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4od2hhdCkgLSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4od2hlcmUpKTsKLX0KLQotI2lmbmRlZiBOREVCVUcK
LQotdm9pZCBKSVQ6OnByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXModW5zaWduZWQgc3JjMSwgdW5z
aWduZWQgc3JjMikKLXsKLSAgICBjaGFyIHdoaWNoMSA9ICcqJzsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzEpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZh
bHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYzEpOwotICAgICAgICB3aGljaDEgPSAK
LSAgICAgICAgICAgIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkgPwotICAgICAgICAg
ICAgICAgIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpID8gJ2knIDoKLSAgICAgICAgICAg
ICAgICBKU0ltbWVkaWF0ZTo6aXNCb29sZWFuKHZhbHVlKSA/ICdiJyA6Ci0gICAgICAgICAgICAg
ICAgdmFsdWUtPmlzVW5kZWZpbmVkKCkgPyAndScgOgotICAgICAgICAgICAgICAgIHZhbHVlLT5p
c051bGwoKSA/ICduJyA6ICc/JykKLSAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAodmFs
dWUtPmlzU3RyaW5nKCkgPyAncycgOgotICAgICAgICAgICAgdmFsdWUtPmlzT2JqZWN0KCkgPyAn
bycgOgotICAgICAgICAgICAgJ2snKTsKLSAgICB9Ci0gICAgY2hhciB3aGljaDIgPSAnKic7Ci0g
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMyKSkgewotICAg
ICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMyKTsKLSAg
ICAgICAgd2hpY2gyID0gCi0gICAgICAgICAgICBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodmFs
dWUpID8KLSAgICAgICAgICAgICAgICAoSlNJbW1lZGlhdGU6OmlzTnVtYmVyKHZhbHVlKSA/ICdp
JyA6Ci0gICAgICAgICAgICAgICAgSlNJbW1lZGlhdGU6OmlzQm9vbGVhbih2YWx1ZSkgPyAnYicg
OgotICAgICAgICAgICAgICAgIHZhbHVlLT5pc1VuZGVmaW5lZCgpID8gJ3UnIDoKLSAgICAgICAg
ICAgICAgICB2YWx1ZS0+aXNOdWxsKCkgPyAnbicgOiAnPycpCi0gICAgICAgICAgICAgICAgOgot
ICAgICAgICAgICAgKHZhbHVlLT5pc1N0cmluZygpID8gJ3MnIDoKLSAgICAgICAgICAgIHZhbHVl
LT5pc09iamVjdCgpID8gJ28nIDoKLSAgICAgICAgICAgICdrJyk7Ci0gICAgfQotICAgIGlmICgo
d2hpY2gxICE9ICcqJykgfCAod2hpY2gyICE9ICcqJykpCi0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiVHlwZXMgJWMgJWNcbiIsIHdoaWNoMSwgd2hpY2gyKTsKLX0KLQotI2VuZGlmCi0KLUpJVDo6
SklUKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAg
OiBtX2ludGVycHJldGVyKGdsb2JhbERhdGEtPmludGVycHJldGVyKQotICAgICwgbV9nbG9iYWxE
YXRhKGdsb2JhbERhdGEpCi0gICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2xh
YmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5zaXplKCkgOiAwKQotICAg
ICwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbyhjb2RlQmxvY2sgPyBjb2RlQmxvY2st
PnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSA6IDApCi0gICAgLCBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Y2FsbExpbmtJ
bmZvcy5zaXplKCkgOiAwKQotICAgICwgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcihzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9qdW1wVGFyZ2V0c1Bvc2l0aW9u
KDApCi17Ci19Ci0KLSNkZWZpbmUgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG5hbWUpIFwKLSAgICBj
YXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7IFwKLSAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgNCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfIyNuYW1lKTsgXAotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOyBcCi0gICAgICAgIGkgKz0gNDsgXAotICAgICAgICBicmVhazsg
XAotICAgIH0KLQotI2RlZmluZSBDVElfQ09NUElMRV9VTkFSWV9PUChuYW1lKSBcCi0gICAgY2Fz
ZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCi0gICAgICAgIGkg
Kz0gMzsgXAotICAgICAgICBicmVhazsgXAotICAgIH0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgaSwgQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlIHR5cGUpCi17Ci0gICAgYm9vbCBuZWdhdGVkID0gKHR5cGUgPT0gT3BOU3RyaWN0
RXEpOwotCi0gICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQg
c3JjMiA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVkeCwgaSk7Ci0KLSAgICBfXyB0ZXN0
bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGZpcnN0
Tm90SW1tZWRpYXRlID0gX18gamUoKTsKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpU
YWdNYXNrLCBYODY6OmVkeCk7Ci0gICAgSm1wU3JjIHNlY29uZE5vdEltbWVkaWF0ZSA9IF9fIGpl
KCk7Ci0KLSAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgaWYgKG5lZ2F0
ZWQpCi0gICAgICAgIF9fIHNldG5lX3IoWDg2OjplYXgpOwotICAgIGVsc2UKLSAgICAgICAgX18g
c2V0ZV9yKFg4Njo6ZWF4KTsKLSAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsK
LSAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIAotICAg
IEptcFNyYyBib3RoV2VyZUltbWVkaWF0ZXMgPSBfXyBqbXAoKTsKLQotICAgIF9fIGxpbmsoZmly
c3ROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgLy8gY2hlY2sgdGhhdCBlZHggaXMg
aW1tZWRpYXRlIGJ1dCBub3QgdGhlIHplcm8gaW1tZWRpYXRlCi0gICAgX18gdGVzdGxfaTMycihK
U0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplZHgpOwotICAgIF9fIHNldHpfcihYODY6OmVjeCk7
Ci0gICAgX18gbW92emJsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7IC8vIGVjeCBpcyBub3cgMSBp
ZiBlZHggd2FzIG5vbmltbWVkaWF0ZQotICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1l
ZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKLSAgICBfXyBzZXRlX3IoWDg2Ojpl
ZHgpOwotICAgIF9fIG1vdnpibF9ycihYODY6OmVkeCwgWDg2OjplZHgpOyAvLyBlZHggaXMgbm93
IDEgaWYgZWR4IHdhcyB0aGUgMCBpbW1lZGlhdGUKLSAgICBfXyBvcmxfcnIoWDg2OjplY3gsIFg4
Njo6ZWR4KTsKLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpueigp
LCBpKSk7Ci0KLSAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGpzQm9vbGVhbihuZWdhdGVkKSks
IFg4Njo6ZWF4KTsKLQotICAgIEptcFNyYyBmaXJzdFdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgp
OwotCi0gICAgX18gbGluayhzZWNvbmROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotICAgIC8v
IGNoZWNrIHRoYXQgZWF4IGlzIG5vdCB0aGUgemVybyBpbW1lZGlhdGUgKHdlIGtub3cgaXQgbXVz
dCBiZSBpbW1lZGlhdGUpCi0gICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6
emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsKLQotICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNC
b29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOwotCi0gICAgX18gbGluayhib3RoV2VyZUltbWVk
aWF0ZXMsIF9fIGxhYmVsKCkpOwotICAgIF9fIGxpbmsoZmlyc3RXYXNOb3RJbW1lZGlhdGUsIF9f
IGxhYmVsKCkpOwotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAg
IF9fIHN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKLSAgICBKbXBTcmMgc2tpcFRpbWVvdXQgPSBfXyBq
bmUoKTsKLSAgICBlbWl0Q1RJQ2FsbChieXRlY29kZUluZGV4LCBJbnRlcnByZXRlcjo6Y3RpX3Rp
bWVvdXRfY2hlY2spOwotCi0gICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX2dsb2JhbERhdGEs
IFg4Njo6ZWN4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0dsb2JhbERhdGEsIGlu
dGVycHJldGVyKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChJbnRlcnByZXRlciwgbV90aWNrc1VudGlsTmV4dFRpbWVvdXRDaGVjayksIFg4Njo6ZWN4
LCBYODY6OmVzaSk7Ci0gICAgX18gbGluayhza2lwVGltZW91dCwgX18gbGFiZWwoKSk7Ci0KLSAg
ICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci19Ci0KIC8qCiAgIFRoaXMgaXMgcmVxdWlyZWQg
c2luY2UgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGlzIGNhbm9uaWNhbCAtIHZhbHVlcyByZXByZXNl
bnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUgc2hvdWxkIG5vdCBiZSBzdG9yZWQgaW4gYSBKU051bWJl
ckNlbGwuCiAgIApAQCAtNTU1LDI2MTUgKzM0Myw4IEBACiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCi17Ci0g
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5i
ZWdpbigpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zLnNpemUoKTsKLQotICAgIHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleCA9IDA7Ci0gICAgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXggPSAwOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1faW50ZXJwcmV0ZXItPmlzT3Bjb2RlKGluc3RydWN0aW9uW2ld
LnUub3Bjb2RlKSwgInByaXZhdGVDb21waWxlTWFpblBhc3MgZ29uZSBiYWQgQCAlZCIsIGkpOwot
Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAgICAgaWYgKGkgPiAwKSAvLyBBdm9p
ZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCi0gICAgICAgICAgICBf
XyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUoaW5zdHJ1
Y3Rpb24gKyBpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwogI2Vu
ZGlmCiAKLSAgICAgICAgbV9sYWJlbHNbaV0gPSBfXyBsYWJlbCgpOwotICAgICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uW2ldLnUu
b3Bjb2RlKTsKLSAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX21v
djogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoc3JjKSkKLSAgICAgICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBYODY6OmVheCwgaSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9hZGQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0g
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIg
PSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotCi0gICAgICAgICAgICBpZiAoSlNWYWx1
ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSkpIHsKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIFg4Njo6ZWF4LCBpKTsKLSAg
ICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwot
ICAgICAgICAgICAgICAgIF9fIGFkZGxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRl
KHZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChT
bG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWUqIHZhbHVlID0g
Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7Ci0gICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAg
ICAgICBfXyBhZGRsX2kzMnIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZSh2YWx1ZSksIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBPcGVyYW5kVHlwZXMg
dHlwZXMgPSBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpICYm
IHR5cGVzLnNlY29uZCgpLm1pZ2h0QmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgY29t
cGlsZUJpbmFyeUFyaXRoT3Aob3BfYWRkLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
LCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCksIGkp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBY
ODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAg
ICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOwot
ICAgICAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9lbmQ6IHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbikKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2VuZCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHB1c2hsX20o
UmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSksIFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIF9fIHJldCgpOwotICAgICAgICAgICAgaSArPSAy
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbXA6IHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSAr
IDEgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJlX2luYzogewotICAgICAgICAgICAgaW50IHNy
Y0RzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIGFkZGxf
aThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0
ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihz
cmNEc3QpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9sb29wOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENo
ZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18g
am1wKCksIGkgKyAxICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzczogewotICAg
ICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmltbSkgewotICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdl
cihzcmMyaW1tKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5k
KEptcFRhYmxlKF9fIGpsKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBY
ODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplZHgsIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBq
bCgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb29wX2lm
X2xlc3NlcTogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNB
cmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmlt
bSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gY21w
bF9pMzJyKGFzSW50ZWdlcihzcmMyaW1tKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgICAgIG1f
am1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpsZSgpLCBpICsgMyArIHRhcmdldCkpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBjbXBs
X3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBl
bmQoSm1wVGFibGUoX18gamxlKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX25ld19vYmplY3Q6IHsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfbmV3X29iamVjdCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAy
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlf
aWQ6IHsKLSAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVwYXRjaCBib3Ro
IHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50
ZXIsCi0gICAgICAgICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVu
IGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNv
ZGUKLSAgICAgICAgICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBh
bHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgICAgICAgICBpbnQg
YmFzZVZSZWcgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsg
M10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwotCi0gICAgICAgICAgICAvLyBKdW1wIHRvIGEg
c2xvdyBjYXNlIGlmIGVpdGhlciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBp
ZiB0aGUgU3RydWN0dXJlIGRvZXMgbm90IG1hdGNoLgotICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBiYXNlVlJlZyk7Ci0KLSAgICAgICAgICAgIEpt
cERzdCBob3RQYXRoQmVnaW4gPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmhvdFBh
dGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKLSAgICAgICAgICAgICsrcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbkluZGV4OwotCi0gICAgICAgICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUg
Zm9sbG93aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMyYml0IGltbWVkaWF0ZSwgaW4gb3JkZXIg
dGhhdCBpdCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJl
cGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXRE
aWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0
Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIFBsYW50IGEg
bG9hZCBmcm9tIGEgYm9ndXMgb2ZzZXQgaW4gdGhlIG9iamVjdCdzIHByb3BlcnR5IG1hcDsgd2Ug
d2lsbCBwYXRjaCB0aGlzIGxhdGVyLCBpZiBpdCBpcyB0byBiZSB1c2VkLgotICAgICAgICAgICAg
X18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2
OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIHJlcGF0
Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCwgWDg2OjplYXgpOwotICAgICAgICAgICAgQVNTRVJUKFg4
NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBs
YWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KTsKLQotICAg
ICAgICAgICAgaSArPSA4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIC8vIEFzIGZvciBwdXRfYnlfaWQsIGdl
dF9ieV9pZCByZXF1aXJlcyB0aGUgb2Zmc2V0IG9mIHRoZSBTdHJ1Y3R1cmUgYW5kIHRoZSBvZmZz
ZXQgb2YgdGhlIGFjY2VzcyB0byBiZSByZXBhdGNoZWQuCi0gICAgICAgICAgICAvLyBBZGRpdGlv
bmFsbHksIGZvciBnZXRfYnlfaWQgd2UgbmVlZCByZXBhdGNoIHRoZSBvZmZzZXQgb2YgdGhlIGJy
YW5jaCB0byB0aGUgc2xvdyBjYXNlICh3ZSByZXBhdGNoIHRoaXMgdG8ganVtcAotICAgICAgICAg
ICAgLy8gdG8gYXJyYXktbGVuZ3RoIC8gcHJvdG90eXBlIGFjY2VzcyB0cmFucG9saW5lcywgYW5k
IGZpbmFsbHkgd2UgYWxzbyB0aGUgdGhlIHByb3BlcnR5LW1hcCBhY2Nlc3Mgb2Zmc2V0IGFzIGEg
bGFiZWwKLSAgICAgICAgICAgIC8vIHRvIGp1bXAgYmFjayB0byBpZiBvbmUgb2YgdGhlc2UgdHJh
bXBvbGllcyBmaW5kcyBhIG1hdGNoLgotCi0gICAgICAgICAgICBpbnQgYmFzZVZSZWcgPSBpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBiYXNlVlJlZyk7Ci0KLSAgICAgICAgICAgIEpt
cERzdCBob3RQYXRoQmVnaW4gPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmhvdFBh
dGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKLSAgICAgICAgICAgICsrcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbkluZGV4OwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVwYXRjaEdldEJ5SWRE
ZWZhdWx0U3RydWN0dXJlLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3
ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldEdldEJ5
SWRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRj
aE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKLQotICAgICAgICAgICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIocmVwYXRjaEdldEJ5SWREZWZhdWx0T2Zm
c2V0LCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxl
cjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9
PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0KLSAg
ICAgICAgICAgIGkgKz0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfaW5zdGFuY2VvZjogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7IC8vIHZhbHVlCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQsIFg4Njo6ZWN4LCBpKTsgLy8gYmFzZVZhbAotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7IC8v
IHByb3RvCi0KLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFueSBhcmUgaW1tZWRpYXRlcwotICAg
ICAgICAgICAgX18gb3JsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBv
cmxfcnIoWDg2OjplZHgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJ
bW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWN4KTsKLQotICAgICAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam56KCksIGkpKTsKLQotICAgICAgICAgICAgLy8gY2hl
Y2sgdGhhdCBhbGwgYXJlIG9iamVjdCB0eXBlIC0gdGhpcyBpcyBhIGJpdCBvZiBhIGJpdGhhY2sg
dG8gYXZvaWQgZXhjZXNzIGJyYW5jaGluZzsKLSAgICAgICAgICAgIC8vIHdlIGNoZWNrIHRoYXQg
dGhlIHN1bSBvZiB0aGUgdGhyZWUgdHlwZSBjb2RlcyBmcm9tIFN0cnVjdHVyZXMgaXMgZXhhY3Rs
eSAzICogT2JqZWN0VHlwZSwKLSAgICAgICAgICAgIC8vIHRoaXMgd29ya3MgYmVjYXVzZSBOdW1i
ZXJUeXBlIGFuZCBTdHJpbmdUeXBlIGFyZSBzbWFsbGVyCi0gICAgICAgICAgICBfXyBtb3ZsX2kz
MnIoMyAqIE9iamVjdFR5cGUsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAg
ICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4
Njo6ZWR4LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBzdWJsX21yKEZJRUxEX09GRlNFVChT
dHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAg
ICAgICAgIF9fIHN1YmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5
cGUpLCBYODY6OmVkeCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7IC8vIHJlbG9h
ZCBiYXNlVmFsCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1f
c3RydWN0dXJlKSwgWDg2OjplZHgsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfcm0o
WDg2OjplY3gsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBlKSwgWDg2
OjplZHgpOwotCi0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShf
XyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBjaGVjayB0aGF0IGJhc2VWYWwncyBmbGFn
cyBpbmNsdWRlIEltcGxlbWVudHNIYXNJbnN0YW5jZSBidXQgbm90IE92ZXJyaWRlc0hhc0luc3Rh
bmNlCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlw
ZUluZm8ubV9mbGFncyksIFg4Njo6ZWR4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBhbmRs
X2kzMnIoSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihJbXBsZW1lbnRzSGFzSW5zdGFuY2UsIFg4
Njo6ZWN4KTsKLQotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnko
X18gam5lKCksIGkpKTsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7IC8vIHJlbG9hZCB2YWx1ZQot
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgNF0udS5v
cGVyYW5kLCBYODY6OmVkeCwgaSk7IC8vIHJlbG9hZCBwcm90bwotCi0gICAgICAgICAgICAvLyBv
cHRpbWlzdGljYWxseSBsb2FkIHRydWUgcmVzdWx0Ci0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIo
YXNJbnRlZ2VyKGpzQm9vbGVhbih0cnVlKSksIFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgSm1w
RHN0IGxvb3AgPSBfXyBsYWJlbCgpOwotCi0gICAgICAgICAgICAvLyBsb2FkIHZhbHVlJ3MgcHJv
dG90eXBlCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKFN0cnVjdHVyZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWN4LCBYODY6OmVkeCk7
Ci0gICAgICAgICAgICBKbXBTcmMgZXhpdCA9IF9fIGplKCk7Ci0KLSAgICAgICAgICAgIF9fIGNt
cGxfaTMycihhc0ludGVnZXIoanNOdWxsKCkpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBKbXBT
cmMgZ29Ub0xvb3AgPSBfXyBqbmUoKTsKLSAgICAgICAgICAgIF9fIGxpbmsoZ29Ub0xvb3AsIGxv
b3ApOwotCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGpzQm9vbGVhbihmYWxz
ZSkpLCBYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoZXhpdCwgX18gbGFiZWwoKSk7
Ci0KLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7Ci0KLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVsX2J5X2lkOiB7Ci0gICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
LCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihp
ZGVudCksIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9kZWxfYnlfaWQpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbXVsOiB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
dW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLQotICAgICAg
ICAgICAgLy8gRm9yIG5vdywgb25seSBwbGFudCBhIGZhc3QgaW50IGNhc2UgaWYgdGhlIGNvbnN0
YW50IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIHplcm8uCi0gICAgICAgICAgICBKU1ZhbHVlKiBz
cmMxVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiBzcmMyVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmco
c3JjMik7Ci0gICAgICAgICAgICBpbnQzMl90IHZhbHVlOwotICAgICAgICAgICAgaWYgKHNyYzFW
YWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzFWYWx1ZSkpID4gMCkp
IHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIFg4Njo6ZWF4
LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6
OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gaW11bGxfaTMycihYODY6OmVheCwgdmFsdWUsIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRp
YXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNyYzJWYWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1l
ZGlhdGU6OmludFZhbHVlKHNyYzJWYWx1ZSkpID4gMCkpIHsKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAg
IGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAg
X18gaW11bGxfaTMycihYODY6OmVheCwgdmFsdWUsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAg
ICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhPcChvcF9tdWwsIGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltp
ICsgNF0udS5vcGVyYW5kKSwgaSk7Ci0KLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsKLSAgICAgICAg
ICAgIEZ1bmNEZWNsTm9kZSogZnVuYyA9IChtX2NvZGVCbG9jay0+ZnVuY3Rpb25zW2luc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmRdKS5nZXQoKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdD
b25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihmdW5jKSwgMCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19mdW5jKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgotICAgICAgICBj
YXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgY29tcGlsZU9wQ2FsbChvcGNvZGVJRCwg
aW5zdHJ1Y3Rpb24gKyBpLCBpLCBjYWxsTGlua0luZm9JbmRleCsrKTsKLSAgICAgICAgICAgIGkg
Kz0gKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IDcgOiA1KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2dsb2JhbF92YXI6IHsKLSAgICAgICAg
ICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTVmFyaWFi
bGVPYmplY3QqPihpbnN0cnVjdGlvbltpICsgMl0udS5qc0NlbGwpOwotICAgICAgICAgICAgX18g
bW92bF9pMzJyKGFzSW50ZWdlcihnbG9iYWxPYmplY3QpLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmFyaWFibGVPYmplY3RSZWdpc3RlcihYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dsb2Jh
bF92YXI6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgSlNWYXJpYWJsZU9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGluc3Ry
dWN0aW9uW2kgKyAxXS51LmpzQ2VsbCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRl
Z2VyKGdsb2JhbE9iamVjdCksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWYXJpYWJs
ZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWR4LCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2dldF9zY29wZWRfdmFyOiB7Ci0gICAgICAgICAgICBpbnQg
c2tpcCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNG
dWxsU2NvcGVDaGFpbjsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdp
c3RlckZpbGU6OlNjb3BlQ2hhaW4sIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIHdoaWxlIChz
a2lwLS0pCi0gICAgICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU2NvcGVDaGFp
bk5vZGUsIG5leHQpLCBYODY6OmVheCwgWDg2OjplYXgpOwotCi0gICAgICAgICAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwgb2JqZWN0KSwgWDg2OjplYXgsIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIGVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWF4
LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wdXRfc2NvcGVkX3ZhcjogewotICAgICAgICAgICAgaW50IHNraXAgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW47
Ci0KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJGaWxlOjpTY29w
ZUNoYWluLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAg
IHdoaWxlIChza2lwLS0pCi0gICAgICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
U2NvcGVDaGFpbk5vZGUsIG5leHQpLCBYODY6OmVkeCwgWDg2OjplZHgpOwotCi0gICAgICAgICAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwgb2JqZWN0KSwgWDg2Ojpl
ZHgsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVy
KFg4Njo6ZWF4LCBYODY6OmVkeCwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb246IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfdGVh
cl9vZmZfYWN0aXZhdGlvbik7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogewotICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90ZWFyX29mZl9hcmd1
bWVudHMpOwotICAgICAgICAgICAgaSArPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9yZXQ6IHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIEpJVCBn
ZW5lcmF0ZSB0aGUgZGVyZWYsIG9ubHkgY2FsbGluZyBvdXQgdG8gQyB3aGVuIHRoZSByZWZjb3Vu
dCBoaXRzIHplcm8uCi0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4pCi0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9yZXRfc2NvcGVDaGFpbik7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGlu
ICVlYXguCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgLy8gR3JhYiB0aGUg
cmV0dXJuIGFkZHJlc3MuCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lz
dGVyRmlsZTo6UmV0dXJuUEMsIFg4Njo6ZWR4LCBpKTsKLQotICAgICAgICAgICAgLy8gUmVzdG9y
ZSBvdXIgY2FsbGVyJ3MgInIiLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihS
ZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCBYODY6OmVkaSwgaSk7Ci0KLSAgICAgICAgICAgIC8v
IFJldHVybi4KLSAgICAgICAgICAgIF9fIHB1c2hsX3IoWDg2OjplZHgpOwotICAgICAgICAgICAg
X18gcmV0KCk7Ci0KLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OiB7Ci0gICAgICAgICAgICBfXyBsZWFs
X21yKHNpemVvZihSZWdpc3RlcikgKiBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6
OmVkaSwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7
Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDNdLnUu
b3BlcmFuZCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX25ld19hcnJheSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlOiB7Ci0gICAgICAg
ICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25z
dGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2NvbnN0cnVjdF92ZXJpZnk6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0g
ICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbmUoKTsKLSAgICAgICAgICAg
IF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwg
WDg2OjplY3gpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKE9iamVjdFR5cGUsIEZJRUxEX09G
RlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZGU0VUKFR5cGVJbmZvLCBtX3R5
cGUpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNPYmplY3QgPSBfXyBqZSgpOwot
Ci0gICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwg
WDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIF9fIGxpbmsoaXNPYmplY3QsIF9f
IGxhYmVsKCkpOwotCi0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4
LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAg
ZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kz
MnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgICAgICBfXyBj
bXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0Fy
cmF5VnB0ciksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYXJy
YXk7IGdldCB0aGUgbV9zdG9yYWdlIHBvaW50ZXIgaW50byBlY3gsIHRoZW4gY2hlY2sgaWYgdGhl
IGluZGV4IGlzIGJlbG93IHRoZSBmYXN0IGN1dG9mZgotICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAg
ICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChKU0FycmF5LCBtX2Zh
c3RBY2Nlc3NDdXRvZmYpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQoU2xvd0Nhc2VFbnRyeShfXyBqYmUoKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBHZXQgdGhl
IHZhbHVlIGZyb20gdGhlIHZlY3RvcgotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZT
RVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6OmVkeCwgc2l6ZW9m
KEpTVmFsdWUqKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9mdW5j
OiB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwot
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2Z1
bmMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zdWI6IHsKLSAg
ICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9wX3N1YiwgaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51
Lm9wZXJhbmQpLCBpKTsKLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2Ojpl
YXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAg
ICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAgICAgICAgX18gdGVzdGxf
aTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgICAgIF9f
IGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pz
QXJyYXlWcHRyKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBh
cnJheTsgZ2V0IHRoZSBtX3N0b3JhZ2UgcG9pbnRlciBpbnRvIGVjeCwgdGhlbiBjaGVjayBpZiB0
aGUgaW5kZXggaXMgYmVsb3cgdGhlIGZhc3QgY3V0b2ZmCi0gICAgICAgICAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1f
ZmFzdEFjY2Vzc0N1dG9mZiksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpbkZhc3RW
ZWN0b3IgPSBfXyBqYSgpOwotICAgICAgICAgICAgLy8gTm87IG9oIHdlbGwsIGNoZWNrIGlmIHRo
ZSBhY2Nlc3MgaWYgd2l0aGluIHRoZSB2ZWN0b3IgLSBpZiBzbywgd2UgbWF5IHN0aWxsIGJlIG9r
YXkuCi0gICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQXJyYXlT
dG9yYWdlLCBtX3ZlY3Rvckxlbmd0aCksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpiZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8v
IFRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc2xvdyBwYXJ0IG9mIHRoZSB2ZWN0b3I7IGZpcnN0LCB3
ZSBoYXZlIHRvIGNoZWNrIGlmIHRoaXMgd291bGQgYmUgdGhlIGZpcnN0IHdyaXRlIHRvIHRoaXMg
bG9jYXRpb24uCi0gICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxl
IGluaXRpYWwgd3JpdGUgdG8gYXJyYXk7IGluY3JlbWVudCB0aGUgdGhlIG51bWJlciBvZiBpdGVt
cyBpbiB0aGUgYXJyYXksIGFuZCBwb3RlbnRpYWxseSB1cGRhdGUgZmFzdCBhY2Nlc3MgY3V0b2Zm
LiAKLSAgICAgICAgICAgIF9fIGNtcGxfaThtKDAsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopKTsKLSAg
ICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsK
LQotICAgICAgICAgICAgLy8gQWxsIGdvb2QgLSBwdXQgdGhlIHZhbHVlIGludG8gdGhlIGFycmF5
LgotICAgICAgICAgICAgX18gbGluayhpbkZhc3RWZWN0b3IsIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWF4LCBGSUVMRF9P
RkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6OmVkeCwgc2l6
ZW9mKEpTVmFsdWUqKSk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfbGVzc2VxKQotICAg
ICAgICBjYXNlIG9wX2xvb3BfaWZfdHJ1ZTogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRD
aGVjayhpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBfXyBj
bXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNaZXJvID0gX18gamUoKTsKLSAgICAgICAgICAgIF9f
IHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbmUoKSwgaSArIDIgKyB0
YXJnZXQpKTsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0
ZTo6dHJ1ZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5h
cHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIF9f
IGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRlKCkpLCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBq
bmUoKSwgaSkpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzWmVybywgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICAg
ICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6IHsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3Jlc29sdmVfYmFzZSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAz
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZWdhdGU6
IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmVnYXRlKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X3Jlc29sdmVfc2tpcDogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
aWRlbnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4sIDQp
OwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZl
X3NraXApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWw6IHsKLSAgICAgICAg
ICAgIC8vIEZhc3QgY2FzZQotICAgICAgICAgICAgdW5zaWduZWQgZ2xvYmFsT2JqZWN0ID0gYXNJ
bnRlZ2VyKGluc3RydWN0aW9uW2kgKyAyXS51LmpzQ2VsbCk7Ci0gICAgICAgICAgICBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIHZvaWQqIHN0cnVjdHVyZUFkZHJlc3MgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihpbnN0cnVjdGlvbiArIGkgKyA0KTsKLSAgICAgICAgICAgIHZv
aWQqIG9mZnNldEFkZHIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnN0cnVjdGlvbiArIGkg
KyA1KTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgU3RydWN0dXJlIG9mIGdsb2JhbCBvYmplY3QK
LSAgICAgICAgICAgIF9fIG1vdmxfaTMycihnbG9iYWxPYmplY3QsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIF9fIG1vdmxfbXIoc3RydWN0dXJlQWRkcmVzcywgWDg2OjplZHgpOwotICAgICAgICAg
ICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgbm9NYXRjaCA9IF9fIGpuZSgpOyAvLyBT
dHJ1Y3R1cmVzIGRvbid0IG1hdGNoCi0KLSAgICAgICAgICAgIC8vIExvYWQgY2FjaGVkIHByb3Bl
cnR5Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0dsb2JhbE9iamVjdCwg
bV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18g
bW92bF9tcihvZmZzZXRBZGRyLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKDAs
IFg4Njo6ZWF4LCBYODY6OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgpOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIEptcFNyYyBlbmQgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAgLy8g
U2xvdyBjYXNlCi0gICAgICAgICAgICBfXyBsaW5rKG5vTWF0Y2gsIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGdsb2JhbE9iamVjdCwgMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRl
bnQpLCA0KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkPihpbnN0cnVjdGlvbiArIGkpLCA4KTsKLSAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9nbG9iYWwpOwotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIF9fIGxpbmsoZW5kLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGkgKz0gNjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFS
WV9PUChvcF9kaXYpCi0gICAgICAgIGNhc2Ugb3BfcHJlX2RlYzogewotICAgICAgICAgICAgaW50
IHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHN1
YmxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVk
aWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVl
KiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKHNyYzJpbW0pIHsKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQs
IFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIo
c3JjMmltbSksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChK
bXBUYWJsZShfXyBqZ2UoKSwgaSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4
Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0o
WDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2
OjplYXgpOwotICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpn
ZSgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9ub3Q6IHsK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18geG9ybF9pOHIoSlNJbW1lZGlh
dGU6OkZ1bGxUYWdUeXBlQm9vbCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMy
cihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVNYXNrLCBYODY6OmVheCk7IC8vIGk4PwotICAgICAg
ICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAg
ICAgICAgICAgIF9fIHhvcmxfaThyKChKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sIHwgSlNJ
bW1lZGlhdGU6OkV4dGVuZGVkUGF5bG9hZEJpdEJvb2xWYWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2pmYWxzZTogewotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0g
ICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRp
YXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJs
ZShfXyBqZSgpLCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihK
U0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEpt
cFNyYyBpc05vblplcm8gPSBfXyBqbmUoKTsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFz
SW50ZWdlcihKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsgdGFyZ2V0
KSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp0cnVl
SW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzTm9u
WmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfTsKLSAgICAgICAgY2FzZSBvcF9qZXFfbnVsbDogewotICAgICAgICAgICAg
dW5zaWduZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBYODY6OmVheCwgaSk7Ci0gICAgICAg
ICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAgICAgICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsK
LSAgICAgICAgICAgIF9fIHNldG56X3IoWDg2OjplYXgpOwotCi0gICAgICAgICAgICBKbXBTcmMg
d2FzTm90SW1tZWRpYXRlID0gX18gam1wKCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1l
ZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIofkpTSW1tZWRp
YXRlOjpFeHRlbmRlZFRhZ0JpdFVuZGVmaW5lZCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18g
YW5kbF9ycihYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKEpT
SW1tZWRpYXRlOjpGdWxsVGFnVHlwZU51bGwsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNl
dGVfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBf
XyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoMCwgWDg2OjplYXgpOwotICAgICAgICAgICAg
bV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam56KCksIGkgKyAyICsgdGFyZ2V0KSk7ICAg
ICAgICAgICAgCi0KLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9OwotICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDogewotICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBf
XyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAgICAgICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZJRUxE
X09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsKLSAgICAg
ICAgICAgIF9fIHNldHpfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIEptcFNyYyB3YXNOb3RJ
bW1lZGlhdGUgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwg
X18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1lZGlhdGU6OkV4
dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBhbmRsX3Jy
KFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlh
dGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0bmVfcihY
ODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBfXyBsYWJl
bCgpKTsKLQotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBfXyBjbXBsX2kzMnIoMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBU
YWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam56KCksIGkgKyAyICsgdGFyZ2V0KSk7ICAgICAgICAg
ICAgCi0KLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfcG9zdF9pbmM6IHsKLSAgICAgICAgICAgIGludCBzcmNEc3QgPSBp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2
OjplYXgsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyBhZGRsX2k4cihnZXREZVRhZ2dlZENvbnN0
YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKLSAg
ICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF91bmV4cGVjdGVkX2xvYWQ6IHsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHYgPSBtX2NvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50c1tpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIodiksIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2pzcjogewotICAgICAgICAgICAgaW50IHJl
dEFkZHJEc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBfXyBt
b3ZsX2kzMm0oMCwgc2l6ZW9mKFJlZ2lzdGVyKSAqIHJldEFkZHJEc3QsIFg4Njo6ZWRpKTsKLSAg
ICAgICAgICAgIEptcERzdCBhZGRyUG9zaXRpb24gPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAg
bV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam1wKCksIGkgKyAyICsgdGFyZ2V0KSk7Ci0g
ICAgICAgICAgICBKbXBEc3Qgc3JldFRhcmdldCA9IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBt
X2pzclNpdGVzLmFwcGVuZChKU1JJbmZvKGFkZHJQb3NpdGlvbiwgc3JldFRhcmdldCkpOwotICAg
ICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9zcmV0OiB7Ci0gICAgICAgICAgICBfXyBqbXBfbShzaXplb2YoUmVnaXN0ZXIpICog
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplZGkpOwotICAgICAgICAgICAgaSAr
PSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lcTog
ewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6
ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2Ojpl
YXgsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplZHgsIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIF9fIHNldGVfcihYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBt
b3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJ
bW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7Ci0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkp
OwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsK
LSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVjeCwgaSk7Ci0g
ICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplYXgpOwotICAgICAgICAgICAg
ZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNobGxfQ0xy
KFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU9yU2xvd0Nhc2Uo
WDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAg
ICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0Fy
ZyhzcmMxKSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
WDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gYW5kbF9pMzJyKGFzSW50ZWdlcih2
YWx1ZSksIFg4Njo6ZWF4KTsgLy8gRklYTUU6IG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoaXMgaXMg
cmVseWluZyBvbiB0aGUgZm9ybWF0IG9mIEpTSW1tZWRpYXRlCi0gICAgICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVl
KiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgewotICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOwotICAg
ICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0g
ICAgICAgICAgICAgICAgX18gYW5kbF9pMzJyKGFzSW50ZWdlcih2YWx1ZSksIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEs
IFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gYW5kbF9y
cihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA1OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yc2hpZnQ6IHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVy
aWNBcmcoc3JjMikpIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIC8vIE1hc2sgd2l0aCAweDFmIGFz
IHBlciBlY21hLTI2MiAxMS43LjIgc3RlcCA3LgotICAgICAgICAgICAgICAgIF9fIHNhcmxfaThy
KEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIodmFsdWUpICYgMHgxZiwgWDg2OjplYXgp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhzcmMxLCBYODY6OmVheCwgc3JjMiwgWDg2OjplY3gsIGkpOwotICAgICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsKLSAgICAgICAg
ICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplY3gpOwotICAgICAgICAgICAgICAg
IF9fIHNhcmxfQ0xyKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVtaXRG
YXN0QXJpdGhQb3RlbnRpYWxseVJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2JpdG5vdDogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18g
eG9ybF9pOHIofkpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV93aXRoX2Jhc2U6IHsKLSAgICAgICAgICAgIElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2
OjplZHgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7Ci0gICAgICAgICAg
ICBGdW5jRXhwck5vZGUqIGZ1bmMgPSAobV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcmVzc2lvbnNb
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pLmdldCgpOwotICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMpLCAwKTsKLSAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Z1bmNfZXhw
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX21vZDogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGkpOwotICAgICAgICAgICAgZW1pdEZhc3RB
cml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8o
WDg2OjplY3gpLCBpKSk7Ci0gICAgICAgICAgICBfXyBjZHEoKTsKLSAgICAgICAgICAgIF9fIGlk
aXZsX3IoWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRl
KFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2p0cnVlOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7
Ci0KLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9J
bW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc1plcm8gPSBfXyBq
ZSgpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUlu
dGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxl
KF9fIGpuZSgpLCBpICsgMiArIHRhcmdldCkpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIo
YXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqZSgpLCBpICsgMiArIHRhcmdl
dCkpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6ZmFs
c2VJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXNa
ZXJvLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9sZXNzKQotICAg
ICAgICBjYXNlIG9wX25lcTogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIF9fIGNtcGxf
cnIoWDg2OjplYXgsIFg4Njo6ZWR4KTsKLQotICAgICAgICAgICAgX18gc2V0bmVfcihYODY6OmVh
eCk7Ci0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOwotCi0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotCi0g
ICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3Bvc3RfZGVjOiB7Ci0gICAgICAgICAgICBpbnQgc3JjRHN0ID0gaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyBtb3ZsX3JyKFg4Njo6ZWF4LCBY
ODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgX18gc3VibF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVk
aWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVkeCk7Ci0gICAgICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplZHgpOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF91cnNoaWZ0KQotICAgICAgICBjYXNlIG9wX2Jp
dHhvcjogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQs
IFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMo
WDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIF9fIHhvcmxfcnIoWDg2OjplZHgs
IFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6
OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7Ci0gICAgICAgICAgICBS
ZWdFeHAqIHJlZ0V4cCA9IG1fY29kZUJsb2NrLT5yZWdleHBzW2luc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmRdLmdldCgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KHJlZ0V4cCksIDApOwotICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfcmVnZXhwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2JpdG9yOiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtcyhYODY6OmVheCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgX18gb3JsX3JyKFg4Njo6
ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90aHJvdzogewotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF90aHJvdyk7Ci0gICAgICAgICAgICBfXyBhZGRsX2k4cigweDIwLCBYODY6
OmVzcCk7Ci0gICAgICAgICAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgICAgICAgICAgX18g
cG9wbF9yKFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIF9fIHBvcGxfcihYODY6OmVzaSk7Ci0gICAg
ICAgICAgICBfXyByZXQoKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczogewotICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfcG5hbWVzKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25leHRfcG5hbWU6
IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25leHRfcG5hbWUpOwotICAgICAgICAgICAg
X18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBlbmRP
Zkl0ZXIgPSBfXyBqZSgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5k
KEptcFRhYmxlKF9fIGptcCgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgX18gbGlu
ayhlbmRPZkl0ZXIsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXNoX3Njb3BlOiB7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX3B1c2hfc2NvcGUpOwotICAgICAgICAgICAgaSArPSAyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wb3Bfc2NvcGU6IHsK
LSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcG9wX3Njb3Bl
KTsKLSAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX3R5cGVvZikKLSAgICAgICAgQ1RJX0NPTVBJ
TEVfVU5BUllfT1Aob3BfaXNfdW5kZWZpbmVkKQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9P
UChvcF9pc19ib29sZWFuKQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19udW1i
ZXIpCi0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX3N0cmluZykKLSAgICAgICAg
Q1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfb2JqZWN0KQotICAgICAgICBDVElfQ09NUElMRV9V
TkFSWV9PUChvcF9pc19mdW5jdGlvbikKLSAgICAgICAgY2FzZSBvcF9zdHJpY3RlcTogewotICAg
ICAgICAgICAgY29tcGlsZU9wU3RyaWN0RXEoaW5zdHJ1Y3Rpb24gKyBpLCBpLCBPcFN0cmljdEVx
KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfbnN0cmljdGVxOiB7Ci0gICAgICAgICAgICBjb21waWxlT3BTdHJpY3RF
cShpbnN0cnVjdGlvbiArIGksIGksIE9wTlN0cmljdEVxKTsKLSAgICAgICAgICAgIGkgKz0gNDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdG9fanNudW1i
ZXI6IHsKLSAgICAgICAgICAgIGludCBzcmNWUmVnID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIHdh
c0ltbWVkaWF0ZSA9IF9fIGpueigpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoWDg2OjplYXgsIGksIHNyY1ZSZWcpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsK
LSAgICAgICAgICAgIF9fIGNtcGxfaTMybShOdW1iZXJUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0
dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgX18gbGluayh3YXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkp
OwotCi0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pbjogewotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2
OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbik7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9wdXNoX25ld19zY29wZTogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4oaWRlbnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKLSAgICAgICAgICAgIGVtaXRHZXRDVElQYXJh
bShDVElfQVJHU19jYWxsRnJhbWUsIFg4Njo6ZWRpKTsgLy8gZWRpIDo9IHIKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2ptcF9zY29wZXM6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25z
dGFudChjb3VudCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX2ptcF9zY29wZXMpOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEpt
cFRhYmxlKF9fIGptcCgpLCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAgaSArPSAzOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaW5k
ZXg6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0KTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2luZGV4KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbTog
ewotICAgICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGlu
c3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCi0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9j
ay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICAgICAgICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGksIGRlZmF1bHRPZmZzZXQs
IFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7Ci0gICAgICAgICAgICBqdW1wVGFibGUtPmN0aU9m
ZnNldHMuZ3JvdyhqdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKLQotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCAwLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQodGFibGVJbmRleCwgNCk7Ci0g
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9pbW0p
OwotICAgICAgICAgICAgX18gam1wX3IoWDg2OjplYXgpOwotICAgICAgICAgICAgaSArPSA0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfY2hh
cjogewotICAgICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9
IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBq
dW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0
ZW1lbnQuCi0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVC
bG9jay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICAgICAgICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGksIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBqdW1wVGFibGUtPmN0
aU9mZnNldHMuZ3JvdyhqdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKLQotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCAwLCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQodGFibGVJbmRleCwgNCk7
Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9j
aGFyKTsKLSAgICAgICAgICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGkgKz0g
NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNo
X3N0cmluZzogewotICAgICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0g
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNjcnV0
aW5lZSA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCi0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICAgICAg
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGksIGRlZmF1bHRP
ZmZzZXQpKTsKLQotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3Rh
bnQodGFibGVJbmRleCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX3N3aXRjaF9zdHJpbmcpOwotICAgICAgICAgICAgX18gam1wX3IoWDg2OjplYXgp
OwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9kZWxfYnlfdmFsOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV92YWwpOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfcHV0X2dldHRlcjogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfcHV0X2dldHRlcik7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXI6IHsKLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9zZXR0
ZXIpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9uZXdfZXJyb3I6IHsKLSAgICAgICAgICAgIEpTVmFsdWUqIG1lc3Nh
Z2UgPSBtX2NvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50c1tpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kXTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kLCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChhc0ludGVnZXIobWVzc2FnZSksIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0
YW50KG1fY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKCZpbnN0cnVjdGlvbltpXSksIDgpOwot
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZXJyb3Ip
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwKTsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0KTsK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCA4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlf
b3BfZGVidWcpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9lcV9udWxsOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBk
c3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQg
c3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gdGVz
dGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1w
U3JjIGlzSW1tZWRpYXRlID0gX18gam56KCk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgX18gdGVzdGxfaTMybShNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGSUVMRF9PRkZT
RVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICBfXyBzZXRuel9yKFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgSm1wU3JjIHdhc05vdEltbWVk
aWF0ZSA9IF9fIGptcCgpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBs
YWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5k
ZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2
OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6
RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXRlX3IoWDg2Ojpl
YXgpOwotCi0gICAgICAgICAgICBfXyBsaW5rKHdhc05vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7
Ci0KLSAgICAgICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAg
ICAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmVxX251bGw6IHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLQot
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0g
ICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAgICAg
ICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIF9fIHNldHpfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIEpt
cFNyYyB3YXNOb3RJbW1lZGlhdGUgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAgX18gbGluayhp
c0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJ
bW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICBfXyBhbmRsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kz
MnIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOwotICAgICAgICAgICAg
X18gc2V0bmVfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRp
YXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAgICAgICAgICAg
aSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9l
bnRlcjogewotICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0s
IHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50Ci0gICAgICAgICAgICAvLyByZWdpc3RlcnMgdG8g
emFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKLSAg
ICAgICAgICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4K
LSAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzICsgbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSAwOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgICAgICAgICBlbWl0SW5pdFJlZ2lzdGVy
KGopOwotCi0gICAgICAgICAgICBpKz0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfZW50ZXJfd2l0aF9hY3RpdmF0aW9uOiB7Ci0gICAgICAgICAgICAv
LyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29u
c3RhbnQKLSAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwotICAgICAgICAgICAgLy8gb2JqZWN0IGxp
ZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgICAgICAgICAgc2l6ZV90IGNv
dW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMgKyBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBjb3VudDsgKytq
KQotICAgICAgICAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIoaik7Ci0KLSAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7Ci0KLSAgICAgICAgICAgIGkrPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCAobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMgPT0gMSkgPyBJbnRlcnByZXRlcjo6
Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zIDogSW50ZXJwcmV0ZXI6OmN0aV9vcF9j
cmVhdGVfYXJndW1lbnRzKTsKLSAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29udmVydF90aGlzOiB7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4
Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4
Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwg
bV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplZHgpOwotICAgICAgICAgICAgX18gdGVzdGxf
aTMybShOZWVkc1RoaXNDb252ZXJzaW9uLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJ
bmZvLm1fZmxhZ3MpLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqbnooKSwgaSkpOwotCi0gICAgICAgICAgICBpICs9IDI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9j
YWxsOiB7Ci0gICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZl
cmVuY2UsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybSgwLCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBKbXBTcmMgbm9Qcm9maWxlciA9IF9fIGplKCk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kLCAwLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX3Byb2ZpbGVfd2lsbF9jYWxsKTsKLSAgICAgICAgICAgIF9fIGxpbmsobm9Qcm9m
aWxlciwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDogewotICAg
ICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlLCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0oMCwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgSm1wU3JjIG5vUHJvZmlsZXIgPSBfXyBqZSgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2
OjplYXgpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9w
cm9maWxlX2RpZF9jYWxsKTsKLSAgICAgICAgICAgIF9fIGxpbmsobm9Qcm9maWxlciwgX18gbGFi
ZWwoKSk7Ci0KLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9w
cm90b19saXN0OgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZF9zZWxmX2xpc3Q6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5n
dGg6Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPT0gbV9jb2RlQmxvY2st
PnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSk7Ci0gICAgQVNTRVJUKGNhbGxMaW5r
SW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKSk7Ci19Ci0KLQot
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQotewotICAgIHVuc2lnbmVkIGptcFRh
YmxlQ291bnQgPSBtX2ptcFRhYmxlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgam1wVGFibGVDb3VudDsgKytpKQotICAgICAgICBfXyBsaW5rKG1fam1wVGFibGVbaV0uZnJv
bSwgbV9sYWJlbHNbbV9qbXBUYWJsZVtpXS50b10pOwotICAgIG1fam1wVGFibGUuY2xlYXIoKTsK
LX0KLQotI2RlZmluZSBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNFKG5hbWUpIFwKLSAg
ICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OyBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6
OmVjeCk7IFwKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV8jI25hbWUp
OyBcCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7IFwKLSAgICAgICAgaSArPSA0OyBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgfQot
Ci0jZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0VfRE9VQkxFX0VOVFJZKG5h
bWUpIFwKLSAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9f
IGxhYmVsKCkpOyBcCi0gICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkp
OyAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAg
ICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCA0LCBYODY6OmVjeCk7IFwKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV8jI25hbWUpOyBcCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7IFwKLSAgICAgICAgaSArPSA0OyBcCi0gICAgICAgIGJy
ZWFrOyBcCi0gICAgfQotICAgIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
LXsKLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOwotICAg
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4ID0gMDsKLQotICAgIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKLSAgICBmb3IgKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAvLyBGSVhNRTog
ZW5hYmxlIHBlZXBob2xlIG9wdGltaXphdGlvbnMgZm9yIHNsb3cgY2FzZXMgd2hlbiBhcHBsaWNh
YmxlCi0gICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLQotICAgICAgICB1bnNpZ25l
ZCBpID0gaXRlci0+dG87Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICB1bnNpZ25lZCBmaXJzdFRv
ID0gaTsKLSNlbmRpZgotCi0gICAgICAgIHN3aXRjaCAoT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX2lu
dGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbltpXS51Lm9wY29kZSkpIHsKLSAgICAg
ICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBs
YWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb252ZXJ0X3RoaXMpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfYWRkOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMy
ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlmIChKU1ZhbHVl
KiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgewotICAgICAg
ICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgICAgIF9f
IGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIF9fIHN1
YmxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgpOwot
ICAgICAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgNCk7Ci0gICAgICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOwotICAgICAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikp
IHsKLSAgICAgICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKLSAgICAgICAg
ICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
ICAgICBfXyBzdWJsX2kzMnIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZSh2YWx1ZSksIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYWRkKTsK
LSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IE9wZXJhbmRU
eXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
ICAgICBpZiAodHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkgJiYgdHlwZXMuc2Vjb25kKCku
bWlnaHRCZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhP
cFNsb3dDYXNlKG9wX2FkZCwgaXRlciwgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgaSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOiB7Ci0gICAgICAgICAg
ICAvLyBUaGUgc2xvdyBjYXNlIHRoYXQgaGFuZGxlcyBhY2Nlc3NlcyB0byBhcnJheXMgKGJlbG93
KSBtYXkganVtcCBiYWNrIHVwIHRvIGhlcmUuIAotICAgICAgICAgICAgSm1wRHN0IGJlZ2luR2V0
QnlWYWxTbG93ID0gX18gbGFiZWwoKTsKLQotICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0
ZXItPmZyb207Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhYODY6OmVkeCk7Ci0gICAgICAg
ICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQp
OwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlf
dmFsKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBfXyBsaW5rKF9fIGptcCgpLCBtX2xhYmVsc1tp
ICsgNF0pOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIHNsb3cgY2FzZSB0aGF0IGhhbmRsZXMg
YWNjZXNzZXMgdG8gYXJyYXlzIGFib3ZlIHRoZSBmYXN0IGN1dC1vZmYuCi0gICAgICAgICAgICAv
LyBGaXJzdCwgY2hlY2sgaWYgdGhpcyBpcyBhbiBhY2Nlc3MgdG8gdGhlIHZlY3RvcgotICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBf
XyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvckxl
bmd0aCksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gamJlKCksIGJlZ2luR2V0
QnlWYWxTbG93KTsKLQotICAgICAgICAgICAgLy8gb2theSwgbWlzc2VkIHRoZSBmYXN0IHJlZ2lv
biwgYnV0IGl0IGlzIHN0aWxsIGluIHRoZSB2ZWN0b3IuICBHZXQgdGhlIHZhbHVlLgotICAgICAg
ICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSks
IFg4Njo6ZWN4LCBYODY6OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgdmFsdWUgbG9hZGVkIGlzIHplcm87IGlmIHNvIHdl
IG5lZWQgdG8gcmV0dXJuIHVuZGVmaW5lZC4KLSAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6
ZWN4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIGJlZ2luR2V0QnlW
YWxTbG93KTsKLSAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCwgWDg2OjplYXgpOwotCi0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N1YjogewotICAgICAgICAgICAgY29tcGls
ZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShvcF9zdWIsIGl0ZXIsIGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5v
cGVyYW5kKSwgaSk7Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAgICAgICAgICAgdW5zaWduZWQg
c3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBfXyBsaW5r
KGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgaWYgKGdldENvbnN0YW50SW1t
ZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAg
ICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3JzaGlmdCk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9sc2hpZnQ6IHsKLSAgICAgICAgICAgIEptcFNyYyBub3RJbW0xID0gaXRlci0+ZnJv
bTsKLSAgICAgICAgICAgIEptcFNyYyBub3RJbW0yID0gKCsraXRlciktPmZyb207Ci0gICAgICAg
ICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6
ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7Ci0gICAgICAg
ICAgICBfXyBsaW5rKG5vdEltbTEsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGluayhu
b3RJbW0yLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgs
IDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgNCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xzaGlmdCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9sb29wX2lmX2xlc3M6IHsKLSAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hl
Y2soaSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJ
bW1lZGlhdGVOdW1lcmljQXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgaWYgKHNyYzJpbW0pIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20s
IF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDAp
OwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzcyk7Ci0gICAgICAg
ICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAg
ICBfXyBsaW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkp
OwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzKTsKLSAgICAgICAgICAg
ICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9f
IGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3B1dF9ieV9pZDogewotICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKGl0ZXIsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpKQotICAgICAgICAg
ICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7Ci0KLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7
Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmcoWDg2OjplZHgsIDgpOwotICAgICAgICAgICAgSm1wU3JjIGNhbGwgPSBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZCk7Ci0KLSAgICAgICAgICAg
IC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8g
cmVjb3ZlciByZXBhdGNoIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
SW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uY2FsbFJldHVy
bkxvY2F0aW9uID0gY2FsbDsKLSAgICAgICAgICAgICsrcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bkluZGV4OwotCi0gICAgICAgICAgICBpICs9IDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDogewotICAgICAgICAgICAgLy8gQXMgZm9y
IHRoZSBob3QgcGF0aCBvZiBnZXRfYnlfaWQsIGFib3ZlLCB3ZSBlbnN1cmUgdGhhdCB3ZSBjYW4g
dXNlIGFuIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBvZmZzZXQKLSAgICAgICAgICAgIC8vIHNvIHRo
YXQgd2Ugb25seSBuZWVkIHRyYWNrIG9uZSBwb2ludGVyIGludG8gdGhlIHNsb3cgY2FzZSBjb2Rl
IC0gd2UgdHJhY2sgYSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbgotICAgICAgICAgICAgLy8gb2Yg
dGhlIGNhbGwgKHdoaWNoIHdlIGNhbiB1c2UgdG8gbG9vayB1cCB0aGUgcmVwYXRjaCBpbmZvcm1h
dGlvbiksIGJ1dCBzaG91bGQgYSBhcnJheS1sZW5ndGggb3IKLSAgICAgICAgICAgIC8vIHByb3Rv
dHlwZSBhY2Nlc3MgdHJhbXBvbGluZSBmYWlsIHdlIHdhbnQgdG8gYmFpbCBvdXQgYmFjayB0byBo
ZXJlLiAgVG8gZG8gc28gd2UgY2FuIHN1YnRyYWN0IGJhY2sKLSAgICAgICAgICAgIC8vIHRoZSBk
aXN0YW5jZSBmcm9tIHRoZSBjYWxsIHRvIHRoZSBoZWFkIG9mIHRoZSBzbG93IGNhc2UuCi0KLSAg
ICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBf
XyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAg
ICAgICAgSm1wRHN0IGNvbGRQYXRoQmVnaW4gPSBfXyBsYWJlbCgpOwotI2VuZGlmICAgICAgICAK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAgICAgIEptcFNyYyBj
YWxsID0gZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWQpOwotICAg
ICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMo
Y29sZFBhdGhCZWdpbiwgY2FsbCkgPT0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgLy8gVHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBj
YWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHJlcGF0Y2ggaW5mb3JtYXRpb24uCi0g
ICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
W3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKLSAg
ICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwotICAgICAgICAgICAg
Kytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7Ci0KLSAgICAgICAgICAgIGkgKz0gODsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9s
ZXNzZXE6IHsKLSAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJn
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKHNyYzJpbW0p
IHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDApOwotICAgICAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKTsKLSAgICAgICAgICAgICAgICBfXyB0ZXN0
bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gam5l
KCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3NlcSk7Ci0gICAgICAgICAgICAgICAgX18gdGVzdGxf
cnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGpuZSgp
LCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9w
cmVfaW5jOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kOwotICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207Ci0g
ICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIF9fIHN1YmxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6
Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0s
IF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0g
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3ByZV9pbmMpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwotICAgICAgICAgICAg
aSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9w
dXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICAvLyBOb3JtYWwgc2xvdyBjYXNlcyAtIGVpdGhlciBp
cyBub3QgYW4gaW1tZWRpYXRlIGltbSwgb3IgaXMgYW4gYXJyYXkuCi0gICAgICAgICAgICBKbXBT
cmMgbm90SW1tID0gaXRlci0+ZnJvbTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZy
b20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4Njo6
ZWR4KTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
WDg2OjplY3gsIGkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplY3gsIDgpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9wdXRfYnlfdmFsKTsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gam1wKCks
IG1fbGFiZWxzW2kgKyA0XSk7Ci0KLSAgICAgICAgICAgIC8vIHNsb3cgY2FzZXMgZm9yIGltbWVk
aWF0ZSBpbnQgYWNjZXNzZXMgdG8gYXJyYXlzCi0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIp
LT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20s
IF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgs
IDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgOCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXkpOwot
Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2xvb3BfaWZfdHJ1ZTogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRD
aGVjayhpKTsKLQotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk7Ci0gICAgICAgICAgICBfXyB0
ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIGxpbmsoX18g
am5lKCksIG1fbGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3ByZV9kZWM6IHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKLSAgICAgICAgICAg
IF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gYWRk
bF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRp
YXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwo
KSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2RlYyk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2pubGVzczogewot
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51
bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAo
c3JjMmltbSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7Ci0gICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3Bfamxlc3MpOwotICAgICAgICAgICAgICAgIF9fIHRlc3Rs
X3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhfXyBqZSgp
LCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAg
ICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElB
cmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3Bfamxlc3MpOwotICAgICAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhfXyBqZSgpLCBtX2xhYmVsc1tp
ICsgMyArIHRhcmdldF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9ub3Q6IHsKLSAgICAg
ICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyB4
b3JsX2k4cihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCBYODY6OmVheCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3Bfbm90KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2pmYWxz
ZTogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9y
cihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwg
bV9sYWJlbHNbaSArIDIgKyB0YXJnZXRdKTsgLy8gaW52ZXJ0ZWQhCi0gICAgICAgICAgICBpICs9
IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Bvc3Rf
aW5jOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Bvc3RfaW5jKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
aSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9i
aXRub3Q6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYml0bm90KTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2JpdGFuZDogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpZiAoZ2V0Q29uc3RhbnRJbW1lZGlhdGVO
dW1lcmljQXJnKHNyYzEpKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBf
XyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihzcmMxLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVheCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9iaXRhbmQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmlj
QXJnKHNyYzIpKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9iaXRhbmQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9t
LCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxS
ZWdpc3RlcihzcmMxLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9iaXRhbmQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfanRydWU6IHsKLSAgICAgICAgICAg
IF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfanRydWUpOwotICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBfXyBsaW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMiAr
IHRhcmdldF0pOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9wb3N0X2RlYzogewotICAgICAgICAgICAgdW5zaWduZWQg
c3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIGxp
bmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIp
LT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgs
IDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3N0
X2RlYyk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2Ojpl
ZHgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7Ci0gICAgICAgICAgICBfXyBsaW5r
KGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYml0eG9yKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2JpdG9yOiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20s
IF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYml0b3IpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfZXE6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9lcSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXE6IHsKLSAgICAgICAg
ICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgs
IDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXEp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0VfRE9VQkxFX0VO
VFJZKG9wX3N0cmljdGVxKTsKLSAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FT
RV9ET1VCTEVfRU5UUlkob3BfbnN0cmljdGVxKTsKLSAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9m
OiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBf
XyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyA0XS51Lm9w
ZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfaW5zdGFuY2VvZik7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9tb2Q6IHsKLSAg
ICAgICAgICAgIEptcFNyYyBub3RJbW0xID0gaXRlci0+ZnJvbTsKLSAgICAgICAgICAgIEptcFNy
YyBub3RJbW0yID0gKCsraXRlciktPmZyb207Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIp
LT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVk
aWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUo
WDg2OjplY3gpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0xLCBfXyBsYWJlbCgpKTsKLSAg
ICAgICAgICAgIF9fIGxpbmsobm90SW1tMiwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
Y3gsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9t
b2QpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbXVsOiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0g
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzcmMxID0gaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzcmMyID0gaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzFWYWx1ZSA9
IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKTsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHNyYzJWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKTsKLSAg
ICAgICAgICAgIGludDMyX3QgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoc3JjMVZhbHVlICYmICgo
dmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMVZhbHVlKSkgPiAwKSkgewotICAgICAg
ICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAg
ICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgYW4gZXh0cmEgc2xvdyBjYXNlIGZvciAob3AxICogLU4pIG9yICgtTiAqIG9w
MiksIHRvIGNoZWNrIGZvciAwIHNpbmNlIHRoaXMgc2hvdWxkIHByb2R1Y2UgYSByZXN1bHQgb2Yg
LTAuCi0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3Jj
MSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVh
bFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX211bCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMyVmFsdWUgJiYg
KCh2YWx1ZSA9IEpTSW1tZWRpYXRlOjppbnRWYWx1ZShzcmMyVmFsdWUpKSA+IDApKSB7Ci0gICAg
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
ICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAg
ICAvLyBUaGVyZSBpcyBhbiBleHRyYSBzbG93IGNhc2UgZm9yIChvcDEgKiAtTikgb3IgKC1OICog
b3AyKSwgdG8gY2hlY2sgZm9yIDAgc2luY2UgdGhpcyBzaG91bGQgcHJvZHVjZSBhIHJlc3VsdCBv
ZiAtMC4KLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihz
cmMxLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0
dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbXVsKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKG9wX211bCwgaXRlciwgZHN0LCBzcmMxLCBz
cmMyLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCks
IGkpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgotICAg
ICAgICBjYXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGluc3RydWN0aW9uICsgaSwgaSwgaXRlciwgY2FsbExpbmtJbmZvSW5kZXgrKywgb3Bjb2Rl
SUQpOwotICAgICAgICAgICAgaSArPSAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gNyA6IDUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90b19qc251
bWJlcjogewotICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAg
ICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF90b19qc251bWJlcik7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgoaXRlciArIDEpID09
IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8gIT0gKGl0ZXIgKyAxKS0+dG8sIk5vdCBlbm91
Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGZpcnN0VG8gPT0gaXRlci0+dG8sICJUb28gbWFueSBqdW1wcyBsaW5rZWQg
aW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0KLSAgICAgICAgX18gbGluayhfXyBqbXAoKSwgbV9s
YWJlbHNbaV0pOwotICAgIH0KLQotICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
SW5kZXggPT0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSk7
Ci0gICAgQVNTRVJUKGNhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5jYWxsTGlua0lu
Zm9zLnNpemUoKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZSgpCi17Ci0jaWYgRU5B
QkxFKENPREVCTE9DS19TQU1QTElORykKLSAgICAgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5j
b2RlQmxvY2tTbG90KCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAg
ICAgICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxl
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSksIG1faW50ZXJwcmV0ZXItPnNhbXBs
ZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgotCi0gICAgLy8gQ291bGQgdXNlIGEgcG9wbF9t
LCBidXQgd291bGQgbmVlZCB0byBvZmZzZXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBpZiBz
by4KLSAgICBfXyBwb3BsX3IoWDg2OjplY3gpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihYODY6OmVjeCwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7Ci0KLSAgICBKbXBTcmMgc2xvd1Jl
Z2lzdGVyRmlsZUNoZWNrOwotICAgIEptcERzdCBhZnRlclJlZ2lzdGVyRmlsZUNoZWNrOwotICAg
IGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAgIC8v
IEluIHRoZSBjYXNlIG9mIGEgZmFzdCBsaW5rZWQgY2FsbCwgd2UgZG8gbm90IHNldCB0aGlzIHVw
IGluIHRoZSBjYWxsZXIuCi0gICAgICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihtX2NvZGVCbG9jayksIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotCi0gICAgICAgIGVtaXRHZXRD
VElQYXJhbShDVElfQVJHU19yZWdpc3RlckZpbGUsIFg4Njo6ZWF4KTsKLSAgICAgICAgX18gbGVh
bF9tcihtX2NvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSwg
WDg2OjplZGksIFg4Njo6ZWR4KTsKLSAgICAgICAgX18gY21wbF9tcihGSUVMRF9PRkZTRVQoUmVn
aXN0ZXJGaWxlLCBtX2VuZCksIFg4Njo6ZWF4LCBYODY6OmVkeCk7Ci0gICAgICAgIHNsb3dSZWdp
c3RlckZpbGVDaGVjayA9IF9fIGpnKCk7Ci0gICAgICAgIGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2sg
PSBfXyBsYWJlbCgpOwotICAgIH0KLQotICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKLSAg
ICBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7Ci0gICAgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KTsKLQotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7Ci0g
ICAgICAgIF9fIGxpbmsoc2xvd1JlZ2lzdGVyRmlsZUNoZWNrLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgZW1pdENUSUNhbGwoMCwgSW50ZXJwcmV0ZXI6OmN0aV9yZWdpc3Rlcl9maWxlX2NoZWNrKTsK
LSAgICAgICAgSm1wU3JjIGJhY2tUb0JvZHkgPSBfXyBqbXAoKTsKLSAgICAgICAgX18gbGluayhi
YWNrVG9Cb2R5LCBhZnRlclJlZ2lzdGVyRmlsZUNoZWNrKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
bV9qbXBUYWJsZS5pc0VtcHR5KCkpOwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVD
b3B5KCk7Ci0KLSAgICAvLyBUcmFuc2xhdGUgdlBDIG9mZnNldHMgaW50byBhZGRyZXNzZXMgaW4g
SklUIGdlbmVyYXRlZCBjb2RlLCBmb3Igc3dpdGNoIHRhYmxlcy4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zd2l0Y2hlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTd2l0Y2hSZWNv
cmQgcmVjb3JkID0gbV9zd2l0Y2hlc1tpXTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IHJlY29yZC5ieXRlY29kZUluZGV4OwotCi0gICAgICAgIGlmIChyZWNvcmQudHlwZSAhPSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZykgewotICAgICAgICAgICAgQVNTRVJUKHJlY29yZC50eXBlID09
IFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlIHx8IHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6
Q2hhcmFjdGVyKTsgCi0gICAgICAgICAgICBBU1NFUlQocmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVK
dW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpID09IHJlY29yZC5qdW1wVGFibGUuc2ltcGxl
SnVtcFRhYmxlLT5jdGlPZmZzZXRzLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIHJlY29yZC5qdW1w
VGFibGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gX18gZ2V0UmVsb2NhdGVkQWRkcmVz
cyhjb2RlLCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIHJlY29yZC5kZWZhdWx0T2Zmc2V0
XSk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZWNvcmQuanVtcFRh
YmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRh
YmxlLT5icmFuY2hPZmZzZXRzW2pdOwotICAgICAgICAgICAgICAgIHJlY29yZC5qdW1wVGFibGUu
c2ltcGxlSnVtcFRhYmxlLT5jdGlPZmZzZXRzW2pdID0gb2Zmc2V0ID8gX18gZ2V0UmVsb2NhdGVk
QWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIG9mZnNldF0pIDogcmVj
b3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5cGUgPT0gU3dp
dGNoUmVjb3JkOjpTdHJpbmcpOwotCi0gICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnN0cmlu
Z0p1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9s
YWJlbHNbYnl0ZWNvZGVJbmRleCArIDMgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwotCi0gICAg
ICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQg
PSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUuZW5kKCk7ICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6Oml0ZXJhdG9yIGl0ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9m
ZnNldFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG9mZnNldCA9IGl0LT5zZWNvbmQuYnJhbmNoT2Zmc2V0OwotICAgICAgICAgICAgICAg
IGl0LT5zZWNvbmQuY3RpT2Zmc2V0ID0gb2Zmc2V0ID8gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhj
b2RlLCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBU
YWJsZS5zdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmb3IgKFZlY3RvcjxIYW5kbGVySW5mbz46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnMuYmVnaW4oKTsgaXRlciAhPSBtX2NvZGVC
bG9jay0+ZXhjZXB0aW9uSGFuZGxlcnMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgIGl0ZXItPm5h
dGl2ZUNvZGUgPSBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fbGFiZWxzW2l0ZXItPnRh
cmdldF0pOwotCi0gICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IGlmIChpdGVyLT50bykKLSAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBpdGVy
LT5mcm9tLCBpdGVyLT50byk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNz
VlBDTWFwLmFkZChfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIGl0ZXItPmZyb20pLCBpdGVy
LT5ieXRlY29kZUluZGV4KTsKLSAgICB9Ci0KLSAgICAvLyBMaW5rIGFic29sdXRlIGFkZHJlc3Nl
cyBmb3IganNyCi0gICAgZm9yIChWZWN0b3I8SlNSSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pz
clNpdGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qc3JTaXRlcy5lbmQoKTsgKytpdGVyKQotICAgICAg
ICBYODZBc3NlbWJsZXI6OmxpbmtBYnNvbHV0ZUFkZHJlc3MoY29kZSwgaXRlci0+YWRkclBvc2l0
aW9uLCBpdGVyLT50YXJnZXQpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29k
ZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uc1tpXTsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBYODZBc3Nl
bWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0
aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwotICAgICAgICBpbmZvLmhvdFBhdGhCZWdp
biA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX3Byb3BlcnR5QWNj
ZXNzQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7Ci0gICAgfQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZv
c1tpXTsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBYODZBc3NlbWJsZXI6Omdl
dFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5m
b1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwotICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IFg4
NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7Ci0gICAgICAgIGluZm8uaG90UGF0aE90
aGVyID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKLSAgICAgICAgaW5mby5j
b2xkUGF0aE90aGVyID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY29sZFBhdGhPdGhlcik7Ci0gICAg
fQotCi0gICAgbV9jb2RlQmxvY2stPmN0aUNvZGUgPSBjb2RlOwotfQotCi12b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hl
ZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICAvLyBDaGVjayBlYXggaXMgYW4g
b2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVk
aWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18g
am5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0cnVjdHVyZShYODY6OmVh
eCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZz
ZXQKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3Jh
Z2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICog
c2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyByZXQoKTsKLQot
ICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnBy
ZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKLSAgICAKLSAgICBtX2NvZGVCbG9j
ay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOwotICAgIAot
ICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOwot
fQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCB2b2lkKiByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSNpZiBVU0Uo
Q1RJX1JFUEFUQ0hfUElDKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9p
ZF9wcm90b19saXN0KSk7Ci0KLSAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5
IGV4aXN0cyAoaWYgdGhpcyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5n
IGEgU3RydWN0dXJlIHRoYXQgaXMKLSAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9i
amVjdCAtIGxldCdzIHNwZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5
ISkKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJv
cGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBfXyBt
b3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4
KTsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVy
ZS4KLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBz
dHJ1Y3R1cmUpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1
cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFk
ZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7Ci0gICAgX18gY21wbF9pMzJtKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVyZSksIHByb3RvdHlwZVN0
cnVjdHVyZUFkZHJlc3MpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7Ci0K
LSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAgX18gbW92bF9t
cihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOwot
Ci0gICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBl
eGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRv
IGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJv
dXRpbmUuCi0gICAgdm9pZCogc2xvd0Nhc2VCZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGluZm8uY2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VD
YWxsOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCBzbG93Q2Fz
ZUJlZ2luKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgc2xv
d0Nhc2VCZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3Qg
cGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3Qg
Zm9yIHVzLgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1h
cE9mZnNldDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdl
IGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBpbmZv
LnN0dWJSb3V0aW5lID0gY29kZTsKLQotICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0
byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0g
ICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZv
LmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0g
ICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsK
LSNlbHNlCi0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlm
IHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVy
ZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQn
cyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNP
YmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29r
dXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFn
ZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92bF9tcihzdGF0
aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7Ci0KLSAgICAv
LyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18g
dGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBm
YWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVj
a1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrIHRoZSBwcm90
b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBTdHJ1Y3R1cmUq
KiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUp
OwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihwcm90b3R5cGVT
dHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICBKbXBTcmMgZmFpbHVy
ZUNhc2VzMyA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVj
dE9mZnNldAotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwg
WDg2OjplZHgsIFg4Njo6ZWF4KTsKLQotICAgIF9fIHJldCgpOwotCi0gICAgdm9pZCogY29kZSA9
IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFp
bHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfcHJvdG9fZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWls
dXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dl
dF9ieV9pZF9wcm90b19mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1
cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0
X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLQotICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLSNlbmRpZgotfQotCi0jaWYgVVNFKENU
SV9SRVBBVENIX1BJQykKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdChT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCkKLXsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2Ug
PSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2Ojpl
YXgpOwotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2
OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAg
dm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0gICAgQVNTRVJUKGNvZGUpOwotCi0g
ICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2Fz
ZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgdm9pZCogbGFz
dFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmU7Ci0gICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKLSAgICAgICAgbGFzdFBy
b3RvQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsOwotCi0gICAgWDg2QXNz
ZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAgICAv
LyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2lu
dCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90
IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBh
dGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAgIFg4
NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihz
dWNjZXNzRGVzdCkpOwotCi0gICAgc3RydWN0dXJlLT5yZWYoKTsKLSAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FjaGVkT2Zmc2V0LCBjb2RlLCBzdHJ1
Y3R1cmUpOwotCi0gICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBi
YWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBpbnRwdHJfdCBq
bXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOwotICAgIFg4NkFz
c2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7Ci19Ci0KLXZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVj
dHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IHByb3RvdHlwZVN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCi17Ci0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMg
KGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVj
dHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBs
ZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAg
SlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JM
b29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3Rv
cmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92bF9tcihz
dGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7Ci0KLSAg
ICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAg
Sm1wU3JjIGZhaWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJl
KTsKLQotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBu
b3QgY2hhbmdlZC4KLSAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0g
Jihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVB
ZGRyZXNzKTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOwotCi0gICAgLy8g
Q2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIF9fIG1vdmxfbXIoY2FjaGVk
T2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKLQotICAgIEpt
cFNyYyBzdWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJs
ZUNvcHkoKTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRo
ZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgot
ICAgIHZvaWQqIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJy
ZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
ZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNz
IHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBl
cmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyBy
ZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkp
OwotCi0gICAgc3RydWN0dXJlLT5yZWYoKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmUtPnJlZigp
OwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FjaGVk
T2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7Ci0KLSAgICAvLyBG
aW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zm
c2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJh
bmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJ
bmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90
IGNvdW50LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAg
ICBBU1NFUlQoY291bnQpOwotICAgIAotICAgIFZlY3RvcjxKbXBTcmM+IGJ1Y2tldHNPZkZhaWw7
Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUu
Ci0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVj
dHVyZSkpOwotCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAg
IFJlZlB0cjxTdHJ1Y3R1cmU+KiBjaGFpbkVudHJpZXMgPSBjaGFpbi0+aGVhZCgpOwotICAgIEpT
T2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUg
PSBjaGFpbkVudHJpZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlw
ZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgICAgICBTdHJ1Y3R1cmUq
KiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUp
OwotICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY3VyclN0
cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOwotICAgICAgICBidWNrZXRzT2ZG
YWlsLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgfQotICAgIEFTU0VSVChwcm90b09iamVjdCk7Ci0K
LSAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0
LT5tX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihw
cm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKLSAgICBfXyBtb3ZsX21yKGNhY2hlZE9m
ZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgSm1wU3Jj
IHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29w
eSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZh
aWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAg
dm9pZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1
Y2tldHNPZkZhaWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2Rl
LCBidWNrZXRzT2ZGYWlsW2ldLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNz
IHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBl
cmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyBy
ZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkp
OwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2ls
bCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0cnVjdHVyZS0+cmVmKCk7Ci0gICAgY2hhaW4tPnJl
ZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2Fj
aGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIGNoYWluKTsKLQotICAgIC8vIEZpbmFsbHkgcmVw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0
PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlk
QnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQo
am1wTG9jYXRpb24sIGNvZGUpOwotfQotI2VuZGlmCi0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWlu
LCBzaXplX3QgY291bnQsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3Ms
IENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotI2lmIFVTRShDVElfUkVQQVRDSF9QSUMpCi0gICAg
U3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJu
QWRkcmVzcyk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9u
Y2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIGN0aVJl
cGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKLQotICAg
IEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNyYz4gYnVja2V0c09mRmFpbDsK
LQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4K
LSAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0
dXJlKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
UmVmUHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5oZWFkKCk7Ci0gICAgSlNP
YmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUt
PnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZSA9
IGNoYWluRW50cmllc1tpXS5nZXQoKTsKLQotICAgICAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBl
IG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCi0gICAgICAgIFN0cnVjdHVyZSoq
IHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7
Ci0gICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihjdXJyU3Ry
dWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7Ci0gICAgICAgIGJ1Y2tldHNPZkZh
aWwuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICB9Ci0gICAgQVNTRVJUKHByb3RvT2JqZWN0KTsKLQot
ICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3Qt
Pm1fcHJvcGVydHlTdG9yYWdlOwotICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHBy
b3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMg
c3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5
KCk7Ci0KLSAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFp
bHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICB2
b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5mby5jYWxsUmV0
dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVja2V0c09mRmFpbC5zaXplKCk7ICsraSkKLSAgICAg
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxbaV0sIHNsb3dDYXNlQmVn
aW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNv
ZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4K
LSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu
Zm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7
Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7Ci0KLSAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNy
ZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgaW5mby5zdHViUm91
dGluZSA9IGNvZGU7Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBj
YXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0
cl90IGptcExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRo
QmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOwotICAgIFg4NkFz
c2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7Ci0jZWxzZQot
ICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNyYz4gYnVja2V0c09mRmFp
bDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVy
ZS4KLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0g
ICAgYnVja2V0c09mRmFpbC5hcHBlbmQoX18gam5lKCkpOwotICAgIGJ1Y2tldHNPZkZhaWwuYXBw
ZW5kKGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpKTsKLQotICAgIFN0cnVjdHVy
ZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBSZWZQdHI8U3RydWN0dXJlPiogY2hh
aW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAw
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHBy
b3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNh
bGxGcmFtZSkpOwotICAgICAgICBjdXJyU3RydWN0dXJlID0gY2hhaW5FbnRyaWVzW2ldLmdldCgp
OwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhh
ZCBub3QgY2hhbmdlZC4KLSAgICAgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJlQWRk
cmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKLSAgICAgICAgX18gY21wbF9pMzJt
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1
Y3R1cmVBZGRyZXNzKTsKLSAgICAgICAgYnVja2V0c09mRmFpbC5hcHBlbmQoX18gam5lKCkpOwot
ICAgIH0KLSAgICBBU1NFUlQocHJvdG9PYmplY3QpOwotCi0gICAgUHJvcGVydHlTdG9yYWdlKiBw
cm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0g
ICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBY
ODY6OmVkeCk7Ci0gICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSop
LCBYODY6OmVkeCwgWDg2OjplYXgpOwotICAgIF9fIHJldCgpOwotCi0gICAgdm9pZCogY29kZSA9
IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVj
a2V0c09mRmFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUs
IGJ1Y2tldHNPZkZhaWxbaV0sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLQotICAgIG1fY29kZUJsb2NrLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICBjdGlSZXBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLSNlbmRpZgotfQotCi12
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkUmVwbGFjZShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICAvLyBD
aGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVz
dGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBmYWls
dXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0
cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIGNoZWNrcyBvdXQgb2theSEg
LSBwdXREaXJlY3RPZmZzZXQKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwg
bV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfcm0o
WDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4KTsKLSAg
ICBfXyByZXQoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotICAg
IAotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7Ci0gICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKLQotICAgIG1fY29k
ZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0g
ICAgCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29k
ZSk7Ci19Ci0KLWV4dGVybiAiQyIgewotCi0gICAgc3RhdGljIEpTT2JqZWN0KiByZXNpemVQcm9w
ZXJ0eVN0b3JhZ2UoSlNPYmplY3QqIGJhc2VPYmplY3QsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIGJhc2VPYmplY3QtPmFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlSW5saW5lKG9sZFNpemUsIG5ld1NpemUpOwotICAgICAgICByZXR1cm4gYmFzZU9iamVjdDsK
LSAgICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBib29sIHRyYW5zaXRpb25XaWxsTmVlZFN0b3Jh
Z2VSZWFsbG9jKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSkKLXsKLSAgICByZXR1cm4gb2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgp
ICE9IG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKTsKLX0KLQotdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVmVjdG9yPEptcFNy
YywgMTY+IGZhaWx1cmVDYXNlczsKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRo
ZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFz
aywgWDg2OjplYXgpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIF9f
IGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihvbGRTdHJ1Y3R1cmUpLCBGSUVM
RF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKLSAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBWZWN0b3I8Sm1wU3JjPiBzdWNjZXNzQ2FzZXM7Ci0K
LSAgICAvLyAgZWN4ID0gYmFzZU9iamVjdAotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpT
Q2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgIC8vIHByb3RvKGVj
eCkgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlKCkKLSAgICBfXyBjbXBsX2kz
Mm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVM
RF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKF9fIGpuZSgpKTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUs
IG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAKLSAgICAvLyBlY3ggPSBi
YXNlT2JqZWN0LT5tX3N0cnVjdHVyZQotICAgIGZvciAoUmVmUHRyPFN0cnVjdHVyZT4qIGl0ID0g
Y2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgIC8vIG51bGwgY2hlY2sgdGhlIHBy
b3RvdHlwZQotICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKGpzTnVsbCgpKSwgWDg2Ojpl
Y3gpOwotICAgICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKF9fIGplKCkpOwotCi0gICAgICAgIC8v
IENoZWNrIHRoZSBzdHJ1Y3R1cmUgaWQKLSAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KGl0LT5nZXQoKSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0
dXJlKSwgWDg2OjplY3gpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsK
LSAgICAgICAgCi0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgICAgICBfXyBjbXBsX2kzMm0oT2JqZWN0
VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQo
VHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChfXyBqbmUoKSk7Ci0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwg
bV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIH0KLQotICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdWNj
ZXNzQ2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIF9fIGxpbmsoc3VjY2Vzc0Nhc2VzW2ldLCBf
XyBsYWJlbCgpKTsKLQotICAgIEptcFNyYyBjYWxsVGFyZ2V0OwotCi0gICAgLy8gZW1pdCBhIGNh
bGwgb25seSBpZiBzdG9yYWdlIHJlYWxsb2MgaXMgbmVlZGVkCi0gICAgaWYgKHRyYW5zaXRpb25X
aWxsTmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSkgewotICAg
ICAgICBfXyBwdXNobF9yKFg4Njo6ZWR4KTsKLSAgICAgICAgX18gcHVzaGxfaTMyKG5ld1N0cnVj
dHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIF9fIHB1c2hsX2kzMihv
bGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAgICBfXyBwdXNo
bF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgY2FsbFRhcmdldCA9IF9fIGNhbGwoKTsKLSAgICAgICAg
X18gYWRkbF9pMzJyKDMgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7Ci0gICAgICAgIF9fIHBv
cGxfcihYODY6OmVkeCk7Ci0gICAgfQotCi0gICAgLy8gQXNzdW1lcyBtX3JlZkNvdW50IGNhbiBi
ZSBkZWNyZW1lbnRlZCBlYXNpbHksIHJlZmNvdW50IGRlY3JlbWVudCBpcyBzYWZlIGFzIAotICAg
IC8vIGNvZGVibG9jayBzaG91bGQgZW5zdXJlIG9sZFN0cnVjdHVyZS0+bV9yZWZDb3VudCA+IDAK
LSAgICBfXyBzdWJsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvbGRTdHJ1Y3R1cmUp
KTsKLSAgICBfXyBhZGRsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihuZXdTdHJ1Y3R1
cmUpKTsKLSAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4obmV3U3Ry
dWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0K
LSAgICAvLyB3cml0ZSB0aGUgdmFsdWUKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09i
amVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1v
dmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4
KTsKLQotICAgIF9fIHJldCgpOwotICAgIAotICAgIEptcFNyYyBmYWlsdXJlSnVtcDsKLSAgICBp
ZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZmFpbHVyZUNhc2VzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgX18gbGluayhmYWlsdXJl
Q2FzZXNbaV0sIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVu
Y2VGb3JUcmFtcG9saW5lKCk7Ci0gICAgICAgIGZhaWx1cmVKdW1wID0gX18gam1wKCk7Ci0gICAg
fQotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBpZiAoZmFp
bHVyZUNhc2VzLnNpemUoKSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1
cmVKdW1wLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9i
eV9pZF9mYWlsKSk7Ci0KLSAgICBpZiAodHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2Mo
b2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKQotICAgICAgICBYODZBc3NlbWJsZXI6Omxpbmso
Y29kZSwgY2FsbFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVzaXplUHJvcGVydHlT
dG9yYWdlKSk7Ci0gICAgCi0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpLnN0dWJSb3V0aW5lID0gY29kZTsKLSAgICAKLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKCkKLXsKLSAgICAvLyAoMSkgVGhlIGZpcnN0IGZ1bmN0
aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBhcnJheSBsZW5ndGgKLSAgICAK
LSAgICAvLyBDaGVjayBlYXggaXMgYW4gYXJyYXkKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFycmF5X2ZhaWx1cmVDYXNlczEg
PSBfXyBqbmUoKTsKLSAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
bV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgYXJy
YXlfZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAt
IGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLCBYODY6OmVheCwgWDg2
OjplYXgpOwotCi0gICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJbW1lZGlhdGVJbnQs
IFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgYXJyYXlfZmFpbHVyZUNhc2VzMyA9IF9fIGphKCk7Ci0K
LSAgICBfXyBhZGRsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18gYWRkbF9pOHIoMSwg
WDg2OjplYXgpOwotICAgIAotICAgIF9fIHJldCgpOwotCi0gICAgLy8gKDIpIFRoZSBzZWNvbmQg
ZnVuY3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIHN0cmluZyBsZW5ndGgK
LSAgICAKLSAgICBKbXBEc3Qgc3RyaW5nTGVuZ3RoQmVnaW4gPSBfXyBhbGlnbigxNik7Ci0KLSAg
ICAvLyBDaGVjayBlYXggaXMgYSBzdHJpbmcKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRl
OjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIHN0cmluZ19mYWlsdXJlQ2FzZXMxID0g
X18gam5lKCk7Ci0gICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1f
aW50ZXJwcmV0ZXItPm1fanNTdHJpbmdWcHRyKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBzdHJp
bmdfZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAt
IGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCi0gICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoSlNTdHJpbmcsIG1fdmFsdWUpICsgRklFTERfT0ZGU0VUKFVTdHJpbmcsIG1fcmVwKSwg
WDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChVU3RyaW5n
OjpSZXAsIGxlbiksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0KLSAgICBfXyBjbXBsX2kzMnIoSlNJ
bW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCwgWDg2OjplYXgpOwotICAgIEptcFNyYyBzdHJpbmdf
ZmFpbHVyZUNhc2VzMyA9IF9fIGphKCk7Ci0KLSAgICBfXyBhZGRsX3JyKFg4Njo6ZWF4LCBYODY6
OmVheCk7Ci0gICAgX18gYWRkbF9pOHIoMSwgWDg2OjplYXgpOwotICAgIAotICAgIF9fIHJldCgp
OwotCi0gICAgLy8gKDMpIFRyYW1wb2xpbmVzIGZvciB0aGUgc2xvdyBjYXNlcyBvZiBvcF9jYWxs
IC8gb3BfY2FsbF9ldmFsIC8gb3BfY29uc3RydWN0LgotICAgIAotICAgIEptcERzdCB2aXJ0dWFs
Q2FsbFByZUxpbmtCZWdpbiA9IF9fIGFsaWduKDE2KTsKLQotICAgIC8vIExvYWQgdGhlIGNhbGxl
ZSBDb2RlQmxvY2sqIGludG8gZWF4Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNGdW5j
dGlvbiwgbV9ib2R5KSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChGdW5jdGlvbkJvZHlOb2RlLCBtX2NvZGUpLCBYODY6OmVheCwgWDg2OjplYXgpOwot
ICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGhhc0NvZGVC
bG9jazEgPSBfXyBqbmUoKTsKLSAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIF9fIHJlc3Rv
cmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJ
X0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEpTRnVuY3Rpb24xID0gX18gY2FsbCgp
OwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwg
WDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoaGFzQ29k
ZUJsb2NrMSwgX18gbGFiZWwoKSk7Ci0KLSAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVzIGNh
bGxlZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29kZUJs
b2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBhcml0eUNoZWNrT2th
eTEgPSBfXyBqZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVieCwgNCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMTIpOwotICAgIF9f
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVk
aSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEFyaXR5Q2hlY2sxID0gX18g
Y2FsbCgpOwotICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWRpKTsKLSAgICBlbWl0R2V0
Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKLSAg
ICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyBsaW5rKGFyaXR5Q2hlY2tPa2F5MSwgX18g
bGFiZWwoKSk7Ci0KLSAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOwotCi0g
ICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsK
LSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0o
WDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxEb250TGF6eUxp
bmtDYWxsID0gX18gY2FsbCgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotCi0gICAgX18g
am1wX3IoWDg2OjplYXgpOwotCi0gICAgSm1wRHN0IHZpcnR1YWxDYWxsTGlua0JlZ2luID0gX18g
YWxpZ24oMTYpOwotCi0gICAgLy8gTG9hZCB0aGUgY2FsbGVlIENvZGVCbG9jayogaW50byBlYXgK
LSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBtX2JvZHkpLCBYODY6OmVj
eCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEZ1bmN0aW9uQm9keU5v
ZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18gdGVzdGxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgaGFzQ29kZUJsb2NrMiA9IF9fIGpuZSgpOwotICAg
IF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7
Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAg
IEptcFNyYyBjYWxsSlNGdW5jdGlvbjIgPSBfXyBjYWxsKCk7Ci0gICAgZW1pdEdldENUSUFyZygw
LCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7Ci0gICAgX18gcHVz
aGxfcihYODY6OmVieCk7Ci0gICAgX18gbGluayhoYXNDb2RlQmxvY2syLCBfXyBsYWJlbCgpKTsK
LQotICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVlIGFyaXR5LgotICAgIF9fIGNt
cGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG51bVBhcmFtZXRlcnMpLCBY
ODY6OmVheCk7Ci0gICAgSm1wU3JjIGFyaXR5Q2hlY2tPa2F5MiA9IF9fIGplKCk7Ci0gICAgX18g
cG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKLSAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUp
OwotICAgIEptcFNyYyBjYWxsQXJpdHlDaGVjazIgPSBfXyBjYWxsKCk7Ci0gICAgX18gbW92bF9y
cihYODY6OmVkeCwgWDg2OjplZGkpOwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwot
ICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngp
OwotICAgIF9fIGxpbmsoYXJpdHlDaGVja09rYXkyLCBfXyBsYWJlbCgpKTsKLQotICAgIGNvbXBp
bGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7Ci0KLSAgICBfXyBwb3BsX3IoWDg2OjplYngp
OwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwotICAgIF9fIHJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2Fs
bEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbExhenlMaW5rQ2FsbCA9IF9fIGNhbGwoKTsKLSAgICBf
XyBwdXNobF9yKFg4Njo6ZWJ4KTsKLQotICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLQotICAgIEpt
cERzdCB2aXJ0dWFsQ2FsbEJlZ2luID0gX18gYWxpZ24oMTYpOwotCi0gICAgLy8gTG9hZCB0aGUg
Y2FsbGVlIENvZGVCbG9jayogaW50byBlYXgKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U0Z1bmN0aW9uLCBtX2JvZHkpLCBYODY6OmVjeCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKEZ1bmN0aW9uQm9keU5vZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6OmVh
eCk7Ci0gICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgaGFz
Q29kZUJsb2NrMyA9IF9fIGpuZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgX18g
cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRp
LCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjMgPSBfXyBj
YWxsKCk7Ci0gICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENUSUFy
Zyg4LCBYODY6OmVkeCk7Ci0gICAgX18gcHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18gbGluayho
YXNDb2RlQmxvY2szLCBfXyBsYWJlbCgpKTsKLQotICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNo
ZXMgY2FsbGVlIGFyaXR5LgotICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChD
b2RlQmxvY2ssIG51bVBhcmFtZXRlcnMpLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFyaXR5Q2hl
Y2tPa2F5MyA9IF9fIGplKCk7Ci0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7Ci0g
ICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4
Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsQXJpdHlDaGVjazMg
PSBfXyBjYWxsKCk7Ci0gICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOwotICAgIGVt
aXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgp
OwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoYXJpdHlDaGVja09rYXkz
LCBfXyBsYWJlbCgpKTsKLQotICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7
Ci0KLSAgICAvLyBsb2FkIGN0aUNvZGUgZnJvbSB0aGUgbmV3IGNvZGVCbG9jay4KLSAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIGN0aUNvZGUpLCBYODY6OmVheCwgWDg2Ojpl
YXgpOwotCi0gICAgX18gam1wX3IoWDg2OjplYXgpOwotCi0gICAgLy8gQWxsIHRyYW1wb2xpbmVz
IGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBw
b2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhl
Y3V0YWJsZUNvcHkoKTsKLQotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBhcnJheV9mYWls
dXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dl
dF9ieV9pZF9hcnJheV9mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFycmF5
X2ZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
YXJyYXlfZmFpbHVyZUNhc2VzMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBzdHJpbmdfZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgc3RyaW5nX2ZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgWDg2QXNz
ZW1ibGVyOjpsaW5rKGNvZGUsIHN0cmluZ19mYWlsdXJlQ2FzZXMzLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsQXJpdHlDaGVjazEsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7Ci0gICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxBcml0eUNoZWNrMiwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKLSAgICBYODZBc3Nl
bWJsZXI6OmxpbmsoY29kZSwgY2FsbEFyaXR5Q2hlY2szLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOwotICAgIFg4NkFzc2VtYmxl
cjo6bGluayhjb2RlLCBjYWxsSlNGdW5jdGlvbjEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KElu
dGVycHJldGVyOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGNhbGxKU0Z1bmN0aW9uMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKLSAgICBYODZBc3NlbWJsZXI6Omxpbmso
Y29kZSwgY2FsbEpTRnVuY3Rpb24zLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRl
cjo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2Rl
LCBjYWxsRG9udExhenlMaW5rQ2FsbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0
ZXI6OmN0aV92bV9kb250TGF6eUxpbmtDYWxsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGNhbGxMYXp5TGlua0NhbGwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVy
OjpjdGlfdm1fbGF6eUxpbmtDYWxsKSk7Ci0KLSAgICBtX2ludGVycHJldGVyLT5tX2N0aUFycmF5
TGVuZ3RoVHJhbXBvbGluZSA9IGNvZGU7Ci0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlTdHJpbmdM
ZW5ndGhUcmFtcG9saW5lID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUs
IHN0cmluZ0xlbmd0aEJlZ2luKTsKLSAgICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxs
UHJlTGluayA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0dWFs
Q2FsbFByZUxpbmtCZWdpbik7Ci0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbExp
bmsgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgdmlydHVhbENhbGxM
aW5rQmVnaW4pOwotICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGwgPSBYODZBc3Nl
bWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgdmlydHVhbENhbGxCZWdpbik7Ci19Ci0K
LXZvaWQgSklUOjpmcmVlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEludGVycHJldGVyKiBpbnRlcnBy
ZXRlcikKLXsKLSAgICBXVEY6OmZhc3RGcmVlRXhlY3V0YWJsZShpbnRlcnByZXRlci0+bV9jdGlB
cnJheUxlbmd0aFRyYW1wb2xpbmUpOwotfQotCi12b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRP
ZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIGlu
Zm8gPSBjb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0
aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYy4KLSAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gSW50
ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0
aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7Ci0KLSAgICAvLyBSZXBhdGNoIHRoZSBvZmZz
ZXQgaW50byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0aGUg
U3RydWN0dXJlIHRvIGxvb2sgZm9yLgotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3BsYWNl
bWVudChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBh
dGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXplb2Yo
SlNWYWx1ZSopKTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5
SWRTdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOwotfQot
Ci12b2lkIEpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJl
c3MpCi17Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBjb2RlQmxvY2stPmdldFN0dWJJ
bmZvKHJldHVybkFkZHJlc3MpOwotICAgIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRj
aCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVy
aWMuCi0gICAgLy8gU2hvdWxkIHByb2JhYmx5IGdvIHRvIEludGVycHJldGVyOjpjdGlfb3BfcHV0
X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rpbmcgcmln
aHQgbm93LgotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2dl
bmVyaWMpKTsKLQotICAgIC8vIFJlcGF0Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkg
bWFwIHRvIGxvYWQgZnJvbSwgdGhlbiByZXBhdGNoIHRoZSBTdHJ1Y3R1cmUgdG8gbG9vayBmb3Iu
Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoRGlzcGxhY2VtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpOwotICAgIFg4NkFz
c2VtYmxlcjo6cmVwYXRjaEltbWVkaWF0ZShyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZv
LmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgodm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25jZSAt
IGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgY3RpUmVwYXRj
aENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwotCi0gICAgLy8g
Q2hlY2sgZWF4IGlzIGFuIGFycmF5Ci0gICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIpLCBYODY6OmVheCk7Ci0gICAg
Sm1wU3JjIGZhaWx1cmVDYXNlczEgPSBfXyBqbmUoKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2th
eSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgX18gbW92bF9tcihGSUVM
RF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSwgWDg2OjplY3gs
IFg4Njo6ZWN4KTsKLQotICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6bWF4SW1tZWRpYXRl
SW50LCBYODY6OmVjeCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBfXyBqYSgpOwotCi0g
ICAgX18gYWRkbF9ycihYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIF9fIGFkZGxfaThyKDEsIFg4
Njo6ZWN4KTsKLSAgICBfXyBtb3ZsX3JyKFg4Njo6ZWN4LCBYODY6OmVheCk7Ci0gICAgSm1wU3Jj
IHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29w
eSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZh
aWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAg
dm9pZCogc2xvd0Nhc2VCZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluZm8uY2FsbFJl
dHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsOwotICAgIFg4
NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCBzbG93Q2FzZUJlZ2luKTsKLSAg
ICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdpbik7
Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwg
YXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAg
IGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5o
b3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKLSAg
ICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRl
ZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBtX2NvZGVCbG9jay0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOwotCi0gICAgLy8gRmlu
YWxseSByZXBhdGNoIHRoZSBqdW1wIHRvIHNvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRv
IGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5
SWRCcmFuY2hUb1Nsb3dDYXNlOwotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNl
dChqbXBMb2NhdGlvbiwgY29kZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0VmFyaWFibGVPYmpl
Y3RSZWdpc3RlcihSZWdpc3RlcklEIHZhcmlhYmxlT2JqZWN0LCBpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgZHN0KQotewotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFibGVPYmplY3Qs
IGQpLCB2YXJpYWJsZU9iamVjdCwgZHN0KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U1ZhcmlhYmxlT2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0RGF0YSwgcmVnaXN0ZXJzKSwgZHN0LCBk
c3QpOwotICAgIF9fIG1vdmxfbXIoaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpLCBkc3QsIGRzdCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0VmFyaWFibGVPYmplY3RSZWdpc3RlcihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCB2YXJpYWJsZU9iamVjdCwgaW50IGluZGV4KQotewotICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFibGVPYmplY3QsIGQpLCB2YXJpYWJsZU9iamVjdCwg
dmFyaWFibGVPYmplY3QpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFibGVP
YmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhLCByZWdpc3RlcnMpLCB2YXJpYWJsZU9iamVjdCwg
dmFyaWFibGVPYmplY3QpOwotICAgIF9fIG1vdmxfcm0oc3JjLCBpbmRleCAqIHNpemVvZihSZWdp
c3RlciksIHZhcmlhYmxlT2JqZWN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDM4OTkwKQorKysgaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDQyICs0NCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgUExBVEZPUk0oTUFDKQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNTU0UyUHJlc2VudCgpCi17Ci0gICAgcmV0dXJuIHRydWU7
IC8vIEFsbCBYODYgTWFjcyBhcmUgZ3VhcmFudGVlZCB0byBzdXBwb3J0IGF0IGxlYXN0IFNTRTIK
LX0KLQotI2Vsc2UKLQotc3RhdGljIGJvb2wgaXNTU0UyUHJlc2VudCgpCi17Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBTU0UyRmVhdHVyZUJpdCA9IDEgPDwgMjY7Ci0gICAgc3RydWN0IFNTRTJDaGVj
ayB7Ci0gICAgICAgIFNTRTJDaGVjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmbGFn
czsKLSNpZiBDT01QSUxFUihNU1ZDKQotICAgICAgICAgICAgX2FzbSB7Ci0gICAgICAgICAgICAg
ICAgbW92IGVheCwgMSAvLyBjcHVpZCBmdW5jdGlvbiAxIGdpdmVzIHVzIHRoZSBzdGFuZGFyZCBm
ZWF0dXJlIHNldAotICAgICAgICAgICAgICAgIGNwdWlkOwotICAgICAgICAgICAgICAgIG1vdiBm
bGFncywgZWR4OwotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIGZsYWdzID0gMDsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgR0NDIGNvZGUgdG8gZG8gYWJvdmUgYXNtCi0jZW5k
aWYKLSAgICAgICAgICAgIHByZXNlbnQgPSAoZmxhZ3MgJiBTU0UyRmVhdHVyZUJpdCkgIT0gMDsK
LSAgICAgICAgfQotICAgICAgICBib29sIHByZXNlbnQ7Ci0gICAgfTsKLSAgICBzdGF0aWMgU1NF
MkNoZWNrIGNoZWNrOwotICAgIHJldHVybiBjaGVjay5wcmVzZW50OwotfQotCi0jZW5kaWYKLQog
Q09NUElMRV9BU1NFUlQoQ1RJX0FSR1NfY29kZSA9PSAweEMsIENUSV9BUkdTX2NvZGVfaXNfQyk7
CiBDT01QSUxFX0FTU0VSVChDVElfQVJHU19jYWxsRnJhbWUgPT0gMHhFLCBDVElfQVJHU19jYWxs
RnJhbWVfaXNfRSk7CiAKQEAgLTMxNiwyNDUgKzI4MCw2IEBACiAgICAga2lsbExhc3RSZXN1bHRS
ZWdpc3RlcigpOwogfQogCi0vKgotICBUaGlzIGlzIHJlcXVpcmVkIHNpbmNlIG51bWJlciByZXBy
ZXNlbnRhdGlvbiBpcyBjYW5vbmljYWwgLSB2YWx1ZXMgcmVwcmVzZW50YWJsZSBhcyBhIEpTSW1t
ZWRpYXRlIHNob3VsZCBub3QgYmUgc3RvcmVkIGluIGEgSlNOdW1iZXJDZWxsLgotICAKLSAgSW4g
dGhlIGNvbW1vbiBjYXNlLCB0aGUgZG91YmxlIHZhbHVlIGZyb20gJ3htbVNvdXJjZScgaXMgd3Jp
dHRlbiB0byB0aGUgcmV1c2FibGUgSlNOdW1iZXJDZWxsIHBvaW50ZWQgdG8gYnkgJ2pzTnVtYmVy
Q2VsbCcsIHRoZW4gJ2pzTnVtYmVyQ2VsbCcKLSAgaXMgd3JpdHRlbiB0byB0aGUgb3V0cHV0IFNG
IFJlZ2lzdGVyICdkc3QnLCBhbmQgdGhlbiBhIGp1bXAgaXMgcGxhbnRlZCAoc3RvcmVkIGludG8g
Kndyb3RlSlNOdW1iZXJDZWxsKS4KLSAgCi0gIEhvd2V2ZXIgaWYgdGhlIHZhbHVlIGZyb20geG1t
U291cmNlIGlzIHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZSwgdGhlbiB0aGUgSlNJbW1l
ZGlhdGUgdmFsdWUgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBvdXRwdXQsIGFuZCBmbG93Ci0gIGNv
bnRyb2wgd2lsbCBmYWxsIHRocm91Z2ggZnJvbSB0aGUgY29kZSBwbGFudGVkLgotKi8KLXZvaWQg
SklUOjpwdXREb3VibGVSZXN1bHRUb0pTTnVtYmVyQ2VsbE9ySlNJbW1lZGlhdGUoWDg2OjpYTU1S
ZWdpc3RlcklEIHhtbVNvdXJjZSwgWDg2OjpSZWdpc3RlcklEIGpzTnVtYmVyQ2VsbCwgdW5zaWdu
ZWQgZHN0LCBKbXBTcmMqIHdyb3RlSlNOdW1iZXJDZWxsLCAgWDg2OjpYTU1SZWdpc3RlcklEIHRl
bXBYbW0sIFg4Njo6UmVnaXN0ZXJJRCB0ZW1wUmVnMSwgWDg2OjpSZWdpc3RlcklEIHRlbXBSZWcy
KQotewotICAgIC8vIGNvbnZlcnQgKGRvdWJsZSAtPiBKU0ltbWVkaWF0ZSAtPiBkb3VibGUpLCBh
bmQgY2hlY2sgaWYgdGhlIHZhbHVlIGlzIHVuY2hhbmdlZCAtIGluIHdoaWNoIGNhc2UgdGhlIHZh
bHVlIGlzIHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZS4KLSAgICBfXyBjdnR0c2Qyc2lf
cnIoeG1tU291cmNlLCB0ZW1wUmVnMSk7Ci0gICAgX18gYWRkbF9ycih0ZW1wUmVnMSwgdGVtcFJl
ZzEpOwotICAgIF9fIHNhcmxfaThyKDEsIHRlbXBSZWcxKTsKLSAgICBfXyBjdnRzaTJzZF9ycih0
ZW1wUmVnMSwgdGVtcFhtbSk7Ci0gICAgLy8gQ29tcGFyZSAmIGJyYW5jaCBpZiBpbW1lZGlhdGUu
IAotICAgIF9fIHVjb21pc19ycih0ZW1wWG1tLCB4bW1Tb3VyY2UpOwotICAgIEptcFNyYyByZXN1
bHRJc0ltbSA9IF9fIGplKCk7Ci0gICAgSm1wRHN0IHJlc3VsdExvb2tlZExpa2VJbW1CdXRBY3R1
YWxseUlzbnQgPSBfXyBsYWJlbCgpOwotICAgIAotICAgIC8vIFN0b3JlIHRoZSByZXN1bHQgdG8g
dGhlIEpTTnVtYmVyQ2VsbCBhbmQganVtcC4KLSAgICBfXyBtb3ZzZF9ybSh4bW1Tb3VyY2UsIEZJ
RUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBqc051bWJlckNlbGwpOwotICAgIGlm
IChqc051bWJlckNlbGwgIT0gWDg2OjplYXgpCi0gICAgICAgIF9fIG1vdmxfcnIoanNOdW1iZXJD
ZWxsLCBYODY6OmVheCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICp3
cm90ZUpTTnVtYmVyQ2VsbCA9IF9fIGptcCgpOwotCi0gICAgX18gbGluayhyZXN1bHRJc0ltbSwg
X18gbGFiZWwoKSk7Ci0gICAgLy8gdmFsdWUgPT0gKGRvdWJsZSkoSlNJbW1lZGlhdGUpdmFsdWUu
Li4gb3IgYXQgbGVhc3QsIGl0IGxvb2tzIHRoYXQgd2F5Li4uCi0gICAgLy8gdWNvbWkgd2lsbCBy
ZXBvcnQgdGhhdCAoMCA9PSAtMCksIGFuZCB3aWxsIHJlcG9ydCB0cnVlIGlmIGVpdGhlciBpbnB1
dCBpbiBOYU4gKHJlc3VsdCBpcyB1bm9yZGVyZWQpLgotICAgIF9fIGxpbmsoX18ganAoKSwgcmVz
dWx0TG9va2VkTGlrZUltbUJ1dEFjdHVhbGx5SXNudCk7IC8vIEFjdHVhbGx5IHdhcyBhIE5hTgot
ICAgIF9fIHBleHRyd19pcnIoMywgeG1tU291cmNlLCB0ZW1wUmVnMik7Ci0gICAgX18gY21wbF9p
MzJyKDB4ODAwMCwgdGVtcFJlZzIpOwotICAgIF9fIGxpbmsoX18gamUoKSwgcmVzdWx0TG9va2Vk
TGlrZUltbUJ1dEFjdHVhbGx5SXNudCk7IC8vIEFjdHVhbGx5IHdhcyAtMAotICAgIC8vIFllcyBp
dCByZWFsbHkgcmVhbGx5IHJlYWxseSBpcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUu
Ci0gICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayh0ZW1wUmVnMSk7Ci0gICAgaWYgKHRl
bXBSZWcxICE9IFg4Njo6ZWF4KQotICAgICAgICBfXyBtb3ZsX3JyKHRlbXBSZWcxLCBYODY6OmVh
eCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6Y29t
cGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIHVuc2lnbmVkIGRzdCwgdW5zaWdu
ZWQgc3JjMSwgdW5zaWduZWQgc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzLCB1bnNpZ25lZCBpKQot
ewotICAgIFN0cnVjdHVyZSogbnVtYmVyU3RydWN0dXJlID0gbV9nbG9iYWxEYXRhLT5udW1iZXJT
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDE7Ci0gICAgSm1wU3Jj
IHdhc0pTTnVtYmVyQ2VsbDFiOwotICAgIEptcFNyYyB3YXNKU051bWJlckNlbGwyOwotICAgIEpt
cFNyYyB3YXNKU051bWJlckNlbGwyYjsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVkeCwgaSk7Ci0KLSAgICBpZiAodHlwZXMuc2Vjb25k
KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAgICAgICBBU1NFUlQodHlw
ZXMuc2Vjb25kKCkubWlnaHRCZU51bWJlcigpKTsKLQotICAgICAgICAvLyBDaGVjayBvcDIgaXMg
YSBudW1iZXIKLSAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUlu
dGVnZXIsIFg4Njo6ZWR4KTsKLSAgICAgICAgSm1wU3JjIG9wMmltbSA9IF9fIGpuZSgpOwotICAg
ICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplZHgsIGksIHNyYzIpOwotICAg
ICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG51bWJlclN0
cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplZHgpOwot
ICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICgxKSBJbiB0aGlzIGNhc2Ugc3JjMiBpcyBhIHJl
dXNhYmxlIG51bWJlciBjZWxsLgotICAgICAgICAvLyAgICAgU2xvdyBjYXNlIGlmIHNyYzEgaXMg
bm90IGEgbnVtYmVyIHR5cGUuCi0gICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRh
Z0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7Ci0gICAgICAgIEptcFNyYyBvcDFpbW0gPSBfXyBq
bmUoKTsKLSAgICAgICAgaWYgKCF0eXBlcy5maXJzdCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7
Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgsIGksIHNy
YzEpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2
OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18g
am5lKCksIGkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICgxYSkgaWYgd2UgZ2V0IGhlcmUs
IHNyYzEgaXMgYWxzbyBhIG51bWJlciBjZWxsCi0gICAgICAgIF9fIG1vdnNkX21yKEZJRUxEX09G
RlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVheCwgWDg2Ojp4bW0wKTsKLSAgICAg
ICAgSm1wU3JjIGxvYWRlZERvdWJsZSA9IF9fIGptcCgpOwotICAgICAgICAvLyAoMWIpIGlmIHdl
IGdldCBoZXJlLCBzcmMxIGlzIGFuIGltbWVkaWF0ZQotICAgICAgICBfXyBsaW5rKG9wMWltbSwg
X18gbGFiZWwoKSk7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVheCk7Ci0g
ICAgICAgIF9fIGN2dHNpMnNkX3JyKFg4Njo6ZWF4LCBYODY6OnhtbTApOwotICAgICAgICAvLyAo
MWMpIAotICAgICAgICBfXyBsaW5rKGxvYWRlZERvdWJsZSwgX18gbGFiZWwoKSk7Ci0gICAgICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpCi0gICAgICAgICAgICBfXyBhZGRzZF9tcihGSUVMRF9P
RkZTRVQoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplZHgsIFg4Njo6eG1tMCk7Ci0gICAg
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKLSAgICAgICAgICAgIF9fIHN1YnNkX21y
KEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0w
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVs
KTsKLSAgICAgICAgICAgIF9fIG11bHNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1f
dmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0wKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1dERv
dWJsZVJlc3VsdFRvSlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OnhtbTAsIFg4Njo6ZWR4
LCBkc3QsICZ3YXNKU051bWJlckNlbGwyLCBYODY6OnhtbTEsIFg4Njo6ZWN4LCBYODY6OmVheCk7
Ci0gICAgICAgIHdhc0pTTnVtYmVyQ2VsbDJiID0gX18gam1wKCk7Ci0KLSAgICAgICAgLy8gKDIp
IFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBzcmMyIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCi0g
ICAgICAgIC8vICAgICBUd28gc2xvdyBjYXNlcyAtIGVpdGhlciBzcmMxIGlzbid0IGFuIGltbWVk
aWF0ZSwgb3IgdGhlIHN1YnRyYWN0IG92ZXJmbG93cy4KLSAgICAgICAgX18gbGluayhvcDJpbW0s
IF9fIGxhYmVsKCkpOwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2Ojpl
YXgsIGkpOwotICAgIH0gZWxzZSBpZiAodHlwZXMuZmlyc3QoKS5pc1JldXNhYmxlKCkgJiYgaXNT
U0UyUHJlc2VudCgpKSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1i
ZXIoKSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgb3AxIGlzIGEgbnVtYmVyCi0gICAgICAgIF9fIHRl
c3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7Ci0gICAg
ICAgIEptcFNyYyBvcDFpbW0gPSBfXyBqbmUoKTsKLSAgICAgICAgaWYgKCF0eXBlcy5maXJzdCgp
LmRlZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoWDg2OjplYXgsIGksIHNyYzEpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChK
U0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vICgxKSBJbiB0aGlzIGNhc2Ugc3JjMSBpcyBhIHJldXNhYmxlIG51bWJlciBjZWxsLgotICAg
ICAgICAvLyAgICAgU2xvdyBjYXNlIGlmIHNyYzIgaXMgbm90IGEgbnVtYmVyIHR5cGUuCi0gICAg
ICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVk
eCk7Ci0gICAgICAgIEptcFNyYyBvcDJpbW0gPSBfXyBqbmUoKTsKLSAgICAgICAgaWYgKCF0eXBl
cy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWR4LCBpLCBzcmMyKTsKLSAgICAgICAgICAgIF9fIGNt
cGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihudW1iZXJTdHJ1Y3R1cmUpLCBGSUVM
RF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyAoMWEpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFsc28gYSBudW1iZXIg
Y2VsbAotICAgICAgICBfXyBtb3ZzZF9tcihGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxsLCBtX3Zh
bHVlKSwgWDg2OjplZHgsIFg4Njo6eG1tMSk7Ci0gICAgICAgIEptcFNyYyBsb2FkZWREb3VibGUg
PSBfXyBqbXAoKTsKLSAgICAgICAgLy8gKDFiKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMiBpcyBhbiBp
bW1lZGlhdGUKLSAgICAgICAgX18gbGluayhvcDJpbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICBl
bWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAgICBfXyBjdnRzaTJzZF9ycihY
ODY6OmVkeCwgWDg2Ojp4bW0xKTsKLSAgICAgICAgLy8gKDFjKSAKLSAgICAgICAgX18gbGluayhs
b2FkZWREb3VibGUsIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyBtb3ZzZF9tcihGSUVMRF9PRkZT
RVQoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplYXgsIFg4Njo6eG1tMCk7Ci0gICAgICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpCi0gICAgICAgICAgICBfXyBhZGRzZF9ycihYODY6Onht
bTEsIFg4Njo6eG1tMCk7Ci0gICAgICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKLSAg
ICAgICAgICAgIF9fIHN1YnNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0wKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKLSAgICAgICAgICAg
IF9fIG11bHNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0wKTsKLSAgICAgICAgfQotICAgICAgICBf
XyBtb3ZzZF9ybShYODY6OnhtbTAsIEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUp
LCBYODY6OmVheCk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAg
ICAgICBwdXREb3VibGVSZXN1bHRUb0pTTnVtYmVyQ2VsbE9ySlNJbW1lZGlhdGUoWDg2Ojp4bW0w
LCBYODY6OmVheCwgZHN0LCAmd2FzSlNOdW1iZXJDZWxsMSwgWDg2Ojp4bW0xLCBYODY6OmVjeCwg
WDg2OjplZHgpOwotICAgICAgICB3YXNKU051bWJlckNlbGwxYiA9IF9fIGptcCgpOwotCi0gICAg
ICAgIC8vICgyKSBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgc3JjMSBpcyBhbiBpbW1lZGlhdGUg
bnVtYmVyLgotICAgICAgICAvLyAgICAgVHdvIHNsb3cgY2FzZXMgLSBlaXRoZXIgc3JjMiBpc24n
dCBhbiBpbW1lZGlhdGUsIG9yIHRoZSBzdWJ0cmFjdCBvdmVyZmxvd3MuCi0gICAgICAgIF9fIGxp
bmsob3AxaW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWR4LCBpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIGkpOwotCi0gICAgaWYgKG9wY29kZUlEID09
IG9wX2FkZCkgewotICAgICAgICBlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUoWDg2OjplYXgp
OwotICAgICAgICBfXyBhZGRsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICB9IGVsc2UgIGlm
IChvcGNvZGVJRCA9PSBvcF9zdWIpIHsKLSAgICAgICAgX18gc3VibF9ycihYODY6OmVkeCwgWDg2
OjplYXgpOwotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygp
LCBpKSk7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX211bCk7Ci0gICAgICAg
IC8vIGNvbnZlcnQgZWF4ICYgZWR4IGZyb20gSlNJbW1lZGlhdGVzIHRvIGludHMsIGFuZCBjaGVj
ayBpZiBlaXRoZXIgYXJlIHplcm8KLSAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6
ZWR4KTsKLSAgICAgICAgSm1wU3JjIG9wMVplcm8gPSBlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlh
dGVKdW1wSWZaZXJvKFg4Njo6ZWF4KTsKLSAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplZHgsIFg4
Njo6ZWR4KTsKLSAgICAgICAgSm1wU3JjIG9wMk5vblplcm8gPSBfXyBqbmUoKTsKLSAgICAgICAg
X18gbGluayhvcDFaZXJvLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgLy8gaWYgZWl0aGVyIGlucHV0
IGlzIHplcm8sIGFkZCB0aGUgdHdvIHRvZ2V0aGVyLCBhbmQgY2hlY2sgaWYgdGhlIHJlc3VsdCBp
cyA8IDAuCi0gICAgICAgIC8vIElmIGl0IGlzLCB3ZSBoYXZlIGEgcHJvYmxlbSAoTiA8IDApLCAo
TiAqIDApID09IC0wLCBub3QgcmVwcmVzZW50YXRibGUgYXMgYSBKU0ltbWVkaWF0ZS4gCi0gICAg
ICAgIF9fIG1vdmxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgX18gYWRkbF9ycihY
ODY6OmVkeCwgWDg2OjplY3gpOwotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShfXyBqcygpLCBpKSk7Ci0gICAgICAgIC8vIFNraXAgdGhlIGFib3ZlIGNoZWNrIGlmIG5l
aXRoZXIgaW5wdXQgaXMgemVybwotICAgICAgICBfXyBsaW5rKG9wMk5vblplcm8sIF9fIGxhYmVs
KCkpOwotICAgICAgICBfXyBpbXVsbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAgIGVt
aXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgfQotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxl
KCkgJiYgaXNTU0UyUHJlc2VudCgpKSB7Ci0gICAgICAgIF9fIGxpbmsod2FzSlNOdW1iZXJDZWxs
MiwgX18gbGFiZWwoKSk7Ci0gICAgICAgIF9fIGxpbmsod2FzSlNOdW1iZXJDZWxsMmIsIF9fIGxh
YmVsKCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAm
JiBpc1NTRTJQcmVzZW50KCkpIHsKLSAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwxLCBf
XyBsYWJlbCgpKTsKLSAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwxYiwgX18gbGFiZWwo
KSk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShP
cGNvZGVJRCBvcGNvZGVJRCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
dW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyLCBPcGVyYW5kVHlwZXMg
dHlwZXMsIHVuc2lnbmVkIGkpCi17Ci0gICAgSm1wRHN0IGhlcmUgPSBfXyBsYWJlbCgpOwotICAg
IF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgaWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1
c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKLSAgICAgICAgaWYgKCF0eXBlcy5maXJzdCgp
LmRlZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZO
b3RKU0NlbGwoKytpdGVyLCBzcmMxKSkKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAg
ICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIGhlcmUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
dHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChs
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzIpKQotICAgICAgICAgICAgICAgICsr
aXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7Ci0gICAgfSBlbHNlIGlmICh0
eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKLSAgICAgICAg
aWYgKCF0eXBlcy5maXJzdCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBp
ZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoKytpdGVyLCBzcmMxKSkKLSAgICAgICAgICAgICAg
ICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIGhlcmUpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsK
LSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzIpKQot
ICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwg
aGVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIGhlcmUpOwotCi0g
ICAgLy8gYWRkaXRpb25hbCBlbnRyeSBwb2ludCB0byBoYW5kbGUgLTAgY2FzZXMuCi0gICAgaWYg
KG9wY29kZUlEID09IG9wX211bCkKLSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVy
ZSk7Ci0KLSAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBYODY6
OmVjeCk7Ci0gICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2
OjplY3gpOwotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpCi0gICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfYWRkKTsKLSAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9zdWIpCi0gICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3ViKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX211bCk7Ci0gICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbXVsKTsKLSAgICB9Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiB7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucy5iZWdpbigpOwpAQCAtNjk2LDYyICs0MjEsMTIgQEAKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAg
ICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJl
LCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgICAgICAg
ICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byBy
ZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgICAgICAg
ICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBz
YW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgICAgICAgICAgaW50IGJhc2VWUmVnID0gaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2VWUmVnLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
WDg2OjplZHgsIGkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNv
ZGVJbmRleCA9PSBpKTsKLQotICAgICAgICAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBl
aXRoZXIgdGhlIGJhc2Ugb2JqZWN0IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVy
ZSBkb2VzIG5vdCBtYXRjaC4KLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChYODY6OmVheCwgaSwgYmFzZVZSZWcpOwotCi0gICAgICAgICAgICBKbXBEc3QgaG90UGF0aEJl
Z2luID0gX18gbGFiZWwoKTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlv
bkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ob3RQYXRoQmVnaW4gPSBob3RQ
YXRoQmVnaW47Ci0gICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsK
LQotICAgICAgICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBpbnN0
cnVjdGlvbiBwbGFudHMgYSAzMmJpdCBpbW1lZGlhdGUsIGluIG9yZGVyIHRoYXQgaXQgY2FuIGJl
IHBhdGNoZWQgb3Zlci4KLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJZERl
ZmF1bHRTdHJ1Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdl
ZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0UHV0QnlJ
ZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBQbGFudCBhIGxvYWQgZnJvbSBhIGJv
Z3VzIG9mc2V0IGluIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBtYXA7IHdlIHdpbGwgcGF0Y2ggdGhp
cyBsYXRlciwgaWYgaXQgaXMgdG8gYmUgdXNlZC4KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCByZXBhdGNoR2V0QnlJZERlZmF1
bHRPZmZzZXQsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6Omdl
dERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVw
YXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7Ci0KKyAgICAgICAgICAgIGNvbXBp
bGVQdXRCeUlkSG90UGF0aChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSksIGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQsIGksIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsr
KTsKICAgICAgICAgICAgIGkgKz0gODsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7Ci0gICAgICAgICAgICAvLyBBcyBmb3IgcHV0X2J5
X2lkLCBnZXRfYnlfaWQgcmVxdWlyZXMgdGhlIG9mZnNldCBvZiB0aGUgU3RydWN0dXJlIGFuZCB0
aGUgb2Zmc2V0IG9mIHRoZSBhY2Nlc3MgdG8gYmUgcmVwYXRjaGVkLgotICAgICAgICAgICAgLy8g
QWRkaXRpb25hbGx5LCBmb3IgZ2V0X2J5X2lkIHdlIG5lZWQgcmVwYXRjaCB0aGUgb2Zmc2V0IG9m
IHRoZSBicmFuY2ggdG8gdGhlIHNsb3cgY2FzZSAod2UgcmVwYXRjaCB0aGlzIHRvIGp1bXAKLSAg
ICAgICAgICAgIC8vIHRvIGFycmF5LWxlbmd0aCAvIHByb3RvdHlwZSBhY2Nlc3MgdHJhbnBvbGlu
ZXMsIGFuZCBmaW5hbGx5IHdlIGFsc28gdGhlIHRoZSBwcm9wZXJ0eS1tYXAgYWNjZXNzIG9mZnNl
dCBhcyBhIGxhYmVsCi0gICAgICAgICAgICAvLyB0byBqdW1wIGJhY2sgdG8gaWYgb25lIG9mIHRo
ZXNlIHRyYW1wb2xpZXMgZmluZHMgYSBtYXRjaC4KLQotICAgICAgICAgICAgaW50IGJhc2VWUmVn
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7Ci0KLSAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZSZWcpOwotCi0gICAgICAg
ICAgICBKbXBEc3QgaG90UGF0aEJlZ2luID0gX18gbGFiZWwoKTsKLSAgICAgICAgICAgIG1fcHJv
cGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
XS5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW47Ci0gICAgICAgICAgICArK3Byb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25JbmRleDsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlcGF0Y2hH
ZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJl
bmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZz
ZXRHZXRCeUlkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVy
OjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09
IHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7Ci0KLSAgICAgICAgICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6
ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKHJlcGF0Y2hHZXRCeUlkRGVm
YXVsdE9mZnNldCwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEFTU0VSVChYODZB
c3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFi
ZWwoKSkgPT0gcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OwotCisgICAgICAgICAgICBjb21waWxlR2V0QnlJZEhvdFBhdGgoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pLCBpLCBwcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uSW5kZXgrKyk7CiAgICAgICAgICAgICBpICs9IDg7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMTk4Miw1MCArMTY1NywxMiBAQAogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAg
ICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKSkKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5r
KGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVh
eCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA4KTsKLSAgICAgICAg
ICAgIEptcFNyYyBjYWxsID0gZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRf
YnlfaWQpOwotCi0gICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7
IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICAg
ICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwotICAgICAg
ICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgICAgICArK3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKLQorICAgICAgICAgICAgY29tcGlsZVB1dEJ5
SWRTbG93Q2FzZShpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSksIGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIGksIGl0ZXIsIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsr
KTsKICAgICAgICAgICAgIGkgKz0gODsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7Ci0gICAgICAgICAgICAvLyBBcyBmb3IgdGhlIGhv
dCBwYXRoIG9mIGdldF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiB1c2UgYW4g
YXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9mZnNldAotICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBv
bmx5IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0
cmFjayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyBvZiB0aGUgY2Fs
bCAod2hpY2ggd2UgY2FuIHVzZSB0byBsb29rIHVwIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uKSwg
YnV0IHNob3VsZCBhIGFycmF5LWxlbmd0aCBvcgotICAgICAgICAgICAgLy8gcHJvdG90eXBlIGFj
Y2VzcyB0cmFtcG9saW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBU
byBkbyBzbyB3ZSBjYW4gc3VidHJhY3QgYmFjawotICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNl
IGZyb20gdGhlIGNhbGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2FzZS4KLQotICAgICAgICAg
ICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQpKQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmso
aXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBK
bXBEc3QgY29sZFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7Ci0jZW5kaWYgICAgICAgIAotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAgICAgSm1wU3JjIGNhbGwgPSBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhjb2xkUGF0
aEJlZ2luLCBjYWxsKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOwotCi0gICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRo
aXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICAgICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwotICAgICAgICAg
ICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgICAgICArK3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKLQorICAgICAgICAgICAgY29tcGlsZUdldEJ5SWRT
bG93Q2FzZShpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kXSksIGksIGl0ZXIsIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrKTsK
ICAgICAgICAgICAgIGkgKz0gODsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0y
NDQ5LDQ0MCArMjA4Niw2IEBACiAgICAgbV9jb2RlQmxvY2stPmN0aUNvZGUgPSBjb2RlOwogfQog
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICAvLyBD
aGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVz
dGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBmYWls
dXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0
cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEg
LSBnZXREaXJlY3RPZmZzZXQKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwg
bV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIo
Y2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAg
ICBfXyByZXQoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0g
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKLSAgICAK
LSAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUg
PSBjb2RlOwotICAgIAotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFk
ZHJlc3MsIGNvZGUpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8o
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBzaXpl
X3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSNpZiBVU0UoQ1RJX1JFUEFUQ0hfUElDKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBp
bmZvID0gbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRv
IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6
Y3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7Ci0KLSAgICAvLyBUaGUgcHJvdG90eXBlIG9i
amVjdCBkZWZpbml0ZWx5IGV4aXN0cyAoaWYgdGhpcyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2Nr
IGlzIHJlZmVyZW5jaW5nIGEgU3RydWN0dXJlIHRoYXQgaXMKLSAgICAvLyByZWZlcmVuY2luZyB0
aGUgcHJvdG90eXBlIG9iamVjdCAtIGxldCdzIHNwZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxl
IG5pY2UgYW5kIGVhcmx5ISkKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChz
dHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICBQcm9wZXJ0eVN0
b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3Rv
cmFnZTsKLSAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3Rv
cmFnZSksIFg4Njo6ZWR4KTsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhl
IHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0
dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBv
YmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgIFN0cnVjdHVyZSoqIHByb3Rv
dHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7Ci0gICAg
X18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVy
ZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMy
ID0gX18gam5lKCk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0
Ci0gICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVk
eCwgWDg2OjplYXgpOwotCi0gICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZv
aWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNo
IGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2lu
YWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgdm9pZCogc2xvd0Nhc2VCZWdpbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGluZm8uY2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRH
ZXRCeUlkU2xvd0Nhc2VDYWxsOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJl
Q2FzZXMxLCBzbG93Q2FzZUJlZ2luKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFp
bHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBi
YWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhl
IHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdl
dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3Vj
Y2VzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIC8vIFRy
YWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBs
YXRlci4KLSAgICBpbmZvLnN0dWJSb3V0aW5lID0gY29kZTsKLQotICAgIC8vIEZpbmFsbHkgcmVw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0
PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5j
aFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExv
Y2F0aW9uLCBjb2RlKTsKLSNlbHNlCi0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5p
dGVseSBleGlzdHMgKGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVu
Y2luZyBhIFN0cnVjdHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlw
ZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBl
YXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBwcm90
b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAg
X18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6
OmVkeCk7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1
Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgp
OwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1
cmVDYXNlczIgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8v
IENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4K
LSAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVj
dC0+bV9zdHJ1Y3R1cmUpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAg
ICBKbXBTcmMgZmFpbHVyZUNhc2VzMyA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBv
a2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6
ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKLQotICAgIF9fIHJldCgpOwotCi0g
ICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnBy
ZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLQotICAgIG1fY29kZUJsb2NrLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICBjdGlS
ZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLSNlbmRpZgot
fQotCi0jaWYgVVNFKENUSV9SRVBBVENIX1BJQykKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRTZWxmTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCkKLXsKLSAgICBKbXBT
cmMgZmFpbHVyZUNhc2UgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLSAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBY
ODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9m
KEpTVmFsdWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgc3VjY2VzcyA9IF9f
IGptcCgpOwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0gICAgQVNT
RVJUKGNvZGUpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
Ci0gICAgdm9pZCogbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Ci0gICAgaWYgKCFsYXN0UHJvdG9CZWdpbikK
LSAgICAgICAgbGFzdFByb3RvQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdHViSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxs
OwotCi0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlLCBsYXN0UHJvdG9C
ZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2gg
Y29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVz
LgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
c3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFw
T2Zmc2V0OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOwotCi0gICAgc3RydWN0dXJlLT5yZWYoKTsKLSAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FjaGVkT2Zm
c2V0LCBjb2RlLCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
LSAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dD
YXNlOwotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwg
Y29kZSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVm
aW5pdGVseSBleGlzdHMgKGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZl
cmVuY2luZyBhIFN0cnVjdHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3Rv
dHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFu
ZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBw
cm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0g
ICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBY
ODY6OmVkeCk7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBT
dHJ1Y3R1cmUuCi0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShYODY6
OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3Mg
U3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1
Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOwotICAgIF9fIGNtcGxf
aTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90
b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGpu
ZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIF9f
IG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6
ZWF4KTsKLQotICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBjb2Rl
ID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1h
dGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cg
Y2FzZSByb3V0aW5lLgotICAgIHZvaWQqIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKLSAgICBYODZBc3NlbWJs
ZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwotICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0
cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhv
dFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihzdWNjZXNzRGVzdCkpOwotCi0gICAgc3RydWN0dXJlLT5yZWYoKTsKLSAgICBwcm90b3R5cGVT
dHJ1Y3R1cmUtPnJlZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudElu
ZGV4XS5zZXQoY2FjaGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVy
ZSk7Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExv
Y2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdp
bikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1i
bGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKLX0KLQotdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJl
cywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKLXsKLSAgICBBU1NFUlQoY291bnQpOwotICAgIAotICAgIFZlY3RvcjxKbXBTcmM+
IGJ1Y2tldHNPZkZhaWw7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSBy
aWdodCBTdHJ1Y3R1cmUuCi0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUo
WDg2OjplYXgsIHN0cnVjdHVyZSkpOwotCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0g
c3RydWN0dXJlOwotICAgIFJlZlB0cjxTdHJ1Y3R1cmU+KiBjaGFpbkVudHJpZXMgPSBjaGFpbi0+
aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVj
dChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAg
IGN1cnJTdHJ1Y3R1cmUgPSBjaGFpbkVudHJpZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgLy8gQ2hl
Y2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAg
ICAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVj
dC0+bV9zdHJ1Y3R1cmUpOwotICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oY3VyclN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOwotICAg
ICAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgfQotICAgIEFTU0VSVChw
cm90b09iamVjdCk7Ci0KLSAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdl
ID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBfXyBtb3ZsX21yKHN0YXRp
Y19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKLSAgICBfXyBt
b3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVh
eCk7Ci0gICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBf
XyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9u
IHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNl
IHJvdXRpbmUuCi0gICAgdm9pZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1Y2tldHNPZkZhaWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBidWNrZXRzT2ZGYWlsW2ldLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0
cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhv
dFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAg
IFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihzdWNjZXNzRGVzdCkpOwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0cnVjdHVyZS0+cmVmKCk7
Ci0gICAgY2hhaW4tPnJlZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4XS5zZXQoY2FjaGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIGNoYWluKTsKLQotICAg
IC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0
Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOwotfQotI2VuZGlmCi0KLXZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQq
IHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotI2lmIFVTRShDVElfUkVQ
QVRDSF9QSUMpCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0
Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljLgotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3QpKTsKLQotICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNyYz4g
YnVja2V0c09mRmFpbDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJp
Z2h0IFN0cnVjdHVyZS4KLSAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShY
ODY6OmVheCwgc3RydWN0dXJlKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7Ci0gICAgUmVmUHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5o
ZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0
KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAg
Y3VyclN0cnVjdHVyZSA9IGNoYWluRW50cmllc1tpXS5nZXQoKTsKLQotICAgICAgICAvLyBDaGVj
ayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCi0gICAg
ICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0
LT5tX3N0cnVjdHVyZSk7Ci0gICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVp
bnQzMl90PihjdXJyU3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7Ci0gICAg
ICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICB9Ci0gICAgQVNTRVJUKHBy
b3RvT2JqZWN0KTsKLQotICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2Ug
PSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOwotICAgIF9fIG1vdmxfbXIoc3RhdGlj
X2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwotICAgIF9fIG1v
dmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4
KTsKLSAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAgdm9pZCogY29kZSA9IF9f
IGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KLSAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGw7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVja2V0c09mRmFpbC5zaXpl
KCk7ICsraSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxb
aV0sIHNsb3dDYXNlQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KLSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJv
cGVydHlNYXBPZmZzZXQ7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7Ci0KLSAgICAvLyBUcmFjayB0aGUg
c3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0g
ICAgaW5mby5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgotICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dD
YXNlOwotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwg
Y29kZSk7Ci0jZWxzZQotICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNy
Yz4gYnVja2V0c09mRmFpbDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhl
IHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNr
LCBYODY6OmVheCk7Ci0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoX18gam5lKCkpOwotICAgIGJ1
Y2tldHNPZkZhaWwuYXBwZW5kKGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpKTsK
LQotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBSZWZQdHI8
U3RydWN0dXJlPiogY2hhaW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKLSAgICBKU09iamVjdCog
cHJvdG9PYmplY3QgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90
eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICBjdXJyU3RydWN0dXJlID0gY2hhaW5F
bnRyaWVzW2ldLmdldCgpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0
J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICAgICAgU3RydWN0dXJlKiogcHJvdG90
eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKLSAgICAg
ICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1Y3R1cmUp
LCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICAgICAgYnVja2V0c09mRmFpbC5hcHBl
bmQoX18gam5lKCkpOwotICAgIH0KLSAgICBBU1NFUlQocHJvdG9PYmplY3QpOwotCi0gICAgUHJv
cGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9w
ZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9w
ZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7Ci0gICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBz
aXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOwotICAgIF9fIHJldCgpOwotCi0g
ICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnVja2V0c09mRmFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxbaV0sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLQotICAgIG1fY29k
ZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0K
LSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsK
LSNlbmRpZgotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkUmVwbGFjZShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVz
cykKLXsKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1
cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwot
ICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVD
YXNlczIgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIGNo
ZWNrcyBvdXQgb2theSEgLSBwdXREaXJlY3RPZmZzZXQKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwot
ICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiks
IFg4Njo6ZWF4KTsKLSAgICBfXyByZXQoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRh
YmxlQ29weSgpOwotICAgIAotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2Fz
ZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9p
ZF9mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwp
KTsKLQotICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91
dGluZSA9IGNvZGU7Ci0gICAgCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0
dXJuQWRkcmVzcywgY29kZSk7Ci19Ci0KLWV4dGVybiAiQyIgewotCi0gICAgc3RhdGljIEpTT2Jq
ZWN0KiByZXNpemVQcm9wZXJ0eVN0b3JhZ2UoSlNPYmplY3QqIGJhc2VPYmplY3QsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIGJhc2VPYmplY3QtPmFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlSW5saW5lKG9sZFNpemUsIG5ld1NpemUpOwotICAgICAgICByZXR1
cm4gYmFzZU9iamVjdDsKLSAgICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBib29sIHRyYW5zaXRp
b25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSkKLXsKLSAgICByZXR1cm4gb2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0
b3JhZ2VDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHko
KTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBzaXplX3QgY2FjaGVk
T2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0g
ICAgVmVjdG9yPEptcFNyYywgMTY+IGZhaWx1cmVDYXNlczsKLSAgICAvLyBDaGVjayBlYXggaXMg
YW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18g
am5lKCkpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihvbGRT
dHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsK
LSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBWZWN0b3I8Sm1wU3JjPiBz
dWNjZXNzQ2FzZXM7Ci0KLSAgICAvLyAgZWN4ID0gYmFzZU9iamVjdAotICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgIC8vIHByb3RvKGVjeCkgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlKCkK
LSAgICBfXyBjbXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90
eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChTdHJ1Y3R1cmUsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAK
LSAgICAvLyBlY3ggPSBiYXNlT2JqZWN0LT5tX3N0cnVjdHVyZQotICAgIGZvciAoUmVmUHRyPFN0
cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgIC8vIG51
bGwgY2hlY2sgdGhlIHByb3RvdHlwZQotICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKGpz
TnVsbCgpKSwgWDg2OjplY3gpOwotICAgICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKF9fIGplKCkp
OwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUgaWQKLSAgICAgICAgX18gY21wbF9p
MzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGl0LT5nZXQoKSksIEZJRUxEX09GRlNFVChK
U0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplY3gpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKF9fIGpuZSgpKTsKLSAgICAgICAgCi0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgICAgICBfXyBj
bXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykg
KyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKFN0cnVjdHVyZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIH0K
LQotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdWNjZXNzQ2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIF9fIGxpbmsoc3Vj
Y2Vzc0Nhc2VzW2ldLCBfXyBsYWJlbCgpKTsKLQotICAgIEptcFNyYyBjYWxsVGFyZ2V0OwotCi0g
ICAgLy8gZW1pdCBhIGNhbGwgb25seSBpZiBzdG9yYWdlIHJlYWxsb2MgaXMgbmVlZGVkCi0gICAg
aWYgKHRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3Ry
dWN0dXJlKSkgewotICAgICAgICBfXyBwdXNobF9yKFg4Njo6ZWR4KTsKLSAgICAgICAgX18gcHVz
aGxfaTMyKG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IF9fIHB1c2hsX2kzMihvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOwot
ICAgICAgICBfXyBwdXNobF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgY2FsbFRhcmdldCA9IF9fIGNh
bGwoKTsKLSAgICAgICAgX18gYWRkbF9pMzJyKDMgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7
Ci0gICAgICAgIF9fIHBvcGxfcihYODY6OmVkeCk7Ci0gICAgfQotCi0gICAgLy8gQXNzdW1lcyBt
X3JlZkNvdW50IGNhbiBiZSBkZWNyZW1lbnRlZCBlYXNpbHksIHJlZmNvdW50IGRlY3JlbWVudCBp
cyBzYWZlIGFzIAotICAgIC8vIGNvZGVibG9jayBzaG91bGQgZW5zdXJlIG9sZFN0cnVjdHVyZS0+
bV9yZWZDb3VudCA+IDAKLSAgICBfXyBzdWJsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihvbGRTdHJ1Y3R1cmUpKTsKLSAgICBfXyBhZGRsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihuZXdTdHJ1Y3R1cmUpKTsKLSAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4obmV3U3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
LCBYODY6OmVheCk7Ci0KLSAgICAvLyB3cml0ZSB0aGUgdmFsdWUKLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2Ojpl
YXgpOwotICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1Zh
bHVlKiksIFg4Njo6ZWF4KTsKLQotICAgIF9fIHJldCgpOwotICAgIAotICAgIEptcFNyYyBmYWls
dXJlSnVtcDsKLSAgICBpZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZmFpbHVyZUNhc2VzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
X18gbGluayhmYWlsdXJlQ2FzZXNbaV0sIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7Ci0gICAgICAgIGZhaWx1cmVKdW1wID0g
X18gam1wKCk7Ci0gICAgfQotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7
Ci0KLSAgICBpZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGZhaWx1cmVKdW1wLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRl
cjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7Ci0KLSAgICBpZiAodHJhbnNpdGlvbldpbGxOZWVk
U3RvcmFnZVJlYWxsb2Mob2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKQotICAgICAgICBYODZB
c3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVzaXplUHJvcGVydHlTdG9yYWdlKSk7Ci0gICAgCi0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJ
bmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKLSAgICAKLSAgICBjdGlSZXBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLX0KLQogdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKCkKIHsKICAgICAvLyAoMSkg
VGhlIGZpcnN0IGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBhcnJh
eSBsZW5ndGgKQEAgLTMwODIsNzQgKzIyODUsNiBAQAogICAgIFdURjo6ZmFzdEZyZWVFeGVjdXRh
YmxlKGludGVycHJldGVyLT5tX2N0aUFycmF5TGVuZ3RoVHJhbXBvbGluZSk7CiB9CiAKLXZvaWQg
SklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJu
QWRkcmVzcyk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9u
Y2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX2dldF9ieV9pZF9nZW5lcmljLgotICAgIC8vIFNo
b3VsZCBwcm9iYWJseSBnbyB0byBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9mYWlsLCBi
dXQgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KLSAgICBj
dGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKLQot
ICAgIC8vIFJlcGF0Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQg
ZnJvbSwgdGhlbiByZXBhdGNoIHRoZSBTdHJ1Y3R1cmUgdG8gbG9vayBmb3IuCi0gICAgWDg2QXNz
ZW1ibGVyOjpyZXBhdGNoRGlzcGxhY2VtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu
Zm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQs
IGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpOwotICAgIFg4NkFzc2VtYmxlcjo6cmVw
YXRjaEltbWVkaWF0ZShyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdp
bikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdD4oc3RydWN0dXJlKSk7Ci19Ci0KLXZvaWQgSklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9m
ZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5m
byA9IGNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgCi0gICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRv
IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8g
SW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBh
bnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0
ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOwotCi0gICAgLy8gUmVwYXRjaCB0aGUgb2Zm
c2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHJlcGF0Y2ggdGhl
IFN0cnVjdHVyZSB0byBsb29rIGZvci4KLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hEaXNwbGFj
ZW1lbnQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVw
YXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9m
KEpTVmFsdWUqKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoSW1tZWRpYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRQdXRC
eUlkU3RydWN0dXJlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKLX0K
LQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCh2b2lkKiByZXR1
cm5BZGRyZXNzKQotewotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2st
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBy
ZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNz
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9h
cnJheV9mYWlsKSk7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gYXJyYXkKLSAgICBfXyBjbXBs
X2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0FycmF5
VnB0ciksIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOwot
Ci0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3Jh
Z2UKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6
OmVheCwgWDg2OjplY3gpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotCi0gICAgX18gY21wbF9pMzJyKEpT
SW1tZWRpYXRlOjptYXhJbW1lZGlhdGVJbnQsIFg4Njo6ZWN4KTsKLSAgICBKbXBTcmMgZmFpbHVy
ZUNhc2VzMiA9IF9fIGphKCk7Ci0KLSAgICBfXyBhZGRsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7
Ci0gICAgX18gYWRkbF9pOHIoMSwgWDg2OjplY3gpOwotICAgIF9fIG1vdmxfcnIoWDg2OjplY3gs
IFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAgdm9pZCog
Y29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5m
b3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBz
bG93IGNhc2Ugcm91dGluZS4KLSAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5
SWRTbG93Q2FzZUNhbGw7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNl
czEsIHNsb3dDYXNlQmVnaW4pOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJl
Q2FzZXMyLCBzbG93Q2FzZUJlZ2luKTsKLQotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sg
dG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3Rv
cmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVycHJl
dF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJ
ZFByb3BlcnR5TWFwT2Zmc2V0OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNz
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOwotCi0gICAgLy8gVHJhY2sg
dGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVy
LgotICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGlu
ZSA9IGNvZGU7Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc293IGNhc2Ug
YmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qg
am1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdp
bikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1i
bGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKLX0KLQogdm9pZCBK
SVQ6OmVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFJlZ2lzdGVySUQgdmFyaWFibGVPYmpl
Y3QsIGludCBpbmRleCwgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZhcmlhYmxlT2JqZWN0LCBkc3QpOwpJbmRleDog
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVQuaAkocmV2aXNpb24gMzg5OTApCisrKyBq
aXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw2ICszOTIsMTAgQEAKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcygpOwogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCh2b2lkKiByZXR1cm5BZGRyZXNzKTsKIAor
ICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgcmVzdWx0VlJlZywgaW50IGJh
c2VWUmVnLCBJZGVudGlmaWVyKiBpZGVudCwgdW5zaWduZWQgaSwgdW5zaWduZWQgcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbkluZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZFNsb3dD
YXNlKGludCByZXN1bHRWUmVnLCBpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqIGlkZW50LCB1bnNp
Z25lZCBpLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVQdXRC
eUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqIGlkZW50LCBpbnQgdmFsdWVWUmVn
LCB1bnNpZ25lZCBpLCB1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpOwor
ICAgICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkU2xvd0Nhc2UoaW50IGJhc2VWUmVnLCBJZGVudGlm
aWVyKiBpZGVudCwgaW50IHZhbHVlVlJlZywgdW5zaWduZWQgaSwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbklu
ZGV4KTsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKE9wY29kZUlELCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGksIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOwogICAgICAgICB2
b2lkIGNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMzg5ODQpCisrKyBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwyNDA5ICs0NCwzMjYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBQ
TEFURk9STShNQUMpCisjaWYgIUVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNTU0UyUHJlc2VudCgpCit2b2lkIEpJVDo6Y29tcGlsZUdl
dEJ5SWRIb3RQYXRoKGludCByZXN1bHRWUmVnLCBpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqIGlk
ZW50LCB1bnNpZ25lZCBpLCB1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgp
CiB7Ci0gICAgcmV0dXJuIHRydWU7IC8vIEFsbCBYODYgTWFjcyBhcmUgZ3VhcmFudGVlZCB0byBz
dXBwb3J0IGF0IGxlYXN0IFNTRTIKLX0KKyAgICAvLyBBcyBmb3IgcHV0X2J5X2lkLCBnZXRfYnlf
aWQgcmVxdWlyZXMgdGhlIG9mZnNldCBvZiB0aGUgU3RydWN0dXJlIGFuZCB0aGUgb2Zmc2V0IG9m
IHRoZSBhY2Nlc3MgdG8gYmUgcmVwYXRjaGVkLgorICAgIC8vIEFkZGl0aW9uYWxseSwgZm9yIGdl
dF9ieV9pZCB3ZSBuZWVkIHJlcGF0Y2ggdGhlIG9mZnNldCBvZiB0aGUgYnJhbmNoIHRvIHRoZSBz
bG93IGNhc2UgKHdlIHJlcGF0Y2ggdGhpcyB0byBqdW1wCisgICAgLy8gdG8gYXJyYXktbGVuZ3Ro
IC8gcHJvdG90eXBlIGFjY2VzcyB0cmFucG9saW5lcywgYW5kIGZpbmFsbHkgd2UgYWxzbyB0aGUg
dGhlIHByb3BlcnR5LW1hcCBhY2Nlc3Mgb2Zmc2V0IGFzIGEgbGFiZWwKKyAgICAvLyB0byBqdW1w
IGJhY2sgdG8gaWYgb25lIG9mIHRoZXNlIHRyYW1wb2xpZXMgZmluZHMgYSBtYXRjaC4KIAotI2Vs
c2UKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBYODY6OmVheCwgaSk7CiAK
LXN0YXRpYyBib29sIGlzU1NFMlByZXNlbnQoKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgU1NF
MkZlYXR1cmVCaXQgPSAxIDw8IDI2OwotICAgIHN0cnVjdCBTU0UyQ2hlY2sgewotICAgICAgICBT
U0UyQ2hlY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZmxhZ3M7Ci0jaWYgQ09NUElM
RVIoTVNWQykKLSAgICAgICAgICAgIF9hc20gewotICAgICAgICAgICAgICAgIG1vdiBlYXgsIDEg
Ly8gY3B1aWQgZnVuY3Rpb24gMSBnaXZlcyB1cyB0aGUgc3RhbmRhcmQgZmVhdHVyZSBzZXQKLSAg
ICAgICAgICAgICAgICBjcHVpZDsKLSAgICAgICAgICAgICAgICBtb3YgZmxhZ3MsIGVkeDsKLSAg
ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBmbGFncyA9IDA7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogQWRkIEdDQyBjb2RlIHRvIGRvIGFib3ZlIGFzbQorI2lmZGVmIE5ERUJVRworICAg
IFVOVVNFRF9QQVJBTShwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpOwogI2VuZGlmCi0g
ICAgICAgICAgICBwcmVzZW50ID0gKGZsYWdzICYgU1NFMkZlYXR1cmVCaXQpICE9IDA7Ci0gICAg
ICAgIH0KLSAgICAgICAgYm9vbCBwcmVzZW50OwotICAgIH07Ci0gICAgc3RhdGljIFNTRTJDaGVj
ayBjaGVjazsKLSAgICByZXR1cm4gY2hlY2sucHJlc2VudDsKLX0KKyAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKIAotI2VuZGlmCisjaWZuZGVmIE5ERUJVRwor
ICAgIEptcERzdCBjb2xkUGF0aEJlZ2luID0gX18gbGFiZWwoKTsKKyNlbmRpZiAgICAgICAgCisg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7CisgICAgSm1wU3JjIGNhbGwg
PSBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9nZW5lcmljKTsK
KyAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhjb2xk
UGF0aEJlZ2luLCBjYWxsKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIAotQ09NUElMRV9BU1NFUlQo
Q1RJX0FSR1NfY29kZSA9PSAweEMsIENUSV9BUkdTX2NvZGVfaXNfQyk7Ci1DT01QSUxFX0FTU0VS
VChDVElfQVJHU19jYWxsRnJhbWUgPT0gMHhFLCBDVElfQVJHU19jYWxsRnJhbWVfaXNfRSk7Ci0K
LSNpZiBDT01QSUxFUihHQ0MpICYmIFBMQVRGT1JNKFg4NikKLQotI2lmIFBMQVRGT1JNKERBUldJ
TikKLSNkZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAiXyIgI25hbWUKLSNlbHNlCi0jZGVmaW5l
IFNZTUJPTF9TVFJJTkcobmFtZSkgI25hbWUKLSNlbmRpZgotCi1hc20oCi0iLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xp
bmUpICI6IiAiXG4iCi0gICAgInB1c2hsICVlc2kiICJcbiIKLSAgICAicHVzaGwgJWVkaSIgIlxu
IgotICAgICJwdXNobCAlZWJ4IiAiXG4iCi0gICAgInN1YmwgJDB4MjAsICVlc3AiICJcbiIKLSAg
ICAibW92bCAkNTEyLCAlZXNpIiAiXG4iCi0gICAgIm1vdmwgMHgzOCglZXNwKSwgJWVkaSIgIlxu
IiAvLyBPeDM4ID0gMHgwRSAqIDQsIDB4MEUgPSBDVElfQVJHU19jYWxsRnJhbWUgKHNlZSBhc3Nl
cnRpb24gYWJvdmUpCi0gICAgImNhbGwgKjB4MzAoJWVzcCkiICJcbiIgLy8gT3gzMCA9IDB4MEMg
KiA0LCAweDBDID0gQ1RJX0FSR1NfY29kZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkKLSAgICAiYWRk
bCAkMHgyMCwgJWVzcCIgIlxuIgotICAgICJwb3BsICVlYngiICJcbiIKLSAgICAicG9wbCAlZWRp
IiAiXG4iCi0gICAgInBvcGwgJWVzaSIgIlxuIgotICAgICJyZXQiICJcbiIKLSk7Ci0KLWFzbSgK
LSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCi1TWU1C
T0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiOiIgIlxuIgotI2lmIFVTRShDVElfQVJH
VU1FTlQpCi0jaWYgVVNFKEZBU1RfQ0FMTF9DVElfQVJHVU1FTlQpCi0gICAgIm1vdmwgJWVzcCwg
JWVjeCIgIlxuIgotI2Vsc2UKLSAgICAibW92bCAlZXNwLCAwKCVlc3ApIiAiXG4iCi0jZW5kaWYK
LSAgICAiY2FsbCAiIFNZTUJPTF9TVFJJTkcoX1pOM0pTQzExSW50ZXJwcmV0ZXIxMmN0aV92bV90
aHJvd0VQUHYpICJcbiIKLSNlbHNlCi0gICAgImNhbGwgIiBTWU1CT0xfU1RSSU5HKF9aTjNKU0Mx
MUludGVycHJldGVyMTJjdGlfdm1fdGhyb3dFUHZ6KSAiXG4iCi0jZW5kaWYKLSAgICAiYWRkbCAk
MHgyMCwgJWVzcCIgIlxuIgotICAgICJwb3BsICVlYngiICJcbiIKLSAgICAicG9wbCAlZWRpIiAi
XG4iCi0gICAgInBvcGwgJWVzaSIgIlxuIgotICAgICJyZXQiICJcbiIKLSk7Ci0gICAgCi0jZWxp
ZiBDT01QSUxFUihNU1ZDKQotCi1leHRlcm4gIkMiIHsKLSAgICAKLSAgICBfX2RlY2xzcGVjKG5h
a2VkKSBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIENh
bGxGcmFtZSosIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSop
Ci0gICAgewotICAgICAgICBfX2FzbSB7Ci0gICAgICAgICAgICBwdXNoIGVzaTsKLSAgICAgICAg
ICAgIHB1c2ggZWRpOwotICAgICAgICAgICAgcHVzaCBlYng7Ci0gICAgICAgICAgICBzdWIgZXNw
LCAweDIwOwotICAgICAgICAgICAgbW92IGVzaSwgNTEyOwotICAgICAgICAgICAgbW92IGVjeCwg
ZXNwOwotICAgICAgICAgICAgbW92IGVkaSwgW2VzcCArIDB4MzhdOwotICAgICAgICAgICAgY2Fs
bCBbZXNwICsgMHgzMF07IC8vIE94MzAgPSAweDBDICogNCwgMHgwQyA9IENUSV9BUkdTX2NvZGUg
KHNlZSBhc3NlcnRpb24gYWJvdmUpCi0gICAgICAgICAgICBhZGQgZXNwLCAweDIwOwotICAgICAg
ICAgICAgcG9wIGVieDsKLSAgICAgICAgICAgIHBvcCBlZGk7Ci0gICAgICAgICAgICBwb3AgZXNp
OwotICAgICAgICAgICAgcmV0OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIF9fZGVjbHNw
ZWMobmFrZWQpIHZvaWQgY3RpVk1UaHJvd1RyYW1wb2xpbmUoKQotICAgIHsKLSAgICAgICAgX19h
c20gewotICAgICAgICAgICAgbW92IGVjeCwgZXNwOwotICAgICAgICAgICAgY2FsbCBKU0M6Oklu
dGVycHJldGVyOjpjdGlfdm1fdGhyb3c7Ci0gICAgICAgICAgICBhZGQgZXNwLCAweDIwOwotICAg
ICAgICAgICAgcG9wIGVieDsKLSAgICAgICAgICAgIHBvcCBlZGk7Ci0gICAgICAgICAgICBwb3Ag
ZXNpOwotICAgICAgICAgICAgcmV0OwotICAgICAgICB9Ci0gICAgfQotICAgIAorICAgIC8vIFRy
YWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3Zl
ciByZXBhdGNoIGluZm9ybWF0aW9uLgorICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29k
ZUluZGV4ID09IGkpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwogfQog
Ci0jZW5kaWYKIAotdm9pZCBjdGlTZXRSZXR1cm5BZGRyZXNzKHZvaWQqKiB3aGVyZSwgdm9pZCog
d2hhdCkKK3ZvaWQgSklUOjpjb21waWxlR2V0QnlJZFNsb3dDYXNlKGludCwgaW50LCBJZGVudGlm
aWVyKiwgdW5zaWduZWQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25l
ZCkKIHsKLSAgICAqd2hlcmUgPSB3aGF0OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
Ci12b2lkIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHZvaWQqIHdoZXJlLCB2b2lkKiB3
aGF0KQordm9pZCBKSVQ6OmNvbXBpbGVQdXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIElkZW50
aWZpZXIqIGlkZW50LCBpbnQgdmFsdWVWUmVnLCB1bnNpZ25lZCBpLCB1bnNpZ25lZCBwcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpCiB7Ci0gICAgKHN0YXRpY19jYXN0PHZvaWQqKj4od2hl
cmUpKVstMV0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4od2hhdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4od2hlcmUpKTsKLX0KKyAg
ICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBh
bmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAorICAgIC8vIHRvIGp1
c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdo
b3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQorICAgIC8vIHN1Y2ggdGhhdCB0aGUg
U3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0
aGlzLgogCi0jaWZuZGVmIE5ERUJVRworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VW
UmVnLCBYODY6OmVheCwgdmFsdWVWUmVnLCBYODY6OmVkeCwgaSk7CiAKLXZvaWQgSklUOjpwcmlu
dEJ5dGVjb2RlT3BlcmFuZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpCi17Ci0g
ICAgY2hhciB3aGljaDEgPSAnKic7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMxKSkgewotICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMxKTsKLSAgICAgICAgd2hpY2gxID0gCi0gICAgICAgICAgICBKU0lt
bWVkaWF0ZTo6aXNJbW1lZGlhdGUodmFsdWUpID8KLSAgICAgICAgICAgICAgICAoSlNJbW1lZGlh
dGU6OmlzTnVtYmVyKHZhbHVlKSA/ICdpJyA6Ci0gICAgICAgICAgICAgICAgSlNJbW1lZGlhdGU6
OmlzQm9vbGVhbih2YWx1ZSkgPyAnYicgOgotICAgICAgICAgICAgICAgIHZhbHVlLT5pc1VuZGVm
aW5lZCgpID8gJ3UnIDoKLSAgICAgICAgICAgICAgICB2YWx1ZS0+aXNOdWxsKCkgPyAnbicgOiAn
PycpCi0gICAgICAgICAgICAgICAgOgotICAgICAgICAgICAgKHZhbHVlLT5pc1N0cmluZygpID8g
J3MnIDoKLSAgICAgICAgICAgIHZhbHVlLT5pc09iamVjdCgpID8gJ28nIDoKLSAgICAgICAgICAg
ICdrJyk7Ci0gICAgfQotICAgIGNoYXIgd2hpY2gyID0gJyonOwotICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjMikpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjMik7Ci0gICAgICAgIHdoaWNoMiA9IAot
ICAgICAgICAgICAgSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSA/Ci0gICAgICAgICAg
ICAgICAgKEpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1ZSkgPyAnaScgOgotICAgICAgICAgICAg
ICAgIEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4odmFsdWUpID8gJ2InIDoKLSAgICAgICAgICAgICAg
ICB2YWx1ZS0+aXNVbmRlZmluZWQoKSA/ICd1JyA6Ci0gICAgICAgICAgICAgICAgdmFsdWUtPmlz
TnVsbCgpID8gJ24nIDogJz8nKQotICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICh2YWx1
ZS0+aXNTdHJpbmcoKSA/ICdzJyA6Ci0gICAgICAgICAgICB2YWx1ZS0+aXNPYmplY3QoKSA/ICdv
JyA6Ci0gICAgICAgICAgICAnaycpOwotICAgIH0KLSAgICBpZiAoKHdoaWNoMSAhPSAnKicpIHwg
KHdoaWNoMiAhPSAnKicpKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlR5cGVzICVjICVjXG4i
LCB3aGljaDEsIHdoaWNoMik7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7CisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwg
MCk7CisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgOCk7CisgICAgSm1wU3JjIGNhbGwgPSBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKTsKKwor
ICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQg
dG8gcmVjb3ZlciByZXBhdGNoIGluZm9ybWF0aW9uLgorICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
XS5ieXRlY29kZUluZGV4ID09IGkpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBj
YWxsOwogfQogCi0jZW5kaWYKLQotSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IG1faW50ZXJwcmV0ZXIoZ2xvYmFsRGF0YS0+aW50
ZXJwcmV0ZXIpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKLSAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zLnNpemUoKSA6IDApCi0gICAgLCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25J
bmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6
ZSgpIDogMCkKLSAgICAsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oY29kZUJs
b2NrID8gY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKSA6IDApCi0gICAgLCBtX2xhc3RS
ZXN1bHRCeXRlY29kZVJlZ2lzdGVyKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0g
ICAgLCBtX2p1bXBUYXJnZXRzUG9zaXRpb24oMCkKK3ZvaWQgSklUOjpjb21waWxlUHV0QnlJZFNs
b3dDYXNlKGludCwgSWRlbnRpZmllciosIGludCwgdW5zaWduZWQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCkKIHsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotI2RlZmluZSBDVElfQ09NUElMRV9CSU5BUllfT1AobmFtZSkgXAotICAgIGNhc2UgbmFt
ZTogeyBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBY
ODY6OmVjeCk7IFwKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV8jI25h
bWUpOyBcCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7IFwKLSAgICAgICAgaSArPSA0OyBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAg
fQorI2Vsc2UKIAotI2RlZmluZSBDVElfQ09NUElMRV9VTkFSWV9PUChuYW1lKSBcCi0gICAgY2Fz
ZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCi0gICAgICAgIGkg
Kz0gMzsgXAotICAgICAgICBicmVhazsgXAotICAgIH0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgaSwgQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlIHR5cGUpCit2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCByZXN1
bHRWUmVnLCBpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqLCB1bnNpZ25lZCBpLCB1bnNpZ25lZCBw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpCiB7Ci0gICAgYm9vbCBuZWdhdGVkID0gKHR5
cGUgPT0gT3BOU3RyaWN0RXEpOworICAgIC8vIEFzIGZvciBwdXRfYnlfaWQsIGdldF9ieV9pZCBy
ZXF1aXJlcyB0aGUgb2Zmc2V0IG9mIHRoZSBTdHJ1Y3R1cmUgYW5kIHRoZSBvZmZzZXQgb2YgdGhl
IGFjY2VzcyB0byBiZSByZXBhdGNoZWQuCisgICAgLy8gQWRkaXRpb25hbGx5LCBmb3IgZ2V0X2J5
X2lkIHdlIG5lZWQgcmVwYXRjaCB0aGUgb2Zmc2V0IG9mIHRoZSBicmFuY2ggdG8gdGhlIHNsb3cg
Y2FzZSAod2UgcmVwYXRjaCB0aGlzIHRvIGp1bXAKKyAgICAvLyB0byBhcnJheS1sZW5ndGggLyBw
cm90b3R5cGUgYWNjZXNzIHRyYW5wb2xpbmVzLCBhbmQgZmluYWxseSB3ZSBhbHNvIHRoZSB0aGUg
cHJvcGVydHktbWFwIGFjY2VzcyBvZmZzZXQgYXMgYSBsYWJlbAorICAgIC8vIHRvIGp1bXAgYmFj
ayB0byBpZiBvbmUgb2YgdGhlc2UgdHJhbXBvbGllcyBmaW5kcyBhIG1hdGNoLgogCi0gICAgdW5z
aWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNyYzEg
PSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBY
ODY6OmVheCwgaSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCBYODY6OmVh
eCwgc3JjMiwgWDg2OjplZHgsIGkpOworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29k
ZUluZGV4ID09IGkpOwogCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywg
WDg2OjplYXgpOwotICAgIEptcFNyYyBmaXJzdE5vdEltbWVkaWF0ZSA9IF9fIGplKCk7Ci0gICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplZHgpOwotICAgIEptcFNy
YyBzZWNvbmROb3RJbW1lZGlhdGUgPSBfXyBqZSgpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZSZWcpOwogCi0gICAgX18gY21wbF9ycihYODY6OmVk
eCwgWDg2OjplYXgpOwotICAgIGlmIChuZWdhdGVkKQotICAgICAgICBfXyBzZXRuZV9yKFg4Njo6
ZWF4KTsKLSAgICBlbHNlCi0gICAgICAgIF9fIHNldGVfcihYODY6OmVheCk7Ci0gICAgX18gbW92
emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShY
ODY6OmVheCk7Ci0gICAgICAgICAgICAKLSAgICBKbXBTcmMgYm90aFdlcmVJbW1lZGlhdGVzID0g
X18gam1wKCk7CisgICAgSm1wRHN0IGhvdFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisgICAgbV9w
cm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXhdLmhvdFBhdGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKIAotICAgIF9fIGxpbmsoZmlyc3ROb3RJ
bW1lZGlhdGUsIF9fIGxhYmVsKCkpOworICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJZERl
ZmF1bHRTdHJ1Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2Ojpl
YXgpOworICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxz
KGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1
cmUpOworICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7
CisgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90
UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UpOwogCi0gICAgLy8gY2hlY2sgdGhhdCBlZHggaXMgaW1tZWRpYXRlIGJ1dCBub3QgdGhl
IHplcm8gaW1tZWRpYXRlCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywg
WDg2OjplZHgpOwotICAgIF9fIHNldHpfcihYODY6OmVjeCk7Ci0gICAgX18gbW92emJsX3JyKFg4
Njo6ZWN4LCBYODY6OmVjeCk7IC8vIGVjeCBpcyBub3cgMSBpZiBlZHggd2FzIG5vbmltbWVkaWF0
ZQotICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUo
KSksIFg4Njo6ZWR4KTsKLSAgICBfXyBzZXRlX3IoWDg2OjplZHgpOwotICAgIF9fIG1vdnpibF9y
cihYODY6OmVkeCwgWDg2OjplZHgpOyAvLyBlZHggaXMgbm93IDEgaWYgZWR4IHdhcyB0aGUgMCBp
bW1lZGlhdGUKLSAgICBfXyBvcmxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKLQotICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7Ci0KLSAgICBfXyBtb3Zs
X2kzMnIoYXNJbnRlZ2VyKGpzQm9vbGVhbihuZWdhdGVkKSksIFg4Njo6ZWF4KTsKLQotICAgIEpt
cFNyYyBmaXJzdFdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOwotCi0gICAgX18gbGluayhzZWNv
bmROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotICAgIC8vIGNoZWNrIHRoYXQgZWF4IGlzIG5v
dCB0aGUgemVybyBpbW1lZGlhdGUgKHdlIGtub3cgaXQgbXVzdCBiZSBpbW1lZGlhdGUpCi0gICAg
X18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2
OjplYXgpOwotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkp
KTsKLQotICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2
OjplYXgpOwotCi0gICAgX18gbGluayhib3RoV2VyZUltbWVkaWF0ZXMsIF9fIGxhYmVsKCkpOwot
ICAgIF9fIGxpbmsoZmlyc3RXYXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpT
T2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18g
bW92bF9tcihyZXBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQsIFg4Njo6ZWF4LCBYODY6OmVheCk7
CisgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90
UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFw
T2Zmc2V0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorCit2
b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJlZywgaW50IGJhc2VW
UmVnLCBJZGVudGlmaWVyKiBpZGVudCwgdW5zaWduZWQgaSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
KQogewotICAgIF9fIHN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKLSAgICBKbXBTcmMgc2tpcFRpbWVv
dXQgPSBfXyBqbmUoKTsKLSAgICBlbWl0Q1RJQ2FsbChieXRlY29kZUluZGV4LCBJbnRlcnByZXRl
cjo6Y3RpX3RpbWVvdXRfY2hlY2spOworICAgIC8vIEFzIGZvciB0aGUgaG90IHBhdGggb2YgZ2V0
X2J5X2lkLCBhYm92ZSwgd2UgZW5zdXJlIHRoYXQgd2UgY2FuIHVzZSBhbiBhcmNoaXRlY3R1cmUg
c3BlY2lmaWMgb2Zmc2V0CisgICAgLy8gc28gdGhhdCB3ZSBvbmx5IG5lZWQgdHJhY2sgb25lIHBv
aW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0cmFjayBhIHBvaW50ZXIgdG8gdGhl
IGxvY2F0aW9uCisgICAgLy8gb2YgdGhlIGNhbGwgKHdoaWNoIHdlIGNhbiB1c2UgdG8gbG9vayB1
cCB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiksIGJ1dCBzaG91bGQgYSBhcnJheS1sZW5ndGggb3IK
KyAgICAvLyBwcm90b3R5cGUgYWNjZXNzIHRyYW1wb2xpbmUgZmFpbCB3ZSB3YW50IHRvIGJhaWwg
b3V0IGJhY2sgdG8gaGVyZS4gIFRvIGRvIHNvIHdlIGNhbiBzdWJ0cmFjdCBiYWNrCisgICAgLy8g
dGhlIGRpc3RhbmNlIGZyb20gdGhlIGNhbGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2FzZS4K
IAotICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19nbG9iYWxEYXRhLCBYODY6OmVjeCk7Ci0g
ICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNHbG9iYWxEYXRhLCBpbnRlcnByZXRlciksIFg4
Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSW50ZXJwcmV0
ZXIsIG1fdGlja3NVbnRpbE5leHRUaW1lb3V0Q2hlY2spLCBYODY6OmVjeCwgWDg2Ojplc2kpOwot
ICAgIF9fIGxpbmsoc2tpcFRpbWVvdXQsIF9fIGxhYmVsKCkpOworICAgIGlmIChsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZykpCisgICAgICAgICsraXRlcjsKKyAgICBfXyBs
aW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwogCi0gICAga2lsbExhc3RSZXN1bHRSZWdpc3Rl
cigpOwotfQorI2lmbmRlZiBOREVCVUcKKyAgICBKbXBEc3QgY29sZFBhdGhCZWdpbiA9IF9fIGxh
YmVsKCk7CisjZW5kaWYgICAgICAgIAorICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwor
ICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVu
dCksIDQpOworICAgIEptcFNyYyBjYWxsID0gZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfYnlfaWQpOworICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VC
ZXR3ZWVuTGFiZWxzKGNvbGRQYXRoQmVnaW4sIGNhbGwpID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlk
U2xvd0Nhc2VDYWxsKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
Ci0vKgotICBUaGlzIGlzIHJlcXVpcmVkIHNpbmNlIG51bWJlciByZXByZXNlbnRhdGlvbiBpcyBj
YW5vbmljYWwgLSB2YWx1ZXMgcmVwcmVzZW50YWJsZSBhcyBhIEpTSW1tZWRpYXRlIHNob3VsZCBu
b3QgYmUgc3RvcmVkIGluIGEgSlNOdW1iZXJDZWxsLgotICAKLSAgSW4gdGhlIGNvbW1vbiBjYXNl
LCB0aGUgZG91YmxlIHZhbHVlIGZyb20gJ3htbVNvdXJjZScgaXMgd3JpdHRlbiB0byB0aGUgcmV1
c2FibGUgSlNOdW1iZXJDZWxsIHBvaW50ZWQgdG8gYnkgJ2pzTnVtYmVyQ2VsbCcsIHRoZW4gJ2pz
TnVtYmVyQ2VsbCcKLSAgaXMgd3JpdHRlbiB0byB0aGUgb3V0cHV0IFNGIFJlZ2lzdGVyICdkc3Qn
LCBhbmQgdGhlbiBhIGp1bXAgaXMgcGxhbnRlZCAoc3RvcmVkIGludG8gKndyb3RlSlNOdW1iZXJD
ZWxsKS4KLSAgCi0gIEhvd2V2ZXIgaWYgdGhlIHZhbHVlIGZyb20geG1tU291cmNlIGlzIHJlcHJl
c2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZSwgdGhlbiB0aGUgSlNJbW1lZGlhdGUgdmFsdWUgd2ls
bCBiZSB3cml0dGVuIHRvIHRoZSBvdXRwdXQsIGFuZCBmbG93Ci0gIGNvbnRyb2wgd2lsbCBmYWxs
IHRocm91Z2ggZnJvbSB0aGUgY29kZSBwbGFudGVkLgotKi8KLXZvaWQgSklUOjpwdXREb3VibGVS
ZXN1bHRUb0pTTnVtYmVyQ2VsbE9ySlNJbW1lZGlhdGUoWDg2OjpYTU1SZWdpc3RlcklEIHhtbVNv
dXJjZSwgWDg2OjpSZWdpc3RlcklEIGpzTnVtYmVyQ2VsbCwgdW5zaWduZWQgZHN0LCBKbXBTcmMq
IHdyb3RlSlNOdW1iZXJDZWxsLCAgWDg2OjpYTU1SZWdpc3RlcklEIHRlbXBYbW0sIFg4Njo6UmVn
aXN0ZXJJRCB0ZW1wUmVnMSwgWDg2OjpSZWdpc3RlcklEIHRlbXBSZWcyKQotewotICAgIC8vIGNv
bnZlcnQgKGRvdWJsZSAtPiBKU0ltbWVkaWF0ZSAtPiBkb3VibGUpLCBhbmQgY2hlY2sgaWYgdGhl
IHZhbHVlIGlzIHVuY2hhbmdlZCAtIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIGlzIHJlcHJlc2Vu
dGFibGUgYXMgYSBKU0ltbWVkaWF0ZS4KLSAgICBfXyBjdnR0c2Qyc2lfcnIoeG1tU291cmNlLCB0
ZW1wUmVnMSk7Ci0gICAgX18gYWRkbF9ycih0ZW1wUmVnMSwgdGVtcFJlZzEpOwotICAgIF9fIHNh
cmxfaThyKDEsIHRlbXBSZWcxKTsKLSAgICBfXyBjdnRzaTJzZF9ycih0ZW1wUmVnMSwgdGVtcFht
bSk7Ci0gICAgLy8gQ29tcGFyZSAmIGJyYW5jaCBpZiBpbW1lZGlhdGUuIAotICAgIF9fIHVjb21p
c19ycih0ZW1wWG1tLCB4bW1Tb3VyY2UpOwotICAgIEptcFNyYyByZXN1bHRJc0ltbSA9IF9fIGpl
KCk7Ci0gICAgSm1wRHN0IHJlc3VsdExvb2tlZExpa2VJbW1CdXRBY3R1YWxseUlzbnQgPSBfXyBs
YWJlbCgpOwotICAgIAotICAgIC8vIFN0b3JlIHRoZSByZXN1bHQgdG8gdGhlIEpTTnVtYmVyQ2Vs
bCBhbmQganVtcC4KLSAgICBfXyBtb3ZzZF9ybSh4bW1Tb3VyY2UsIEZJRUxEX09GRlNFVChKU051
bWJlckNlbGwsIG1fdmFsdWUpLCBqc051bWJlckNlbGwpOwotICAgIGlmIChqc051bWJlckNlbGwg
IT0gWDg2OjplYXgpCi0gICAgICAgIF9fIG1vdmxfcnIoanNOdW1iZXJDZWxsLCBYODY6OmVheCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICp3cm90ZUpTTnVtYmVyQ2Vs
bCA9IF9fIGptcCgpOwotCi0gICAgX18gbGluayhyZXN1bHRJc0ltbSwgX18gbGFiZWwoKSk7Ci0g
ICAgLy8gdmFsdWUgPT0gKGRvdWJsZSkoSlNJbW1lZGlhdGUpdmFsdWUuLi4gb3IgYXQgbGVhc3Qs
IGl0IGxvb2tzIHRoYXQgd2F5Li4uCi0gICAgLy8gdWNvbWkgd2lsbCByZXBvcnQgdGhhdCAoMCA9
PSAtMCksIGFuZCB3aWxsIHJlcG9ydCB0cnVlIGlmIGVpdGhlciBpbnB1dCBpbiBOYU4gKHJlc3Vs
dCBpcyB1bm9yZGVyZWQpLgotICAgIF9fIGxpbmsoX18ganAoKSwgcmVzdWx0TG9va2VkTGlrZUlt
bUJ1dEFjdHVhbGx5SXNudCk7IC8vIEFjdHVhbGx5IHdhcyBhIE5hTgotICAgIF9fIHBleHRyd19p
cnIoMywgeG1tU291cmNlLCB0ZW1wUmVnMik7Ci0gICAgX18gY21wbF9pMzJyKDB4ODAwMCwgdGVt
cFJlZzIpOwotICAgIF9fIGxpbmsoX18gamUoKSwgcmVzdWx0TG9va2VkTGlrZUltbUJ1dEFjdHVh
bGx5SXNudCk7IC8vIEFjdHVhbGx5IHdhcyAtMAotICAgIC8vIFllcyBpdCByZWFsbHkgcmVhbGx5
IHJlYWxseSBpcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUuCi0gICAgZW1pdEZhc3RB
cml0aEludFRvSW1tTm9DaGVjayh0ZW1wUmVnMSk7Ci0gICAgaWYgKHRlbXBSZWcxICE9IFg4Njo6
ZWF4KQotICAgICAgICBfXyBtb3ZsX3JyKHRlbXBSZWcxLCBYODY6OmVheCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUg
Y2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciByZXBhdGNoIGluZm9ybWF0aW9uLgor
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOworICAgIG1fcHJv
cGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUJpbmFy
eUFyaXRoT3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIHVuc2lnbmVkIGRzdCwgdW5zaWduZWQgc3JjMSwg
dW5zaWduZWQgc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzLCB1bnNpZ25lZCBpKQordm9pZCBKSVQ6
OmNvbXBpbGVQdXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqLCBpbnQgdmFs
dWVWUmVnLCB1bnNpZ25lZCBpLCB1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXgpCiB7Ci0gICAgU3RydWN0dXJlKiBudW1iZXJTdHJ1Y3R1cmUgPSBtX2dsb2JhbERhdGEtPm51
bWJlclN0cnVjdHVyZS5nZXQoKTsKLSAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMTsKLSAgICBK
bXBTcmMgd2FzSlNOdW1iZXJDZWxsMWI7Ci0gICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDI7Ci0g
ICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDJiOworICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcmVwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ug
c3RvcmUgb25lIHBvaW50ZXIsCisgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhh
dmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5l
cmF0ZSBjb2RlCisgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFs
d2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhzcmMxLCBYODY6OmVheCwgc3JjMiwgWDg2OjplZHgsIGkpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBYODY6OmVheCwgdmFsdWVWUmVnLCBYODY6OmVk
eCwgaSk7CiAKLSAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlBy
ZXNlbnQoKSkgewotICAgICAgICBBU1NFUlQodHlwZXMuc2Vjb25kKCkubWlnaHRCZU51bWJlcigp
KTsKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKIAotICAg
ICAgICAvLyBDaGVjayBvcDIgaXMgYSBudW1iZXIKLSAgICAgICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKLSAgICAgICAgSm1wU3JjIG9w
MmltbSA9IF9fIGpuZSgpOwotICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJ
c051bWJlcigpKSB7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2
OjplZHgsIGksIHNyYzIpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQ+KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgfQorICAgIC8vIEp1bXAgdG8gYSBzbG93
IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRo
ZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFg4Njo6ZWF4LCBpLCBiYXNlVlJlZyk7CiAKLSAgICAgICAgLy8gKDEpIEluIHRoaXMgY2Fz
ZSBzcmMyIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCi0gICAgICAgIC8vICAgICBTbG93IGNh
c2UgaWYgc3JjMSBpcyBub3QgYSBudW1iZXIgdHlwZS4KLSAgICAgICAgX18gdGVzdGxfaTMycihK
U0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgSm1wU3Jj
IG9wMWltbSA9IF9fIGpuZSgpOwotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVs
eUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChY
ODY6OmVheCwgaSwgc3JjMSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICB9CisgICAgSm1wRHN0IGhvdFBhdGhC
ZWdpbiA9IF9fIGxhYmVsKCk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGhvdFBhdGhCZWdp
bjsKIAotICAgICAgICAvLyAoMWEpIGlmIHdlIGdldCBoZXJlLCBzcmMxIGlzIGFsc28gYSBudW1i
ZXIgY2VsbAotICAgICAgICBfXyBtb3ZzZF9tcihGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxsLCBt
X3ZhbHVlKSwgWDg2OjplYXgsIFg4Njo6eG1tMCk7Ci0gICAgICAgIEptcFNyYyBsb2FkZWREb3Vi
bGUgPSBfXyBqbXAoKTsKLSAgICAgICAgLy8gKDFiKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBh
biBpbW1lZGlhdGUKLSAgICAgICAgX18gbGluayhvcDFpbW0sIF9fIGxhYmVsKCkpOwotICAgICAg
ICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplYXgpOwotICAgICAgICBfXyBjdnRzaTJzZF9y
cihYODY6OmVheCwgWDg2Ojp4bW0wKTsKLSAgICAgICAgLy8gKDFjKSAKLSAgICAgICAgX18gbGlu
ayhsb2FkZWREb3VibGUsIF9fIGxhYmVsKCkpOwotICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
YWRkKQotICAgICAgICAgICAgX18gYWRkc2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwg
bV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTApOwotICAgICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9zdWIpCi0gICAgICAgICAgICBfXyBzdWJzZF9tcihGSUVMRF9PRkZTRVQoSlNOdW1i
ZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplZHgsIFg4Njo6eG1tMCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX211bCk7Ci0gICAgICAgICAgICBfXyBt
dWxzZF9tcihGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplZHgsIFg4
Njo6eG1tMCk7Ci0gICAgICAgIH0KKyAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9s
bG93aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMyYml0IGltbWVkaWF0ZSwgaW4gb3JkZXIgdGhh
dCBpdCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgorICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJ
ZERlZmF1bHRTdHJ1Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2
OjplYXgpOworICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFi
ZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1
Y3R1cmUpOworICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBp
KSk7CiAKLSAgICAgICAgcHV0RG91YmxlUmVzdWx0VG9KU051bWJlckNlbGxPckpTSW1tZWRpYXRl
KFg4Njo6eG1tMCwgWDg2OjplZHgsIGRzdCwgJndhc0pTTnVtYmVyQ2VsbDIsIFg4Njo6eG1tMSwg
WDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICAgICAgd2FzSlNOdW1iZXJDZWxsMmIgPSBfXyBqbXAo
KTsKLQotICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIHNyYzIgaXMgYW4g
aW1tZWRpYXRlIG51bWJlci4KLSAgICAgICAgLy8gICAgIFR3byBzbG93IGNhc2VzIC0gZWl0aGVy
IHNyYzEgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUgc3VidHJhY3Qgb3ZlcmZsb3dzLgotICAg
ICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlcy5maXJzdCgp
LmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKLSAgICAgICAgQVNTRVJUKHR5cGVz
LmZpcnN0KCkubWlnaHRCZU51bWJlcigpKTsKLQotICAgICAgICAvLyBDaGVjayBvcDEgaXMgYSBu
dW1iZXIKLSAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVn
ZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpuZSgpOwotICAgICAg
ICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3JjMSk7Ci0gICAgICAg
ICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0
dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDEpIEluIHRoaXMgY2FzZSBzcmMxIGlzIGEgcmV1c2Fi
bGUgbnVtYmVyIGNlbGwuCi0gICAgICAgIC8vICAgICBTbG93IGNhc2UgaWYgc3JjMiBpcyBub3Qg
YSBudW1iZXIgdHlwZS4KLSAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0
VHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKLSAgICAgICAgSm1wU3JjIG9wMmltbSA9IF9fIGpuZSgp
OwotICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7Ci0g
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplZHgsIGksIHNyYzIp
OwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG51
bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2Ojpl
ZHgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5l
KCksIGkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICgxYSkgaWYgd2UgZ2V0IGhlcmUsIHNy
YzIgaXMgYWxzbyBhIG51bWJlciBjZWxsCi0gICAgICAgIF9fIG1vdnNkX21yKEZJRUxEX09GRlNF
VChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0xKTsKLSAgICAgICAg
Sm1wU3JjIGxvYWRlZERvdWJsZSA9IF9fIGptcCgpOwotICAgICAgICAvLyAoMWIpIGlmIHdlIGdl
dCBoZXJlLCBzcmMyIGlzIGFuIGltbWVkaWF0ZQotICAgICAgICBfXyBsaW5rKG9wMmltbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7Ci0gICAg
ICAgIF9fIGN2dHNpMnNkX3JyKFg4Njo6ZWR4LCBYODY6OnhtbTEpOwotICAgICAgICAvLyAoMWMp
IAotICAgICAgICBfXyBsaW5rKGxvYWRlZERvdWJsZSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIF9f
IG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVheCwg
WDg2Ojp4bW0wKTsKLSAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCkKLSAgICAgICAgICAg
IF9fIGFkZHNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0wKTsKLSAgICAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3Bfc3ViKQotICAgICAgICAgICAgX18gc3Vic2RfcnIoWDg2Ojp4bW0xLCBYODY6
OnhtbTApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9tdWwpOwotICAgICAgICAgICAgX18gbXVsc2RfcnIoWDg2Ojp4bW0xLCBYODY6OnhtbTApOwot
ICAgICAgICB9Ci0gICAgICAgIF9fIG1vdnNkX3JtKFg4Njo6eG1tMCwgRklFTERfT0ZGU0VUKEpT
TnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotCi0gICAgICAgIHB1dERvdWJsZVJlc3VsdFRvSlNOdW1iZXJDZWxsT3JK
U0ltbWVkaWF0ZShYODY6OnhtbTAsIFg4Njo6ZWF4LCBkc3QsICZ3YXNKU051bWJlckNlbGwxLCBY
ODY6OnhtbTEsIFg4Njo6ZWN4LCBYODY6OmVkeCk7Ci0gICAgICAgIHdhc0pTTnVtYmVyQ2VsbDFi
ID0gX18gam1wKCk7Ci0KLSAgICAgICAgLy8gKDIpIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBz
cmMxIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCi0gICAgICAgIC8vICAgICBUd28gc2xvdyBjYXNl
cyAtIGVpdGhlciBzcmMyIGlzbid0IGFuIGltbWVkaWF0ZSwgb3IgdGhlIHN1YnRyYWN0IG92ZXJm
bG93cy4KLSAgICAgICAgX18gbGluayhvcDFpbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgIH0gZWxzZQotICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwgaSk7Ci0K
LSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKSB7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhEZVRh
Z0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgIF9fIGFkZGxfcnIoWDg2OjplZHgsIFg4Njo6
ZWF4KTsKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwg
aSkpOwotICAgIH0gZWxzZSAgaWYgKG9wY29kZUlEID09IG9wX3N1YikgewotICAgICAgICBfXyBz
dWJsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChT
bG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1t
ZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbXVsKTsKLSAgICAgICAgLy8gY29udmVydCBlYXggJiBlZHggZnJvbSBKU0ltbWVkaWF0
ZXMgdG8gaW50cywgYW5kIGNoZWNrIGlmIGVpdGhlciBhcmUgemVybwotICAgICAgICBlbWl0RmFz
dEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAgICBKbXBTcmMgb3AxWmVybyA9IGVtaXRG
YXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oWDg2OjplYXgpOwotICAgICAgICBfXyB0
ZXN0bF9ycihYODY6OmVkeCwgWDg2OjplZHgpOwotICAgICAgICBKbXBTcmMgb3AyTm9uWmVybyA9
IF9fIGpuZSgpOwotICAgICAgICBfXyBsaW5rKG9wMVplcm8sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAvLyBpZiBlaXRoZXIgaW5wdXQgaXMgemVybywgYWRkIHRoZSB0d28gdG9nZXRoZXIsIGFuZCBj
aGVjayBpZiB0aGUgcmVzdWx0IGlzIDwgMC4KLSAgICAgICAgLy8gSWYgaXQgaXMsIHdlIGhhdmUg
YSBwcm9ibGVtIChOIDwgMCksIChOICogMCkgPT0gLTAsIG5vdCByZXByZXNlbnRhdGJsZSBhcyBh
IEpTSW1tZWRpYXRlLiAKLSAgICAgICAgX18gbW92bF9ycihYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgICAgICBfXyBhZGRsX3JyKFg4Njo6ZWR4LCBYODY6OmVjeCk7Ci0gICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpzKCksIGkpKTsKLSAgICAgICAgLy8gU2tpcCB0
aGUgYWJvdmUgY2hlY2sgaWYgbmVpdGhlciBpbnB1dCBpcyB6ZXJvCi0gICAgICAgIF9fIGxpbmso
b3AyTm9uWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAgIF9fIGltdWxsX3JyKFg4Njo6ZWR4LCBY
ODY6OmVheCk7Ci0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpv
KCksIGkpKTsKLSAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
LSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgaWYgKHR5cGVz
LnNlY29uZCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKLSAgICAgICAgX18g
bGluayh3YXNKU051bWJlckNlbGwyLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgX18gbGluayh3YXNK
U051bWJlckNlbGwyYiwgX18gbGFiZWwoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGVzLmZp
cnN0KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAgICAgICBfXyBsaW5r
KHdhc0pTTnVtYmVyQ2VsbDEsIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyBsaW5rKHdhc0pTTnVt
YmVyQ2VsbDFiLCBfXyBsYWJlbCgpKTsKLSAgICB9CisgICAgLy8gUGxhbnQgYSBsb2FkIGZyb20g
YSBib2d1cyBvZnNldCBpbiB0aGUgb2JqZWN0J3MgcHJvcGVydHkgbWFwOyB3ZSB3aWxsIHBhdGNo
IHRoaXMgbGF0ZXIsIGlmIGl0IGlzIHRvIGJlIHVzZWQuCisgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsK
KyAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCByZXBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQsIFg4
Njo6ZWF4KTsKKyAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2Vlbkxh
YmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRQdXRCeUlkUHJv
cGVydHlNYXBPZmZzZXQpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93
Q2FzZShPcGNvZGVJRCBvcGNvZGVJRCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlciwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyLCBPcGVyYW5k
VHlwZXMgdHlwZXMsIHVuc2lnbmVkIGkpCit2b2lkIEpJVDo6Y29tcGlsZVB1dEJ5SWRTbG93Q2Fz
ZShpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIqIGlkZW50LCBpbnQsIHVuc2lnbmVkIGksIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIHByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleCkKIHsKLSAgICBKbXBEc3QgaGVyZSA9IF9fIGxhYmVsKCk7Ci0gICAg
X18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKLSAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVz
YWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCku
ZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbCgrK2l0ZXIsIHNyYzEpKQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAg
ICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0
eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgaWYgKGxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMikpCi0gICAgICAgICAgICAgICAgKytp
dGVyOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKLSAgICAgICAgfQot
ICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKLSAgICB9IGVsc2UgaWYgKHR5
cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAgICAgICBp
ZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGlm
IChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzEpKQotICAgICAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewot
ICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMikpCi0g
ICAgICAgICAgICAgICAgKytpdGVyOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBo
ZXJlKTsKLSAgICAgICAgfQotICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7CisgICAg
aWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VWUmVnKSkKKyAgICAgICAgKytp
dGVyOworICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CiAKLSAgICAvLyBhZGRp
dGlvbmFsIGVudHJ5IHBvaW50IHRvIGhhbmRsZSAtMCBjYXNlcy4KLSAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfbXVsKQotICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKyAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0
KTsKKyAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICBlbWl0UHV0Q1RJQXJnKFg4
Njo6ZWR4LCA4KTsKKyAgICBKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfcHV0X2J5X2lkKTsKIAotICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCkKLSAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOwotICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX3N1YikKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9zdWIpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0g
b3BfbXVsKTsKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwp
OwotICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgLy8gVHJhY2sg
dGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHJl
cGF0Y2ggaW5mb3JtYXRpb24uCisgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5dGVjb2RlSW5k
ZXggPT0gaSk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7CiB9CiAKLXZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKLXsKLSAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7Ci0gICAgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuc2l6ZSgpOwot
Ci0gICAgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0gMDsKLSAgICB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCA9IDA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
bV9pbnRlcnByZXRlci0+aXNPcGNvZGUoaW5zdHJ1Y3Rpb25baV0udS5vcGNvZGUpLCAicHJpdmF0
ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgaSk7Ci0KLSNpZiBFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKQotICAgICAgICBpZiAoaSA+IDApIC8vIEF2b2lkIHRoZSBvdmVyaGVhZCBvZiBz
YW1wbGluZyBvcF9lbnRlciB0d2ljZS4KLSAgICAgICAgICAgIF9fIG1vdmxfaTMybShtX2ludGVy
cHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShpbnN0cnVjdGlvbiArIGkpLCBtX2ludGVy
cHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CiAjZW5kaWYKIAotICAgICAgICBtX2xh
YmVsc1tpXSA9IF9fIGxhYmVsKCk7Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gbV9pbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25baV0udS5vcGNvZGUpOwotICAgICAgICBz
d2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIGNhc2Ugb3BfbW92OiB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAg
aWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKQotICAgICAgICAg
ICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
YykpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2FkZDogewotICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0
YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgX18g
YWRkbF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBYODY6OmVheCk7
Ci0gICAgICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8o
KSwgaSkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0
ZU51bWVyaWNBcmcoc3JjMikpIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGFkZGxfaTMycihn
ZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAg
ICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IE9wZXJhbmRUeXBl
czo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgICAg
ICBpZiAodHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkgJiYgdHlwZXMuc2Vjb25kKCkubWln
aHRCZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhPcChv
cF9hZGQsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJv
bUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7Ci0gICAgICAgICAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpICs9IDU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VuZDogewotICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQotICAgICAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZW5kKTsKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwg
WDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gcHVzaGxfbShSZWdpc3RlckZpbGU6OlJldHVy
blBDICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAg
ICAgICAgICAgX18gcmV0KCk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2ptcDogewotICAgICAgICAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1f
am1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBpICsgMSArIHRhcmdldCkpOwotICAg
ICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wcmVfaW5jOiB7Ci0gICAgICAgICAgICBpbnQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
RHN0LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gYWRkbF9pOHIoZ2V0RGVUYWdnZWRDb25z
dGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Ci0gICAgICAgICAg
ICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2xvb3A6IHsKLSAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDEgKyB0YXJn
ZXQpKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1Nj
cmlwdENoZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENv
bnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0g
ICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsK
LSAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKHNyYzJpbW0pLCBYODY6OmVk
eCk7Ci0gICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamwoKSwg
aSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2
OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAg
ICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0g
ICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpsKCksIGkgKyAzICsgdGFyZ2V0
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOiB7Ci0gICAgICAg
ICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSog
c3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7Ci0gICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBY
ODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKHNy
YzJpbW0pLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1w
VGFibGUoX18gamxlKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6
OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4
Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0o
WDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplZHgsIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbGUo
KSwgaSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgKz0gNDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X29iamVj
dDogewotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdf
b2JqZWN0KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZDogewotICAgICAgICAgICAg
Ly8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5k
IHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAgICAgICAgIC8v
IHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0
ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgICAgICAgICAgLy8g
c3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBk
aXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICAgICAgICAgIGludCBiYXNlVlJlZyA9IGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6
ZWR4LCBpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5dGVjb2RlSW5k
ZXggPT0gaSk7Ci0KLSAgICAgICAgICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgZWl0aGVy
IHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9l
cyBub3QgbWF0Y2guCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2
OjplYXgsIGksIGJhc2VWUmVnKTsKLQotICAgICAgICAgICAgSm1wRHN0IGhvdFBhdGhCZWdpbiA9
IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZv
W3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2luID0gaG90UGF0aEJl
Z2luOwotICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7Ci0KLSAg
ICAgICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rp
b24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBpbiBvcmRlciB0aGF0IGl0IGNhbiBiZSBwYXRj
aGVkIG92ZXIuCi0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVwYXRjaEdldEJ5SWREZWZhdWx0
U3RydWN0dXJlLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFi
ZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18g
am5lKCksIGkpKTsKLQotICAgICAgICAgICAgLy8gUGxhbnQgYSBsb2FkIGZyb20gYSBib2d1cyBv
ZnNldCBpbiB0aGUgb2JqZWN0J3MgcHJvcGVydHkgbWFwOyB3ZSB3aWxsIHBhdGNoIHRoaXMgbGF0
ZXIsIGlmIGl0IGlzIHRvIGJlIHVzZWQuCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwot
ICAgICAgICAgICAgX18gbW92bF9ybShYODY6OmVkeCwgcmVwYXRjaEdldEJ5SWREZWZhdWx0T2Zm
c2V0LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZm
ZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hP
ZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOwotCi0gICAgICAgICAgICBpICs9IDg7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDog
ewotICAgICAgICAgICAgLy8gQXMgZm9yIHB1dF9ieV9pZCwgZ2V0X2J5X2lkIHJlcXVpcmVzIHRo
ZSBvZmZzZXQgb2YgdGhlIFN0cnVjdHVyZSBhbmQgdGhlIG9mZnNldCBvZiB0aGUgYWNjZXNzIHRv
IGJlIHJlcGF0Y2hlZC4KLSAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgZm9yIGdldF9ieV9p
ZCB3ZSBuZWVkIHJlcGF0Y2ggdGhlIG9mZnNldCBvZiB0aGUgYnJhbmNoIHRvIHRoZSBzbG93IGNh
c2UgKHdlIHJlcGF0Y2ggdGhpcyB0byBqdW1wCi0gICAgICAgICAgICAvLyB0byBhcnJheS1sZW5n
dGggLyBwcm90b3R5cGUgYWNjZXNzIHRyYW5wb2xpbmVzLCBhbmQgZmluYWxseSB3ZSBhbHNvIHRo
ZSB0aGUgcHJvcGVydHktbWFwIGFjY2VzcyBvZmZzZXQgYXMgYSBsYWJlbAotICAgICAgICAgICAg
Ly8gdG8ganVtcCBiYWNrIHRvIGlmIG9uZSBvZiB0aGVzZSB0cmFtcG9saWVzIGZpbmRzIGEgbWF0
Y2guCi0KLSAgICAgICAgICAgIGludCBiYXNlVlJlZyA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBYODY6
OmVheCwgaSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUlu
ZGV4ID09IGkpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2
OjplYXgsIGksIGJhc2VWUmVnKTsKLQotICAgICAgICAgICAgSm1wRHN0IGhvdFBhdGhCZWdpbiA9
IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZv
W3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2luID0gaG90UGF0aEJl
Z2luOwotICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7Ci0KLSAg
ICAgICAgICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUsIEZJ
RUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAg
QVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJl
Z2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwot
ICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJl
bHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5j
aFRvU2xvd0Nhc2UpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09i
amVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgX18gbW92bF9tcihyZXBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQsIFg4Njo6ZWF4LCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0
d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRHZXRC
eUlkUHJvcGVydHlNYXBPZmZzZXQpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgaSArPSA4Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9m
OiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsgLy8gdmFsdWUKLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkp
OyAvLyBiYXNlVmFsCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyA0XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcHJvdG8KLQotICAgICAgICAg
ICAgLy8gY2hlY2sgaWYgYW55IGFyZSBpbW1lZGlhdGVzCi0gICAgICAgICAgICBfXyBvcmxfcnIo
WDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIG9ybF9ycihYODY6OmVkeCwgWDg2
OjplY3gpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywg
WDg2OjplY3gpOwotCi0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqbnooKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBjaGVjayB0aGF0IGFsbCBhcmUgb2Jq
ZWN0IHR5cGUgLSB0aGlzIGlzIGEgYml0IG9mIGEgYml0aGFjayB0byBhdm9pZCBleGNlc3MgYnJh
bmNoaW5nOwotICAgICAgICAgICAgLy8gd2UgY2hlY2sgdGhhdCB0aGUgc3VtIG9mIHRoZSB0aHJl
ZSB0eXBlIGNvZGVzIGZyb20gU3RydWN0dXJlcyBpcyBleGFjdGx5IDMgKiBPYmplY3RUeXBlLAot
ICAgICAgICAgICAgLy8gdGhpcyB3b3JrcyBiZWNhdXNlIE51bWJlclR5cGUgYW5kIFN0cmluZ1R5
cGUgYXJlIHNtYWxsZXIKLSAgICAgICAgICAgIF9fIG1vdmxfaTMycigzICogT2JqZWN0VHlwZSwg
WDg2OjplY3gpOwotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBt
X3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplZHgsIFg4Njo6ZWR4KTsK
LSAgICAgICAgICAgIF9fIHN1YmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5m
by5tX3R5cGUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc3VibF9tcihG
SUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSksIFg4Njo6ZWR4LCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcmVsb2FkIGJhc2VWYWwKLSAgICAgICAg
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVk
eCwgWDg2OjplZHgpOwotICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVjeCwgRklFTERfT0ZG
U0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVkeCk7Ci0KLSAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAg
ICAgICAgICAgIC8vIGNoZWNrIHRoYXQgYmFzZVZhbCdzIGZsYWdzIGluY2x1ZGUgSW1wbGVtZW50
c0hhc0luc3RhbmNlIGJ1dCBub3QgT3ZlcnJpZGVzSGFzSW5zdGFuY2UKLSAgICAgICAgICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2
OjplZHgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGFuZGxfaTMycihJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBPdmVycmlkZXNIYXNJbnN0YW5jZSwgWDg2OjplY3gpOwotICAgICAgICAgICAg
X18gY21wbF9pMzJyKEltcGxlbWVudHNIYXNJbnN0YW5jZSwgWDg2OjplY3gpOwotCi0gICAgICAg
ICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIFg4Njo6ZWN4LCBpKTsgLy8gcmVsb2FkIHZhbHVlCi0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBp
KTsgLy8gcmVsb2FkIHByb3RvCi0KLSAgICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGxvYWQg
dHJ1ZSByZXN1bHQKLSAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFu
KHRydWUpKSwgWDg2OjplYXgpOwotCi0gICAgICAgICAgICBKbXBEc3QgbG9vcCA9IF9fIGxhYmVs
KCk7Ci0KLSAgICAgICAgICAgIC8vIGxvYWQgdmFsdWUncyBwcm90b3R5cGUKLSAgICAgICAgICAg
IF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVjeCwg
WDg2OjplY3gpOwotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJl
LCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIF9fIGNtcGxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIEptcFNy
YyBleGl0ID0gX18gamUoKTsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihq
c051bGwoKSksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIEptcFNyYyBnb1RvTG9vcCA9IF9fIGpu
ZSgpOwotICAgICAgICAgICAgX18gbGluayhnb1RvTG9vcCwgbG9vcCk7Ci0KLSAgICAgICAgICAg
IF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKGZhbHNlKSksIFg4Njo6ZWF4KTsKLQot
ICAgICAgICAgICAgX18gbGluayhleGl0LCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLQotICAg
ICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9kZWxfYnlfaWQ6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAg
ICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNb
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV9pZCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9tdWw6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotCi0gICAgICAgICAgICAvLyBGb3Igbm93LCBv
bmx5IHBsYW50IGEgZmFzdCBpbnQgY2FzZSBpZiB0aGUgY29uc3RhbnQgb3BlcmFuZCBpcyBncmVh
dGVyIHRoYW4gemVyby4KLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzFWYWx1ZSA9IGdldENvbnN0
YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKTsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJW
YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKTsKLSAgICAgICAgICAg
IGludDMyX3QgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoc3JjMVZhbHVlICYmICgodmFsdWUgPSBK
U0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMVZhbHVlKSkgPiAwKSkgewotICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAg
ICAgICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
ICAgICBfXyBpbXVsbF9pMzJyKFg4Njo6ZWF4LCB2YWx1ZSwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAg
ICAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAg
ICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3JjMlZhbHVlICYmICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3Jj
MlZhbHVlKSkgPiAwKSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMSwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aERlVGFn
SW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBpbXVsbF9pMzJyKFg4Njo6
ZWF4LCB2YWx1ZSwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAgICAgICBlbWl0RmFzdEFy
aXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNv
bXBpbGVCaW5hcnlBcml0aE9wKG9wX211bCwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwg
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpLCBp
KTsKLQotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewotICAgICAgICAgICAgRnVuY0RlY2xOb2RlKiBm
dW5jID0gKG1fY29kZUJsb2NrLT5mdW5jdGlvbnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZF0pLmdldCgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMpLCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfbmV3X2Z1bmMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0g
MzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY2FsbDoK
LSAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7
Ci0gICAgICAgICAgICBjb21waWxlT3BDYWxsKG9wY29kZUlELCBpbnN0cnVjdGlvbiArIGksIGks
IGNhbGxMaW5rSW5mb0luZGV4KyspOwotICAgICAgICAgICAgaSArPSAob3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0ID8gNyA6IDUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogewotICAgICAgICAgICAgSlNWYXJpYWJsZU9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGluc3RydWN0
aW9uW2kgKyAyXS51LmpzQ2VsbCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2Vy
KGdsb2JhbE9iamVjdCksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRHZXRWYXJpYWJsZU9i
amVjdFJlZ2lzdGVyKFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewotICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBY
ODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaW5zdHJ1Y3Rpb25baSArIDFdLnUuanND
ZWxsKTsKLSAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoZ2xvYmFsT2JqZWN0KSwg
WDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2
OjplZHgsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfZ2V0X3Njb3BlZF92YXI6IHsKLSAgICAgICAgICAgIGludCBza2lwID0gaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluOwotCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFp
biwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgd2hpbGUgKHNraXAtLSkKLSAgICAgICAgICAg
ICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwgbmV4dCksIFg4Njo6
ZWF4LCBYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFNj
b3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAg
ZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zY29wZWRf
dmFyOiB7Ci0gICAgICAgICAgICBpbnQgc2tpcCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbjsKLQotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIFg4Njo6ZWR4LCBp
KTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgd2hpbGUgKHNraXAtLSkKLSAg
ICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwgbmV4
dCksIFg4Njo6ZWR4LCBYODY6OmVkeCk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6OmVkeCwgWDg2OjplZHgpOwotICAg
ICAgICAgICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2OjplYXgsIFg4Njo6ZWR4
LCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0
aXZhdGlvbjogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKTsK
LSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICBpICs9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X3JldDogewotICAgICAgICAgICAgLy8gV2UgY291bGQgSklUIGdlbmVyYXRlIHRoZSBkZXJlZiwg
b25seSBjYWxsaW5nIG91dCB0byBDIHdoZW4gdGhlIHJlZmNvdW50IGhpdHMgemVyby4KLSAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKLSAgICAgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3JldF9zY29wZUNoYWluKTsK
LQotICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2
OjplYXgsIGkpOwotCi0gICAgICAgICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywg
WDg2OjplZHgsIGkpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIG91ciBjYWxsZXIncyAiciIu
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVy
RnJhbWUsIFg4Njo6ZWRpLCBpKTsKLQotICAgICAgICAgICAgLy8gUmV0dXJuLgotICAgICAgICAg
ICAgX18gcHVzaGxfcihYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyByZXQoKTsKLQotICAgICAg
ICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9uZXdfYXJyYXk6IHsKLSAgICAgICAgICAgIF9fIGxlYWxfbXIoc2l6ZW9mKFJlZ2lzdGVy
KSAqIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWRpLCBYODY6OmVkeCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0KTsKLSAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2FycmF5KTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3Jlc29sdmU6IHsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX3Jlc29sdmUpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZlcmlmeTogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0KLSAgICAgICAgICAgIF9fIHRlc3Rs
X2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNy
YyBpc0ltbWVkaWF0ZSA9IF9fIGpuZSgpOwotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBfXyBjbXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90
eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAg
ICAgICAgICAgIEptcFNyYyBpc09iamVjdCA9IF9fIGplKCk7Ci0KLSAgICAgICAgICAgIF9fIGxp
bmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgX18gbGluayhpc09iamVjdCwgX18gbGFiZWwoKSk7Ci0KLSAgICAg
ICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZ2V0X2J5X3ZhbDogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9J
bnQoWDg2OjplZHgpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFn
TWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgp
OwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCks
IGkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhcnJheTsgZ2V0IHRoZSBtX3N0b3Jh
Z2UgcG9pbnRlciBpbnRvIGVjeCwgdGhlbiBjaGVjayBpZiB0aGUgaW5kZXggaXMgYmVsb3cgdGhl
IGZhc3QgY3V0b2ZmCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0FycmF5
LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gY21wbF9y
bShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fZmFzdEFjY2Vzc0N1dG9mZiksIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9f
IGpiZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUgZnJvbSB0aGUgdmVj
dG9yCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Z1bmM6IHsKLSAgICAgICAgICAgIElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfZnVuYyk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6
ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N1YjogewotICAgICAgICAgICAgY29tcGlsZUJp
bmFyeUFyaXRoT3Aob3Bfc3ViLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBPcGVy
YW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCksIGkpOwotICAg
ICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1U
b0ludChYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpU
YWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIpLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUo
KSwgaSkpOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFycmF5OyBnZXQgdGhlIG1fc3Rv
cmFnZSBwb2ludGVyIGludG8gZWN4LCB0aGVuIGNoZWNrIGlmIHRoZSBpbmRleCBpcyBiZWxvdyB0
aGUgZmFzdCBjdXRvZmYKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQXJy
YXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBs
X3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9mYXN0QWNjZXNzQ3V0b2ZmKSwg
WDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGluRmFzdFZlY3RvciA9IF9fIGphKCk7Ci0g
ICAgICAgICAgICAvLyBObzsgb2ggd2VsbCwgY2hlY2sgaWYgdGhlIGFjY2VzcyBpZiB3aXRoaW4g
dGhlIHZlY3RvciAtIGlmIHNvLCB3ZSBtYXkgc3RpbGwgYmUgb2theS4KLSAgICAgICAgICAgIF9f
IGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yTGVu
Z3RoKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gamJlKCksIGkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHdyaXRlIHRv
IHRoZSBzbG93IHBhcnQgb2YgdGhlIHZlY3RvcjsgZmlyc3QsIHdlIGhhdmUgdG8gY2hlY2sgaWYg
dGhpcyB3b3VsZCBiZSB0aGUgZmlyc3Qgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbi4KLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgaW5pdGlhbCB3cml0ZSB0byBh
cnJheTsgaW5jcmVtZW50IHRoZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhcnJheSwgYW5k
IHBvdGVudGlhbGx5IHVwZGF0ZSBmYXN0IGFjY2VzcyBjdXRvZmYuIAotICAgICAgICAgICAgX18g
Y21wbF9pOG0oMCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pLCBYODY6
OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKikpOwotICAgICAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamUoKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBB
bGwgZ29vZCAtIHB1dCB0aGUgdmFsdWUgaW50byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBfXyBs
aW5rKGluRmFzdFZlY3RvciwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAg
ICAgICAgICAgIF9fIG1vdmxfcm0oWDg2OjplYXgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopKTsKLSAg
ICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9sZXNzZXEpCi0gICAgICAgIGNhc2Ugb3BfbG9vcF9p
Zl90cnVlOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kLCBYODY6OmVheCwgaSk7Ci0KLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIo
SlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEpt
cFNyYyBpc1plcm8gPSBfXyBqZSgpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVk
aWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fam1wVGFi
bGUuYXBwZW5kKEptcFRhYmxlKF9fIGpuZSgpLCBpICsgMiArIHRhcmdldCkpOwotCi0gICAgICAg
ICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBq
ZSgpLCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdl
cihKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAg
ICAgICAgIF9fIGxpbmsoaXNaZXJvLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGkgKz0gMzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotICAgICAgICBjYXNlIG9wX3Jlc29sdmVf
YmFzZTogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAw
KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2
ZV9iYXNlKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25lZ2F0ZTogewotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9uZWdhdGUpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9za2lwOiB7Ci0g
ICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJz
W2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQg
KyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiwgNCk7Ci0gICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfc2tpcCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDogewotICAgICAgICAgICAgLy8gRmFzdCBjYXNlCi0g
ICAgICAgICAgICB1bnNpZ25lZCBnbG9iYWxPYmplY3QgPSBhc0ludGVnZXIoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUuanNDZWxsKTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOwotICAg
ICAgICAgICAgdm9pZCogc3RydWN0dXJlQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGluc3RydWN0aW9uICsgaSArIDQpOwotICAgICAgICAgICAgdm9pZCogb2Zmc2V0QWRkciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3RydWN0aW9uICsgaSArIDUpOwotCi0gICAgICAgICAg
ICAvLyBDaGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVjdAotICAgICAgICAgICAgX18gbW92
bF9pMzJyKGdsb2JhbE9iamVjdCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gbW92bF9tcihz
dHJ1Y3R1cmVBZGRyZXNzLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6
ZWR4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIEptcFNyYyBub01hdGNoID0gX18gam5lKCk7IC8vIFN0cnVjdHVyZXMgZG9uJ3QgbWF0
Y2gKLQotICAgICAgICAgICAgLy8gTG9hZCBjYWNoZWQgcHJvcGVydHkKLSAgICAgICAgICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTR2xvYmFsT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSks
IFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKG9mZnNldEFkZHIs
IFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoMCwgWDg2OjplYXgsIFg4Njo6ZWR4
LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgSm1w
U3JjIGVuZCA9IF9fIGptcCgpOwotCi0gICAgICAgICAgICAvLyBTbG93IGNhc2UKLSAgICAgICAg
ICAgIF9fIGxpbmsobm9NYXRjaCwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnQ29uc3RhbnQoZ2xvYmFsT2JqZWN0LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdD
b25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGluc3Ry
dWN0aW9uICsgaSksIDgpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgX18gbGluayhl
bmQsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgaSArPSA2OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX2RpdikKLSAgICAg
ICAgY2FzZSBvcF9wcmVfZGVjOiB7Ci0gICAgICAgICAgICBpbnQgc3JjRHN0ID0gaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gc3VibF9pOHIoZ2V0RGVUYWdnZWRD
b25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBp
KSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Ci0gICAgICAg
ICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2pubGVzczogewotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25z
dGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpZiAoc3JjMmltbSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAg
ICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0g
ICAgICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihzcmMyaW1tKSwgWDg2OjplZHgp
OwotICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpnZSgpLCBp
ICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6
OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAg
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAg
ICAgICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamdlKCksIGkgKyAzICsgdGFyZ2V0
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25vdDogewotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwg
aSk7Ci0gICAgICAgICAgICBfXyB4b3JsX2k4cihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29s
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpGdWxs
VGFnVHlwZU1hc2ssIFg4Njo6ZWF4KTsgLy8gaTg/Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICAgICAgX18geG9ybF9p
OHIoKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wgfCBKU0ltbWVkaWF0ZTo6RXh0ZW5kZWRQ
YXlsb2FkQml0Qm9vbFZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkg
Kz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfamZh
bHNlOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0KLSAgICAgICAgICAgIF9fIGNtcGxf
aTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsg
dGFyZ2V0KSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRU
eXBlSW50ZWdlciwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGlzTm9uWmVybyA9IF9f
IGpuZSgpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRl
OjpmYWxzZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5h
cHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIF9f
IGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSksIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpu
ZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXNOb25aZXJvLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotICAg
ICAgICBjYXNlIG9wX2plcV9udWxsOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIo
SlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc0lt
bWVkaWF0ZSA9IF9fIGpueigpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZGU0VUKFN0cnVj
dHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0
bnpfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIEptcFNyYyB3YXNOb3RJbW1lZGlhdGUgPSBf
XyBqbXAoKTsKLQotICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7
Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0
VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBhbmRsX3JyKFg4Njo6ZWF4LCBY
ODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdU
eXBlTnVsbCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKLQot
ICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAg
ICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9f
IGNtcGxfaTMycigwLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChK
bXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsgICAgICAgICAgICAKLQotICAgICAg
ICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH07Ci0gICAgICAgIGNh
c2Ugb3Bfam5lcV9udWxsOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1l
ZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc0ltbWVkaWF0
ZSA9IF9fIGpueigpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Nl
bGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHRl
c3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwg
bV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0el9yKFg4
Njo6ZWF4KTsKLQotICAgICAgICAgICAgSm1wU3JjIHdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgp
OwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAg
ICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmlu
ZWQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4
KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxs
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6ZWF4KTsKLQotICAgICAg
ICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAg
ICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIGNtcGxf
aTMycigwLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJs
ZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsgICAgICAgICAgICAKLQotICAgICAgICAgICAg
aSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9w
b3N0X2luYzogewotICAgICAgICAgICAgaW50IHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2
OjplYXgsIGkpOwotICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVheCwgWDg2OjplZHgpOwot
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAg
ICAgICAgICAgIF9fIGFkZGxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1l
ZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X3VuZXhwZWN0ZWRfbG9hZDogewotICAgICAgICAgICAgSlNWYWx1ZSogdiA9IG1fY29kZUJsb2Nr
LT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdOwotICAg
ICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcih2KSwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfanNyOiB7Ci0gICAgICAgICAgICBpbnQgcmV0QWRkckRzdCA9IGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgdGFyZ2V0ID0gaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIG1vdmxfaTMybSgwLCBzaXplb2Yo
UmVnaXN0ZXIpICogcmV0QWRkckRzdCwgWDg2OjplZGkpOwotICAgICAgICAgICAgSm1wRHN0IGFk
ZHJQb3NpdGlvbiA9IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChK
bXBUYWJsZShfXyBqbXAoKSwgaSArIDIgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIEptcERzdCBz
cmV0VGFyZ2V0ID0gX18gbGFiZWwoKTsKLSAgICAgICAgICAgIG1fanNyU2l0ZXMuYXBwZW5kKEpT
UkluZm8oYWRkclBvc2l0aW9uLCBzcmV0VGFyZ2V0KSk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3NyZXQ6IHsKLSAg
ICAgICAgICAgIF9fIGptcF9tKHNpemVvZihSZWdpc3RlcikgKiBpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kLCBYODY6OmVkaSk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VxOiB7Ci0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVh
eCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIGkpOwot
ICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAgICAg
X18gc2V0ZV9yKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwg
WDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShYODY6OmVheCk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9sc2hpZnQ6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0
cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIGVtaXRGYXN0
QXJpdGhJbW1Ub0ludChYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9J
bnQoWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2hsbF9DTHIoWDg2OjplYXgpOwotICAgICAg
ICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tT3JTbG93Q2FzZShYODY6OmVheCwgaSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9
IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkc3Qg
PSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaWYgKEpTVmFsdWUq
IHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7Ci0gICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBYODY6OmVheCwgaSk7Ci0gICAg
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAg
ICAgICAgICAgICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwgWDg2OjplYXgpOyAv
LyBGSVhNRTogbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhpcyBpcyByZWx5aW5nIG9uIHRoZSBmb3Jt
YXQgb2YgSlNJbW1lZGlhdGUKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3Rh
bnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBh
bmRsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgsIHNyYzIsIFg4
Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBhbmRsX3JyKFg4Njo6ZWR4LCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4
LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAgICAgICAgICAgdW5zaWduZWQgc3Jj
MSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBz
cmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlmIChKU1Zh
bHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgewotICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOwot
ICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICAgICAgLy8gTWFzayB3aXRoIDB4MWYgYXMgcGVyIGVjbWEtMjYyIDExLjcu
MiBzdGVwIDcuCi0gICAgICAgICAgICAgICAgX18gc2FybF9pOHIoSlNJbW1lZGlhdGU6OmdldFRy
dW5jYXRlZFVJbnQzMih2YWx1ZSkgJiAweDFmLCBYODY6OmVheCk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6
ZWF4LCBzcmMyLCBYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJp
dGhJbW1Ub0ludChYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgX18gc2FybF9DTHIoWDg2Ojpl
YXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZW1pdEZhc3RBcml0aFBvdGVudGlhbGx5
UmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0bm90OiB7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyB4b3JsX2k4cih+SlNJbW1lZGlh
dGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
aSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9y
ZXNvbHZlX3dpdGhfYmFzZTogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kXSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4oaWRlbnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9uZXdfZnVuY19leHA6IHsKLSAgICAgICAgICAgIEZ1bmNFeHByTm9kZSogZnVu
YyA9IChtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByZXNzaW9uc1tpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kXSkuZ2V0KCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oZnVuYyksIDApOwotICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZnVuY19leHApOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfbW9kOiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZCwgWDg2OjplY3gsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bShYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUo
WDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnko
ZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlSnVtcElmWmVybyhYODY6OmVjeCksIGkpKTsKLSAg
ICAgICAgICAgIF9fIGNkcSgpOwotICAgICAgICAgICAgX18gaWRpdmxfcihYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplZHgpOwotICAgICAg
ICAgICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfanRydWU6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgX18g
Y21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgSm1wU3JjIGlzWmVybyA9IF9fIGplKCk7Ci0gICAgICAgICAgICBf
XyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOwot
ICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam5lKCksIGkgKyAyICsg
dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlh
dGU6OnRydWVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fam1wVGFibGUu
YXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBf
XyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpKSwgWDg2
OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18g
am5lKCksIGkpKTsKLQotICAgICAgICAgICAgX18gbGluayhpc1plcm8sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX2xlc3MpCi0gICAgICAgIGNhc2Ugb3BfbmVxOiB7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2Ojpl
ZHgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVh
eCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVheCwgWDg2Ojpl
ZHgpOwotCi0gICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9f
IG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFRhZ0FzQm9v
bEltbWVkaWF0ZShYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0KLSAgICAgICAgICAgIGkgKz0gNDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcG9zdF9kZWM6
IHsKLSAgICAgICAgICAgIGludCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
OwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWF4LCBp
KTsKLSAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplYXgsIFg4Njo6ZWR4KTsKLSAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAg
ICBfXyBzdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpv
bmVJbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAz
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQ1RJX0NPTVBJTEVfQklO
QVJZX09QKG9wX3Vyc2hpZnQpCi0gICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBY
ODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgs
IGkpOwotICAgICAgICAgICAgX18geG9ybF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAg
ICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX25ld19yZWdleHA6IHsKLSAgICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gbV9j
b2RlQmxvY2stPnJlZ2V4cHNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0uZ2V0KCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4ocmVnRXhwKSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX25ld19yZWdleHApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKLSAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7
Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6
OmVkeCwgaSk7Ci0gICAgICAgICAgICBfXyBvcmxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3Rocm93OiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Rocm93
KTsKLSAgICAgICAgICAgIF9fIGFkZGxfaThyKDB4MjAsIFg4Njo6ZXNwKTsKLSAgICAgICAgICAg
IF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgICAgICAgICBfXyBwb3BsX3IoWDg2OjplZGkpOwot
ICAgICAgICAgICAgX18gcG9wbF9yKFg4Njo6ZXNpKTsKLSAgICAgICAgICAgIF9fIHJldCgpOwot
ICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9wbmFt
ZXMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV4dF9wbmFtZTogewotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfbmV4dF9wbmFtZSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVh
eCwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGVuZE9mSXRlciA9IF9fIGplKCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam1wKCks
IGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBfXyBsaW5rKGVuZE9mSXRlciwgX18gbGFi
ZWwoKSk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3B1c2hfc2NvcGU6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
cHVzaF9zY29wZSk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3BvcF9zY29wZTogewotICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3Bfc2NvcGUpOwotICAgICAgICAgICAgaSAr
PSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQ1RJX0NPTVBJTEVf
VU5BUllfT1Aob3BfdHlwZW9mKQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc191
bmRlZmluZWQpCi0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX2Jvb2xlYW4pCi0g
ICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX251bWJlcikKLSAgICAgICAgQ1RJX0NP
TVBJTEVfVU5BUllfT1Aob3BfaXNfc3RyaW5nKQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9P
UChvcF9pc19vYmplY3QpCi0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX2Z1bmN0
aW9uKQotICAgICAgICBjYXNlIG9wX3N0cmljdGVxOiB7Ci0gICAgICAgICAgICBjb21waWxlT3BT
dHJpY3RFcShpbnN0cnVjdGlvbiArIGksIGksIE9wU3RyaWN0RXEpOwotICAgICAgICAgICAgaSAr
PSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uc3Ry
aWN0ZXE6IHsKLSAgICAgICAgICAgIGNvbXBpbGVPcFN0cmljdEVxKGluc3RydWN0aW9uICsgaSwg
aSwgT3BOU3RyaWN0RXEpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90b19qc251bWJlcjogewotICAgICAgICAgICAg
aW50IHNyY1ZSZWcgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRl
Z2VyLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgd2FzSW1tZWRpYXRlID0gX18gam56
KCk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwg
aSwgc3JjVlJlZyk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2Vs
bCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gY21w
bF9pMzJtKE51bWJlclR5cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90
eXBlKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBfXyBsaW5rKHdhc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2luOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2luKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1c2hfbmV3X3Njb3BlOiB7
Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX25ld19zY29wZSk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9jYXRjaDogewotICAgICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX2NhbGxGcmFt
ZSwgWDg2OjplZGkpOyAvLyBlZGkgOj0gcgotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam1wX3Njb3Bl
czogewotICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGNvdW50LCAwKTsKLSAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfam1wX3Njb3Blcyk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam1wKCksIGkg
KyAyICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDogewotICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgOCwgWDg2
OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9w
dXRfYnlfaW5kZXgpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
OwotICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUu
b3BlcmFuZDsKLQotICAgICAgICAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgICAgICAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1l
ZGlhdGUpKTsKLSAgICAgICAgICAgIGp1bXBUYWJsZS0+Y3RpT2Zmc2V0cy5ncm93KGp1bXBUYWJs
ZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkpOwotCi0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX2ltbSk7Ci0gICAgICAgICAgICBfXyBq
bXBfcihYODY6OmVheCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZDsKLQotICAgICAgICAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICAgICAgICAg
IFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5jaGFyYWN0ZXJTd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgICAgICAgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpD
aGFyYWN0ZXIpKTsKLSAgICAgICAgICAgIGp1bXBUYWJsZS0+Y3RpT2Zmc2V0cy5ncm93KGp1bXBU
YWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkpOwotCi0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0KTsKLSAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX2NoYXIpOwotICAgICAgICAgICAg
X18gam1wX3IoWDg2OjplYXgpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICAg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgICAgICAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCkpOwotCi0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0KTsK
LSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX3N0
cmluZyk7Ci0gICAgICAgICAgICBfXyBqbXBfcihYODY6OmVheCk7Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlbF9i
eV92YWw6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfZGVsX2J5X3ZhbCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfZ2V0dGVyOiB7
Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgOCwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRf
Z2V0dGVyKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3NldHRlcjogewotICAgICAgICAgICAgZW1pdFB1dENU
SUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwg
WDg2OjplY3gpOwotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQp
LCA0KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X3NldHRlcik7Ci0gICAgICAgICAgICBp
ICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25l
d19lcnJvcjogewotICAgICAgICAgICAgSlNWYWx1ZSogbWVzc2FnZSA9IG1fY29kZUJsb2NrLT51
bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdOwotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQs
IDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGFzSW50ZWdlcihtZXNzYWdl
KSwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQobV9jb2RlQmxvY2stPmxp
bmVOdW1iZXJGb3JWUEMoJmluc3RydWN0aW9uW2ldKSwgOCk7Ci0gICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19lcnJvcik7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9kZWJ1ZzogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0
YW50KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQpOwotICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgpOwotICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWJ1Zyk7Ci0gICAgICAg
ICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2VxX251bGw6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRl
OjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBf
XyBqbnooKTsKLQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBt
X3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9p
MzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlw
ZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNldG56X3IoWDg2Ojpl
YXgpOwotCi0gICAgICAgICAgICBKbXBTcmMgd2FzTm90SW1tZWRpYXRlID0gX18gam1wKCk7Ci0K
LSAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAg
ICAgICBfXyBtb3ZsX2kzMnIofkpTSW1tZWRpYXRlOjpFeHRlbmRlZFRhZ0JpdFVuZGVmaW5lZCwg
WDg2OjplY3gpOwotICAgICAgICAgICAgX18gYW5kbF9ycihYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZU51bGwsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNldGVfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAg
IF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18g
bW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0VGFnQXNCb29s
SW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLQotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogewotICAgICAgICAgICAgdW5zaWduZWQgZHN0
ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNy
YzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotCi0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHRlc3Rs
X2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNy
YyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAg
ICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZGU0VU
KFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOwotICAgICAgICAgICAg
X18gc2V0el9yKFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgSm1wU3JjIHdhc05vdEltbWVkaWF0
ZSA9IF9fIGptcCgpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJl
bCgpKTsKLQotICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRU
YWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6RnVs
bFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6ZWF4
KTsKLQotICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwot
Ci0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VudGVyOiB7Ci0gICAgICAgICAg
ICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIg
Y29uc3RhbnQKLSAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMs
IHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwotICAgICAgICAgICAgLy8gb2JqZWN0
IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgICAgICAgICAgc2l6ZV90
IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMgKyBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBjb3VudDsg
KytqKQotICAgICAgICAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIoaik7Ci0KLSAgICAgICAgICAg
IGkrPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9l
bnRlcl93aXRoX2FjdGl2YXRpb246IHsKLSAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBk
b2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAotICAgICAgICAgICAg
Ly8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nhcmls
eSBwcm9sb25naW5nCi0gICAgICAgICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNp
bmcgR0MgcHJlc3N1cmUuCi0gICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+
bnVtVmFycyArIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNvdW50OyArK2opCi0gICAgICAgICAgICAgICAg
ZW1pdEluaXRSZWdpc3RlcihqKTsKLQotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24pOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAg
aSs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2Ny
ZWF0ZV9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIChtX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycyA9PSAxKSA/IEludGVycHJldGVyOjpjdGlfb3BfY3JlYXRlX2FyZ3Vt
ZW50c19ub19wYXJhbXMgOiBJbnRlcnByZXRlcjo6Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHMpOwot
ICAgICAgICAgICAgaSArPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgsIGkpOwotICAgICAg
ICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6
ZWF4LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE5lZWRzVGhpc0NvbnZl
cnNpb24sIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6
ZWR4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpu
eigpLCBpKSk7Ci0KLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsKLSAgICAgICAgICAg
IGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSwgWDg2OjplYXgpOwot
ICAgICAgICAgICAgX18gY21wbF9pMzJtKDAsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNy
YyBub1Byb2ZpbGVyID0gX18gamUoKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJvZmlsZV93
aWxsX2NhbGwpOwotICAgICAgICAgICAgX18gbGluayhub1Byb2ZpbGVyLCBfXyBsYWJlbCgpKTsK
LQotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOiB7Ci0gICAgICAgICAgICBlbWl0R2V0Q1RJ
UGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2UsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IF9fIGNtcGxfaTMybSgwLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgbm9Qcm9maWxl
ciA9IF9fIGplKCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwpOwot
ICAgICAgICAgICAgX18gbGluayhub1Byb2ZpbGVyLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAg
ICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9nZXRfYXJyYXlfbGVuZ3RoOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKLSAg
ICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWRfcHJvdG86Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6Ci0gICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGZf
bGlzdDoKLSAgICAgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKLSAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToK
LSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbjoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUKHByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbnMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2Rl
QmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgpKTsKK3N0YXRpYyBKU09iamVjdCogcmVzaXplUHJv
cGVydHlTdG9yYWdlKEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpCit7CisgICAgYmFzZU9iamVjdC0+YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VJbmxp
bmUob2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgcmV0dXJuIGJhc2VPYmplY3Q7CiB9CiAKLQotdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQorc3RhdGljIGlubGluZSBib29sIHRyYW5z
aXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSkKIHsKLSAgICB1bnNpZ25lZCBqbXBUYWJsZUNvdW50ID0gbV9q
bXBUYWJsZS5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGptcFRhYmxlQ291
bnQ7ICsraSkKLSAgICAgICAgX18gbGluayhtX2ptcFRhYmxlW2ldLmZyb20sIG1fbGFiZWxzW21f
am1wVGFibGVbaV0udG9dKTsKLSAgICBtX2ptcFRhYmxlLmNsZWFyKCk7CisgICAgcmV0dXJuIG9s
ZFN0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPnBy
b3BlcnR5U3RvcmFnZUNhcGFjaXR5KCk7CiB9CiAKLSNkZWZpbmUgQ1RJX0NPTVBJTEVfQklOQVJZ
X09QX1NMT1dfQ0FTRShuYW1lKSBcCi0gICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsgXAotICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7
IFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCi0gICAgICAgIGkgKz0gNDsgXAot
ICAgICAgICBicmVhazsgXAotICAgIH0KK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRU
cmFuc2l0aW9uKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB2b2lkKiByZXR1
cm5BZGRyZXNzKQoreworICAgIFZlY3RvcjxKbXBTcmMsIDE2PiBmYWlsdXJlQ2FzZXM7CisgICAg
Ly8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgorICAgIF9f
IHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdD4ob2xkU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1
cmUpLCBYODY6OmVheCk7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7CisgICAg
VmVjdG9yPEptcFNyYz4gc3VjY2Vzc0Nhc2VzOwogCi0jZGVmaW5lIENUSV9DT01QSUxFX0JJTkFS
WV9PUF9TTE9XX0NBU0VfRE9VQkxFX0VOVFJZKG5hbWUpIFwKLSAgICBjYXNlIG5hbWU6IHsgXAot
ICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOyBcCi0gICAgICAgIF9fIGxp
bmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOyAgICAgICAgICAgICAgICBcCi0gICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7IFwKLSAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV8jI25hbWUpOyBcCi0gICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7IFwK
LSAgICAgICAgaSArPSA0OyBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgfQorICAgIC8vICBlY3gg
PSBiYXNlT2JqZWN0CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVj
dHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgLy8gcHJvdG8oZWN4KSA9IGJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGUoKQorICAgIF9fIGNtcGxfaTMybShPYmplY3RUeXBl
LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJRUxEX09GRlNFVChUeXBl
SW5mbywgbV90eXBlKSwgWDg2OjplY3gpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5l
KCkpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV9wcm90b3R5cGUp
LCBYODY6OmVjeCwgWDg2OjplY3gpOwogICAgIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKLXsKLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgg
PSAwOwotICAgIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4ID0gMDsKKyAgICAvLyBlY3ggPSBi
YXNlT2JqZWN0LT5tX3N0cnVjdHVyZQorICAgIGZvciAoUmVmUHRyPFN0cnVjdHVyZT4qIGl0ID0g
Y2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7CisgICAgICAgIC8vIG51bGwgY2hlY2sgdGhlIHBy
b3RvdHlwZQorICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKGpzTnVsbCgpKSwgWDg2Ojpl
Y3gpOworICAgICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKF9fIGplKCkpOwogCi0gICAgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOwot
ICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2Fz
ZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBlbmFibGUgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyBmb3Igc2xvdyBjYXNlcyB3
aGVuIGFwcGxpY2FibGUKLSAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworICAgICAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlIGlkCisgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90PihpdC0+Z2V0KCkpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0
cnVjdHVyZSksIFg4Njo6ZWN4KTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUo
KSk7CisgICAgICAgIAorICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1f
c3RydWN0dXJlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAgICAgX18gY21wbF9pMzJtKE9i
amVjdFR5cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZG
U0VUKFR5cGVJbmZvLCBtX3R5cGUpLCBYODY6OmVjeCk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoX18gam5lKCkpOworICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1
cmUsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICB9CiAKLSAgICAgICAg
dW5zaWduZWQgaSA9IGl0ZXItPnRvOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdW5zaWduZWQg
Zmlyc3RUbyA9IGk7Ci0jZW5kaWYKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3VjY2Vzc0Nhc2VzLnNpemUoKTsgKytpKQor
ICAgICAgICBfXyBsaW5rKHN1Y2Nlc3NDYXNlc1tpXSwgX18gbGFiZWwoKSk7CiAKLSAgICAgICAg
c3dpdGNoIChPcGNvZGVJRCBvcGNvZGVJRCA9IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGlu
c3RydWN0aW9uW2ldLnUub3Bjb2RlKSkgewotICAgICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczog
ewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2NvbnZlcnRfdGhpcyk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSAr
PSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hZGQ6
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1l
ZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7Ci0gICAgICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9
IGl0ZXItPmZyb207Ci0gICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgX18gc3VibF9pMzJyKGdldERlVGFnZ2VkQ29uc3Rh
bnRJbW1lZGlhdGUodmFsdWUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhu
b3RJbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWF4LCA0KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2FkZCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENv
bnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgewotICAgICAgICAgICAgICAgIEptcFNy
YyBub3RJbW0gPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlcikt
PmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIF9fIHN1YmxfaTMycihnZXREZVRh
Z2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAg
IF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9u
W2kgKyA0XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlcy5maXJzdCgpLm1p
Z2h0QmVOdW1iZXIoKSAmJiB0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVyKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uob3BfYWRkLCBpdGVyLCBk
c3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQorICAgIEpt
cFNyYyBjYWxsVGFyZ2V0OwogCi0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKLSAgICAgICAgICAg
IC8vIFRoZSBzbG93IGNhc2UgdGhhdCBoYW5kbGVzIGFjY2Vzc2VzIHRvIGFycmF5cyAoYmVsb3cp
IG1heSBqdW1wIGJhY2sgdXAgdG8gaGVyZS4gCi0gICAgICAgICAgICBKbXBEc3QgYmVnaW5HZXRC
eVZhbFNsb3cgPSBfXyBsYWJlbCgpOworICAgIC8vIGVtaXQgYSBjYWxsIG9ubHkgaWYgc3RvcmFn
ZSByZWFsbG9jIGlzIG5lZWRlZAorICAgIGlmICh0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVh
bGxvYyhvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkpIHsKKyAgICAgICAgX18gcHVzaGxfcihY
ODY6OmVkeCk7CisgICAgICAgIF9fIHB1c2hsX2kzMihuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5U3Rv
cmFnZUNhcGFjaXR5KCkpOworICAgICAgICBfXyBwdXNobF9pMzIob2xkU3RydWN0dXJlLT5wcm9w
ZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgX18gcHVzaGxfcihYODY6OmVheCk7Cisg
ICAgICAgIGNhbGxUYXJnZXQgPSBfXyBjYWxsKCk7CisgICAgICAgIF9fIGFkZGxfaTMycigzICog
c2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOworICAgICAgICBfXyBwb3BsX3IoWDg2OjplZHgpOwor
ICAgIH0KIAotICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207Ci0gICAgICAg
ICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9f
IGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEZhc3RB
cml0aEludFRvSW1tTm9DaGVjayhYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdElt
bSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfdmFsKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBfXyBsaW5rKF9fIGptcCgpLCBtX2xhYmVsc1tpICsgNF0pOworICAgIC8vIEFz
c3VtZXMgbV9yZWZDb3VudCBjYW4gYmUgZGVjcmVtZW50ZWQgZWFzaWx5LCByZWZjb3VudCBkZWNy
ZW1lbnQgaXMgc2FmZSBhcyAKKyAgICAvLyBjb2RlYmxvY2sgc2hvdWxkIGVuc3VyZSBvbGRTdHJ1
Y3R1cmUtPm1fcmVmQ291bnQgPiAwCisgICAgX18gc3VibF9pOG0oMSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ob2xkU3RydWN0dXJlKSk7CisgICAgX18gYWRkbF9pOG0oMSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4obmV3U3RydWN0dXJlKSk7CisgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KG5ld1N0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlKSwgWDg2OjplYXgpOwogCi0gICAgICAgICAgICAvLyBUaGlzIGlzIHNsb3cgY2FzZSB0
aGF0IGhhbmRsZXMgYWNjZXNzZXMgdG8gYXJyYXlzIGFib3ZlIHRoZSBmYXN0IGN1dC1vZmYuCi0g
ICAgICAgICAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhpcyBpcyBhbiBhY2Nlc3MgdG8gdGhlIHZl
Y3RvcgotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdl
LCBtX3ZlY3Rvckxlbmd0aCksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gamJl
KCksIGJlZ2luR2V0QnlWYWxTbG93KTsKKyAgICAvLyB3cml0ZSB0aGUgdmFsdWUKKyAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVh
eCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNp
emVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4KTsKIAotICAgICAgICAgICAgLy8gb2theSwgbWlzc2Vk
IHRoZSBmYXN0IHJlZ2lvbiwgYnV0IGl0IGlzIHN0aWxsIGluIHRoZSB2ZWN0b3IuICBHZXQgdGhl
IHZhbHVlLgotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSwgWDg2
OjplY3gpOwotICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgdmFsdWUgbG9hZGVkIGlz
IHplcm87IGlmIHNvIHdlIG5lZWQgdG8gcmV0dXJuIHVuZGVmaW5lZC4KLSAgICAgICAgICAgIF9f
IHRlc3RsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBsaW5rKF9fIGpl
KCksIGJlZ2luR2V0QnlWYWxTbG93KTsKLSAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplY3gs
IFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgpOworICAgIF9fIHJldCgpOworICAgIAorICAg
IEptcFNyYyBmYWlsdXJlSnVtcDsKKyAgICBpZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFpbHVyZUNhc2VzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgX18gbGluayhmYWlsdXJlQ2FzZXNbaV0sIF9fIGxhYmVsKCkpOworICAgICAg
ICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CisgICAgICAgIGZh
aWx1cmVKdW1wID0gX18gam1wKCk7CisgICAgfQogCi0gICAgICAgICAgICBpICs9IDQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N1YjogewotICAgICAg
ICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShvcF9zdWIsIGl0ZXIsIGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlv
bltpICsgNF0udS5vcGVyYW5kKSwgaSk7Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAgICAgICAg
ICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgaWYgKGdl
dENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkKLSAgICAgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBs
YWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKLSAg
ICAgICAgICAgIH0KKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKIAotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3JzaGlmdCk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9sc2hpZnQ6IHsKLSAgICAgICAgICAgIEptcFNyYyBub3RJbW0xID0gaXRlci0+ZnJvbTsKLSAg
ICAgICAgICAgIEptcFNyYyBub3RJbW0yID0gKCsraXRlciktPmZyb207Ci0gICAgICAgICAgICBf
XyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICBf
XyBsaW5rKG5vdEltbTEsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0y
LCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwot
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgNCk7Ci0gICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xzaGlmdCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9sb29wX2lmX2xlc3M6IHsKLSAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7
CisgICAgaWYgKGZhaWx1cmVDYXNlcy5zaXplKCkpCisgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBmYWlsdXJlSnVtcCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwogCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3Jj
MmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7Ci0gICAgICAgICAgICAgICAg
X18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29w
X2lmX2xlc3MpOwotICAgICAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0
YXJnZXRdKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIp
LT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6
ZWF4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAg
ICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZf
bGVzcyk7Ci0gICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMyArIHRhcmdl
dF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAg
IGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKSkKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0
ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgIGlmICh0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdl
UmVhbGxvYyhvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkpCisgICAgICAgIFg4NkFzc2VtYmxl
cjo6bGluayhjb2RlLCBjYWxsVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihyZXNpemVQ
cm9wZXJ0eVN0b3JhZ2UpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0
dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOworICAgIAorICAgIGN0aVJlcGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOworfQogCi0gICAgICAgICAgICBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAgICAgZW1pdFB1
dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4
LCA4KTsKLSAgICAgICAgICAgIEptcFNyYyBjYWxsID0gZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9wdXRfYnlfaWQpOwordm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCB2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0g
Y29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKIAotICAgICAgICAgICAgLy8g
VHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNv
dmVyIHJlcGF0Y2ggaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2st
PnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRl
eF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21w
aWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9j
YXRpb24gPSBjYWxsOwotICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXg7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4g
ZnV0dXJlIGdvIHRvIGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYy4KKyAgICAvLyBTaG91bGQgcHJv
YmFibHkgZ28gdG8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQg
ZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCisgICAgY3RpUmVwYXRj
aENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7CiAKLSAgICAgICAg
ICAgIGkgKz0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkOiB7Ci0gICAgICAgICAgICAvLyBBcyBmb3IgdGhlIGhvdCBwYXRoIG9mIGdl
dF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiB1c2UgYW4gYXJjaGl0ZWN0dXJl
IHNwZWNpZmljIG9mZnNldAotICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBvbmx5IG5lZWQgdHJh
Y2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0cmFjayBhIHBvaW50
ZXIgdG8gdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyBvZiB0aGUgY2FsbCAod2hpY2ggd2Ug
Y2FuIHVzZSB0byBsb29rIHVwIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uKSwgYnV0IHNob3VsZCBh
IGFycmF5LWxlbmd0aCBvcgotICAgICAgICAgICAgLy8gcHJvdG90eXBlIGFjY2VzcyB0cmFtcG9s
aW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBUbyBkbyBzbyB3ZSBj
YW4gc3VidHJhY3QgYmFjawotICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGZyb20gdGhlIGNh
bGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2FzZS4KKyAgICAvLyBSZXBhdGNoIHRoZSBvZmZz
ZXQgaW50byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0aGUg
U3RydWN0dXJlIHRvIGxvb2sgZm9yLgorICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3BsYWNl
bWVudChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBh
dGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXplb2Yo
SlNWYWx1ZSopKTsKKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5
SWRTdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOworfQog
Ci0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICAgICAgKytpdGVyOwotICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKK3ZvaWQgSklUOjpwYXRjaFB1dEJ5
SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Cisg
ICAgCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4g
ZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KKyAgICAvLyBTaG91bGQgcHJv
YmFibHkgZ28gdG8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQg
ZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCisgICAgY3RpUmVwYXRj
aENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOwogCi0jaWZuZGVmIE5E
RUJVRwotICAgICAgICAgICAgSm1wRHN0IGNvbGRQYXRoQmVnaW4gPSBfXyBsYWJlbCgpOwotI2Vu
ZGlmICAgICAgICAKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAg
ICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAg
ICAgIEptcFNyYyBjYWxsID0gZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWQpOwotICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJl
dHdlZW5MYWJlbHMoY29sZFBhdGhCZWdpbiwgY2FsbCkgPT0gcmVwYXRjaE9mZnNldEdldEJ5SWRT
bG93Q2FzZUNhbGwpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgLy8gVHJhY2sgdGhlIGxvY2F0
aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHJlcGF0Y2ggaW5m
b3JtYXRpb24uCi0gICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJbmRl
eCA9PSBpKTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwot
ICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7Ci0KLSAgICAgICAg
ICAgIGkgKz0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfbG9vcF9pZl9sZXNzZXE6IHsKLSAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7
Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlh
dGVOdW1lcmljQXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
aWYgKHNyYzJpbW0pIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDApOwotICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKTsKLSAgICAgICAgICAg
ICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9f
IGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3NlcSk7Ci0gICAgICAgICAgICAg
ICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBs
aW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9wcmVfaW5jOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0
ZXItPmZyb207Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgICAgIF9fIHN1YmxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUo
SlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18g
bGluayhub3RJbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X3ByZV9pbmMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwot
ICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICAvLyBOb3JtYWwgc2xvdyBjYXNl
cyAtIGVpdGhlciBpcyBub3QgYW4gaW1tZWRpYXRlIGltbSwgb3IgaXMgYW4gYXJyYXkuCi0gICAg
ICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKLSAgICAgICAgICAgIF9fIGxpbmso
KCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVy
KS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1O
b0NoZWNrKFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDgpOwotICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfdmFsKTsKLSAgICAgICAgICAgIF9fIGxp
bmsoX18gam1wKCksIG1fbGFiZWxzW2kgKyA0XSk7Ci0KLSAgICAgICAgICAgIC8vIHNsb3cgY2Fz
ZXMgZm9yIGltbWVkaWF0ZSBpbnQgYWNjZXNzZXMgdG8gYXJyYXlzCi0gICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsr
aXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgOCk7
Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92
YWxfYXJyYXkpOwotCi0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvb3BfaWZfdHJ1ZTogewotICAgICAgICAgICAgZW1p
dFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBf
XyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk7Ci0gICAg
ICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7Ci0gICAgICAgICAg
ICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X3ByZV9kZWM6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsK
LSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgX18gYWRkbF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0
ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdElt
bSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsK
LSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2RlYyk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Ci0gICAgICAgICAg
ICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2pubGVzczogewotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFu
dEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpZiAoc3JjMmltbSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwg
MCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfamxlc3MpOwotICAgICAgICAgICAg
ICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18g
bGluayhfXyBqZSgpLCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3Bfamxlc3MpOwotICAgICAgICAgICAgICAgIF9fIHRlc3Rs
X3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhfXyBqZSgp
LCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9u
b3Q6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAg
ICAgICAgICBfXyB4b3JsX2k4cihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfbm90KTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2pmYWxzZTogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk7Ci0gICAgICAgICAg
ICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIGxp
bmsoX18gamUoKSwgbV9sYWJlbHNbaSArIDIgKyB0YXJnZXRdKTsgLy8gaW52ZXJ0ZWQhCi0gICAg
ICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3Bvc3RfaW5jOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBf
XyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Bvc3RfaW5jKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9iaXRub3Q6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYml0bm90KTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2JpdGFuZDogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0g
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9
IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpZiAoZ2V0Q29uc3Rh
bnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVheCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRhbmQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0Q29uc3RhbnRJbW1l
ZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5m
cm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4
LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihz
cmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9iaXRhbmQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRhbmQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgKz0gNTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfanRydWU6IHsK
LSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfanRydWUpOwotICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2
OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBfXyBsaW5rKF9fIGpuZSgpLCBtX2xh
YmVsc1tpICsgMiArIHRhcmdldF0pOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wb3N0X2RlYzogewotICAgICAgICAg
ICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9wb3N0X2RlYyk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7Ci0gICAgICAg
ICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1
dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4
LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYml0
eG9yKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2JpdG9yOiB7Ci0gICAgICAgICAgICBfXyBsaW5r
KGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYml0b3IpOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9lcSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSAr
PSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXE6
IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9uZXEpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NB
U0VfRE9VQkxFX0VOVFJZKG9wX3N0cmljdGVxKTsKLSAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZ
X09QX1NMT1dfQ0FTRV9ET1VCTEVfRU5UUlkob3BfbnN0cmljdGVxKTsKLSAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyA0XS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfaW5zdGFuY2VvZik7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9tb2Q6IHsKLSAgICAgICAgICAgIEptcFNyYyBub3RJbW0xID0gaXRlci0+ZnJvbTsKLSAgICAg
ICAgICAgIEptcFNyYyBub3RJbW0yID0gKCsraXRlciktPmZyb207Ci0gICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJp
dGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVU
YWdJbW1lZGlhdGUoWDg2OjplY3gpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0xLCBfXyBs
YWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90SW1tMiwgX18gbGFiZWwoKSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplY3gsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9tb2QpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbXVsOiB7Ci0gICAgICAgICAg
ICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBz
cmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUq
IHNyYzFWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKTsKLSAgICAg
ICAgICAgIEpTVmFsdWUqIHNyYzJWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0Fy
ZyhzcmMyKTsKLSAgICAgICAgICAgIGludDMyX3QgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoc3Jj
MVZhbHVlICYmICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMVZhbHVlKSkgPiAw
KSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAg
ICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gZXh0cmEgc2xvdyBjYXNlIGZvciAob3AxICogLU4p
IG9yICgtTiAqIG9wMiksIHRvIGNoZWNrIGZvciAwIHNpbmNlIHRoaXMgc2hvdWxkIHByb2R1Y2Ug
YSByZXN1bHQgb2YgLTAuCi0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX211bCk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChz
cmMyVmFsdWUgJiYgKCh2YWx1ZSA9IEpTSW1tZWRpYXRlOjppbnRWYWx1ZShzcmMyVmFsdWUpKSA+
IDApKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAg
ICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbiBleHRyYSBzbG93IGNhc2UgZm9yIChvcDEgKiAt
Tikgb3IgKC1OICogb3AyKSwgdG8gY2hlY2sgZm9yIDAgc2luY2UgdGhpcyBzaG91bGQgcHJvZHVj
ZSBhIHJlc3VsdCBvZiAtMC4KLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihzcmMxLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENU
SUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbXVsKTsKLSAgICAgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKG9wX211bCwgaXRlciwg
ZHN0LCBzcmMxLCBzcmMyLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRd
LnUub3BlcmFuZCksIGkpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhc2Ugb3BfY2Fs
bF9ldmFsOgotICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGluc3RydWN0aW9uICsgaSwgaSwgaXRlciwgY2FsbExpbmtJbmZvSW5k
ZXgrKywgb3Bjb2RlSUQpOwotICAgICAgICAgICAgaSArPSAob3Bjb2RlSUQgPT0gb3BfY29uc3Ry
dWN0ID8gNyA6IDUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF90b19qc251bWJlcjogewotICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKGl0ZXIsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0K
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90b19qc251bWJlcik7Ci0KLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgo
aXRlciArIDEpID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8gIT0gKGl0ZXIgKyAxKS0+
dG8sIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8gPT0gaXRlci0+dG8sICJUb28gbWFueSBq
dW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0KLSAgICAgICAgX18gbGluayhf
XyBqbXAoKSwgbV9sYWJlbHNbaV0pOwotICAgIH0KLQotICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uSW5kZXggPT0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zLnNpemUoKSk7Ci0gICAgQVNTRVJUKGNhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2Nr
LT5jYWxsTGlua0luZm9zLnNpemUoKSk7CisgICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0IGludG8g
dGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVy
ZSB0byBsb29rIGZvci4KKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hEaXNwbGFjZW1lbnQocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNl
dFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUq
KSk7CisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoSW1tZWRpYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0
dXJlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKIH0KIAotdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlKCkKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJy
YXlMZW5ndGgodm9pZCogcmV0dXJuQWRkcmVzcykKIHsKLSNpZiBFTkFCTEUoQ09ERUJMT0NLX1NB
TVBMSU5HKQotICAgICAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
bV9jb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSk7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgICAgICBfXyBtb3ZsX2kz
Mm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucy5iZWdpbigpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90
KCkpOwotI2VuZGlmCisgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAKLSAgICAvLyBDb3VsZCB1c2UgYSBwb3BsX20s
IGJ1dCB3b3VsZCBuZWVkIHRvIG9mZnNldCB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlmIHNv
LgotICAgIF9fIHBvcGxfcihYODY6OmVjeCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFg4Njo6ZWN4LCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKyAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9i
eV9pZF9nZW5lcmljLgorICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFk
ZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkX2FycmF5X2ZhaWwpKTsKIAotICAgIEptcFNyYyBzbG93UmVnaXN0ZXJGaWxlQ2hlY2s7Ci0g
ICAgSm1wRHN0IGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2s7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKLSAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBm
YXN0IGxpbmtlZCBjYWxsLCB3ZSBkbyBub3Qgc2V0IHRoaXMgdXAgaW4gdGhlIGNhbGxlci4KLSAg
ICAgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2Nr
KSwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpLCBYODY6OmVkaSk7CisgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIGFycmF5CisgICAgX18g
Y21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNB
cnJheVZwdHIpLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczEgPSBfXyBqbmUo
KTsKIAotICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcmVnaXN0ZXJGaWxlLCBYODY6
OmVheCk7Ci0gICAgICAgIF9fIGxlYWxfbXIobV9jb2RlQmxvY2stPm51bUNhbGxlZVJlZ2lzdGVy
cyAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpLCBYODY6OmVkeCk7Ci0gICAgICAgIF9fIGNt
cGxfbXIoRklFTERfT0ZGU0VUKFJlZ2lzdGVyRmlsZSwgbV9lbmQpLCBYODY6OmVheCwgWDg2Ojpl
ZHgpOwotICAgICAgICBzbG93UmVnaXN0ZXJGaWxlQ2hlY2sgPSBfXyBqZygpOwotICAgICAgICBh
ZnRlclJlZ2lzdGVyRmlsZUNoZWNrID0gX18gbGFiZWwoKTsKLSAgICB9CisgICAgLy8gQ2hlY2tz
IG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKKyAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gp
OworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLCBY
ODY6OmVjeCwgWDg2OjplY3gpOwogCi0gICAgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwotICAg
IHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKLSAgICBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
OworICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6bWF4SW1tZWRpYXRlSW50LCBYODY6OmVj
eCk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBfXyBqYSgpOwogCi0gICAgaWYgKG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKLSAgICAgICAgX18gbGluayhzbG93
UmVnaXN0ZXJGaWxlQ2hlY2ssIF9fIGxhYmVsKCkpOwotICAgICAgICBlbWl0Q1RJQ2FsbCgwLCBJ
bnRlcnByZXRlcjo6Y3RpX3JlZ2lzdGVyX2ZpbGVfY2hlY2spOwotICAgICAgICBKbXBTcmMgYmFj
a1RvQm9keSA9IF9fIGptcCgpOwotICAgICAgICBfXyBsaW5rKGJhY2tUb0JvZHksIGFmdGVyUmVn
aXN0ZXJGaWxlQ2hlY2spOwotICAgIH0KKyAgICBfXyBhZGRsX3JyKFg4Njo6ZWN4LCBYODY6OmVj
eCk7CisgICAgX18gYWRkbF9pOHIoMSwgWDg2OjplY3gpOworICAgIF9fIG1vdmxfcnIoWDg2Ojpl
Y3gsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwogCi0gICAgQVNT
RVJUKG1fam1wVGFibGUuaXNFbXB0eSgpKTsKLQogICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRh
YmxlQ29weSgpOwogCi0gICAgLy8gVHJhbnNsYXRlIHZQQyBvZmZzZXRzIGludG8gYWRkcmVzc2Vz
IGluIEpJVCBnZW5lcmF0ZWQgY29kZSwgZm9yIHN3aXRjaCB0YWJsZXMuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fc3dpdGNoZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3dpdGNo
UmVjb3JkIHJlY29yZCA9IG1fc3dpdGNoZXNbaV07Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggPSByZWNvcmQuYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5m
b3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBz
bG93IGNhc2Ugcm91dGluZS4KKyAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5
SWRTbG93Q2FzZUNhbGw7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNl
czEsIHNsb3dDYXNlQmVnaW4pOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJl
Q2FzZXMyLCBzbG93Q2FzZUJlZ2luKTsKIAotICAgICAgICBpZiAocmVjb3JkLnR5cGUgIT0gU3dp
dGNoUmVjb3JkOjpTdHJpbmcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBT
d2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSB8fCByZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkNo
YXJhY3Rlcik7IAotICAgICAgICAgICAgQVNTRVJUKHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVt
cFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKSA9PSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1
bXBUYWJsZS0+Y3RpT2Zmc2V0cy5zaXplKCkpOworICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0
QnlJZFByb3BlcnR5TWFwT2Zmc2V0OworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNj
ZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOwogCi0gICAgICAgICAg
ICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IF9fIGdldFJl
bG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbYnl0ZWNvZGVJbmRleCArIDMgKyByZWNvcmQu
ZGVmYXVsdE9mZnNldF0pOworICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBz
byB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KKyAgICBtX2NvZGVCbG9jay0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOwogCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUt
PmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0c1tq
XTsKLSAgICAgICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3Rp
T2Zmc2V0c1tqXSA9IG9mZnNldCA/IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJl
bHNbYnl0ZWNvZGVJbmRleCArIDMgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc2ltcGxl
SnVtcFRhYmxlLT5jdGlEZWZhdWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6U3RyaW5nKTsK
LQotICAgICAgICAgICAgcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1
bHQgPSBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fbGFiZWxzW2J5dGVjb2RlSW5kZXgg
KyAzICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKLQotICAgICAgICAgICAgU3RyaW5nSnVtcFRh
YmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJsZS5z
dHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVuZCgpOyAgICAgICAgICAgIAotICAgICAgICAg
ICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBpdCA9
IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+
c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmN0aU9mZnNl
dCA9IG9mZnNldCA/IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbYnl0ZWNv
ZGVJbmRleCArIDMgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxl
LT5jdGlEZWZhdWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9y
IChWZWN0b3I8SGFuZGxlckluZm8+OjppdGVyYXRvciBpdGVyID0gbV9jb2RlQmxvY2stPmV4Y2Vw
dGlvbkhhbmRsZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRs
ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICBpdGVyLT5uYXRpdmVDb2RlID0gX18gZ2V0UmVs
b2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tpdGVyLT50YXJnZXRdKTsKLQotICAgIGZvciAo
VmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVy
ICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+dG8pCi0gICAg
ICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgaXRlci0+ZnJvbSwgaXRlci0+dG8pOwot
ICAgICAgICBtX2NvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5hZGQoX18gZ2V0UmVs
b2NhdGVkQWRkcmVzcyhjb2RlLCBpdGVyLT5mcm9tKSwgaXRlci0+Ynl0ZWNvZGVJbmRleCk7Ci0g
ICAgfQotCi0gICAgLy8gTGluayBhYnNvbHV0ZSBhZGRyZXNzZXMgZm9yIGpzcgotICAgIGZvciAo
VmVjdG9yPEpTUkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9qc3JTaXRlcy5iZWdpbigpOyBpdGVy
ICE9IG1fanNyU2l0ZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5r
QWJzb2x1dGVBZGRyZXNzKGNvZGUsIGl0ZXItPmFkZHJQb3NpdGlvbiwgaXRlci0+dGFyZ2V0KTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IGluZm8gPSBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV07Ci0gICAg
ICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRB
ZGRyZXNzKGNvZGUsIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVy
bkxvY2F0aW9uKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBYODZBc3NlbWJsZXI6Omdl
dFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tp
XS5ob3RQYXRoQmVnaW4pOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
b2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ2FsbExpbmtJ
bmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3NbaV07Ci0gICAgICAgIGluZm8u
Y2FsbFJldHVybkxvY2F0aW9uID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNv
ZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxvY2F0
aW9uKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBYODZBc3NlbWJsZXI6OmdldFJlbG9j
YXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5o
b3RQYXRoQmVnaW4pOwotICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IFg4NkFzc2VtYmxlcjo6
Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2ldLmhvdFBhdGhPdGhlcik7Ci0gICAgICAgIGluZm8uY29sZFBhdGhPdGhlciA9IFg4NkFz
c2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2ldLmNvbGRQYXRoT3RoZXIpOwotICAgIH0KLQotICAgIG1fY29kZUJsb2Nr
LT5jdGlDb2RlID0gY29kZTsKKyAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc293
IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCisgICAgaW50
cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBh
dGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7CisgICAgWDg2
QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGYoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3MpCkBAIC0yNzg1LDM4NSAr
NzAyLDYgQEAKICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNz
LCBjb2RlKTsKIH0KIAotZXh0ZXJuICJDIiB7Ci0KLSAgICBzdGF0aWMgSlNPYmplY3QqIHJlc2l6
ZVByb3BlcnR5U3RvcmFnZShKU09iamVjdCogYmFzZU9iamVjdCwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKQotICAgIHsKLSAgICAgICAgYmFzZU9iamVjdC0+YWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VJbmxpbmUob2xkU2l6ZSwgbmV3U2l6ZSk7Ci0gICAgICAgIHJldHVybiBiYXNlT2Jq
ZWN0OwotICAgIH0KLQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhbnNpdGlvbldpbGxOZWVk
U3RvcmFnZVJlYWxsb2MoU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlKQotewotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFj
aXR5KCkgIT0gbmV3U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOwotfQotCi12
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWZWN0b3I8
Sm1wU3JjLCAxNj4gZmFpbHVyZUNhc2VzOwotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qg
b2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpU
YWdNYXNrLCBYODY6OmVheCk7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0g
ICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KG9sZFN0cnVjdHVyZSks
IEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOwotICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIFZlY3RvcjxKbXBTcmM+IHN1Y2Nlc3NDYXNl
czsKLQotICAgIC8vICBlY3ggPSBiYXNlT2JqZWN0Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZT
RVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgLy8gcHJv
dG8oZWN4KSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGUoKQotICAgIF9fIGNt
cGxfaTMybShPYmplY3RUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSAr
IEZJRUxEX09GRlNFVChUeXBlSW5mbywgbV90eXBlKSwgWDg2OjplY3gpOwotICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVj
dHVyZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIAotICAgIC8vIGVj
eCA9IGJhc2VPYmplY3QtPm1fc3RydWN0dXJlCi0gICAgZm9yIChSZWZQdHI8U3RydWN0dXJlPiog
aXQgPSBjaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAgICAgLy8gbnVsbCBjaGVjayB0
aGUgcHJvdG90eXBlCi0gICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoanNOdWxsKCkpLCBY
ODY6OmVjeCk7Ci0gICAgICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoX18gamUoKSk7Ci0KLSAgICAg
ICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZSBpZAotICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdD4oaXQtPmdldCgpKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpLCBYODY6OmVjeCk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5l
KCkpOwotICAgICAgICAKLSAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBt
X3N0cnVjdHVyZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgICAgIF9fIGNtcGxfaTMybShP
YmplY3RUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJRUxEX09G
RlNFVChUeXBlSW5mbywgbV90eXBlKSwgWDg2OjplY3gpOwotICAgICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKF9fIGpuZSgpKTsKLSAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU3RydWN0
dXJlLCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgfQotCi0gICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN1Y2Nlc3NDYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgX18gbGluayhzdWNjZXNzQ2FzZXNb
aV0sIF9fIGxhYmVsKCkpOwotCi0gICAgSm1wU3JjIGNhbGxUYXJnZXQ7Ci0KLSAgICAvLyBlbWl0
IGEgY2FsbCBvbmx5IGlmIHN0b3JhZ2UgcmVhbGxvYyBpcyBuZWVkZWQKLSAgICBpZiAodHJhbnNp
dGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2Mob2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKSB7
Ci0gICAgICAgIF9fIHB1c2hsX3IoWDg2OjplZHgpOwotICAgICAgICBfXyBwdXNobF9pMzIobmV3
U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAgX18gcHVzaGxf
aTMyKG9sZFN0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIF9f
IHB1c2hsX3IoWDg2OjplYXgpOwotICAgICAgICBjYWxsVGFyZ2V0ID0gX18gY2FsbCgpOwotICAg
ICAgICBfXyBhZGRsX2kzMnIoMyAqIHNpemVvZih2b2lkKiksIFg4Njo6ZXNwKTsKLSAgICAgICAg
X18gcG9wbF9yKFg4Njo6ZWR4KTsKLSAgICB9Ci0KLSAgICAvLyBBc3N1bWVzIG1fcmVmQ291bnQg
Y2FuIGJlIGRlY3JlbWVudGVkIGVhc2lseSwgcmVmY291bnQgZGVjcmVtZW50IGlzIHNhZmUgYXMg
Ci0gICAgLy8gY29kZWJsb2NrIHNob3VsZCBlbnN1cmUgb2xkU3RydWN0dXJlLT5tX3JlZkNvdW50
ID4gMAotICAgIF9fIHN1YmxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9sZFN0cnVj
dHVyZSkpOwotICAgIF9fIGFkZGxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5ld1N0
cnVjdHVyZSkpOwotICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihu
ZXdTdHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4
KTsKLQotICAgIC8vIHdyaXRlIHRoZSB2YWx1ZQotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAg
X18gbW92bF9ybShYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2
OjplYXgpOwotCi0gICAgX18gcmV0KCk7Ci0gICAgCi0gICAgSm1wU3JjIGZhaWx1cmVKdW1wOwot
ICAgIGlmIChmYWlsdXJlQ2FzZXMuc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmYWlsdXJlQ2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBfXyBsaW5rKGZh
aWx1cmVDYXNlc1tpXSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIF9fIHJlc3RvcmVBcmd1bWVudFJl
ZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKLSAgICAgICAgZmFpbHVyZUp1bXAgPSBfXyBqbXAoKTsK
LSAgICB9Ci0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIGlm
IChmYWlsdXJlQ2FzZXMuc2l6ZSgpKQotICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
ZmFpbHVyZUp1bXAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3Bf
cHV0X2J5X2lkX2ZhaWwpKTsKLQotICAgIGlmICh0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVh
bGxvYyhvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkpCi0gICAgICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBjYWxsVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihyZXNpemVQcm9w
ZXJ0eVN0b3JhZ2UpKTsKLSAgICAKLSAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJu
QWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOwotICAgIAotICAgIGN0aVJlcGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoKQotewotICAgIC8vICgxKSBUaGUgZmlyc3Qg
ZnVuY3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGFycmF5IGxlbmd0aAot
ICAgIAotICAgIC8vIENoZWNrIGVheCBpcyBhbiBhcnJheQotICAgIF9fIHRlc3RsX2kzMnIoSlNJ
bW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgYXJyYXlfZmFpbHVyZUNh
c2VzMSA9IF9fIGpuZSgpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgpOwotICAgIEptcFNy
YyBhcnJheV9mYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0IG9r
YXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAg
X18gbW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCksIFg4Njo6ZWF4
LCBYODY6OmVheCk7Ci0KLSAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0
ZUludCwgWDg2OjplYXgpOwotICAgIEptcFNyYyBhcnJheV9mYWlsdXJlQ2FzZXMzID0gX18gamEo
KTsKLQotICAgIF9fIGFkZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBhZGRsX2k4
cigxLCBYODY6OmVheCk7Ci0gICAgCi0gICAgX18gcmV0KCk7Ci0KLSAgICAvLyAoMikgVGhlIHNl
Y29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxl
bmd0aAotICAgIAotICAgIEptcERzdCBzdHJpbmdMZW5ndGhCZWdpbiA9IF9fIGFsaWduKDE2KTsK
LQotICAgIC8vIENoZWNrIGVheCBpcyBhIHN0cmluZwotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1l
ZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgc3RyaW5nX2ZhaWx1cmVDYXNl
czEgPSBfXyBqbmUoKTsKLSAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4obV9pbnRlcnByZXRlci0+bV9qc1N0cmluZ1ZwdHIpLCBYODY6OmVheCk7Ci0gICAgSm1wU3Jj
IHN0cmluZ19mYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0IG9r
YXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4KLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU1N0cmluZywgbV92YWx1ZSkgKyBGSUVMRF9PRkZTRVQoVVN0cmluZywgbV9y
ZXApLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFVT
dHJpbmc6OlJlcCwgbGVuKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLQotICAgIF9fIGNtcGxfaTMy
cihKU0ltbWVkaWF0ZTo6bWF4SW1tZWRpYXRlSW50LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIHN0
cmluZ19mYWlsdXJlQ2FzZXMzID0gX18gamEoKTsKLQotICAgIF9fIGFkZGxfcnIoWDg2OjplYXgs
IFg4Njo6ZWF4KTsKLSAgICBfXyBhZGRsX2k4cigxLCBYODY6OmVheCk7Ci0gICAgCi0gICAgX18g
cmV0KCk7Ci0KLSAgICAvLyAoMykgVHJhbXBvbGluZXMgZm9yIHRoZSBzbG93IGNhc2VzIG9mIG9w
X2NhbGwgLyBvcF9jYWxsX2V2YWwgLyBvcF9jb25zdHJ1Y3QuCi0gICAgCi0gICAgSm1wRHN0IHZp
cnR1YWxDYWxsUHJlTGlua0JlZ2luID0gX18gYWxpZ24oMTYpOwotCi0gICAgLy8gTG9hZCB0aGUg
Y2FsbGVlIENvZGVCbG9jayogaW50byBlYXgKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U0Z1bmN0aW9uLCBtX2JvZHkpLCBYODY6OmVjeCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKEZ1bmN0aW9uQm9keU5vZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6OmVh
eCk7Ci0gICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgaGFz
Q29kZUJsb2NrMSA9IF9fIGpuZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgX18g
cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRp
LCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjEgPSBfXyBj
YWxsKCk7Ci0gICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENUSUFy
Zyg4LCBYODY6OmVkeCk7Ci0gICAgX18gcHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18gbGluayho
YXNDb2RlQmxvY2sxLCBfXyBsYWJlbCgpKTsKLQotICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNo
ZXMgY2FsbGVlIGFyaXR5LgotICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChD
b2RlQmxvY2ssIG51bVBhcmFtZXRlcnMpLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFyaXR5Q2hl
Y2tPa2F5MSA9IF9fIGplKCk7Ci0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7Ci0g
ICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4
Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsQXJpdHlDaGVjazEg
PSBfXyBjYWxsKCk7Ci0gICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOwotICAgIGVt
aXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgp
OwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoYXJpdHlDaGVja09rYXkx
LCBfXyBsYWJlbCgpKTsKLQotICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7
Ci0KLSAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngs
IDQpOwotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQ
YXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbERvbnRM
YXp5TGlua0NhbGwgPSBfXyBjYWxsKCk7Ci0gICAgX18gcHVzaGxfcihYODY6OmVieCk7Ci0KLSAg
ICBfXyBqbXBfcihYODY6OmVheCk7Ci0KLSAgICBKbXBEc3QgdmlydHVhbENhbGxMaW5rQmVnaW4g
PSBfXyBhbGlnbigxNik7Ci0KLSAgICAvLyBMb2FkIHRoZSBjYWxsZWUgQ29kZUJsb2NrKiBpbnRv
IGVheAotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fYm9keSksIFg4
Njo6ZWN4LCBYODY6OmVheCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoRnVuY3Rpb25C
b2R5Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyB0ZXN0bF9ycihY
ODY6OmVheCwgWDg2OjplYXgpOwotICAgIEptcFNyYyBoYXNDb2RlQmxvY2syID0gX18gam5lKCk7
Ci0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVu
Y2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7
Ci0gICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMiA9IF9fIGNhbGwoKTsKLSAgICBlbWl0R2V0Q1RJ
QXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKLSAgICBf
XyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyBsaW5rKGhhc0NvZGVCbG9jazIsIF9fIGxhYmVs
KCkpOwotCi0gICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCi0gICAg
X18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKENvZGVCbG9jaywgbnVtUGFyYW1ldGVy
cyksIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkyID0gX18gamUoKTsKLSAg
ICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwot
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDEyKTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRS
ZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxG
cmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxBcml0eUNoZWNrMiA9IF9fIGNhbGwoKTsKLSAgICBfXyBt
b3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7Ci0gICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVj
eCk7Ci0gICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7Ci0gICAgX18gcHVzaGxfcihYODY6
OmVieCk7Ci0gICAgX18gbGluayhhcml0eUNoZWNrT2theTIsIF9fIGxhYmVsKCkpOwotCi0gICAg
Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKLQotICAgIF9fIHBvcGxfcihYODY6
OmVieCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVieCwgNCk7Ci0gICAgX18gcmVzdG9yZUFy
Z3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJH
U19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsTGF6eUxpbmtDYWxsID0gX18gY2FsbCgpOwot
ICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotCi0gICAgX18gam1wX3IoWDg2OjplYXgpOwotCi0g
ICAgSm1wRHN0IHZpcnR1YWxDYWxsQmVnaW4gPSBfXyBhbGlnbigxNik7Ci0KLSAgICAvLyBMb2Fk
IHRoZSBjYWxsZWUgQ29kZUJsb2NrKiBpbnRvIGVheAotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKEpTRnVuY3Rpb24sIG1fYm9keSksIFg4Njo6ZWN4LCBYODY6OmVheCk7Ci0gICAgX18gbW92
bF9tcihGSUVMRF9PRkZTRVQoRnVuY3Rpb25Cb2R5Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgsIFg4
Njo6ZWF4KTsKLSAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgIEptcFNy
YyBoYXNDb2RlQmxvY2szID0gX18gam5lKCk7Ci0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAg
ICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2
OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMyA9
IF9fIGNhbGwoKTsKLSAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0R2V0
Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKLSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyBs
aW5rKGhhc0NvZGVCbG9jazMsIF9fIGxhYmVsKCkpOwotCi0gICAgLy8gQ2hlY2sgYXJnQ291bnQg
bWF0Y2hlcyBjYWxsZWUgYXJpdHkuCi0gICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZG
U0VUKENvZGVCbG9jaywgbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgYXJp
dHlDaGVja09rYXkzID0gX18gamUoKTsKLSAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIGVt
aXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDEy
KTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFy
YW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxBcml0eUNo
ZWNrMyA9IF9fIGNhbGwoKTsKLSAgICBfXyBtb3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7Ci0g
ICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENUSUFyZyg4LCBYODY6
OmVkeCk7Ci0gICAgX18gcHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18gbGluayhhcml0eUNoZWNr
T2theTMsIF9fIGxhYmVsKCkpOwotCi0gICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJh
bWUoKTsKLQotICAgIC8vIGxvYWQgY3RpQ29kZSBmcm9tIHRoZSBuZXcgY29kZUJsb2NrLgotICAg
IF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKENvZGVCbG9jaywgY3RpQ29kZSksIFg4Njo6ZWF4LCBY
ODY6OmVheCk7Ci0KLSAgICBfXyBqbXBfcihYODY6OmVheCk7Ci0KLSAgICAvLyBBbGwgdHJhbXBv
bGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQg
dGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLQotICAgIHZvaWQqIGNvZGUgPSBf
XyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFycmF5
X2ZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
YXJyYXlfZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBhcnJheV9mYWlsdXJlQ2FzZXMzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnBy
ZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIHN0cmluZ19mYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJ
bnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwotICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBzdHJpbmdfZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3RyaW5nX2ZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7
Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxBcml0eUNoZWNrMSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKLSAg
ICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbEFyaXR5Q2hlY2syLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOwotICAgIFg4
NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsQXJpdHlDaGVjazMsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7Ci0gICAgWDg2QXNz
ZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxKU0Z1bmN0aW9uMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKLSAgICBYODZBc3NlbWJs
ZXI6OmxpbmsoY29kZSwgY2FsbEpTRnVuY3Rpb24yLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJ
bnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOwotICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBjYWxsSlNGdW5jdGlvbjMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVy
cHJldGVyOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5r
KGNvZGUsIGNhbGxEb250TGF6eUxpbmtDYWxsLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX3ZtX2RvbnRMYXp5TGlua0NhbGwpKTsKLSAgICBYODZBc3NlbWJsZXI6Omxp
bmsoY29kZSwgY2FsbExhenlMaW5rQ2FsbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV92bV9sYXp5TGlua0NhbGwpKTsKLQotICAgIG1faW50ZXJwcmV0ZXItPm1fY3Rp
QXJyYXlMZW5ndGhUcmFtcG9saW5lID0gY29kZTsKLSAgICBtX2ludGVycHJldGVyLT5tX2N0aVN0
cmluZ0xlbmd0aFRyYW1wb2xpbmUgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3Mo
Y29kZSwgc3RyaW5nTGVuZ3RoQmVnaW4pOwotICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVh
bENhbGxQcmVMaW5rID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZp
cnR1YWxDYWxsUHJlTGlua0JlZ2luKTsKLSAgICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxD
YWxsTGluayA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0dWFs
Q2FsbExpbmtCZWdpbik7Ci0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbCA9IFg4
NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0dWFsQ2FsbEJlZ2luKTsK
LX0KLQotdm9pZCBKSVQ6OmZyZWVDVElNYWNoaW5lVHJhbXBvbGluZXMoSW50ZXJwcmV0ZXIqIGlu
dGVycHJldGVyKQotewotICAgIFdURjo6ZmFzdEZyZWVFeGVjdXRhYmxlKGludGVycHJldGVyLT5t
X2N0aUFycmF5TGVuZ3RoVHJhbXBvbGluZSk7Ci19Ci0KLXZvaWQgSklUOjpwYXRjaEdldEJ5SWRT
ZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNh
Y2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0KLSAgICAv
LyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28g
dG8gY3RpX29wX2dldF9ieV9pZF9nZW5lcmljLgotICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0
byBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRv
IGFueXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnBy
ZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKLQotICAgIC8vIFJlcGF0Y2ggdGhl
IG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQgZnJvbSwgdGhlbiByZXBhdGNo
IHRoZSBTdHJ1Y3R1cmUgdG8gbG9vayBmb3IuCi0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoRGlz
cGxhY2VtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSAr
IHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQsIGNhY2hlZE9mZnNldCAqIHNp
emVvZihKU1ZhbHVlKikpOwotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEltbWVkaWF0ZShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0
R2V0QnlJZFN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlKSk7
Ci19Ci0KLXZvaWQgSklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJu
QWRkcmVzcykKLXsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBy
ZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KLSAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gSW50ZXJwcmV0ZXI6OmN0aV9v
cF9wdXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGlu
ZyByaWdodCBub3cuCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRk
cmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYykpOwotCi0gICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHByb3Bv
ZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29r
IGZvci4KLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hEaXNwbGFjZW1lbnQocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRQ
cm9wZXJ0eU1hcE9mZnNldCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSk7Ci0gICAg
WDg2QXNzZW1ibGVyOjpyZXBhdGNoSW1tZWRpYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlLCByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCh2b2lkKiByZXR1cm5BZGRyZXNzKQotewotICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVy
bkFkZHJlc3MpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBv
bmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICBjdGlS
ZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci0KLSAg
ICAvLyBDaGVjayBlYXggaXMgYW4gYXJyYXkKLSAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsK
LSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91
dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKLSAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLCBYODY6
OmVjeCwgWDg2OjplY3gpOwotCi0gICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJbW1l
ZGlhdGVJbnQsIFg4Njo6ZWN4KTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGphKCk7
Ci0KLSAgICBfXyBhZGRsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgX18gYWRkbF9pOHIo
MSwgWDg2OjplY3gpOwotICAgIF9fIG1vdmxfcnIoWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICBK
bXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFi
bGVDb3B5KCk7Ci0KLSAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0
aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4K
LSAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5mby5j
YWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7Ci0g
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHNsb3dDYXNlQmVnaW4p
OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJl
Z2luKTsKLQotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBj
b2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMu
Ci0gICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihp
bmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0
OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdWNjZXNzRGVzdCkpOwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBj
cmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIG1fY29kZUJsb2Nr
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICAv
LyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc293IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0
R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNo
T2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRWYXJpYWJs
ZU9iamVjdFJlZ2lzdGVyKFJlZ2lzdGVySUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCwgUmVn
aXN0ZXJJRCBkc3QpCi17Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9i
amVjdCwgZCksIHZhcmlhYmxlT2JqZWN0LCBkc3QpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhLCByZWdpc3RlcnMpLCBk
c3QsIGRzdCk7Ci0gICAgX18gbW92bF9tcihpbmRleCAqIHNpemVvZihSZWdpc3RlciksIGRzdCwg
ZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIHZhcmlhYmxlT2JqZWN0LCBpbnQgaW5kZXgpCi17Ci0gICAg
X18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZhcmlhYmxlT2Jq
ZWN0LCB2YXJpYWJsZU9iamVjdCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJp
YWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGEsIHJlZ2lzdGVycyksIHZhcmlhYmxlT2Jq
ZWN0LCB2YXJpYWJsZU9iamVjdCk7Ci0gICAgX18gbW92bF9ybShzcmMsIGluZGV4ICogc2l6ZW9m
KFJlZ2lzdGVyKSwgdmFyaWFibGVPYmplY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQ2hh
bmdlTG9nCShyZXZpc2lvbiAzODk5MCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDMzIEBACisyMDA4LTEyLTA0ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdo
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBbGxvdyBKSVQgdG8gZnVuY3Rpb24gd2l0aG91dCBwcm9wZXJ0eSBhY2Nlc3MgcmVwYXRj
aGluZyBhbmQgYXJpdGhtZXRpYyBvcHRpbWl6YXRpb25zLgorICAgICAgICBDb250cm9sbGVkIGJ5
IEVOQUJMRV9KSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTIGFuZCBFTkFCTEVfSklUX09QVElN
SVpFX0FSSVRITUVUSUMgc3dpdGNoZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNjQzCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICog
aml0L0pJVEFyaXRobWV0aWMuY3BwOiBDb3BpZWQgZnJvbSBqaXQvSklULmNwcC4KKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlQmluYXJ5QXJpdGhPcCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcDogQ29waWVkIGZyb20gaml0L0pJVC5jcHAuCisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFNs
b3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlJZEhvdFBhdGgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQdXRCeUlkU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpy
ZXNpemVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjp0cmFuc2l0aW9uV2lsbE5lZWRT
dG9yYWdlUmVhbGxvYyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlk
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cGF0Y2hHZXRCeUlkU2VsZik6CisgICAg
ICAgIChKU0M6OkpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiB3dGYvUGxhdGZv
cm0uaDoKKwogMjAwOC0xMi0wMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzODk5MCkKKysrIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw5ICsx
MDIsMTEgQEAKIAkJODY5MDgzMTUwRTY1MThENzAwMEQzNkVEIC8qIFdSRUMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY5MDgzMTMwRTY1MThENzAw
MEQzNkVEIC8qIFdSRUMuY3BwICovOyB9OwogCQk4NjkwODMxNjBFNjUxOEQ3MDAwRDM2RUQgLyog
V1JFQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY5
MDgzMTQwRTY1MThENzAwMEQzNkVEIC8qIFdSRUMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyogUmVz
dWx0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODY5RUJDQjYwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NkE5MEVEMDBFRTdENTFGMDBBQjM1
MEQgLyogSklUQXJpdGhtZXRpYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkE5MEVDRjBFRTdENTFGMDBBQjM1MEQgLyogSklUQXJpdGhtZXRpYy5j
cHAgKi87IH07CiAJCTg2QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDMzZFRTkw
RUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IH07CiAJCTg2Q0M4NUExMEVF
NzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMDBFRTc5QTQ3MDAyODg2ODIgLyogSklU
SW5saW5lTWV0aG9kcy5oICovOyB9OwogCQk4NkNDODVBMzBFRTc5Qjc0MDAyODg2ODIgLyogSklU
Q2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi87IH07CisJCTg2Q0M4NUM0
MEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVDMzBFRTdBODk0MDAyODg2ODIg
LyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovOyB9OwogCQk5MDVCMDJBRTBFMjg2NDBGMDA2REY4
ODIgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNUIwMkFEMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3Vu
dGVkTGVha0NvdW50ZXIuY3BwICovOyB9OwogCQk5MEQzNDY5QzBFMjg1MjgwMDA5NDkyRUUgLyog
UmVmQ291bnRlZExlYWtDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MEQzNDY5QjBFMjg1MjgwMDA5NDkyRUUgLyogUmVmQ291bnRlZExlYWtD
b3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMwNzU0QzEwOEIwRjY4MDAwQUIzMDU2IC8qIHBjcmVfY29tcGlsZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3NTRCRjA4QjBGNjgwMDBB
QjMwNTYgLyogcGNyZV9jb21waWxlLmNwcCAqLzsgfTsKQEAgLTU0OSw5ICs1NTEsMTEgQEAKIAkJ
ODY5MDgzMTMwRTY1MThENzAwMEQzNkVEIC8qIFdSRUMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV1JFQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2OTA4MzE0MEU2NTE4RDcwMDBEMzZFRCAvKiBXUkVDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdSRUMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY5RUJD
QjYwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdWx0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NkE5MEVDRjBFRTdENTFGMDBBQjM1MEQgLyogSklUQXJpdGhtZXRpYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRBcml0aG1ldGljLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1i
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAv
KiBKSVRJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VElubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQzg1QTIw
RUU3OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2
Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwNUIwMkFEMEUyODY0MEYwMDZERjg4MiAvKiBSZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTBEMzQ2OUIwRTI4NTI4MDAwOTQ5MkVFIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWZDb3VudGVkTGVha0NvdW50ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8q
IE93blB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25QdHIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkxNiw2ICs5MjAsOCBAQAogCQkxNDI5RDkyQzBF
RDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQk4NkE5MEVDRjBFRTdENTFGMDBBQjM1MEQgLyogSklUQXJpdGhtZXRpYy5j
cHAgKi8sCisJCQkJODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNz
LmNwcCAqLywKIAkJCQk4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi8s
CiAJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZU1ldGhvZHMuaCAqLywK
IAkJCQkxNDI5RDkyRDBFRDIyRDcwMDBCODk2MTkgLyogSklULmNwcCAqLywKQEAgLTE5NzEsNiAr
MTk3Nyw4IEBACiAJCQkJMTQyOURBQzAwRUQyNjNFNzAwQjg5NjE5IC8qIFdSRUNQYXJzZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOURBRTEwRUQyNjQ1QjAwQjg5NjE5IC8qIFdSRUNHZW5l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZDQzg1QTMwRUU3OUI3NDAwMjg4NjgyIC8q
IEpJVENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZDQzg1QzQwRUU3QTg5NDAwMjg4Njgy
IC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2QTkwRUQwMEVF
N0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owo=
</data>
<flag name="review"
          id="12033"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>