<?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>206434</bug_id>
          
          <creation_ts>2020-01-17 11:47:35 -0800</creation_ts>
          <short_desc>Rename AXIsolatedTreeNode.cpp/h to match AXIsolatedObject class name.</short_desc>
          <delta_ts>2020-01-17 14:08:15 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>annulen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1608121</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-01-17 11:47:35 -0800</bug_when>
    <thetext>Rename AXIsolatedTreeNode.cpp/h to match AXIsolatedObject class name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608128</commentid>
    <comment_count>1</comment_count>
      <attachid>388073</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-01-17 11:59:21 -0800</bug_when>
    <thetext>Created attachment 388073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608195</commentid>
    <comment_count>2</comment_count>
      <attachid>388073</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-17 14:07:20 -0800</bug_when>
    <thetext>Comment on attachment 388073
Patch

Clearing flags on attachment: 388073

Committed r254766: &lt;https://trac.webkit.org/changeset/254766&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608196</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-17 14:07:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608198</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-17 14:08:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/58695067&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388073</attachid>
            <date>2020-01-17 11:59:21 -0800</date>
            <delta_ts>2020-01-17 14:07:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206434-20200117145920.patch</filename>
            <type>text/plain</type>
            <size>226985</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDVmYjljNjMxYmU2MTc4
ZDIzY2IzZmYxNWU4ZjM2NjhiMzU2YzE4OC4uMjdiZGY0YWM4ZGZiYTZhNzBkZWU1ZmI4MjBjZjhm
MzYwZTUzYzAwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTAxLTE3ICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgQVhJ
c29sYXRlZFRyZWVOb2RlLmNwcC9oIHRvIG1hdGNoIEFYSXNvbGF0ZWRPYmplY3QgY2xhc3MgbmFt
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjQz
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpbGUg
cmVuYW1pbmcgdG8gbWF0Y2ggQVhJc29sYXRlZE9iamVjdCBjbGFzcyBuYW1lLgorCisgICAgICAg
ICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5jcHAuCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVO
b2RlLmguCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRU
cmVlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbToK
KwogMjAyMC0wMS0xNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0xGQ11bSUZDXSBVc2UgT3B0aW9uYWwgZm9yIHBhcnRpYWxMZWFkaW5nL1RyYWlsaW5nVGV4
dEl0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDFmNzc4ZjE4Yzg5NTU4MWIwMmE3OTRhN2I5ZDI4
MjQ3MDE3YmQwMDQuLjc0NDA5MDM1YjU3NmQ3NWNkOGI4MjhiYzZkYjg0OGVkNWM2MGRmZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQpAQCAtMTcxLDggKzE3MSw4IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaAogCisg
ICAgYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCiAgICAgYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAotICAgIGFjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5oCiAKICAgICBhbmltYXRpb24vQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudC5oCiAgICAgYW5pbWF0aW9uL0NvbXBvc2l0ZU9wZXJhdGlv
bi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CmluZGV4IDZlOGUyMTMwODJlNDFkOWFjNzY5ODU1MTg2MDI4ZGZkOTk0
ZWY3ZTcuLjU0MDBkYzkxYTMzZWJlZTI2MjUwNTkwMGMxODRmMjdkNTg4ZjMyMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CkBAIC00NTEsOCArNDUxLDggQEAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVIZWFkZXJDb250YWluZXIuY3BwCiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJv
dy5jcHAKIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRyZWUuY3BwCiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUcmVlSXRlbS5jcHAKK2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwCiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZS5jcHAKLWFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5j
cHAKIAogYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5jcHAKIGFuaW1hdGlvbi9LZXlmcmFtZUVm
ZmVjdFN0YWNrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDgxMGYwZGEzNWIzMmViNTY2NTMzOTQ3ZDlhZTU5NmRiMDQ0ZWM5
YWYuLjAwZmNkMTAxN2NkMmQ4ZWU5NTAzYjU4MzIzOTc1ZGYyOTAzZmY1ZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcxMCw3
ICs3MTAsNyBAQAogCQkyOUE4MTI0OTBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyOUE4MTI0NTBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMjlBQ0IyMTIxNDNFNzEyODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2Nr
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
OUFDQjIxMTE0M0U3MTI4MDA2QkNBNUYgLyogQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuaCAqLzsg
fTsKIAkJMjlBRTIxMkQyMUFCOUVFQjAwODY5MjgzIC8qIEFYSXNvbGF0ZWRUcmVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUFFMjEyQjIxQUI5RUVC
MDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkyOUFFMjEzNTIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29s
YXRlZFRyZWVOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyOUFFMjEzMzIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWVOb2RlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjlBRTIxMzUy
MUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QUUyMTMzMjFBQkE0OEEwMDg2OTI4MyAvKiBB
WElzb2xhdGVkT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMjlEN0JDRkExNDQ0QUY3RDAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGlu
QnV0dG9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
OUQ3QkNGOTE0NDRBRjdEMDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCAqLzsg
fTsKIAkJMjlGQUY0QjYxOTVBQjA4OTAwQTUyMkRDIC8qIFRleHRVbmRvSW5zZXJ0aW9uTWFya3Vw
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUZB
RjRCNTE5NUFCMDg5MDBBNTIyREMgLyogVGV4dFVuZG9JbnNlcnRpb25NYXJrdXBNYWMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQjM2NUM4NDE1
MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJl
bmRlclNWR0VsbGlwc2UuaCAqLzsgfTsKQEAgLTY2ODEsOCArNjY4MSw4IEBACiAJCTI5QUNCMjEz
MTQzRTc0OTgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5QUUyMTJCMjFBQjlFRUIwMDg2OTI4MyAv
KiBBWElzb2xhdGVkVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBWElzb2xhdGVkVHJlZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUFFMjEyQzIxQUI5RUVCMDA4NjkyODMgLyogQVhJ
c29sYXRlZFRyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVhJc29sYXRlZFRyZWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyOUFFMjEzMzIxQUJBNDhBMDA4NjkyODMgLyog
QVhJc29sYXRlZFRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFYSXNvbGF0ZWRUcmVlTm9kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyOUFFMjEzNDIxQUJBNDhBMDA4NjkyODMg
LyogQVhJc29sYXRlZFRyZWVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFYSXNvbGF0ZWRU
cmVlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5QUUyMTMzMjFBQkE0
OEEwMDg2OTI4MyAvKiBBWElzb2xhdGVkT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFYSXNvbGF0
ZWRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjlBRTIxMzQyMUFCQTQ4
QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVhJ
c29sYXRlZE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5RDdCQ0Y1
MTQ0NEFGNTgwMDcwNjE5QyAvKiBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5RDdCQ0Y5MTQ0NEFGN0QwMDcwNjE5QyAv
KiBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyOUUwNEEyN0JFRDJGODFGOThFOTAyMkIgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0JlZm9yZVVubG9hZEV2ZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzgwMCwxMCArMTc4MDAsMTAgQEAKIAkJMjlB
RTIxMjkyMUFCOUVDQjAwODY5MjgzIC8qIGlzb2xhdGVkdHJlZSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMjlBRTIxMzQyMUFCQTQ4QTAwODY5MjgzIC8q
IEFYSXNvbGF0ZWRPYmplY3QuY3BwICovLAorCQkJCTI5QUUyMTMzMjFBQkE0OEEwMDg2OTI4MyAv
KiBBWElzb2xhdGVkT2JqZWN0LmggKi8sCiAJCQkJMjlBRTIxMkMyMUFCOUVFQjAwODY5MjgzIC8q
IEFYSXNvbGF0ZWRUcmVlLmNwcCAqLywKIAkJCQkyOUFFMjEyQjIxQUI5RUVCMDA4NjkyODMgLyog
QVhJc29sYXRlZFRyZWUuaCAqLywKLQkJCQkyOUFFMjEzNDIxQUJBNDhBMDA4NjkyODMgLyogQVhJ
c29sYXRlZFRyZWVOb2RlLmNwcCAqLywKLQkJCQkyOUFFMjEzMzIxQUJBNDhBMDA4NjkyODMgLyog
QVhJc29sYXRlZFRyZWVOb2RlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGlzb2xhdGVkdHJlZTsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTE2MSw4ICsyOTE2MSw4IEBACiAJCQkJ
MDcwMzYzRTIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNEMzM2RjYyMTdGOUY2NDcwMERERENEMCAvKiBBVlRyYWNrUHJpdmF0
ZUFWRk9iakNJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzAzNjNFNjE4MUExQ0RDMDBDMDc0
QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTI5QUUyMTM1
MjFBQkE0OEEwMDg2OTI4MyAvKiBBWElzb2xhdGVkT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyOUFFMjEyRDIxQUI5RUVCMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWUuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTI5QUUyMTM1MjFBQkE0OEEwMDg2OTI4MyAvKiBBWElzb2xhdGVkVHJlZU5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Ny
b2xsU25hcE9mZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjM4MEZCQjlDMUQwMDUx
MDI5MyAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MUM5RjJGOTFBRTNC
RUIwMDA5NUI2MUMgLyogQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXgg
ZTM2YTIwZDY5OGE3MDVmMTBkYjFlZDJmNmUxZDhiOGQ5OWRkNTI5Mi4uNmYzN2MwYjNmMjg5NjM1
MDUyODQ0MDRkNDJjNjFmN2ViMDQ4OTZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJB
WE9iamVjdENhY2hlLmgiCiAKKyNpbmNsdWRlICJBWElzb2xhdGVkT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiQVhJc29sYXRlZFRyZWUuaCIKLSNpbmNsdWRlICJBWElzb2xhdGVkVHJlZU5vZGUuaCIKICNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZWI0MGYxYThiZWEyMDUxYTgw
MGVlNmE2YjYwMjBmZTJiMGE3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcApAQCAtMCwwICsx
LDE4NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQorI2luY2x1ZGUgIkFYSXNvbGF0ZWRPYmplY3Qu
aCIKKworI2luY2x1ZGUgIkFYSXNvbGF0ZWRUcmVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQVhJc29sYXRlZE9iamVjdDo6QVhJc29sYXRlZE9iamVjdChBWENvcmVPYmplY3QmIG9iamVj
dCwgYm9vbCBpc1Jvb3QpCisgICAgOiBtX2lkKG9iamVjdC5vYmplY3RJRCgpKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEob2JqZWN0
LCBpc1Jvb3QpOworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitSZWY8QVhJc29sYXRl
ZE9iamVjdD4gQVhJc29sYXRlZE9iamVjdDo6Y3JlYXRlKEFYQ29yZU9iamVjdCYgb2JqZWN0LCBi
b29sIGlzUm9vdCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBWElzb2xhdGVkT2JqZWN0
KG9iamVjdCwgaXNSb290KSk7Cit9CisKK0FYSXNvbGF0ZWRPYmplY3Q6On5BWElzb2xhdGVkT2Jq
ZWN0KCkgPSBkZWZhdWx0OworCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmluaXRpYWxpemVBdHRy
aWJ1dGVEYXRhKEFYQ29yZU9iamVjdCYgb2JqZWN0LCBib29sIGlzUm9vdCkKK3sKKyAgICBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Qm91bmRpbmdCb3hSZWN0LCBvYmplY3QuYm91bmRpbmdC
b3hSZWN0KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFbGVtZW50UmVjdCwg
b2JqZWN0LmVsZW1lbnRSZWN0KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpS
b2xlVmFsdWUsIHN0YXRpY19jYXN0PGludD4ob2JqZWN0LnJvbGVWYWx1ZSgpKSk7CisgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvbGVQbGF0Zm9ybVN0cmluZywgb2JqZWN0LnJvbGVQ
bGF0Zm9ybVN0cmluZygpLmlzb2xhdGVkQ29weSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6QVJJQUxhbmRtYXJrUm9sZURlc2NyaXB0aW9uLCBvYmplY3QuYXJpYUxhbmRtYXJr
Um9sZURlc2NyaXB0aW9uKCkuaXNvbGF0ZWRDb3B5KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpSb2xlRGVzY3JpcHRpb24sIG9iamVjdC5yb2xlRGVzY3JpcHRpb24oKS5pc29s
YXRlZENvcHkoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQXR0YWNobWVu
dCwgb2JqZWN0LmlzQXR0YWNobWVudCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6SXNMaW5rLCBvYmplY3QuaXNMaW5rKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpJc0ltYWdlTWFwTGluaywgb2JqZWN0LmlzSW1hZ2VNYXBMaW5rKCkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0ltYWdlLCBvYmplY3QuaXNJbWFnZSgpKTsKKyAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNGaWxlVXBsb2FkQnV0dG9uLCBvYmplY3QuaXNG
aWxlVXBsb2FkQnV0dG9uKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0Fj
Y2Vzc2liaWxpdHlJZ25vcmVkLCBvYmplY3QuYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKTsKKyAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNUcmVlLCBvYmplY3QuaXNUcmVlKCkpOwor
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1Njcm9sbGJhciwgb2JqZWN0LmlzU2Ny
b2xsYmFyKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSZWxhdGl2ZUZyYW1l
LCBvYmplY3QucmVsYXRpdmVGcmFtZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6U3BlZWNoSGludCwgb2JqZWN0LnNwZWVjaEhpbnRBdHRyaWJ1dGVWYWx1ZSgpLmlzb2xhdGVk
Q29weSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGl0bGUsIG9iamVjdC50
aXRsZUF0dHJpYnV0ZVZhbHVlKCkuaXNvbGF0ZWRDb3B5KCkpOworICAgIHNldFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpEZXNjcmlwdGlvbiwgb2JqZWN0LmRlc2NyaXB0aW9uQXR0cmlidXRlVmFs
dWUoKS5pc29sYXRlZENvcHkoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okhl
bHBUZXh0LCBvYmplY3QuaGVscFRleHRBdHRyaWJ1dGVWYWx1ZSgpLmlzb2xhdGVkQ29weSgpKTsK
KyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNTZWFyY2hGaWVsZCwgb2JqZWN0Lmlz
U2VhcmNoRmllbGQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVkaWFU
aW1lbGluZSwgb2JqZWN0LmlzTWVkaWFUaW1lbGluZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6SXNNZW51UmVsYXRlZCwgb2JqZWN0LmlzTWVudVJlbGF0ZWQoKSk7CisgICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVudSwgb2JqZWN0LmlzTWVudSgpKTsKKyAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNZW51QmFyLCBvYmplY3QuaXNNZW51QmFy
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01lbnVCdXR0b24sIG9iamVj
dC5pc01lbnVCdXR0b24oKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVu
dUl0ZW0sIG9iamVjdC5pc01lbnVJdGVtKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpJc0lucHV0SW1hZ2UsIG9iamVjdC5pc0lucHV0SW1hZ2UoKSk7CisgICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OklzUHJvZ3Jlc3NJbmRpY2F0b3IsIG9iamVjdC5pc1Byb2dyZXNz
SW5kaWNhdG9yKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1NsaWRlciwg
b2JqZWN0LmlzU2xpZGVyKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0Nv
bnRyb2wsIG9iamVjdC5pc0NvbnRyb2woKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OklzTGlzdCwgb2JqZWN0LmlzTGlzdCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6SXNVbm9yZGVyZWRMaXN0LCBvYmplY3QuaXNVbm9yZGVyZWRMaXN0KCkpOworICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc09yZGVyZWRMaXN0LCBvYmplY3QuaXNPcmRlcmVk
TGlzdCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNEZXNjcmlwdGlvbkxp
c3QsIG9iamVjdC5pc0Rlc2NyaXB0aW9uTGlzdCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6SXNUYWJsZVJvdywgb2JqZWN0LmlzVGFibGVSb3coKSk7CisgICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGVDb2x1bW4sIG9iamVjdC5pc1RhYmxlQ29sdW1uKCkp
OworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlQ2VsbCwgb2JqZWN0Lmlz
VGFibGVDZWxsKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0ZpZWxkc2V0
LCBvYmplY3QuaXNGaWVsZHNldCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
SXNHcm91cCwgb2JqZWN0LmlzR3JvdXAoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OklzQVJJQVRyZWVHcmlkUm93LCBvYmplY3QuaXNBUklBVHJlZUdyaWRSb3coKSk7CisgICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUxpc3QsIG9iamVjdC5pc01lbnVMaXN0
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01lbnVMaXN0UG9wdXAsIG9i
amVjdC5pc01lbnVMaXN0UG9wdXAoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OklzTWVudUxpc3RPcHRpb24sIG9iamVjdC5pc01lbnVMaXN0T3B0aW9uKCkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1RleHRDb250cm9sLCBvYmplY3QuaXNUZXh0Q29udHJv
bCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNCdXR0b24sIG9iamVjdC5p
c0J1dHRvbigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNSYW5nZUNvbnRy
b2wsIG9iamVjdC5pc1JhbmdlQ29udHJvbCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6SXNTdHlsZUZvcm1hdEdyb3VwLCBvYmplY3QuaXNTdHlsZUZvcm1hdEdyb3VwKCkpOwor
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc091dHB1dCwgb2JqZWN0LmlzT3V0cHV0
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0RhdGV0aW1lQXR0
cmlidXRlLCBvYmplY3Quc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpKTsKKyAgICBzZXRQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6RGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSwgb2JqZWN0LmRhdGV0
aW1lQXR0cmlidXRlVmFsdWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNh
blNldEZvY3VzQXR0cmlidXRlLCBvYmplY3QuY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSk7CisgICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMsIG9i
amVjdC5jYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVzKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpDYW5TZXRWYWx1ZUF0dHJpYnV0ZSwgb2JqZWN0LmNhblNldFZhbHVlQXR0cmli
dXRlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYW5TZXROdW1lcmljVmFs
dWUsIG9iamVjdC5jYW5TZXROdW1lcmljVmFsdWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OklzUGFzc3dvcmRGaWVsZCwgb2JqZWN0LmlzUGFzc3dvcmRGaWVsZCgpKTsKKyAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNIZWFkaW5nLCBvYmplY3QuaXNIZWFkaW5n
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0NoZWNrZWQsIG9iamVjdC5p
c0NoZWNrZWQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzRW5hYmxlZCwg
b2JqZWN0LmlzRW5hYmxlZCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNT
ZWxlY3RlZCwgb2JqZWN0LmlzU2VsZWN0ZWQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OklzRm9jdXNlZCwgb2JqZWN0LmlzRm9jdXNlZCgpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNIb3ZlcmVkLCBvYmplY3QuaXNIb3ZlcmVkKCkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0luZGV0ZXJtaW5hdGUsIG9iamVjdC5pc0luZGV0ZXJt
aW5hdGUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTG9hZGVkLCBvYmpl
Y3QuaXNMb2FkZWQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTXVsdGlT
ZWxlY3RhYmxlLCBvYmplY3QuaXNNdWx0aVNlbGVjdGFibGUoKSk7CisgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OklzT25TY3JlZW4sIG9iamVjdC5pc09uU2NyZWVuKCkpOworICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc09mZlNjcmVlbiwgb2JqZWN0LmlzT2ZmU2NyZWVu
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1ByZXNzZWQsIG9iamVjdC5p
c1ByZXNzZWQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVW52aXNpdGVk
LCBvYmplY3QuaXNVbnZpc2l0ZWQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OklzVmlzaXRlZCwgb2JqZWN0LmlzVmlzaXRlZCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6SXNSZXF1aXJlZCwgb2JqZWN0LmlzUmVxdWlyZWQoKSk7CisgICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzUmVxdWlyZWRBdHRyaWJ1dGUsIG9iamVjdC5zdXBw
b3J0c1JlcXVpcmVkQXR0cmlidXRlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpJc0xpbmtlZCwgb2JqZWN0LmlzTGlua2VkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc0V4cGFuZGVkLCBvYmplY3QuaXNFeHBhbmRlZCgpKTsKKyAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6SXNWaXNpYmxlLCBvYmplY3QuaXNWaXNpYmxlKCkpOworICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0NvbGxhcHNlZCwgb2JqZWN0LmlzQ29sbGFwc2Vk
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1NlbGVjdGVkT3B0aW9uQWN0
aXZlLCBvYmplY3QuaXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6Q2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUsIG9iamVjdC5jYW5TZXRTZWxl
Y3RlZEF0dHJpYnV0ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0
U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSwgb2JqZWN0LmNhblNldFNlbGVjdGVkQ2hpbGRyZW5B
dHRyaWJ1dGUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNhblNldEV4cGFu
ZGVkQXR0cmlidXRlLCBvYmplY3QuY2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSk7CisgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlLCBvYmpl
Y3QuaXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2UoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OlZhbGlkYXRpb25NZXNzYWdlLCBvYmplY3QudmFsaWRhdGlvbk1lc3NhZ2UoKSk7
CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkJsb2NrcXVvdGVMZXZlbCwgb2JqZWN0
LmJsb2NrcXVvdGVMZXZlbCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SGVh
ZGluZ0xldmVsLCBvYmplY3QuaGVhZGluZ0xldmVsKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpUYWJsZUxldmVsLCBvYmplY3QudGFibGVMZXZlbCgpKTsKKyAgICBzZXRQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6QWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlLCBzdGF0aWNfY2Fz
dDxpbnQ+KG9iamVjdC5jaGVja2JveE9yUmFkaW9WYWx1ZSgpKSk7CisgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OlZhbHVlRGVzY3JpcHRpb24sIG9iamVjdC52YWx1ZURlc2NyaXB0aW9u
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZUZvclJhbmdlLCBvYmpl
Y3QudmFsdWVGb3JSYW5nZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF4
VmFsdWVGb3JSYW5nZSwgb2JqZWN0Lm1heFZhbHVlRm9yUmFuZ2UoKSk7CisgICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6Ok1pblZhbHVlRm9yUmFuZ2UsIG9iamVjdC5taW5WYWx1ZUZvclJh
bmdlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZFJhZGlvQnV0
dG9uLCBvYmplY3Quc2VsZWN0ZWRSYWRpb0J1dHRvbigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6U2VsZWN0ZWRUYWJJdGVtLCBvYmplY3Quc2VsZWN0ZWRUYWJJdGVtKCkpOwor
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMYXlvdXRDb3VudCwgb2JqZWN0LmxheW91
dENvdW50KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFc3RpbWF0ZWRMb2Fk
aW5nUHJvZ3Jlc3MsIG9iamVjdC5lc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKSk7CisgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQU93bnMsIG9iamVjdC5zdXBwb3J0
c0FSSUFPd25zKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0FjdGl2ZURl
c2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIsIG9iamVjdC5pc0FjdGl2ZURlc2NlbmRhbnRPZkZv
Y3VzZWRDb250YWluZXIoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okhhc1Bv
cHVwLCBvYmplY3QuaGFzUG9wdXAoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlBvcHVwVmFsdWUsIG9iamVjdC5wb3B1cFZhbHVlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpQcmVzc2VkSXNQcmVzZW50LCBvYmplY3QucHJlc3NlZElzUHJlc2VudCgpKTsK
KyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQUlzTXVsdGlsaW5lLCBvYmplY3Qu
YXJpYUlzTXVsdGlsaW5lKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJbnZh
bGlkU3RhdHVzLCBvYmplY3QuaW52YWxpZFN0YXR1cygpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6U3VwcG9ydHNFeHBhbmRlZCwgb2JqZWN0LnN1cHBvcnRzRXhwYW5kZWQoKSk7
CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlNvcnREaXJlY3Rpb24sIHN0YXRpY19j
YXN0PGludD4ob2JqZWN0LnNvcnREaXJlY3Rpb24oKSkpOworICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpDYW52YXNIYXNGYWxsYmFja0NvbnRlbnQsIG9iamVjdC5jYW52YXNIYXNGYWxs
YmFja0NvbnRlbnQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRz
UmFuZ2VWYWx1ZSwgb2JqZWN0LnN1cHBvcnRzUmFuZ2VWYWx1ZSgpKTsKKyAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6SWRlbnRpZmllckF0dHJpYnV0ZSwgb2JqZWN0LmlkZW50aWZpZXJB
dHRyaWJ1dGUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpbmtSZWxWYWx1
ZSwgb2JqZWN0LmxpbmtSZWxWYWx1ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6Q3VycmVudFN0YXRlLCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5jdXJyZW50U3RhdGUoKSkp
OworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDdXJyZW50VmFsdWUsIG9iamVjdC5j
dXJyZW50VmFsdWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRz
Q3VycmVudCwgb2JqZWN0LnN1cHBvcnRzQ3VycmVudCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6S2V5U2hvcnRjdXRzVmFsdWUsIG9iamVjdC5rZXlTaG9ydGN1dHNWYWx1ZSgp
KTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNTZXRTaXplLCBvYmpl
Y3Quc3VwcG9ydHNTZXRTaXplKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpT
dXBwb3J0c1BhdGgsIG9iamVjdC5zdXBwb3J0c1BhdGgoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OlN1cHBvcnRzUG9zSW5TZXQsIG9iamVjdC5zdXBwb3J0c1Bvc0luU2V0KCkp
OworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTZXRTaXplLCBvYmplY3Quc2V0U2l6
ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UG9zSW5TZXQsIG9iamVjdC5w
b3NJblNldCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklB
RHJvcHBpbmcsIG9iamVjdC5zdXBwb3J0c0FSSUFEcm9wcGluZygpKTsKKyAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBRHJhZ2dpbmcsIG9iamVjdC5zdXBwb3J0c0FS
SUFEcmFnZ2luZygpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNBUklBR3Jh
YmJlZCwgb2JqZWN0LmlzQVJJQUdyYWJiZWQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkFSSUFEcm9wRWZmZWN0cywgb2JqZWN0LmRldGVybWluZUFSSUFEcm9wRWZmZWN0cygp
KTsKKyAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGl0bGVVSUVsZW1lbnQs
IG9iamVjdC50aXRsZVVJRWxlbWVudCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6RXhwb3Nlc1RpdGxlVUlFbGVtZW50LCBvYmplY3QuZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkp
OworICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWZXJ0aWNhbFNjcm9sbEJh
ciwgb2JqZWN0LnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246OlZlcnRpY2FsKSk7
CisgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okhvcml6b250YWxTY3JvbGxC
YXIsIG9iamVjdC5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpIb3Jpem9udGFs
KSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFSb2xlQXR0cmlidXRlLCBz
dGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5hcmlhUm9sZUF0dHJpYnV0ZSgpKSk7CisgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbXB1dGVkTGFiZWwsIG9iamVjdC5jb21wdXRlZExhYmVs
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlclZhbHVlLCBv
YmplY3QucGxhY2Vob2xkZXJWYWx1ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6RXhwYW5kZWRUZXh0VmFsdWUsIG9iamVjdC5leHBhbmRlZFRleHRWYWx1ZSgpKTsKKyAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSwgb2Jq
ZWN0LnN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OlN1cHBvcnRzUHJlc3NBY3Rpb24sIG9iamVjdC5zdXBwb3J0c1ByZXNzQWN0aW9u
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDbGlja1BvaW50LCBvYmplY3Qu
Y2xpY2tQb2ludCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q29tcHV0ZWRS
b2xlU3RyaW5nLCBvYmplY3QuY29tcHV0ZWRSb2xlU3RyaW5nKCkpOworICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpJc1ZhbHVlQXV0b2ZpbGxlZCwgb2JqZWN0LmlzVmFsdWVBdXRvZmls
bGVkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1ZhbHVlQXV0b2ZpbGxB
dmFpbGFibGUsIG9iamVjdC5pc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSk7CisgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlQXV0b2ZpbGxCdXR0b25UeXBlLCBzdGF0aWNfY2Fz
dDxpbnQ+KG9iamVjdC52YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpKSk7CisgICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OlVSTCwgb2JqZWN0LnVybCgpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6QWNjZXNzS2V5LCBvYmplY3QuYWNjZXNzS2V5KCkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBY3Rpb25WZXJiLCBvYmplY3QuYWN0aW9uVmVyYigpKTsK
KyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UmVhZE9ubHlWYWx1ZSwgb2JqZWN0LnJl
YWRPbmx5VmFsdWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkF1dG9Db21w
bGV0ZVZhbHVlLCBvYmplY3QuYXV0b0NvbXBsZXRlVmFsdWUoKSk7CisgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OlNwZWFrQXMsIG9iamVjdC5zcGVha0FzUHJvcGVydHkoKSk7CisgICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN0cmluZ1ZhbHVlLCBvYmplY3Quc3RyaW5nVmFs
dWUoKS5pc29sYXRlZENvcHkoKSk7CisjaWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYXJldEJyb3dzaW5n
RW5hYmxlZCwgb2JqZWN0LmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpOworI2VuZGlmCisgICAgc2V0
T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkZvY3VzYWJsZUFuY2VzdG9yLCBvYmplY3Qu
Zm9jdXNhYmxlQW5jZXN0b3IoKSk7CisgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OkVkaXRhYmxlQW5jZXN0b3IsIG9iamVjdC5lZGl0YWJsZUFuY2VzdG9yKCkpOworICAgIHNl
dE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIaWdoZXN0RWRpdGFibGVBbmNlc3Rvciwg
b2JqZWN0LmhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpPcmllbnRhdGlvbiwgc3RhdGljX2Nhc3Q8aW50PihvYmplY3Qub3JpZW50YXRp
b24oKSkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIaWVyYXJjaGljYWxMZXZl
bCwgb2JqZWN0LmhpZXJhcmNoaWNhbExldmVsKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpMYW5ndWFnZSwgb2JqZWN0Lmxhbmd1YWdlKCkpOworICAgIHNldFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpDYW5IYXZlU2VsZWN0ZWRDaGlsZHJlbiwgb2JqZWN0LmNhbkhhdmVTZWxl
Y3RlZENoaWxkcmVuKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIYXNBUklB
VmFsdWVOb3csIG9iamVjdC5oYXNBUklBVmFsdWVOb3coKSk7CisgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OlRhZ05hbWUsIG9iamVjdC50YWdOYW1lKCkpOworICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0xpdmVSZWdpb24sIG9iamVjdC5zdXBwb3J0c0xpdmVS
ZWdpb24oKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzSW5zaWRlTGl2ZVJl
Z2lvbiwgb2JqZWN0LmlzSW5zaWRlTGl2ZVJlZ2lvbigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6TGl2ZVJlZ2lvblN0YXR1cywgb2JqZWN0LmxpdmVSZWdpb25TdGF0dXMoKSk7
CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdpb25SZWxldmFudCwgb2Jq
ZWN0LmxpdmVSZWdpb25SZWxldmFudCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6TGl2ZVJlZ2lvbkF0b21pYywgb2JqZWN0LmxpdmVSZWdpb25BdG9taWMoKSk7CisgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQnVzeSwgb2JqZWN0LmlzQnVzeSgpKTsKKyAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNJbmxpbmVUZXh0LCBvYmplY3QuaXNJbmxpbmVU
ZXh0KCkpOworICAgIGlmIChvYmplY3QuaXNUZXh0Q29udHJvbCgpKQorICAgICAgICBzZXRQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6VGV4dExlbmd0aCwgb2JqZWN0LnRleHRMZW5ndGgoKSk7CisK
KyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbjsKKyAgICBv
YmplY3Quc2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKKyAgICBzZXRPYmplY3RW
ZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRDaGlsZHJlbiwgc2VsZWN0ZWRD
aGlsZHJlbik7CisKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdmlzaWJsZUNoaWxk
cmVuOworICAgIG9iamVjdC52aXNpYmxlQ2hpbGRyZW4odmlzaWJsZUNoaWxkcmVuKTsKKyAgICBz
ZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmlzaWJsZUNoaWxkcmVuLCB2
aXNpYmxlQ2hpbGRyZW4pOworCisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYkNo
aWxkcmVuOworICAgIG9iamVjdC50YWJDaGlsZHJlbih0YWJDaGlsZHJlbik7CisgICAgc2V0T2Jq
ZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlRhYkNoaWxkcmVuLCB0YWJDaGlsZHJl
bik7CisKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYVRyZWVSb3dzOworICAg
IG9iamVjdC5hcmlhVHJlZVJvd3MoYXJpYVRyZWVSb3dzKTsKKyAgICBzZXRPYmplY3RWZWN0b3JQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQVRyZWVSb3dzLCBhcmlhVHJlZVJvd3MpOworCisg
ICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3M7
CisgICAgb2JqZWN0LmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MoYXJpYVRyZWVJdGVtRGlzY2xv
c2VkUm93cyk7CisgICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFS
SUFUcmVlSXRlbURpc2Nsb3NlZFJvd3MsIGFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MpOworCisg
ICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFUcmVlSXRlbUNvbnRlbnQ7CisgICAg
b2JqZWN0LmFyaWFUcmVlSXRlbUNvbnRlbnQoYXJpYVRyZWVJdGVtQ29udGVudCk7CisgICAgc2V0
T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFUcmVlSXRlbUNvbnRlbnQs
IGFyaWFUcmVlSXRlbUNvbnRlbnQpOworCisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IGxpbmtlZFVJRWxlbWVudHM7CisgICAgb2JqZWN0LmxpbmtlZFVJRWxlbWVudHMobGlua2VkVUlF
bGVtZW50cyk7CisgICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okxp
bmtlZFVJRWxlbWVudHMsIGxpbmtlZFVJRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGFyaWFDb250cm9sc0VsZW1lbnRzOworICAgIG9iamVjdC5hcmlhQ29udHJv
bHNFbGVtZW50cyhhcmlhQ29udHJvbHNFbGVtZW50cyk7CisgICAgc2V0T2JqZWN0VmVjdG9yUHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFDb250cm9sc0VsZW1lbnRzLCBhcmlhQ29udHJvbHNF
bGVtZW50cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYURldGFpbHNF
bGVtZW50czsKKyAgICBvYmplY3QuYXJpYURldGFpbHNFbGVtZW50cyhhcmlhRGV0YWlsc0VsZW1l
bnRzKTsKKyAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQURl
dGFpbHNFbGVtZW50cywgYXJpYURldGFpbHNFbGVtZW50cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzOworICAgIG9iamVjdC5hcmlh
RXJyb3JNZXNzYWdlRWxlbWVudHMoYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKTsKKyAgICBzZXRP
YmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQUVycm9yTWVzc2FnZUVsZW1l
bnRzLCBhcmlhRXJyb3JNZXNzYWdlRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGFyaWFGbG93VG9FbGVtZW50czsKKyAgICBvYmplY3QuYXJpYUZsb3dUb0VsZW1l
bnRzKGFyaWFGbG93VG9FbGVtZW50cyk7CisgICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OkFSSUFGbG93VG9FbGVtZW50cywgYXJpYUZsb3dUb0VsZW1lbnRzKTsKKwor
ICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhT3duc0VsZW1lbnRzOworICAgIG9i
amVjdC5hcmlhT3duc0VsZW1lbnRzKGFyaWFPd25zRWxlbWVudHMpOworICAgIHNldE9iamVjdFZl
Y3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBT3duc0VsZW1lbnRzLCBhcmlhT3duc0Vs
ZW1lbnRzKTsKKworICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4gdGV4dHM7CisgICAgb2Jq
ZWN0LmFjY2Vzc2liaWxpdHlUZXh0KHRleHRzKTsKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZVRleHQ+IGlzb2xhdGVkVGV4dHM7CisgICAgaXNvbGF0ZWRUZXh0cy5yZXNlcnZl
Q2FwYWNpdHkodGV4dHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gdGV4dCA6IHRleHRzKSB7Cisg
ICAgICAgIEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVUZXh0IGlzb2xhdGVkVGV4dDsKKyAgICAg
ICAgaXNvbGF0ZWRUZXh0LnRleHQgPSB0ZXh0LnRleHQ7CisgICAgICAgIGlzb2xhdGVkVGV4dC50
ZXh0U291cmNlID0gdGV4dC50ZXh0U291cmNlOworICAgICAgICBmb3IgKGF1dG8gb2JqZWN0IDog
dGV4dC50ZXh0RWxlbWVudHMpCisgICAgICAgICAgICBpc29sYXRlZFRleHQudGV4dEVsZW1lbnRz
LmFwcGVuZChvYmplY3QtPm9iamVjdElEKCkpOworICAgICAgICBpc29sYXRlZFRleHRzLnVuY2hl
Y2tlZEFwcGVuZChpc29sYXRlZFRleHQpOworICAgIH0KKyAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6QWNjZXNzaWJpbGl0eVRleHQsIGlzb2xhdGVkVGV4dHMpOworCisgICAgLy8gU3Bp
biBidXR0b24gc3VwcG9ydC4KKyAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
RGVjcmVtZW50QnV0dG9uLCBvYmplY3QuZGVjcmVtZW50QnV0dG9uKCkpOworICAgIHNldE9iamVj
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJbmNyZW1lbnRCdXR0b24sIG9iamVjdC5pbmNyZW1l
bnRCdXR0b24oKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzSW5jcmVtZW50
b3IsIG9iamVjdC5pc0luY3JlbWVudG9yKCkpOworCisgICAgVmVjdG9yPFN0cmluZz4gY2xhc3NM
aXN0OworICAgIG9iamVjdC5jbGFzc0xpc3QoY2xhc3NMaXN0KTsKKyAgICBTdHJpbmcgY29tYmlu
ZWRDbGFzc0xpc3Q7CisgICAgZm9yIChhdXRvIGl0ID0gY2xhc3NMaXN0LmJlZ2luKCksIGVuZCA9
IGNsYXNzTGlzdC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbWJpbmVkQ2xh
c3NMaXN0LmFwcGVuZCgqaXQpOworICAgICAgICBjb21iaW5lZENsYXNzTGlzdC5hcHBlbmQoIiAi
KTsKKyAgICB9CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNsYXNzTGlzdCwgY29t
YmluZWRDbGFzc0xpc3QpOworICAgIAorICAgIGludCByLCBnLCBiOworICAgIG9iamVjdC5jb2xv
clZhbHVlKHIsIGcsIGIpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlLCBDb2xvcihyLCBnLCBiKSk7CisgICAgCisgICAgaWYgKGJvb2wgaXNNYXRoRWxlbWVudCA9
IG9iamVjdC5pc01hdGhFbGVtZW50KCkpIHsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OklzTWF0aEVsZW1lbnQsIGlzTWF0aEVsZW1lbnQpOworICAgICAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6SXNBbm9ueW1vdXNNYXRoT3BlcmF0b3IsIG9iamVjdC5pc0Fub255
bW91c01hdGhPcGVyYXRvcigpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OklzTWF0aEZyYWN0aW9uLCBvYmplY3QuaXNNYXRoRnJhY3Rpb24oKSk7CisgICAgICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhGZW5jZWQsIG9iamVjdC5pc01hdGhGZW5jZWQo
KSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhTdWJzY3JpcHRT
dXBlcnNjcmlwdCwgb2JqZWN0LmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpOworICAgICAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoUm93LCBvYmplY3QuaXNNYXRoUm93
KCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVW5kZXJPdmVy
LCBvYmplY3QuaXNNYXRoVW5kZXJPdmVyKCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6SXNNYXRoUm9vdCwgb2JqZWN0LmlzTWF0aFJvb3QoKSk7CisgICAgICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhTcXVhcmVSb290LCBvYmplY3QuaXNNYXRoU3F1
YXJlUm9vdCgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFRl
eHQsIG9iamVjdC5pc01hdGhUZXh0KCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6SXNNYXRoTnVtYmVyLCBvYmplY3QuaXNNYXRoTnVtYmVyKCkpOworICAgICAgICBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoT3BlcmF0b3IsIG9iamVjdC5pc01hdGhPcGVy
YXRvcigpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aEZlbmNl
T3BlcmF0b3IsIG9iamVjdC5pc01hdGhGZW5jZU9wZXJhdG9yKCkpOworICAgICAgICBzZXRQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IsIG9iamVjdC5pc01h
dGhTZXBhcmF0b3JPcGVyYXRvcigpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OklzTWF0aElkZW50aWZpZXIsIG9iamVjdC5pc01hdGhJZGVudGlmaWVyKCkpOworICAgICAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVGFibGUsIG9iamVjdC5pc01hdGhU
YWJsZSgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFRhYmxl
Um93LCBvYmplY3QuaXNNYXRoVGFibGVSb3coKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpJc01hdGhUYWJsZUNlbGwsIG9iamVjdC5pc01hdGhUYWJsZUNlbGwoKSk7Cisg
ICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhNdWx0aXNjcmlwdCwgb2Jq
ZWN0LmlzTWF0aE11bHRpc2NyaXB0KCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6SXNNYXRoVG9rZW4sIG9iamVjdC5pc01hdGhUb2tlbigpKTsKKyAgICAgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhGZW5jZWRPcGVuU3RyaW5nLCBvYmplY3QubWF0aEZl
bmNlZE9wZW5TdHJpbmcoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpN
YXRoRmVuY2VkQ2xvc2VTdHJpbmcsIG9iamVjdC5tYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKSk7Cisg
ICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoTGluZVRoaWNrbmVzcywgb2Jq
ZWN0Lm1hdGhMaW5lVGhpY2tuZXNzKCkpOworICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6TWF0aFJhZGljYW5kT2JqZWN0LCBvYmplY3QubWF0aFJhZGljYW5kT2JqZWN0
KCkpOworICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF0aFJvb3RJ
bmRleE9iamVjdCwgb2JqZWN0Lm1hdGhSb290SW5kZXhPYmplY3QoKSk7CisgICAgICAgIHNldE9i
amVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoVW5kZXJPYmplY3QsIG9iamVjdC5tYXRo
VW5kZXJPYmplY3QoKSk7CisgICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpNYXRoT3Zlck9iamVjdCwgb2JqZWN0Lm1hdGhPdmVyT2JqZWN0KCkpOworICAgICAgICBzZXRP
YmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF0aE51bWVyYXRvck9iamVjdCwgb2JqZWN0
Lm1hdGhOdW1lcmF0b3JPYmplY3QoKSk7CisgICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpNYXRoRGVub21pbmF0b3JPYmplY3QsIG9iamVjdC5tYXRoRGVub21pbmF0b3JP
YmplY3QoKSk7CisgICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRo
QmFzZU9iamVjdCwgb2JqZWN0Lm1hdGhCYXNlT2JqZWN0KCkpOworICAgICAgICBzZXRPYmplY3RQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF0aFN1YnNjcmlwdE9iamVjdCwgb2JqZWN0Lm1hdGhT
dWJzY3JpcHRPYmplY3QoKSk7CisgICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpNYXRoU3VwZXJzY3JpcHRPYmplY3QsIG9iamVjdC5tYXRoU3VwZXJzY3JpcHRPYmplY3Qo
KSk7CisgICAgICAgIHNldE1hdGhzY3JpcHRzKEFYUHJvcGVydHlOYW1lOjpNYXRoUHJlc2NyaXB0
cywgb2JqZWN0KTsKKyAgICAgICAgc2V0TWF0aHNjcmlwdHMoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhQ
b3N0c2NyaXB0cywgb2JqZWN0KTsKKyAgICB9CisgICAgCisgICAgaWYgKGlzUm9vdCkgeworICAg
ICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UHJldmVudEtleWJvYXJkRE9NRXZlbnRE
aXNwYXRjaCwgb2JqZWN0LnByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goKSk7CisgICAg
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTZXNzaW9uSUQsIG9iamVjdC5zZXNzaW9u
SUQoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpEb2N1bWVudFVSSSwg
b2JqZWN0LmRvY3VtZW50VVJJKCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6RG9jdW1lbnRFbmNvZGluZywgb2JqZWN0LmRvY3VtZW50RW5jb2RpbmcoKSk7CisgICAgfQor
fQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldE1hdGhzY3JpcHRzKEFYUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgQVhDb3JlT2JqZWN0JiBvYmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0
eU1hdGhNdWx0aXNjcmlwdFBhaXJzIHBhaXJzOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gQVhQ
cm9wZXJ0eU5hbWU6Ok1hdGhQcmVzY3JpcHRzKQorICAgICAgICBvYmplY3QubWF0aFByZXNjcmlw
dHMocGFpcnMpOworICAgIGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBBWFByb3BlcnR5TmFtZTo6
TWF0aFBvc3RzY3JpcHRzKQorICAgICAgICBvYmplY3QubWF0aFBvc3RzY3JpcHRzKHBhaXJzKTsK
KyAgICAKKyAgICBzaXplX3QgbWF0aFNpemUgPSBwYWlycy5zaXplKCk7CisgICAgaWYgKCFtYXRo
U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNv
bGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4gaWRQYWlyczsKKyAgICBpZFBhaXJzLnJlc2Vy
dmVDYXBhY2l0eShtYXRoU2l6ZSk7CisgICAgZm9yIChhdXRvIG1hdGhQYWlyIDogcGFpcnMpIHsK
KyAgICAgICAgQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXIgaWRQ
YWlyOworICAgICAgICBpZiAobWF0aFBhaXIuZmlyc3QpCisgICAgICAgICAgICBpZFBhaXIuZmly
c3QgPSBtYXRoUGFpci5maXJzdC0+b2JqZWN0SUQoKTsKKyAgICAgICAgaWYgKG1hdGhQYWlyLnNl
Y29uZCkKKyAgICAgICAgICAgIGlkUGFpci5zZWNvbmQgPSBtYXRoUGFpci5zZWNvbmQtPm9iamVj
dElEKCk7CisgICAgICAgIGlkUGFpcnMudW5jaGVja2VkQXBwZW5kKGlkUGFpcik7CisgICAgfQor
ICAgIHNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgaWRQYWlycyk7Cit9CisKK3ZvaWQgQVhJc29s
YXRlZE9iamVjdDo6c2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBBWENvcmVPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAob2JqZWN0KQorICAgICAgICBzZXRQ
cm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG9iamVjdC0+b2JqZWN0SUQoKSk7CisgICAgZWxzZQorICAg
ICAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG51bGxwdHIsIHRydWUpOworfQorCit2b2lk
IEFYSXNvbGF0ZWRPYmplY3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikKK3sK
KyAgICBzaXplX3QgY2hpbGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOworICAgIGlmICghY2hp
bGRyZW5TaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPEFYSUQ+IGNoaWxk
cmVuVmVjdG9yOworICAgIGNoaWxkcmVuVmVjdG9yLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlblNp
emUpOworICAgIGZvciAoYXV0byBjaGlsZE9iamVjdCA6IGNoaWxkcmVuKQorICAgICAgICBjaGls
ZHJlblZlY3Rvci51bmNoZWNrZWRBcHBlbmQoY2hpbGRPYmplY3QtPm9iamVjdElEKCkpOworICAg
IHNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgY2hpbGRyZW5WZWN0b3IpOworfQorCit2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OnNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
QXR0cmlidXRlVmFsdWVWYXJpYW50JiYgdmFsdWUsIGJvb2wgc2hvdWxkUmVtb3ZlKQoreworICAg
IEFTU0VSVCghbV9pbml0aWFsaXplZCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGlmIChzaG91bGRSZW1vdmUpCisgICAgICAgIG1fYXR0cmlidXRlTWFwLnJlbW92ZShwcm9w
ZXJ0eU5hbWUpOworICAgIGVsc2UKKyAgICAgICAgbV9hdHRyaWJ1dGVNYXAuc2V0KHByb3BlcnR5
TmFtZSwgdmFsdWUpOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFwcGVuZENoaWxkKEFY
SUQgYXhJRCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fY2hpbGRyZW5J
RHMuYXBwZW5kKGF4SUQpOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFBhcmVudChB
WElEIHBhcmVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcGFyZW50
ID0gcGFyZW50OworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmRldGFjaChBY2Nlc3NpYmls
aXR5RGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2FjaGUqKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZElEIDogbV9jaGlsZHJlbklEcykK
KyAgICAgICAgdHJlZSgpLT5ub2RlRm9ySUQoY2hpbGRJRCktPmRldGFjaEZyb21QYXJlbnQoKTsK
KworICAgIG1fY2hpbGRyZW5JRHMuY2xlYXIoKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0
Ojppc0RldGFjaGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6ZGV0YWNoRnJvbVBhcmVu
dCgpCit7CisgICAgbV9wYXJlbnQgPSBJbnZhbGlkQVhJRDsKK30KKwordm9pZCBBWElzb2xhdGVk
T2JqZWN0OjpkaXNjb25uZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IHRyZWUoKS0+YXhPYmplY3RDYWNoZSgpLT5kZXRhY2hXcmFwcGVyKHRoaXMsIEFjY2Vzc2liaWxp
dHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ryb3llZCk7CisgICAgZGV0YWNoKEFjY2Vzc2li
aWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ryb3llZCk7CisgICAgc2V0T2JqZWN0SUQo
SW52YWxpZEFYSUQpOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFRyZWVJZGVudGlm
aWVyKEFYSXNvbGF0ZWRUcmVlSUQgdHJlZUlkZW50aWZpZXIpCit7CisgICAgbV90cmVlSWRlbnRp
ZmllciA9IHRyZWVJZGVudGlmaWVyOworICAgIGlmIChhdXRvIHRyZWUgPSBBWElzb2xhdGVkVHJl
ZTo6dHJlZUZvcklEKG1fdHJlZUlkZW50aWZpZXIpKQorICAgICAgICBtX2NhY2hlZFRyZWUgPSB0
cmVlOworfQorCitjb25zdCBBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgQVhJc29sYXRlZE9iamVjdDo6Y2hpbGRyZW4oYm9vbCkKK3sKKyAgICBpZiAoIWlzTWFpblRo
cmVhZCgpKSB7CisgICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKKyAgICAgICAgbV9jaGlsZHJl
bi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW5JRHMuc2l6ZSgpKTsKKyAgICAgICAg
YXV0byB0cmVlID0gdGhpcy0+dHJlZSgpOworICAgICAgICBmb3IgKGF1dG8gY2hpbGRJRCA6IG1f
Y2hpbGRyZW5JRHMpCisgICAgICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZCh0cmVl
LT5ub2RlRm9ySUQoY2hpbGRJRCkpOworICAgIH0KKyAgICByZXR1cm4gbV9jaGlsZHJlbjsKK30K
KworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0RldGFjaGVkRnJvbVBhcmVudCgpCit7CisgICAg
aWYgKHBhcmVudCgpICE9IEludmFsaWRBWElEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgdGhlIHJvb3Qgbm9kZSwgaW4gd2hpY2ggY2FzZSB3
ZSBzaG91bGQgcmV0dXJuIGZhbHNlLgorICAgIGlmIChhdXRvIHJvb3QgPSB0cmVlKCktPnJvb3RO
b2RlKCkpCisgICAgICAgIHJldHVybiByb290LT5vYmplY3RJRCgpICE9IG1faWQ7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlUZXh0
KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRzKSBjb25zdAoreworICAgIGF1dG8gaXNv
bGF0ZWRUZXh0cyA9IHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRy
ZWVUZXh0PihBWFByb3BlcnR5TmFtZTo6QWNjZXNzaWJpbGl0eVRleHQpOworICAgIGZvciAoYXV0
byBpc29sYXRlZFRleHQgOiBpc29sYXRlZFRleHRzKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlU
ZXh0IHRleHQoaXNvbGF0ZWRUZXh0LnRleHQsIGlzb2xhdGVkVGV4dC50ZXh0U291cmNlKTsKKyAg
ICAgICAgZm9yIChhdXRvIGF4SUQgOiBpc29sYXRlZFRleHQudGV4dEVsZW1lbnRzKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byBvYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJRChheElEKSkKKyAgICAg
ICAgICAgICAgICB0ZXh0LnRleHRFbGVtZW50cy5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAgfQor
ICAgICAgICB0ZXh0cy5hcHBlbmQodGV4dCk7CisgICAgfQorfQorCit2b2lkIEFYSXNvbGF0ZWRP
YmplY3Q6OmNsYXNzTGlzdChWZWN0b3I8U3RyaW5nPiYgbGlzdCkgY29uc3QKK3sKKyAgICBTdHJp
bmcgY2xhc3NMaXN0ID0gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNsYXNz
TGlzdCk7CisgICAgbGlzdC5hcHBlbmRWZWN0b3IoY2xhc3NMaXN0LnNwbGl0KCIgIikpOworfQor
Cit1aW50NjRfdCBBWElzb2xhdGVkT2JqZWN0OjpzZXNzaW9uSUQoKSBjb25zdAoreworICAgIGlm
IChhdXRvIHJvb3QgPSB0cmVlKCktPnJvb3ROb2RlKCkpCisgICAgICAgIHJldHVybiByb290LT51
aW50NjRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U2Vzc2lvbklEKTsKKyAgICByZXR1
cm4gMDsKK30KKworU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OmRvY3VtZW50VVJJKCkgY29uc3QK
K3sKKyAgICBpZiAoYXV0byByb290ID0gdHJlZSgpLT5yb290Tm9kZSgpKQorICAgICAgICByZXR1
cm4gcm9vdC0+c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRvY3VtZW50VVJJ
KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6cHJl
dmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gcm9v
dCA9IHRyZWUoKS0+cm9vdE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHJvb3QtPmJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6ZG9jdW1l
bnRFbmNvZGluZygpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gcm9vdCA9IHRyZWUoKS0+cm9vdE5v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIHJvb3QtPnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpEb2N1bWVudEVuY29kaW5nKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Zv
aWQgQVhJc29sYXRlZE9iamVjdDo6aW5zZXJ0TWF0aFBhaXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5
SXNvbGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4mIGlzb2xhdGVkUGFpcnMsIEFjY2Vzc2li
aWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYgcGFpcnMpCit7CisgICAgZm9yIChhdXRvIHBhaXIg
OiBpc29sYXRlZFBhaXJzKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQ
YWlyIHByZXNjcmlwdFBhaXI7CisgICAgICAgIGlmIChhdXRvKiBjb3JlT2JqZWN0ID0gdHJlZSgp
LT5ub2RlRm9ySUQocGFpci5maXJzdCkuZ2V0KCkpCisgICAgICAgICAgICBwcmVzY3JpcHRQYWly
LmZpcnN0ID0gY29yZU9iamVjdDsKKyAgICAgICAgaWYgKGF1dG8qIGNvcmVPYmplY3QgPSB0cmVl
KCktPm5vZGVGb3JJRChwYWlyLnNlY29uZCkuZ2V0KCkpCisgICAgICAgICAgICBwcmVzY3JpcHRQ
YWlyLnNlY29uZCA9IGNvcmVPYmplY3Q7CisgICAgICAgIHBhaXJzLmFwcGVuZChwcmVzY3JpcHRQ
YWlyKTsKKyAgICB9Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6bWF0aFByZXNjcmlwdHMo
QWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwYWlycykKK3sKKyAgICBhdXRvIGlz
b2xhdGVkUGFpcnMgPSB2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRU
cmVlTWF0aE11bHRpc2NyaXB0UGFpcj4oQVhQcm9wZXJ0eU5hbWU6Ok1hdGhQcmVzY3JpcHRzKTsK
KyAgICBpbnNlcnRNYXRoUGFpcnMoaXNvbGF0ZWRQYWlycywgcGFpcnMpOworfQorCit2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6Om1hdGhQb3N0c2NyaXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2Ny
aXB0UGFpcnMmIHBhaXJzKQoreworICAgIGF1dG8gaXNvbGF0ZWRQYWlycyA9IHZlY3RvckF0dHJp
YnV0ZVZhbHVlPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNYXRoTXVsdGlzY3JpcHRQYWlyPihB
WFByb3BlcnR5TmFtZTo6TWF0aFBvc3RzY3JpcHRzKTsKKyAgICBpbnNlcnRNYXRoUGFpcnMoaXNv
bGF0ZWRQYWlycywgcGFpcnMpOworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6
OmZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdAoreworICAgIGlmIChhdXRvIGZvY3VzZWRFbGVtZW50
ID0gdHJlZSgpLT5mb2N1c2VkVUlFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmb2N1c2VkRWxl
bWVudC5nZXQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyAgICAKK0FYQ29yZU9iamVjdCog
QVhJc29sYXRlZE9iamVjdDo6cGFyZW50T2JqZWN0VW5pZ25vcmVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJlZSgpLT5ub2RlRm9ySUQocGFyZW50KCkpLmdldCgpOworfQorCitBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24g
b3JpZW50YXRpb24pCit7CisgICAgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKG9yaWVudGF0
aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwgPyBBWFByb3BlcnR5TmFt
ZTo6VmVydGljYWxTY3JvbGxCYXIgOiBBWFByb3BlcnR5TmFtZTo6SG9yaXpvbnRhbFNjcm9sbEJh
cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFU+Cit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnBl
cmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChVJiYgbGFtYmRhKQoreworICAgIEFjY2Vzc2liaWxp
dHk6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJmxhbWJkYSwgdGhpc10gKCkgeworICAg
ICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCisgICAgICAgICAg
ICBsYW1iZGEob2JqZWN0KTsKKyAgICB9KTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0Ojpz
ZXRBUklBR3JhYmJlZChib29sIHZhbHVlKQoreworICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRo
cmVhZChbJnZhbHVlXShBWENvcmVPYmplY3QqIG9iamVjdCkgeworICAgICAgICBvYmplY3QtPnNl
dEFSSUFHcmFiYmVkKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0
OjpzZXRJc0V4cGFuZGVkKGJvb2wgdmFsdWUpCit7CisgICAgcGVyZm9ybUZ1bmN0aW9uT25NYWlu
VGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIG9iamVjdC0+
c2V0SXNFeHBhbmRlZCh2YWx1ZSk7CisgICAgfSk7Cit9Cit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OnNldFZhbHVlKGZsb2F0IHZhbHVlKQoreworICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVh
ZChbJnZhbHVlXShBWENvcmVPYmplY3QqIG9iamVjdCkgeworICAgICAgICBvYmplY3QtPnNldFZh
bHVlKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRTZWxl
Y3RlZChib29sIHZhbHVlKQoreworICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZh
bHVlXShBWENvcmVPYmplY3QqIG9iamVjdCkgeworICAgICAgICBvYmplY3QtPnNldFNlbGVjdGVk
KHZhbHVlKTsKKyAgICB9KTsKK30KK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0U2VsZWN0ZWRS
b3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgdmFsdWUpCit7CisgICAgcGVyZm9ybUZ1
bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7CisgICAg
ICAgIG9iamVjdC0+c2V0U2VsZWN0ZWRSb3dzKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRGb2N1c2VkKGJvb2wgdmFsdWUpCit7CisgICAgcGVyZm9ybUZ1
bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7CisgICAg
ICAgIG9iamVjdC0+c2V0Rm9jdXNlZCh2YWx1ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQVhJc29s
YXRlZE9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
cGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0
KSB7CisgICAgICAgIG9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KHZhbHVlKTsKKyAgICB9KTsKK30K
Kwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFp
blRleHRSYW5nZSYgdmFsdWUpCit7CisgICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsm
dmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIG9iamVjdC0+c2V0U2VsZWN0
ZWRUZXh0UmFuZ2UodmFsdWUpOworICAgIH0pOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcGVyZm9ybUZ1bmN0aW9uT25N
YWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIG9iamVj
dC0+c2V0VmFsdWUodmFsdWUpOworICAgIH0pOworfQorCisjaWYgUExBVEZPUk0oQ09DT0EpICYm
ICFQTEFURk9STShJT1NfRkFNSUxZKQordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRDYXJldEJy
b3dzaW5nRW5hYmxlZChib29sIHZhbHVlKQoreworICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRo
cmVhZChbJnZhbHVlXShBWENvcmVPYmplY3QqIG9iamVjdCkgeworICAgICAgICBvYmplY3QtPnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKHZhbHVlKTsKKyAgICB9KTsKK30KKyNlbmRpZgorCit2b2lk
IEFYSXNvbGF0ZWRPYmplY3Q6OnNldFByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goYm9v
bCB2YWx1ZSkKK3sKKyAgICBwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoWyZ2YWx1ZV0oQVhD
b3JlT2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgb2JqZWN0LT5zZXRQcmV2ZW50S2V5Ym9hcmRE
T01FdmVudERpc3BhdGNoKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBBWElzb2xhdGVkT2Jq
ZWN0Ojpjb2xvclZhbHVlKGludCYgciwgaW50JiBnLCBpbnQmIGIpIGNvbnN0Cit7CisgICAgYXV0
byBjb2xvciA9IGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUp
OworICAgIHIgPSBjb2xvci5yZWQoKTsKKyAgICBnID0gY29sb3IuZ3JlZW4oKTsKKyAgICBiID0g
Y29sb3IuYmx1ZSgpOworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vz
c2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBpZiAo
IXJlbGF0aXZlRnJhbWUoKS5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGRJRCA6IG1fY2hpbGRyZW5JRHMpIHsKKyAgICAg
ICAgYXV0byBjaGlsZCA9IHRyZWUoKS0+bm9kZUZvcklEKGNoaWxkSUQpOworICAgICAgICBBU1NF
UlQoY2hpbGQpOworICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQtPnJlbGF0aXZlRnJhbWUoKS5j
b250YWlucyhwb2ludCkpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPmFjY2Vzc2liaWxpdHlI
aXRUZXN0KHBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8QVhJc29sYXRlZE9i
amVjdCo+KHRoaXMpOworfQorCitBWElzb2xhdGVkVHJlZSogQVhJc29sYXRlZE9iamVjdDo6dHJl
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkVHJlZS5nZXQoKTsKK30KKworSW50UG9p
bnQgQVhJc29sYXRlZE9iamVjdDo6aW50UG9pbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFw
LmdldChwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAorICAg
ICAgICBbXSAoSW50UG9pbnQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisg
ICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gSW50UG9pbnQoKTsgfQorICAgICk7Cit9CisKK0FY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6b2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJp
YnV0ZU1hcC5nZXQocHJvcGVydHlOYW1lKTsKKyAgICBBWElEIG5vZGVJRCA9IFdURjo6c3dpdGNo
T24odmFsdWUsCisgICAgICAgIFtdIChBWElEJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZh
bHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIEludmFsaWRBWElEOyB9CisgICAg
KTsKKyAgICAKKyAgICByZXR1cm4gdHJlZSgpLT5ub2RlRm9ySUQobm9kZUlEKS5nZXQoKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgQVhJc29sYXRlZE9iamVjdDo6cmVjdEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHZh
bHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24odmFsdWUsCisgICAgICAgIFtdIChUJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBl
ZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIFQgeyB9OyB9CisgICAgKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1ZlY3RvcjxUPiBBWElzb2xhdGVkT2JqZWN0Ojp2
ZWN0b3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7
CisgICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUpOworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAorICAgICAgICBbXSAoVmVjdG9yPFQ+JiB0eXBl
ZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0
dXJuIFZlY3RvcjxUPigpOyB9CisgICAgKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK09w
dGlvblNldDxUPiBBWElzb2xhdGVkT2JqZWN0OjpvcHRpb25TZXRBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2YWx1ZSA9IG1fYXR0
cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZh
bHVlLAorICAgICAgICBbXSAoVCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwK
KyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBPcHRpb25TZXQ8VD4oKTsgfQorICAgICk7Cit9
CisKK3VpbnQ2NF90IEFYSXNvbGF0ZWRPYmplY3Q6OnVpbnQ2NEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHZhbHVlID0gbV9hdHRy
aWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFs
dWUsCisgICAgICAgIFtdICh1aW50NjRfdCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1
ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwOyB9CisgICAgKTsKK30KKworVVJM
IEFYSXNvbGF0ZWRPYmplY3Q6OnVybEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHBy
b3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCisgICAgICAgIFtd
IChVUkwmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChh
dXRvJikgeyByZXR1cm4gVVJMKCk7IH0KKyAgICApOworfQorCitDb2xvciBBWElzb2xhdGVkT2Jq
ZWN0Ojpjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29u
c3QKK3sKKyAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7
CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCisgICAgICAgIFtdIChDb2xvciYgdHlw
ZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJl
dHVybiBDb2xvcigpOyB9CisgICAgKTsKK30KKworZmxvYXQgQVhJc29sYXRlZE9iamVjdDo6Zmxv
YXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7Cisg
ICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUpOworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAorICAgICAgICBbXSAoZmxvYXQmIHR5cGVkVmFsdWUp
IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsg
fQorICAgICk7Cit9CisKK2RvdWJsZSBBWElzb2xhdGVkT2JqZWN0Ojpkb3VibGVBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2YWx1
ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKHZhbHVlLAorICAgICAgICBbXSAoZG91YmxlJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0
eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KKyAgICApOwor
fQorCit1bnNpZ25lZCBBWElzb2xhdGVkT2JqZWN0Ojp1bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHZhbHVlID0gbV9h
dHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
dmFsdWUsCisgICAgICAgIFtdICh1bnNpZ25lZCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRW
YWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwOyB9CisgICAgKTsKK30KKwor
Ym9vbCBBWElzb2xhdGVkT2JqZWN0Ojpib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5n
ZXQocHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKKyAgICAg
ICAgW10gKGJvb2wmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAg
IFtdIChhdXRvJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICApOworfQorCitjb25zdCBTdHJpbmcg
QVhJc29sYXRlZE9iamVjdDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKSBjb25zdAoreworICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQo
cHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKKyAgICAgICAg
W10gKFN0cmluZyYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAg
W10gKGF1dG8mKSB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CisgICAgKTsKK30KKworaW50IEFY
SXNvbGF0ZWRPYmplY3Q6OmludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3Bl
cnR5TmFtZSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCisgICAgICAgIFtdIChp
bnQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRv
JikgeyByZXR1cm4gMDsgfQorICAgICk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6Zmls
bENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdAoreworICAgIFZlY3Rv
cjxBWElEPiBjaGlsZElEcyA9IHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFYSUQ+KHByb3BlcnR5TmFt
ZSk7CisgICAgY2hpbGRyZW4ucmVzZXJ2ZUNhcGFjaXR5KGNoaWxkSURzLnNpemUoKSk7CisgICAg
Zm9yIChhdXRvIGNoaWxkSUQgOiBjaGlsZElEcykgeworICAgICAgICBpZiAoYXV0byBvYmplY3Qg
PSB0cmVlKCktPm5vZGVGb3JJRChjaGlsZElEKSkKKyAgICAgICAgICAgIGNoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChvYmplY3QpOworICAgIH0KK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0Ojp1
cGRhdGVCYWNraW5nU3RvcmUoKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQg
b24gZWl0aGVyIHRoZSBtYWluIG9yIHRoZSBBWCB0aHJlYWRzLgorICAgIC8vIEl0IGNhbiBiZSBj
YWxsZWQgaW4gdGhlIG1haW4gdGhyZWFkIGZyb20gW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50XS4KKyAgICAvLyBVcGRhdGUgdGhlIElz
b2xhdGVkVHJlZSBvbmx5IGlmIGl0IGlzIGNhbGxlZCBvbiB0aGUgQVggdGhyZWFkLgorICAgIGlm
ICghaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gdHJlZSA9IHRoaXMtPnRyZWUo
KSkKKyAgICAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5nZXMoKTsKKyAgICB9Cit9CisK
K1ZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBBWElzb2xhdGVkT2JqZWN0OjpmaW5kVGV4dFJhbmdlcyhB
Y2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0JiBjcml0ZXJpYSkgY29uc3QKK3sK
KyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZl
Y3RvcjxSZWZQdHI8UmFuZ2U+Pj4oWyZjcml0ZXJpYSwgdGhpc10gKCkgLT4gVmVjdG9yPFJlZlB0
cjxSYW5nZT4+IHsKKyAgICAgICAgaWYgKGF1dG8qIG9iamVjdCA9IGFzc29jaWF0ZWRBWE9iamVj
dCgpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdC0+ZmluZFRleHRSYW5nZXMoY3JpdGVyaWEp
OworICAgICAgICByZXR1cm4gVmVjdG9yPFJlZlB0cjxSYW5nZT4+KCk7CisgICAgfSk7Cit9CisK
K1ZlY3RvcjxTdHJpbmc+IEFYSXNvbGF0ZWRPYmplY3Q6OnBlcmZvcm1UZXh0T3BlcmF0aW9uKEFj
Y2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGNvbnN0JiB0ZXh0T3BlcmF0aW9uKQoreworICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9yPFN0
cmluZz4+KFsmdGV4dE9wZXJhdGlvbiwgdGhpc10gKCkgLT4gVmVjdG9yPFN0cmluZz4geworICAg
ICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gb2JqZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlvbih0ZXh0T3BlcmF0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQVhJc29s
YXRlZE9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVy
aWEqIGNyaXRlcmlhLCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdHMpCit7Cisg
ICAgQVNTRVJUKGNyaXRlcmlhKTsKKyAgICBpZiAoIWNyaXRlcmlhKQorICAgICAgICByZXR1cm47
CisKKyAgICBjcml0ZXJpYS0+YW5jaG9yT2JqZWN0ID0gdGhpczsKKyAgICBBY2Nlc3NpYmlsaXR5
OjpmaW5kTWF0Y2hpbmdPYmplY3RzKCpjcml0ZXJpYSwgcmVzdWx0cyk7Cit9CisKK2Jvb2wgQVhJ
c29sYXRlZE9iamVjdDo6cmVwbGFjZVRleHRJblJhbmdlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFBs
YWluVGV4dFJhbmdlJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aW5zZXJ0VGV4dChjb25zdCBTdHJp
bmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpwcmVzcygpCit7CisgICAgaWYgKGF1dG8qIG9iamVj
dCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQorICAgICAgICByZXR1cm4gb2JqZWN0LT5wcmVzcygp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpwZXJmb3Jt
RGVmYXVsdEFjdGlvbigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eU9iamVj
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qo
KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qo
KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIoKSBj
b25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgQVNTRVJUX05PVF9SRUFDSEVELCBi
dXQgaXQgaXMgY2FsbGVkIGJ5CisgICAgLy8gQVhPYmplY3RDYWNoZTo6cm9vdFdlYkFyZWEsIHRo
YXQgaW4gdHVybiBpcyBjYWxsZWQgYnkKKyAgICAvLyBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0
YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdAorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBB
WElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJ
c29sYXRlZE9iamVjdDo6aXNBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRP
YmplY3Q6OmlzTmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0ltYWdl
QnV0dG9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNDb250YWluZWRCeVBhc3N3b3Jk
RmllbGQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpwYXNzd29yZEZpZWxk
T3JDb250YWluaW5nUGFzc3dvcmRGaWVsZCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNOYXRp
dmVUZXh0Q29udHJvbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTmF0aXZlTGlzdEJv
eCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTGlzdEJveE9wdGlvbigpIGNvbnN0Cit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OmlzU2xpZGVyVGh1bWIoKSBjb25zdAoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2Jq
ZWN0Ojppc0lucHV0U2xpZGVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNMYWJlbCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzRGF0YVRhYmxlKCkgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29s
YXRlZE9iamVjdDo6aXNJbWFnZU1hcExpbmsoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpp
c05hdGl2ZVNwaW5CdXR0b24oKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc1NwaW5CdXR0
b25QYXJ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNNb2NrT2JqZWN0KCkgY29uc3QK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNNZWRpYU9iamVjdCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRP
YmplY3Q6OmlzQVJJQVRleHRDb250cm9sKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNO
b25OYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQmxvY2tx
dW90ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTGFuZG1hcmsoKSBjb25zdAorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBB
WElzb2xhdGVkT2JqZWN0Ojppc0ZpZ3VyZUVsZW1lbnQoKSBjb25zdAoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2Jq
ZWN0Ojppc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNI
b3ZlcmVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNJbmRldGVybWluYXRlKCkgY29u
c3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNPblNjcmVlbigpIGNvbnN0Cit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRP
YmplY3Q6OmlzT2ZmU2NyZWVuKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNQcmVzc2Vk
KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNVbnZpc2l0ZWQoKSBjb25zdAoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElz
b2xhdGVkT2JqZWN0Ojppc0xpbmtlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzVmlz
aWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQ29sbGFwc2VkKCkgY29uc3QKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
QVhJc29sYXRlZE9iamVjdDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNv
bGF0ZWRPYmplY3Q6Omhhc0JvbGRGb250KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFz
SXRhbGljRm9udCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc01pc3NwZWxsaW5nKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzUGxhaW5UZXh0KCkgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29s
YXRlZE9iamVjdDo6aGFzU2FtZUZvbnQoUmVuZGVyT2JqZWN0KikgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRl
ZE9iamVjdDo6aGFzU2FtZUZvbnRDb2xvcihSZW5kZXJPYmplY3QqKSBjb25zdAoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xh
dGVkT2JqZWN0OjpoYXNTYW1lU3R5bGUoUmVuZGVyT2JqZWN0KikgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRl
ZE9iamVjdDo6aXNTdGF0aWNUZXh0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzVW5k
ZXJsaW5lKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzSGlnaGxpZ2h0aW5nKCkgY29u
c3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K0VsZW1lbnQqIEFYSXNvbGF0ZWRPYmplY3Q6OmVsZW1lbnQoKSBjb25zdAoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOb2RlKiBBWElzb2xh
dGVkT2JqZWN0Ojpub2RlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVuZGVyT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0Ojpy
ZW5kZXJlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQVhJc29sYXRlZE9i
amVjdDo6ZGVmYXVsdE9iamVjdEluY2x1c2lvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246OkRlZmF1
bHRCZWhhdmlvcjsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkQnlEZWZhdWx0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IEFYSXNvbGF0ZWRPYmplY3Q6OnN0ZXBWYWx1ZUZv
clJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpzZWxlY3RlZExpc3RJdGVt
KCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhQWN0aXZlRGVzY2VuZGFudFJlZmVyZW5jaW5n
RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhQ29udHJv
bHNSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVj
dDo6YXJpYURlc2NyaWJlZEJ5RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVk
T2JqZWN0OjphcmlhRGVzY3JpYmVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXJpYURldGFpbHNSZWZlcmVuY2luZ0VsZW1lbnRzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXJpYUVycm9yTWVzc2FnZVJlZmVy
ZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0Ojphcmlh
Rmxvd1RvUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBj
b25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFYSXNvbGF0ZWRP
YmplY3Q6OmFyaWFMYWJlbGxlZEJ5RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xh
dGVkT2JqZWN0OjphcmlhTGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhT3duc1JlZmVyZW5jaW5nRWxlbWVudHMoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNEYXRhbGlzdCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OnN1cHBvcnRzSGFzUG9wdXAoKSBjb25zdAoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVk
T2JqZWN0OjpzdXBwb3J0c1ByZXNzZWQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBw
b3J0c0NoZWNrZWQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjppZ25vcmVkRnJvbU1vZGFs
UHJlc2VuY2UoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc01vZGFsRGVzY2VuZGFudChO
b2RlKikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNNb2RhbE5vZGUoKSBjb25zdAorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworQVhDb3Jl
T2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjplbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QoY29u
c3QgSW50UG9pbnQmKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmZpcnN0
Q2hpbGQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6Omxhc3RDaGlsZCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6cHJldmlvdXNTaWJsaW5nKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6bmV4dFNpYmxpbmdVbmlnbm9yZWQoaW50
KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OnByZXZpb3VzU2libGluZ1Vu
aWdub3JlZChpbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6cGFyZW50
T2JqZWN0SWZFeGlzdHMoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBudWxscHRyOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzRGVzY2VuZGFu
dE9mQmFycmVuUGFyZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNEZXNjZW5kYW50
T2ZSb2xlKEFjY2Vzc2liaWxpdHlSb2xlKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2Jq
ZWN0OjpvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2Jq
ZWN0Ojpjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FYQ29yZU9i
amVjdCogQVhJc29sYXRlZE9iamVjdDo6Y29ycmVzcG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1l
bnQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzUHJlc2VudGF0aW9uYWxDaGlsZE9m
QXJpYVJvbGUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjphcmlhUm9sZUhhc1ByZXNlbnRh
dGlvbmFsQ2hpbGRyZW4oKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppbmhlcml0c1ByZXNl
bnRhdGlvbmFsUm9sZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldEFjY2Vzc2libGVO
YW1lKGNvbnN0IEF0b21TdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Citib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc0F0dHJpYnV0ZXNSZXF1aXJlZEZvckluY2x1c2lv
bigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcg
QVhJc29sYXRlZE9iamVjdDo6aGVscFRleHQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0
Ojppc0FSSUFTdGF0aWNUZXh0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0Ojp0ZXh0KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0OjphcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0OjphcmlhRGVzY3JpYmVkQnlBdHRyaWJ1dGUo
KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmxlTmFtZURlcml2ZXNGcm9t
Q29udGVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmVsZW1lbnRzRnJvbUF0dHJpYnV0
ZShWZWN0b3I8RWxlbWVudCo+JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0Cit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0FYT2JqZWN0Q2FjaGUqIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdAoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgcmV0dXJuIHRyZWUoKS0+YXhPYmplY3RDYWNoZSgpOworfQorCitFbGVtZW50KiBBWElz
b2xhdGVkT2JqZWN0OjphbmNob3JFbGVtZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworRWxlbWVudCogQVhJc29sYXRlZE9i
amVjdDo6YWN0aW9uRWxlbWVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1BhdGggQVhJc29sYXRlZE9iamVjdDo6ZWxlbWVu
dFBhdGgoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQ
YXRoKCk7Cit9CisKK1RleHRJdGVyYXRvckJlaGF2aW9yIEFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJ
dGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1dpZGdldCogQVhJc29sYXRlZE9iamVj
dDo6d2lkZ2V0KCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFY
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBvYmplY3QtPndpZGdldCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCitXaWRnZXQqIEFYSXNvbGF0ZWRPYmplY3Q6OndpZGdldEZvckF0dGFjaG1l
bnRWaWV3KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworUGFnZSogQVhJc29sYXRlZE9iamVjdDo6cGFnZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKGF1dG8qIG9iamVjdCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQorICAgICAgICByZXR1
cm4gb2JqZWN0LT5wYWdlKCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK0RvY3VtZW50KiBBWElzb2xhdGVkT2JqZWN0Ojpkb2N1bWVudCgpIGNv
bnN0Cit7CisgICAgaWYgKGF1dG8qIG9iamVjdCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQorICAg
ICAgICByZXR1cm4gb2JqZWN0LT5kb2N1bWVudCgpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBudWxscHRyOworfQorCitGcmFtZVZpZXcqIEFYSXNvbGF0ZWRPYmplY3Q6
OmRvY3VtZW50RnJhbWVWaWV3KCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNz
b2NpYXRlZEFYT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBvYmplY3QtPmRvY3VtZW50RnJhbWVW
aWV3KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ZyYW1lKiBBWElzb2xhdGVkT2JqZWN0
OjpmcmFtZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK0ZyYW1lKiBBWElzb2xhdGVkT2JqZWN0OjptYWluRnJhbWUoKSBjb25z
dAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
CitEb2N1bWVudCogQVhJc29sYXRlZE9iamVjdDo6dG9wRG9jdW1lbnQoKSBjb25zdAoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitTY3JvbGxW
aWV3KiBBWElzb2xhdGVkT2JqZWN0OjpzY3JvbGxWaWV3QW5jZXN0b3IoKSBjb25zdAoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OmNoaWxkcmVuQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6dGV4dENoYW5nZWQoKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnVwZGF0
ZUFjY2Vzc2liaWxpdHlSb2xlKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBBWElzb2xhdGVkT2JqZWN0OjphZGRDaGlsZHJlbigpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6YWRkQ2hpbGQoQVhDb3JlT2Jq
ZWN0KikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVk
T2JqZWN0OjppbnNlcnRDaGlsZChBWENvcmVPYmplY3QqLCB1bnNpZ25lZCkKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzaG91bGRJZ25v
cmVBdHRyaWJ1dGVSb2xlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6Y2FuSGF2ZUNoaWxk
cmVuKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzQ2hpbGRyZW4oKSBjb25zdAorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXROZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldE5lZWRzVG9V
cGRhdGVTdWJ0cmVlKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpjbGVhckNoaWxkcmVuKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpuZWVkc1RvVXBkYXRlQ2hpbGRyZW4o
KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzaG91bGRGb2N1c0FjdGl2ZURlc2NlbmRhbnQo
KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjphY3RpdmVEZXNjZW5kYW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdl
ZCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9i
amVjdDo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNEZXNjZW5kYW50T2ZPYmplY3Qo
Y29uc3QgQVhDb3JlT2JqZWN0KikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNBbmNlc3Rv
ck9mT2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCopIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0
ZWRPYmplY3Q6OmZpcnN0QW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgQVhJc29sYXRl
ZE9iamVjdDo6aGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdAoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgQXRv
bVN0cmluZyYgQVhJc29sYXRlZE9iamVjdDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxs
QXRvbSgpOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc1RhZ05hbWUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6c3RyaW5nVmFsdWVGb3JN
U0FBKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0OjpzdHJpbmdSb2xlRm9yTVNBQSgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6bmFtZUZvck1TQUEoKSBjb25zdAorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIEFYSXNvbGF0ZWRPYmplY3Q6OmRlc2NyaXB0aW9uRm9yTVNBQSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitBY2Nlc3Np
YmlsaXR5Um9sZSBBWElzb2xhdGVkT2JqZWN0Ojpyb2xlVmFsdWVGb3JNU0FBKCkgY29uc3QKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6
OlVua25vd247Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0OjpwYXNzd29yZEZpZWxkVmFs
dWUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpsaXZlUmVnaW9uQW5j
ZXN0b3IoYm9vbCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNDb250ZW50RWRpdGFi
bGVBdHRyaWJ1dGVTZXQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0c1JlYWRP
bmx5KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6c3VwcG9ydHNBdXRvQ29tcGxldGUoKSBj
b25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0c0FSSUFBdHRyaWJ1dGVzKCkgY29uc3QK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQVhJc29sYXRlZE9iamVjdDo6c2Nyb2xsQnlQYWdlKFNjcm9sbEJ5UGFnZURpcmVjdGlvbikg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK0ludFBvaW50IEFYSXNvbGF0ZWRPYmplY3Q6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30KKwor
SW50U2l6ZSBBWElzb2xhdGVkT2JqZWN0OjpzY3JvbGxDb250ZW50c1NpemUoKSBjb25zdAorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnRTaXplKCk7Cit9CisKK0lu
dFJlY3QgQVhJc29sYXRlZE9iamVjdDo6c2Nyb2xsVmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQor
Cit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNjcm9sbFRvTWFrZVZpc2libGUoY29uc3QgU2Nyb2xs
UmVjdFRvVmlzaWJsZU9wdGlvbnMmKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omxhc3RLbm93bklzSWdub3JlZFZhbHVlKCkK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgQVhJc29sYXRlZE9iamVjdDo6c2V0TGFzdEtub3duSXNJZ25vcmVkVmFsdWUoYm9vbCkKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0Ojpu
b3RpZnlJZklnbm9yZWRWYWx1ZUNoYW5nZWQoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTWF0aFNjcmlwdE9iamVjdChBY2Nlc3Np
YmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGUpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omlz
TWF0aE11bHRpc2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RU
eXBlKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FYSGlkZGVuKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJ
c29sYXRlZE9iamVjdDo6aXNET01IaWRkZW4oKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpp
c0hpZGRlbigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6Om92ZXJyaWRlQXR0YWNobWVudFBh
cmVudChBWENvcmVPYmplY3QqKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiti
b29sIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50KCkgY29u
c3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K0FjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJp
bGl0eVBsYXRmb3JtSW5jbHVkZXNPYmplY3QoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0
QmVoYXZpb3I7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzQXBwbGVQREZBbm5vdGF0
aW9uQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KiBBWElzb2xh
dGVkT2JqZWN0OjphbmNlc3RvckFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KGJvb2wpIGNvbnN0Cit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3Zv
aWQgQVhJc29sYXRlZE9iamVjdDo6c2V0SXNJZ25vcmVkRnJvbVBhcmVudERhdGEoQWNjZXNzaWJp
bGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpjbGVhcklzSWdub3JlZEZyb21QYXJlbnRE
YXRhKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVk
T2JqZWN0OjpzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YUZvckNoaWxkKEFYQ29yZU9iamVjdCop
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRSgoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlNjIxOTc0ZGMyZWNlYjY0Njg4ZTcyMTVk
NDZhMTBkOTMwNDJkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKQEAgLTAsMCArMSw4MzggQEAK
Ky8qCisqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQorCisjaW5jbHVk
ZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNp
bmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBWElzb2xhdGVkVHJlZTsK
KworY2xhc3MgQVhJc29sYXRlZE9iamVjdCBmaW5hbCA6IHB1YmxpYyBBWENvcmVPYmplY3Qgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8QVhJc29sYXRlZE9iamVjdD4gY3JlYXRlKEFYQ29yZU9i
amVjdCYsIGJvb2wgaXNSb290KTsKKyAgICB+QVhJc29sYXRlZE9iamVjdCgpOworCisgICAgdm9p
ZCBzZXRPYmplY3RJRChBWElEIGlkKSBvdmVycmlkZSB7IG1faWQgPSBpZDsgfQorICAgIEFYSUQg
b2JqZWN0SUQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lkOyB9CisgICAgdm9pZCBpbml0
KCkgb3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIGRldGFjaChBY2Nlc3NpYmlsaXR5RGV0YWNobWVu
dFR5cGUsIEFYT2JqZWN0Q2FjaGUqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0Rl
dGFjaGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCk7CisKKyAgICB2
b2lkIHNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQpOworICAgIHZvaWQgc2V0UGFy
ZW50KEFYSUQpOworICAgIHZvaWQgYXBwZW5kQ2hpbGQoQVhJRCk7CisKK3ByaXZhdGU6CisKKyAg
ICBBWElEIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CisgICAgCisgICAgQVhJ
c29sYXRlZFRyZWVJRCB0cmVlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJlZUlkZW50
aWZpZXI7IH0KKyAgICBBWElzb2xhdGVkVHJlZSogdHJlZSgpIGNvbnN0OworICAgIAorICAgIEFY
SXNvbGF0ZWRPYmplY3QoKSA9IGRlZmF1bHQ7CisgICAgQVhJc29sYXRlZE9iamVjdChBWENvcmVP
YmplY3QmLCBib29sIGlzUm9vdCk7CisgICAgdm9pZCBpbml0aWFsaXplQXR0cmlidXRlRGF0YShB
WENvcmVPYmplY3QmLCBib29sIGlzUm9vdCk7CisgICAgQVhDb3JlT2JqZWN0KiBhc3NvY2lhdGVk
QVhPYmplY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+b2JqZWN0RnJvbUFYSUQob2JqZWN0SUQo
KSk7CisgICAgfQorCisgICAgZW51bSBjbGFzcyBBWFByb3BlcnR5TmFtZSA6IHVpbnQ4X3Qgewor
ICAgICAgICBOb25lID0gMCwKKyAgICAgICAgQWNjZXNzS2V5LAorICAgICAgICBBY3Rpb25WZXJi
LAorICAgICAgICBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUsCisgICAgICAgIEFjY2Vzc2liaWxp
dHlUZXh0LAorICAgICAgICBBdXRvQ29tcGxldGVWYWx1ZSwKKyAgICAgICAgQVJJQUNvbnRyb2xz
RWxlbWVudHMsCisgICAgICAgIEFSSUFEZXRhaWxzRWxlbWVudHMsCisgICAgICAgIEFSSUFEcm9w
RWZmZWN0cywKKyAgICAgICAgQVJJQUVycm9yTWVzc2FnZUVsZW1lbnRzLAorICAgICAgICBBUklB
SXNNdWx0aWxpbmUsCisgICAgICAgIEFSSUFGbG93VG9FbGVtZW50cywKKyAgICAgICAgQVJJQUxh
bmRtYXJrUm9sZURlc2NyaXB0aW9uLAorICAgICAgICBBUklBVHJlZUl0ZW1Db250ZW50LAorICAg
ICAgICBBUklBVHJlZUl0ZW1EaXNjbG9zZWRSb3dzLAorICAgICAgICBBUklBVHJlZVJvd3MsCisg
ICAgICAgIEFSSUFSb2xlQXR0cmlidXRlLAorICAgICAgICBBUklBT3duc0VsZW1lbnRzLAorICAg
ICAgICBCbG9ja3F1b3RlTGV2ZWwsCisgICAgICAgIEJvdW5kaW5nQm94UmVjdCwKKyAgICAgICAg
Q2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4sCisgICAgICAgIENhblNldEV4cGFuZGVkQXR0cmlidXRl
LAorICAgICAgICBDYW5TZXRGb2N1c0F0dHJpYnV0ZSwKKyAgICAgICAgQ2FuU2V0TnVtZXJpY1Zh
bHVlLAorICAgICAgICBDYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSwKKyAgICAgICAgQ2FuU2V0U2Vs
ZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSwKKyAgICAgICAgQ2FuU2V0VGV4dFJhbmdlQXR0cmlidXRl
cywKKyAgICAgICAgQ2FuU2V0VmFsdWVBdHRyaWJ1dGUsCisgICAgICAgIENhbnZhc0hhc0ZhbGxi
YWNrQ29udGVudCwKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgICAgIENhcmV0QnJvd3NpbmdFbmFibGVkLAorI2VuZGlmCisgICAgICAgIENsYXNzTGlz
dCwKKyAgICAgICAgQ2xpY2tQb2ludCwKKyAgICAgICAgQ29sb3JWYWx1ZSwKKyAgICAgICAgQ29t
cHV0ZWRMYWJlbCwKKyAgICAgICAgQ29tcHV0ZWRSb2xlU3RyaW5nLAorICAgICAgICBDdXJyZW50
U3RhdGUsCisgICAgICAgIEN1cnJlbnRWYWx1ZSwKKyAgICAgICAgRGF0ZXRpbWVBdHRyaWJ1dGVW
YWx1ZSwKKyAgICAgICAgRGVjcmVtZW50QnV0dG9uLAorICAgICAgICBEZXNjcmlwdGlvbiwKKyAg
ICAgICAgRG9jdW1lbnRFbmNvZGluZywKKyAgICAgICAgRG9jdW1lbnRVUkksCisgICAgICAgIEVk
aXRhYmxlQW5jZXN0b3IsCisgICAgICAgIEVsZW1lbnRSZWN0LAorICAgICAgICBFc3RpbWF0ZWRM
b2FkaW5nUHJvZ3Jlc3MsCisgICAgICAgIEV4cGFuZGVkVGV4dFZhbHVlLAorICAgICAgICBFeHBv
c2VzVGl0bGVVSUVsZW1lbnQsCisgICAgICAgIEZpbGVVcGxvYWRCdXR0b25SZXR1cm5zVmFsdWVJ
blRpdGxlLAorICAgICAgICBGb2N1c2FibGVBbmNlc3RvciwKKyAgICAgICAgSGFzQVJJQVZhbHVl
Tm93LAorICAgICAgICBIYXNQb3B1cCwKKyAgICAgICAgSGVhZGluZ0xldmVsLAorICAgICAgICBI
ZWxwVGV4dCwKKyAgICAgICAgSGllcmFyY2hpY2FsTGV2ZWwsCisgICAgICAgIEhpZ2hlc3RFZGl0
YWJsZUFuY2VzdG9yLAorICAgICAgICBIb3Jpem9udGFsU2Nyb2xsQmFyLAorICAgICAgICBJZGVu
dGlmaWVyQXR0cmlidXRlLAorICAgICAgICBJbnZhbGlkU3RhdHVzLAorICAgICAgICBJbmNyZW1l
bnRCdXR0b24sCisgICAgICAgIElzQWNjZXNzaWJpbGl0eUlnbm9yZWQsCisgICAgICAgIElzQWN0
aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lciwKKyAgICAgICAgSXNBbm9ueW1vdXNNYXRo
T3BlcmF0b3IsCisgICAgICAgIElzQVJJQUdyYWJiZWQsCisgICAgICAgIElzQVJJQVRyZWVHcmlk
Um93LAorICAgICAgICBJc0F0dGFjaG1lbnQsCisgICAgICAgIElzQnV0dG9uLAorICAgICAgICBJ
c0J1c3ksCisgICAgICAgIElzQ2hlY2tlZCwKKyAgICAgICAgSXNDb2xsYXBzZWQsCisgICAgICAg
IElzQ29udHJvbCwKKyAgICAgICAgSXNEZXNjcmlwdGlvbkxpc3QsCisgICAgICAgIElzRW5hYmxl
ZCwKKyAgICAgICAgSXNFeHBhbmRlZCwKKyAgICAgICAgSXNGaWVsZHNldCwKKyAgICAgICAgSXNG
aWxlVXBsb2FkQnV0dG9uLAorICAgICAgICBJc0ZvY3VzZWQsCisgICAgICAgIElzR3JvdXAsCisg
ICAgICAgIElzSW1hZ2UsCisgICAgICAgIElzSW1hZ2VNYXBMaW5rLAorICAgICAgICBJc0luY3Jl
bWVudG9yLAorICAgICAgICBJc0luZGV0ZXJtaW5hdGUsCisgICAgICAgIElzSW5saW5lVGV4dCwK
KyAgICAgICAgSXNJbnB1dEltYWdlLAorICAgICAgICBJc0luc2lkZUxpdmVSZWdpb24sCisgICAg
ICAgIElzTGluaywKKyAgICAgICAgSXNMaW5rZWQsCisgICAgICAgIElzTGlzdCwKKyAgICAgICAg
SXNMaXN0Qm94LAorICAgICAgICBJc0xvYWRlZCwKKyAgICAgICAgSXNIZWFkaW5nLAorICAgICAg
ICBJc0hvdmVyZWQsCisgICAgICAgIElzTWF0aEVsZW1lbnQsCisgICAgICAgIElzTWF0aEZyYWN0
aW9uLAorICAgICAgICBJc01hdGhGZW5jZWQsCisgICAgICAgIElzTWF0aFN1YnNjcmlwdFN1cGVy
c2NyaXB0LAorICAgICAgICBJc01hdGhSb3csCisgICAgICAgIElzTWF0aFVuZGVyT3ZlciwKKyAg
ICAgICAgSXNNYXRoUm9vdCwKKyAgICAgICAgSXNNYXRoU3F1YXJlUm9vdCwKKyAgICAgICAgSXNN
YXRoVGV4dCwKKyAgICAgICAgSXNNYXRoTnVtYmVyLAorICAgICAgICBJc01hdGhPcGVyYXRvciwK
KyAgICAgICAgSXNNYXRoRmVuY2VPcGVyYXRvciwKKyAgICAgICAgSXNNYXRoU2VwYXJhdG9yT3Bl
cmF0b3IsCisgICAgICAgIElzTWF0aElkZW50aWZpZXIsCisgICAgICAgIElzTWF0aFRhYmxlLAor
ICAgICAgICBJc01hdGhUYWJsZVJvdywKKyAgICAgICAgSXNNYXRoVGFibGVDZWxsLAorICAgICAg
ICBJc01hdGhNdWx0aXNjcmlwdCwKKyAgICAgICAgSXNNYXRoVG9rZW4sCisgICAgICAgIElzTWF0
aFNjcmlwdE9iamVjdCwKKyAgICAgICAgSXNNZWRpYVRpbWVsaW5lLAorICAgICAgICBJc01lbnUs
CisgICAgICAgIElzTWVudUJhciwKKyAgICAgICAgSXNNZW51QnV0dG9uLAorICAgICAgICBJc01l
bnVJdGVtLAorICAgICAgICBJc01lbnVMaXN0LAorICAgICAgICBJc01lbnVMaXN0T3B0aW9uLAor
ICAgICAgICBJc01lbnVMaXN0UG9wdXAsCisgICAgICAgIElzTWVudVJlbGF0ZWQsCisgICAgICAg
IElzTWV0ZXIsCisgICAgICAgIElzTXVsdGlTZWxlY3RhYmxlLAorICAgICAgICBJc09mZlNjcmVl
biwKKyAgICAgICAgSXNPblNjcmVlbiwKKyAgICAgICAgSXNPcmRlcmVkTGlzdCwKKyAgICAgICAg
SXNPdXRwdXQsCisgICAgICAgIElzUGFzc3dvcmRGaWVsZCwKKyAgICAgICAgSXNQcmVzc2VkLAor
ICAgICAgICBJc1Byb2dyZXNzSW5kaWNhdG9yLAorICAgICAgICBJc1JhbmdlQ29udHJvbCwKKyAg
ICAgICAgSXNSZXF1aXJlZCwKKyAgICAgICAgSXNTY3JvbGxiYXIsCisgICAgICAgIElzU2VhcmNo
RmllbGQsCisgICAgICAgIElzU2VsZWN0ZWQsCisgICAgICAgIElzU2VsZWN0ZWRPcHRpb25BY3Rp
dmUsCisgICAgICAgIElzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlLAorICAgICAgICBJc1NsaWRl
ciwKKyAgICAgICAgSXNTdHlsZUZvcm1hdEdyb3VwLAorICAgICAgICBJc1RhYmxlQ2VsbCwKKyAg
ICAgICAgSXNUYWJsZUNvbHVtbiwKKyAgICAgICAgSXNUYWJsZVJvdywKKyAgICAgICAgSXNUZXh0
Q29udHJvbCwKKyAgICAgICAgSXNUcmVlLAorICAgICAgICBJc1RyZWVJdGVtLAorICAgICAgICBJ
c1Vub3JkZXJlZExpc3QsCisgICAgICAgIElzVW52aXNpdGVkLAorICAgICAgICBJc1ZhbHVlQXV0
b2ZpbGxlZCwKKyAgICAgICAgSXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlLAorICAgICAgICBJc1Zp
c2libGUsCisgICAgICAgIElzVmlzaXRlZCwKKyAgICAgICAgS2V5U2hvcnRjdXRzVmFsdWUsCisg
ICAgICAgIExhbmd1YWdlLAorICAgICAgICBMYXlvdXRDb3VudCwKKyAgICAgICAgTGlua1JlbFZh
bHVlLAorICAgICAgICBMaW5rZWRVSUVsZW1lbnRzLAorICAgICAgICBMaXZlUmVnaW9uQXRvbWlj
LAorICAgICAgICBMaXZlUmVnaW9uUmVsZXZhbnQsCisgICAgICAgIExpdmVSZWdpb25TdGF0dXMs
CisgICAgICAgIE1hdGhGZW5jZWRPcGVuU3RyaW5nLAorICAgICAgICBNYXRoRmVuY2VkQ2xvc2VT
dHJpbmcsCisgICAgICAgIE1hdGhMaW5lVGhpY2tuZXNzLAorICAgICAgICBNYXRoUHJlc2NyaXB0
cywKKyAgICAgICAgTWF0aFBvc3RzY3JpcHRzLAorICAgICAgICBNYXRoUmFkaWNhbmRPYmplY3Qs
CisgICAgICAgIE1hdGhSb290SW5kZXhPYmplY3QsCisgICAgICAgIE1hdGhVbmRlck9iamVjdCwK
KyAgICAgICAgTWF0aE92ZXJPYmplY3QsCisgICAgICAgIE1hdGhOdW1lcmF0b3JPYmplY3QsCisg
ICAgICAgIE1hdGhEZW5vbWluYXRvck9iamVjdCwKKyAgICAgICAgTWF0aEJhc2VPYmplY3QsCisg
ICAgICAgIE1hdGhTdWJzY3JpcHRPYmplY3QsCisgICAgICAgIE1hdGhTdXBlcnNjcmlwdE9iamVj
dCwKKyAgICAgICAgTWF4VmFsdWVGb3JSYW5nZSwKKyAgICAgICAgTWluVmFsdWVGb3JSYW5nZSwK
KyAgICAgICAgT3JpZW50YXRpb24sCisgICAgICAgIFBsYWNlaG9sZGVyVmFsdWUsCisgICAgICAg
IFByZXNzZWRJc1ByZXNlbnQsCisgICAgICAgIFBvcHVwVmFsdWUsCisgICAgICAgIFBvc0luU2V0
LAorICAgICAgICBQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoLAorICAgICAgICBSZWFk
T25seVZhbHVlLAorICAgICAgICBSZWxhdGl2ZUZyYW1lLAorICAgICAgICBSb2xlVmFsdWUsCisg
ICAgICAgIFJvbGVQbGF0Zm9ybVN0cmluZywKKyAgICAgICAgUm9sZURlc2NyaXB0aW9uLAorICAg
ICAgICBTZWxlY3RlZENoaWxkcmVuLAorICAgICAgICBTZWxlY3RlZFJhZGlvQnV0dG9uLAorICAg
ICAgICBTZWxlY3RlZFRhYkl0ZW0sCisgICAgICAgIFNlc3Npb25JRCwKKyAgICAgICAgU2V0U2l6
ZSwKKyAgICAgICAgU29ydERpcmVjdGlvbiwKKyAgICAgICAgU3BlYWtBcywKKyAgICAgICAgU3Bl
ZWNoSGludCwKKyAgICAgICAgU3RyaW5nVmFsdWUsCisgICAgICAgIFN1cHBvcnRzQVJJQURyYWdn
aW5nLAorICAgICAgICBTdXBwb3J0c0FSSUFEcm9wcGluZywKKyAgICAgICAgU3VwcG9ydHNBUklB
T3ducywKKyAgICAgICAgU3VwcG9ydHNDdXJyZW50LAorICAgICAgICBTdXBwb3J0c0RhdGV0aW1l
QXR0cmlidXRlLAorICAgICAgICBTdXBwb3J0c0V4cGFuZGVkLAorICAgICAgICBTdXBwb3J0c0V4
cGFuZGVkVGV4dFZhbHVlLAorICAgICAgICBTdXBwb3J0c0xpdmVSZWdpb24sCisgICAgICAgIFN1
cHBvcnRzUGF0aCwKKyAgICAgICAgU3VwcG9ydHNQb3NJblNldCwKKyAgICAgICAgU3VwcG9ydHNQ
cmVzc0FjdGlvbiwKKyAgICAgICAgU3VwcG9ydHNSYW5nZVZhbHVlLAorICAgICAgICBTdXBwb3J0
c1JlcXVpcmVkQXR0cmlidXRlLAorICAgICAgICBTdXBwb3J0c1NldFNpemUsCisgICAgICAgIFRh
YkNoaWxkcmVuLAorICAgICAgICBUYWJsZUxldmVsLAorICAgICAgICBUYWdOYW1lLAorICAgICAg
ICBUZXh0TGVuZ3RoLAorICAgICAgICBUaXRsZSwKKyAgICAgICAgVGl0bGVVSUVsZW1lbnQsCisg
ICAgICAgIFVSTCwKKyAgICAgICAgVmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUsCisgICAgICAgIFZh
bHVlRGVzY3JpcHRpb24sCisgICAgICAgIFZhbHVlRm9yUmFuZ2UsCisgICAgICAgIFZhbGlkYXRp
b25NZXNzYWdlLAorICAgICAgICBWZXJ0aWNhbFNjcm9sbEJhciwKKyAgICAgICAgVmlzaWJsZUNo
aWxkcmVuLAorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8QVhJRCwgQVhJRD4g
QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXI7CisgICAgc3RydWN0
IEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVUZXh0IHsKKyAgICAgICAgU3RyaW5nIHRleHQ7Cisg
ICAgICAgIEFjY2Vzc2liaWxpdHlUZXh0U291cmNlIHRleHRTb3VyY2U7CisgICAgICAgIFZlY3Rv
cjxBWElEPiB0ZXh0RWxlbWVudHM7CisgICAgfTsKKyAgICAKKyAgICB1c2luZyBBdHRyaWJ1dGVW
YWx1ZVZhcmlhbnQgPSBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGJvb2wsIGludCwg
dW5zaWduZWQsIGRvdWJsZSwgZmxvYXQsIHVpbnQ2NF90LCBDb2xvciwgVVJMLCBMYXlvdXRSZWN0
LCBBWElELCBJbnRQb2ludCwgT3B0aW9uU2V0PFNwZWFrQXM+LCBWZWN0b3I8QWNjZXNzaWJpbGl0
eUlzb2xhdGVkVHJlZVRleHQ+LCBWZWN0b3I8QVhJRD4sIFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNv
bGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4sIFZlY3RvcjxTdHJpbmc+PjsKKyAgICB2b2lk
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBBdHRyaWJ1dGVWYWx1ZVZhcmlhbnQmJiwgYm9v
bCBzaG91bGRSZW1vdmUgPSBmYWxzZSk7CisgICAgdm9pZCBzZXRPYmplY3RQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZSwgQVhDb3JlT2JqZWN0Kik7CisgICAgdm9pZCBzZXRPYmplY3RWZWN0b3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZSwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7CisKKyAg
ICBib29sIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgY29u
c3QgU3RyaW5nIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAg
ICBpbnQgaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHVuc2ln
bmVkIHVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGRv
dWJsZSBkb3VibGVBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgZmxv
YXQgZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgQVhDb3Jl
T2JqZWN0KiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAg
SW50UG9pbnQgaW50UG9pbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Cisg
ICAgQ29sb3IgY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAg
VVJMIHVybEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB1aW50NjRf
dCB1aW50NjRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCByZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB2ZWN0b3JBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9u
U2V0PFQ+IG9wdGlvblNldEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKwor
ICAgIHZvaWQgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0OworICAgIHZvaWQgc2V0TWF0aHNjcmlw
dHMoQVhQcm9wZXJ0eU5hbWUsIEFYQ29yZU9iamVjdCYpOworICAgIHZvaWQgaW5zZXJ0TWF0aFBh
aXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4m
LCBBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiB2b2lkIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChVJiYpOworCisgICAgLy8g
QXR0cmlidXRlIHJldHJpZXZhbCBvdmVycmlkZXMuCisgICAgYm9vbCBpc0hlYWRpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklz
SGVhZGluZyk7IH0KKyAgICBib29sIGlzTGluaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNMaW5rKTsgfQorICAgIGJvb2wgaXNJ
bWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNJbWFnZSk7IH0KKyAgICBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNQYXNz
d29yZEZpZWxkKTsgfQorICAgIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNTZWFyY2hGaWVsZCk7
IH0KKyAgICBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBdHRhY2htZW50KTsgfQorICAgIGJvb2wg
aXNNZWRpYVRpbWVsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpJc01lZGlhVGltZWxpbmUpOyB9CisgICAgYm9vbCBpc01lbnVS
ZWxhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc01lbnVSZWxhdGVkKTsgfQorICAgIGJvb2wgaXNNZW51KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01lbnUp
OyB9CisgICAgYm9vbCBpc01lbnVCYXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUJhcik7IH0KKyAgICBib29sIGlzTWVu
dUJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNNZW51QnV0dG9uKTsgfQorICAgIGJvb2wgaXNNZW51SXRlbSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNN
ZW51SXRlbSk7IH0KKyAgICBib29sIGlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNGaWxlVXBsb2Fk
QnV0dG9uKTsgfQorICAgIGJvb2wgaXNJbnB1dEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0lucHV0SW1hZ2UpOyB9Cisg
ICAgYm9vbCBpc1Byb2dyZXNzSW5kaWNhdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1Byb2dyZXNzSW5kaWNhdG9yKTsgfQor
ICAgIGJvb2wgaXNTbGlkZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU2xpZGVyKTsgfQorICAgIGJvb2wgaXNDb250cm9sKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0NvbnRyb2wpOyB9CisKKyAgICBib29sIGlzTGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNMaXN0KTsgfQorICAgIGJv
b2wgaXNVbm9yZGVyZWRMaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1Vub3JkZXJlZExpc3QpOyB9CisgICAgYm9vbCBpc09y
ZGVyZWRMaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc09yZGVyZWRMaXN0KTsgfQorICAgIGJvb2wgaXNEZXNjcmlwdGlvbkxp
c3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzRGVzY3JpcHRpb25MaXN0KTsgfQorCisgICAgYm9vbCBpc1RhYmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVGFibGVSb3coKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVGFi
bGVSb3cpOyB9CisgICAgYm9vbCBpc1RhYmxlQ29sdW1uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlQ29sdW1uKTsgfQor
ICAgIGJvb2wgaXNUYWJsZUNlbGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGVDZWxsKTsgfQorICAgIGJvb2wgaXNGaWVs
ZHNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNGaWVsZHNldCk7IH0KKyAgICBib29sIGlzR3JvdXAoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzR3JvdXApOyB9
CisgICAgYm9vbCBpc0FSSUFUcmVlR3JpZFJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBUklBVHJlZUdyaWRSb3cpOyB9Cisg
ICAgYm9vbCBpc01lbnVMaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01lbnVMaXN0KTsgfQorICAgIGJvb2wgaXNNZW51TGlz
dFBvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc01lbnVMaXN0UG9wdXApOyB9CisgICAgYm9vbCBpc01lbnVMaXN0T3B0aW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpJc01lbnVMaXN0T3B0aW9uKTsgfQorICAgIGJvb2wgaXNUZXh0Q29udHJvbCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNU
ZXh0Q29udHJvbCk7IH0KKyAgICBib29sIGlzQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0J1dHRvbik7IH0KKyAgICBi
b29sIGlzUmFuZ2VDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1JhbmdlQ29udHJvbCk7IH0KKyAgICBib29sIGlzTWV0
ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzTWV0ZXIpOyB9CisgICAgYm9vbCBpc1N0eWxlRm9ybWF0R3JvdXAoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU3R5
bGVGb3JtYXRHcm91cCk7IH0KKyAgICBib29sIGlzT3V0cHV0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc091dHB1dCk7IH0KKyAg
ICBib29sIGlzQ2hlY2tlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNDaGVja2VkKTsgfQorICAgIGJvb2wgaXNFbmFibGVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0VuYWJsZWQpOyB9CisgICAgYm9vbCBpc1NlbGVjdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1NlbGVjdGVkKTsgfQor
ICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0ZvY3VzZWQpOyB9CisgICAgYm9vbCBpc011bHRpU2Vs
ZWN0YWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNNdWx0aVNlbGVjdGFibGUpOyB9CisgICAgYm9vbCBpc1Zpc2l0ZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OklzVmlzaXRlZCk7IH0KKyAgICBib29sIGlzUmVxdWlyZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzUmVxdWlyZWQpOyB9Cisg
ICAgYm9vbCBzdXBwb3J0c1JlcXVpcmVkQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1JlcXVpcmVkQXR0
cmlidXRlKTsgfQorICAgIGJvb2wgaXNFeHBhbmRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNFeHBhbmRlZCk7IH0KKyAgICBG
bG9hdFJlY3QgcmVsYXRpdmVGcmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHJlY3RBdHRy
aWJ1dGVWYWx1ZTxGbG9hdFJlY3Q+KEFYUHJvcGVydHlOYW1lOjpSZWxhdGl2ZUZyYW1lKTsgfQor
ICAgIGJvb2wgc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNEYXRldGltZUF0
dHJpYnV0ZSk7IH0KKyAgICBTdHJpbmcgZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEYXRl
dGltZUF0dHJpYnV0ZVZhbHVlKTsgfQorICAgIGJvb2wgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OkNhblNldEZvY3VzQXR0cmlidXRlKTsgfQorICAgIGJvb2wgY2FuU2V0VGV4dFJhbmdlQXR0cmli
dXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6Q2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcyk7IH0KKyAgICBib29sIGNhblNldFZh
bHVlQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpDYW5TZXRWYWx1ZUF0dHJpYnV0ZSk7IH0KKyAgICBib29sIGNhblNl
dE51bWVyaWNWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0TnVtZXJpY1ZhbHVlKTsgfQorICAgIGJvb2wgY2FuU2V0
U2VsZWN0ZWRBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhblNldFNlbGVjdGVkQXR0cmlidXRlKTsgfQorICAgIGJv
b2wgY2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0U2VsZWN0ZWRDaGls
ZHJlbkF0dHJpYnV0ZSk7IH0KKyAgICBib29sIGNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpD
YW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSk7IH0KKyAgICBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzQWNjZXNzaWJpbGl0eUlnbm9yZWQpOyB9CisgICAgYm9vbCBpc1Nob3dpbmdWYWxp
ZGF0aW9uTWVzc2FnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6SXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2UpOyB9CisgICAgU3Ry
aW5nIHZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlZhbGlkYXRpb25NZXNzYWdlKTsgfQorICAgIHVu
c2lnbmVkIGJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHVuc2lnbmVk
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkJsb2NrcXVvdGVMZXZlbCk7IH0KKyAgICBp
bnQgaGVhZGluZ0xldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OkhlYWRpbmdMZXZlbCk7IH0KKyAgICBpbnQgdGFibGVMZXZlbCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpUYWJsZUxldmVsKTsgfQorICAgIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9y
UmFkaW9WYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlCdXR0b25TdGF0ZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vz
c2liaWxpdHlCdXR0b25TdGF0ZSkpOyB9CisgICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6VmFsdWVEZXNjcmlwdGlvbik7IH0KKyAgICBmbG9hdCB2YWx1ZUZvclJhbmdlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VmFs
dWVGb3JSYW5nZSk7IH0KKyAgICBmbG9hdCBtYXhWYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF4VmFsdWVG
b3JSYW5nZSk7IH0KKyAgICBmbG9hdCBtaW5WYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWluVmFsdWVGb3JS
YW5nZSk7IH0KKyAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVkUmFkaW9CdXR0b24oKSBvdmVycmlk
ZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRS
YWRpb0J1dHRvbik7IH0KKyAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVkVGFiSXRlbSgpIG92ZXJy
aWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTZWxlY3Rl
ZFRhYkl0ZW0pOyB9CisgICAgaW50IGxheW91dENvdW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkxheW91dENvdW50KTsgfQorICAg
IGRvdWJsZSBlc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBkb3VibGVBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RXN0aW1hdGVkTG9hZGluZ1By
b2dyZXNzKTsgfQorICAgIGJvb2wgc3VwcG9ydHNBUklBT3ducygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBT3du
cyk7IH0KKyAgICBib29sIGlzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKTsgfQorICAgIHZvaWQgYXJpYUNv
bnRyb2xzRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgY29u
c3Qgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6QVJJQUNvbnRyb2xzRWxlbWVudHMsIGNoaWxkcmVuKTsgfQorICAgIHZvaWQgYXJpYURldGFp
bHNFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBv
dmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpB
UklBRGV0YWlsc0VsZW1lbnRzLCBjaGlsZHJlbik7IH0KKyAgICB2b2lkIGFyaWFFcnJvck1lc3Nh
Z2VFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBv
dmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpB
UklBRXJyb3JNZXNzYWdlRWxlbWVudHMsIGNoaWxkcmVuKTsgfQorICAgIHZvaWQgYXJpYUZsb3dU
b0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0IG92
ZXJyaWRlIHsgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFS
SUFGbG93VG9FbGVtZW50cywgY2hpbGRyZW4pOyB9CisgICAgdm9pZCBhcmlhT3duc0VsZW1lbnRz
KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0IG92ZXJyaWRlIHsg
ZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFPd25zRWxl
bWVudHMsIGNoaWxkcmVuKTsgfQorICAgIGJvb2wgaGFzUG9wdXAoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okhhc1BvcHVwKTsgfQor
ICAgIFN0cmluZyBwb3B1cFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlBvcHVwVmFsdWUpOyB9CisgICAgYm9vbCBwcmVz
c2VkSXNQcmVzZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpQcmVzc2VkSXNQcmVzZW50KTsgfQorICAgIGJvb2wgYXJpYUlzTXVs
dGlsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpBUklBSXNNdWx0aWxpbmUpOyB9CisgICAgU3RyaW5nIGludmFsaWRTdGF0dXMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SW52YWxpZFN0YXR1cyk7IH0KKyAgICBib29sIHN1cHBvcnRzRXhwYW5kZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1
cHBvcnRzRXhwYW5kZWQpOyB9CisgICAgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24gc29ydERp
cmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxp
dHlTb3J0RGlyZWN0aW9uPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U29ydERp
cmVjdGlvbikpOyB9CisgICAgYm9vbCBjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhbnZh
c0hhc0ZhbGxiYWNrQ29udGVudCk7IH0KKyAgICBib29sIHN1cHBvcnRzUmFuZ2VWYWx1ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
U3VwcG9ydHNSYW5nZVZhbHVlKTsgfQorICAgIFN0cmluZyBpZGVudGlmaWVyQXR0cmlidXRlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklkZW50aWZpZXJBdHRyaWJ1dGUpOyB9CisgICAgU3RyaW5nIGxpbmtSZWxWYWx1ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpMaW5rUmVsVmFsdWUpOyB9CisgICAgdm9pZCBjbGFzc0xpc3QoVmVjdG9yPFN0cmluZz4mKSBj
b25zdCBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlIGN1cnJlbnRTdGF0
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlDdXJy
ZW50U3RhdGU+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDdXJyZW50U3RhdGUp
KTsgfQorICAgIFN0cmluZyBjdXJyZW50VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBz
dHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q3VycmVudFZhbHVlKTsgfQorICAg
IGJvb2wgc3VwcG9ydHNDdXJyZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0N1cnJlbnQpOyB9CisgICAgY29uc3Qg
U3RyaW5nIGtleVNob3J0Y3V0c1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OktleVNob3J0Y3V0c1ZhbHVlKTsgfQorICAg
IGJvb2wgc3VwcG9ydHNTZXRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NldFNpemUpOyB9CisgICAgYm9vbCBz
dXBwb3J0c1Bvc0luU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1Bvc0luU2V0KTsgfQorICAgIGludCBzZXRTaXpl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OlNldFNpemUpOyB9CisgICAgaW50IHBvc0luU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlBvc0luU2V0KTsgfQorICAgIGJv
b2wgc3VwcG9ydHNBUklBRHJvcHBpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQURyb3BwaW5nKTsgfQorICAg
IGJvb2wgc3VwcG9ydHNBUklBRHJhZ2dpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQURyYWdnaW5nKTsgfQor
ICAgIGJvb2wgaXNBUklBR3JhYmJlZCgpIG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBUklBR3JhYmJlZCk7IH0KKyAgICBWZWN0b3I8U3RyaW5n
PiBkZXRlcm1pbmVBUklBRHJvcEVmZmVjdHMoKSBvdmVycmlkZSB7IHJldHVybiB2ZWN0b3JBdHRy
aWJ1dGVWYWx1ZTxTdHJpbmc+KEFYUHJvcGVydHlOYW1lOjpBUklBRHJvcEVmZmVjdHMpOyB9Cisg
ICAgQVhDb3JlT2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9iamVjdCogZm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gcGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7IH0KKyAgICBBWENvcmVPYmplY3Qq
IHBhcmVudE9iamVjdFVuaWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbGlua2Vk
VUlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBv
dmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpM
aW5rZWRVSUVsZW1lbnRzLCBjaGlsZHJlbik7IH0KKyAgICBBWENvcmVPYmplY3QqIHRpdGxlVUlF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OlRpdGxlVUlFbGVtZW50KTsgfQorICAgIGJvb2wgZXhwb3Nlc1RpdGxlVUlF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpFeHBvc2VzVGl0bGVVSUVsZW1lbnQpOyB9CisgICAgQVhDb3JlT2JqZWN0KiBz
Y3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uKSBvdmVycmlkZTsKKyAgICBBY2Nlc3Np
YmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb2xlPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6QVJJQVJvbGVBdHRyaWJ1dGUpKTsgfQorICAgIFN0cmluZyBjb21wdXRlZExhYmVsKCkg
b3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNv
bXB1dGVkTGFiZWwpOyB9CisgICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGV4dExlbmd0aCk7IH0KKyAg
ICBjb25zdCBTdHJpbmcgcGxhY2Vob2xkZXJWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlclZhbHVlKTsg
fQorICAgIFN0cmluZyBleHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpFeHBhbmRlZFRleHRWYWx1ZSk7
IH0KKyAgICBib29sIHN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRXhwYW5k
ZWRUZXh0VmFsdWUpOyB9CisgICAgdm9pZCBjb2xvclZhbHVlKGludCYsIGludCYsIGludCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb2xlPihpbnRBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Um9sZVZhbHVlKSk7IH0KKyAgICBTdHJpbmcgcm9sZVBs
YXRmb3JtU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVQbGF0Zm9ybVN0cmluZyk7IH0KKyAgICBTdHJpbmcgcm9s
ZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVEZXNjcmlwdGlvbik7IH0KKyAgICBTdHJpbmcgYXJpYUxh
bmRtYXJrUm9sZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFSSUFMYW5kbWFya1JvbGVEZXNjcmlwdGlvbik7
IH0KKyAgICBib29sIHN1cHBvcnRzUHJlc3NBY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzUHJlc3NBY3Rpb24p
OyB9CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveFJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiByZWN0QXR0cmlidXRlVmFsdWU8TGF5b3V0UmVjdD4oQVhQcm9wZXJ0eU5hbWU6OkJvdW5k
aW5nQm94UmVjdCk7IH0KKyAgICBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gcmVjdEF0dHJpYnV0ZVZhbHVlPExheW91dFJlY3Q+KEFYUHJvcGVydHlOYW1l
OjpFbGVtZW50UmVjdCk7IH0KKyAgICBJbnRQb2ludCBjbGlja1BvaW50KCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gaW50UG9pbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2xpY2tQb2ludCk7
IH0KKyAgICB2b2lkIGFjY2Vzc2liaWxpdHlUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4m
IHRleHRzKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgY29tcHV0ZWRSb2xlU3RyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OkNvbXB1dGVkUm9sZVN0cmluZyk7IH0KKyAgICBib29sIGlzVmFsdWVBdXRvZmlsbGVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc1ZhbHVlQXV0b2ZpbGxlZCk7IH0KKyAgICBib29sIGlzVmFsdWVBdXRvZmlsbEF2YWlsYWJs
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKTsgfQorICAgIEF1dG9GaWxsQnV0dG9uVHlw
ZSB2YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEF1dG9GaWxsQnV0dG9uVHlwZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OlZhbHVlQXV0b2ZpbGxCdXR0b25UeXBlKSk7IH0KKyAgICB2b2lkIGFyaWFUcmVlUm93cyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBvdmVycmlkZSB7IGZpbGxDaGls
ZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBVHJlZVJvd3MsIGNoaWxk
cmVuKTsgfQorICAgIHZvaWQgYXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBvdmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBVHJlZUl0ZW1EaXNjbG9zZWRSb3dzLCBjaGls
ZHJlbik7IH0KKyAgICB2b2lkIGFyaWFUcmVlSXRlbUNvbnRlbnQoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBjaGlsZHJlbikgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQVRyZWVJdGVtQ29udGVudCwgY2hpbGRyZW4pOyB9Cisg
ICAgVVJMIHVybCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHVybEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpVUkwpOyB9CisgICAgU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBY2Nlc3NL
ZXkpOyB9CisgICAgU3RyaW5nIGFjdGlvblZlcmIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBz
dHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6QWN0aW9uVmVyYik7IH0KKyAgICBT
dHJpbmcgcmVhZE9ubHlWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpSZWFkT25seVZhbHVlKTsgfQorICAgIFN0cmluZyBh
dXRvQ29tcGxldGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBdXRvQ29tcGxldGVWYWx1ZSk7IH0KKyAgICBPcHRpb25T
ZXQ8U3BlYWtBcz4gc3BlYWtBc1Byb3BlcnR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gb3B0
aW9uU2V0QXR0cmlidXRlVmFsdWU8U3BlYWtBcz4oQVhQcm9wZXJ0eU5hbWU6OlNwZWFrQXMpOyB9
CisgICAgYm9vbCBpc01hdGhFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhFbGVtZW50KTsgfQorICAgIGJvb2wg
aXNNYXRoRnJhY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aEZyYWN0aW9uKTsgfQorICAgIGJvb2wgaXNNYXRoRmVu
Y2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpJc01hdGhGZW5jZWQpOyB9CisgICAgYm9vbCBpc01hdGhTdWJzY3JpcHRTdXBlcnNj
cmlwdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQpOyB9CisgICAgYm9vbCBpc01hdGhS
b3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzTWF0aFJvdyk7IH0KKyAgICBib29sIGlzTWF0aFVuZGVyT3ZlcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRo
VW5kZXJPdmVyKTsgfQorICAgIGJvb2wgaXNNYXRoUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoUm9vdCk7IH0KKyAg
ICBib29sIGlzTWF0aFNxdWFyZVJvb3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFNxdWFyZVJvb3QpOyB9CisgICAgYm9v
bCBpc01hdGhUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpJc01hdGhUZXh0KTsgfQorICAgIGJvb2wgaXNNYXRoTnVtYmVyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc01hdGhOdW1iZXIpOyB9CisgICAgYm9vbCBpc01hdGhPcGVyYXRvcigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoT3Bl
cmF0b3IpOyB9CisgICAgYm9vbCBpc01hdGhGZW5jZU9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhGZW5jZU9w
ZXJhdG9yKTsgfQorICAgIGJvb2wgaXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFNl
cGFyYXRvck9wZXJhdG9yKTsgfQorICAgIGJvb2wgaXNNYXRoSWRlbnRpZmllcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRo
SWRlbnRpZmllcik7IH0KKyAgICBib29sIGlzTWF0aFRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhUYWJsZSk7IH0K
KyAgICBib29sIGlzTWF0aFRhYmxlUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhUYWJsZVJvdyk7IH0KKyAgICBib29s
IGlzTWF0aFRhYmxlQ2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVGFibGVDZWxsKTsgfQorICAgIGJvb2wgaXNNYXRo
TXVsdGlzY3JpcHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OklzTWF0aE11bHRpc2NyaXB0KTsgfQorICAgIGJvb2wgaXNNYXRoVG9r
ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzTWF0aFRva2VuKTsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aFJhZGljYW5kT2Jq
ZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6Ok1hdGhSYWRpY2FuZE9iamVjdCk7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhSb290SW5k
ZXhPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6TWF0aFJvb3RJbmRleE9iamVjdCk7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhV
bmRlck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpNYXRoVW5kZXJPYmplY3QpOyB9CisgICAgQVhDb3JlT2JqZWN0KiBtYXRoT3Zl
ck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpNYXRoT3Zlck9iamVjdCk7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhOdW1lcmF0
b3JPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6TWF0aE51bWVyYXRvck9iamVjdCk7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhE
ZW5vbWluYXRvck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpNYXRoRGVub21pbmF0b3JPYmplY3QpOyB9CisgICAgQVhDb3JlT2Jq
ZWN0KiBtYXRoQmFzZU9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoQmFzZU9iamVjdCk7IH0KKyAgICBBWENvcmVPYmplY3Qq
IG1hdGhTdWJzY3JpcHRPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aFN1YnNjcmlwdE9iamVjdCk7IH0KKyAgICBBWENvcmVP
YmplY3QqIG1hdGhTdXBlcnNjcmlwdE9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoU3VwZXJzY3JpcHRPYmplY3QpOyB9Cisg
ICAgU3RyaW5nIG1hdGhGZW5jZWRPcGVuU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhGZW5jZWRPcGVuU3RyaW5n
KTsgfQorICAgIFN0cmluZyBtYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aEZlbmNlZENs
b3NlU3RyaW5nKTsgfQorICAgIGludCBtYXRoTGluZVRoaWNrbmVzcygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoTGluZVRoaWNr
bmVzcyk7IH0KKyAgICBib29sIGlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0Fub255bW91
c01hdGhPcGVyYXRvcik7IH0KKyAgICB2b2lkIG1hdGhQcmVzY3JpcHRzKEFjY2Vzc2liaWxpdHlN
YXRoTXVsdGlzY3JpcHRQYWlycyYpIG92ZXJyaWRlOworICAgIHZvaWQgbWF0aFBvc3RzY3JpcHRz
KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYpIG92ZXJyaWRlOworICAgIGJvb2wg
ZmlsZVVwbG9hZEJ1dHRvblJldHVybnNWYWx1ZUluVGl0bGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkZpbGVVcGxvYWRCdXR0b25S
ZXR1cm5zVmFsdWVJblRpdGxlKTsgfQorICAgIFN0cmluZyBzcGVlY2hIaW50QXR0cmlidXRlVmFs
dWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6U3BlZWNoSGludCk7IH0KKyAgICBTdHJpbmcgZGVzY3JpcHRpb25BdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpEZXNjcmlwdGlvbik7IH0KKyAgICBTdHJpbmcgaGVscFRleHRBdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpIZWxwVGV4dCk7IH0KKyAgICBTdHJpbmcgdGl0bGVBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpUaXRsZSk7IH0KKyNpZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgYm9vbCBjYXJldEJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FyZXRCcm93c2luZ0VuYWJs
ZWQpOyB9CisjZW5kaWYKKyAgICBBWENvcmVPYmplY3QqIGZvY3VzYWJsZUFuY2VzdG9yKCkgb3Zl
cnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkZvY3Vz
YWJsZUFuY2VzdG9yKTsgfQorICAgIEFYQ29yZU9iamVjdCogZWRpdGFibGVBbmNlc3RvcigpIG92
ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpFZGl0
YWJsZUFuY2VzdG9yKTsgfQorICAgIEFYQ29yZU9iamVjdCogaGlnaGVzdEVkaXRhYmxlQW5jZXN0
b3IoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6SGlnaGVzdEVkaXRhYmxlQW5jZXN0b3IpOyB9CisgICAgQWNjZXNzaWJpbGl0eU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNj
ZXNzaWJpbGl0eU9yaWVudGF0aW9uPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
T3JpZW50YXRpb24pKTsgfQorICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdW5zaWduZWRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SGllcmFyY2hpY2FsTGV2ZWwpOyB9CisgICAgU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okxhbmd1YWdl
KTsgfQorICAgIGJvb2wgY2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhbkhhdmVTZWxlY3Rl
ZENoaWxkcmVuKTsgfQorICAgIHZvaWQgc2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBvdmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZENoaWxkcmVuLCBjaGlsZHJlbik7IH0KKyAg
ICB2b2lkIHZpc2libGVDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxk
cmVuKSBvdmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpWaXNpYmxlQ2hpbGRyZW4sIGNoaWxkcmVuKTsgfQorICAgIHZvaWQgdGFiQ2hpbGRyZW4o
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgb3ZlcnJpZGUgeyBmaWxsQ2hp
bGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGFiQ2hpbGRyZW4sIGNoaWxk
cmVuKTsgfQorICAgIGJvb2wgaGFzQVJJQVZhbHVlTm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIYXNBUklBVmFsdWVOb3cpOyB9
CisgICAgU3RyaW5nIHRhZ05hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGFnTmFtZSk7IH0KKyAgICBjb25zdCBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKGJvb2wgdXBkYXRlQ2hpbGRyZW5JZk5lZWRl
ZCA9IHRydWUpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgp
IG92ZXJyaWRlIHsgfQorICAgIGJvb2wgaXNEZXRhY2hlZEZyb21QYXJlbnQoKSBvdmVycmlkZTsK
KyAgICBib29sIHN1cHBvcnRzTGl2ZVJlZ2lvbihib29sID0gdHJ1ZSkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0xpdmVS
ZWdpb24pOyB9CisgICAgYm9vbCBpc0luc2lkZUxpdmVSZWdpb24oYm9vbCA9IHRydWUpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNJ
bnNpZGVMaXZlUmVnaW9uKTsgfQorICAgIGNvbnN0IFN0cmluZyBsaXZlUmVnaW9uU3RhdHVzKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OkxpdmVSZWdpb25TdGF0dXMpOyB9CisgICAgY29uc3QgU3RyaW5nIGxpdmVSZWdpb25SZWxl
dmFudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpMaXZlUmVnaW9uUmVsZXZhbnQpOyB9CisgICAgYm9vbCBsaXZlUmVnaW9uQXRv
bWljKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpMaXZlUmVnaW9uQXRvbWljKTsgfQorICAgIGJvb2wgaXNCdXN5KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0J1c3kp
OyB9CisgICAgYm9vbCBpc0lubGluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW5saW5lVGV4dCk7IH0KKyAgICAvLyBT
cGluIGJ1dHRvbiBzdXBwb3J0LgorICAgIEFYQ29yZU9iamVjdCogaW5jcmVtZW50QnV0dG9uKCkg
b3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklu
Y3JlbWVudEJ1dHRvbik7IH0KKyAgICBBWENvcmVPYmplY3QqIGRlY3JlbWVudEJ1dHRvbigpIG92
ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEZWNy
ZW1lbnRCdXR0b24pOyB9CisgICAgYm9vbCBpc0luY3JlbWVudG9yKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0luY3JlbWVudG9y
KTsgfQorCisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN0cmluZ1ZhbHVlKTsgfQorCisg
ICAgLy8gUGFyYW1ldGVyaXplZCBhdHRyaWJ1dGUgcmV0cmlldmFsLgorICAgIFZlY3RvcjxSZWZQ
dHI8UmFuZ2U+PiBmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlh
IGNvbnN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybVRleHRP
cGVyYXRpb24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gY29uc3QmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiwg
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGU7CisKKyAgICAvLyBBdHRyaWJ1
dGVzIHJldHJpZXZlZCBmcm9tIHRoZSByb290IG5vZGUgb25seSBzbyB0aGF0IHRoZSBkYXRhIGlz
bid0IGR1cGxpY2F0ZWQgb24gZWFjaCBub2RlLgorICAgIHVpbnQ2NF90IHNlc3Npb25JRCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBkb2N1bWVudFVSSSgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFN0cmluZyBkb2N1bWVudEVuY29kaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBw
cmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAv
LyBUT0RPOiBUZXh0IHJhbmdlcyBhbmQgc2VsZWN0aW9uLgorICAgIFBsYWluVGV4dFJhbmdlIHNl
bGVjdGVkVGV4dFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0UmFuZ2Uo
KTsgfQorICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gMDsgfQorICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oKTsgfQorICAgIFN0cmluZyBzZWxlY3RlZFRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQ
b3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5vcmRlcmVkUG9zaXRpb25zKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBw
b3NpdGlvbk9mTGVmdFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHBvc2l0aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIGxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQor
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBzZW50ZW5jZUZvclBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2li
bGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwYXJhZ3JhcGhG
b3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugc3R5
bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZp
c2libGVQb3NpdGlvblJhbmdlIGxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
KyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0
UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgU3RyaW5nIHN0
cmluZ0ZvclJhbmdlKFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CisgICAgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBW
aXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsg
fQorICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgaW50IGxlbmd0aEZvclZpc2libGVQ
b3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gMDsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMoY29uc3QgSW50UmVjdCYsIEFjY2Vz
c2liaWxpdHlWaXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlv
bkZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFZpc2libGVQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZEVuZChjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQor
ICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRp
b24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZp
c2libGVQb3NpdGlvbiBuZXh0TGluZUVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJs
ZVBvc2l0aW9uIHByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNp
YmxlUG9zaXRpb24gbmV4dFNlbnRlbmNlRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAg
ICBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzUGFyYWdyYXBoU3RhcnRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsgfQorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCh1bnNpZ25l
ZCwgYm9vbCAvKmxhc3RJbmRleE9LICovKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eChpbnQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAg
aW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBBWENvcmVPYmplY3QqIGFjY2Vzc2liaWxpdHlP
YmplY3RGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBudWxscHRyOyB9CisgICAgaW50IGxpbmVGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgUGxhaW5UZXh0UmFu
Z2UgcGxhaW5UZXh0UmFuZ2VGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9z
aXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0K
KyAgICBpbnQgaW5kZXgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gMDsgfQorICAgIHZvaWQgbGluZUJyZWFrcyhWZWN0b3I8aW50PiYpIGNvbnN0IG92ZXJy
aWRlIHsgfQorICAgIFBsYWluVGV4dFJhbmdlIGRvQVhSYW5nZUZvckxpbmUodW5zaWduZWQpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICBQbGFpblRleHRS
YW5nZSBkb0FYUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICBQbGFpblRleHRSYW5nZSBkb0FYUmFu
Z2VGb3JJbmRleCh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0UmFu
Z2UoKTsgfQorICAgIFBsYWluVGV4dFJhbmdlIGRvQVhTdHlsZVJhbmdlRm9ySW5kZXgodW5zaWdu
ZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICBTdHJp
bmcgZG9BWFN0cmluZ0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBJbnRSZWN0IGRvQVhCb3VuZHNGb3JSYW5nZShj
b25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsg
fQorICAgIEludFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQoY29u
c3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0K
KyAgICB1bnNpZ25lZCBkb0FYTGluZUZvckluZGV4KHVuc2lnbmVkKSBvdmVycmlkZSB7IHJldHVy
biAwOyB9CisKKyAgICAvLyBBdHRyaWJ1dGUgc2V0dGVycy4KKyAgICB2b2lkIHNldEFSSUFHcmFi
YmVkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0SXNFeHBhbmRlZChib29sKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFZhbHVlKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNlbGVj
dGVkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Rm9jdXNlZChib29sKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyNp
ZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCBzZXRD
YXJldEJyb3dzaW5nRW5hYmxlZChib29sKSBvdmVycmlkZTsKKyNlbmRpZgorICAgIHZvaWQgc2V0
UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaChib29sKSBvdmVycmlkZTsKKworICAgIC8v
IFRPRE86IEZ1bmN0aW9ucworICAgIFN0cmluZyB0ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxp
dHlUZXh0VW5kZXJFbGVtZW50TW9kZSA9IEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9k
ZSgpKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFJlZlB0cjxSYW5n
ZT4gZ2V0TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8UmFuZ2U+IGNvbnN0JiwgQWNjZXNzaWJpbGl0
eVNlYXJjaERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
IEZsb2F0UmVjdCBjb252ZXJ0RnJhbWVUb1NwYWNlKGNvbnN0IEZsb2F0UmVjdCYsIEFjY2Vzc2li
aWxpdHlDb252ZXJzaW9uU3BhY2UpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGRlY3JlbWVu
dCgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZSgpIGNvbnN0IG92
ZXJyaWRlIHsgfQorICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhjb25z
dCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzY3JvbGxUb0dsb2JhbFBv
aW50KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCByZXBsYWNl
VGV4dEluUmFuZ2UoY29uc3QgU3RyaW5nJiwgY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBvdmVycmlk
ZTsKKyAgICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBtYWtlUmFuZ2VWaXNpYmxlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgb3ZlcnJpZGUgeyB9Cisg
ICAgYm9vbCBwcmVzcygpIG92ZXJyaWRlOworICAgIGJvb2wgcGVyZm9ybURlZmF1bHRBY3Rpb24o
KSBvdmVycmlkZTsKKworICAgIC8vIEZ1bmN0aW9ucyB0aGF0IHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQgb24gYW4gaXNvbGF0ZWQgdHJlZSBvYmplY3QuIEFTU0VSVCB0aGF0IHRoZXNlIGFyZSBub3Qg
cmVhY2hlZDsKKyAgICBib29sIGlzQWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNj
ZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQXR0YWNo
bWVudEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTmF0aXZlSW1hZ2UoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzSW1hZ2VCdXR0b24oKSBjb25zdCBvdmVycmlkZTsK
KyAgICBib29sIGlzQ29udGFpbmVkQnlQYXNzd29yZEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgQVhDb3JlT2JqZWN0KiBwYXNzd29yZEZpZWxkT3JDb250YWluaW5nUGFzc3dvcmRGaWVsZCgp
IG92ZXJyaWRlOworICAgIGJvb2wgaXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgaXNOYXRpdmVMaXN0Qm94KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c0xpc3RCb3hPcHRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzU2xpZGVyVGh1bWIo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzSW5wdXRTbGlkZXIoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzTGFiZWwoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzRGF0YVRh
YmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0ltYWdlTWFwTGluaygpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNOYXRpdmVTcGluQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc1NwaW5CdXR0b25QYXJ0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01v
Y2tPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTWVkaWFPYmplY3QoKSBjb25z
dCBvdmVycmlkZTsKKyAgICBib29sIGlzQVJJQVRleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc05vbk5hdGl2ZVRleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBpc0Jsb2NrcXVvdGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTGFuZG1hcmso
KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzRmlndXJlRWxlbWVudCgpIGNvbnN0IG92ZXJy
aWRlOworICAgIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgaXNIb3ZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0luZGV0ZXJtaW5h
dGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTG9hZGVkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0xvYWRlZCk7IH0K
KyAgICBib29sIGlzT25TY3JlZW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzT2ZmU2Ny
ZWVuKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ByZXNzZWQoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzVW52aXNpdGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0xp
bmtlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNT
ZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzQm9sZEZv
bnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc0l0YWxpY0ZvbnQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGhhc01pc3NwZWxsaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9v
bCBoYXNQbGFpblRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1NhbWVGb250KFJl
bmRlck9iamVjdCopIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzU2FtZUZvbnRDb2xvcihS
ZW5kZXJPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1NhbWVTdHlsZShSZW5k
ZXJPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzU3RhdGljVGV4dCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgaGFzVW5kZXJsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBoYXNIaWdobGlnaHRpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTm9kZSogbm9kZSgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0SW5jbHVzaW9uIGRlZmF1bHRPYmplY3RJbmNsdXNpb24oKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRCeURlZmF1bHQoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBmbG9hdCBzdGVwVmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIEFYQ29yZU9iamVjdCogc2VsZWN0ZWRMaXN0SXRlbSgpIG92ZXJyaWRlOworICAgIHZvaWQg
YXJpYUFjdGl2ZURlc2NlbmRhbnRSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXJpYUNvbnRyb2xzUmVmZXJl
bmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIGFyaWFEZXNjcmliZWRCeUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXJpYURlc2NyaWJlZEJ5UmVmZXJl
bmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIGFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFyaWFFcnJvck1lc3Nh
Z2VSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgYXJpYUZsb3dUb1JlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcmlhTGFi
ZWxsZWRCeUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgYXJpYUxhYmVsbGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXJpYU93bnNS
ZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaGFzRGF0YWxpc3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IHN1cHBvcnRzSGFzUG9wdXAoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHN1cHBvcnRzUHJl
c3NlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNDaGVja2VkKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBpZ25vcmVkRnJvbU1vZGFsUHJlc2VuY2UoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGlzTW9kYWxEZXNjZW5kYW50KE5vZGUqKSBjb25zdCBvdmVycmlkZTsK
KyAgICBib29sIGlzTW9kYWxOb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0
KiBlbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBBWENvcmVPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBBWENvcmVPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9i
amVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0
KiBuZXh0U2libGluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9iamVjdCogbmV4dFNp
YmxpbmdVbmlnbm9yZWQoaW50IGxpbWl0KSBjb25zdCBvdmVycmlkZTsKKyAgICBBWENvcmVPYmpl
Y3QqIHByZXZpb3VzU2libGluZ1VuaWdub3JlZChpbnQgbGltaXQpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBib29sIGlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50KCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc0Rlc2NlbmRhbnRPZlJvbGUoQWNjZXNzaWJpbGl0eVJvbGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIEFYQ29yZU9iamVjdCogb2JzZXJ2YWJsZU9iamVjdCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIEFYQ29yZU9iamVjdCogY29ycmVzcG9uZGluZ0xhYmVsRm9yQ29udHJvbEVsZW1lbnQo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBBWENvcmVPYmplY3QqIGNvcnJlc3BvbmRpbmdDb250cm9s
Rm9yTGFiZWxFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ByZXNlbnRhdGlv
bmFsQ2hpbGRPZkFyaWFSb2xlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcmlhUm9sZUhh
c1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGluaGVy
aXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRBY2Nl
c3NpYmxlTmFtZShjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNBdHRy
aWJ1dGVzUmVxdWlyZWRGb3JJbmNsdXNpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcg
YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRp
dGxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGhlbHBUZXh0KCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc0FSSUFTdGF0aWNUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3Ry
aW5nIHRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgYXJpYUxhYmVsZWRCeUF0dHJp
YnV0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBhcmlhRGVzY3JpYmVkQnlBdHRyaWJ1
dGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFjY2Vzc2libGVOYW1lRGVyaXZlc0Zyb21D
b250ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBlbGVtZW50c0Zyb21BdHRyaWJ1dGUo
VmVjdG9yPEVsZW1lbnQqPiYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
RWxlbWVudCogYW5jaG9yRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEVsZW1lbnQqIGFj
dGlvbkVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBQYXRoIGVsZW1lbnRQYXRoKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzdXBwb3J0c1BhdGgoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzUGF0aCk7IH0K
KyAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5n
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFdpZGdldCogd2lkZ2V0KCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgV2lkZ2V0KiB3aWRnZXRGb3JBdHRhY2htZW50VmlldygpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFBhZ2UqIHBhZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBGcmFtZVZpZXcqIGRvY3VtZW50RnJhbWVWaWV3KCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRnJh
bWUqIG1haW5GcmFtZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIERvY3VtZW50KiB0b3BEb2N1bWVu
dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXdBbmNlc3Rvcigp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB0ZXh0Q2hhbmdlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlQWNjZXNzaWJp
bGl0eVJvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkcmVuKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBhZGRDaGlsZChBWENvcmVPYmplY3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGluc2Vy
dENoaWxkKEFYQ29yZU9iamVjdCosIHVuc2lnbmVkKSBvdmVycmlkZTsKKyAgICBib29sIHNob3Vs
ZElnbm9yZUF0dHJpYnV0ZVJvbGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzQ2hpbGRyZW4oKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzVG9VcGRhdGVDaGlsZHJlbigpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0TmVlZHNUb1VwZGF0ZVN1YnRyZWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNs
ZWFyQ2hpbGRyZW4oKSBvdmVycmlkZTsKKyAgICBib29sIG5lZWRzVG9VcGRhdGVDaGlsZHJlbigp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGV0YWNoRnJvbVBhcmVudCgpIG92ZXJyaWRlOwor
ICAgIGJvb2wgc2hvdWxkRm9jdXNBY3RpdmVEZXNjZW5kYW50KCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgQVhDb3JlT2JqZWN0KiBhY3RpdmVEZXNjZW5kYW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCgpIG92ZXJyaWRlOworICAgIHZvaWQg
aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlZCgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNEZXNjZW5k
YW50T2ZPYmplY3QoY29uc3QgQVhDb3JlT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9v
bCBpc0FuY2VzdG9yT2ZPYmplY3QoY29uc3QgQVhDb3JlT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgQVhDb3JlT2JqZWN0KiBmaXJzdEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgY29uc3QgQXRvbVN0cmluZyYgZ2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1RhZ05hbWUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBzdHJpbmdWYWx1ZUZvck1T
QUEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgc3RyaW5nUm9sZUZvck1TQUEoKSBjb25z
dCBvdmVycmlkZTsKKyAgICBTdHJpbmcgbmFtZUZvck1TQUEoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBTdHJpbmcgZGVzY3JpcHRpb25Gb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQWNjZXNz
aWJpbGl0eVJvbGUgcm9sZVZhbHVlRm9yTVNBQSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmlu
ZyBwYXNzd29yZEZpZWxkVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWENvcmVPYmplY3Qq
IGxpdmVSZWdpb25BbmNlc3Rvcihib29sIGV4Y2x1ZGVJZk9mZiA9IHRydWUpIGNvbnN0IG92ZXJy
aWRlOworICAgIGJvb2wgaGFzQ29udGVudEVkaXRhYmxlQXR0cmlidXRlU2V0KCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBzdXBwb3J0c1JlYWRPbmx5KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBzdXBwb3J0c0F1dG9Db21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc3Vw
cG9ydHNBUklBQXR0cmlidXRlcygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc2Nyb2xsQnlQ
YWdlKFNjcm9sbEJ5UGFnZURpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgSW50UG9pbnQg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBJbnRTaXplIHNjcm9sbENvbnRl
bnRzU2l6ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIEludFJlY3Qgc2Nyb2xsVmlzaWJsZUNvbnRl
bnRSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKGNv
bnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9v
bCBsYXN0S25vd25Jc0lnbm9yZWRWYWx1ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TGFzdEtu
b3duSXNJZ25vcmVkVmFsdWUoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBub3RpZnlJZklnbm9y
ZWRWYWx1ZUNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICBib29sIGlzTWF0aFNjcmlwdE9iamVjdChB
Y2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgaXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9i
amVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBWEhpZGRlbigpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNET01IaWRkZW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGlzSGlkZGVuKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBvdmVycmlkZUF0dGFjaG1lbnRQ
YXJlbnQoQVhDb3JlT2JqZWN0KiBwYXJlbnQpIG92ZXJyaWRlOworICAgIGJvb2wgYWNjZXNzaWJp
bGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uIGFjY2Vzc2liaWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2JqZWN0KCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNBcHBsZVBERkFubm90YXRpb25BdHRyaWJ1dGUoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyogYW5jZXN0
b3JBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhib29sIGluY2x1ZGVTZWxmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldElzSWdub3JlZEZyb21QYXJlbnREYXRhKEFjY2Vzc2liaWxpdHlJc0ln
bm9yZWRGcm9tUGFyZW50RGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJJc0lnbm9yZWRG
cm9tUGFyZW50RGF0YSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0SXNJZ25vcmVkRnJvbVBhcmVu
dERhdGFGb3JDaGlsZChBWENvcmVPYmplY3QqKSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRl
QmFja2luZ1N0b3JlKCkgb3ZlcnJpZGU7CisKKyAgICBBWElEIG1fcGFyZW50IHsgSW52YWxpZEFY
SUQgfTsKKyAgICBBWElEIG1faWQgeyBJbnZhbGlkQVhJRCB9OworICAgIGJvb2wgbV9pbml0aWFs
aXplZCB7IGZhbHNlIH07CisgICAgQVhJc29sYXRlZFRyZWVJRCBtX3RyZWVJZGVudGlmaWVyOwor
ICAgIFJlZlB0cjxBWElzb2xhdGVkVHJlZT4gbV9jYWNoZWRUcmVlOworICAgIFZlY3RvcjxBWElE
PiBtX2NoaWxkcmVuSURzOworICAgIFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4gbV9jaGls
ZHJlbjsKKworICAgIEhhc2hNYXA8QVhQcm9wZXJ0eU5hbWUsIEF0dHJpYnV0ZVZhbHVlVmFyaWFu
dCwgV1RGOjpJbnRIYXNoPEFYUHJvcGVydHlOYW1lPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0
czxBWFByb3BlcnR5TmFtZT4+IG1fYXR0cmlidXRlTWFwOworICAgIExvY2sgbV9hdHRyaWJ1dGVN
YXBMb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KChBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCmlu
ZGV4IGVmOWVlZDM4MGU1ZmMzMzFhYmU5MWUzNDczNDZlMmNlOTFjZjZiZmIuLmYyOGE0MWJiOTBk
ZWFlOWFkYzBkY2Y3MmEwY2RlZGYzNzA5NTVhNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAK
QEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVF
KQogI2luY2x1ZGUgIkFYSXNvbGF0ZWRUcmVlLmgiCiAKLSNpbmNsdWRlICJBWElzb2xhdGVkVHJl
ZU5vZGUuaCIKKyNpbmNsdWRlICJBWElzb2xhdGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaApp
bmRleCAzOGI0ZGM1MzQ4MzJmZWY0M2UzMzRlM2RmYzc1M2Q2OTI3NzM4NDY0Li45ZTJjMGE5ZWM5
NzQxMWM2YTllYWQ2NjY2NjJmM2JmNTc0NDc4NmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAg
LTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUp
CiAKLSNpbmNsdWRlICJBWElzb2xhdGVkVHJlZU5vZGUuaCIKICNpbmNsdWRlICJQYWdlSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZFRyZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDFkNDEwNDc5NTZiMmQ2NjZkMDRmNDJhY2VhNDI0MzExODM1OTQyMmQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE4NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0jaW5jbHVkZSAiQVhJ
c29sYXRlZFRyZWVOb2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQVhJc29sYXRlZE9i
amVjdDo6QVhJc29sYXRlZE9iamVjdChBWENvcmVPYmplY3QmIG9iamVjdCwgYm9vbCBpc1Jvb3Qp
Ci0gICAgOiBtX2lkKG9iamVjdC5vYmplY3RJRCgpKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEob2JqZWN0LCBpc1Jvb3QpOwotICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOwotfQotCi1SZWY8QVhJc29sYXRlZE9iamVjdD4gQVhJc29s
YXRlZE9iamVjdDo6Y3JlYXRlKEFYQ29yZU9iamVjdCYgb2JqZWN0LCBib29sIGlzUm9vdCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBWElzb2xhdGVkT2JqZWN0KG9iamVjdCwgaXNSb290
KSk7Ci19Ci0KLUFYSXNvbGF0ZWRPYmplY3Q6On5BWElzb2xhdGVkT2JqZWN0KCkgPSBkZWZhdWx0
OwotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKEFYQ29y
ZU9iamVjdCYgb2JqZWN0LCBib29sIGlzUm9vdCkKLXsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6Qm91bmRpbmdCb3hSZWN0LCBvYmplY3QuYm91bmRpbmdCb3hSZWN0KCkpOwotICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFbGVtZW50UmVjdCwgb2JqZWN0LmVsZW1lbnRS
ZWN0KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSb2xlVmFsdWUsIHN0YXRp
Y19jYXN0PGludD4ob2JqZWN0LnJvbGVWYWx1ZSgpKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OlJvbGVQbGF0Zm9ybVN0cmluZywgb2JqZWN0LnJvbGVQbGF0Zm9ybVN0cmluZygp
Lmlzb2xhdGVkQ29weSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQUxh
bmRtYXJrUm9sZURlc2NyaXB0aW9uLCBvYmplY3QuYXJpYUxhbmRtYXJrUm9sZURlc2NyaXB0aW9u
KCkuaXNvbGF0ZWRDb3B5KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSb2xl
RGVzY3JpcHRpb24sIG9iamVjdC5yb2xlRGVzY3JpcHRpb24oKS5pc29sYXRlZENvcHkoKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQXR0YWNobWVudCwgb2JqZWN0LmlzQXR0
YWNobWVudCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNMaW5rLCBvYmpl
Y3QuaXNMaW5rKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0ltYWdlTWFw
TGluaywgb2JqZWN0LmlzSW1hZ2VNYXBMaW5rKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc0ltYWdlLCBvYmplY3QuaXNJbWFnZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6SXNGaWxlVXBsb2FkQnV0dG9uLCBvYmplY3QuaXNGaWxlVXBsb2FkQnV0dG9u
KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0FjY2Vzc2liaWxpdHlJZ25v
cmVkLCBvYmplY3QuYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNUcmVlLCBvYmplY3QuaXNUcmVlKCkpOwotICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpJc1Njcm9sbGJhciwgb2JqZWN0LmlzU2Nyb2xsYmFyKCkpOwotICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSZWxhdGl2ZUZyYW1lLCBvYmplY3QucmVsYXRp
dmVGcmFtZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3BlZWNoSGludCwg
b2JqZWN0LnNwZWVjaEhpbnRBdHRyaWJ1dGVWYWx1ZSgpLmlzb2xhdGVkQ29weSgpKTsKLSAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGl0bGUsIG9iamVjdC50aXRsZUF0dHJpYnV0ZVZh
bHVlKCkuaXNvbGF0ZWRDb3B5KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpE
ZXNjcmlwdGlvbiwgb2JqZWN0LmRlc2NyaXB0aW9uQXR0cmlidXRlVmFsdWUoKS5pc29sYXRlZENv
cHkoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkhlbHBUZXh0LCBvYmplY3Qu
aGVscFRleHRBdHRyaWJ1dGVWYWx1ZSgpLmlzb2xhdGVkQ29weSgpKTsKLSAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6SXNTZWFyY2hGaWVsZCwgb2JqZWN0LmlzU2VhcmNoRmllbGQoKSk7
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVkaWFUaW1lbGluZSwgb2JqZWN0
LmlzTWVkaWFUaW1lbGluZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNN
ZW51UmVsYXRlZCwgb2JqZWN0LmlzTWVudVJlbGF0ZWQoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzTWVudSwgb2JqZWN0LmlzTWVudSgpKTsKLSAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNNZW51QmFyLCBvYmplY3QuaXNNZW51QmFyKCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01lbnVCdXR0b24sIG9iamVjdC5pc01lbnVCdXR0b24o
KSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUl0ZW0sIG9iamVjdC5p
c01lbnVJdGVtKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0lucHV0SW1h
Z2UsIG9iamVjdC5pc0lucHV0SW1hZ2UoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OklzUHJvZ3Jlc3NJbmRpY2F0b3IsIG9iamVjdC5pc1Byb2dyZXNzSW5kaWNhdG9yKCkpOwot
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1NsaWRlciwgb2JqZWN0LmlzU2xpZGVy
KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0NvbnRyb2wsIG9iamVjdC5p
c0NvbnRyb2woKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTGlzdCwgb2Jq
ZWN0LmlzTGlzdCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNVbm9yZGVy
ZWRMaXN0LCBvYmplY3QuaXNVbm9yZGVyZWRMaXN0KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpJc09yZGVyZWRMaXN0LCBvYmplY3QuaXNPcmRlcmVkTGlzdCgpKTsKLSAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNEZXNjcmlwdGlvbkxpc3QsIG9iamVjdC5pc0Rl
c2NyaXB0aW9uTGlzdCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNUYWJs
ZVJvdywgb2JqZWN0LmlzVGFibGVSb3coKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OklzVGFibGVDb2x1bW4sIG9iamVjdC5pc1RhYmxlQ29sdW1uKCkpOwotICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlQ2VsbCwgb2JqZWN0LmlzVGFibGVDZWxsKCkpOwot
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0ZpZWxkc2V0LCBvYmplY3QuaXNGaWVs
ZHNldCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNHcm91cCwgb2JqZWN0
LmlzR3JvdXAoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQVJJQVRyZWVH
cmlkUm93LCBvYmplY3QuaXNBUklBVHJlZUdyaWRSb3coKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzTWVudUxpc3QsIG9iamVjdC5pc01lbnVMaXN0KCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01lbnVMaXN0UG9wdXAsIG9iamVjdC5pc01lbnVMaXN0
UG9wdXAoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUxpc3RPcHRp
b24sIG9iamVjdC5pc01lbnVMaXN0T3B0aW9uKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc1RleHRDb250cm9sLCBvYmplY3QuaXNUZXh0Q29udHJvbCgpKTsKLSAgICBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNCdXR0b24sIG9iamVjdC5pc0J1dHRvbigpKTsKLSAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNSYW5nZUNvbnRyb2wsIG9iamVjdC5pc1Jh
bmdlQ29udHJvbCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNTdHlsZUZv
cm1hdEdyb3VwLCBvYmplY3QuaXNTdHlsZUZvcm1hdEdyb3VwKCkpOwotICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpJc091dHB1dCwgb2JqZWN0LmlzT3V0cHV0KCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0RhdGV0aW1lQXR0cmlidXRlLCBvYmplY3Qu
c3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6RGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSwgb2JqZWN0LmRhdGV0aW1lQXR0cmlidXRlVmFs
dWUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNhblNldEZvY3VzQXR0cmli
dXRlLCBvYmplY3QuY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OkNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMsIG9iamVjdC5jYW5TZXRUZXh0
UmFuZ2VBdHRyaWJ1dGVzKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYW5T
ZXRWYWx1ZUF0dHJpYnV0ZSwgb2JqZWN0LmNhblNldFZhbHVlQXR0cmlidXRlKCkpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYW5TZXROdW1lcmljVmFsdWUsIG9iamVjdC5jYW5T
ZXROdW1lcmljVmFsdWUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzUGFz
c3dvcmRGaWVsZCwgb2JqZWN0LmlzUGFzc3dvcmRGaWVsZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNIZWFkaW5nLCBvYmplY3QuaXNIZWFkaW5nKCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0NoZWNrZWQsIG9iamVjdC5pc0NoZWNrZWQoKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzRW5hYmxlZCwgb2JqZWN0LmlzRW5hYmxl
ZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNTZWxlY3RlZCwgb2JqZWN0
LmlzU2VsZWN0ZWQoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzRm9jdXNl
ZCwgb2JqZWN0LmlzRm9jdXNlZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
SXNIb3ZlcmVkLCBvYmplY3QuaXNIb3ZlcmVkKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc0luZGV0ZXJtaW5hdGUsIG9iamVjdC5pc0luZGV0ZXJtaW5hdGUoKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTG9hZGVkLCBvYmplY3QuaXNMb2FkZWQoKSk7
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTXVsdGlTZWxlY3RhYmxlLCBvYmpl
Y3QuaXNNdWx0aVNlbGVjdGFibGUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OklzT25TY3JlZW4sIG9iamVjdC5pc09uU2NyZWVuKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpJc09mZlNjcmVlbiwgb2JqZWN0LmlzT2ZmU2NyZWVuKCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1ByZXNzZWQsIG9iamVjdC5pc1ByZXNzZWQoKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVW52aXNpdGVkLCBvYmplY3QuaXNVbnZp
c2l0ZWQoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVmlzaXRlZCwgb2Jq
ZWN0LmlzVmlzaXRlZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNSZXF1
aXJlZCwgb2JqZWN0LmlzUmVxdWlyZWQoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OlN1cHBvcnRzUmVxdWlyZWRBdHRyaWJ1dGUsIG9iamVjdC5zdXBwb3J0c1JlcXVpcmVkQXR0
cmlidXRlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0xpbmtlZCwgb2Jq
ZWN0LmlzTGlua2VkKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0V4cGFu
ZGVkLCBvYmplY3QuaXNFeHBhbmRlZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6SXNWaXNpYmxlLCBvYmplY3QuaXNWaXNpYmxlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpJc0NvbGxhcHNlZCwgb2JqZWN0LmlzQ29sbGFwc2VkKCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1NlbGVjdGVkT3B0aW9uQWN0aXZlLCBvYmplY3QuaXNT
ZWxlY3RlZE9wdGlvbkFjdGl2ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
Q2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUsIG9iamVjdC5jYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgp
KTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0U2VsZWN0ZWRDaGlsZHJl
bkF0dHJpYnV0ZSwgb2JqZWN0LmNhblNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNhblNldEV4cGFuZGVkQXR0cmlidXRlLCBv
YmplY3QuY2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OklzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlLCBvYmplY3QuaXNTaG93aW5nVmFs
aWRhdGlvbk1lc3NhZ2UoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbGlk
YXRpb25NZXNzYWdlLCBvYmplY3QudmFsaWRhdGlvbk1lc3NhZ2UoKSk7Ci0gICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OkJsb2NrcXVvdGVMZXZlbCwgb2JqZWN0LmJsb2NrcXVvdGVMZXZl
bCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SGVhZGluZ0xldmVsLCBvYmpl
Y3QuaGVhZGluZ0xldmVsKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpUYWJs
ZUxldmVsLCBvYmplY3QudGFibGVMZXZlbCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6QWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlLCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5j
aGVja2JveE9yUmFkaW9WYWx1ZSgpKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlZhbHVlRGVzY3JpcHRpb24sIG9iamVjdC52YWx1ZURlc2NyaXB0aW9uKCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZUZvclJhbmdlLCBvYmplY3QudmFsdWVGb3JSYW5n
ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF4VmFsdWVGb3JSYW5nZSwg
b2JqZWN0Lm1heFZhbHVlRm9yUmFuZ2UoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6Ok1pblZhbHVlRm9yUmFuZ2UsIG9iamVjdC5taW5WYWx1ZUZvclJhbmdlKCkpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZFJhZGlvQnV0dG9uLCBvYmplY3Quc2Vs
ZWN0ZWRSYWRpb0J1dHRvbigpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U2Vs
ZWN0ZWRUYWJJdGVtLCBvYmplY3Quc2VsZWN0ZWRUYWJJdGVtKCkpOwotICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpMYXlvdXRDb3VudCwgb2JqZWN0LmxheW91dENvdW50KCkpOwotICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MsIG9i
amVjdC5lc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQU93bnMsIG9iamVjdC5zdXBwb3J0c0FSSUFPd25zKCkpOwot
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3Vz
ZWRDb250YWluZXIsIG9iamVjdC5pc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIo
KSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okhhc1BvcHVwLCBvYmplY3QuaGFz
UG9wdXAoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlBvcHVwVmFsdWUsIG9i
amVjdC5wb3B1cFZhbHVlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpQcmVz
c2VkSXNQcmVzZW50LCBvYmplY3QucHJlc3NlZElzUHJlc2VudCgpKTsKLSAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6QVJJQUlzTXVsdGlsaW5lLCBvYmplY3QuYXJpYUlzTXVsdGlsaW5l
KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJbnZhbGlkU3RhdHVzLCBvYmpl
Y3QuaW52YWxpZFN0YXR1cygpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3Vw
cG9ydHNFeHBhbmRlZCwgb2JqZWN0LnN1cHBvcnRzRXhwYW5kZWQoKSk7Ci0gICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OlNvcnREaXJlY3Rpb24sIHN0YXRpY19jYXN0PGludD4ob2JqZWN0
LnNvcnREaXJlY3Rpb24oKSkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYW52
YXNIYXNGYWxsYmFja0NvbnRlbnQsIG9iamVjdC5jYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSk7
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzUmFuZ2VWYWx1ZSwgb2Jq
ZWN0LnN1cHBvcnRzUmFuZ2VWYWx1ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6SWRlbnRpZmllckF0dHJpYnV0ZSwgb2JqZWN0LmlkZW50aWZpZXJBdHRyaWJ1dGUoKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpbmtSZWxWYWx1ZSwgb2JqZWN0LmxpbmtS
ZWxWYWx1ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q3VycmVudFN0YXRl
LCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5jdXJyZW50U3RhdGUoKSkpOwotICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpDdXJyZW50VmFsdWUsIG9iamVjdC5jdXJyZW50VmFsdWUoKSk7
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQ3VycmVudCwgb2JqZWN0
LnN1cHBvcnRzQ3VycmVudCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6S2V5
U2hvcnRjdXRzVmFsdWUsIG9iamVjdC5rZXlTaG9ydGN1dHNWYWx1ZSgpKTsKLSAgICBzZXRQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNTZXRTaXplLCBvYmplY3Quc3VwcG9ydHNTZXRT
aXplKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1BhdGgsIG9i
amVjdC5zdXBwb3J0c1BhdGgoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1
cHBvcnRzUG9zSW5TZXQsIG9iamVjdC5zdXBwb3J0c1Bvc0luU2V0KCkpOwotICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpTZXRTaXplLCBvYmplY3Quc2V0U2l6ZSgpKTsKLSAgICBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UG9zSW5TZXQsIG9iamVjdC5wb3NJblNldCgpKTsKLSAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBRHJvcHBpbmcsIG9iamVj
dC5zdXBwb3J0c0FSSUFEcm9wcGluZygpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6U3VwcG9ydHNBUklBRHJhZ2dpbmcsIG9iamVjdC5zdXBwb3J0c0FSSUFEcmFnZ2luZygpKTsK
LSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNBUklBR3JhYmJlZCwgb2JqZWN0Lmlz
QVJJQUdyYWJiZWQoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFEcm9w
RWZmZWN0cywgb2JqZWN0LmRldGVybWluZUFSSUFEcm9wRWZmZWN0cygpKTsKLSAgICBzZXRPYmpl
Y3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGl0bGVVSUVsZW1lbnQsIG9iamVjdC50aXRsZVVJ
RWxlbWVudCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RXhwb3Nlc1RpdGxl
VUlFbGVtZW50LCBvYmplY3QuZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkpOwotICAgIHNldE9iamVj
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWZXJ0aWNhbFNjcm9sbEJhciwgb2JqZWN0LnNjcm9s
bEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246OlZlcnRpY2FsKSk7Ci0gICAgc2V0T2JqZWN0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okhvcml6b250YWxTY3JvbGxCYXIsIG9iamVjdC5zY3Jv
bGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSk7Ci0gICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFSb2xlQXR0cmlidXRlLCBzdGF0aWNfY2FzdDxpbnQ+
KG9iamVjdC5hcmlhUm9sZUF0dHJpYnV0ZSgpKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkNvbXB1dGVkTGFiZWwsIG9iamVjdC5jb21wdXRlZExhYmVsKCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlclZhbHVlLCBvYmplY3QucGxhY2Vob2xk
ZXJWYWx1ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RXhwYW5kZWRUZXh0
VmFsdWUsIG9iamVjdC5leHBhbmRlZFRleHRWYWx1ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6U3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSwgb2JqZWN0LnN1cHBvcnRzRXhw
YW5kZWRUZXh0VmFsdWUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBv
cnRzUHJlc3NBY3Rpb24sIG9iamVjdC5zdXBwb3J0c1ByZXNzQWN0aW9uKCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDbGlja1BvaW50LCBvYmplY3QuY2xpY2tQb2ludCgpKTsK
LSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q29tcHV0ZWRSb2xlU3RyaW5nLCBvYmpl
Y3QuY29tcHV0ZWRSb2xlU3RyaW5nKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpJc1ZhbHVlQXV0b2ZpbGxlZCwgb2JqZWN0LmlzVmFsdWVBdXRvZmlsbGVkKCkpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUsIG9iamVj
dC5pc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OlZhbHVlQXV0b2ZpbGxCdXR0b25UeXBlLCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC52
YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OlVSTCwgb2JqZWN0LnVybCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
QWNjZXNzS2V5LCBvYmplY3QuYWNjZXNzS2V5KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpBY3Rpb25WZXJiLCBvYmplY3QuYWN0aW9uVmVyYigpKTsKLSAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6UmVhZE9ubHlWYWx1ZSwgb2JqZWN0LnJlYWRPbmx5VmFsdWUoKSk7
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkF1dG9Db21wbGV0ZVZhbHVlLCBvYmpl
Y3QuYXV0b0NvbXBsZXRlVmFsdWUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlNwZWFrQXMsIG9iamVjdC5zcGVha0FzUHJvcGVydHkoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OlN0cmluZ1ZhbHVlLCBvYmplY3Quc3RyaW5nVmFsdWUoKS5pc29sYXRlZENv
cHkoKSk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYXJldEJyb3dzaW5nRW5hYmxlZCwgb2JqZWN0
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpOwotI2VuZGlmCi0gICAgc2V0T2JqZWN0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OkZvY3VzYWJsZUFuY2VzdG9yLCBvYmplY3QuZm9jdXNhYmxlQW5jZXN0
b3IoKSk7Ci0gICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkVkaXRhYmxlQW5j
ZXN0b3IsIG9iamVjdC5lZGl0YWJsZUFuY2VzdG9yKCkpOwotICAgIHNldE9iamVjdFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpIaWdoZXN0RWRpdGFibGVBbmNlc3Rvciwgb2JqZWN0LmhpZ2hlc3RF
ZGl0YWJsZUFuY2VzdG9yKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpPcmll
bnRhdGlvbiwgc3RhdGljX2Nhc3Q8aW50PihvYmplY3Qub3JpZW50YXRpb24oKSkpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIaWVyYXJjaGljYWxMZXZlbCwgb2JqZWN0LmhpZXJh
cmNoaWNhbExldmVsKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMYW5ndWFn
ZSwgb2JqZWN0Lmxhbmd1YWdlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpD
YW5IYXZlU2VsZWN0ZWRDaGlsZHJlbiwgb2JqZWN0LmNhbkhhdmVTZWxlY3RlZENoaWxkcmVuKCkp
OwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIYXNBUklBVmFsdWVOb3csIG9iamVj
dC5oYXNBUklBVmFsdWVOb3coKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlRh
Z05hbWUsIG9iamVjdC50YWdOYW1lKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpTdXBwb3J0c0xpdmVSZWdpb24sIG9iamVjdC5zdXBwb3J0c0xpdmVSZWdpb24oKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzSW5zaWRlTGl2ZVJlZ2lvbiwgb2JqZWN0Lmlz
SW5zaWRlTGl2ZVJlZ2lvbigpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGl2
ZVJlZ2lvblN0YXR1cywgb2JqZWN0LmxpdmVSZWdpb25TdGF0dXMoKSk7Ci0gICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdpb25SZWxldmFudCwgb2JqZWN0LmxpdmVSZWdpb25S
ZWxldmFudCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGl2ZVJlZ2lvbkF0
b21pYywgb2JqZWN0LmxpdmVSZWdpb25BdG9taWMoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OklzQnVzeSwgb2JqZWN0LmlzQnVzeSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6SXNJbmxpbmVUZXh0LCBvYmplY3QuaXNJbmxpbmVUZXh0KCkpOwotICAgIGlm
IChvYmplY3QuaXNUZXh0Q29udHJvbCgpKQotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6VGV4dExlbmd0aCwgb2JqZWN0LnRleHRMZW5ndGgoKSk7Ci0KLSAgICBBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbjsKLSAgICBvYmplY3Quc2VsZWN0ZWRD
aGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKLSAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRDaGlsZHJlbiwgc2VsZWN0ZWRDaGlsZHJlbik7Ci0KLSAg
ICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdmlzaWJsZUNoaWxkcmVuOwotICAgIG9iamVj
dC52aXNpYmxlQ2hpbGRyZW4odmlzaWJsZUNoaWxkcmVuKTsKLSAgICBzZXRPYmplY3RWZWN0b3JQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmlzaWJsZUNoaWxkcmVuLCB2aXNpYmxlQ2hpbGRyZW4p
OwotCi0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYkNoaWxkcmVuOwotICAgIG9i
amVjdC50YWJDaGlsZHJlbih0YWJDaGlsZHJlbik7Ci0gICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OlRhYkNoaWxkcmVuLCB0YWJDaGlsZHJlbik7Ci0KLSAgICBBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYVRyZWVSb3dzOwotICAgIG9iamVjdC5hcmlhVHJl
ZVJvd3MoYXJpYVRyZWVSb3dzKTsKLSAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6QVJJQVRyZWVSb3dzLCBhcmlhVHJlZVJvd3MpOwotCi0gICAgQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3M7Ci0gICAgb2JqZWN0LmFy
aWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MoYXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyk7Ci0gICAg
c2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFUcmVlSXRlbURpc2Ns
b3NlZFJvd3MsIGFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MpOwotCi0gICAgQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGFyaWFUcmVlSXRlbUNvbnRlbnQ7Ci0gICAgb2JqZWN0LmFyaWFUcmVl
SXRlbUNvbnRlbnQoYXJpYVRyZWVJdGVtQ29udGVudCk7Ci0gICAgc2V0T2JqZWN0VmVjdG9yUHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFUcmVlSXRlbUNvbnRlbnQsIGFyaWFUcmVlSXRlbUNv
bnRlbnQpOwotCi0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtlZFVJRWxlbWVu
dHM7Ci0gICAgb2JqZWN0LmxpbmtlZFVJRWxlbWVudHMobGlua2VkVUlFbGVtZW50cyk7Ci0gICAg
c2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpbmtlZFVJRWxlbWVudHMs
IGxpbmtlZFVJRWxlbWVudHMpOwotCi0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFy
aWFDb250cm9sc0VsZW1lbnRzOwotICAgIG9iamVjdC5hcmlhQ29udHJvbHNFbGVtZW50cyhhcmlh
Q29udHJvbHNFbGVtZW50cyk7Ci0gICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkFSSUFDb250cm9sc0VsZW1lbnRzLCBhcmlhQ29udHJvbHNFbGVtZW50cyk7Ci0KLSAg
ICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYURldGFpbHNFbGVtZW50czsKLSAgICBv
YmplY3QuYXJpYURldGFpbHNFbGVtZW50cyhhcmlhRGV0YWlsc0VsZW1lbnRzKTsKLSAgICBzZXRP
YmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQURldGFpbHNFbGVtZW50cywg
YXJpYURldGFpbHNFbGVtZW50cyk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzOwotICAgIG9iamVjdC5hcmlhRXJyb3JNZXNzYWdlRWxl
bWVudHMoYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKTsKLSAgICBzZXRPYmplY3RWZWN0b3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQUVycm9yTWVzc2FnZUVsZW1lbnRzLCBhcmlhRXJyb3JN
ZXNzYWdlRWxlbWVudHMpOwotCi0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFG
bG93VG9FbGVtZW50czsKLSAgICBvYmplY3QuYXJpYUZsb3dUb0VsZW1lbnRzKGFyaWFGbG93VG9F
bGVtZW50cyk7Ci0gICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFS
SUFGbG93VG9FbGVtZW50cywgYXJpYUZsb3dUb0VsZW1lbnRzKTsKLQotICAgIEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBhcmlhT3duc0VsZW1lbnRzOwotICAgIG9iamVjdC5hcmlhT3duc0Vs
ZW1lbnRzKGFyaWFPd25zRWxlbWVudHMpOwotICAgIHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpBUklBT3duc0VsZW1lbnRzLCBhcmlhT3duc0VsZW1lbnRzKTsKLQotICAg
IFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4gdGV4dHM7Ci0gICAgb2JqZWN0LmFjY2Vzc2liaWxp
dHlUZXh0KHRleHRzKTsKLSAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZVRleHQ+
IGlzb2xhdGVkVGV4dHM7Ci0gICAgaXNvbGF0ZWRUZXh0cy5yZXNlcnZlQ2FwYWNpdHkodGV4dHMu
c2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8gdGV4dCA6IHRleHRzKSB7Ci0gICAgICAgIEFjY2Vzc2li
aWxpdHlJc29sYXRlZFRyZWVUZXh0IGlzb2xhdGVkVGV4dDsKLSAgICAgICAgaXNvbGF0ZWRUZXh0
LnRleHQgPSB0ZXh0LnRleHQ7Ci0gICAgICAgIGlzb2xhdGVkVGV4dC50ZXh0U291cmNlID0gdGV4
dC50ZXh0U291cmNlOwotICAgICAgICBmb3IgKGF1dG8gb2JqZWN0IDogdGV4dC50ZXh0RWxlbWVu
dHMpCi0gICAgICAgICAgICBpc29sYXRlZFRleHQudGV4dEVsZW1lbnRzLmFwcGVuZChvYmplY3Qt
Pm9iamVjdElEKCkpOwotICAgICAgICBpc29sYXRlZFRleHRzLnVuY2hlY2tlZEFwcGVuZChpc29s
YXRlZFRleHQpOwotICAgIH0KLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QWNjZXNz
aWJpbGl0eVRleHQsIGlzb2xhdGVkVGV4dHMpOwotCi0gICAgLy8gU3BpbiBidXR0b24gc3VwcG9y
dC4KLSAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RGVjcmVtZW50QnV0dG9u
LCBvYmplY3QuZGVjcmVtZW50QnV0dG9uKCkpOwotICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpJbmNyZW1lbnRCdXR0b24sIG9iamVjdC5pbmNyZW1lbnRCdXR0b24oKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzSW5jcmVtZW50b3IsIG9iamVjdC5pc0lu
Y3JlbWVudG9yKCkpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gY2xhc3NMaXN0OwotICAgIG9iamVj
dC5jbGFzc0xpc3QoY2xhc3NMaXN0KTsKLSAgICBTdHJpbmcgY29tYmluZWRDbGFzc0xpc3Q7Ci0g
ICAgZm9yIChhdXRvIGl0ID0gY2xhc3NMaXN0LmJlZ2luKCksIGVuZCA9IGNsYXNzTGlzdC5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbWJpbmVkQ2xhc3NMaXN0LmFwcGVuZCgq
aXQpOwotICAgICAgICBjb21iaW5lZENsYXNzTGlzdC5hcHBlbmQoIiAiKTsKLSAgICB9Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNsYXNzTGlzdCwgY29tYmluZWRDbGFzc0xpc3Qp
OwotICAgIAotICAgIGludCByLCBnLCBiOwotICAgIG9iamVjdC5jb2xvclZhbHVlKHIsIGcsIGIp
OwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlLCBDb2xvcihyLCBn
LCBiKSk7Ci0gICAgCi0gICAgaWYgKGJvb2wgaXNNYXRoRWxlbWVudCA9IG9iamVjdC5pc01hdGhF
bGVtZW50KCkpIHsKLSAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aEVs
ZW1lbnQsIGlzTWF0aEVsZW1lbnQpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6SXNBbm9ueW1vdXNNYXRoT3BlcmF0b3IsIG9iamVjdC5pc0Fub255bW91c01hdGhPcGVyYXRv
cigpKTsKLSAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aEZyYWN0aW9u
LCBvYmplY3QuaXNNYXRoRnJhY3Rpb24oKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc01hdGhGZW5jZWQsIG9iamVjdC5pc01hdGhGZW5jZWQoKSk7Ci0gICAgICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCwgb2Jq
ZWN0LmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNNYXRoUm93LCBvYmplY3QuaXNNYXRoUm93KCkpOwotICAgICAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVW5kZXJPdmVyLCBvYmplY3QuaXNNYXRo
VW5kZXJPdmVyKCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRo
Um9vdCwgb2JqZWN0LmlzTWF0aFJvb3QoKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc01hdGhTcXVhcmVSb290LCBvYmplY3QuaXNNYXRoU3F1YXJlUm9vdCgpKTsKLSAg
ICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFRleHQsIG9iamVjdC5pc01h
dGhUZXh0KCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoTnVt
YmVyLCBvYmplY3QuaXNNYXRoTnVtYmVyKCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6SXNNYXRoT3BlcmF0b3IsIG9iamVjdC5pc01hdGhPcGVyYXRvcigpKTsKLSAgICAg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aEZlbmNlT3BlcmF0b3IsIG9iamVj
dC5pc01hdGhGZW5jZU9wZXJhdG9yKCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6SXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IsIG9iamVjdC5pc01hdGhTZXBhcmF0b3JPcGVy
YXRvcigpKTsKLSAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aElkZW50
aWZpZXIsIG9iamVjdC5pc01hdGhJZGVudGlmaWVyKCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNNYXRoVGFibGUsIG9iamVjdC5pc01hdGhUYWJsZSgpKTsKLSAgICAg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFRhYmxlUm93LCBvYmplY3QuaXNN
YXRoVGFibGVSb3coKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01h
dGhUYWJsZUNlbGwsIG9iamVjdC5pc01hdGhUYWJsZUNlbGwoKSk7Ci0gICAgICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhNdWx0aXNjcmlwdCwgb2JqZWN0LmlzTWF0aE11bHRp
c2NyaXB0KCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVG9r
ZW4sIG9iamVjdC5pc01hdGhUb2tlbigpKTsKLSAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6Ok1hdGhGZW5jZWRPcGVuU3RyaW5nLCBvYmplY3QubWF0aEZlbmNlZE9wZW5TdHJpbmco
KSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoRmVuY2VkQ2xvc2VT
dHJpbmcsIG9iamVjdC5tYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKSk7Ci0gICAgICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoTGluZVRoaWNrbmVzcywgb2JqZWN0Lm1hdGhMaW5lVGhp
Y2tuZXNzKCkpOwotICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF0
aFJhZGljYW5kT2JqZWN0LCBvYmplY3QubWF0aFJhZGljYW5kT2JqZWN0KCkpOwotICAgICAgICBz
ZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF0aFJvb3RJbmRleE9iamVjdCwgb2Jq
ZWN0Lm1hdGhSb290SW5kZXhPYmplY3QoKSk7Ci0gICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpNYXRoVW5kZXJPYmplY3QsIG9iamVjdC5tYXRoVW5kZXJPYmplY3QoKSk7
Ci0gICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoT3Zlck9iamVj
dCwgb2JqZWN0Lm1hdGhPdmVyT2JqZWN0KCkpOwotICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6TWF0aE51bWVyYXRvck9iamVjdCwgb2JqZWN0Lm1hdGhOdW1lcmF0b3JP
YmplY3QoKSk7Ci0gICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRo
RGVub21pbmF0b3JPYmplY3QsIG9iamVjdC5tYXRoRGVub21pbmF0b3JPYmplY3QoKSk7Ci0gICAg
ICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoQmFzZU9iamVjdCwgb2Jq
ZWN0Lm1hdGhCYXNlT2JqZWN0KCkpOwotICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6TWF0aFN1YnNjcmlwdE9iamVjdCwgb2JqZWN0Lm1hdGhTdWJzY3JpcHRPYmplY3Qo
KSk7Ci0gICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoU3VwZXJz
Y3JpcHRPYmplY3QsIG9iamVjdC5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKSk7Ci0gICAgICAgIHNl
dE1hdGhzY3JpcHRzKEFYUHJvcGVydHlOYW1lOjpNYXRoUHJlc2NyaXB0cywgb2JqZWN0KTsKLSAg
ICAgICAgc2V0TWF0aHNjcmlwdHMoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhQb3N0c2NyaXB0cywgb2Jq
ZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzUm9vdCkgewotICAgICAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCwgb2JqZWN0
LnByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goKSk7Ci0gICAgICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpTZXNzaW9uSUQsIG9iamVjdC5zZXNzaW9uSUQoKSk7Ci0gICAgICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpEb2N1bWVudFVSSSwgb2JqZWN0LmRvY3VtZW50
VVJJKCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RG9jdW1lbnRFbmNv
ZGluZywgb2JqZWN0LmRvY3VtZW50RW5jb2RpbmcoKSk7Ci0gICAgfQotfQotCi12b2lkIEFYSXNv
bGF0ZWRPYmplY3Q6OnNldE1hdGhzY3JpcHRzKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
QVhDb3JlT2JqZWN0JiBvYmplY3QpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlw
dFBhaXJzIHBhaXJzOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gQVhQcm9wZXJ0eU5hbWU6Ok1h
dGhQcmVzY3JpcHRzKQotICAgICAgICBvYmplY3QubWF0aFByZXNjcmlwdHMocGFpcnMpOwotICAg
IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBBWFByb3BlcnR5TmFtZTo6TWF0aFBvc3RzY3JpcHRz
KQotICAgICAgICBvYmplY3QubWF0aFBvc3RzY3JpcHRzKHBhaXJzKTsKLSAgICAKLSAgICBzaXpl
X3QgbWF0aFNpemUgPSBwYWlycy5zaXplKCk7Ci0gICAgaWYgKCFtYXRoU2l6ZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11
bHRpc2NyaXB0UGFpcj4gaWRQYWlyczsKLSAgICBpZFBhaXJzLnJlc2VydmVDYXBhY2l0eShtYXRo
U2l6ZSk7Ci0gICAgZm9yIChhdXRvIG1hdGhQYWlyIDogcGFpcnMpIHsKLSAgICAgICAgQWNjZXNz
aWJpbGl0eUlzb2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXIgaWRQYWlyOwotICAgICAgICBp
ZiAobWF0aFBhaXIuZmlyc3QpCi0gICAgICAgICAgICBpZFBhaXIuZmlyc3QgPSBtYXRoUGFpci5m
aXJzdC0+b2JqZWN0SUQoKTsKLSAgICAgICAgaWYgKG1hdGhQYWlyLnNlY29uZCkKLSAgICAgICAg
ICAgIGlkUGFpci5zZWNvbmQgPSBtYXRoUGFpci5zZWNvbmQtPm9iamVjdElEKCk7Ci0gICAgICAg
IGlkUGFpcnMudW5jaGVja2VkQXBwZW5kKGlkUGFpcik7Ci0gICAgfQotICAgIHNldFByb3BlcnR5
KHByb3BlcnR5TmFtZSwgaWRQYWlycyk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0
T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBBWENvcmVPYmplY3Qq
IG9iamVjdCkKLXsKLSAgICBpZiAob2JqZWN0KQotICAgICAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0
eU5hbWUsIG9iamVjdC0+b2JqZWN0SUQoKSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRQcm9wZXJ0
eShwcm9wZXJ0eU5hbWUsIG51bGxwdHIsIHRydWUpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikKLXsKLSAgICBzaXplX3QgY2hp
bGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIGlmICghY2hpbGRyZW5TaXplKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgVmVjdG9yPEFYSUQ+IGNoaWxkcmVuVmVjdG9yOwotICAg
IGNoaWxkcmVuVmVjdG9yLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlblNpemUpOwotICAgIGZvciAo
YXV0byBjaGlsZE9iamVjdCA6IGNoaWxkcmVuKQotICAgICAgICBjaGlsZHJlblZlY3Rvci51bmNo
ZWNrZWRBcHBlbmQoY2hpbGRPYmplY3QtPm9iamVjdElEKCkpOwotICAgIHNldFByb3BlcnR5KHBy
b3BlcnR5TmFtZSwgY2hpbGRyZW5WZWN0b3IpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OnNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgQXR0cmlidXRlVmFsdWVW
YXJpYW50JiYgdmFsdWUsIGJvb2wgc2hvdWxkUmVtb3ZlKQotewotICAgIEFTU0VSVCghbV9pbml0
aWFsaXplZCk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChzaG91bGRS
ZW1vdmUpCi0gICAgICAgIG1fYXR0cmlidXRlTWFwLnJlbW92ZShwcm9wZXJ0eU5hbWUpOwotICAg
IGVsc2UKLSAgICAgICAgbV9hdHRyaWJ1dGVNYXAuc2V0KHByb3BlcnR5TmFtZSwgdmFsdWUpOwot
fQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFwcGVuZENoaWxkKEFYSUQgYXhJRCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fY2hpbGRyZW5JRHMuYXBwZW5kKGF4SUQp
OwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFBhcmVudChBWElEIHBhcmVudCkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fcGFyZW50ID0gcGFyZW50OwotfQot
Ci12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmRldGFjaChBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5
cGUsIEFYT2JqZWN0Q2FjaGUqKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBjaGlsZElEIDogbV9jaGlsZHJlbklEcykKLSAgICAgICAgdHJlZSgp
LT5ub2RlRm9ySUQoY2hpbGRJRCktPmRldGFjaEZyb21QYXJlbnQoKTsKLQotICAgIG1fY2hpbGRy
ZW5JRHMuY2xlYXIoKTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0RldGFjaGVkKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6ZGV0YWNoRnJvbVBhcmVudCgpCi17Ci0gICAgbV9w
YXJlbnQgPSBJbnZhbGlkQVhJRDsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpkaXNjb25u
ZWN0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHRyZWUoKS0+YXhPYmpl
Y3RDYWNoZSgpLT5kZXRhY2hXcmFwcGVyKHRoaXMsIEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlw
ZTo6RWxlbWVudERlc3Ryb3llZCk7Ci0gICAgZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50
VHlwZTo6RWxlbWVudERlc3Ryb3llZCk7Ci0gICAgc2V0T2JqZWN0SUQoSW52YWxpZEFYSUQpOwot
fQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRU
cmVlSUQgdHJlZUlkZW50aWZpZXIpCi17Ci0gICAgbV90cmVlSWRlbnRpZmllciA9IHRyZWVJZGVu
dGlmaWVyOwotICAgIGlmIChhdXRvIHRyZWUgPSBBWElzb2xhdGVkVHJlZTo6dHJlZUZvcklEKG1f
dHJlZUlkZW50aWZpZXIpKQotICAgICAgICBtX2NhY2hlZFRyZWUgPSB0cmVlOwotfQotCi1jb25z
dCBBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgQVhJc29sYXRlZE9i
amVjdDo6Y2hpbGRyZW4oYm9vbCkKLXsKLSAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7Ci0gICAg
ICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKLSAgICAgICAgbV9jaGlsZHJlbi5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fY2hpbGRyZW5JRHMuc2l6ZSgpKTsKLSAgICAgICAgYXV0byB0cmVlID0gdGhp
cy0+dHJlZSgpOwotICAgICAgICBmb3IgKGF1dG8gY2hpbGRJRCA6IG1fY2hpbGRyZW5JRHMpCi0g
ICAgICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZCh0cmVlLT5ub2RlRm9ySUQoY2hp
bGRJRCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9jaGlsZHJlbjsKLX0KLQotYm9vbCBBWElzb2xh
dGVkT2JqZWN0Ojppc0RldGFjaGVkRnJvbVBhcmVudCgpCi17Ci0gICAgaWYgKHBhcmVudCgpICE9
IEludmFsaWRBWElEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVjayB3aGV0
aGVyIHRoaXMgaXMgdGhlIHJvb3Qgbm9kZSwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgcmV0dXJu
IGZhbHNlLgotICAgIGlmIChhdXRvIHJvb3QgPSB0cmVlKCktPnJvb3ROb2RlKCkpCi0gICAgICAg
IHJldHVybiByb290LT5vYmplY3RJRCgpICE9IG1faWQ7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlUZXh0KFZlY3RvcjxBY2Nlc3Np
YmlsaXR5VGV4dD4mIHRleHRzKSBjb25zdAotewotICAgIGF1dG8gaXNvbGF0ZWRUZXh0cyA9IHZl
Y3RvckF0dHJpYnV0ZVZhbHVlPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVUZXh0PihBWFByb3Bl
cnR5TmFtZTo6QWNjZXNzaWJpbGl0eVRleHQpOwotICAgIGZvciAoYXV0byBpc29sYXRlZFRleHQg
OiBpc29sYXRlZFRleHRzKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlUZXh0IHRleHQoaXNvbGF0
ZWRUZXh0LnRleHQsIGlzb2xhdGVkVGV4dC50ZXh0U291cmNlKTsKLSAgICAgICAgZm9yIChhdXRv
IGF4SUQgOiBpc29sYXRlZFRleHQudGV4dEVsZW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoYXV0
byBvYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJRChheElEKSkKLSAgICAgICAgICAgICAgICB0ZXh0
LnRleHRFbGVtZW50cy5hcHBlbmQob2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICB0ZXh0cy5h
cHBlbmQodGV4dCk7Ci0gICAgfQotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNsYXNzTGlz
dChWZWN0b3I8U3RyaW5nPiYgbGlzdCkgY29uc3QKLXsKLSAgICBTdHJpbmcgY2xhc3NMaXN0ID0g
c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNsYXNzTGlzdCk7Ci0gICAgbGlz
dC5hcHBlbmRWZWN0b3IoY2xhc3NMaXN0LnNwbGl0KCIgIikpOwotfQotCi11aW50NjRfdCBBWElz
b2xhdGVkT2JqZWN0OjpzZXNzaW9uSUQoKSBjb25zdAotewotICAgIGlmIChhdXRvIHJvb3QgPSB0
cmVlKCktPnJvb3ROb2RlKCkpCi0gICAgICAgIHJldHVybiByb290LT51aW50NjRBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6U2Vzc2lvbklEKTsKLSAgICByZXR1cm4gMDsKLX0KLQotU3Ry
aW5nIEFYSXNvbGF0ZWRPYmplY3Q6OmRvY3VtZW50VVJJKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0
byByb290ID0gdHJlZSgpLT5yb290Tm9kZSgpKQotICAgICAgICByZXR1cm4gcm9vdC0+c3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRvY3VtZW50VVJJKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6cHJldmVudEtleWJvYXJkRE9N
RXZlbnREaXNwYXRjaCgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gcm9vdCA9IHRyZWUoKS0+cm9v
dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHJvb3QtPmJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1TdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6ZG9jdW1lbnRFbmNvZGluZygpIGNv
bnN0Ci17Ci0gICAgaWYgKGF1dG8gcm9vdCA9IHRyZWUoKS0+cm9vdE5vZGUoKSkKLSAgICAgICAg
cmV0dXJuIHJvb3QtPnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEb2N1bWVu
dEVuY29kaW5nKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9i
amVjdDo6aW5zZXJ0TWF0aFBhaXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0
aE11bHRpc2NyaXB0UGFpcj4mIGlzb2xhdGVkUGFpcnMsIEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlz
Y3JpcHRQYWlycyYgcGFpcnMpCi17Ci0gICAgZm9yIChhdXRvIHBhaXIgOiBpc29sYXRlZFBhaXJz
KSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlyIHByZXNjcmlwdFBh
aXI7Ci0gICAgICAgIGlmIChhdXRvKiBjb3JlT2JqZWN0ID0gdHJlZSgpLT5ub2RlRm9ySUQocGFp
ci5maXJzdCkuZ2V0KCkpCi0gICAgICAgICAgICBwcmVzY3JpcHRQYWlyLmZpcnN0ID0gY29yZU9i
amVjdDsKLSAgICAgICAgaWYgKGF1dG8qIGNvcmVPYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJRChw
YWlyLnNlY29uZCkuZ2V0KCkpCi0gICAgICAgICAgICBwcmVzY3JpcHRQYWlyLnNlY29uZCA9IGNv
cmVPYmplY3Q7Ci0gICAgICAgIHBhaXJzLmFwcGVuZChwcmVzY3JpcHRQYWlyKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6bWF0aFByZXNjcmlwdHMoQWNjZXNzaWJpbGl0eU1h
dGhNdWx0aXNjcmlwdFBhaXJzJiBwYWlycykKLXsKLSAgICBhdXRvIGlzb2xhdGVkUGFpcnMgPSB2
ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11bHRpc2Ny
aXB0UGFpcj4oQVhQcm9wZXJ0eU5hbWU6Ok1hdGhQcmVzY3JpcHRzKTsKLSAgICBpbnNlcnRNYXRo
UGFpcnMoaXNvbGF0ZWRQYWlycywgcGFpcnMpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
Om1hdGhQb3N0c2NyaXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmIHBhaXJz
KQotewotICAgIGF1dG8gaXNvbGF0ZWRQYWlycyA9IHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFjY2Vz
c2liaWxpdHlJc29sYXRlZFRyZWVNYXRoTXVsdGlzY3JpcHRQYWlyPihBWFByb3BlcnR5TmFtZTo6
TWF0aFBvc3RzY3JpcHRzKTsKLSAgICBpbnNlcnRNYXRoUGFpcnMoaXNvbGF0ZWRQYWlycywgcGFp
cnMpOwotfQotCi1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmZvY3VzZWRVSUVsZW1l
bnQoKSBjb25zdAotewotICAgIGlmIChhdXRvIGZvY3VzZWRFbGVtZW50ID0gdHJlZSgpLT5mb2N1
c2VkVUlFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmb2N1c2VkRWxlbWVudC5nZXQoKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLSAgICAKLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVj
dDo6cGFyZW50T2JqZWN0VW5pZ25vcmVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJlZSgpLT5u
b2RlRm9ySUQocGFyZW50KCkpLmdldCgpOwotfQotCi1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRP
YmplY3Q6OnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17
Ci0gICAgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKG9yaWVudGF0aW9uID09IEFjY2Vzc2li
aWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwgPyBBWFByb3BlcnR5TmFtZTo6VmVydGljYWxTY3Jv
bGxCYXIgOiBBWFByb3BlcnR5TmFtZTo6SG9yaXpvbnRhbFNjcm9sbEJhcik7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnBlcmZvcm1GdW5jdGlvbk9u
TWFpblRocmVhZChVJiYgbGFtYmRhKQotewotICAgIEFjY2Vzc2liaWxpdHk6OnBlcmZvcm1GdW5j
dGlvbk9uTWFpblRocmVhZChbJmxhbWJkYSwgdGhpc10gKCkgewotICAgICAgICBpZiAoYXV0byog
b2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCi0gICAgICAgICAgICBsYW1iZGEob2JqZWN0
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRBUklBR3JhYmJlZChi
b29sIHZhbHVlKQotewotICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShB
WENvcmVPYmplY3QqIG9iamVjdCkgewotICAgICAgICBvYmplY3QtPnNldEFSSUFHcmFiYmVkKHZh
bHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRJc0V4cGFuZGVk
KGJvb2wgdmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVd
KEFYQ29yZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0SXNFeHBhbmRlZCh2
YWx1ZSk7Ci0gICAgfSk7Ci19Ci12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFZhbHVlKGZsb2F0
IHZhbHVlKQotewotICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShBWENv
cmVPYmplY3QqIG9iamVjdCkgewotICAgICAgICBvYmplY3QtPnNldFZhbHVlKHZhbHVlKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRTZWxlY3RlZChib29sIHZhbHVl
KQotewotICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShBWENvcmVPYmpl
Y3QqIG9iamVjdCkgewotICAgICAgICBvYmplY3QtPnNldFNlbGVjdGVkKHZhbHVlKTsKLSAgICB9
KTsKLX0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgdmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhy
ZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0
U2VsZWN0ZWRSb3dzKHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0
OjpzZXRGb2N1c2VkKGJvb2wgdmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhy
ZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0
Rm9jdXNlZCh2YWx1ZSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0
U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9u
T25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9i
amVjdC0+c2V0U2VsZWN0ZWRUZXh0KHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgdmFs
dWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9i
amVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodmFs
dWUpOwotICAgIH0pOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFs
dWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0VmFsdWUodmFs
dWUpOwotICAgIH0pOwotfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1Nf
RkFNSUxZKQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChi
b29sIHZhbHVlKQotewotICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShB
WENvcmVPYmplY3QqIG9iamVjdCkgewotICAgICAgICBvYmplY3QtPnNldENhcmV0QnJvd3NpbmdF
bmFibGVkKHZhbHVlKTsKLSAgICB9KTsKLX0KLSNlbmRpZgotCi12b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OnNldFByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goYm9vbCB2YWx1ZSkKLXsKLSAg
ICBwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoWyZ2YWx1ZV0oQVhDb3JlT2JqZWN0KiBvYmpl
Y3QpIHsKLSAgICAgICAgb2JqZWN0LT5zZXRQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNo
KHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojpjb2xvclZhbHVl
KGludCYgciwgaW50JiBnLCBpbnQmIGIpIGNvbnN0Ci17Ci0gICAgYXV0byBjb2xvciA9IGNvbG9y
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpOwotICAgIHIgPSBjb2xv
ci5yZWQoKTsKLSAgICBnID0gY29sb3IuZ3JlZW4oKTsKLSAgICBiID0gY29sb3IuYmx1ZSgpOwot
fQotCi1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbGF0aXZlRnJhbWUo
KS5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZvciAoY29u
c3QgYXV0byYgY2hpbGRJRCA6IG1fY2hpbGRyZW5JRHMpIHsKLSAgICAgICAgYXV0byBjaGlsZCA9
IHRyZWUoKS0+bm9kZUZvcklEKGNoaWxkSUQpOwotICAgICAgICBBU1NFUlQoY2hpbGQpOwotICAg
ICAgICBpZiAoY2hpbGQgJiYgY2hpbGQtPnJlbGF0aXZlRnJhbWUoKS5jb250YWlucyhwb2ludCkp
Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KHBvaW50KTsK
LSAgICB9Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8QVhJc29sYXRlZE9iamVjdCo+KHRoaXMpOwot
fQotCi1BWElzb2xhdGVkVHJlZSogQVhJc29sYXRlZE9iamVjdDo6dHJlZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY2FjaGVkVHJlZS5nZXQoKTsKLX0KLQotSW50UG9pbnQgQVhJc29sYXRlZE9i
amVjdDo6aW50UG9pbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
IGNvbnN0Ci17Ci0gICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5h
bWUpOwotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoSW50UG9p
bnQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRv
JikgeyByZXR1cm4gSW50UG9pbnQoKTsgfQotICAgICk7Ci19Ci0KLUFYQ29yZU9iamVjdCogQVhJ
c29sYXRlZE9iamVjdDo6b2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKSBjb25zdAotewotICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJv
cGVydHlOYW1lKTsKLSAgICBBWElEIG5vZGVJRCA9IFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAg
ICAgIFtdIChBWElEJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAg
ICBbXSAoYXV0byYpIHsgcmV0dXJuIEludmFsaWRBWElEOyB9Ci0gICAgKTsKLSAgICAKLSAgICBy
ZXR1cm4gdHJlZSgpLT5ub2RlRm9ySUQobm9kZUlEKS5nZXQoKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLVQgQVhJc29sYXRlZE9iamVjdDo6cmVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1
dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUs
Ci0gICAgICAgIFtdIChUJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAg
ICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIFQgeyB9OyB9Ci0gICAgKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLVZlY3RvcjxUPiBBWElzb2xhdGVkT2JqZWN0Ojp2ZWN0b3JBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Ci17Ci0gICAgYXV0byB2YWx1
ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoVmVjdG9yPFQ+JiB0eXBlZFZhbHVlKSB7IHJldHVy
biB0eXBlZFZhbHVlOyB9LAotICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIFZlY3RvcjxUPigp
OyB9Ci0gICAgKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU9wdGlvblNldDxUPiBBWElz
b2xhdGVkT2JqZWN0OjpvcHRpb25TZXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpIGNvbnN0Ci17Ci0gICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChw
cm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBb
XSAoVCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1
dG8mKSB7IHJldHVybiBPcHRpb25TZXQ8VD4oKTsgfQotICAgICk7Ci19Ci0KLXVpbnQ2NF90IEFY
SXNvbGF0ZWRPYmplY3Q6OnVpbnQ2NEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkgY29uc3QKLXsKLSAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHBy
b3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtd
ICh1aW50NjRfdCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAg
W10gKGF1dG8mKSB7IHJldHVybiAwOyB9Ci0gICAgKTsKLX0KLQotVVJMIEFYSXNvbGF0ZWRPYmpl
Y3Q6OnVybEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QK
LXsKLSAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7Ci0g
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChVUkwmIHR5cGVkVmFs
dWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4g
VVJMKCk7IH0KLSAgICApOwotfQotCi1Db2xvciBBWElzb2xhdGVkT2JqZWN0Ojpjb2xvckF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgICBhdXRv
IHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChDb2xvciYgdHlwZWRWYWx1ZSkgeyByZXR1
cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBDb2xvcigpOyB9
Ci0gICAgKTsKLX0KLQotZmxvYXQgQVhJc29sYXRlZE9iamVjdDo6ZmxvYXRBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Ci17Ci0gICAgYXV0byB2YWx1ZSA9
IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKHZhbHVlLAotICAgICAgICBbXSAoZmxvYXQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVk
VmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsgfQotICAgICk7Ci19Ci0K
LWRvdWJsZSBBWElzb2xhdGVkT2JqZWN0Ojpkb3VibGVBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Ci17Ci0gICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRl
TWFwLmdldChwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAot
ICAgICAgICBbXSAoZG91YmxlJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAot
ICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KLSAgICApOwotfQotCi11bnNpZ25lZCBB
WElzb2xhdGVkT2JqZWN0Ojp1bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0
KHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAg
IFtdICh1bnNpZ25lZCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAg
ICAgW10gKGF1dG8mKSB7IHJldHVybiAwOyB9Ci0gICAgKTsKLX0KLQotYm9vbCBBWElzb2xhdGVk
T2JqZWN0Ojpib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBj
b25zdAotewotICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1l
KTsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKGJvb2wmIHR5
cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICApOwotfQotCi1jb25zdCBTdHJpbmcgQVhJc29sYXRlZE9iamVj
dDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25z
dAotewotICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKFN0cmluZyYgdHlw
ZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJl
dHVybiBlbXB0eVN0cmluZygpOyB9Ci0gICAgKTsKLX0KLQotaW50IEFYSXNvbGF0ZWRPYmplY3Q6
OmludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKLXsK
LSAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7Ci0gICAg
cmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChpbnQmIHR5cGVkVmFsdWUp
IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsg
fQotICAgICk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6ZmlsbENoaWxkcmVuVmVjdG9y
Rm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdAotewotICAgIFZlY3RvcjxBWElEPiBjaGlsZElE
cyA9IHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFYSUQ+KHByb3BlcnR5TmFtZSk7Ci0gICAgY2hpbGRy
ZW4ucmVzZXJ2ZUNhcGFjaXR5KGNoaWxkSURzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvIGNoaWxk
SUQgOiBjaGlsZElEcykgewotICAgICAgICBpZiAoYXV0byBvYmplY3QgPSB0cmVlKCktPm5vZGVG
b3JJRChjaGlsZElEKSkKLSAgICAgICAgICAgIGNoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChvYmpl
Y3QpOwotICAgIH0KLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojp1cGRhdGVCYWNraW5nU3Rv
cmUoKQotewotICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb24gZWl0aGVyIHRoZSBt
YWluIG9yIHRoZSBBWCB0aHJlYWRzLgotICAgIC8vIEl0IGNhbiBiZSBjYWxsZWQgaW4gdGhlIG1h
aW4gdGhyZWFkIGZyb20gW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxp
dHlGb2N1c2VkVUlFbGVtZW50XS4KLSAgICAvLyBVcGRhdGUgdGhlIElzb2xhdGVkVHJlZSBvbmx5
IGlmIGl0IGlzIGNhbGxlZCBvbiB0aGUgQVggdGhyZWFkLgotICAgIGlmICghaXNNYWluVGhyZWFk
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8gdHJlZSA9IHRoaXMtPnRyZWUoKSkKLSAgICAgICAgICAg
IHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5nZXMoKTsKLSAgICB9Ci19Ci0KLVZlY3RvcjxSZWZQdHI8
UmFuZ2U+PiBBWElzb2xhdGVkT2JqZWN0OjpmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2Vh
cmNoVGV4dENyaXRlcmlhIGNvbnN0JiBjcml0ZXJpYSkgY29uc3QKLXsKLSAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxSZWZQdHI8UmFu
Z2U+Pj4oWyZjcml0ZXJpYSwgdGhpc10gKCkgLT4gVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHsKLSAg
ICAgICAgaWYgKGF1dG8qIG9iamVjdCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdC0+ZmluZFRleHRSYW5nZXMoY3JpdGVyaWEpOwotICAgICAgICByZXR1
cm4gVmVjdG9yPFJlZlB0cjxSYW5nZT4+KCk7Ci0gICAgfSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+
IEFYSXNvbGF0ZWRPYmplY3Q6OnBlcmZvcm1UZXh0T3BlcmF0aW9uKEFjY2Vzc2liaWxpdHlUZXh0
T3BlcmF0aW9uIGNvbnN0JiB0ZXh0T3BlcmF0aW9uKQotewotICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9yPFN0cmluZz4+KFsmdGV4dE9w
ZXJhdGlvbiwgdGhpc10gKCkgLT4gVmVjdG9yPFN0cmluZz4gewotICAgICAgICBpZiAoYXV0byog
b2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0
LT5wZXJmb3JtVGV4dE9wZXJhdGlvbih0ZXh0T3BlcmF0aW9uKTsKLSAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6Zmlu
ZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNyaXRlcmlhLCBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdHMpCi17Ci0gICAgQVNTRVJUKGNyaXRl
cmlhKTsKLSAgICBpZiAoIWNyaXRlcmlhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcml0ZXJp
YS0+YW5jaG9yT2JqZWN0ID0gdGhpczsKLSAgICBBY2Nlc3NpYmlsaXR5OjpmaW5kTWF0Y2hpbmdP
YmplY3RzKCpjcml0ZXJpYSwgcmVzdWx0cyk7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6
cmVwbGFjZVRleHRJblJhbmdlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFBsYWluVGV4dFJhbmdlJikK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmKQotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xh
dGVkT2JqZWN0OjpwcmVzcygpCi17Ci0gICAgaWYgKGF1dG8qIG9iamVjdCA9IGFzc29jaWF0ZWRB
WE9iamVjdCgpKQotICAgICAgICByZXR1cm4gb2JqZWN0LT5wcmVzcygpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpwZXJmb3JtRGVmYXVsdEFjdGlvbigp
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElz
b2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElz
b2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIoKSBjb25zdAotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xh
dGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogdGhpcyBzaG91bGQgYmUgQVNTRVJUX05PVF9SRUFDSEVELCBidXQgaXQgaXMgY2FsbGVk
IGJ5Ci0gICAgLy8gQVhPYmplY3RDYWNoZTo6cm9vdFdlYkFyZWEsIHRoYXQgaW4gdHVybiBpcyBj
YWxsZWQgYnkKLSAgICAvLyBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlUGxhdGZv
cm1Ob3RpZmljYXRpb24uCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRP
YmplY3Q6OmlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0
Ojppc0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6
aXNBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTmF0aXZl
SW1hZ2UoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0ltYWdlQnV0dG9uKCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNDb250YWluZWRCeVBhc3N3b3JkRmllbGQoKSBjb25zdAot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQVhD
b3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpwYXNzd29yZEZpZWxkT3JDb250YWluaW5nUGFz
c3dvcmRGaWVsZCgpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNOYXRpdmVUZXh0Q29udHJvbCgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTmF0aXZlTGlzdEJveCgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OmlzTGlzdEJveE9wdGlvbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmlzU2xpZGVyVGh1bWIoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0lucHV0U2xp
ZGVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNMYWJlbCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNv
bGF0ZWRPYmplY3Q6OmlzRGF0YVRhYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNJ
bWFnZU1hcExpbmsoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc05hdGl2ZVNwaW5CdXR0
b24oKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc1NwaW5CdXR0b25QYXJ0KCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNNb2NrT2JqZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9i
amVjdDo6aXNNZWRpYU9iamVjdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQVJJQVRl
eHRDb250cm9sKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNOb25OYXRpdmVUZXh0Q29u
dHJvbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQmxvY2txdW90ZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OmlzTGFuZG1hcmsoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0
Ojppc0ZpZ3VyZUVsZW1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0tleWJvYXJk
Rm9jdXNhYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNIb3ZlcmVkKCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNJbmRldGVybWluYXRlKCkgY29uc3QKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRl
ZE9iamVjdDo6aXNPblNjcmVlbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzT2ZmU2Ny
ZWVuKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNQcmVzc2VkKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJ
c29sYXRlZE9iamVjdDo6aXNVbnZpc2l0ZWQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpp
c0xpbmtlZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzVmlzaWJsZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OmlzQ29sbGFwc2VkKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVj
dDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhh
c0JvbGRGb250KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzSXRhbGljRm9udCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc01pc3NwZWxsaW5nKCkgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29s
YXRlZE9iamVjdDo6aGFzUGxhaW5UZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFz
U2FtZUZvbnQoUmVuZGVyT2JqZWN0KikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzU2Ft
ZUZvbnRDb2xvcihSZW5kZXJPYmplY3QqKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNT
YW1lU3R5bGUoUmVuZGVyT2JqZWN0KikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNTdGF0
aWNUZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzVW5kZXJsaW5lKCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aGFzSGlnaGxpZ2h0aW5nKCkgY29uc3QKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUVsZW1lbnQqIEFYSXNv
bGF0ZWRPYmplY3Q6OmVsZW1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1Ob2RlKiBBWElzb2xhdGVkT2JqZWN0Ojpub2Rl
KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotUmVuZGVyT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpyZW5kZXJlcigpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LUFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQVhJc29sYXRlZE9iamVjdDo6ZGVmYXVsdE9i
amVjdEluY2x1c2lvbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246OkRlZmF1bHRCZWhhdmlvcjsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0
KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWZsb2F0IEFYSXNvbGF0ZWRPYmplY3Q6OnN0ZXBWYWx1ZUZvclJhbmdlKCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotQVhDb3Jl
T2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpzZWxlY3RlZExpc3RJdGVtKCkKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjphcmlhQWN0aXZlRGVzY2VuZGFudFJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhQ29udHJvbHNSZWZlcmVuY2luZ0Vs
ZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXJpYURlc2NyaWJl
ZEJ5RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhRGVz
Y3JpYmVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRl
ZE9iamVjdDo6YXJpYURldGFpbHNSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZv
aWQgQVhJc29sYXRlZE9iamVjdDo6YXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVudHMo
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhRmxvd1RvUmVmZXJlbmNp
bmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdAotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFyaWFMYWJl
bGxlZEJ5RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojphcmlh
TGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjphcmlhT3duc1JlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotYm9v
bCBBWElzb2xhdGVkT2JqZWN0OjpoYXNEYXRhbGlzdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmpl
Y3Q6OnN1cHBvcnRzSGFzUG9wdXAoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0
c1ByZXNzZWQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0c0NoZWNrZWQoKSBj
b25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjppZ25vcmVkRnJvbU1vZGFsUHJlc2VuY2UoKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc01vZGFsRGVzY2VuZGFudChOb2RlKikgY29uc3QKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QVhJc29sYXRlZE9iamVjdDo6aXNNb2RhbE5vZGUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQVhDb3JlT2JqZWN0KiBBWElzb2xh
dGVkT2JqZWN0OjplbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBj
b25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmZpcnN0Q2hpbGQoKSBjb25zdAot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1B
WENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6Omxhc3RDaGlsZCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFYQ29yZU9i
amVjdCogQVhJc29sYXRlZE9iamVjdDo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQVhDb3JlT2Jq
ZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFYQ29yZU9iamVjdCog
QVhJc29sYXRlZE9iamVjdDo6bmV4dFNpYmxpbmdVbmlnbm9yZWQoaW50KSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1BWENvcmVP
YmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OnByZXZpb3VzU2libGluZ1VuaWdub3JlZChpbnQpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6cGFyZW50T2JqZWN0SWZFeGlzdHMo
KSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRy
OwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50
KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNEZXNjZW5kYW50T2ZSb2xlKEFjY2Vzc2li
aWxpdHlSb2xlKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpvYnNlcnZhYmxl
T2JqZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0Ojpjb3JyZXNwb25k
aW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFYQ29yZU9iamVjdCogQVhJc29sYXRl
ZE9iamVjdDo6Y29ycmVzcG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OmlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUoKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBBWElzb2xhdGVkT2JqZWN0OjphcmlhUm9sZUhhc1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4o
KSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldEFjY2Vzc2libGVOYW1lKGNvbnN0IEF0b21T
dHJpbmcmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIEFYSXNvbGF0
ZWRPYmplY3Q6Omhhc0F0dHJpYnV0ZXNSZXF1aXJlZEZvckluY2x1c2lvbigpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TdHJpbmcg
QVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBBWElzb2xhdGVkT2JqZWN0Ojp0aXRsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhJc29sYXRlZE9iamVj
dDo6aGVscFRleHQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FSSUFTdGF0aWNU
ZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLVN0cmluZyBBWElzb2xhdGVkT2JqZWN0Ojp0ZXh0KCkgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBB
WElzb2xhdGVkT2JqZWN0OjphcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBB
WElzb2xhdGVkT2JqZWN0OjphcmlhRGVzY3JpYmVkQnlBdHRyaWJ1dGUoKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBB
WElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmxlTmFtZURlcml2ZXNGcm9tQ29udGVudCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVu
dCo+JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLUFYT2JqZWN0Q2FjaGUqIEFYSXNvbGF0ZWRPYmplY3Q6OmF4T2JqZWN0Q2Fj
aGUoKSBjb25zdAotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIHRy
ZWUoKS0+YXhPYmplY3RDYWNoZSgpOwotfQotCi1FbGVtZW50KiBBWElzb2xhdGVkT2JqZWN0Ojph
bmNob3JFbGVtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotRWxlbWVudCogQVhJc29sYXRlZE9iamVjdDo6YWN0aW9uRWxl
bWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLVBhdGggQVhJc29sYXRlZE9iamVjdDo6ZWxlbWVudFBhdGgoKSBjb25zdAot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQYXRoKCk7Ci19Ci0KLVRl
eHRJdGVyYXRvckJlaGF2aW9yIEFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9y
Rm9yVGV4dFJhbmdlKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLVdpZGdldCogQVhJc29sYXRlZE9iamVjdDo6d2lkZ2V0KCkgY29u
c3QKLXsKLSAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiBvYmplY3QtPndpZGdldCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1X
aWRnZXQqIEFYSXNvbGF0ZWRPYmplY3Q6OndpZGdldEZvckF0dGFjaG1lbnRWaWV3KCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
UGFnZSogQVhJc29sYXRlZE9iamVjdDo6cGFnZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIG9i
amVjdCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQotICAgICAgICByZXR1cm4gb2JqZWN0LT5wYWdl
KCk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LURvY3VtZW50KiBBWElzb2xhdGVkT2JqZWN0Ojpkb2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgaWYg
KGF1dG8qIG9iamVjdCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQotICAgICAgICByZXR1cm4gb2Jq
ZWN0LT5kb2N1bWVudCgpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1GcmFtZVZpZXcqIEFYSXNvbGF0ZWRPYmplY3Q6OmRvY3VtZW50RnJhbWVW
aWV3KCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiBvYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLUZyYW1lKiBBWElzb2xhdGVkT2JqZWN0OjpmcmFtZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LUZyYW1lKiBBWElzb2xhdGVkT2JqZWN0OjptYWluRnJhbWUoKSBjb25zdAotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1Eb2N1bWVudCogQVhJ
c29sYXRlZE9iamVjdDo6dG9wRG9jdW1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1TY3JvbGxWaWV3KiBBWElzb2xhdGVk
T2JqZWN0OjpzY3JvbGxWaWV3QW5jZXN0b3IoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OmNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZv
aWQgQVhJc29sYXRlZE9iamVjdDo6dGV4dENoYW5nZWQoKQotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnVwZGF0ZUFjY2Vzc2liaWxpdHlS
b2xlKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVk
T2JqZWN0OjphZGRDaGlsZHJlbigpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0K
LXZvaWQgQVhJc29sYXRlZE9iamVjdDo6YWRkQ2hpbGQoQVhDb3JlT2JqZWN0KikKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjppbnNlcnRD
aGlsZChBWENvcmVPYmplY3QqLCB1bnNpZ25lZCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzaG91bGRJZ25vcmVBdHRyaWJ1dGVSb2xl
KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QVhJc29sYXRlZE9iamVjdDo6aGFzQ2hpbGRyZW4oKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0
OjpzZXROZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldE5lZWRzVG9VcGRhdGVTdWJ0cmVlKCkK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0
OjpjbGVhckNoaWxkcmVuKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotYm9v
bCBBWElzb2xhdGVkT2JqZWN0OjpuZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElz
b2xhdGVkT2JqZWN0OjpzaG91bGRGb2N1c0FjdGl2ZURlc2NlbmRhbnQoKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQVhDb3JlT2Jq
ZWN0KiBBWElzb2xhdGVkT2JqZWN0OjphY3RpdmVEZXNjZW5kYW50KCkgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCgpCi17Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6aGFuZGxlQXJp
YUV4cGFuZGVkQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNEZXNjZW5kYW50T2ZPYmplY3QoY29uc3QgQVhDb3JlT2Jq
ZWN0KikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNBbmNlc3Rvck9mT2JqZWN0KGNvbnN0
IEFYQ29yZU9iamVjdCopIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmZpcnN0
QW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotY29uc3QgQXRvbVN0cmluZyYgQVhJc29s
YXRlZE9iamVjdDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxsQXRvbSgpOwotfQotCi1i
b29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1TdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBBWElzb2xhdGVkT2JqZWN0OjpzdHJpbmdSb2xlRm9yTVNBQSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcg
QVhJc29sYXRlZE9iamVjdDo6bmFtZUZvck1TQUEoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYSXNvbGF0ZWRP
YmplY3Q6OmRlc2NyaXB0aW9uRm9yTVNBQSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1BY2Nlc3NpYmlsaXR5Um9sZSBBWElz
b2xhdGVkT2JqZWN0Ojpyb2xlVmFsdWVGb3JNU0FBKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd247Ci19Ci0K
LVN0cmluZyBBWElzb2xhdGVkT2JqZWN0OjpwYXNzd29yZEZpZWxkVmFsdWUoKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotQVhD
b3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpsaXZlUmVnaW9uQW5jZXN0b3IoYm9vbCkgY29u
c3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQo
KSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0c1JlYWRPbmx5KCkgY29uc3QKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QVhJc29sYXRlZE9iamVjdDo6c3VwcG9ydHNBdXRvQ29tcGxldGUoKSBjb25zdAotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xh
dGVkT2JqZWN0OjpzdXBwb3J0c0FSSUFBdHRyaWJ1dGVzKCkgY29uc3QKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9i
amVjdDo6c2Nyb2xsQnlQYWdlKFNjcm9sbEJ5UGFnZURpcmVjdGlvbikgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUludFBvaW50IEFY
SXNvbGF0ZWRPYmplY3Q6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW50UG9pbnQoKTsKLX0KLQotSW50U2l6ZSBBWElzb2xh
dGVkT2JqZWN0OjpzY3JvbGxDb250ZW50c1NpemUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRTaXplKCk7Ci19Ci0KLUludFJlY3QgQVhJc29sYXRl
ZE9iamVjdDo6c2Nyb2xsVmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW50UmVjdCgpOwotfQotCi12b2lkIEFYSXNvbGF0
ZWRPYmplY3Q6OnNjcm9sbFRvTWFrZVZpc2libGUoY29uc3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9w
dGlvbnMmKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6Omxhc3RLbm93bklzSWdub3JlZFZhbHVlKCkKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9i
amVjdDo6c2V0TGFzdEtub3duSXNJZ25vcmVkVmFsdWUoYm9vbCkKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojpub3RpZnlJZklnbm9yZWRW
YWx1ZUNoYW5nZWQoKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OmlzTWF0aFNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aFNjcmlw
dE9iamVjdFR5cGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTWF0aE11bHRpc2NyaXB0
T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBB
WElzb2xhdGVkT2JqZWN0Ojppc0FYSGlkZGVuKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6
aXNET01IaWRkZW4oKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0hpZGRlbigpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEFYSXNvbGF0ZWRPYmplY3Q6Om92ZXJyaWRlQXR0YWNobWVudFBhcmVudChBWENvcmVPYmpl
Y3QqKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIEFYSXNvbGF0ZWRP
YmplY3Q6OmFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50KCkgY29uc3QKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUFjY2Vzc2liaWxpdHlP
YmplY3RJbmNsdXNpb24gQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eVBsYXRmb3JtSW5j
bHVkZXNPYmplY3QoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7Ci19Ci0K
LWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzQXBwbGVQREZBbm5vdGF0aW9uQXR0cmlidXRlKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWNvbnN0IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KiBBWElzb2xhdGVkT2JqZWN0OjphbmNl
c3RvckFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KGJvb2wpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9i
amVjdDo6c2V0SXNJZ25vcmVkRnJvbVBhcmVudERhdGEoQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZy
b21QYXJlbnREYXRhJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpjbGVhcklzSWdub3JlZEZyb21QYXJlbnREYXRhKCkKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRJc0ln
bm9yZWRGcm9tUGFyZW50RGF0YUZvckNoaWxkKEFYQ29yZU9iamVjdCopCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRSgoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJl
ZU5vZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U2MjE5NzRkYzJlY2ViNjQ2
ODhlNzIxNWQ0NmExMGQ5MzA0MmRiZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkVHJlZU5vZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzOCArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgot
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgot
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0qIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0qIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0qIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0qIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLQotI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgi
Ci0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVk
ZSAiUGF0aC5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9W
YXJpYW50Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQVhJc29sYXRlZFRyZWU7Ci0KLWNs
YXNzIEFYSXNvbGF0ZWRPYmplY3QgZmluYWwgOiBwdWJsaWMgQVhDb3JlT2JqZWN0IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEFYSXNvbGF0ZWRPYmplY3Q+IGNyZWF0ZShBWENvcmVPYmplY3Qm
LCBib29sIGlzUm9vdCk7Ci0gICAgfkFYSXNvbGF0ZWRPYmplY3QoKTsKLQotICAgIHZvaWQgc2V0
T2JqZWN0SUQoQVhJRCBpZCkgb3ZlcnJpZGUgeyBtX2lkID0gaWQ7IH0KLSAgICBBWElEIG9iamVj
dElEKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pZDsgfQotICAgIHZvaWQgaW5pdCgpIG92
ZXJyaWRlIHsgfQotCi0gICAgdm9pZCBkZXRhY2goQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
LCBBWE9iamVjdENhY2hlKiA9IG51bGxwdHIpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNEZXRhY2hl
ZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZGlzY29ubmVjdCgpOwotCi0gICAgdm9pZCBz
ZXRUcmVlSWRlbnRpZmllcihBWElzb2xhdGVkVHJlZUlEKTsKLSAgICB2b2lkIHNldFBhcmVudChB
WElEKTsKLSAgICB2b2lkIGFwcGVuZENoaWxkKEFYSUQpOwotCi1wcml2YXRlOgotCi0gICAgQVhJ
RCBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQotICAgIAotICAgIEFYSXNvbGF0
ZWRUcmVlSUQgdHJlZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3RyZWVJZGVudGlmaWVy
OyB9Ci0gICAgQVhJc29sYXRlZFRyZWUqIHRyZWUoKSBjb25zdDsKLSAgICAKLSAgICBBWElzb2xh
dGVkT2JqZWN0KCkgPSBkZWZhdWx0OwotICAgIEFYSXNvbGF0ZWRPYmplY3QoQVhDb3JlT2JqZWN0
JiwgYm9vbCBpc1Jvb3QpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEoQVhDb3Jl
T2JqZWN0JiwgYm9vbCBpc1Jvb3QpOwotICAgIEFYQ29yZU9iamVjdCogYXNzb2NpYXRlZEFYT2Jq
ZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
ICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPm9iamVjdEZyb21BWElEKG9iamVjdElEKCkpOwot
ICAgIH0KLQotICAgIGVudW0gY2xhc3MgQVhQcm9wZXJ0eU5hbWUgOiB1aW50OF90IHsKLSAgICAg
ICAgTm9uZSA9IDAsCi0gICAgICAgIEFjY2Vzc0tleSwKLSAgICAgICAgQWN0aW9uVmVyYiwKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlLAotICAgICAgICBBY2Nlc3NpYmlsaXR5VGV4
dCwKLSAgICAgICAgQXV0b0NvbXBsZXRlVmFsdWUsCi0gICAgICAgIEFSSUFDb250cm9sc0VsZW1l
bnRzLAotICAgICAgICBBUklBRGV0YWlsc0VsZW1lbnRzLAotICAgICAgICBBUklBRHJvcEVmZmVj
dHMsCi0gICAgICAgIEFSSUFFcnJvck1lc3NhZ2VFbGVtZW50cywKLSAgICAgICAgQVJJQUlzTXVs
dGlsaW5lLAotICAgICAgICBBUklBRmxvd1RvRWxlbWVudHMsCi0gICAgICAgIEFSSUFMYW5kbWFy
a1JvbGVEZXNjcmlwdGlvbiwKLSAgICAgICAgQVJJQVRyZWVJdGVtQ29udGVudCwKLSAgICAgICAg
QVJJQVRyZWVJdGVtRGlzY2xvc2VkUm93cywKLSAgICAgICAgQVJJQVRyZWVSb3dzLAotICAgICAg
ICBBUklBUm9sZUF0dHJpYnV0ZSwKLSAgICAgICAgQVJJQU93bnNFbGVtZW50cywKLSAgICAgICAg
QmxvY2txdW90ZUxldmVsLAotICAgICAgICBCb3VuZGluZ0JveFJlY3QsCi0gICAgICAgIENhbkhh
dmVTZWxlY3RlZENoaWxkcmVuLAotICAgICAgICBDYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSwKLSAg
ICAgICAgQ2FuU2V0Rm9jdXNBdHRyaWJ1dGUsCi0gICAgICAgIENhblNldE51bWVyaWNWYWx1ZSwK
LSAgICAgICAgQ2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUsCi0gICAgICAgIENhblNldFNlbGVjdGVk
Q2hpbGRyZW5BdHRyaWJ1dGUsCi0gICAgICAgIENhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMsCi0g
ICAgICAgIENhblNldFZhbHVlQXR0cmlidXRlLAotICAgICAgICBDYW52YXNIYXNGYWxsYmFja0Nv
bnRlbnQsCi0jaWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICBDYXJldEJyb3dzaW5nRW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBDbGFzc0xpc3QsCi0g
ICAgICAgIENsaWNrUG9pbnQsCi0gICAgICAgIENvbG9yVmFsdWUsCi0gICAgICAgIENvbXB1dGVk
TGFiZWwsCi0gICAgICAgIENvbXB1dGVkUm9sZVN0cmluZywKLSAgICAgICAgQ3VycmVudFN0YXRl
LAotICAgICAgICBDdXJyZW50VmFsdWUsCi0gICAgICAgIERhdGV0aW1lQXR0cmlidXRlVmFsdWUs
Ci0gICAgICAgIERlY3JlbWVudEJ1dHRvbiwKLSAgICAgICAgRGVzY3JpcHRpb24sCi0gICAgICAg
IERvY3VtZW50RW5jb2RpbmcsCi0gICAgICAgIERvY3VtZW50VVJJLAotICAgICAgICBFZGl0YWJs
ZUFuY2VzdG9yLAotICAgICAgICBFbGVtZW50UmVjdCwKLSAgICAgICAgRXN0aW1hdGVkTG9hZGlu
Z1Byb2dyZXNzLAotICAgICAgICBFeHBhbmRlZFRleHRWYWx1ZSwKLSAgICAgICAgRXhwb3Nlc1Rp
dGxlVUlFbGVtZW50LAotICAgICAgICBGaWxlVXBsb2FkQnV0dG9uUmV0dXJuc1ZhbHVlSW5UaXRs
ZSwKLSAgICAgICAgRm9jdXNhYmxlQW5jZXN0b3IsCi0gICAgICAgIEhhc0FSSUFWYWx1ZU5vdywK
LSAgICAgICAgSGFzUG9wdXAsCi0gICAgICAgIEhlYWRpbmdMZXZlbCwKLSAgICAgICAgSGVscFRl
eHQsCi0gICAgICAgIEhpZXJhcmNoaWNhbExldmVsLAotICAgICAgICBIaWdoZXN0RWRpdGFibGVB
bmNlc3RvciwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbEJhciwKLSAgICAgICAgSWRlbnRpZmll
ckF0dHJpYnV0ZSwKLSAgICAgICAgSW52YWxpZFN0YXR1cywKLSAgICAgICAgSW5jcmVtZW50QnV0
dG9uLAotICAgICAgICBJc0FjY2Vzc2liaWxpdHlJZ25vcmVkLAotICAgICAgICBJc0FjdGl2ZURl
c2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIsCi0gICAgICAgIElzQW5vbnltb3VzTWF0aE9wZXJh
dG9yLAotICAgICAgICBJc0FSSUFHcmFiYmVkLAotICAgICAgICBJc0FSSUFUcmVlR3JpZFJvdywK
LSAgICAgICAgSXNBdHRhY2htZW50LAotICAgICAgICBJc0J1dHRvbiwKLSAgICAgICAgSXNCdXN5
LAotICAgICAgICBJc0NoZWNrZWQsCi0gICAgICAgIElzQ29sbGFwc2VkLAotICAgICAgICBJc0Nv
bnRyb2wsCi0gICAgICAgIElzRGVzY3JpcHRpb25MaXN0LAotICAgICAgICBJc0VuYWJsZWQsCi0g
ICAgICAgIElzRXhwYW5kZWQsCi0gICAgICAgIElzRmllbGRzZXQsCi0gICAgICAgIElzRmlsZVVw
bG9hZEJ1dHRvbiwKLSAgICAgICAgSXNGb2N1c2VkLAotICAgICAgICBJc0dyb3VwLAotICAgICAg
ICBJc0ltYWdlLAotICAgICAgICBJc0ltYWdlTWFwTGluaywKLSAgICAgICAgSXNJbmNyZW1lbnRv
ciwKLSAgICAgICAgSXNJbmRldGVybWluYXRlLAotICAgICAgICBJc0lubGluZVRleHQsCi0gICAg
ICAgIElzSW5wdXRJbWFnZSwKLSAgICAgICAgSXNJbnNpZGVMaXZlUmVnaW9uLAotICAgICAgICBJ
c0xpbmssCi0gICAgICAgIElzTGlua2VkLAotICAgICAgICBJc0xpc3QsCi0gICAgICAgIElzTGlz
dEJveCwKLSAgICAgICAgSXNMb2FkZWQsCi0gICAgICAgIElzSGVhZGluZywKLSAgICAgICAgSXNI
b3ZlcmVkLAotICAgICAgICBJc01hdGhFbGVtZW50LAotICAgICAgICBJc01hdGhGcmFjdGlvbiwK
LSAgICAgICAgSXNNYXRoRmVuY2VkLAotICAgICAgICBJc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlw
dCwKLSAgICAgICAgSXNNYXRoUm93LAotICAgICAgICBJc01hdGhVbmRlck92ZXIsCi0gICAgICAg
IElzTWF0aFJvb3QsCi0gICAgICAgIElzTWF0aFNxdWFyZVJvb3QsCi0gICAgICAgIElzTWF0aFRl
eHQsCi0gICAgICAgIElzTWF0aE51bWJlciwKLSAgICAgICAgSXNNYXRoT3BlcmF0b3IsCi0gICAg
ICAgIElzTWF0aEZlbmNlT3BlcmF0b3IsCi0gICAgICAgIElzTWF0aFNlcGFyYXRvck9wZXJhdG9y
LAotICAgICAgICBJc01hdGhJZGVudGlmaWVyLAotICAgICAgICBJc01hdGhUYWJsZSwKLSAgICAg
ICAgSXNNYXRoVGFibGVSb3csCi0gICAgICAgIElzTWF0aFRhYmxlQ2VsbCwKLSAgICAgICAgSXNN
YXRoTXVsdGlzY3JpcHQsCi0gICAgICAgIElzTWF0aFRva2VuLAotICAgICAgICBJc01hdGhTY3Jp
cHRPYmplY3QsCi0gICAgICAgIElzTWVkaWFUaW1lbGluZSwKLSAgICAgICAgSXNNZW51LAotICAg
ICAgICBJc01lbnVCYXIsCi0gICAgICAgIElzTWVudUJ1dHRvbiwKLSAgICAgICAgSXNNZW51SXRl
bSwKLSAgICAgICAgSXNNZW51TGlzdCwKLSAgICAgICAgSXNNZW51TGlzdE9wdGlvbiwKLSAgICAg
ICAgSXNNZW51TGlzdFBvcHVwLAotICAgICAgICBJc01lbnVSZWxhdGVkLAotICAgICAgICBJc01l
dGVyLAotICAgICAgICBJc011bHRpU2VsZWN0YWJsZSwKLSAgICAgICAgSXNPZmZTY3JlZW4sCi0g
ICAgICAgIElzT25TY3JlZW4sCi0gICAgICAgIElzT3JkZXJlZExpc3QsCi0gICAgICAgIElzT3V0
cHV0LAotICAgICAgICBJc1Bhc3N3b3JkRmllbGQsCi0gICAgICAgIElzUHJlc3NlZCwKLSAgICAg
ICAgSXNQcm9ncmVzc0luZGljYXRvciwKLSAgICAgICAgSXNSYW5nZUNvbnRyb2wsCi0gICAgICAg
IElzUmVxdWlyZWQsCi0gICAgICAgIElzU2Nyb2xsYmFyLAotICAgICAgICBJc1NlYXJjaEZpZWxk
LAotICAgICAgICBJc1NlbGVjdGVkLAotICAgICAgICBJc1NlbGVjdGVkT3B0aW9uQWN0aXZlLAot
ICAgICAgICBJc1Nob3dpbmdWYWxpZGF0aW9uTWVzc2FnZSwKLSAgICAgICAgSXNTbGlkZXIsCi0g
ICAgICAgIElzU3R5bGVGb3JtYXRHcm91cCwKLSAgICAgICAgSXNUYWJsZUNlbGwsCi0gICAgICAg
IElzVGFibGVDb2x1bW4sCi0gICAgICAgIElzVGFibGVSb3csCi0gICAgICAgIElzVGV4dENvbnRy
b2wsCi0gICAgICAgIElzVHJlZSwKLSAgICAgICAgSXNUcmVlSXRlbSwKLSAgICAgICAgSXNVbm9y
ZGVyZWRMaXN0LAotICAgICAgICBJc1VudmlzaXRlZCwKLSAgICAgICAgSXNWYWx1ZUF1dG9maWxs
ZWQsCi0gICAgICAgIElzVmFsdWVBdXRvZmlsbEF2YWlsYWJsZSwKLSAgICAgICAgSXNWaXNpYmxl
LAotICAgICAgICBJc1Zpc2l0ZWQsCi0gICAgICAgIEtleVNob3J0Y3V0c1ZhbHVlLAotICAgICAg
ICBMYW5ndWFnZSwKLSAgICAgICAgTGF5b3V0Q291bnQsCi0gICAgICAgIExpbmtSZWxWYWx1ZSwK
LSAgICAgICAgTGlua2VkVUlFbGVtZW50cywKLSAgICAgICAgTGl2ZVJlZ2lvbkF0b21pYywKLSAg
ICAgICAgTGl2ZVJlZ2lvblJlbGV2YW50LAotICAgICAgICBMaXZlUmVnaW9uU3RhdHVzLAotICAg
ICAgICBNYXRoRmVuY2VkT3BlblN0cmluZywKLSAgICAgICAgTWF0aEZlbmNlZENsb3NlU3RyaW5n
LAotICAgICAgICBNYXRoTGluZVRoaWNrbmVzcywKLSAgICAgICAgTWF0aFByZXNjcmlwdHMsCi0g
ICAgICAgIE1hdGhQb3N0c2NyaXB0cywKLSAgICAgICAgTWF0aFJhZGljYW5kT2JqZWN0LAotICAg
ICAgICBNYXRoUm9vdEluZGV4T2JqZWN0LAotICAgICAgICBNYXRoVW5kZXJPYmplY3QsCi0gICAg
ICAgIE1hdGhPdmVyT2JqZWN0LAotICAgICAgICBNYXRoTnVtZXJhdG9yT2JqZWN0LAotICAgICAg
ICBNYXRoRGVub21pbmF0b3JPYmplY3QsCi0gICAgICAgIE1hdGhCYXNlT2JqZWN0LAotICAgICAg
ICBNYXRoU3Vic2NyaXB0T2JqZWN0LAotICAgICAgICBNYXRoU3VwZXJzY3JpcHRPYmplY3QsCi0g
ICAgICAgIE1heFZhbHVlRm9yUmFuZ2UsCi0gICAgICAgIE1pblZhbHVlRm9yUmFuZ2UsCi0gICAg
ICAgIE9yaWVudGF0aW9uLAotICAgICAgICBQbGFjZWhvbGRlclZhbHVlLAotICAgICAgICBQcmVz
c2VkSXNQcmVzZW50LAotICAgICAgICBQb3B1cFZhbHVlLAotICAgICAgICBQb3NJblNldCwKLSAg
ICAgICAgUHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCwKLSAgICAgICAgUmVhZE9ubHlW
YWx1ZSwKLSAgICAgICAgUmVsYXRpdmVGcmFtZSwKLSAgICAgICAgUm9sZVZhbHVlLAotICAgICAg
ICBSb2xlUGxhdGZvcm1TdHJpbmcsCi0gICAgICAgIFJvbGVEZXNjcmlwdGlvbiwKLSAgICAgICAg
U2VsZWN0ZWRDaGlsZHJlbiwKLSAgICAgICAgU2VsZWN0ZWRSYWRpb0J1dHRvbiwKLSAgICAgICAg
U2VsZWN0ZWRUYWJJdGVtLAotICAgICAgICBTZXNzaW9uSUQsCi0gICAgICAgIFNldFNpemUsCi0g
ICAgICAgIFNvcnREaXJlY3Rpb24sCi0gICAgICAgIFNwZWFrQXMsCi0gICAgICAgIFNwZWVjaEhp
bnQsCi0gICAgICAgIFN0cmluZ1ZhbHVlLAotICAgICAgICBTdXBwb3J0c0FSSUFEcmFnZ2luZywK
LSAgICAgICAgU3VwcG9ydHNBUklBRHJvcHBpbmcsCi0gICAgICAgIFN1cHBvcnRzQVJJQU93bnMs
Ci0gICAgICAgIFN1cHBvcnRzQ3VycmVudCwKLSAgICAgICAgU3VwcG9ydHNEYXRldGltZUF0dHJp
YnV0ZSwKLSAgICAgICAgU3VwcG9ydHNFeHBhbmRlZCwKLSAgICAgICAgU3VwcG9ydHNFeHBhbmRl
ZFRleHRWYWx1ZSwKLSAgICAgICAgU3VwcG9ydHNMaXZlUmVnaW9uLAotICAgICAgICBTdXBwb3J0
c1BhdGgsCi0gICAgICAgIFN1cHBvcnRzUG9zSW5TZXQsCi0gICAgICAgIFN1cHBvcnRzUHJlc3NB
Y3Rpb24sCi0gICAgICAgIFN1cHBvcnRzUmFuZ2VWYWx1ZSwKLSAgICAgICAgU3VwcG9ydHNSZXF1
aXJlZEF0dHJpYnV0ZSwKLSAgICAgICAgU3VwcG9ydHNTZXRTaXplLAotICAgICAgICBUYWJDaGls
ZHJlbiwKLSAgICAgICAgVGFibGVMZXZlbCwKLSAgICAgICAgVGFnTmFtZSwKLSAgICAgICAgVGV4
dExlbmd0aCwKLSAgICAgICAgVGl0bGUsCi0gICAgICAgIFRpdGxlVUlFbGVtZW50LAotICAgICAg
ICBVUkwsCi0gICAgICAgIFZhbHVlQXV0b2ZpbGxCdXR0b25UeXBlLAotICAgICAgICBWYWx1ZURl
c2NyaXB0aW9uLAotICAgICAgICBWYWx1ZUZvclJhbmdlLAotICAgICAgICBWYWxpZGF0aW9uTWVz
c2FnZSwKLSAgICAgICAgVmVydGljYWxTY3JvbGxCYXIsCi0gICAgICAgIFZpc2libGVDaGlsZHJl
biwKLSAgICB9OwotICAgIAotICAgIHR5cGVkZWYgc3RkOjpwYWlyPEFYSUQsIEFYSUQ+IEFjY2Vz
c2liaWxpdHlJc29sYXRlZFRyZWVNYXRoTXVsdGlzY3JpcHRQYWlyOwotICAgIHN0cnVjdCBBY2Nl
c3NpYmlsaXR5SXNvbGF0ZWRUcmVlVGV4dCB7Ci0gICAgICAgIFN0cmluZyB0ZXh0OwotICAgICAg
ICBBY2Nlc3NpYmlsaXR5VGV4dFNvdXJjZSB0ZXh0U291cmNlOwotICAgICAgICBWZWN0b3I8QVhJ
RD4gdGV4dEVsZW1lbnRzOwotICAgIH07Ci0gICAgCi0gICAgdXNpbmcgQXR0cmlidXRlVmFsdWVW
YXJpYW50ID0gVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5nLCBib29sLCBpbnQsIHVuc2ln
bmVkLCBkb3VibGUsIGZsb2F0LCB1aW50NjRfdCwgQ29sb3IsIFVSTCwgTGF5b3V0UmVjdCwgQVhJ
RCwgSW50UG9pbnQsIE9wdGlvblNldDxTcGVha0FzPiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlJc29s
YXRlZFRyZWVUZXh0PiwgVmVjdG9yPEFYSUQ+LCBWZWN0b3I8QWNjZXNzaWJpbGl0eUlzb2xhdGVk
VHJlZU1hdGhNdWx0aXNjcmlwdFBhaXI+LCBWZWN0b3I8U3RyaW5nPj47Ci0gICAgdm9pZCBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZSwgQXR0cmlidXRlVmFsdWVWYXJpYW50JiYsIGJvb2wgc2hv
dWxkUmVtb3ZlID0gZmFsc2UpOwotICAgIHZvaWQgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWUsIEFYQ29yZU9iamVjdCopOwotICAgIHZvaWQgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHko
QVhQcm9wZXJ0eU5hbWUsIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwotCi0gICAgYm9v
bCBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIGNvbnN0IFN0
cmluZyBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgaW50
IGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICB1bnNpZ25lZCB1
bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICBkb3VibGUg
ZG91YmxlQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIGZsb2F0IGZs
b2F0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIEFYQ29yZU9iamVj
dCogb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIEludFBv
aW50IGludFBvaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIENv
bG9yIGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIFVSTCB1
cmxBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgdWludDY0X3QgdWlu
dDY0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgcmVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8VD4gdmVjdG9yQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IE9wdGlvblNldDxU
PiBvcHRpb25TZXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0KLSAgICB2
b2lkIGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdDsKLSAgICB2b2lkIHNldE1hdGhzY3JpcHRzKEFY
UHJvcGVydHlOYW1lLCBBWENvcmVPYmplY3QmKTsKLSAgICB2b2lkIGluc2VydE1hdGhQYWlycyhW
ZWN0b3I8QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXI+JiwgQWNj
ZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gdm9pZCBwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoVSYmKTsKLQotICAgIC8vIEF0dHJp
YnV0ZSByZXRyaWV2YWwgb3ZlcnJpZGVzLgotICAgIGJvb2wgaXNIZWFkaW5nKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0hlYWRp
bmcpOyB9Ci0gICAgYm9vbCBpc0xpbmsoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTGluayk7IH0KLSAgICBib29sIGlzSW1hZ2Uo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklzSW1hZ2UpOyB9Ci0gICAgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzUGFzc3dvcmRG
aWVsZCk7IH0KLSAgICBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU2VhcmNoRmllbGQpOyB9Ci0g
ICAgYm9vbCBpc0F0dGFjaG1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQXR0YWNobWVudCk7IH0KLSAgICBib29sIGlzTWVk
aWFUaW1lbGluZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6SXNNZWRpYVRpbWVsaW5lKTsgfQotICAgIGJvb2wgaXNNZW51UmVsYXRl
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SXNNZW51UmVsYXRlZCk7IH0KLSAgICBib29sIGlzTWVudSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNZW51KTsgfQot
ICAgIGJvb2wgaXNNZW51QmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01lbnVCYXIpOyB9Ci0gICAgYm9vbCBpc01lbnVCdXR0
b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzTWVudUJ1dHRvbik7IH0KLSAgICBib29sIGlzTWVudUl0ZW0oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUl0
ZW0pOyB9Ci0gICAgYm9vbCBpc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzRmlsZVVwbG9hZEJ1dHRv
bik7IH0KLSAgICBib29sIGlzSW5wdXRJbWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNJbnB1dEltYWdlKTsgfQotICAgIGJv
b2wgaXNQcm9ncmVzc0luZGljYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNQcm9ncmVzc0luZGljYXRvcik7IH0KLSAgICBi
b29sIGlzU2xpZGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpJc1NsaWRlcik7IH0KLSAgICBib29sIGlzQ29udHJvbCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXND
b250cm9sKTsgfQotCi0gICAgYm9vbCBpc0xpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTGlzdCk7IH0KLSAgICBib29sIGlz
VW5vcmRlcmVkTGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6SXNVbm9yZGVyZWRMaXN0KTsgfQotICAgIGJvb2wgaXNPcmRlcmVk
TGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNPcmRlcmVkTGlzdCk7IH0KLSAgICBib29sIGlzRGVzY3JpcHRpb25MaXN0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0Rlc2NyaXB0aW9uTGlzdCk7IH0KLQotICAgIGJvb2wgaXNUYWJsZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBpc1RhYmxlUm93KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlUm93
KTsgfQotICAgIGJvb2wgaXNUYWJsZUNvbHVtbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUYWJsZUNvbHVtbik7IH0KLSAgICBi
b29sIGlzVGFibGVDZWxsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlQ2VsbCk7IH0KLSAgICBib29sIGlzRmllbGRzZXQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklzRmllbGRzZXQpOyB9Ci0gICAgYm9vbCBpc0dyb3VwKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0dyb3VwKTsgfQotICAg
IGJvb2wgaXNBUklBVHJlZUdyaWRSb3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQVJJQVRyZWVHcmlkUm93KTsgfQotICAgIGJv
b2wgaXNNZW51TGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6SXNNZW51TGlzdCk7IH0KLSAgICBib29sIGlzTWVudUxpc3RQb3B1
cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SXNNZW51TGlzdFBvcHVwKTsgfQotICAgIGJvb2wgaXNNZW51TGlzdE9wdGlvbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNNZW51TGlzdE9wdGlvbik7IH0KLSAgICBib29sIGlzVGV4dENvbnRyb2woKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVGV4dENv
bnRyb2wpOyB9Ci0gICAgYm9vbCBpc0J1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNCdXR0b24pOyB9Ci0gICAgYm9vbCBp
c1JhbmdlQ29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6SXNSYW5nZUNvbnRyb2wpOyB9Ci0gICAgYm9vbCBpc01ldGVyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc01ldGVyKTsgfQotICAgIGJvb2wgaXNTdHlsZUZvcm1hdEdyb3VwKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1N0eWxlRm9y
bWF0R3JvdXApOyB9Ci0gICAgYm9vbCBpc091dHB1dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNPdXRwdXQpOyB9Ci0gICAgYm9v
bCBpc0NoZWNrZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OklzQ2hlY2tlZCk7IH0KLSAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNF
bmFibGVkKTsgfQotICAgIGJvb2wgaXNTZWxlY3RlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNTZWxlY3RlZCk7IH0KLSAgICBi
b29sIGlzRm9jdXNlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6SXNGb2N1c2VkKTsgfQotICAgIGJvb2wgaXNNdWx0aVNlbGVjdGFi
bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzTXVsdGlTZWxlY3RhYmxlKTsgfQotICAgIGJvb2wgaXNWaXNpdGVkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1Zp
c2l0ZWQpOyB9Ci0gICAgYm9vbCBpc1JlcXVpcmVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1JlcXVpcmVkKTsgfQotICAgIGJv
b2wgc3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0
ZSk7IH0KLSAgICBib29sIGlzRXhwYW5kZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzRXhwYW5kZWQpOyB9Ci0gICAgRmxvYXRS
ZWN0IHJlbGF0aXZlRnJhbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiByZWN0QXR0cmlidXRl
VmFsdWU8RmxvYXRSZWN0PihBWFByb3BlcnR5TmFtZTo6UmVsYXRpdmVGcmFtZSk7IH0KLSAgICBi
b29sIHN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1
dGUpOyB9Ci0gICAgU3RyaW5nIGRhdGV0aW1lQXR0cmlidXRlVmFsdWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RGF0ZXRpbWVB
dHRyaWJ1dGVWYWx1ZSk7IH0KLSAgICBib29sIGNhblNldEZvY3VzQXR0cmlidXRlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDYW5T
ZXRGb2N1c0F0dHJpYnV0ZSk7IH0KLSAgICBib29sIGNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OkNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMpOyB9Ci0gICAgYm9vbCBjYW5TZXRWYWx1ZUF0
dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6Q2FuU2V0VmFsdWVBdHRyaWJ1dGUpOyB9Ci0gICAgYm9vbCBjYW5TZXROdW1l
cmljVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OkNhblNldE51bWVyaWNWYWx1ZSk7IH0KLSAgICBib29sIGNhblNldFNlbGVj
dGVkQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpDYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSk7IH0KLSAgICBib29sIGNh
blNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhblNldFNlbGVjdGVkQ2hpbGRyZW5B
dHRyaWJ1dGUpOyB9Ci0gICAgYm9vbCBjYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0
RXhwYW5kZWRBdHRyaWJ1dGUpOyB9Ci0gICAgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0FjY2Vzc2liaWxpdHlJZ25vcmVkKTsgfQotICAgIGJvb2wgaXNTaG93aW5nVmFsaWRhdGlv
bk1lc3NhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OklzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlKTsgfQotICAgIFN0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpWYWxpZGF0aW9uTWVzc2FnZSk7IH0KLSAgICB1bnNpZ25l
ZCBibG9ja3F1b3RlTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB1bnNpZ25lZEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpCbG9ja3F1b3RlTGV2ZWwpOyB9Ci0gICAgaW50IGhl
YWRpbmdMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpIZWFkaW5nTGV2ZWwpOyB9Ci0gICAgaW50IHRhYmxlTGV2ZWwoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGFi
bGVMZXZlbCk7IH0KLSAgICBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUgY2hlY2tib3hPclJhZGlv
VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
QnV0dG9uU3RhdGU+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBY2Nlc3NpYmls
aXR5QnV0dG9uU3RhdGUpKTsgfQotICAgIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlZh
bHVlRGVzY3JpcHRpb24pOyB9Ci0gICAgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZsb2F0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlRm9y
UmFuZ2UpOyB9Ci0gICAgZmxvYXQgbWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZsb2F0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1heFZhbHVlRm9yUmFu
Z2UpOyB9Ci0gICAgZmxvYXQgbWluVmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZsb2F0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1pblZhbHVlRm9yUmFuZ2Up
OyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBzZWxlY3RlZFJhZGlvQnV0dG9uKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlNlbGVjdGVkUmFkaW9C
dXR0b24pOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBzZWxlY3RlZFRhYkl0ZW0oKSBvdmVycmlkZSB7
IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRUYWJJ
dGVtKTsgfQotICAgIGludCBsYXlvdXRDb3VudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlu
dEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpMYXlvdXRDb3VudCk7IH0KLSAgICBkb3Vi
bGUgZXN0aW1hdGVkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZG91
YmxlQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkVzdGltYXRlZExvYWRpbmdQcm9ncmVz
cyk7IH0KLSAgICBib29sIHN1cHBvcnRzQVJJQU93bnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQU93bnMpOyB9
Ci0gICAgYm9vbCBpc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQWN0
aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcik7IH0KLSAgICB2b2lkIGFyaWFDb250cm9s
c0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0IG92
ZXJyaWRlIHsgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFS
SUFDb250cm9sc0VsZW1lbnRzLCBjaGlsZHJlbik7IH0KLSAgICB2b2lkIGFyaWFEZXRhaWxzRWxl
bWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgY29uc3Qgb3ZlcnJp
ZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQURl
dGFpbHNFbGVtZW50cywgY2hpbGRyZW4pOyB9Ci0gICAgdm9pZCBhcmlhRXJyb3JNZXNzYWdlRWxl
bWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgY29uc3Qgb3ZlcnJp
ZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQUVy
cm9yTWVzc2FnZUVsZW1lbnRzLCBjaGlsZHJlbik7IH0KLSAgICB2b2lkIGFyaWFGbG93VG9FbGVt
ZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBvdmVycmlk
ZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBRmxv
d1RvRWxlbWVudHMsIGNoaWxkcmVuKTsgfQotICAgIHZvaWQgYXJpYU93bnNFbGVtZW50cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBvdmVycmlkZSB7IGZpbGxD
aGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBT3duc0VsZW1lbnRz
LCBjaGlsZHJlbik7IH0KLSAgICBib29sIGhhc1BvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIYXNQb3B1cCk7IH0KLSAgICBT
dHJpbmcgcG9wdXBWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpQb3B1cFZhbHVlKTsgfQotICAgIGJvb2wgcHJlc3NlZElz
UHJlc2VudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6UHJlc3NlZElzUHJlc2VudCk7IH0KLSAgICBib29sIGFyaWFJc011bHRpbGlu
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6QVJJQUlzTXVsdGlsaW5lKTsgfQotICAgIFN0cmluZyBpbnZhbGlkU3RhdHVzKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OkludmFsaWRTdGF0dXMpOyB9Ci0gICAgYm9vbCBzdXBwb3J0c0V4cGFuZGVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0
c0V4cGFuZGVkKTsgfQotICAgIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uIHNvcnREaXJlY3Rp
b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5U29y
dERpcmVjdGlvbj4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlNvcnREaXJlY3Rp
b24pKTsgfQotICAgIGJvb2wgY2FudmFzSGFzRmFsbGJhY2tDb250ZW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDYW52YXNIYXNG
YWxsYmFja0NvbnRlbnQpOyB9Ci0gICAgYm9vbCBzdXBwb3J0c1JhbmdlVmFsdWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBv
cnRzUmFuZ2VWYWx1ZSk7IH0KLSAgICBTdHJpbmcgaWRlbnRpZmllckF0dHJpYnV0ZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJ
ZGVudGlmaWVyQXR0cmlidXRlKTsgfQotICAgIFN0cmluZyBsaW5rUmVsVmFsdWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TGlu
a1JlbFZhbHVlKTsgfQotICAgIHZvaWQgY2xhc3NMaXN0KFZlY3RvcjxTdHJpbmc+JikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZSBjdXJyZW50U3RhdGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Q3VycmVudFN0
YXRlPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q3VycmVudFN0YXRlKSk7IH0K
LSAgICBTdHJpbmcgY3VycmVudFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkN1cnJlbnRWYWx1ZSk7IH0KLSAgICBib29s
IHN1cHBvcnRzQ3VycmVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNDdXJyZW50KTsgfQotICAgIGNvbnN0IFN0cmlu
ZyBrZXlTaG9ydGN1dHNWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpLZXlTaG9ydGN1dHNWYWx1ZSk7IH0KLSAgICBib29s
IHN1cHBvcnRzU2V0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNTZXRTaXplKTsgfQotICAgIGJvb2wgc3VwcG9y
dHNQb3NJblNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6U3VwcG9ydHNQb3NJblNldCk7IH0KLSAgICBpbnQgc2V0U2l6ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpT
ZXRTaXplKTsgfQotICAgIGludCBwb3NJblNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlu
dEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpQb3NJblNldCk7IH0KLSAgICBib29sIHN1
cHBvcnRzQVJJQURyb3BwaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0FSSUFEcm9wcGluZyk7IH0KLSAgICBib29s
IHN1cHBvcnRzQVJJQURyYWdnaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0FSSUFEcmFnZ2luZyk7IH0KLSAgICBi
b29sIGlzQVJJQUdyYWJiZWQoKSBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OklzQVJJQUdyYWJiZWQpOyB9Ci0gICAgVmVjdG9yPFN0cmluZz4gZGV0
ZXJtaW5lQVJJQURyb3BFZmZlY3RzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdmVjdG9yQXR0cmlidXRl
VmFsdWU8U3RyaW5nPihBWFByb3BlcnR5TmFtZTo6QVJJQURyb3BFZmZlY3RzKTsgfQotICAgIEFY
Q29yZU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdCBv
dmVycmlkZTsKLSAgICBBWENvcmVPYmplY3QqIGZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBBWENvcmVPYmplY3QqIHBhcmVudE9iamVjdCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHBhcmVudE9iamVjdFVuaWdub3JlZCgpOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBwYXJl
bnRPYmplY3RVbmlnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGxpbmtlZFVJRWxl
bWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgY29uc3Qgb3ZlcnJp
ZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGlua2Vk
VUlFbGVtZW50cywgY2hpbGRyZW4pOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiB0aXRsZVVJRWxlbWVu
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpUaXRsZVVJRWxlbWVudCk7IH0KLSAgICBib29sIGV4cG9zZXNUaXRsZVVJRWxlbWVu
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6RXhwb3Nlc1RpdGxlVUlFbGVtZW50KTsgfQotICAgIEFYQ29yZU9iamVjdCogc2Nyb2xs
QmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbikgb3ZlcnJpZGU7Ci0gICAgQWNjZXNzaWJpbGl0
eVJvbGUgYXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxBY2Nlc3NpYmlsaXR5Um9sZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OkFSSUFSb2xlQXR0cmlidXRlKSk7IH0KLSAgICBTdHJpbmcgY29tcHV0ZWRMYWJlbCgpIG92ZXJy
aWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb21wdXRl
ZExhYmVsKTsgfQotICAgIGludCB0ZXh0TGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
aW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlRleHRMZW5ndGgpOyB9Ci0gICAgY29u
c3QgU3RyaW5nIHBsYWNlaG9sZGVyVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJp
bmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6UGxhY2Vob2xkZXJWYWx1ZSk7IH0KLSAg
ICBTdHJpbmcgZXhwYW5kZWRUZXh0VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJp
bmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RXhwYW5kZWRUZXh0VmFsdWUpOyB9Ci0g
ICAgYm9vbCBzdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0V4cGFuZGVkVGV4
dFZhbHVlKTsgfQotICAgIHZvaWQgY29sb3JWYWx1ZShpbnQmLCBpbnQmLCBpbnQmKSBjb25zdCBv
dmVycmlkZTsKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Um9sZT4oaW50QXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVWYWx1ZSkpOyB9Ci0gICAgU3RyaW5nIHJvbGVQbGF0Zm9y
bVN0cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpSb2xlUGxhdGZvcm1TdHJpbmcpOyB9Ci0gICAgU3RyaW5nIHJvbGVEZXNj
cmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpSb2xlRGVzY3JpcHRpb24pOyB9Ci0gICAgU3RyaW5nIGFyaWFMYW5kbWFy
a1JvbGVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBUklBTGFuZG1hcmtSb2xlRGVzY3JpcHRpb24pOyB9Ci0g
ICAgYm9vbCBzdXBwb3J0c1ByZXNzQWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1ByZXNzQWN0aW9uKTsgfQot
ICAgIExheW91dFJlY3QgYm91bmRpbmdCb3hSZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
cmVjdEF0dHJpYnV0ZVZhbHVlPExheW91dFJlY3Q+KEFYUHJvcGVydHlOYW1lOjpCb3VuZGluZ0Jv
eFJlY3QpOyB9Ci0gICAgTGF5b3V0UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHJlY3RBdHRyaWJ1dGVWYWx1ZTxMYXlvdXRSZWN0PihBWFByb3BlcnR5TmFtZTo6RWxl
bWVudFJlY3QpOyB9Ci0gICAgSW50UG9pbnQgY2xpY2tQb2ludCgpIG92ZXJyaWRlIHsgcmV0dXJu
IGludFBvaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNsaWNrUG9pbnQpOyB9Ci0g
ICAgdm9pZCBhY2Nlc3NpYmlsaXR5VGV4dChWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+JiB0ZXh0
cykgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGNvbXB1dGVkUm9sZVN0cmluZygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpD
b21wdXRlZFJvbGVTdHJpbmcpOyB9Ci0gICAgYm9vbCBpc1ZhbHVlQXV0b2ZpbGxlZCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNW
YWx1ZUF1dG9maWxsZWQpOyB9Ci0gICAgYm9vbCBpc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OklzVmFsdWVBdXRvZmlsbEF2YWlsYWJsZSk7IH0KLSAgICBBdXRvRmlsbEJ1dHRvblR5cGUgdmFs
dWVBdXRvZmlsbEJ1dHRvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxBdXRvRmlsbEJ1dHRvblR5cGU+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpW
YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSkpOyB9Ci0gICAgdm9pZCBhcmlhVHJlZVJvd3MoQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5W
ZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQVRyZWVSb3dzLCBjaGlsZHJlbik7
IH0KLSAgICB2b2lkIGFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBjaGlsZHJlbikgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQVRyZWVJdGVtRGlzY2xvc2VkUm93cywgY2hpbGRyZW4p
OyB9Ci0gICAgdm9pZCBhcmlhVHJlZUl0ZW1Db250ZW50KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYgY2hpbGRyZW4pIG92ZXJyaWRlIHsgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OkFSSUFUcmVlSXRlbUNvbnRlbnQsIGNoaWxkcmVuKTsgfQotICAgIFVS
TCB1cmwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB1cmxBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6VVJMKTsgfQotICAgIFN0cmluZyBhY2Nlc3NLZXkoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6QWNjZXNzS2V5KTsg
fQotICAgIFN0cmluZyBhY3Rpb25WZXJiKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFjdGlvblZlcmIpOyB9Ci0gICAgU3RyaW5n
IHJlYWRPbmx5VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6UmVhZE9ubHlWYWx1ZSk7IH0KLSAgICBTdHJpbmcgYXV0b0Nv
bXBsZXRlVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6QXV0b0NvbXBsZXRlVmFsdWUpOyB9Ci0gICAgT3B0aW9uU2V0PFNw
ZWFrQXM+IHNwZWFrQXNQcm9wZXJ0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG9wdGlvblNl
dEF0dHJpYnV0ZVZhbHVlPFNwZWFrQXM+KEFYUHJvcGVydHlOYW1lOjpTcGVha0FzKTsgfQotICAg
IGJvb2wgaXNNYXRoRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoRWxlbWVudCk7IH0KLSAgICBib29sIGlzTWF0
aEZyYWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc01hdGhGcmFjdGlvbik7IH0KLSAgICBib29sIGlzTWF0aEZlbmNlZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6SXNNYXRoRmVuY2VkKTsgfQotICAgIGJvb2wgaXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KTsgfQotICAgIGJvb2wgaXNNYXRoUm93KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc01hdGhSb3cpOyB9Ci0gICAgYm9vbCBpc01hdGhVbmRlck92ZXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFVuZGVy
T3Zlcik7IH0KLSAgICBib29sIGlzTWF0aFJvb3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFJvb3QpOyB9Ci0gICAgYm9v
bCBpc01hdGhTcXVhcmVSb290KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhTcXVhcmVSb290KTsgfQotICAgIGJvb2wgaXNN
YXRoVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNNYXRoVGV4dCk7IH0KLSAgICBib29sIGlzTWF0aE51bWJlcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNN
YXRoTnVtYmVyKTsgfQotICAgIGJvb2wgaXNNYXRoT3BlcmF0b3IoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aE9wZXJhdG9y
KTsgfQotICAgIGJvb2wgaXNNYXRoRmVuY2VPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoRmVuY2VPcGVyYXRv
cik7IH0KLSAgICBib29sIGlzTWF0aFNlcGFyYXRvck9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhTZXBhcmF0
b3JPcGVyYXRvcik7IH0KLSAgICBib29sIGlzTWF0aElkZW50aWZpZXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aElkZW50
aWZpZXIpOyB9Ci0gICAgYm9vbCBpc01hdGhUYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVGFibGUpOyB9Ci0gICAg
Ym9vbCBpc01hdGhUYWJsZVJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVGFibGVSb3cpOyB9Ci0gICAgYm9vbCBpc01h
dGhUYWJsZUNlbGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OklzTWF0aFRhYmxlQ2VsbCk7IH0KLSAgICBib29sIGlzTWF0aE11bHRp
c2NyaXB0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc01hdGhNdWx0aXNjcmlwdCk7IH0KLSAgICBib29sIGlzTWF0aFRva2VuKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc01hdGhUb2tlbik7IH0KLSAgICBBWENvcmVPYmplY3QqIG1hdGhSYWRpY2FuZE9iamVjdCgp
IG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpN
YXRoUmFkaWNhbmRPYmplY3QpOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBtYXRoUm9vdEluZGV4T2Jq
ZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6Ok1hdGhSb290SW5kZXhPYmplY3QpOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBtYXRoVW5kZXJP
YmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6TWF0aFVuZGVyT2JqZWN0KTsgfQotICAgIEFYQ29yZU9iamVjdCogbWF0aE92ZXJPYmpl
Y3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6TWF0aE92ZXJPYmplY3QpOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBtYXRoTnVtZXJhdG9yT2Jq
ZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6Ok1hdGhOdW1lcmF0b3JPYmplY3QpOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBtYXRoRGVub21p
bmF0b3JPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6TWF0aERlbm9taW5hdG9yT2JqZWN0KTsgfQotICAgIEFYQ29yZU9iamVjdCog
bWF0aEJhc2VPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6TWF0aEJhc2VPYmplY3QpOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBtYXRo
U3Vic2NyaXB0T2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6Ok1hdGhTdWJzY3JpcHRPYmplY3QpOyB9Ci0gICAgQVhDb3JlT2JqZWN0
KiBtYXRoU3VwZXJzY3JpcHRPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aFN1cGVyc2NyaXB0T2JqZWN0KTsgfQotICAgIFN0
cmluZyBtYXRoRmVuY2VkT3BlblN0cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoRmVuY2VkT3BlblN0cmluZyk7IH0K
LSAgICBTdHJpbmcgbWF0aEZlbmNlZENsb3NlU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhGZW5jZWRDbG9zZVN0
cmluZyk7IH0KLSAgICBpbnQgbWF0aExpbmVUaGlja25lc3MoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aExpbmVUaGlja25lc3Mp
OyB9Ci0gICAgYm9vbCBpc0Fub255bW91c01hdGhPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBbm9ueW1vdXNNYXRo
T3BlcmF0b3IpOyB9Ci0gICAgdm9pZCBtYXRoUHJlc2NyaXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11
bHRpc2NyaXB0UGFpcnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hdGhQb3N0c2NyaXB0cyhBY2Nl
c3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmKSBvdmVycmlkZTsKLSAgICBib29sIGZpbGVV
cGxvYWRCdXR0b25SZXR1cm5zVmFsdWVJblRpdGxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpGaWxlVXBsb2FkQnV0dG9uUmV0dXJu
c1ZhbHVlSW5UaXRsZSk7IH0KLSAgICBTdHJpbmcgc3BlZWNoSGludEF0dHJpYnV0ZVZhbHVlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OlNwZWVjaEhpbnQpOyB9Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uQXR0cmlidXRlVmFsdWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6RGVzY3JpcHRpb24pOyB9Ci0gICAgU3RyaW5nIGhlbHBUZXh0QXR0cmlidXRlVmFsdWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SGVscFRleHQpOyB9Ci0gICAgU3RyaW5nIHRpdGxlQXR0cmlidXRlVmFsdWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
VGl0bGUpOyB9Ci0jaWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGJvb2wgY2FyZXRCcm93c2luZ0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhcmV0QnJvd3NpbmdFbmFibGVkKTsg
fQotI2VuZGlmCi0gICAgQVhDb3JlT2JqZWN0KiBmb2N1c2FibGVBbmNlc3RvcigpIG92ZXJyaWRl
IHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpGb2N1c2FibGVB
bmNlc3Rvcik7IH0KLSAgICBBWENvcmVPYmplY3QqIGVkaXRhYmxlQW5jZXN0b3IoKSBvdmVycmlk
ZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RWRpdGFibGVB
bmNlc3Rvcik7IH0KLSAgICBBWENvcmVPYmplY3QqIGhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCkg
b3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okhp
Z2hlc3RFZGl0YWJsZUFuY2VzdG9yKTsgfQotICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBv
cmllbnRhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlPcmllbnRhdGlvbj4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok9yaWVu
dGF0aW9uKSk7IH0KLSAgICB1bnNpZ25lZCBoaWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkhpZXJh
cmNoaWNhbExldmVsKTsgfQotICAgIFN0cmluZyBsYW5ndWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpMYW5ndWFnZSk7IH0K
LSAgICBib29sIGNhbkhhdmVTZWxlY3RlZENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDYW5IYXZlU2VsZWN0ZWRDaGls
ZHJlbik7IH0KLSAgICB2b2lkIHNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiBjaGlsZHJlbikgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRDaGlsZHJlbiwgY2hpbGRyZW4pOyB9Ci0gICAgdm9p
ZCB2aXNpYmxlQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikg
b3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
VmlzaWJsZUNoaWxkcmVuLCBjaGlsZHJlbik7IH0KLSAgICB2b2lkIHRhYkNoaWxkcmVuKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIG92ZXJyaWRlIHsgZmlsbENoaWxkcmVu
VmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlRhYkNoaWxkcmVuLCBjaGlsZHJlbik7
IH0KLSAgICBib29sIGhhc0FSSUFWYWx1ZU5vdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGFzQVJJQVZhbHVlTm93KTsgfQotICAg
IFN0cmluZyB0YWdOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlRhZ05hbWUpOyB9Ci0gICAgY29uc3QgQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbihib29sIHVwZGF0ZUNoaWxkcmVuSWZOZWVkZWQgPSB0
cnVlKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKSBvdmVy
cmlkZSB7IH0KLSAgICBib29sIGlzRGV0YWNoZWRGcm9tUGFyZW50KCkgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBzdXBwb3J0c0xpdmVSZWdpb24oYm9vbCA9IHRydWUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNMaXZlUmVnaW9u
KTsgfQotICAgIGJvb2wgaXNJbnNpZGVMaXZlUmVnaW9uKGJvb2wgPSB0cnVlKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW5zaWRl
TGl2ZVJlZ2lvbik7IH0KLSAgICBjb25zdCBTdHJpbmcgbGl2ZVJlZ2lvblN0YXR1cygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpM
aXZlUmVnaW9uU3RhdHVzKTsgfQotICAgIGNvbnN0IFN0cmluZyBsaXZlUmVnaW9uUmVsZXZhbnQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6TGl2ZVJlZ2lvblJlbGV2YW50KTsgfQotICAgIGJvb2wgbGl2ZVJlZ2lvbkF0b21pYygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6TGl2ZVJlZ2lvbkF0b21pYyk7IH0KLSAgICBib29sIGlzQnVzeSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNCdXN5KTsgfQot
ICAgIGJvb2wgaXNJbmxpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0lubGluZVRleHQpOyB9Ci0gICAgLy8gU3BpbiBi
dXR0b24gc3VwcG9ydC4KLSAgICBBWENvcmVPYmplY3QqIGluY3JlbWVudEJ1dHRvbigpIG92ZXJy
aWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJbmNyZW1l
bnRCdXR0b24pOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBkZWNyZW1lbnRCdXR0b24oKSBvdmVycmlk
ZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RGVjcmVtZW50
QnV0dG9uKTsgfQotICAgIGJvb2wgaXNJbmNyZW1lbnRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNJbmNyZW1lbnRvcik7IH0K
LQotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdHJpbmdWYWx1ZSk7IH0KLQotICAgIC8v
IFBhcmFtZXRlcml6ZWQgYXR0cmlidXRlIHJldHJpZXZhbC4KLSAgICBWZWN0b3I8UmVmUHRyPFJh
bmdlPj4gZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSBjb25z
dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1UZXh0T3BlcmF0
aW9uKEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGNvbnN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSosIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlOwotCi0gICAgLy8gQXR0cmlidXRlcyBy
ZXRyaWV2ZWQgZnJvbSB0aGUgcm9vdCBub2RlIG9ubHkgc28gdGhhdCB0aGUgZGF0YSBpc24ndCBk
dXBsaWNhdGVkIG9uIGVhY2ggbm9kZS4KLSAgICB1aW50NjRfdCBzZXNzaW9uSUQoKSBjb25zdCBv
dmVycmlkZTsKLSAgICBTdHJpbmcgZG9jdW1lbnRVUkkoKSBjb25zdCBvdmVycmlkZTsKLSAgICBT
dHJpbmcgZG9jdW1lbnRFbmNvZGluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcHJldmVu
dEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgLy8gVE9E
TzogVGV4dCByYW5nZXMgYW5kIHNlbGVjdGlvbi4KLSAgICBQbGFpblRleHRSYW5nZSBzZWxlY3Rl
ZFRleHRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0K
LSAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7
IH0KLSAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAw
OyB9Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBWaXNpYmxlU2VsZWN0aW9uKCk7IH0KLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvblJhbmdlKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRp
b25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvblJhbmdlKCk7IH0KLSAgICBSZWZQdHI8UmFuZ2U+IGVsZW1lbnRSYW5nZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2
aXNpYmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcG9zaXRp
b25PZkxlZnRXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBw
b3NpdGlvbk9mUmlnaHRXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSBsZWZ0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KLSAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSByaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBW
aXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25S
YW5nZSgpOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugc2VudGVuY2VGb3JQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb25SYW5nZSgpOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcGFyYWdyYXBoRm9yUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFu
Z2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KLSAgICBWaXNpYmxl
UG9zaXRpb25SYW5nZSBsaW5lUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9Ci0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdl
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIFN0cmluZyBzdHJpbmdG
b3JSYW5nZShSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsg
fQotICAgIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAg
ICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQotICAgIGludCBsZW5ndGhGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KLSAgICB2b2lkIHNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IH0KLSAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yQm91bmRzKGNvbnN0IEludFJlY3QmLCBBY2Nlc3NpYmls
aXR5VmlzaWJsZVBvc2l0aW9uRm9yQm91bmRzKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsgfQotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHRWaXNpYmxlUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNWaXNpYmxlUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFdvcmRFbmQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KLSAgICBW
aXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkU3RhcnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KLSAgICBWaXNpYmxl
UG9zaXRpb24gbmV4dExpbmVFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQotICAgIFZpc2libGVQb3Np
dGlvbiBwcmV2aW91c0xpbmVTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIG5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQotICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91c1BhcmFncmFwaFN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0K
LSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgodW5zaWduZWQsIGJv
b2wgLypsYXN0SW5kZXhPSyAqLykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQotICAgIGludCBp
bmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiAwOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0
Rm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbnVsbHB0cjsgfQotICAgIGludCBsaW5lRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgIFBsYWluVGV4dFJhbmdlIHBs
YWluVGV4dFJhbmdlRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9Ci0gICAg
aW50IGluZGV4KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IDA7IH0KLSAgICB2b2lkIGxpbmVCcmVha3MoVmVjdG9yPGludD4mKSBjb25zdCBvdmVycmlkZSB7
IH0KLSAgICBQbGFpblRleHRSYW5nZSBkb0FYUmFuZ2VGb3JMaW5lKHVuc2lnbmVkKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9Ci0gICAgUGxhaW5UZXh0UmFuZ2Ug
ZG9BWFJhbmdlRm9yUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBQbGFpblRleHRSYW5nZSgpOyB9Ci0gICAgUGxhaW5UZXh0UmFuZ2UgZG9BWFJhbmdlRm9y
SW5kZXgodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7
IH0KLSAgICBQbGFpblRleHRSYW5nZSBkb0FYU3R5bGVSYW5nZUZvckluZGV4KHVuc2lnbmVkKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9Ci0gICAgU3RyaW5nIGRv
QVhTdHJpbmdGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFN0cmluZygpOyB9Ci0gICAgSW50UmVjdCBkb0FYQm91bmRzRm9yUmFuZ2UoY29uc3Qg
UGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAg
ICBJbnRSZWN0IGRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IFBs
YWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAg
dW5zaWduZWQgZG9BWExpbmVGb3JJbmRleCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyByZXR1cm4gMDsg
fQotCi0gICAgLy8gQXR0cmlidXRlIHNldHRlcnMuCi0gICAgdm9pZCBzZXRBUklBR3JhYmJlZChi
b29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldElzRXhwYW5kZWQoYm9vbCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRWYWx1ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZChi
b29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNlbGVjdGVkUm93cyhBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEZvY3VzZWQoYm9vbCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0jaWYgUExB
VEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHZvaWQgc2V0Q2FyZXRC
cm93c2luZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIHNldFByZXZl
bnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBUT0RP
OiBGdW5jdGlvbnMKLSAgICBTdHJpbmcgdGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4
dFVuZGVyRWxlbWVudE1vZGUgPSBBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoKSkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICBSZWZQdHI8UmFuZ2U+IGdl
dE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYsIEFjY2Vzc2liaWxpdHlTZWFy
Y2hEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBGbG9h
dFJlY3QgY29udmVydEZyYW1lVG9TcGFjZShjb25zdCBGbG9hdFJlY3QmLCBBY2Nlc3NpYmlsaXR5
Q29udmVyc2lvblNwYWNlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQot
ICAgIHZvaWQgaW5jcmVtZW50KCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkZWNyZW1lbnQoKSBv
dmVycmlkZSB7IH0KLSAgICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGUoKSBjb25zdCBvdmVycmlk
ZSB7IH0KLSAgICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoY29uc3QgSW50
UmVjdCYpIGNvbnN0IG92ZXJyaWRlIHsgfQotICAgIHZvaWQgc2Nyb2xsVG9HbG9iYWxQb2ludChj
b25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgfQotICAgIGJvb2wgcmVwbGFjZVRleHRJ
blJhbmdlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFBsYWluVGV4dFJhbmdlJikgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgbWFr
ZVJhbmdlVmlzaWJsZShjb25zdCBQbGFpblRleHRSYW5nZSYpIG92ZXJyaWRlIHsgfQotICAgIGJv
b2wgcHJlc3MoKSBvdmVycmlkZTsKLSAgICBib29sIHBlcmZvcm1EZWZhdWx0QWN0aW9uKCkgb3Zl
cnJpZGU7Ci0KLSAgICAvLyBGdW5jdGlvbnMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9u
IGFuIGlzb2xhdGVkIHRyZWUgb2JqZWN0LiBBU1NFUlQgdGhhdCB0aGVzZSBhcmUgbm90IHJlYWNo
ZWQ7Ci0gICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBib29sIGlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJv
b2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBp
c0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0Fj
Y2Vzc2liaWxpdHlTVkdSb290KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0FjY2Vzc2li
aWxpdHlTVkdFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0F0dGFjaG1lbnRF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc05hdGl2ZUltYWdlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc0NvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEFY
Q29yZU9iamVjdCogcGFzc3dvcmRGaWVsZE9yQ29udGFpbmluZ1Bhc3N3b3JkRmllbGQoKSBvdmVy
cmlkZTsKLSAgICBib29sIGlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBib29sIGlzTmF0aXZlTGlzdEJveCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNMaXN0
Qm94T3B0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1NsaWRlclRodW1iKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0lucHV0U2xpZGVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc0xhYmVsKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0RhdGFUYWJsZSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNJbWFnZU1hcExpbmsoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIGlzTmF0aXZlU3BpbkJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJv
b2wgaXNTcGluQnV0dG9uUGFydCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNNb2NrT2Jq
ZWN0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01lZGlhT2JqZWN0KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBpc0FSSUFUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IGJvb2wgaXNOb25OYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
aXNCbG9ja3F1b3RlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0xhbmRtYXJrKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0ZpZ3VyZUVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGlzSG92ZXJlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNJbmRldGVybWluYXRlKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNMb2FkZWQpOyB9Ci0gICAg
Ym9vbCBpc09uU2NyZWVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc09mZlNjcmVlbigp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNQcmVzc2VkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc1VudmlzaXRlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNMaW5rZWQo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIGJvb2wgaXNDb2xsYXBzZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzU2VsZWN0
ZWRPcHRpb25BY3RpdmUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc0JvbGRGb250KCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNJdGFsaWNGb250KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBoYXNNaXNzcGVsbGluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaGFz
UGxhaW5UZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNTYW1lRm9udChSZW5kZXJP
YmplY3QqKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc1NhbWVGb250Q29sb3IoUmVuZGVy
T2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNTYW1lU3R5bGUoUmVuZGVyT2Jq
ZWN0KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1N0YXRpY1RleHQoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIGhhc1VuZGVybGluZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
aGFzSGlnaGxpZ2h0aW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRWxlbWVudCogZWxlbWVudCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIE5vZGUqIG5vZGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdEluY2x1c2lvbiBkZWZhdWx0T2JqZWN0SW5jbHVzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgZmxvYXQgc3RlcFZhbHVlRm9yUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICBB
WENvcmVPYmplY3QqIHNlbGVjdGVkTGlzdEl0ZW0oKSBvdmVycmlkZTsKLSAgICB2b2lkIGFyaWFB
Y3RpdmVEZXNjZW5kYW50UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGFyaWFDb250cm9sc1JlZmVyZW5jaW5n
RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBhcmlhRGVzY3JpYmVkQnlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3ImKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGFyaWFEZXNjcmliZWRCeVJlZmVyZW5jaW5n
RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBhcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcmlhRXJyb3JNZXNzYWdlUmVm
ZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIGFyaWFGbG93VG9SZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYXJpYUxhYmVsbGVk
QnlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIGFyaWFMYWJlbGxlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGFyaWFPd25zUmVmZXJl
bmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIGhhc0RhdGFsaXN0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzdXBw
b3J0c0hhc1BvcHVwKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzdXBwb3J0c1ByZXNzZWQo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHN1cHBvcnRzQ2hlY2tlZCgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgaWdub3JlZEZyb21Nb2RhbFByZXNlbmNlKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBpc01vZGFsRGVzY2VuZGFudChOb2RlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc01vZGFsTm9kZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEFYQ29yZU9iamVjdCogZWxl
bWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgQVhDb3JlT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQVhD
b3JlT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBBWENvcmVPYmplY3Qq
IHByZXZpb3VzU2libGluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgIEFYQ29yZU9iamVjdCogbmV4
dFNpYmxpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBBWENvcmVPYmplY3QqIG5leHRTaWJsaW5n
VW5pZ25vcmVkKGludCBsaW1pdCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQVhDb3JlT2JqZWN0KiBw
cmV2aW91c1NpYmxpbmdVbmlnbm9yZWQoaW50IGxpbWl0KSBjb25zdCBvdmVycmlkZTsKLSAgICBB
WENvcmVPYmplY3QqIHBhcmVudE9iamVjdElmRXhpc3RzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc0Rlc2NlbmRhbnRPZkJhcnJlblBhcmVudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJv
b2wgaXNEZXNjZW5kYW50T2ZSb2xlKEFjY2Vzc2liaWxpdHlSb2xlKSBjb25zdCBvdmVycmlkZTsK
LSAgICBBWENvcmVPYmplY3QqIG9ic2VydmFibGVPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBBWENvcmVPYmplY3QqIGNvcnJlc3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgQVhDb3JlT2JqZWN0KiBjb3JyZXNwb25kaW5nQ29udHJvbEZvckxh
YmVsRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNQcmVzZW50YXRpb25hbENo
aWxkT2ZBcmlhUm9sZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgYXJpYVJvbGVIYXNQcmVz
ZW50YXRpb25hbENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpbmhlcml0c1By
ZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QWNjZXNzaWJs
ZU5hbWUoY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFzQXR0cmlidXRl
c1JlcXVpcmVkRm9ySW5jbHVzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGFjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyB0aXRsZSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBoZWxwVGV4dCgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIGJvb2wgaXNBUklBU3RhdGljVGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyB0
ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYXJpYURlc2NyaWJlZEJ5QXR0cmlidXRlKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBhY2Nlc3NpYmxlTmFtZURlcml2ZXNGcm9tQ29udGVu
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRlKFZlY3Rv
cjxFbGVtZW50Kj4mLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
QVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEVsZW1l
bnQqIGFuY2hvckVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBFbGVtZW50KiBhY3Rpb25F
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGF0aCBlbGVtZW50UGF0aCgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgc3VwcG9ydHNQYXRoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1BhdGgpOyB9Ci0gICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBXaWRnZXQqIHdpZGdldCgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFdpZGdldCogd2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQ
YWdlKiBwYWdlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgRnJhbWVWaWV3KiBkb2N1bWVudEZyYW1lVmlldygpIGNvbnN0IG92
ZXJyaWRlOwotICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEZyYW1lKiBt
YWluRnJhbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBEb2N1bWVudCogdG9wRG9jdW1lbnQoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3QW5jZXN0b3IoKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpIG92ZXJyaWRlOwotICAgIHZv
aWQgdGV4dENoYW5nZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlS
b2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZHJlbigpIG92ZXJyaWRlOwotICAgIHZv
aWQgYWRkQ2hpbGQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnNlcnRDaGls
ZChBWENvcmVPYmplY3QqLCB1bnNpZ25lZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVSb2xlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5IYXZlQ2hpbGRy
ZW4oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc0NoaWxkcmVuKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXROZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKSBvdmVycmlkZTsKLSAgICB2
b2lkIHNldE5lZWRzVG9VcGRhdGVTdWJ0cmVlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhckNo
aWxkcmVuKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBuZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIGRldGFjaEZyb21QYXJlbnQoKSBvdmVycmlkZTsKLSAgICBi
b29sIHNob3VsZEZvY3VzQWN0aXZlRGVzY2VuZGFudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEFY
Q29yZU9iamVjdCogYWN0aXZlRGVzY2VuZGFudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQg
aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRs
ZUFyaWFFeHBhbmRlZENoYW5nZWQoKSBvdmVycmlkZTsKLSAgICBib29sIGlzRGVzY2VuZGFudE9m
T2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNB
bmNlc3Rvck9mT2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCopIGNvbnN0IG92ZXJyaWRlOwotICAg
IEFYQ29yZU9iamVjdCogZmlyc3RBbm9ueW1vdXNCbG9ja0NoaWxkKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBoYXNBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIGNvbnN0IEF0b21TdHJpbmcmIGdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWVGb3JNU0FBKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHN0cmluZ1JvbGVGb3JNU0FBKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgU3RyaW5nIG5hbWVGb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3Ry
aW5nIGRlc2NyaXB0aW9uRm9yTVNBQSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEFjY2Vzc2liaWxp
dHlSb2xlIHJvbGVWYWx1ZUZvck1TQUEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgcGFz
c3dvcmRGaWVsZFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQVhDb3JlT2JqZWN0KiBsaXZl
UmVnaW9uQW5jZXN0b3IoYm9vbCBleGNsdWRlSWZPZmYgPSB0cnVlKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIGhhc0NvbnRlbnRFZGl0YWJsZUF0dHJpYnV0ZVNldCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGJvb2wgc3VwcG9ydHNSZWFkT25seSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
c3VwcG9ydHNBdXRvQ29tcGxldGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHN1cHBvcnRz
QVJJQUF0dHJpYnV0ZXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHNjcm9sbEJ5UGFnZShT
Y3JvbGxCeVBhZ2VEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlOwotICAgIEludFBvaW50IHNjcm9s
bFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgSW50U2l6ZSBzY3JvbGxDb250ZW50c1Np
emUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRSZWN0IHNjcm9sbFZpc2libGVDb250ZW50UmVj
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZShjb25zdCBT
Y3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgbGFz
dEtub3duSXNJZ25vcmVkVmFsdWUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExhc3RLbm93bklz
SWdub3JlZFZhbHVlKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgbm90aWZ5SWZJZ25vcmVkVmFs
dWVDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhTY3JpcHRPYmplY3QoQWNjZXNz
aWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBlKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlz
TWF0aE11bHRpc2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RU
eXBlKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzQVhIaWRkZW4oKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIGlzRE9NSGlkZGVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0hp
ZGRlbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgb3ZlcnJpZGVBdHRhY2htZW50UGFyZW50
KEFYQ29yZU9iamVjdCogcGFyZW50KSBvdmVycmlkZTsKLSAgICBib29sIGFjY2Vzc2liaWxpdHlJ
Z25vcmVBdHRhY2htZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVj
dEluY2x1c2lvbiBhY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09iamVjdCgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaGFzQXBwbGVQREZBbm5vdGF0aW9uQXR0cmlidXRlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgY29uc3QgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcqIGFuY2VzdG9yQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcoYm9vbCBpbmNsdWRlU2VsZikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YShBY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
RnJvbVBhcmVudERhdGEmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFySXNJZ25vcmVkRnJvbVBh
cmVudERhdGEoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldElzSWdub3JlZEZyb21QYXJlbnREYXRh
Rm9yQ2hpbGQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZUJhY2tp
bmdTdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgQVhJRCBtX3BhcmVudCB7IEludmFsaWRBWElEIH07
Ci0gICAgQVhJRCBtX2lkIHsgSW52YWxpZEFYSUQgfTsKLSAgICBib29sIG1faW5pdGlhbGl6ZWQg
eyBmYWxzZSB9OwotICAgIEFYSXNvbGF0ZWRUcmVlSUQgbV90cmVlSWRlbnRpZmllcjsKLSAgICBS
ZWZQdHI8QVhJc29sYXRlZFRyZWU+IG1fY2FjaGVkVHJlZTsKLSAgICBWZWN0b3I8QVhJRD4gbV9j
aGlsZHJlbklEczsKLSAgICBWZWN0b3I8UmVmUHRyPEFYQ29yZU9iamVjdD4+IG1fY2hpbGRyZW47
Ci0KLSAgICBIYXNoTWFwPEFYUHJvcGVydHlOYW1lLCBBdHRyaWJ1dGVWYWx1ZVZhcmlhbnQsIFdU
Rjo6SW50SGFzaDxBWFByb3BlcnR5TmFtZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8QVhQ
cm9wZXJ0eU5hbWU+PiBtX2F0dHJpYnV0ZU1hcDsKLSAgICBMb2NrIG1fYXR0cmlidXRlTWFwTG9j
azsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRSgoQUND
RVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCmluZGV4IGI3NGU2ZDk5ODQ5OWNkMTg4
YzdiNTAzMmUxOGZmMzEwOTAwNDM1OWIuLmY1ZGExNmEwZDZkNmYzODZmMTU4M2M4ZDkzOTUyY2Jm
MDcxOGU2NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FY
T2JqZWN0Q2FjaGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
QVhPYmplY3RDYWNoZU1hYy5tbQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEFDQ0VT
U0lCSUxJVFkpICYmIFBMQVRGT1JNKE1BQykKIAotI2ltcG9ydCAiQVhJc29sYXRlZFRyZWVOb2Rl
LmgiCisjaW1wb3J0ICJBWElzb2xhdGVkT2JqZWN0LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbXBvcnQgIlJlbmRl
ck9iamVjdC5oIgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>