<?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>166449</bug_id>
          
          <creation_ts>2016-12-22 17:11:47 -0800</creation_ts>
          <short_desc>[iOS] Move QuickLook from WebCore/platform to WebCore/loader</short_desc>
          <delta_ts>2016-12-22 18:25:16 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>japhet</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1262467</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-12-22 17:11:47 -0800</bug_when>
    <thetext>[iOS] Move QuickLook from WebCore/platform to WebCore/loader</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262475</commentid>
    <comment_count>1</comment_count>
      <attachid>297692</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-12-22 17:17:37 -0800</bug_when>
    <thetext>Created attachment 297692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262478</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-22 17:18:54 -0800</bug_when>
    <thetext>Attachment 297692 did not pass style-queue:


ERROR: Source/WebCore/loader/ios/QuickLook.mm:64:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/ios/QuickLook.mm:75:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/ios/QuickLook.mm:382:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/ios/QuickLook.mm:383:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/ios/QuickLook.mm:384:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/ios/QuickLook.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 6 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262480</commentid>
    <comment_count>3</comment_count>
      <attachid>297692</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-22 17:20:22 -0800</bug_when>
    <thetext>Comment on attachment 297692
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262506</commentid>
    <comment_count>4</comment_count>
      <attachid>297692</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-22 18:25:12 -0800</bug_when>
    <thetext>Comment on attachment 297692
Patch

Clearing flags on attachment: 297692

Committed r210129: &lt;http://trac.webkit.org/changeset/210129&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262507</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-22 18:25:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297692</attachid>
            <date>2016-12-22 17:17:37 -0800</date>
            <delta_ts>2016-12-22 18:25:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166449-20161222171632.patch</filename>
            <type>text/plain</type>
            <size>59094</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU1ZDE4YzNjNDQ3YjJh
MjNjNzQ0YWFlN2I1ODcyN2FlYWRjZWQyOS4uZmRjOTQ4ZGM0NWM2Y2IyMjBjOGU0OWNjNzhjZDUw
YjBiM2I1NDk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTEyLTIyICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBNb3ZlIFF1aWNrTG9v
ayBmcm9tIFdlYkNvcmUvcGxhdGZvcm0gdG8gV2ViQ29yZS9sb2FkZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ0OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFF1aWNrTG9vay5tbSBrbm93cyBhYm91
dCBSZXNvdXJjZUxvYWRlciwgc28gaXQncyBhIGxheWVyaW5nIHZpb2xhdGlvbiB0byBoYXZlIGl0
IGluCisgICAgICAgIHBsYXRmb3JtLy4gTW92ZSBpdCB0byBsb2FkZXIvaW9zLy4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIv
aW9zL1F1aWNrTG9vay5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9pb3MvUXVpY2tMb29rLmguCisgICAgICAgICogbG9hZGVyL2lvcy9RdWlja0xvb2subW06
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xv
b2subW0uCisKIDIwMTYtMTItMjIgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgog
CiAgICAgICAgIEJ5cGFzcyBwb3AtdXAgYmxvY2tlciBmcm9tIGNyb3NzLW9yaWdpbiBvciBzYW5k
Ym94ZWQgZnJhbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzYjU2OTlmNGI4ZTUwZDUwZmEyMTk2NDhkMGJiYmZlZDA1YWJhNzU2
Li4wNjUxZjkyOTlkY2ExMzgxMzliMmNmY2U5Mjk0ODBiMGI3ZDhmMjdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjkwLDgg
KzE2OTAsNiBAQAogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDE1MjkyRjBF
MUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDE1MjkyRDBFMUFFOEEwMDBDNEEy
RDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgKi87IH07CiAJCTQ0MkFCQ0Q2MTdEOTI2
MkYwMEQzMDcxNSAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudENGTmV0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MkFCQ0Q1MTdEOTI2MkYwMEQz
MDcxNSAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudENGTmV0LmNwcCAqLzsgfTsKLQkJNDQyQUY3
QTkxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQyQUY3QTcxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNr
TG9vay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTQ0MkFGN0FBMTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2subW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDJBRjdBODEwMkNEREVBMDA4RkQ0RDMg
LyogUXVpY2tMb29rLm1tICovOyB9OwogCQk0NDM4MTdGRjFBOTFCMkY4MDA2RTA0RjIgLyogQ29y
ZU1lZGlhU29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDQzODE3RkQxQTkxQjJGODAwNkUwNEYyIC8qIENvcmVNZWRpYVNvZnRMaW5rLmNw
cCAqLzsgfTsKIAkJNDQzODE4MDAxQTkxQjJGODAwNkUwNEYyIC8qIENvcmVNZWRpYVNvZnRMaW5r
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDM4MTdG
RTFBOTFCMkY4MDA2RTA0RjIgLyogQ29yZU1lZGlhU29mdExpbmsuaCAqLzsgfTsKIAkJNDQzOTE3
RkYxQTkxQjJGODAwNkUwNEYyIC8qIFF1aWNrTG9va1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzOTE3RkQxQTkxQjJGODAwNkUwNEYy
IC8qIFF1aWNrTG9va1NvZnRMaW5rLm1tICovOyB9OwpAQCAtMzkyOCw2ICszOTI2LDggQEAKIAkJ
QTE0OTc4NkUxQUJBRjMzODAwQ0VGN0U0IC8qIENvbnRlbnRGaWx0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0OTc4NkMxQUJBRjMzODAwQ0VG
N0U0IC8qIENvbnRlbnRGaWx0ZXIuY3BwICovOyB9OwogCQlBMTQ5Nzg2RjFBQkFGMzM4MDBDRUY3
RTQgLyogQ29udGVudEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTE0OTc4NkQxQUJBRjMzODAwQ0VGN0U0IC8qIENvbnRlbnRGaWx0ZXIuaCAq
LzsgfTsKIAkJQTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0OTc4
NzAxQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oICovOyB9OworCQlB
MTVFMzFGMzFFMENCMEIyMDA0QjM3MUMgLyogUXVpY2tMb29rLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1RTMxRjIxRTBDQjBBQTAwNEIzNzFDIC8q
IFF1aWNrTG9vay5tbSAqLzsgfTsKKwkJQTE1RTMxRjQxRTBDQjBCNTAwNEIzNzFDIC8qIFF1aWNr
TG9vay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE1
RTMxRjExRTBDQjBBQTAwNEIzNzFDIC8qIFF1aWNrTG9vay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExN0M4MTIyMEYyQTVDRjcwMDVEQUFFQiAv
KiBIVE1MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFj
dG9yeS5jcHAgKi87IH07CiAJCUExN0M4MTIzMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVu
dEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExN0M4MTIxMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsK
IAkJQTE4MkQ1QjcxQkU3MjI2NzAwODdBN0NDIC8qIFNldHRpbmdzQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTgyRDVCNjFCRTcyMjYyMDA4
N0E3Q0MgLyogU2V0dGluZ3NDb2NvYS5tbSAqLzsgfTsKQEAgLTg4OTEsOCArODg5MSw2IEBACiAJ
CTQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8q
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0MkFCQ0Q1MTdEOTI2MkYwMEQzMDcxNSAvKiBTeW5jaHJvbm91c0xvYWRlckNs
aWVudENGTmV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50Q0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0NDJBRjdBNzEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFF1aWNrTG9vay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0NDJBRjdBODEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUXVpY2tMb29rLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NDM4MTdGRDFBOTFCMkY4MDA2RTA0RjIgLyogQ29yZU1lZGlhU29m
dExpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29yZU1lZGlh
U29mdExpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDM4MTdGRTFBOTFC
MkY4MDA2RTA0RjIgLyogQ29yZU1lZGlhU29mdExpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29yZU1lZGlhU29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDQzOTE3RkQxQTkxQjJGODAwNkUwNEYyIC8qIFF1aWNrTG9va1NvZnRMaW5rLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUXVpY2tMb29rU29mdExpbmsu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTYwMCw2ICsxMTU5OCw4IEBACiAJ
CUExNDk3ODZDMUFCQUYzMzgwMENFRjdFNCAvKiBDb250ZW50RmlsdGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRGaWx0ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMTQ5Nzg2RDFBQkFGMzM4MDBDRUY3RTQgLyogQ29udGVudEZp
bHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RmlsdGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNDk3ODcwMUFCQUYzQTUwMENFRjdFNCAv
KiBQbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxhdGZvcm1Db250ZW50RmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUExNUUzMUYxMUUwQ0IwQUEwMDRCMzcxQyAvKiBRdWlja0xvb2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUXVpY2tMb29rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUExNUUzMUYyMUUwQ0IwQUEwMDRCMzcxQyAvKiBRdWlja0xvb2subW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBRdWlja0xvb2subW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUExN0M4MTIwMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZh
Y3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEVsZW1l
bnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjEwRjJB
NUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0NDIC8qIFNldHRpbmdzQ29jb2EubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXR0aW5nc0NvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY4MTcsOCArMTY4MTcsNiBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0
MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJT1MubW0gKi8sCi0JCQkJNDQyQUY3QTcxMDJDRERF
QTAwOEZENEQzIC8qIFF1aWNrTG9vay5oICovLAotCQkJCTQ0MkFGN0E4MTAyQ0RERUEwMDhGRDRE
MyAvKiBRdWlja0xvb2subW0gKi8sCiAJCQkJQTEwREJGNDYxOEY5MjMxNzAwMEQ3MEM2IC8qIFF1
aWNrTG9va0hhbmRsZUNsaWVudC5oICovLAogCQkJCTdFNDI4Q0U0MTNFMzQwN0YwMDNCNjYxQyAv
KiBSZXNvdXJjZUhhbmRsZUlPUy5tbSAqLywKIAkJCQk3RTdERTIwMTE5NUNFRkNEMDAzNTM2M0Ig
LyogUmVzb3VyY2VSZXF1ZXN0SU9TLm1tICovLApAQCAtMTk2MzYsNiArMTk2MzQsMTUgQEAKIAkJ
CXBhdGggPSB3YWs7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMTVFMzFG
MDFFMENCMDc1MDA0QjM3MUMgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBMTVFMzFGMTFFMENCMEFBMDA0QjM3MUMgLyogUXVpY2tMb29rLmgg
Ki8sCisJCQkJQTE1RTMxRjIxRTBDQjBBQTAwNEIzNzFDIC8qIFF1aWNrTG9vay5tbSAqLywKKwkJ
CSk7CisJCQlwYXRoID0gaW9zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
QTE3MjE4MjQxOURFMTgyQjAwNDY0RDE3IC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjMzNSw2ICsyMjM0Miw3IEBACiAJCQkJN0VFNjg0NzMx
MkQyNkU1NTAwRTc5NDE1IC8qIGNmICovLAogCQkJCTdFNERFMTBCMTk4QjEwODEwMDUxQ0IwMiAv
KiBjb2NvYSAqLywKIAkJCQk1MTI2RTZCNjBBMkUzQUVGMDA1QzI5RkEgLyogaWNvbiAqLywKKwkJ
CQlBMTVFMzFGMDFFMENCMDc1MDA0QjM3MUMgLyogaW9zICovLAogCQkJCTkzQTFFQUEyMEE1NjM0
RDgwMDY5NjBBMCAvKiBtYWMgKi8sCiAJCQkJQTE0OTc4NkMxQUJBRjMzODAwQ0VGN0U0IC8qIENv
bnRlbnRGaWx0ZXIuY3BwICovLAogCQkJCUExNDk3ODZEMUFCQUYzMzgwMENFRjdFNCAvKiBDb250
ZW50RmlsdGVyLmggKi8sCkBAIC0yNjA0OSw2ICsyNjA1Nyw3IEBACiAJCQkJMTIyMUUwNkQxQzAz
RDIyNDAwNkExQTAwIC8qIEpTQW5pbWF0aW9uVGltZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBRTk2QThCMUQxQTBEREQwMEI4Njc2OCAvKiBKU0FwcGxlUGF5UGF5bWVudEF1dGhvcml6ZWRF
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3MzAxRTAzQ0E0QTAwRTIzNUEyIC8qIEpT
TW9ja0NETUZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCUExNUUzMUY0MUUwQ0IwQjUwMDRC
MzcxQyAvKiBRdWlja0xvb2suaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTk2QThEMUQxQTBEREQw
MEI4Njc2OCAvKiBKU0FwcGxlUGF5UGF5bWVudE1ldGhvZFNlbGVjdGVkRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRTk2QThGMUQxQTBEREQwMEI4Njc2OCAvKiBKU0FwcGxlUGF5U2Vzc2lv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFOTZBOTExRDFBMERERDAwQjg2NzY4IC8qIEpTQXBw
bGVQYXlTaGlwcGluZ0NvbnRhY3RTZWxlY3RlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI3
MTgwLDcgKzI3MTg5LDYgQEAKIAkJCQkxMEZCMDg0QjE0RTE1QzdFMDBBM0RCOTggLyogUHVibGlj
VVJMTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwQTBCQ0EwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTI1MjNEMUExNjc2Q0Qw
MDg2NDQ4MCAvKiBRdWFydHpDb3JlU1BJLmggaW4gSGVhZGVycyAqLywKLQkJCQk0NDJBRjdBOTEw
MkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBEQkY0
NzE4RjkyMzE3MDAwRDcwQzYgLyogUXVpY2tMb29rSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzdGNENDQzFBMkQ0OEMxMDBCQjM5RjUgLyogUXVpY2tMb29rTWFjU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0NDM5MTgwMDFBOTFCMkY4MDA2RTA0RjIgLyogUXVpY2tMb29rU29m
dExpbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMzA4OTEsNyArMzA4OTksNiBAQAogCQkJCTAwODFG
RUZGMTZCMEEyQjYwMDhBQUE3QSAvKiBQdWJsaWNTdWZmaXhNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDREVFMzkzNzE3OTc0MjU5MDAxRDc1ODAgLyogUHVibGljVVJMTWFuYWdlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFt
ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0NDJBRjdBQTEwMkNEREVBMDA4RkQ0RDMgLyogUXVp
Y2tMb29rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQzOTE3RkYxQTkxQjJGODAwNkUwNEYyIC8q
IFF1aWNrTG9va1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcyQUUxRTYxODNDMDc0
MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzc5RTM3MTYxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTMxNTE1LDYgKzMxNTIyLDcgQEAKIAkJCQlDREEwN0ZCRDE4RTBBMTZB
MDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
REEwN0ZDMTE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTVENTk3NUI0MTk2MzVGMTEwMEQwMDg3OCAvKiBTeXN0ZW1WZXJzaW9u
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTE1RTMxRjMxRTBDQjBCMjAwNEIzNzFDIC8qIFF1aWNr
TG9vay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ2M0VCNjIyMUI4Nzg5RTAwMDk2RUQ1MSAvKiBU
YWdDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQ1MTI1MUYxMkQwMDNF
RjI2OSAvKiBUZWxlcGhvbmVJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDNTY0
QkExOEJBQzcyMDAwMUI5NjUyIC8qIFRlbGVwaG9uZU51bWJlckRldGVjdG9yQ29jb2EuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaW9zL1F1aWNr
TG9vay5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2lvcy9RdWlja0xvb2suaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42ZDcwOTAzMDVmZjAxZTAxZTIyMjJiOWFkMDliMzZlMDE3YTJkYzM3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2lvcy9RdWlja0xvb2suaApAQCAtMCwwICsxLDEy
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUXVpY2tMb29rX2gKKyNkZWZpbmUgUXVpY2tMb29r
X2gKKworI2lmIFVTRShRVUlDS19MT09LKQorCisjaW1wb3J0ICJRdWlja0xvb2tIYW5kbGVDbGll
bnQuaCIKKyNpbXBvcnQgIlJlc291cmNlUmVxdWVzdC5oIgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1
bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKworI2lmIFVTRShDRlVSTENPTk5FQ1RJ
T04pCisjaW5jbHVkZSAiQ0ZOZXR3b3JrU1BJLmgiCisjZW5kaWYKKworT0JKQ19DTEFTUyBOU0Rh
dGE7CitPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKK09CSkNfQ0xBU1MgTlNGaWxlSGFuZGxlOwor
T0JKQ19DTEFTUyBOU1NldDsKK09CSkNfQ0xBU1MgTlNTdHJpbmc7CitPQkpDX0NMQVNTIE5TVVJM
OworT0JKQ19DTEFTUyBOU1VSTENvbm5lY3Rpb247CitPQkpDX0NMQVNTIE5TVVJMUmVxdWVzdDsK
K09CSkNfQ0xBU1MgTlNVUkxSZXNwb25zZTsKK09CSkNfQ0xBU1MgUUxQcmV2aWV3Q29udmVydGVy
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFF1aWNrTG9va0hhbmRsZUNsaWVudDsK
K2NsYXNzIFJlc291cmNlSGFuZGxlOworY2xhc3MgUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBSZXNv
dXJjZVJlc3BvbnNlOworY2xhc3MgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlOworCitXRUJDT1JFX0VYUE9SVCBOU1NldCAqUUxQcmV2aWV3R2V0U3VwcG9y
dGVkTUlNRVR5cGVzU2V0KCk7CisKKy8vIFVzZWQgZm9yIHNldHRpbmcgdGhlIHBlcm1pc3Npb25z
IG9uIHRoZSBzYXZlZCBRTCBjb250ZW50CitOU0RpY3Rpb25hcnkgKlFMRmlsZUF0dHJpYnV0ZXMo
KTsKK05TRGljdGlvbmFyeSAqUUxEaXJlY3RvcnlBdHRyaWJ1dGVzKCk7CisKK1dFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwoTlNVUkwgKiwgaWQg
Y29udmVydGVyLCBOU1N0cmluZyAqZmlsZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgTlNTdHJpbmcg
KnFsUHJldmlld0NvbnZlcnRlckZpbGVOYW1lRm9yVVJMKE5TVVJMICopOworV0VCQ09SRV9FWFBP
UlQgTlNTdHJpbmcgKnFsUHJldmlld0NvbnZlcnRlclVUSUZvclVSTChOU1VSTCAqKTsKK1dFQkNP
UkVfRVhQT1JUIHZvaWQgcmVtb3ZlUUxQcmV2aWV3Q29udmVydGVyRm9yVVJMKE5TVVJMICopOwor
CitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiByZWdpc3RlclFMUHJldmll
d0NvbnZlcnRlcklmTmVlZGVkKE5TVVJMICosIE5TU3RyaW5nICptaW1lVHlwZSwgTlNEYXRhICop
OworCitjb25zdCBVUkwgc2FmZVFMVVJMRm9yRG9jdW1lbnRVUkxBbmRSZXNvdXJjZVVSTChjb25z
dCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMKTsKKworV0VCQ09S
RV9FWFBPUlQgY29uc3QgY2hhciogUUxQcmV2aWV3UHJvdG9jb2woKTsKKworV0VCQ09SRV9FWFBP
UlQgTlNTdHJpbmcgKmNyZWF0ZVRlbXBvcmFyeUZpbGVGb3JRdWlja0xvb2soTlNTdHJpbmcgKmZp
bGVOYW1lKTsKKworY2xhc3MgUXVpY2tMb29rSGFuZGxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShRdWlja0xvb2tIYW5kbGUpOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBib29sIHNob3VsZENyZWF0ZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOworCisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IGNyZWF0ZShSZXNvdXJjZUhhbmRs
ZSosIE5TVVJMQ29ubmVjdGlvbiAqLCBOU1VSTFJlc3BvbnNlICosIGlkIGRlbGVnYXRlKTsKKyNp
ZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UXVpY2tM
b29rSGFuZGxlPiBjcmVhdGUoUmVzb3VyY2VIYW5kbGUqLCBTeW5jaHJvbm91c1Jlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqLCBDRlVSTFJlc3BvbnNlUmVmKTsKKyNlbmRpZgor
ICAgIC8vIEZJWE1FOiBVc2Ugb2YgUmVzb3VyY2VMb2FkZXIgaGVyZSBpcyBhIHBsYXRmb3JtIHZp
b2xhdGlvbi4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFF1aWNr
TG9va0hhbmRsZT4gY3JlYXRlKFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgflF1aWNrTG9va0hhbmRsZSgpOworCisgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYpOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZGlkUmVjZWl2ZURhdGEoQ0ZEYXRhUmVmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRpZEZhaWwoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9u
c2UoKTsKKyNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQorICAgIENGVVJMUmVzcG9uc2VSZWYgY2ZS
ZXNwb25zZSgpOworI2VuZGlmCisKKyAgICB2b2lkIHNldENsaWVudChQYXNzUmVmUHRyPFF1aWNr
TG9va0hhbmRsZUNsaWVudD4gY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgcHJldmlld0ZpbGVOYW1lKCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIHByZXZpZXdVVEkoKSBjb25zdDsKKyAgICBOU1VSTCAqZmlyc3RSZXF1
ZXN0VVJMKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJlcXVlc3RVUkwuZ2V0KCk7IH0KKyAgICBX
RUJDT1JFX0VYUE9SVCBOU1VSTCAqcHJldmlld1JlcXVlc3RVUkwoKSBjb25zdDsKKyAgICBRTFBy
ZXZpZXdDb252ZXJ0ZXIgKmNvbnZlcnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udmVydGVyLmdl
dCgpOyB9CisKK3ByaXZhdGU6CisgICAgUXVpY2tMb29rSGFuZGxlKE5TVVJMICosIE5TVVJMQ29u
bmVjdGlvbiAqLCBOU1VSTFJlc3BvbnNlICosIGlkIGRlbGVnYXRlKTsKKworICAgIFJldGFpblB0
cjxOU1VSTD4gbV9maXJzdFJlcXVlc3RVUkw7CisgICAgUmV0YWluUHRyPFFMUHJldmlld0NvbnZl
cnRlcj4gbV9jb252ZXJ0ZXI7CisgICAgUmV0YWluUHRyPGlkPiBtX2RlbGVnYXRlOworICAgIGJv
b2wgbV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcjsKKyAgICBSZXRhaW5QdHI8TlNG
aWxlSGFuZGxlICo+IG1fcXVpY2tsb29rRmlsZUhhbmRsZTsKKyAgICBSZXRhaW5QdHI8TlNVUkxS
ZXNwb25zZT4gbV9uc1Jlc3BvbnNlOworICAgIFJlZlB0cjxRdWlja0xvb2tIYW5kbGVDbGllbnQ+
IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KFFVSUNLX0xPT0spCisKKyNlbmRpZiAvLyBRdWlja0xvb2tfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2lvcy9RdWlja0xvb2subW0gYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
aW9zL1F1aWNrTG9vay5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWRmM2RkNGJiZjE1MDg3ZDQ1MmI1M2Y4YThm
ZDMxZThjZTMzNjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2lv
cy9RdWlja0xvb2subW0KQEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUXVpY2tMb29rLmgiCisKKyNpZiBVU0UoUVVJQ0tfTE9P
SykKKworI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbXBvcnQgIkZpbGVTeXN0ZW1JT1Mu
aCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk5TRmlsZU1hbmFnZXJTUEkuaCIKKyNp
bXBvcnQgIlJlc291cmNlRXJyb3IuaCIKKyNpbXBvcnQgIlJlc291cmNlSGFuZGxlLmgiCisjaW1w
b3J0ICJSZXNvdXJjZUxvYWRlci5oIgorI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
LmgiCisjaW1wb3J0ICJTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUuaCIKKyNp
bXBvcnQgIldlYkNvcmVVUkxSZXNwb25zZUlPUy5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaW1wb3J0ICJRdWlj
a0xvb2tTb2Z0TGluay5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTlNTZXQgKldl
YkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU1NldD4+IHNldCA9IFFMUHJldmlld0dldFN1cHBv
cnRlZE1JTUVUeXBlcygpOworICAgIHJldHVybiBzZXQuZ2V0KCkuZ2V0KCk7Cit9CisKK05TRGlj
dGlvbmFyeSAqV2ViQ29yZTo6UUxGaWxlQXR0cmlidXRlcygpCit7CisgICAgLy8gU2V0IGZpbGUg
cGVybXMgdG8gb3duZXIgcmVhZC93cml0ZSBvbmx5CisgICAgTlNOdW1iZXIgKmZpbGVQT1NJWFBl
cm1pc3Npb25zID0gW05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOihXRUJfVVJFQUQgfCBXRUJf
VVdSSVRFKV07CisgICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IGFkb3B0TlMo
W1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVc2VyTmFtZSgpLCBOU0ZpbGVPd25lckFj
Y291bnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQ
T1NJWFBlcm1pc3Npb25zLCBOU0ZpbGVQb3NpeFBlcm1pc3Npb25zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHJdKS5sZWFrUmVmKCk7CisgICAgcmV0dXJu
IGRpY3Rpb25hcnk7Cit9CisKK05TRGljdGlvbmFyeSAqV2ViQ29yZTo6UUxEaXJlY3RvcnlBdHRy
aWJ1dGVzKCkKK3sKKyAgICAvLyBTZXQgZmlsZSBwZXJtcyB0byBvd25lciByZWFkL3dyaXRlL2V4
ZWN1dGUgb25seQorICAgIE5TTnVtYmVyICpkaXJlY3RvcnlQT1NJWFBlcm1pc3Npb25zID0gW05T
TnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOihXRUJfVVJFQUQgfCBXRUJfVVdSSVRFIHwgV0VCX1VF
WEVDKV07CisgICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IGFkb3B0TlMoW1tO
U0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VzZXJOYW1lKCksIE5TRmlsZU93
bmVyQWNjb3VudE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaXJlY3RvcnlQT1NJWFBlcm1pc3Npb25zLCBOU0ZpbGVQb3NpeFBlcm1pc3Npb25z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0
cl0pLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworc3RhdGljIExvY2sm
IHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRleCgpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPExvY2s+IG11dGV4OworICAgIHJldHVybiBtdXRleDsKK30KKworc3RhdGljIE5T
TXV0YWJsZURpY3Rpb25hcnkgKlFMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnkoKQoreworICAg
IHN0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworc3RhdGlj
IE5TTXV0YWJsZURpY3Rpb25hcnkgKlFMQ29udGVudERpY3Rpb25hcnkoKQoreworICAgIHN0YXRp
YyBOU011dGFibGVEaWN0aW9uYXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIGNvbnRlbnREaWN0aW9uYXJ5OworfQor
Cit2b2lkIFdlYkNvcmU6OmFkZFFMUHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9yVVJMKE5TVVJM
ICp1cmwsIGlkIGNvbnZlcnRlciwgTlNTdHJpbmcgKmZpbGVOYW1lKQoreworICAgIEFTU0VSVCh1
cmwpOworICAgIEFTU0VSVChjb252ZXJ0ZXIpOworICAgIExvY2tIb2xkZXIgbG9jayhxbFByZXZp
ZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7CisgICAgW1FMUHJldmlld0NvbnZlcnRlckRp
Y3Rpb25hcnkoKSBzZXRPYmplY3Q6Y29udmVydGVyIGZvcktleTp1cmxdOworICAgIFtRTENvbnRl
bnREaWN0aW9uYXJ5KCkgc2V0T2JqZWN0OihmaWxlTmFtZSA/IGZpbGVOYW1lIDogQCIiKSBmb3JL
ZXk6dXJsXTsKK30KKworTlNTdHJpbmcgKldlYkNvcmU6OnFsUHJldmlld0NvbnZlcnRlckZpbGVO
YW1lRm9yVVJMKE5TVVJMICp1cmwpCit7CisgICAgcmV0dXJuIFtRTENvbnRlbnREaWN0aW9uYXJ5
KCkgb2JqZWN0Rm9yS2V5OnVybF07Cit9CisKK05TU3RyaW5nICpXZWJDb3JlOjpxbFByZXZpZXdD
b252ZXJ0ZXJVVElGb3JVUkwoTlNVUkwgKnVybCkKK3sKKyAgICBpZCBjb252ZXJ0ZXIgPSBuaWw7
CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2socWxQcmV2aWV3Q29udmVydGVyRGljdGlv
bmFyeU11dGV4KCkpOworICAgICAgICBjb252ZXJ0ZXIgPSBbUUxQcmV2aWV3Q29udmVydGVyRGlj
dGlvbmFyeSgpIG9iamVjdEZvcktleTp1cmxdOworICAgIH0KKyAgICBpZiAoIWNvbnZlcnRlcikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW2NvbnZlcnRlciBwcmV2aWV3VVRJXTsK
K30KKwordm9pZCBXZWJDb3JlOjpyZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwoTlNVUkwg
KnVybCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2socWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFy
eU11dGV4KCkpOworICAgIFtRTFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5KCkgcmVtb3ZlT2Jq
ZWN0Rm9yS2V5OnVybF07CisKKyAgICAvLyBEZWxldGUgdGhlIGZpbGUgd2hlbiB3ZSByZW1vdmUg
dGhlIHByZXZpZXcgY29udmVydGVyCisgICAgTlNTdHJpbmcgKmZpbGVuYW1lID0gcWxQcmV2aWV3
Q29udmVydGVyRmlsZU5hbWVGb3JVUkwodXJsKTsKKyAgICBpZiAoW2ZpbGVuYW1lIGxlbmd0aF0p
CisgICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYl9yZW1vdmVGaWxl
T25seUF0UGF0aDpmaWxlbmFtZV07CisgICAgW1FMQ29udGVudERpY3Rpb25hcnkoKSByZW1vdmVP
YmplY3RGb3JLZXk6dXJsXTsKK30KKworUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gV2ViQ29yZTo6
cmVnaXN0ZXJRTFByZXZpZXdDb252ZXJ0ZXJJZk5lZWRlZChOU1VSTCAqdXJsLCBOU1N0cmluZyAq
bWltZVR5cGUsIE5TRGF0YSAqZGF0YSkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHVwZGF0
ZWRNSU1FVHlwZSA9IGFkb3B0TlMoUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvclVSTEFuZE1pbWVU
eXBlKHVybCwgbWltZVR5cGUpKTsKKworICAgIGlmIChbUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlN
RVR5cGVzU2V0KCkgY29udGFpbnNPYmplY3Q6dXBkYXRlZE1JTUVUeXBlLmdldCgpXSkgeworICAg
ICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHV0aSA9IGFkb3B0TlMoUUxUeXBlQ29weVVUSUZvclVS
TEFuZE1pbWVUeXBlKHVybCwgdXBkYXRlZE1JTUVUeXBlLmdldCgpKSk7CisKKyAgICAgICAgUmV0
YWluUHRyPFFMUHJldmlld0NvbnZlcnRlcj4gY29udmVydGVyID0gYWRvcHROUyhbYWxsb2NRTFBy
ZXZpZXdDb252ZXJ0ZXJJbnN0YW5jZSgpIGluaXRXaXRoRGF0YTpkYXRhIG5hbWU6bmlsIHV0aTp1
dGkuZ2V0KCkgb3B0aW9uczpuaWxdKTsKKyAgICAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0g
W2NvbnZlcnRlciBwcmV2aWV3UmVxdWVzdF07CisKKyAgICAgICAgLy8gV2UgdXNlIFtyZXF1ZXN0
IFVSTF0gaGVyZSBpbnN0ZWFkIG9mIHVybCBzaW5jZSBpdCB3aWxsIGJlCisgICAgICAgIC8vIHRo
ZSBVUkwgdGhhdCB0aGUgV2ViRGF0YVNvdXJjZSB3aWxsIHNlZSBkdXJpbmcgLWRlYWxsb2MuCisg
ICAgICAgIGFkZFFMUHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9yVVJMKFtyZXF1ZXN0IFVSTF0s
IGNvbnZlcnRlci5nZXQoKSwgbmlsKTsKKworICAgICAgICByZXR1cm4gcmVxdWVzdDsKKyAgICB9
CisKKyAgICByZXR1cm4gbmlsOworfQorCitjb25zdCBVUkwgV2ViQ29yZTo6c2FmZVFMVVJMRm9y
RG9jdW1lbnRVUkxBbmRSZXNvdXJjZVVSTChjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBT
dHJpbmcmIHJlc291cmNlVVJMKQoreworICAgIGlkIGNvbnZlcnRlciA9IG5pbDsKKyAgICBOU1VS
TCAqbnNEb2N1bWVudFVSTCA9IGRvY3VtZW50VVJMOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrKHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRleCgpKTsKKyAgICAgICAgY29u
dmVydGVyID0gW1FMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnkoKSBvYmplY3RGb3JLZXk6bnNE
b2N1bWVudFVSTF07CisgICAgfQorCisgICAgaWYgKCFjb252ZXJ0ZXIpCisgICAgICAgIHJldHVy
biBVUkwoUGFyc2VkVVJMU3RyaW5nLCByZXNvdXJjZVVSTCk7CisKKyAgICBSZXRhaW5QdHI8TlNV
UkxSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6cmVzb3VyY2VVUkxdXSk7CisgICAgTlNVUkxSZXF1
ZXN0ICpzYWZlUmVxdWVzdCA9IFtjb252ZXJ0ZXIgc2FmZVJlcXVlc3RGb3JSZXF1ZXN0OnJlcXVl
c3QuZ2V0KCldOworICAgIHJldHVybiBbc2FmZVJlcXVlc3QgVVJMXTsKK30KKworc3RhdGljIFZl
Y3RvcjxjaGFyPiBjcmVhdGVRTFByZXZpZXdQcm90b2NvbCgpCit7CisgICAgVmVjdG9yPGNoYXI+
IHByZXZpZXdQcm90b2NvbDsKKyAgICBjb25zdCBjaGFyKiBxbFByZXZpZXdTY2hlbWUgPSBbUUxQ
cmV2aWV3U2NoZW1lIFVURjhTdHJpbmddOworICAgIHByZXZpZXdQcm90b2NvbC5hcHBlbmQocWxQ
cmV2aWV3U2NoZW1lLCBzdHJsZW4ocWxQcmV2aWV3U2NoZW1lKSArIDEpOworICAgIHJldHVybiBw
cmV2aWV3UHJvdG9jb2w7Cit9CisKK2NvbnN0IGNoYXIqIFdlYkNvcmU6OlFMUHJldmlld1Byb3Rv
Y29sKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPGNoYXI+PiBwcmV2aWV3
UHJvdG9jb2woY3JlYXRlUUxQcmV2aWV3UHJvdG9jb2woKSk7CisgICAgcmV0dXJuIHByZXZpZXdQ
cm90b2NvbC5nZXQoKS5kYXRhKCk7Cit9CisKKyNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQorLy8g
VGhlIHdheSBRdWlja0xvb2sgd29ya3MgaXMgd2UgcGFzcyBpdCBhbiBOU1VSTENvbm5lY3Rpb25E
ZWxlZ2F0ZSBjYWxsYmFjayBvYmplY3QgYXQgY3JlYXRpb24KKy8vIHRpbWUuIFRoZW4gd2UgcGFz
cyBpdCBhbGwgdGhlIGRhdGEgYXMgd2UgcmVjZWl2ZSBpdC4gT25jZSB3ZSd2ZSBkb3dubG9hZGVk
IHRoZSBmdWxsIFVSTCwKKy8vIFF1aWNrTG9vayB0dXJucyBhcm91bmQgYW5kIHNlbmQgdXMsIHRo
cm91Z2ggdGhpcyBkZWxlZ2F0ZSwgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGUgZmlsZSB3aGljaCB3
ZQorLy8gcGFzcyBvbiB0byBXZWJDb3JlLiBUaGUgZmxhZyBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJ
bnRvQ29udmVydGVyIGluIFF1aWNrTG9va0hhbmRsZSBkZWNpZGVzCisvLyB3aGV0aGVyIHRvIHBh
c3MgdGhlIGRhdGEgdG8gUXVpY2tMb29rIG9yIFdlYkNvcmUuCisvLworLy8gVGhpcyB3b3JrcyBm
aW5lIHdoZW4gdXNpbmcgTlMgQVBJcywgYnV0IHdoZW4gdXNpbmcgQ0ZOZXR3b3JrLCB3ZSBkb24n
dCBoYXZlIGEgTlNVUkxDb25uZWN0aW9uRGVsZWdhdGUuCisvLyBTbyB3ZSBjcmVhdGUgV2ViUXVp
Y2tMb29rSGFuZGxlQXNEZWxlZ2F0ZSBhcyBhbiBpbnRlcm1lZGlhdGUgZGVsZWdhdGUgb2JqZWN0
IGFuZCBwYXNzIGl0IHRvCisvLyBRTFByZXZpZXdDb252ZXJ0ZXIuIFRoZSBwcm94eSBkZWxlZ2F0
ZSB0aGVuIGZvcndhcmRzIHRoZSBtZXNzYWdlcyBvbiB0byB0aGUgQ0ZOZXR3b3JrIGNvZGUuCitA
aW50ZXJmYWNlIFdlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgOiBOU09iamVjdCA8TlNVUkxD
b25uZWN0aW9uRGVsZWdhdGUsIFdlYkNvcmVSZXNvdXJjZUxvYWRlckRlbGVnYXRlPiB7CisgICAg
UmVmUHRyPFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4g
bV9jb25uZWN0aW9uRGVsZWdhdGU7Cit9CisKKy0gKGlkKWluaXRXaXRoQ29ubmVjdGlvbkRlbGVn
YXRlOihTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqKWNv
bm5lY3Rpb25EZWxlZ2F0ZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlF1aWNrTG9va0hh
bmRsZUFzRGVsZWdhdGUKKy0gKGlkKWluaXRXaXRoQ29ubmVjdGlvbkRlbGVnYXRlOihTeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqKWNvbm5lY3Rpb25EZWxl
Z2F0ZQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlID0gY29ubmVjdGlvbkRlbGVn
YXRlOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29u
bmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGFBcnJheTooTlNBcnJheSAqKWRhdGFB
cnJheQoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBpZiAoIW1fY29ubmVj
dGlvbkRlbGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgTE9HKE5ldHdvcmssICJXZWJRdWlj
a0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YUFycmF5KCkiKTsKKyAgICBtX2Nv
bm5lY3Rpb25EZWxlZ2F0ZS0+ZGlkUmVjZWl2ZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENG
QXJyYXlSZWY+KGRhdGFBcnJheSkpOworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29u
bmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGE6KE5TRGF0YSAqKWRhdGEgbGVuZ3Ro
UmVjZWl2ZWQ6KGxvbmcgbG9uZylsZW5ndGhSZWNlaXZlZAoreworICAgIFVOVVNFRF9QQVJBTShj
b25uZWN0aW9uKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbkRlbGVnYXRlKQorICAgICAgICByZXR1
cm47CisgICAgTE9HKE5ldHdvcmssICJXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRS
ZWNlaXZlRGF0YSgpIC0gZGF0YSBsZW5ndGggPSAlbGQiLCAobG9uZylbZGF0YSBsZW5ndGhdKTsK
KworICAgIC8vIFF1aWNrTG9vayBjb2RlIHNlbmRzIHVzIGEgbmlsIGRhdGEgYXQgdGltZXMuIFRo
ZSBjaGVjayBiZWxvdyBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIGluCisgICAgLy8gUmVzb3VyY2VI
YW5kbGVNYWMuY3BwIGFkZGVkIGZvciBhIGRpZmZlcmVudCBidWcuCisgICAgaWYgKCFbZGF0YSBs
ZW5ndGhdKQorICAgICAgICByZXR1cm47CisgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPmRpZFJl
Y2VpdmVEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhKSwgc3RhdGljX2Nhc3Q8
aW50PihsZW5ndGhSZWNlaXZlZCkpOworfQorCistICh2b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hM
b2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCit7CisgICAgVU5VU0VEX1BBUkFN
KGNvbm5lY3Rpb24pOworICAgIGlmICghbV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAgICAgIHJl
dHVybjsKKyAgICBMT0coTmV0d29yaywgIldlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGU6OmRp
ZEZpbmlzaExvYWRpbmcoKSIpOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRGaW5pc2hM
b2FkaW5nKCk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29u
bmVjdGlvbiBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sKKyAgICBVTlVTRURf
UEFSQU0oY29ubmVjdGlvbik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25EZWxlZ2F0ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0
ZTo6ZGlkRmFpbCgpIik7CisgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPmRpZEZhaWwocmVpbnRl
cnByZXRfY2FzdDxDRkVycm9yUmVmPihlcnJvcikpOworfQorCistICh2b2lkKWRldGFjaEhhbmRs
ZQoreworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlID0gbnVsbHB0cjsKK30KK0BlbmQKKyNlbmRp
ZgorCitAaW50ZXJmYWNlIFdlYlJlc291cmNlTG9hZGVyUXVpY2tMb29rRGVsZWdhdGUgOiBOU09i
amVjdCA8TlNVUkxDb25uZWN0aW9uRGVsZWdhdGUsIFdlYkNvcmVSZXNvdXJjZUxvYWRlckRlbGVn
YXRlPiB7CisgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBfcmVzb3VyY2VMb2FkZXI7CisgICAg
Qk9PTCBfaGFzU2VudERpZFJlY2VpdmVSZXNwb25zZTsKKyAgICBCT09MIF9oYXNGYWlsZWQ7Cit9
CitAcHJvcGVydHkgKG5vbmF0b21pYykgUXVpY2tMb29rSGFuZGxlKiBxdWlja0xvb2tIYW5kbGU7
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJSZXNvdXJjZUxvYWRlclF1aWNrTG9va0RlbGVn
YXRlCisKKy0gKGlkKWluaXRXaXRoUmVzb3VyY2VMb2FkZXI6KFBhc3NSZWZQdHI8UmVzb3VyY2VM
b2FkZXI+KXJlc291cmNlTG9hZGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcmVzb3VyY2VMb2FkZXIgPSBy
ZXNvdXJjZUxvYWRlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClfc2VuZERpZFJl
Y2VpdmVSZXNwb25zZUlmTmVjZXNzYXJ5Cit7CisgICAgaWYgKF9oYXNTZW50RGlkUmVjZWl2ZVJl
c3BvbnNlIHx8IF9oYXNGYWlsZWQgfHwgIV9xdWlja0xvb2tIYW5kbGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFF1aWNrTG9vayBtaWdodCBmYWlsIHRvIGNvbnZlcnQgYSBkb2N1bWVudCB3
aXRob3V0IGNhbGxpbmcgY29ubmVjdGlvbjpkaWRGYWlsV2l0aEVycm9yOiAoc2VlIDxyZGFyOi8v
cHJvYmxlbS8xNzkyNzk3Mj4pLgorICAgIC8vIEEgbmlsIE1JTUUgdHlwZSBpcyBhbiBpbmRpY2F0
aW9uIG9mIHN1Y2ggYSBmYWlsdXJlLCBzbyBzdG9wIGxvYWRpbmcgdGhlIHJlc291cmNlIGFuZCBp
Z25vcmUgc3Vic2VxdWVudCBkZWxlZ2F0ZSBtZXNzYWdlcy4KKyAgICBOU1VSTFJlc3BvbnNlICpu
c1Jlc3BvbnNlID0gX3F1aWNrTG9va0hhbmRsZS0+bnNSZXNwb25zZSgpOworICAgIGlmICghW25z
UmVzcG9uc2UgTUlNRVR5cGVdKSB7CisgICAgICAgIF9oYXNGYWlsZWQgPSBZRVM7CisgICAgICAg
IF9yZXNvdXJjZUxvYWRlci0+ZGlkRmFpbChfcmVzb3VyY2VMb2FkZXItPmNhbm5vdFNob3dVUkxF
cnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNlUmVzcG9uc2Ug
cmVzcG9uc2UobnNSZXNwb25zZSk7CisgICAgcmVzcG9uc2Uuc2V0SXNRdWlja0xvb2sodHJ1ZSk7
CisKKyAgICBfaGFzU2VudERpZFJlY2VpdmVSZXNwb25zZSA9IFlFUzsKKyAgICBfcmVzb3VyY2VM
b2FkZXItPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Cit9CisKKyNpZiBVU0UoTkVUV09S
S19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVj
dGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGFBcnJheTooTlNBcnJheSAqKWRhdGFBcnJh
eQoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBpZiAoIV9yZXNvdXJjZUxv
YWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgX3NlbmREaWRSZWNlaXZlUmVzcG9u
c2VJZk5lY2Vzc2FyeV07CisgICAgaWYgKF9oYXNGYWlsZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChfcmVzb3VyY2VMb2FkZXIpCisgICAgICAgIF9yZXNvdXJjZUxvYWRlci0+ZGlkUmVj
ZWl2ZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENGQXJyYXlSZWY+KGRhdGFBcnJheSkpOwor
fQorI2VuZGlmCisKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVj
dGlvbiBkaWRSZWNlaXZlRGF0YTooTlNEYXRhICopZGF0YSBsZW5ndGhSZWNlaXZlZDoobG9uZyBs
b25nKWxlbmd0aFJlY2VpdmVkCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAg
IGlmICghX3Jlc291cmNlTG9hZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfc2Vu
ZERpZFJlY2VpdmVSZXNwb25zZUlmTmVjZXNzYXJ5XTsKKyAgICBpZiAoX2hhc0ZhaWxlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gUXVpY2tMb29rIGNvZGUgc2VuZHMgdXMgYSBuaWwgZGF0
YSBhdCB0aW1lcy4gVGhlIGNoZWNrIGJlbG93IGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4KKyAg
ICAvLyBSZXNvdXJjZUhhbmRsZU1hYy5jcHAgYWRkZWQgZm9yIGEgZGlmZmVyZW50IGJ1Zy4KKyAg
ICBpZiAoIVtkYXRhIGxlbmd0aF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfcmVzb3Vy
Y2VMb2FkZXIpCisgICAgICAgIF9yZXNvdXJjZUxvYWRlci0+ZGlkUmVjZWl2ZURhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSwgbGVu
Z3RoUmVjZWl2ZWQsIERhdGFQYXlsb2FkQnl0ZXMpOworfQorCistICh2b2lkKWNvbm5lY3Rpb25E
aWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCit7CisgICAgVU5V
U0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAgIGlmICghX3Jlc291cmNlTG9hZGVyIHx8IF9oYXNG
YWlsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChfaGFzU2VudERpZFJlY2VpdmVS
ZXNwb25zZSk7CisgICAgX3Jlc291cmNlTG9hZGVyLT5kaWRGaW5pc2hMb2FkaW5nKDApOworfQor
CistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkRmFp
bFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rp
b24pOworCisgICAgW3NlbGYgX3NlbmREaWRSZWNlaXZlUmVzcG9uc2VJZk5lY2Vzc2FyeV07Cisg
ICAgaWYgKF9oYXNGYWlsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfcmVzb3VyY2VM
b2FkZXIpCisgICAgICAgIF9yZXNvdXJjZUxvYWRlci0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKGVy
cm9yKSk7Cit9CisKKy0gKHZvaWQpZGV0YWNoSGFuZGxlCit7CisgICAgX3Jlc291cmNlTG9hZGVy
ID0gbnVsbHB0cjsKKyAgICBfcXVpY2tMb29rSGFuZGxlID0gbnVsbHB0cjsKK30KKworQGVuZAor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05TU3RyaW5nICpjcmVhdGVUZW1wb3JhcnlGaWxlRm9y
UXVpY2tMb29rKE5TU3RyaW5nICpmaWxlTmFtZSkKK3sKKyAgICBOU1N0cmluZyAqZG93bmxvYWRE
aXJlY3RvcnkgPSBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoQCJRdWlja0xvb2tDb250ZW50Iik7
CisgICAgaWYgKCFkb3dubG9hZERpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IE5TU3RyaW5nICpjb250ZW50UGF0aCA9IFtkb3dubG9hZERpcmVjdG9yeSBzdHJpbmdCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWVdOworICAgIE5TRmlsZU1hbmFnZXIgKmZpbGVNYW5h
Z2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIE5TU3RyaW5nICp1bmlx
dWVDb250ZW50UGF0aCA9IFtmaWxlTWFuYWdlciBfd2ViX3BhdGhXaXRoVW5pcXVlRmlsZW5hbWVG
b3JQYXRoOmNvbnRlbnRQYXRoXTsKKworICAgIEJPT0wgc3VjY2VzcyA9IFtmaWxlTWFuYWdlciBf
d2ViX2NyZWF0ZUZpbGVBdFBhdGhXaXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6dW5pcXVlQ29u
dGVudFBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOm5pbAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXM6UUxGaWxlQXR0cmlidXRlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5QXR0cmlidXRlczpRTERpcmVj
dG9yeUF0dHJpYnV0ZXMoKV07CisKKyAgICByZXR1cm4gc3VjY2VzcyA/IHVuaXF1ZUNvbnRlbnRQ
YXRoIDogbmlsOworfQorCitzdGF0aWMgaW5saW5lIFF1aWNrTG9va0hhbmRsZUNsaWVudCogZW1w
dHlDbGllbnQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxRdWlja0xvb2tIYW5kbGVD
bGllbnQ+IGVtcHR5Q2xpZW50OworICAgIHJldHVybiAmZW1wdHlDbGllbnQuZ2V0KCk7Cit9CisK
K1F1aWNrTG9va0hhbmRsZTo6UXVpY2tMb29rSGFuZGxlKE5TVVJMICpmaXJzdFJlcXVlc3RVUkws
IE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSwg
aWQgZGVsZWdhdGUpCisgICAgOiBtX2ZpcnN0UmVxdWVzdFVSTChmaXJzdFJlcXVlc3RVUkwpCisg
ICAgLCBtX2NvbnZlcnRlcihhZG9wdE5TKFthbGxvY1FMUHJldmlld0NvbnZlcnRlckluc3RhbmNl
KCkgaW5pdFdpdGhDb25uZWN0aW9uOmNvbm5lY3Rpb24gZGVsZWdhdGU6ZGVsZWdhdGUgcmVzcG9u
c2U6bnNSZXNwb25zZSBvcHRpb25zOm5pbF0pKQorICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkK
KyAgICAsIG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIoZmFsc2UpCisgICAgLCBt
X25zUmVzcG9uc2UoW21fY29udmVydGVyIHByZXZpZXdSZXNwb25zZV0pCisgICAgLCBtX2NsaWVu
dChlbXB0eUNsaWVudCgpKQoreworICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpR
dWlja0xvb2tIYW5kbGUoKSAtIHByZXZpZXdGaWxlTmFtZTogJXMiLCBbbV9jb252ZXJ0ZXIgcHJl
dmlld0ZpbGVOYW1lXSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1
aWNrTG9va0hhbmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVj
dGlvbiAqY29ubmVjdGlvbiwgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUp
Cit7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZSk7CisgICAgaWYgKGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1h
aW4gfHwgIVtRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVj
dDpbbnNSZXNwb25zZSBNSU1FVHlwZV1dKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IHF1aWNrTG9va0hhbmRsZShuZXcgUXVp
Y2tMb29rSGFuZGxlKFtoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVw
ZGF0ZUhUVFBCb2R5KSBVUkxdLCBjb25uZWN0aW9uLCBuc1Jlc3BvbnNlLCBkZWxlZ2F0ZSkpOwor
ICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZENyZWF0ZVF1aWNrTG9va0hhbmRsZSgqcXVpY2tMb29r
SGFuZGxlKTsKKyAgICByZXR1cm4gcXVpY2tMb29rSGFuZGxlOworfQorCisjaWYgVVNFKENGVVJM
Q09OTkVDVElPTikKK3N0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hh
bmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSogY29ubmVjdGlvbkRlbGVnYXRlLCBDRlVSTFJl
c3BvbnNlUmVmIGNmUmVzcG9uc2UpCit7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZSk7
CisgICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VS
ZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW4gfHwgIVtRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlw
ZXNTZXQoKSBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilDRlVSTFJlc3BvbnNlR2V0TUlNRVR5
cGUoY2ZSZXNwb25zZSldKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5TVVJMUmVz
cG9uc2UgKm5zUmVzcG9uc2UgPSBbTlNVUkxSZXNwb25zZSBfcmVzcG9uc2VXaXRoQ0ZVUkxSZXNw
b25zZTpjZlJlc3BvbnNlXTsKKyAgICBXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlICpkZWxl
Z2F0ZSA9IFtbW1dlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQ29u
bmVjdGlvbkRlbGVnYXRlOmNvbm5lY3Rpb25EZWxlZ2F0ZV0gYXV0b3JlbGVhc2VdOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IHF1aWNrTG9va0hhbmRsZShuZXcgUXVpY2tM
b29rSGFuZGxlKFtoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVwZGF0
ZUhUVFBCb2R5KSBVUkxdLCBuaWwsIG5zUmVzcG9uc2UsIGRlbGVnYXRlKSk7CisgICAgaGFuZGxl
LT5jbGllbnQoKS0+ZGlkQ3JlYXRlUXVpY2tMb29rSGFuZGxlKCpxdWlja0xvb2tIYW5kbGUpOwor
ICAgIHJldHVybiBxdWlja0xvb2tIYW5kbGU7Cit9CisKK0NGVVJMUmVzcG9uc2VSZWYgUXVpY2tM
b29rSGFuZGxlOjpjZlJlc3BvbnNlKCkKK3sKKyAgICByZXR1cm4gW21fbnNSZXNwb25zZSBfQ0ZV
UkxSZXNwb25zZV07Cit9CisjZW5kaWYKKworYm9vbCBRdWlja0xvb2tIYW5kbGU6OnNob3VsZENy
ZWF0ZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgcmV0dXJuIFtR
TFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVjdDptaW1lVHlw
ZV07Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hhbmRs
ZTo6Y3JlYXRlKFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIEFTU0VSVChzaG91bGRDcmVhdGVGb3JNSU1FVHlwZShyZXNwb25z
ZS5taW1lVHlwZSgpKSk7CisKKyAgICBSZXRhaW5QdHI8V2ViUmVzb3VyY2VMb2FkZXJRdWlja0xv
b2tEZWxlZ2F0ZT4gZGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViUmVzb3VyY2VMb2FkZXJRdWlja0xv
b2tEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhSZXNvdXJjZUxvYWRlcjombG9hZGVyXSk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4gcXVpY2tMb29rSGFuZGxlKG5ldyBRdWlj
a0xvb2tIYW5kbGUoW2xvYWRlci5vcmlnaW5hbFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RV
cGRhdGVIVFRQQm9keSkgVVJMXSwgbmlsLCByZXNwb25zZS5uc1VSTFJlc3BvbnNlKCksIGRlbGVn
YXRlLmdldCgpKSk7CisgICAgW2RlbGVnYXRlIHNldFF1aWNrTG9va0hhbmRsZTpxdWlja0xvb2tI
YW5kbGUuZ2V0KCldOworICAgIGxvYWRlci5kaWRDcmVhdGVRdWlja0xvb2tIYW5kbGUoKnF1aWNr
TG9va0hhbmRsZSk7CisgICAgcmV0dXJuIHF1aWNrTG9va0hhbmRsZTsKK30KKworTlNVUkxSZXNw
b25zZSAqUXVpY2tMb29rSGFuZGxlOjpuc1Jlc3BvbnNlKCkKK3sKKyAgICByZXR1cm4gbV9uc1Jl
c3BvbnNlLmdldCgpOworfQorCitib29sIFF1aWNrTG9va0hhbmRsZTo6ZGlkUmVjZWl2ZURhdGFB
cnJheShDRkFycmF5UmVmIGNmRGF0YUFycmF5KQoreworICAgIGlmIChtX2ZpbmlzaGVkTG9hZGlu
Z0RhdGFJbnRvQ29udmVydGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0coTmV0
d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSgpIik7CisgICAgW21f
Y29udmVydGVyIGFwcGVuZERhdGFBcnJheTooTlNBcnJheSAqKWNmRGF0YUFycmF5XTsKKyAgICBt
X2NsaWVudC0+ZGlkUmVjZWl2ZURhdGFBcnJheShjZkRhdGFBcnJheSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYg
Y2ZEYXRhKQoreworICAgIGlmIChtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29udmVydGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRpZFJlY2VpdmVEYXRhQXJy
YXkoYWRvcHRDRihDRkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCB2b2lk
KiopJmNmRGF0YSwgMSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpLmdldCgpKTsKK30KKworYm9v
bCBRdWlja0xvb2tIYW5kbGU6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIGlmIChtX2Zpbmlz
aGVkTG9hZGluZ0RhdGFJbnRvQ29udmVydGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBMT0coTmV0d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkRmluaXNoTG9hZGluZygpIik7Cisg
ICAgbV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlciA9IFlFUzsKKyAgICBbbV9jb252
ZXJ0ZXIgZmluaXNoZWRBcHBlbmRpbmdEYXRhXTsKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9h
ZGluZygpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFF1aWNrTG9va0hhbmRsZTo6ZGlk
RmFpbCgpCit7CisgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZEZhaWwoKSIp
OworICAgIG1fY2xpZW50LT5kaWRGYWlsKCk7CisgICAgW21fY29udmVydGVyIGZpbmlzaENvbnZl
cnRpbmddOworICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKK30KKworUXVpY2tMb29rSGFuZGxl
Ojp+UXVpY2tMb29rSGFuZGxlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlF1aWNrTG9va0hhbmRs
ZTo6flF1aWNrTG9va0hhbmRsZSgpIik7CisgICAgbV9jb252ZXJ0ZXIgPSBudWxscHRyOworCisg
ICAgW21fZGVsZWdhdGUgZGV0YWNoSGFuZGxlXTsKK30KKworU3RyaW5nIFF1aWNrTG9va0hhbmRs
ZTo6cHJldmlld0ZpbGVOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fY29udmVydGVyIHBy
ZXZpZXdGaWxlTmFtZV07Cit9CisKK1N0cmluZyBRdWlja0xvb2tIYW5kbGU6OnByZXZpZXdVVEko
KSBjb25zdAoreworICAgIHJldHVybiBbbV9jb252ZXJ0ZXIgcHJldmlld1VUSV07Cit9CisKK05T
VVJMICpRdWlja0xvb2tIYW5kbGU6OnByZXZpZXdSZXF1ZXN0VVJMKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gW1ttX2NvbnZlcnRlciBwcmV2aWV3UmVxdWVzdF0gVVJMXTsKK30KKworfQorCisjZW5k
aWYgLy8gVVNFKFFVSUNLX0xPT0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvaW9zL1F1aWNrTG9vay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDcwOTAz
MDVmZjAxZTAxZTIyMjJiOWFkMDliMzZlMDE3YTJkYzM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
aW9zL1F1aWNrTG9vay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFF1aWNrTG9va19oCi0jZGVmaW5lIFF1aWNrTG9va19oCi0KLSNpZiBVU0Uo
UVVJQ0tfTE9PSykKLQotI2ltcG9ydCAiUXVpY2tMb29rSGFuZGxlQ2xpZW50LmgiCi0jaW1wb3J0
ICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+Ci0jaW1w
b3J0IDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQotI2luY2x1ZGUg
IkNGTmV0d29ya1NQSS5oIgotI2VuZGlmCi0KLU9CSkNfQ0xBU1MgTlNEYXRhOwotT0JKQ19DTEFT
UyBOU0RpY3Rpb25hcnk7Ci1PQkpDX0NMQVNTIE5TRmlsZUhhbmRsZTsKLU9CSkNfQ0xBU1MgTlNT
ZXQ7Ci1PQkpDX0NMQVNTIE5TU3RyaW5nOwotT0JKQ19DTEFTUyBOU1VSTDsKLU9CSkNfQ0xBU1Mg
TlNVUkxDb25uZWN0aW9uOwotT0JKQ19DTEFTUyBOU1VSTFJlcXVlc3Q7Ci1PQkpDX0NMQVNTIE5T
VVJMUmVzcG9uc2U7Ci1PQkpDX0NMQVNTIFFMUHJldmlld0NvbnZlcnRlcjsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBRdWlja0xvb2tIYW5kbGVDbGllbnQ7Ci1jbGFzcyBSZXNvdXJj
ZUhhbmRsZTsKLWNsYXNzIFJlc291cmNlTG9hZGVyOwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
LWNsYXNzIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTsK
LQotV0VCQ09SRV9FWFBPUlQgTlNTZXQgKlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1Nl
dCgpOwotCi0vLyBVc2VkIGZvciBzZXR0aW5nIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgc2F2ZWQg
UUwgY29udGVudAotTlNEaWN0aW9uYXJ5ICpRTEZpbGVBdHRyaWJ1dGVzKCk7Ci1OU0RpY3Rpb25h
cnkgKlFMRGlyZWN0b3J5QXR0cmlidXRlcygpOwotCi1XRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFFM
UHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9yVVJMKE5TVVJMICosIGlkIGNvbnZlcnRlciwgTlNT
dHJpbmcgKmZpbGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICpxbFByZXZpZXdDb252
ZXJ0ZXJGaWxlTmFtZUZvclVSTChOU1VSTCAqKTsKLVdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICpx
bFByZXZpZXdDb252ZXJ0ZXJVVElGb3JVUkwoTlNVUkwgKik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZVFMUHJldmlld0NvbnZlcnRlckZvclVSTChOU1VSTCAqKTsKLQotV0VCQ09SRV9FWFBP
UlQgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gcmVnaXN0ZXJRTFByZXZpZXdDb252ZXJ0ZXJJZk5l
ZWRlZChOU1VSTCAqLCBOU1N0cmluZyAqbWltZVR5cGUsIE5TRGF0YSAqKTsKLQotY29uc3QgVVJM
IHNhZmVRTFVSTEZvckRvY3VtZW50VVJMQW5kUmVzb3VyY2VVUkwoY29uc3QgVVJMJiBkb2N1bWVu
dFVSTCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZVVSTCk7Ci0KLVdFQkNPUkVfRVhQT1JUIGNvbnN0
IGNoYXIqIFFMUHJldmlld1Byb3RvY29sKCk7Ci0KLVdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICpj
cmVhdGVUZW1wb3JhcnlGaWxlRm9yUXVpY2tMb29rKE5TU3RyaW5nICpmaWxlTmFtZSk7Ci0KLWNs
YXNzIFF1aWNrTG9va0hhbmRsZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUXVpY2tMb29r
SGFuZGxlKTsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRD
cmVhdGVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8UXVpY2tMb29rSGFuZGxlPiBjcmVhdGUoUmVzb3VyY2VIYW5kbGUqLCBOU1VSTENvbm5l
Y3Rpb24gKiwgTlNVUkxSZXNwb25zZSAqLCBpZCBkZWxlZ2F0ZSk7Ci0jaWYgVVNFKENGVVJMQ09O
TkVDVElPTikKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4gY3Jl
YXRlKFJlc291cmNlSGFuZGxlKiwgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlKiwgQ0ZVUkxSZXNwb25zZVJlZik7Ci0jZW5kaWYKLSAgICAvLyBGSVhNRTog
VXNlIG9mIFJlc291cmNlTG9hZGVyIGhlcmUgaXMgYSBwbGF0Zm9ybSB2aW9sYXRpb24uCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IGNy
ZWF0ZShSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLQotICAgIFdF
QkNPUkVfRVhQT1JUIH5RdWlja0xvb2tIYW5kbGUoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGRpZFJlY2VpdmVEYXRhKENGRGF0YVJlZik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBk
aWRGaW5pc2hMb2FkaW5nKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRGYWlsKCk7Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlKCk7Ci0jaWYgVVNF
KENGVVJMQ09OTkVDVElPTikKLSAgICBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UoKTsKLSNl
bmRpZgotCi0gICAgdm9pZCBzZXRDbGllbnQoUGFzc1JlZlB0cjxRdWlja0xvb2tIYW5kbGVDbGll
bnQ+IGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHByZXZpZXdGaWxlTmFtZSgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBwcmV2aWV3VVRJKCkgY29uc3Q7Ci0gICAgTlNVUkwgKmZpcnN0UmVxdWVzdFVSTCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlyc3RSZXF1ZXN0VVJMLmdldCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQg
TlNVUkwgKnByZXZpZXdSZXF1ZXN0VVJMKCkgY29uc3Q7Ci0gICAgUUxQcmV2aWV3Q29udmVydGVy
ICpjb252ZXJ0ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnZlcnRlci5nZXQoKTsgfQotCi1wcml2
YXRlOgotICAgIFF1aWNrTG9va0hhbmRsZShOU1VSTCAqLCBOU1VSTENvbm5lY3Rpb24gKiwgTlNV
UkxSZXNwb25zZSAqLCBpZCBkZWxlZ2F0ZSk7Ci0KLSAgICBSZXRhaW5QdHI8TlNVUkw+IG1fZmly
c3RSZXF1ZXN0VVJMOwotICAgIFJldGFpblB0cjxRTFByZXZpZXdDb252ZXJ0ZXI+IG1fY29udmVy
dGVyOwotICAgIFJldGFpblB0cjxpZD4gbV9kZWxlZ2F0ZTsKLSAgICBib29sIG1fZmluaXNoZWRM
b2FkaW5nRGF0YUludG9Db252ZXJ0ZXI7Ci0gICAgUmV0YWluUHRyPE5TRmlsZUhhbmRsZSAqPiBt
X3F1aWNrbG9va0ZpbGVIYW5kbGU7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG1fbnNS
ZXNwb25zZTsKLSAgICBSZWZQdHI8UXVpY2tMb29rSGFuZGxlQ2xpZW50PiBtX2NsaWVudDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQot
Ci0jZW5kaWYgLy8gUXVpY2tMb29rX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvaW9zL1F1aWNrTG9vay5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFk
ZjNkZDRiYmYxNTA4N2Q0NTJiNTNmOGE4ZmQzMWU4Y2UzMzY1Mi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2lvcy9RdWlja0xvb2subW0KKysrIC9kZXYvbnVsbApAQCAtMSw1MjIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJRdWlja0xvb2suaCIK
LQotI2lmIFVTRShRVUlDS19MT09LKQotCi0jaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgotI2lt
cG9ydCAiRmlsZVN5c3RlbUlPUy5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTlNG
aWxlTWFuYWdlclNQSS5oIgotI2ltcG9ydCAiUmVzb3VyY2VFcnJvci5oIgotI2ltcG9ydCAiUmVz
b3VyY2VIYW5kbGUuaCIKLSNpbXBvcnQgIlJlc291cmNlTG9hZGVyLmgiCi0jaW1wb3J0ICJSdW50
aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbXBvcnQgIlN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViQ29yZVJlc291cmNlSGFu
ZGxlQXNEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmgiCi0jaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2ltcG9ydCA8d3RmL1RocmVhZGlu
Zy5oPgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpbXBvcnQgIlF1aWNrTG9va1NvZnRMaW5rLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCi1OU1NldCAqV2ViQ29yZTo6UUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVz
U2V0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TU2V0Pj4gc2V0
ID0gUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzKCk7Ci0gICAgcmV0dXJuIHNldC5nZXQo
KS5nZXQoKTsKLX0KLQotTlNEaWN0aW9uYXJ5ICpXZWJDb3JlOjpRTEZpbGVBdHRyaWJ1dGVzKCkK
LXsKLSAgICAvLyBTZXQgZmlsZSBwZXJtcyB0byBvd25lciByZWFkL3dyaXRlIG9ubHkKLSAgICBO
U051bWJlciAqZmlsZVBPU0lYUGVybWlzc2lvbnMgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVn
ZXI6KFdFQl9VUkVBRCB8IFdFQl9VV1JJVEUpXTsKLSAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpk
aWN0aW9uYXJ5ID0gYWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3Rz
QW5kS2V5czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VzZXJO
YW1lKCksIE5TRmlsZU93bmVyQWNjb3VudE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZVBPU0lYUGVybWlzc2lvbnMsIE5TRmlsZVBvc2l4UGVybWlzc2lv
bnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cl0pLmxl
YWtSZWYoKTsKLSAgICByZXR1cm4gZGljdGlvbmFyeTsKLX0KLQotTlNEaWN0aW9uYXJ5ICpXZWJD
b3JlOjpRTERpcmVjdG9yeUF0dHJpYnV0ZXMoKQotewotICAgIC8vIFNldCBmaWxlIHBlcm1zIHRv
IG93bmVyIHJlYWQvd3JpdGUvZXhlY3V0ZSBvbmx5Ci0gICAgTlNOdW1iZXIgKmRpcmVjdG9yeVBP
U0lYUGVybWlzc2lvbnMgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6KFdFQl9VUkVBRCB8
IFdFQl9VV1JJVEUgfCBXRUJfVUVYRUMpXTsKLSAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0
aW9uYXJ5ID0gYWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5k
S2V5czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5T
VXNlck5hbWUoKSwgTlNGaWxlT3duZXJBY2NvdW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeVBPU0lYUGVybWlzc2lvbnMsIE5T
RmlsZVBvc2l4UGVybWlzc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBudWxscHRyXSkubGVha1JlZigpOwotICAgIHJldHVybiBkaWN0aW9uYXJ5
OwotfQotCi1zdGF0aWMgTG9jayYgcWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11dGV4KCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TG9jaz4gbXV0ZXg7Ci0gICAgcmV0dXJuIG11
dGV4OwotfQotCi1zdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSAqUUxQcmV2aWV3Q29udmVydGVy
RGljdGlvbmFyeSgpCi17Ci0gICAgc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25h
cnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBkaWN0
aW9uYXJ5OwotfQotCi1zdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSAqUUxDb250ZW50RGljdGlv
bmFyeSgpCi17Ci0gICAgc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKmNvbnRlbnREaWN0aW9u
YXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICByZXR1cm4gY29u
dGVudERpY3Rpb25hcnk7Ci19Ci0KLXZvaWQgV2ViQ29yZTo6YWRkUUxQcmV2aWV3Q29udmVydGVy
V2l0aEZpbGVGb3JVUkwoTlNVUkwgKnVybCwgaWQgY29udmVydGVyLCBOU1N0cmluZyAqZmlsZU5h
bWUpCi17Ci0gICAgQVNTRVJUKHVybCk7Ci0gICAgQVNTRVJUKGNvbnZlcnRlcik7Ci0gICAgTG9j
a0hvbGRlciBsb2NrKHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRleCgpKTsKLSAgICBb
UUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeSgpIHNldE9iamVjdDpjb252ZXJ0ZXIgZm9yS2V5
OnVybF07Ci0gICAgW1FMQ29udGVudERpY3Rpb25hcnkoKSBzZXRPYmplY3Q6KGZpbGVOYW1lID8g
ZmlsZU5hbWUgOiBAIiIpIGZvcktleTp1cmxdOwotfQotCi1OU1N0cmluZyAqV2ViQ29yZTo6cWxQ
cmV2aWV3Q29udmVydGVyRmlsZU5hbWVGb3JVUkwoTlNVUkwgKnVybCkKLXsKLSAgICByZXR1cm4g
W1FMQ29udGVudERpY3Rpb25hcnkoKSBvYmplY3RGb3JLZXk6dXJsXTsKLX0KLQotTlNTdHJpbmcg
KldlYkNvcmU6OnFsUHJldmlld0NvbnZlcnRlclVUSUZvclVSTChOU1VSTCAqdXJsKQotewotICAg
IGlkIGNvbnZlcnRlciA9IG5pbDsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9jayhxbFBy
ZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7Ci0gICAgICAgIGNvbnZlcnRlciA9IFtR
TFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5KCkgb2JqZWN0Rm9yS2V5OnVybF07Ci0gICAgfQot
ICAgIGlmICghY29udmVydGVyKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbY29u
dmVydGVyIHByZXZpZXdVVEldOwotfQotCi12b2lkIFdlYkNvcmU6OnJlbW92ZVFMUHJldmlld0Nv
bnZlcnRlckZvclVSTChOU1VSTCAqdXJsKQotewotICAgIExvY2tIb2xkZXIgbG9jayhxbFByZXZp
ZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7Ci0gICAgW1FMUHJldmlld0NvbnZlcnRlckRp
Y3Rpb25hcnkoKSByZW1vdmVPYmplY3RGb3JLZXk6dXJsXTsKLQotICAgIC8vIERlbGV0ZSB0aGUg
ZmlsZSB3aGVuIHdlIHJlbW92ZSB0aGUgcHJldmlldyBjb252ZXJ0ZXIKLSAgICBOU1N0cmluZyAq
ZmlsZW5hbWUgPSBxbFByZXZpZXdDb252ZXJ0ZXJGaWxlTmFtZUZvclVSTCh1cmwpOwotICAgIGlm
IChbZmlsZW5hbWUgbGVuZ3RoXSkKLSAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXSBfd2ViX3JlbW92ZUZpbGVPbmx5QXRQYXRoOmZpbGVuYW1lXTsKLSAgICBbUUxDb250ZW50
RGljdGlvbmFyeSgpIHJlbW92ZU9iamVjdEZvcktleTp1cmxdOwotfQotCi1SZXRhaW5QdHI8TlNV
UkxSZXF1ZXN0PiBXZWJDb3JlOjpyZWdpc3RlclFMUHJldmlld0NvbnZlcnRlcklmTmVlZGVkKE5T
VVJMICp1cmwsIE5TU3RyaW5nICptaW1lVHlwZSwgTlNEYXRhICpkYXRhKQotewotICAgIFJldGFp
blB0cjxOU1N0cmluZz4gdXBkYXRlZE1JTUVUeXBlID0gYWRvcHROUyhRTFR5cGVDb3B5QmVzdE1p
bWVUeXBlRm9yVVJMQW5kTWltZVR5cGUodXJsLCBtaW1lVHlwZSkpOwotCi0gICAgaWYgKFtRTFBy
ZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVjdDp1cGRhdGVkTUlN
RVR5cGUuZ2V0KCldKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gdXRpID0gYWRvcHRO
UyhRTFR5cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5cGUodXJsLCB1cGRhdGVkTUlNRVR5cGUuZ2V0
KCkpKTsKLQotICAgICAgICBSZXRhaW5QdHI8UUxQcmV2aWV3Q29udmVydGVyPiBjb252ZXJ0ZXIg
PSBhZG9wdE5TKFthbGxvY1FMUHJldmlld0NvbnZlcnRlckluc3RhbmNlKCkgaW5pdFdpdGhEYXRh
OmRhdGEgbmFtZTpuaWwgdXRpOnV0aS5nZXQoKSBvcHRpb25zOm5pbF0pOwotICAgICAgICBOU1VS
TFJlcXVlc3QgKnJlcXVlc3QgPSBbY29udmVydGVyIHByZXZpZXdSZXF1ZXN0XTsKLQotICAgICAg
ICAvLyBXZSB1c2UgW3JlcXVlc3QgVVJMXSBoZXJlIGluc3RlYWQgb2YgdXJsIHNpbmNlIGl0IHdp
bGwgYmUKLSAgICAgICAgLy8gdGhlIFVSTCB0aGF0IHRoZSBXZWJEYXRhU291cmNlIHdpbGwgc2Vl
IGR1cmluZyAtZGVhbGxvYy4KLSAgICAgICAgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVG
b3JVUkwoW3JlcXVlc3QgVVJMXSwgY29udmVydGVyLmdldCgpLCBuaWwpOwotCi0gICAgICAgIHJl
dHVybiByZXF1ZXN0OwotICAgIH0KLQotICAgIHJldHVybiBuaWw7Ci19Ci0KLWNvbnN0IFVSTCBX
ZWJDb3JlOjpzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFuZFJlc291cmNlVVJMKGNvbnN0IFVSTCYg
ZG9jdW1lbnRVUkwsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VVUkwpCi17Ci0gICAgaWQgY29udmVy
dGVyID0gbmlsOwotICAgIE5TVVJMICpuc0RvY3VtZW50VVJMID0gZG9jdW1lbnRVUkw7Ci0gICAg
ewotICAgICAgICBMb2NrSG9sZGVyIGxvY2socWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11
dGV4KCkpOwotICAgICAgICBjb252ZXJ0ZXIgPSBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFy
eSgpIG9iamVjdEZvcktleTpuc0RvY3VtZW50VVJMXTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbnZl
cnRlcikKLSAgICAgICAgcmV0dXJuIFVSTChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlVVJMKTsK
LQotICAgIFJldGFpblB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdE5TKFtbTlNVUkxS
ZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpyZXNvdXJjZVVS
TF1dKTsKLSAgICBOU1VSTFJlcXVlc3QgKnNhZmVSZXF1ZXN0ID0gW2NvbnZlcnRlciBzYWZlUmVx
dWVzdEZvclJlcXVlc3Q6cmVxdWVzdC5nZXQoKV07Ci0gICAgcmV0dXJuIFtzYWZlUmVxdWVzdCBV
UkxdOwotfQotCi1zdGF0aWMgVmVjdG9yPGNoYXI+IGNyZWF0ZVFMUHJldmlld1Byb3RvY29sKCkK
LXsKLSAgICBWZWN0b3I8Y2hhcj4gcHJldmlld1Byb3RvY29sOwotICAgIGNvbnN0IGNoYXIqIHFs
UHJldmlld1NjaGVtZSA9IFtRTFByZXZpZXdTY2hlbWUgVVRGOFN0cmluZ107Ci0gICAgcHJldmll
d1Byb3RvY29sLmFwcGVuZChxbFByZXZpZXdTY2hlbWUsIHN0cmxlbihxbFByZXZpZXdTY2hlbWUp
ICsgMSk7Ci0gICAgcmV0dXJuIHByZXZpZXdQcm90b2NvbDsKLX0KLQotY29uc3QgY2hhciogV2Vi
Q29yZTo6UUxQcmV2aWV3UHJvdG9jb2woKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxW
ZWN0b3I8Y2hhcj4+IHByZXZpZXdQcm90b2NvbChjcmVhdGVRTFByZXZpZXdQcm90b2NvbCgpKTsK
LSAgICByZXR1cm4gcHJldmlld1Byb3RvY29sLmdldCgpLmRhdGEoKTsKLX0KLQotI2lmIFVTRShD
RlVSTENPTk5FQ1RJT04pCi0vLyBUaGUgd2F5IFF1aWNrTG9vayB3b3JrcyBpcyB3ZSBwYXNzIGl0
IGFuIE5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlIGNhbGxiYWNrIG9iamVjdCBhdCBjcmVhdGlvbgot
Ly8gdGltZS4gVGhlbiB3ZSBwYXNzIGl0IGFsbCB0aGUgZGF0YSBhcyB3ZSByZWNlaXZlIGl0LiBP
bmNlIHdlJ3ZlIGRvd25sb2FkZWQgdGhlIGZ1bGwgVVJMLAotLy8gUXVpY2tMb29rIHR1cm5zIGFy
b3VuZCBhbmQgc2VuZCB1cywgdGhyb3VnaCB0aGlzIGRlbGVnYXRlLCB0aGUgSFRNTCB2ZXJzaW9u
IG9mIHRoZSBmaWxlIHdoaWNoIHdlCi0vLyBwYXNzIG9uIHRvIFdlYkNvcmUuIFRoZSBmbGFnIG1f
ZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIgaW4gUXVpY2tMb29rSGFuZGxlIGRlY2lk
ZXMKLS8vIHdoZXRoZXIgdG8gcGFzcyB0aGUgZGF0YSB0byBRdWlja0xvb2sgb3IgV2ViQ29yZS4K
LS8vCi0vLyBUaGlzIHdvcmtzIGZpbmUgd2hlbiB1c2luZyBOUyBBUElzLCBidXQgd2hlbiB1c2lu
ZyBDRk5ldHdvcmssIHdlIGRvbid0IGhhdmUgYSBOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZS4KLS8v
IFNvIHdlIGNyZWF0ZSBXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlIGFzIGFuIGludGVybWVk
aWF0ZSBkZWxlZ2F0ZSBvYmplY3QgYW5kIHBhc3MgaXQgdG8KLS8vIFFMUHJldmlld0NvbnZlcnRl
ci4gVGhlIHByb3h5IGRlbGVnYXRlIHRoZW4gZm9yd2FyZHMgdGhlIG1lc3NhZ2VzIG9uIHRvIHRo
ZSBDRk5ldHdvcmsgY29kZS4KLUBpbnRlcmZhY2UgV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0
ZSA6IE5TT2JqZWN0IDxOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZSwgV2ViQ29yZVJlc291cmNlTG9h
ZGVyRGVsZWdhdGU+IHsKLSAgICBSZWZQdHI8U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlPiBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZTsKLX0KLQotLSAoaWQpaW5p
dFdpdGhDb25uZWN0aW9uRGVsZWdhdGU6KFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZSopY29ubmVjdGlvbkRlbGVnYXRlOwotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZQotLSAoaWQpaW5pdFdpdGhDb25uZWN0
aW9uRGVsZWdhdGU6KFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZSopY29ubmVjdGlvbkRlbGVnYXRlCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgbV9jb25uZWN0aW9uRGVsZWdh
dGUgPSBjb25uZWN0aW9uRGVsZWdhdGU7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
Y29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlRGF0YUFy
cmF5OihOU0FycmF5ICopZGF0YUFycmF5Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24p
OwotICAgIGlmICghbV9jb25uZWN0aW9uRGVsZWdhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBM
T0coTmV0d29yaywgIldlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRh
QXJyYXkoKSIpOwotICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRSZWNlaXZlRGF0YUFycmF5
KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZj4oZGF0YUFycmF5KSk7Ci19Ci0KLS0gKHZvaWQp
Y29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlRGF0YToo
TlNEYXRhICopZGF0YSBsZW5ndGhSZWNlaXZlZDoobG9uZyBsb25nKWxlbmd0aFJlY2VpdmVkCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotICAgIGlmICghbV9jb25uZWN0aW9uRGVs
ZWdhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBMT0coTmV0d29yaywgIldlYlF1aWNrTG9va0hh
bmRsZUFzRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKCkgLSBkYXRhIGxlbmd0aCA9ICVsZCIsIChs
b25nKVtkYXRhIGxlbmd0aF0pOwotCi0gICAgLy8gUXVpY2tMb29rIGNvZGUgc2VuZHMgdXMgYSBu
aWwgZGF0YSBhdCB0aW1lcy4gVGhlIGNoZWNrIGJlbG93IGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUg
aW4KLSAgICAvLyBSZXNvdXJjZUhhbmRsZU1hYy5jcHAgYWRkZWQgZm9yIGEgZGlmZmVyZW50IGJ1
Zy4KLSAgICBpZiAoIVtkYXRhIGxlbmd0aF0pCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nvbm5l
Y3Rpb25EZWxlZ2F0ZS0+ZGlkUmVjZWl2ZURhdGEocmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+
KGRhdGEpLCBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aFJlY2VpdmVkKSk7Ci19Ci0KLS0gKHZvaWQp
Y29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24K
LXsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb25E
ZWxlZ2F0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29r
SGFuZGxlQXNEZWxlZ2F0ZTo6ZGlkRmluaXNoTG9hZGluZygpIik7Ci0gICAgbV9jb25uZWN0aW9u
RGVsZWdhdGUtPmRpZEZpbmlzaExvYWRpbmcoKTsKLX0KLQotLSAodm9pZCljb25uZWN0aW9uOihO
U1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKill
cnJvcgotewotICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSAgICBpZiAoIW1fY29ubmVj
dGlvbkRlbGVnYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgTE9HKE5ldHdvcmssICJXZWJRdWlj
a0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRGYWlsKCkiKTsKLSAgICBtX2Nvbm5lY3Rpb25EZWxl
Z2F0ZS0+ZGlkRmFpbChyZWludGVycHJldF9jYXN0PENGRXJyb3JSZWY+KGVycm9yKSk7Ci19Ci0K
LS0gKHZvaWQpZGV0YWNoSGFuZGxlCi17Ci0gICAgbV9jb25uZWN0aW9uRGVsZWdhdGUgPSBudWxs
cHRyOwotfQotQGVuZAotI2VuZGlmCi0KLUBpbnRlcmZhY2UgV2ViUmVzb3VyY2VMb2FkZXJRdWlj
a0xvb2tEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZSwgV2ViQ29y
ZVJlc291cmNlTG9hZGVyRGVsZWdhdGU+IHsKLSAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IF9y
ZXNvdXJjZUxvYWRlcjsKLSAgICBCT09MIF9oYXNTZW50RGlkUmVjZWl2ZVJlc3BvbnNlOwotICAg
IEJPT0wgX2hhc0ZhaWxlZDsKLX0KLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBRdWlja0xvb2tIYW5k
bGUqIHF1aWNrTG9va0hhbmRsZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlJlc291cmNl
TG9hZGVyUXVpY2tMb29rRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhSZXNvdXJjZUxvYWRlcjoo
UGFzc1JlZlB0cjxSZXNvdXJjZUxvYWRlcj4pcmVzb3VyY2VMb2FkZXIKLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IF9yZXNvdXJjZUxvYWRlciA9IHJlc291cmNlTG9hZGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKV9zZW5kRGlkUmVjZWl2ZVJlc3BvbnNlSWZOZWNlc3NhcnkKLXsKLSAgICBpZiAo
X2hhc1NlbnREaWRSZWNlaXZlUmVzcG9uc2UgfHwgX2hhc0ZhaWxlZCB8fCAhX3F1aWNrTG9va0hh
bmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUXVpY2tMb29rIG1pZ2h0IGZhaWwgdG8g
Y29udmVydCBhIGRvY3VtZW50IHdpdGhvdXQgY2FsbGluZyBjb25uZWN0aW9uOmRpZEZhaWxXaXRo
RXJyb3I6IChzZWUgPHJkYXI6Ly9wcm9ibGVtLzE3OTI3OTcyPikuCi0gICAgLy8gQSBuaWwgTUlN
RSB0eXBlIGlzIGFuIGluZGljYXRpb24gb2Ygc3VjaCBhIGZhaWx1cmUsIHNvIHN0b3AgbG9hZGlu
ZyB0aGUgcmVzb3VyY2UgYW5kIGlnbm9yZSBzdWJzZXF1ZW50IGRlbGVnYXRlIG1lc3NhZ2VzLgot
ICAgIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9uc2UgPSBfcXVpY2tMb29rSGFuZGxlLT5uc1Jlc3Bv
bnNlKCk7Ci0gICAgaWYgKCFbbnNSZXNwb25zZSBNSU1FVHlwZV0pIHsKLSAgICAgICAgX2hhc0Zh
aWxlZCA9IFlFUzsKLSAgICAgICAgX3Jlc291cmNlTG9hZGVyLT5kaWRGYWlsKF9yZXNvdXJjZUxv
YWRlci0+Y2Fubm90U2hvd1VSTEVycm9yKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShuc1Jlc3BvbnNlKTsKLSAgICByZXNwb25zZS5z
ZXRJc1F1aWNrTG9vayh0cnVlKTsKLQotICAgIF9oYXNTZW50RGlkUmVjZWl2ZVJlc3BvbnNlID0g
WUVTOwotICAgIF9yZXNvdXJjZUxvYWRlci0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsK
LX0KLQotI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKLS0gKHZvaWQpY29u
bmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlRGF0YUFycmF5
OihOU0FycmF5ICopZGF0YUFycmF5Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwot
ICAgIGlmICghX3Jlc291cmNlTG9hZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBf
c2VuZERpZFJlY2VpdmVSZXNwb25zZUlmTmVjZXNzYXJ5XTsKLSAgICBpZiAoX2hhc0ZhaWxlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKF9yZXNvdXJjZUxvYWRlcikKLSAgICAgICAgX3Jl
c291cmNlTG9hZGVyLT5kaWRSZWNlaXZlRGF0YUFycmF5KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJh
eVJlZj4oZGF0YUFycmF5KSk7Ci19Ci0jZW5kaWYKLQotLSAodm9pZCljb25uZWN0aW9uOihOU1VS
TENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilkYXRhIGxl
bmd0aFJlY2VpdmVkOihsb25nIGxvbmcpbGVuZ3RoUmVjZWl2ZWQKLXsKLSAgICBVTlVTRURfUEFS
QU0oY29ubmVjdGlvbik7Ci0gICAgaWYgKCFfcmVzb3VyY2VMb2FkZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtzZWxmIF9zZW5kRGlkUmVjZWl2ZVJlc3BvbnNlSWZOZWNlc3NhcnldOwotICAg
IGlmIChfaGFzRmFpbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBRdWlja0xvb2sgY29k
ZSBzZW5kcyB1cyBhIG5pbCBkYXRhIGF0IHRpbWVzLiBUaGUgY2hlY2sgYmVsb3cgaXMgdGhlIHNh
bWUgYXMgdGhlIG9uZSBpbgotICAgIC8vIFJlc291cmNlSGFuZGxlTWFjLmNwcCBhZGRlZCBmb3Ig
YSBkaWZmZXJlbnQgYnVnLgotICAgIGlmICghW2RhdGEgbGVuZ3RoXSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKF9yZXNvdXJjZUxvYWRlcikKLSAgICAgICAgX3Jlc291cmNlTG9hZGVyLT5k
aWRSZWNlaXZlRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihbZGF0YSBieXRlc10p
LCBbZGF0YSBsZW5ndGhdLCBsZW5ndGhSZWNlaXZlZCwgRGF0YVBheWxvYWRCeXRlcyk7Ci19Ci0K
LS0gKHZvaWQpY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6KE5TVVJMQ29ubmVjdGlvbiAqKWNv
bm5lY3Rpb24KLXsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgaWYgKCFfcmVz
b3VyY2VMb2FkZXIgfHwgX2hhc0ZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KF9oYXNTZW50RGlkUmVjZWl2ZVJlc3BvbnNlKTsKLSAgICBfcmVzb3VyY2VMb2FkZXItPmRpZEZp
bmlzaExvYWRpbmcoMCk7Ci19Ci0KLS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9u
ICopY29ubmVjdGlvbiBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBV
TlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBbc2VsZiBfc2VuZERpZFJlY2VpdmVSZXNw
b25zZUlmTmVjZXNzYXJ5XTsKLSAgICBpZiAoX2hhc0ZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKF9yZXNvdXJjZUxvYWRlcikKLSAgICAgICAgX3Jlc291cmNlTG9hZGVyLT5kaWRG
YWlsKFJlc291cmNlRXJyb3IoZXJyb3IpKTsKLX0KLQotLSAodm9pZClkZXRhY2hIYW5kbGUKLXsK
LSAgICBfcmVzb3VyY2VMb2FkZXIgPSBudWxscHRyOwotICAgIF9xdWlja0xvb2tIYW5kbGUgPSBu
dWxscHRyOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTlNTdHJpbmcgKmNy
ZWF0ZVRlbXBvcmFyeUZpbGVGb3JRdWlja0xvb2soTlNTdHJpbmcgKmZpbGVOYW1lKQotewotICAg
IE5TU3RyaW5nICpkb3dubG9hZERpcmVjdG9yeSA9IGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShA
IlF1aWNrTG9va0NvbnRlbnQiKTsKLSAgICBpZiAoIWRvd25sb2FkRGlyZWN0b3J5KQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgTlNTdHJpbmcgKmNvbnRlbnRQYXRoID0gW2Rvd25sb2FkRGly
ZWN0b3J5IHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlTmFtZV07Ci0gICAgTlNG
aWxlTWFuYWdlciAqZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07
Ci0gICAgTlNTdHJpbmcgKnVuaXF1ZUNvbnRlbnRQYXRoID0gW2ZpbGVNYW5hZ2VyIF93ZWJfcGF0
aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGg6Y29udGVudFBhdGhdOwotCi0gICAgQk9PTCBzdWNj
ZXNzID0gW2ZpbGVNYW5hZ2VyIF93ZWJfY3JlYXRlRmlsZUF0UGF0aFdpdGhJbnRlcm1lZGlhdGVE
aXJlY3Rvcmllczp1bmlxdWVDb250ZW50UGF0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM6bmls
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlczpRTEZpbGVBdHRyaWJ1dGVzKCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rv
cnlBdHRyaWJ1dGVzOlFMRGlyZWN0b3J5QXR0cmlidXRlcygpXTsKLQotICAgIHJldHVybiBzdWNj
ZXNzID8gdW5pcXVlQ29udGVudFBhdGggOiBuaWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUXVpY2tM
b29rSGFuZGxlQ2xpZW50KiBlbXB0eUNsaWVudCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFF1aWNrTG9va0hhbmRsZUNsaWVudD4gZW1wdHlDbGllbnQ7Ci0gICAgcmV0dXJuICZlbXB0
eUNsaWVudC5nZXQoKTsKLX0KLQotUXVpY2tMb29rSGFuZGxlOjpRdWlja0xvb2tIYW5kbGUoTlNV
UkwgKmZpcnN0UmVxdWVzdFVSTCwgTlNVUkxDb25uZWN0aW9uICpjb25uZWN0aW9uLCBOU1VSTFJl
c3BvbnNlICpuc1Jlc3BvbnNlLCBpZCBkZWxlZ2F0ZSkKLSAgICA6IG1fZmlyc3RSZXF1ZXN0VVJM
KGZpcnN0UmVxdWVzdFVSTCkKLSAgICAsIG1fY29udmVydGVyKGFkb3B0TlMoW2FsbG9jUUxQcmV2
aWV3Q29udmVydGVySW5zdGFuY2UoKSBpbml0V2l0aENvbm5lY3Rpb246Y29ubmVjdGlvbiBkZWxl
Z2F0ZTpkZWxlZ2F0ZSByZXNwb25zZTpuc1Jlc3BvbnNlIG9wdGlvbnM6bmlsXSkpCi0gICAgLCBt
X2RlbGVnYXRlKGRlbGVnYXRlKQotICAgICwgbV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZl
cnRlcihmYWxzZSkKLSAgICAsIG1fbnNSZXNwb25zZShbbV9jb252ZXJ0ZXIgcHJldmlld1Jlc3Bv
bnNlXSkKLSAgICAsIG1fY2xpZW50KGVtcHR5Q2xpZW50KCkpCi17Ci0gICAgTE9HKE5ldHdvcmss
ICJRdWlja0xvb2tIYW5kbGU6OlF1aWNrTG9va0hhbmRsZSgpIC0gcHJldmlld0ZpbGVOYW1lOiAl
cyIsIFttX2NvbnZlcnRlciBwcmV2aWV3RmlsZU5hbWVdKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRy
PFF1aWNrTG9va0hhbmRsZT4gUXVpY2tMb29rSGFuZGxlOjpjcmVhdGUoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgTlNVUkxDb25uZWN0aW9uICpjb25uZWN0aW9uLCBOU1VSTFJlc3BvbnNlICpuc1Jl
c3BvbnNlLCBpZCBkZWxlZ2F0ZSkKLXsKLSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlKTsK
LSAgICBpZiAoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5yZXF1ZXN0ZXIoKSAhPSBSZXNvdXJjZVJl
cXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbiB8fCAhW1FMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBl
c1NldCgpIGNvbnRhaW5zT2JqZWN0Oltuc1Jlc3BvbnNlIE1JTUVUeXBlXV0pCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4gcXVp
Y2tMb29rSGFuZGxlKG5ldyBRdWlja0xvb2tIYW5kbGUoW2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCku
bnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIFVSTF0sIGNvbm5lY3Rpb24sIG5zUmVz
cG9uc2UsIGRlbGVnYXRlKSk7Ci0gICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkQ3JlYXRlUXVpY2tM
b29rSGFuZGxlKCpxdWlja0xvb2tIYW5kbGUpOwotICAgIHJldHVybiBxdWlja0xvb2tIYW5kbGU7
Ci19Ci0KLSNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQotc3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9v
a0hhbmRsZT4gUXVpY2tMb29rSGFuZGxlOjpjcmVhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKiBjb25uZWN0
aW9uRGVsZWdhdGUsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKLXsKLSAgICBBU1NFUlRf
QVJHKGhhbmRsZSwgaGFuZGxlKTsKLSAgICBpZiAoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5yZXF1
ZXN0ZXIoKSAhPSBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbiB8fCAhW1FMUHJldmll
d0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUNG
VVJMUmVzcG9uc2VHZXRNSU1FVHlwZShjZlJlc3BvbnNlKV0pCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSA9IFtOU1VSTFJlc3BvbnNlIF9y
ZXNwb25zZVdpdGhDRlVSTFJlc3BvbnNlOmNmUmVzcG9uc2VdOwotICAgIFdlYlF1aWNrTG9va0hh
bmRsZUFzRGVsZWdhdGUgKmRlbGVnYXRlID0gW1tbV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0
ZSBhbGxvY10gaW5pdFdpdGhDb25uZWN0aW9uRGVsZWdhdGU6Y29ubmVjdGlvbkRlbGVnYXRlXSBh
dXRvcmVsZWFzZV07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4gcXVpY2tM
b29rSGFuZGxlKG5ldyBRdWlja0xvb2tIYW5kbGUoW2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkubnNV
UkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIFVSTF0sIG5pbCwgbnNSZXNwb25zZSwgZGVs
ZWdhdGUpKTsKLSAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRDcmVhdGVRdWlja0xvb2tIYW5kbGUo
KnF1aWNrTG9va0hhbmRsZSk7Ci0gICAgcmV0dXJuIHF1aWNrTG9va0hhbmRsZTsKLX0KLQotQ0ZV
UkxSZXNwb25zZVJlZiBRdWlja0xvb2tIYW5kbGU6OmNmUmVzcG9uc2UoKQotewotICAgIHJldHVy
biBbbV9uc1Jlc3BvbnNlIF9DRlVSTFJlc3BvbnNlXTsKLX0KLSNlbmRpZgotCi1ib29sIFF1aWNr
TG9va0hhbmRsZTo6c2hvdWxkQ3JlYXRlRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKLXsKLSAgICByZXR1cm4gW1FMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNv
bnRhaW5zT2JqZWN0Om1pbWVUeXBlXTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hh
bmRsZT4gUXVpY2tMb29rSGFuZGxlOjpjcmVhdGUoUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKHNob3VsZENyZWF0
ZUZvck1JTUVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpKTsKLQotICAgIFJldGFpblB0cjxXZWJS
ZXNvdXJjZUxvYWRlclF1aWNrTG9va0RlbGVnYXRlPiBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJS
ZXNvdXJjZUxvYWRlclF1aWNrTG9va0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFJlc291cmNlTG9h
ZGVyOiZsb2FkZXJdKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UXVpY2tMb29rSGFuZGxlPiBxdWlj
a0xvb2tIYW5kbGUobmV3IFF1aWNrTG9va0hhbmRsZShbbG9hZGVyLm9yaWdpbmFsUmVxdWVzdCgp
Lm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSBVUkxdLCBuaWwsIHJlc3BvbnNlLm5z
VVJMUmVzcG9uc2UoKSwgZGVsZWdhdGUuZ2V0KCkpKTsKLSAgICBbZGVsZWdhdGUgc2V0UXVpY2tM
b29rSGFuZGxlOnF1aWNrTG9va0hhbmRsZS5nZXQoKV07Ci0gICAgbG9hZGVyLmRpZENyZWF0ZVF1
aWNrTG9va0hhbmRsZSgqcXVpY2tMb29rSGFuZGxlKTsKLSAgICByZXR1cm4gcXVpY2tMb29rSGFu
ZGxlOwotfQotCi1OU1VSTFJlc3BvbnNlICpRdWlja0xvb2tIYW5kbGU6Om5zUmVzcG9uc2UoKQot
ewotICAgIHJldHVybiBtX25zUmVzcG9uc2UuZ2V0KCk7Ci19Ci0KLWJvb2wgUXVpY2tMb29rSGFu
ZGxlOjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYgY2ZEYXRhQXJyYXkpCi17Ci0gICAg
aWYgKG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0
YUFycmF5KCkiKTsKLSAgICBbbV9jb252ZXJ0ZXIgYXBwZW5kRGF0YUFycmF5OihOU0FycmF5ICop
Y2ZEYXRhQXJyYXldOwotICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YUFycmF5KGNmRGF0YUFy
cmF5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBRdWlja0xvb2tIYW5kbGU6OmRpZFJl
Y2VpdmVEYXRhKENGRGF0YVJlZiBjZkRhdGEpCi17Ci0gICAgaWYgKG1fZmluaXNoZWRMb2FkaW5n
RGF0YUludG9Db252ZXJ0ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1
cm4gZGlkUmVjZWl2ZURhdGFBcnJheShhZG9wdENGKENGQXJyYXlDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgKGNvbnN0IHZvaWQqKikmY2ZEYXRhLCAxLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tz
KSkuZ2V0KCkpOwotfQotCi1ib29sIFF1aWNrTG9va0hhbmRsZTo6ZGlkRmluaXNoTG9hZGluZygp
Ci17Ci0gICAgaWYgKG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpkaWRG
aW5pc2hMb2FkaW5nKCkiKTsKLSAgICBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29udmVydGVy
ID0gWUVTOwotICAgIFttX2NvbnZlcnRlciBmaW5pc2hlZEFwcGVuZGluZ0RhdGFdOwotICAgIG1f
Y2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UXVpY2tMb29rSGFuZGxlOjpkaWRGYWlsKCkKLXsKLSAgICBMT0coTmV0d29yaywgIlF1aWNrTG9v
a0hhbmRsZTo6ZGlkRmFpbCgpIik7Ci0gICAgbV9jbGllbnQtPmRpZEZhaWwoKTsKLSAgICBbbV9j
b252ZXJ0ZXIgZmluaXNoQ29udmVydGluZ107Ci0gICAgbV9jb252ZXJ0ZXIgPSBudWxscHRyOwot
fQotCi1RdWlja0xvb2tIYW5kbGU6On5RdWlja0xvb2tIYW5kbGUoKQotewotICAgIExPRyhOZXR3
b3JrLCAiUXVpY2tMb29rSGFuZGxlOjp+UXVpY2tMb29rSGFuZGxlKCkiKTsKLSAgICBtX2NvbnZl
cnRlciA9IG51bGxwdHI7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBkZXRhY2hIYW5kbGVdOwotfQotCi1T
dHJpbmcgUXVpY2tMb29rSGFuZGxlOjpwcmV2aWV3RmlsZU5hbWUoKSBjb25zdAotewotICAgIHJl
dHVybiBbbV9jb252ZXJ0ZXIgcHJldmlld0ZpbGVOYW1lXTsKLX0KLQotU3RyaW5nIFF1aWNrTG9v
a0hhbmRsZTo6cHJldmlld1VUSSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFttX2NvbnZlcnRlciBw
cmV2aWV3VVRJXTsKLX0KLQotTlNVUkwgKlF1aWNrTG9va0hhbmRsZTo6cHJldmlld1JlcXVlc3RV
UkwoKSBjb25zdAotewotICAgIHJldHVybiBbW21fY29udmVydGVyIHByZXZpZXdSZXF1ZXN0XSBV
UkxdOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoUVVJQ0tfTE9PSykK
</data>

          </attachment>
      

    </bug>

</bugzilla>