<?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>126602</bug_id>
          
          <creation_ts>2014-01-07 14:39:51 -0800</creation_ts>
          <short_desc>Move expected results out of messages_unittest.py into separate files</short_desc>
          <delta_ts>2014-01-07 17:00:07 -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>528+ (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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>965172</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-07 14:39:51 -0800</bug_when>
    <thetext>Move expected results out of messages_unittest.py into separate files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965173</commentid>
    <comment_count>1</comment_count>
      <attachid>220551</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-07 14:40:51 -0800</bug_when>
    <thetext>Created attachment 220551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965174</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-07 14:41:51 -0800</bug_when>
    <thetext>Attachment 220551 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/Scripts/webkit2/MessageReceiver-expected.cpp&apos;, u&apos;Source/WebKit2/Scripts/webkit2/Messages-expected.h&apos;, u&apos;Source/WebKit2/Scripts/webkit2/messages_unittest.py&apos;, u&apos;Source/WebKit2/Scripts/webkit2/test-messages.in&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/Scripts/webkit2/Messages-expected.h:25:  #ifndef header guard has wrong style, please use: Messages_expected_h  [build/header_guard] [5]
ERROR: Source/WebKit2/Scripts/webkit2/Messages-expected.h:26:  WebPageMessages_h is incorrect. #defined constants should use all uppercase names with words separated by underscores.  [readability/naming/define/constants] [4]
ERROR: Source/WebKit2/Scripts/webkit2/Messages-expected.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit2/Scripts/webkit2/MessageReceiver-expected.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 5 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>965180</commentid>
    <comment_count>3</comment_count>
      <attachid>220551</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-07 14:55:06 -0800</bug_when>
    <thetext>Comment on attachment 220551
Patch

Attachment 220551 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5667057144168448</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965185</commentid>
    <comment_count>4</comment_count>
      <attachid>220551</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-07 15:13:54 -0800</bug_when>
    <thetext>Comment on attachment 220551
Patch

Attachment 220551 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/4946550610460672</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965258</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-07 17:00:07 -0800</bug_when>
    <thetext>https://trac.webkit.org/r161472</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220551</attachid>
            <date>2014-01-07 14:40:51 -0800</date>
            <delta_ts>2014-01-07 15:13:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126602-20140107144051.patch</filename>
            <type>text/plain</type>
            <size>60263</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2Y1ZDA0MTM1NmFkYWEw
OTZkMGMwNjlhZGM1MjNmMDQ2YjUxYTU0NS4uZGM5ODQ0OTcwYTc1MmM1NWFmMTdiOTVjNzJjZGZk
ZjNkYTYzODdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE0LTAxLTA3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgZXhwZWN0
ZWQgcmVzdWx0cyBvdXQgb2YgbWVzc2FnZXNfdW5pdHRlc3QucHkgaW50byBzZXBhcmF0ZSBmaWxl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NjAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBVbmlubGluZSB0aGUgdGVzdCBpbnB1dCBhbmQgb3V0cHV0IGZyb20gbWVzc2FnZXNfdW5pdHRl
c3QucHkgdG8gbWFrZQorICAgICAgICBpdCBlYXNpZXIgdG8gYWRkIG1vcmUgdGVzdHMuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvTWVzc2FnZVJlY2VpdmVyLWV4cGVjdGVkLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZFJlY2VpdmVXZWJQYWdlTWVzc2FnZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZFJlY2VpdmVTeW5jV2ViUGFnZU1lc3NhZ2Up
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9NZXNzYWdlcy1leHBlY3RlZC5oOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXNfdW5pdHRlc3QucHk6CisgICAgICAg
IChQYXJzaW5nVGVzdC50ZXN0X3JlY2VpdmVyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIv
dGVzdC1tZXNzYWdlcy5pbjogQWRkZWQuCisKIDIwMTQtMDEtMDcgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIENyYXNoIHdoZW4gdHJ5aW5nIHRv
IHJlZ2lzdGVyIGEgY3VzdG9tIHNjaGVtZSBiZWZvcmUgbmV0d29yayBwcm9jZXNzIGhhcyBiZWVu
IGxhdW5jaGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvTWVz
c2FnZVJlY2VpdmVyLWV4cGVjdGVkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0
Mi9NZXNzYWdlUmVjZWl2ZXItZXhwZWN0ZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmYmMxZWY0Y2I5YzQz
YmE3MDNiOGFjMGEzN2VkNGJkOGVhNWExMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdDIvTWVzc2FnZVJlY2VpdmVyLWV4cGVjdGVkLmNwcApAQCAtMCww
ICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiAoRU5B
QkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYg
TUFTVEVSX0FORCkpCisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisKKyNpbmNsdWRlICJBcmd1bWVu
dENvZGVycy5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpZiBFTkFCTEUoREVQUkVDQVRF
RF9GRUFUVVJFKSB8fCBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCisjaW5jbHVkZSAiRHVt
bXlUeXBlLmgiCisjZW5kaWYKKyNpbmNsdWRlICJIYW5kbGVNZXNzYWdlLmgiCisjaWYgUExBVEZP
Uk0oTUFDKQorI2luY2x1ZGUgIk1hY2hQb3J0LmgiCisjZW5kaWYKKyNpbmNsdWRlICJNZXNzYWdl
RGVjb2Rlci5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgorI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0Vf
Q09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKSB8fCAoRU5BQkxFKFRP
VUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01F
U1NBR0VfQ09ORElUSU9OKSkKKyNpbmNsdWRlICJXZWJFdmVudC5oIgorI2VuZGlmCisjaW5jbHVk
ZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNTdG9yZS5oIgor
I2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKyNl
bmRpZgorI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgorI2luY2x1ZGUgPHV0aWxpdHk+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBNZXNzYWdlcyB7CisKK25h
bWVzcGFjZSBXZWJQYWdlIHsKKworR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRS
ZXBseTo6RGVsYXllZFJlcGx5KFBhc3NSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9u
LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4gZW5jb2RlcikKKyAgICA6IG1f
Y29ubmVjdGlvbihjb25uZWN0aW9uKQorICAgICwgbV9lbmNvZGVyKHN0ZDo6bW92ZShlbmNvZGVy
KSkKK3sKK30KKworR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseTo6fkRl
bGF5ZWRSZXBseSgpCit7CisgICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOworfQorCitib29sIEdl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk6OnNlbmQoY29uc3QgSVBDOjpD
b25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUpCit7CisgICAgQVNTRVJUKG1fZW5j
b2Rlcik7CisgICAgKm1fZW5jb2RlciA8PCBjb25uZWN0aW9uSGFuZGxlOworICAgIGJvb2wgcmVz
dWx0ID0gbV9jb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5KHN0ZDo6bW92ZShtX2VuY29kZXIpKTsK
KyAgICBtX2Nvbm5lY3Rpb24gPSBudWxscHRyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Rl
c3RNdWx0aXBsZUF0dHJpYnV0ZXM6OkRlbGF5ZWRSZXBseTo6RGVsYXllZFJlcGx5KFBhc3NSZWZQ
dHI8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNz
YWdlRW5jb2Rlcj4gZW5jb2RlcikKKyAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQorICAg
ICwgbV9lbmNvZGVyKHN0ZDo6bW92ZShlbmNvZGVyKSkKK3sKK30KKworVGVzdE11bHRpcGxlQXR0
cmlidXRlczo6RGVsYXllZFJlcGx5Ojp+RGVsYXllZFJlcGx5KCkKK3sKKyAgICBBU1NFUlQoIW1f
Y29ubmVjdGlvbik7Cit9CisKK2Jvb2wgVGVzdE11bHRpcGxlQXR0cmlidXRlczo6RGVsYXllZFJl
cGx5OjpzZW5kKCkKK3sKKyAgICBBU1NFUlQobV9lbmNvZGVyKTsKKyAgICBib29sIHJlc3VsdCA9
IG1fY29ubmVjdGlvbi0+c2VuZFN5bmNSZXBseShzdGQ6Om1vdmUobV9lbmNvZGVyKSk7CisgICAg
bV9jb25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJQYWdlCisKK30gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVXZWJQYWdlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRVUkw6Om5hbWUoKSkg
eworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRVUkw+
KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpsb2FkVVJMKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1l
KCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmc6Om5hbWUoKSkgeworICAgICAg
ICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmc+KGRl
Y29kZXIsIHRoaXMsICZXZWJQYWdlOjpsb2FkU29tZXRoaW5nKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NB
R0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQorICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnQ6Om5h
bWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlRv
dWNoRXZlbnQ+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0b3VjaEV2ZW50KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVT
VEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQor
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkFkZEV2
ZW50OjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQ
YWdlOjpBZGRFdmVudD4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmFkZEV2ZW50KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAg
aWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFNvbWV0
aGluZ0Vsc2U6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6
OldlYlBhZ2U6OkxvYWRTb21ldGhpbmdFbHNlPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6bG9h
ZFNvbWV0aGluZ0Vsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgaWYg
KGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBv
bGljeURlY2lzaW9uOjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3Nh
Z2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24+KGRlY29kZXIsIHRoaXMsICZX
ZWJQYWdlOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24pOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkNs
b3NlOjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQ
YWdlOjpDbG9zZT4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmNsb3NlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpX
ZWJQYWdlOjpQcmVmZXJlbmNlc0RpZENoYW5nZTo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFu
ZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRDaGFuZ2U+KGRlY29k
ZXIsIHRoaXMsICZXZWJQYWdlOjpwcmVmZXJlbmNlc0RpZENoYW5nZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2Vi
UGFnZTo6U2VuZERvdWJsZUFuZEZsb2F0OjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVN
ZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kRG91YmxlQW5kRmxvYXQ+KGRlY29kZXIsIHRo
aXMsICZXZWJQYWdlOjpzZW5kRG91YmxlQW5kRmxvYXQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlNl
bmRJbnRzOjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZW5kSW50cz4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OnNlbmRJbnRzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1l
c3NhZ2VzOjpXZWJQYWdlOjpUZXN0UGFyYW1ldGVyQXR0cmlidXRlczo6bmFtZSgpKSB7CisgICAg
ICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6VGVzdFBhcmFtZXRlckF0
dHJpYnV0ZXM+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZXN0UGFyYW1ldGVyQXR0cmlidXRl
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUo
KSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6VGVtcGxhdGVUZXN0OjpuYW1lKCkpIHsKKyAgICAgICAg
SVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpUZW1wbGF0ZVRlc3Q+KGRlY29k
ZXIsIHRoaXMsICZXZWJQYWdlOjp0ZW1wbGF0ZVRlc3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1l
c3NhZ2VzOjpXZWJQYWdlOjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbjo6bmFtZSgpKSB7
CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ3JlYXRl
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpkaWRDcmVhdGVX
ZWJQcm9jZXNzQ29ubmVjdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyNp
ZiBFTkFCTEUoREVQUkVDQVRFRF9GRUFUVVJFKQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1l
KCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkRlcHJlY2F0ZWRPcGVyYXRpb246Om5hbWUoKSkgewor
ICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkRlcHJlY2F0ZWRP
cGVyYXRpb24+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpkZXByZWNhdGVkT3BlcmF0aW9uKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShFWFBFUklNRU5UQUxf
RkVBVFVSRSkKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQ
YWdlOjpFeHBlcmltZW50YWxPcGVyYXRpb246Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRs
ZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkV4cGVyaW1lbnRhbE9wZXJhdGlvbj4oZGVjb2Rl
ciwgdGhpcywgJldlYlBhZ2U6OmV4cGVyaW1lbnRhbE9wZXJhdGlvbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBX
ZWJQYWdlOjpkaWRSZWNlaXZlU3luY1dlYlBhZ2VNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29u
bmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgaWYgKGRlY29kZXIubWVz
c2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6Q3JlYXRlUGx1Z2luOjpuYW1lKCkpIHsK
KyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpDcmVhdGVQbHVn
aW4+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpjcmVhdGVQbHVnaW4p
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkg
PT0gTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRBbGVydDo6bmFtZSgpKSB7CisgICAg
ICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6UnVuSmF2YVNjcmlwdEFs
ZXJ0PihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6cnVuSmF2YVNjcmlw
dEFsZXJ0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
TmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQbHVnaW5zOjpuYW1lKCkpIHsKKyAgICAg
ICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQbHVnaW5zPihkZWNv
ZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6Z2V0UGx1Z2lucyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
czo6V2ViUGFnZTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246Om5hbWUoKSkgeworICAgICAg
ICBJUEM6OmhhbmRsZU1lc3NhZ2VEZWxheWVkPE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbj4oY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyLCB0aGlz
LCAmV2ViUGFnZTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBh
Z2U6OlRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRs
ZU1lc3NhZ2VEZWxheWVkPE1lc3NhZ2VzOjpXZWJQYWdlOjpUZXN0TXVsdGlwbGVBdHRyaWJ1dGVz
Pihjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZXN0
TXVsdGlwbGVBdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBQTEFURk9S
TShNQUMpCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFn
ZTo6SW50ZXJwcmV0S2V5RXZlbnQ6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3Nh
Z2U8TWVzc2FnZXM6OldlYlBhZ2U6OkludGVycHJldEtleUV2ZW50PihkZWNvZGVyLCAqcmVwbHlF
bmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6aW50ZXJwcmV0S2V5RXZlbnQpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVE
X01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL01lc3NhZ2VzLWV4cGVjdGVkLmggYi9T
b3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvTWVzc2FnZXMtZXhwZWN0ZWQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43YjczMTgzMTcwOWUzMjZiZTBjOGE0YTU5Mzg3NDhmOGRmMGJjOWE3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL01lc3NhZ2VzLWV4cGVjdGVk
LmgKQEAgLTAsMCArMSw1NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdlTWVzc2Fn
ZXNfaAorI2RlZmluZSBXZWJQYWdlTWVzc2FnZXNfaAorCisjaWYgKEVOQUJMRShXRUJLSVQyKSAm
JiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQor
CisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VFbmNvZGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiU3Ry
aW5nUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIElQQyB7CisgICAgY2xhc3MgQ29ubmVjdGlvbjsKKyAgICBjbGFzcyBEdW1t
eVR5cGU7CisgICAgY2xhc3MgTWFjaFBvcnQ7Cit9CisKK25hbWVzcGFjZSBXVEYgeworICAgIGNs
YXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgc3RydWN0IFdlYlByZWZl
cmVuY2VzU3RvcmU7CisgICAgY2xhc3MgV2ViVG91Y2hFdmVudDsKK30KKworbmFtZXNwYWNlIE1l
c3NhZ2VzIHsKK25hbWVzcGFjZSBXZWJQYWdlIHsKKworc3RhdGljIGlubGluZSBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lKCkKK3sKKyAgICByZXR1cm4gSVBDOjpTdHJp
bmdSZWZlcmVuY2UoIldlYlBhZ2UiKTsKK30KKworY2xhc3MgTG9hZFVSTCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZz4gRGVjb2RlVHlwZTsKKworICAgIHN0YXRpYyBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2
ZXJOYW1lKCk7IH0KKyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0
dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJMb2FkVVJMIik7IH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4cGxpY2l0IExvYWRVUkwoY29uc3QgU3RyaW5n
JiB1cmwpCisgICAgICAgIDogbV9hcmd1bWVudHModXJsKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IGFyZ3VtZW50cygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6
dHVwbGU8Y29uc3QgU3RyaW5nJj4gbV9hcmd1bWVudHM7Cit9OworCisjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKK2NsYXNzIExvYWRTb21ldGhpbmcgeworcHVibGljOgorICAgIHR5cGVkZWYgc3Rk
Ojp0dXBsZTxTdHJpbmc+IERlY29kZVR5cGU7CisKKyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Cisg
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSgiTG9hZFNvbWV0aGluZyIpOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNT
eW5jID0gZmFsc2U7CisKKyAgICBleHBsaWNpdCBMb2FkU29tZXRoaW5nKGNvbnN0IFN0cmluZyYg
dXJsKQorICAgICAgICA6IG1fYXJndW1lbnRzKHVybCkKKyAgICB7CisgICAgfQorCisgICAgY29u
c3Qgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnR1
cGxlPGNvbnN0IFN0cmluZyY+IG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCisjaWYgKEVOQUJM
RShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhF
Ul9NRVNTQUdFX0NPTkRJVElPTikpCitjbGFzcyBUb3VjaEV2ZW50IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIHN0ZDo6dHVwbGU8V2ViS2l0OjpXZWJUb3VjaEV2ZW50PiBEZWNvZGVUeXBlOworCisg
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck5hbWUoKTsgfQorICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBu
YW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIlRvdWNoRXZlbnQiKTsgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgZXhwbGljaXQgVG91Y2hF
dmVudChjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmIGV2ZW50KQorICAgICAgICA6IG1fYXJn
dW1lbnRzKGV2ZW50KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0
IFdlYktpdDo6V2ViVG91Y2hFdmVudCY+IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dHVwbGU8
Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50Jj4gbV9hcmd1bWVudHM7Cit9OworI2VuZGlmCisK
KyNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAm
JiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKK2NsYXNzIEFkZEV2ZW50IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V2ViS2l0OjpXZWJUb3VjaEV2ZW50PiBEZWNvZGVU
eXBlOworCisgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQorICAgIHN0YXRpYyBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkFkZEV2ZW50Iik7
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4cGxpY2l0
IEFkZEV2ZW50KGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVudCYgZXZlbnQpCisgICAgICAgIDog
bV9hcmd1bWVudHMoZXZlbnQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6dHVwbGU8
Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50Jj4gYXJndW1lbnRzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp0
dXBsZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiBtX2FyZ3VtZW50czsKK307CisjZW5k
aWYKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitjbGFzcyBMb2FkU29tZXRoaW5nRWxzZSB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZz4gRGVjb2RlVHlwZTsKKwor
ICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KKyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJMb2FkU29tZXRoaW5nRWxzZSIp
OyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7CisKKyAgICBleHBsaWNp
dCBMb2FkU29tZXRoaW5nRWxzZShjb25zdCBTdHJpbmcmIHVybCkKKyAgICAgICAgOiBtX2FyZ3Vt
ZW50cyh1cmwpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgU3Ry
aW5nJj4gYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50
czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiBtX2Fy
Z3VtZW50czsKK307CisjZW5kaWYKKworY2xhc3MgRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIHVpbnQ2NF90LCB1aW50
MzJfdD4gRGVjb2RlVHlwZTsKKworICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNl
aXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KKyAgICBzdGF0aWMg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNl
KCJEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24iKTsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlz
U3luYyA9IGZhbHNlOworCisgICAgRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVySUQsIHVpbnQzMl90IHBvbGljeUFjdGlvbikKKyAgICAg
ICAgOiBtX2FyZ3VtZW50cyhmcmFtZUlELCBsaXN0ZW5lcklELCBwb2xpY3lBY3Rpb24pCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6dHVwbGU8dWludDY0X3QsIHVpbnQ2NF90LCB1aW50
MzJfdD4gYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50
czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp0dXBsZTx1aW50NjRfdCwgdWludDY0X3Qs
IHVpbnQzMl90PiBtX2FyZ3VtZW50czsKK307CisKK2NsYXNzIENsb3NlIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIHN0ZDo6dHVwbGU8PiBEZWNvZGVUeXBlOworCisgICAgc3RhdGljIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUo
KTsgfQorICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBD
OjpTdHJpbmdSZWZlcmVuY2UoIkNsb3NlIik7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5
bmMgPSBmYWxzZTsKKworICAgIGNvbnN0IHN0ZDo6dHVwbGU8PiBhcmd1bWVudHMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGQ6OnR1cGxlPD4gbV9hcmd1bWVudHM7Cit9OworCitjbGFzcyBQcmVmZXJlbmNlc0RpZENo
YW5nZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdlYktpdDo6V2ViUHJlZmVy
ZW5jZXNTdG9yZT4gRGVjb2RlVHlwZTsKKworICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KKyAgICBz
dGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVm
ZXJlbmNlKCJQcmVmZXJlbmNlc0RpZENoYW5nZSIpOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNTeW5jID0gZmFsc2U7CisKKyAgICBleHBsaWNpdCBQcmVmZXJlbmNlc0RpZENoYW5nZShjb25z
dCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQorICAgICAgICA6IG1fYXJndW1l
bnRzKHN0b3JlKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFdl
YktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSY+IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dHVw
bGU8Y29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlJj4gbV9hcmd1bWVudHM7Cit9Owor
CitjbGFzcyBTZW5kRG91YmxlQW5kRmxvYXQgeworcHVibGljOgorICAgIHR5cGVkZWYgc3RkOjp0
dXBsZTxkb3VibGUsIGZsb2F0PiBEZWNvZGVUeXBlOworCisgICAgc3RhdGljIElQQzo6U3RyaW5n
UmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsg
fQorICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpT
dHJpbmdSZWZlcmVuY2UoIlNlbmREb3VibGVBbmRGbG9hdCIpOyB9CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNTeW5jID0gZmFsc2U7CisKKyAgICBTZW5kRG91YmxlQW5kRmxvYXQoZG91YmxlIGQs
IGZsb2F0IGYpCisgICAgICAgIDogbV9hcmd1bWVudHMoZCwgZikKKyAgICB7CisgICAgfQorCisg
ICAgY29uc3Qgc3RkOjp0dXBsZTxkb3VibGUsIGZsb2F0PiBhcmd1bWVudHMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dGQ6OnR1cGxlPGRvdWJsZSwgZmxvYXQ+IG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgU2VuZElu
dHMgeworcHVibGljOgorICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxWZWN0b3I8dWludDY0X3Q+LCBW
ZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4+IERlY29kZVR5cGU7CisKKyAgICBzdGF0aWMgSVBDOjpT
dHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFt
ZSgpOyB9CisgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSgiU2VuZEludHMiKTsgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IGlzU3luYyA9IGZhbHNlOworCisgICAgU2VuZEludHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYg
aW50cywgY29uc3QgVmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+JiBpbnRWZWN0b3JzKQorICAgICAg
ICA6IG1fYXJndW1lbnRzKGludHMsIGludFZlY3RvcnMpCisgICAgeworICAgIH0KKworICAgIGNv
bnN0IHN0ZDo6dHVwbGU8Y29uc3QgVmVjdG9yPHVpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxWZWN0
b3I8dWludDY0X3Q+PiY+IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dHVwbGU8Y29uc3QgVmVj
dG9yPHVpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+PiY+IG1fYXJndW1l
bnRzOworfTsKKworY2xhc3MgQ3JlYXRlUGx1Z2luIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8dWludDY0X3QsIFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzPiBEZWNvZGVUeXBl
OworCisgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0
dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQorICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkNyZWF0ZVBsdWdpbiIp
OyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKKworICAgIHR5cGVkZWYg
SVBDOjpBcmd1bWVudHMxPGJvb2wmPiBSZXBseTsKKyAgICBDcmVhdGVQbHVnaW4odWludDY0X3Qg
cGx1Z2luSW5zdGFuY2VJRCwgY29uc3QgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMpCisgICAgICAgIDogbV9hcmd1bWVudHMocGx1Z2luSW5zdGFuY2VJRCwgcGFyYW1ldGVy
cykKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgc3RkOjp0dXBsZTx1aW50NjRfdCwgY29uc3Qg
V2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMmPiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnR1
cGxlPHVpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyY+IG1fYXJndW1l
bnRzOworfTsKKworY2xhc3MgUnVuSmF2YVNjcmlwdEFsZXJ0IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIFN0cmluZz4gRGVjb2RlVHlwZTsKKworICAgIHN0YXRp
YyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVj
ZWl2ZXJOYW1lKCk7IH0KKyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsg
cmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJSdW5KYXZhU2NyaXB0QWxlcnQiKTsgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7CisKKyAgICB0eXBlZGVmIElQQzo6QXJn
dW1lbnRzMCBSZXBseTsKKyAgICBSdW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgICAgICA6IG1fYXJndW1lbnRzKGZyYW1lSUQsIG1l
c3NhZ2UpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6dHVwbGU8dWludDY0X3QsIGNv
bnN0IFN0cmluZyY+IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9h
cmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dHVwbGU8dWludDY0X3QsIGNv
bnN0IFN0cmluZyY+IG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgR2V0UGx1Z2lucyB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPGJvb2w+IERlY29kZVR5cGU7CisKKyAgICBzdGF0
aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJl
Y2VpdmVyTmFtZSgpOyB9CisgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7
IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiR2V0UGx1Z2lucyIpOyB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKKworICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHMx
PFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiY+IFJlcGx5OworICAgIGV4cGxpY2l0IEdldFBs
dWdpbnMoYm9vbCByZWZyZXNoKQorICAgICAgICA6IG1fYXJndW1lbnRzKHJlZnJlc2gpCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6dHVwbGU8Ym9vbD4gYXJndW1lbnRzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgc3RkOjp0dXBsZTxib29sPiBtX2FyZ3VtZW50czsKK307CisKK2NsYXNzIEdldFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8U3RyaW5n
PiBEZWNvZGVUeXBlOworCisgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVy
TmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQorICAgIHN0YXRpYyBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkdl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uIik7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5
bmMgPSB0cnVlOworCisgICAgc3RydWN0IERlbGF5ZWRSZXBseSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxEZWxheWVkUmVwbHk+IHsKKyAgICAgICAgRGVsYXllZFJlcGx5KFBhc3NSZWZQ
dHI8SVBDOjpDb25uZWN0aW9uPiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+
KTsKKyAgICAgICAgfkRlbGF5ZWRSZXBseSgpOworCisgICAgICAgIGJvb2wgc2VuZChjb25zdCBJ
UEM6OkNvbm5lY3Rpb246OkhhbmRsZSYgY29ubmVjdGlvbkhhbmRsZSk7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiBtX2VuY29kZXI7CisgICAgfTsK
KworICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHMxPElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJj4g
UmVwbHk7CisgICAgZXhwbGljaXQgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oY29uc3QgU3Ry
aW5nJiBwbHVnaW5QYXRoKQorICAgICAgICA6IG1fYXJndW1lbnRzKHBsdWdpblBhdGgpCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4gYXJndW1lbnRz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiBtX2FyZ3VtZW50czsKK307CisK
K2NsYXNzIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXMgeworcHVibGljOgorICAgIHR5cGVkZWYgc3Rk
Ojp0dXBsZTw+IERlY29kZVR5cGU7CisKKyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
cmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9CisgICAgc3Rh
dGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSgiVGVzdE11bHRpcGxlQXR0cmlidXRlcyIpOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNTeW5jID0gdHJ1ZTsKKworICAgIHN0cnVjdCBEZWxheWVkUmVwbHkgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8RGVsYXllZFJlcGx5PiB7CisgICAgICAgIERlbGF5ZWRSZXBseShQYXNz
UmVmUHRyPElQQzo6Q29ubmVjdGlvbj4sIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNv
ZGVyPik7CisgICAgICAgIH5EZWxheWVkUmVwbHkoKTsKKworICAgICAgICBib29sIHNlbmQoKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVj
dGlvbjsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IG1fZW5j
b2RlcjsKKyAgICB9OworCisgICAgdHlwZWRlZiBJUEM6OkFyZ3VtZW50czAgUmVwbHk7CisgICAg
Y29uc3Qgc3RkOjp0dXBsZTw+IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dHVwbGU8PiBtX2Fy
Z3VtZW50czsKK307CisKK2NsYXNzIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIGRvdWJsZSwgZG91YmxlPiBEZWNvZGVU
eXBlOworCisgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQorICAgIHN0YXRpYyBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIlRlc3RQYXJhbWV0
ZXJBdHRyaWJ1dGVzIik7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsK
KworICAgIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKHVpbnQ2NF90IGZvbywgZG91YmxlIGJhciwg
ZG91YmxlIGJheikKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhmb28sIGJhciwgYmF6KQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBkb3VibGUsIGRvdWJsZT4g
YXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp0dXBsZTx1aW50NjRfdCwgZG91YmxlLCBkb3VibGU+
IG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgVGVtcGxhdGVUZXN0IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIHN0ZDo6dHVwbGU8SGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2
NF90Pj4+IERlY29kZVR5cGU7CisKKyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVj
ZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9CisgICAgc3RhdGlj
IElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSgiVGVtcGxhdGVUZXN0Iik7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxz
ZTsKKworICAgIGV4cGxpY2l0IFRlbXBsYXRlVGVzdChjb25zdCBIYXNoTWFwPFN0cmluZywgc3Rk
OjpwYWlyPFN0cmluZywgdWludDY0X3Q+PiYgYSkKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhhKQor
ICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+Jj4gYXJndW1lbnRzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3Rk
Ojp0dXBsZTxjb25zdCBIYXNoTWFwPFN0cmluZywgc3RkOjpwYWlyPFN0cmluZywgdWludDY0X3Q+
PiY+IG1fYXJndW1lbnRzOworfTsKKworI2lmIFBMQVRGT1JNKE1BQykKK2NsYXNzIERpZENyZWF0
ZVdlYlByb2Nlc3NDb25uZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8
SVBDOjpNYWNoUG9ydD4gRGVjb2RlVHlwZTsKKworICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KKyAg
ICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5n
UmVmZXJlbmNlKCJEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbiIpOyB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7CisKKyAgICBleHBsaWNpdCBEaWRDcmVhdGVXZWJQ
cm9jZXNzQ29ubmVjdGlvbihjb25zdCBJUEM6Ok1hY2hQb3J0JiBjb25uZWN0aW9uSWRlbnRpZmll
cikKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhjb25uZWN0aW9uSWRlbnRpZmllcikKKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBJUEM6Ok1hY2hQb3J0Jj4gYXJndW1l
bnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgc3RkOjp0dXBsZTxjb25zdCBJUEM6Ok1hY2hQb3J0Jj4gbV9hcmd1bWVu
dHM7Cit9OworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBJbnRlcnByZXRLZXlF
dmVudCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHVpbnQzMl90PiBEZWNvZGVU
eXBlOworCisgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQorICAgIHN0YXRpYyBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkludGVycHJldEtl
eUV2ZW50Iik7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOworCisgICAg
dHlwZWRlZiBJUEM6OkFyZ3VtZW50czE8VmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4m
PiBSZXBseTsKKyAgICBleHBsaWNpdCBJbnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKQor
ICAgICAgICA6IG1fYXJndW1lbnRzKHR5cGUpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHN0
ZDo6dHVwbGU8dWludDMyX3Q+IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dHVwbGU8dWludDMy
X3Q+IG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERFUFJFQ0FURURfRkVB
VFVSRSkKK2NsYXNzIERlcHJlY2F0ZWRPcGVyYXRpb24geworcHVibGljOgorICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxJUEM6OkR1bW15VHlwZT4gRGVjb2RlVHlwZTsKKworICAgIHN0YXRpYyBJUEM6
OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJO
YW1lKCk7IH0KKyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJu
IElQQzo6U3RyaW5nUmVmZXJlbmNlKCJEZXByZWNhdGVkT3BlcmF0aW9uIik7IH0KKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4cGxpY2l0IERlcHJlY2F0ZWRP
cGVyYXRpb24oY29uc3QgSVBDOjpEdW1teVR5cGUmIGR1bW15KQorICAgICAgICA6IG1fYXJndW1l
bnRzKGR1bW15KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IElQ
Qzo6RHVtbXlUeXBlJj4gYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp0dXBsZTxjb25zdCBJUEM6
OkR1bW15VHlwZSY+IG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKEVYUEVS
SU1FTlRBTF9GRUFUVVJFKQorY2xhc3MgRXhwZXJpbWVudGFsT3BlcmF0aW9uIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8SVBDOjpEdW1teVR5cGU+IERlY29kZVR5cGU7CisKKyAg
ICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVz
c2FnZVJlY2VpdmVyTmFtZSgpOyB9CisgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5h
bWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiRXhwZXJpbWVudGFsT3BlcmF0aW9u
Iik7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4cGxp
Y2l0IEV4cGVyaW1lbnRhbE9wZXJhdGlvbihjb25zdCBJUEM6OkR1bW15VHlwZSYgZHVtbXkpCisg
ICAgICAgIDogbV9hcmd1bWVudHMoZHVtbXkpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHN0
ZDo6dHVwbGU8Y29uc3QgSVBDOjpEdW1teVR5cGUmPiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6
OnR1cGxlPGNvbnN0IElQQzo6RHVtbXlUeXBlJj4gbV9hcmd1bWVudHM7Cit9OworI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYlBhZ2UKK30gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCisKKyNlbmRp
ZiAvLyAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNU
RVJfT1IgJiYgTUFTVEVSX0FORCkpCisKKyNlbmRpZiAvLyBXZWJQYWdlTWVzc2FnZXNfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzX3VuaXR0ZXN0
LnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzX3VuaXR0ZXN0LnB5
CmluZGV4IDk3ZjdlM2U4ZjNiMmQ1NjBiMTIzN2E0NzhjOGJkNjNlODNiNzQzNWUuLjUxODE1MmNk
MTEwODVlODg5ZDY2NzQzY2Q0MDMyZWQ0NzYyZWFmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlc191bml0dGVzdC5weQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXNfdW5pdHRlc3QucHkKQEAgLTIwLDg4ICsyMCwy
NSBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgb3MK
IGltcG9ydCB1bml0dGVzdAogZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAogaW1wb3J0
IG1lc3NhZ2VzCiBpbXBvcnQgcGFyc2VyCiAKLV9tZXNzYWdlc19maWxlX2NvbnRlbnRzID0gIiIi
IyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAot
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgRU5BQkxFKFdFQktJ
VDIpCi0jaWYgTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9B
TkQKLQotbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7Ci0gICAgTG9hZFVSTChT
dHJpbmcgdXJsKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgTG9hZFNvbWV0aGluZyhT
dHJpbmcgdXJsKQotI2lmIE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01F
U1NBR0VfQ09ORElUSU9OCi0gICAgVG91Y2hFdmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZl
bnQpCi0jZW5kaWYKLSNpZiBORVNURURfTUVTU0FHRV9DT05ESVRJT04gJiYgU09NRV9PVEhFUl9N
RVNTQUdFX0NPTkRJVElPTgotICAgIEFkZEV2ZW50KFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVu
dCkKLSNlbmRpZgotICAgIExvYWRTb21ldGhpbmdFbHNlKFN0cmluZyB1cmwpCi0jZW5kaWYKLSAg
ICBEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbGlz
dGVuZXJJRCwgdWludDMyX3QgcG9saWN5QWN0aW9uKQotICAgIENsb3NlKCkKLQotICAgIFByZWZl
cmVuY2VzRGlkQ2hhbmdlKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSBzdG9yZSkKLSAgICBT
ZW5kRG91YmxlQW5kRmxvYXQoZG91YmxlIGQsIGZsb2F0IGYpCi0gICAgU2VuZEludHMoVmVjdG9y
PHVpbnQ2NF90PiBpbnRzLCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4gaW50VmVjdG9ycykKK3By
aW50IG9zLmdldGN3ZCgpCiAKLSAgICBDcmVhdGVQbHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFu
Y2VJRCwgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMgcGFyYW1ldGVycykgLT4gKGJvb2wgcmVz
dWx0KQotICAgIFJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBTdHJpbmcgbWVz
c2FnZSkgLT4gKCkKLSAgICBHZXRQbHVnaW5zKGJvb2wgcmVmcmVzaCkgLT4gKFZlY3RvcjxXZWJD
b3JlOjpQbHVnaW5JbmZvPiBwbHVnaW5zKQotICAgIEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KFN0cmluZyBwbHVnaW5QYXRoKSAtPiAoSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUgY29ubmVjdGlv
bkhhbmRsZSkgRGVsYXllZAorc2NyaXB0X2RpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShvcy5w
YXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKIAotICAgIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXMoKSAt
PiAoKSBXYW50c0Nvbm5lY3Rpb24gRGVsYXllZAord2l0aCBvcGVuKG9zLnBhdGguam9pbihzY3Jp
cHRfZGlyZWN0b3J5LCAndGVzdC1tZXNzYWdlcy5pbicpKSBhcyBmaWxlOgorICAgIF9tZXNzYWdl
c19maWxlX2NvbnRlbnRzID0gZmlsZS5yZWFkKCkKIAotICAgIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1
dGVzKFtBdHRyaWJ1dGVPbmUgQXR0cmlidXRlVHdvXSB1aW50NjRfdCBmb28sIGRvdWJsZSBiYXIs
IFtBdHRyaWJ1dGVUaHJlZV0gZG91YmxlIGJheikKK3dpdGggb3Blbihvcy5wYXRoLmpvaW4oc2Ny
aXB0X2RpcmVjdG9yeSwgJ01lc3NhZ2VzLWV4cGVjdGVkLmgnKSkgYXMgZmlsZToKKyAgICBfZXhw
ZWN0ZWRfaGVhZGVyID0gZmlsZS5yZWFkKCkKIAotICAgIFRlbXBsYXRlVGVzdChIYXNoTWFwPFN0
cmluZywgc3RkOjpwYWlyPFN0cmluZywgdWludDY0X3Q+PiBhKQotCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKElQQzo6TWFjaFBvcnQgY29ubmVj
dGlvbklkZW50aWZpZXIpCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAjIEtleWJv
YXJkIHN1cHBvcnQKLSAgICBJbnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKSAtPiAoVmVj
dG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gY29tbWFuZE5hbWUpCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpCi0gICAgRGVwcmVjYXRlZE9wZXJhdGlvbihJUEM6
OkR1bW15VHlwZSBkdW1teSkKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFU
VVJFKQotICAgIEV4cGVyaW1lbnRhbE9wZXJhdGlvbihJUEM6OkR1bW15VHlwZSBkdW1teSkKLSNl
bmRpZgotfQotCi0jZW5kaWYKLSNlbmRpZgotIiIiCit3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNj
cmlwdF9kaXJlY3RvcnksICdNZXNzYWdlUmVjZWl2ZXItZXhwZWN0ZWQuY3BwJykpIGFzIGZpbGU6
CisgICAgX2V4cGVjdGVkX3JlY2VpdmVyX2ltcGxlbWVudGF0aW9uID0gZmlsZS5yZWFkKCkKIAog
X2V4cGVjdGVkX3Jlc3VsdHMgPSB7CiAgICAgJ25hbWUnOiAnV2ViUGFnZScsCkBAIC0zMTMsNzk0
ICsyNTAsNiBAQCBjbGFzcyBQYXJzaW5nVGVzdChNZXNzYWdlc1Rlc3QpOgogICAgICAgICBmb3Ig
aW5kZXgsIG1lc3NhZ2UgaW4gZW51bWVyYXRlKHNlbGYucmVjZWl2ZXIubWVzc2FnZXMpOgogICAg
ICAgICAgICAgc2VsZi5jaGVja19tZXNzYWdlKG1lc3NhZ2UsIF9leHBlY3RlZF9yZXN1bHRzWydt
ZXNzYWdlcyddW2luZGV4XSkKIAotX2V4cGVjdGVkX2hlYWRlciA9ICIiIi8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBXZWJQYWdlTWVzc2FnZXNfaAotI2RlZmluZSBXZWJQYWdlTWVzc2FnZXNfaAotCi0j
aWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVS
X09SICYmIE1BU1RFUl9BTkQpKQotCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIk1lc3NhZ2VFbmNvZGVyLmgiCi0jaW5jbHVkZSAiUGx1
Z2luLmgiCi0jaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9L
ZXlib2FyZEV2ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+Ci0jaW5jbHVk
ZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElQQyB7Ci0gICAgY2xhc3MgQ29ubmVj
dGlvbjsKLSAgICBjbGFzcyBEdW1teVR5cGU7Ci0gICAgY2xhc3MgTWFjaFBvcnQ7Ci19Ci0KLW5h
bWVzcGFjZSBXVEYgewotICAgIGNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0gICAgc3RydWN0IFdlYlByZWZlcmVuY2VzU3RvcmU7Ci0gICAgY2xhc3MgV2ViVG91Y2hFdmVu
dDsKLX0KLQotbmFtZXNwYWNlIE1lc3NhZ2VzIHsKLW5hbWVzcGFjZSBXZWJQYWdlIHsKLQotc3Rh
dGljIGlubGluZSBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lKCkKLXsK
LSAgICByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIldlYlBhZ2UiKTsKLX0KLQotY2xhc3Mg
TG9hZFVSTCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZz4gRGVjb2Rl
VHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7
IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJMb2FkVVJMIik7
IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0
IExvYWRVUkwoY29uc3QgU3RyaW5nJiB1cmwpCi0gICAgICAgIDogbV9hcmd1bWVudHModXJsKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IGFyZ3Vt
ZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4gbV9hcmd1bWVudHM7Ci19
OwotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLWNsYXNzIExvYWRTb21ldGhpbmcgewotcHVi
bGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxTdHJpbmc+IERlY29kZVR5cGU7Ci0KLSAgICBz
dGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUo
KSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiTG9hZFNvbWV0aGluZyIpOyB9Ci0gICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBMb2FkU29t
ZXRoaW5nKGNvbnN0IFN0cmluZyYgdXJsKQotICAgICAgICA6IG1fYXJndW1lbnRzKHVybCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiBhcmd1bWVu
dHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IG1fYXJndW1lbnRzOwotfTsK
LSNlbmRpZgotCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9D
T05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpCi1jbGFzcyBUb3VjaEV2
ZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V2ViS2l0OjpXZWJUb3VjaEV2
ZW50PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2Vp
dmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2Uo
IlRvdWNoRXZlbnQiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwot
Ci0gICAgZXhwbGljaXQgVG91Y2hFdmVudChjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmIGV2
ZW50KQotICAgICAgICA6IG1fYXJndW1lbnRzKGV2ZW50KQotICAgIHsKLSAgICB9Ci0KLSAgICBj
b25zdCBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVudCY+IGFyZ3VtZW50cygp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50Jj4gbV9hcmd1
bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RF
RF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKLWNs
YXNzIEFkZEV2ZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V2ViS2l0OjpX
ZWJUb3VjaEV2ZW50PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJl
bmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAg
IHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdS
ZWZlcmVuY2UoIkFkZEV2ZW50Iik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBm
YWxzZTsKLQotICAgIGV4cGxpY2l0IEFkZEV2ZW50KGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVu
dCYgZXZlbnQpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZXZlbnQpCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50Jj4gYXJndW1l
bnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiBt
X2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1jbGFz
cyBMb2FkU29tZXRoaW5nRWxzZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0
cmluZz4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNl
aXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNl
KCJMb2FkU29tZXRoaW5nRWxzZSIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0g
ZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBMb2FkU29tZXRoaW5nRWxzZShjb25zdCBTdHJpbmcmIHVy
bCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyh1cmwpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0
IHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4gYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBs
ZTxjb25zdCBTdHJpbmcmPiBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQotY2xhc3MgRGlkUmVj
ZWl2ZVBvbGljeURlY2lzaW9uIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWlu
dDY0X3QsIHVpbnQ2NF90LCB1aW50MzJfdD4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6
OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJO
YW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJu
IElQQzo6U3RyaW5nUmVmZXJlbmNlKCJEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24iKTsgfQotICAg
IHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgRGlkUmVjZWl2ZVBvbGlj
eURlY2lzaW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVySUQsIHVpbnQzMl90
IHBvbGljeUFjdGlvbikKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhmcmFtZUlELCBsaXN0ZW5lcklE
LCBwb2xpY3lBY3Rpb24pCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8dWlu
dDY0X3QsIHVpbnQ2NF90LCB1aW50MzJfdD4gYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBs
ZTx1aW50NjRfdCwgdWludDY0X3QsIHVpbnQzMl90PiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNz
IENsb3NlIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8PiBEZWNvZGVUeXBlOwot
Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJu
IG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkNsb3NlIik7IH0KLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8
PiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPD4gbV9hcmd1bWVudHM7Ci19OwotCi1j
bGFzcyBQcmVmZXJlbmNlc0RpZENoYW5nZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1
cGxlPFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZT4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRp
YyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVj
ZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsg
cmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJQcmVmZXJlbmNlc0RpZENoYW5nZSIpOyB9Ci0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBQcmVm
ZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3Jl
KQotICAgICAgICA6IG1fYXJndW1lbnRzKHN0b3JlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSY+IGFyZ3VtZW50
cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3Jl
Jj4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBTZW5kRG91YmxlQW5kRmxvYXQgewotcHVibGlj
OgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxkb3VibGUsIGZsb2F0PiBEZWNvZGVUeXBlOwotCi0g
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBu
YW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIlNlbmREb3VibGVBbmRGbG9hdCIp
OyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBTZW5kRG91
YmxlQW5kRmxvYXQoZG91YmxlIGQsIGZsb2F0IGYpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZCwg
ZikKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxkb3VibGUsIGZsb2F0PiBh
cmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGRvdWJsZSwgZmxvYXQ+IG1fYXJndW1lbnRz
OwotfTsKLQotY2xhc3MgU2VuZEludHMgewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBs
ZTxWZWN0b3I8dWludDY0X3Q+LCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4+IERlY29kZVR5cGU7
Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1
cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiU2VuZEludHMiKTsgfQot
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgU2VuZEludHMoY29u
c3QgVmVjdG9yPHVpbnQ2NF90PiYgaW50cywgY29uc3QgVmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+
JiBpbnRWZWN0b3JzKQotICAgICAgICA6IG1fYXJndW1lbnRzKGludHMsIGludFZlY3RvcnMpCi0g
ICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgVmVjdG9yPHVpbnQ2NF90
PiYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+PiY+IGFyZ3VtZW50cygpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IHN0ZDo6dHVwbGU8Y29uc3QgVmVjdG9yPHVpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8
dWludDY0X3Q+PiY+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgQ3JlYXRlUGx1Z2luIHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIFdlYktpdDo6UGx1Z2luOjpQ
YXJhbWV0ZXJzPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNl
IHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0
YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZl
cmVuY2UoIkNyZWF0ZVBsdWdpbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0g
dHJ1ZTsKLQotICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHMxPGJvb2wmPiBSZXBseTsKLSAgICBD
cmVhdGVQbHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgY29uc3QgV2ViS2l0OjpQbHVn
aW46OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgIDogbV9hcmd1bWVudHMocGx1Z2lu
SW5zdGFuY2VJRCwgcGFyYW1ldGVycykKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0
dXBsZTx1aW50NjRfdCwgY29uc3QgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMmPiBhcmd1bWVu
dHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6
UGFyYW1ldGVycyY+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgUnVuSmF2YVNjcmlwdEFsZXJ0
IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIFN0cmluZz4gRGVj
b2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUo
KSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJSdW5KYXZh
U2NyaXB0QWxlcnQiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0K
LSAgICB0eXBlZGVmIElQQzo6QXJndW1lbnRzMCBSZXBseTsKLSAgICBSdW5KYXZhU2NyaXB0QWxl
cnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgICAgICA6IG1f
YXJndW1lbnRzKGZyYW1lSUQsIG1lc3NhZ2UpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0
ZDo6dHVwbGU8dWludDY0X3QsIGNvbnN0IFN0cmluZyY+IGFyZ3VtZW50cygpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0
ZDo6dHVwbGU8dWludDY0X3QsIGNvbnN0IFN0cmluZyY+IG1fYXJndW1lbnRzOwotfTsKLQotY2xh
c3MgR2V0UGx1Z2lucyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPGJvb2w+IERl
Y29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1l
KCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiR2V0UGx1
Z2lucyIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQotICAgIHR5
cGVkZWYgSVBDOjpBcmd1bWVudHMxPFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiY+IFJlcGx5
OwotICAgIGV4cGxpY2l0IEdldFBsdWdpbnMoYm9vbCByZWZyZXNoKQotICAgICAgICA6IG1fYXJn
dW1lbnRzKHJlZnJlc2gpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Ym9v
bD4gYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxib29sPiBtX2FyZ3VtZW50czsKLX07
Ci0KLWNsYXNzIEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uIHsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIHN0ZDo6dHVwbGU8U3RyaW5nPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUo
KTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBD
OjpTdHJpbmdSZWZlcmVuY2UoIkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uIik7IH0KLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgc3RydWN0IERlbGF5ZWRSZXBs
eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEZWxheWVkUmVwbHk+IHsKLSAgICAgICAg
RGVsYXllZFJlcGx5KFBhc3NSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwgc3RkOjp1bmlxdWVfcHRy
PElQQzo6TWVzc2FnZUVuY29kZXI+KTsKLSAgICAgICAgfkRlbGF5ZWRSZXBseSgpOwotCi0gICAg
ICAgIGJvb2wgc2VuZChjb25zdCBJUEM6OkNvbm5lY3Rpb246OkhhbmRsZSYgY29ubmVjdGlvbkhh
bmRsZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVy
PiBtX2VuY29kZXI7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHMxPElQQzo6
Q29ubmVjdGlvbjo6SGFuZGxlJj4gUmVwbHk7Ci0gICAgZXhwbGljaXQgR2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKQotICAgICAgICA6IG1fYXJndW1l
bnRzKHBsdWdpblBhdGgpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29u
c3QgU3RyaW5nJj4gYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcm
PiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXMgewotcHVi
bGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTw+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2Vp
dmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJl
dHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiVGVzdE11bHRpcGxlQXR0cmlidXRlcyIpOyB9Ci0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQotICAgIHN0cnVjdCBEZWxheWVk
UmVwbHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGVsYXllZFJlcGx5PiB7Ci0gICAg
ICAgIERlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4sIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPik7Ci0gICAgICAgIH5EZWxheWVkUmVwbHkoKTsKLQot
ICAgICAgICBib29sIHNlbmQoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJUEM6
OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6
TWVzc2FnZUVuY29kZXI+IG1fZW5jb2RlcjsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBJUEM6OkFy
Z3VtZW50czAgUmVwbHk7Ci0gICAgY29uc3Qgc3RkOjp0dXBsZTw+IGFyZ3VtZW50cygpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHN0ZDo6dHVwbGU8PiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIFRlc3RQYXJhbWV0ZXJB
dHRyaWJ1dGVzIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIGRv
dWJsZSwgZG91YmxlPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJl
bmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAg
IHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdS
ZWZlcmVuY2UoIlRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzIik7IH0KLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKHVpbnQ2
NF90IGZvbywgZG91YmxlIGJhciwgZG91YmxlIGJheikKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhm
b28sIGJhciwgYmF6KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPHVpbnQ2
NF90LCBkb3VibGUsIGRvdWJsZT4gYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTx1aW50
NjRfdCwgZG91YmxlLCBkb3VibGU+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgVGVtcGxhdGVU
ZXN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8SGFzaE1hcDxTdHJpbmcsIHN0
ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVy
TmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVy
biBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiVGVtcGxhdGVUZXN0Iik7IH0KLSAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IFRlbXBsYXRlVGVzdChjb25z
dCBIYXNoTWFwPFN0cmluZywgc3RkOjpwYWlyPFN0cmluZywgdWludDY0X3Q+PiYgYSkKLSAgICAg
ICAgOiBtX2FyZ3VtZW50cyhhKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxl
PGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+Jj4gYXJn
dW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBIYXNoTWFwPFN0cmluZywgc3RkOjpw
YWlyPFN0cmluZywgdWludDY0X3Q+PiY+IG1fYXJndW1lbnRzOwotfTsKLQotI2lmIFBMQVRGT1JN
KE1BQykKLWNsYXNzIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uIHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIHN0ZDo6dHVwbGU8SVBDOjpNYWNoUG9ydD4gRGVjb2RlVHlwZTsKLQotICAgIHN0
YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdl
UmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgp
IHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVj
dGlvbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBl
eHBsaWNpdCBEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbihjb25zdCBJUEM6Ok1hY2hQb3J0
JiBjb25uZWN0aW9uSWRlbnRpZmllcikKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhjb25uZWN0aW9u
SWRlbnRpZmllcikKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBJ
UEM6Ok1hY2hQb3J0Jj4gYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBJUEM6
Ok1hY2hQb3J0Jj4gbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMp
Ci1jbGFzcyBJbnRlcnByZXRLZXlFdmVudCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1
cGxlPHVpbnQzMl90PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJl
bmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAg
IHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdS
ZWZlcmVuY2UoIkludGVycHJldEtleUV2ZW50Iik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c1N5bmMgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBJUEM6OkFyZ3VtZW50czE8VmVjdG9yPFdlYkNv
cmU6OktleXByZXNzQ29tbWFuZD4mPiBSZXBseTsKLSAgICBleHBsaWNpdCBJbnRlcnByZXRLZXlF
dmVudCh1aW50MzJfdCB0eXBlKQotICAgICAgICA6IG1fYXJndW1lbnRzKHR5cGUpCi0gICAgewot
ICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8dWludDMyX3Q+IGFyZ3VtZW50cygpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHN0ZDo6dHVwbGU8dWludDMyX3Q+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYg
RU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkKLWNsYXNzIERlcHJlY2F0ZWRPcGVyYXRpb24gewot
cHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxJUEM6OkR1bW15VHlwZT4gRGVjb2RlVHlw
ZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJl
dHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJEZXByZWNhdGVkT3Bl
cmF0aW9uIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAg
IGV4cGxpY2l0IERlcHJlY2F0ZWRPcGVyYXRpb24oY29uc3QgSVBDOjpEdW1teVR5cGUmIGR1bW15
KQotICAgICAgICA6IG1fYXJndW1lbnRzKGR1bW15KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6RHVtbXlUeXBlJj4gYXJndW1lbnRzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
c3RkOjp0dXBsZTxjb25zdCBJUEM6OkR1bW15VHlwZSY+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotY2xhc3MgRXhwZXJpbWVudGFs
T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8SVBDOjpEdW1teVR5
cGU+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2
ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgi
RXhwZXJpbWVudGFsT3BlcmF0aW9uIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMg
PSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IEV4cGVyaW1lbnRhbE9wZXJhdGlvbihjb25zdCBJUEM6
OkR1bW15VHlwZSYgZHVtbXkpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZHVtbXkpCi0gICAgewot
ICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgSVBDOjpEdW1teVR5cGUmPiBhcmd1
bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6RHVtbXlUeXBlJj4gbV9hcmd1
bWVudHM7Ci19OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYlBhZ2UKLX0gLy8gbmFtZXNw
YWNlIE1lc3NhZ2VzCi0KLSNlbmRpZiAvLyAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFT
VEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCi0KLSNlbmRpZiAvLyBX
ZWJQYWdlTWVzc2FnZXNfaAotIiIiCi0KLV9leHBlY3RlZF9yZWNlaXZlcl9pbXBsZW1lbnRhdGlv
biA9ICIiIi8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgot
ICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgKEVOQUJMRShX
RUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RF
Ul9BTkQpKQotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2Rl
cnMuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaWYgRU5BQkxFKERFUFJFQ0FURURfRkVB
VFVSRSkgfHwgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotI2luY2x1ZGUgIkR1bW15VHlw
ZS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiSGFuZGxlTWVzc2FnZS5oIgotI2lmIFBMQVRGT1JNKE1B
QykKLSNpbmNsdWRlICJNYWNoUG9ydC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiTWVzc2FnZURlY29k
ZXIuaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJ
VElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkgfHwgKEVOQUJMRShUT1VDSF9F
VkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdF
X0NPTkRJVElPTikpCi0jaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIldl
YlBhZ2VNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKLSNpZiBQ
TEFURk9STShNQUMpCi0jaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+Ci0jZW5kaWYK
LSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgTWVzc2FnZXMgewotCi1uYW1lc3Bh
Y2UgV2ViUGFnZSB7Ci0KLUdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk6
OkRlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiwgc3Rk
Ojp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IGVuY29kZXIpCi0gICAgOiBtX2Nvbm5l
Y3Rpb24oY29ubmVjdGlvbikKLSAgICAsIG1fZW5jb2RlcihzdGQ6Om1vdmUoZW5jb2RlcikpCi17
Ci19Ci0KLUdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk6On5EZWxheWVk
UmVwbHkoKQotewotICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKLX0KLQotYm9vbCBHZXRQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5OjpzZW5kKGNvbnN0IElQQzo6Q29ubmVj
dGlvbjo6SGFuZGxlJiBjb25uZWN0aW9uSGFuZGxlKQotewotICAgIEFTU0VSVChtX2VuY29kZXIp
OwotICAgICptX2VuY29kZXIgPDwgY29ubmVjdGlvbkhhbmRsZTsKLSAgICBib29sIHJlc3VsdCA9
IG1fY29ubmVjdGlvbi0+c2VuZFN5bmNSZXBseShzdGQ6Om1vdmUobV9lbmNvZGVyKSk7Ci0gICAg
bV9jb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1UZXN0TXVs
dGlwbGVBdHRyaWJ1dGVzOjpEZWxheWVkUmVwbHk6OkRlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQ
Qzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVu
Y29kZXI+IGVuY29kZXIpCi0gICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKLSAgICAsIG1f
ZW5jb2RlcihzdGQ6Om1vdmUoZW5jb2RlcikpCi17Ci19Ci0KLVRlc3RNdWx0aXBsZUF0dHJpYnV0
ZXM6OkRlbGF5ZWRSZXBseTo6fkRlbGF5ZWRSZXBseSgpCi17Ci0gICAgQVNTRVJUKCFtX2Nvbm5l
Y3Rpb24pOwotfQotCi1ib29sIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6OkRlbGF5ZWRSZXBseTo6
c2VuZCgpCi17Ci0gICAgQVNTRVJUKG1fZW5jb2Rlcik7Ci0gICAgYm9vbCByZXN1bHQgPSBtX2Nv
bm5lY3Rpb24tPnNlbmRTeW5jUmVwbHkoc3RkOjptb3ZlKG1fZW5jb2RlcikpOwotICAgIG1fY29u
bmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViUGFnZQotCi19IC8vIG5hbWVzcGFjZSBNZXNzYWdlcwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlV2ViUGFnZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMOjpuYW1lKCkpIHsKLSAg
ICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMPihkZWNv
ZGVyLCB0aGlzLCAmV2ViUGFnZTo6bG9hZFVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09
IE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkU29tZXRoaW5nOjpuYW1lKCkpIHsKLSAgICAgICAgSVBD
OjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkU29tZXRoaW5nPihkZWNvZGVy
LCB0aGlzLCAmV2ViUGFnZTo6bG9hZFNvbWV0aGluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0jZW5kaWYKLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NP
TkRJVElPTiB8fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKLSAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaEV2ZW50OjpuYW1lKCkp
IHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaEV2
ZW50PihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dG91Y2hFdmVudCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9N
RVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKLSAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpBZGRFdmVudDo6
bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6
QWRkRXZlbnQ+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjphZGRFdmVudCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmdF
bHNlOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQ
YWdlOjpMb2FkU29tZXRoaW5nRWxzZT4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmxvYWRTb21l
dGhpbmdFbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlY2VpdmVQb2xpY3lE
ZWNpc2lvbjo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6
V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFn
ZTo6ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZTo6
bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6
Q2xvc2U+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpjbG9zZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFn
ZTo6UHJlZmVyZW5jZXNEaWRDaGFuZ2U6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1l
c3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlByZWZlcmVuY2VzRGlkQ2hhbmdlPihkZWNvZGVyLCB0
aGlzLCAmV2ViUGFnZTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6
OlNlbmREb3VibGVBbmRGbG9hdDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2Fn
ZTxNZXNzYWdlczo6V2ViUGFnZTo6U2VuZERvdWJsZUFuZEZsb2F0PihkZWNvZGVyLCB0aGlzLCAm
V2ViUGFnZTo6c2VuZERvdWJsZUFuZEZsb2F0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kSW50
czo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFn
ZTo6U2VuZEludHM+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpzZW5kSW50cyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
czo6V2ViUGFnZTo6VGVzdFBhcmFtZXRlckF0dHJpYnV0ZXM6Om5hbWUoKSkgewotICAgICAgICBJ
UEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RQYXJhbWV0ZXJBdHRyaWJ1
dGVzPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVzdFBhcmFtZXRlckF0dHJpYnV0ZXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0g
TWVzc2FnZXM6OldlYlBhZ2U6OlRlbXBsYXRlVGVzdDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6
aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6VGVtcGxhdGVUZXN0PihkZWNvZGVyLCB0
aGlzLCAmV2ViUGFnZTo6dGVtcGxhdGVUZXN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
czo6V2ViUGFnZTo6RGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb246Om5hbWUoKSkgewotICAg
ICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkRpZENyZWF0ZVdlYlBy
b2Nlc3NDb25uZWN0aW9uPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZGlkQ3JlYXRlV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5B
QkxFKERFUFJFQ0FURURfRkVBVFVSRSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09
IE1lc3NhZ2VzOjpXZWJQYWdlOjpEZXByZWNhdGVkT3BlcmF0aW9uOjpuYW1lKCkpIHsKLSAgICAg
ICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpEZXByZWNhdGVkT3BlcmF0
aW9uPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZGVwcmVjYXRlZE9wZXJhdGlvbik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRV
UkUpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6
RXhwZXJpbWVudGFsT3BlcmF0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNz
YWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpFeHBlcmltZW50YWxPcGVyYXRpb24+KGRlY29kZXIsIHRo
aXMsICZXZWJQYWdlOjpleHBlcmltZW50YWxPcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgV2ViUGFn
ZTo6ZGlkUmVjZWl2ZVN5bmNXZWJQYWdlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rp
b24sIElQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1l
c3NhZ2VFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQotewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VO
YW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkNyZWF0ZVBsdWdpbjo6bmFtZSgpKSB7Ci0gICAg
ICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6Q3JlYXRlUGx1Z2luPihk
ZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6Y3JlYXRlUGx1Z2luKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1l
c3NhZ2VzOjpXZWJQYWdlOjpSdW5KYXZhU2NyaXB0QWxlcnQ6Om5hbWUoKSkgewotICAgICAgICBJ
UEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRBbGVydD4o
ZGVjb2RlciwgKnJlcGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRBbGVy
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUo
KSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6R2V0UGx1Z2luczo6bmFtZSgpKSB7Ci0gICAgICAgIElQ
Qzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6R2V0UGx1Z2lucz4oZGVjb2Rlciwg
KnJlcGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OmdldFBsdWdpbnMpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6Oldl
YlBhZ2U6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBD
OjpoYW5kbGVNZXNzYWdlRGVsYXllZDxNZXNzYWdlczo6V2ViUGFnZTo6R2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24+KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlciwgdGhpcywgJldl
YlBhZ2U6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpU
ZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNz
YWdlRGVsYXllZDxNZXNzYWdlczo6V2ViUGFnZTo6VGVzdE11bHRpcGxlQXR0cmlidXRlcz4oY29u
bmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVzdE11bHRp
cGxlQXR0cmlidXRlcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6Oklu
dGVycHJldEtleUV2ZW50OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1l
c3NhZ2VzOjpXZWJQYWdlOjpJbnRlcnByZXRLZXlFdmVudD4oZGVjb2RlciwgKnJlcGx5RW5jb2Rl
ciwgdGhpcywgJldlYlBhZ2U6OmludGVycHJldEtleUV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RFRF9NQVNU
RVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNURVJfQU5EKSkKLSIiIgogCiAKIGNsYXNz
IEdlbmVyYXRlZEZpbGVDb250ZW50c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL3Rlc3QtbWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvdGVzdC1tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
MTE3MGM0YWM2OTYwN2M2M2I5ODc1MTY3ZWFkYzZiYWQ4ZTEzMGRjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL3Rlc3QtbWVzc2FnZXMuaW4KQEAgLTAs
MCArMSw3NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYg
RU5BQkxFKFdFQktJVDIpCisjaWYgTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09S
ICYmIE1BU1RFUl9BTkQKKworbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7Cisg
ICAgTG9hZFVSTChTdHJpbmcgdXJsKQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgTG9h
ZFNvbWV0aGluZyhTdHJpbmcgdXJsKQorI2lmIE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8fCBT
T01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OCisgICAgVG91Y2hFdmVudChXZWJLaXQ6OldlYlRv
dWNoRXZlbnQgZXZlbnQpCisjZW5kaWYKKyNpZiBORVNURURfTUVTU0FHRV9DT05ESVRJT04gJiYg
U09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTgorICAgIEFkZEV2ZW50KFdlYktpdDo6V2ViVG91
Y2hFdmVudCBldmVudCkKKyNlbmRpZgorICAgIExvYWRTb21ldGhpbmdFbHNlKFN0cmluZyB1cmwp
CisjZW5kaWYKKyAgICBEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgbGlzdGVuZXJJRCwgdWludDMyX3QgcG9saWN5QWN0aW9uKQorICAgIENsb3NlKCkK
KworICAgIFByZWZlcmVuY2VzRGlkQ2hhbmdlKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSBz
dG9yZSkKKyAgICBTZW5kRG91YmxlQW5kRmxvYXQoZG91YmxlIGQsIGZsb2F0IGYpCisgICAgU2Vu
ZEludHMoVmVjdG9yPHVpbnQ2NF90PiBpbnRzLCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4gaW50
VmVjdG9ycykKKworICAgIENyZWF0ZVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBX
ZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyBwYXJhbWV0ZXJzKSAtPiAoYm9vbCByZXN1bHQpCisg
ICAgUnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIFN0cmluZyBtZXNzYWdlKSAt
PiAoKQorICAgIEdldFBsdWdpbnMoYm9vbCByZWZyZXNoKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlBs
dWdpbkluZm8+IHBsdWdpbnMpCisgICAgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oU3RyaW5n
IHBsdWdpblBhdGgpIC0+IChJUEM6OkNvbm5lY3Rpb246OkhhbmRsZSBjb25uZWN0aW9uSGFuZGxl
KSBEZWxheWVkCisKKyAgICBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzKCkgLT4gKCkgV2FudHNDb25u
ZWN0aW9uIERlbGF5ZWQKKworICAgIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKFtBdHRyaWJ1dGVP
bmUgQXR0cmlidXRlVHdvXSB1aW50NjRfdCBmb28sIGRvdWJsZSBiYXIsIFtBdHRyaWJ1dGVUaHJl
ZV0gZG91YmxlIGJheikKKworICAgIFRlbXBsYXRlVGVzdChIYXNoTWFwPFN0cmluZywgc3RkOjpw
YWlyPFN0cmluZywgdWludDY0X3Q+PiBhKQorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIERpZENy
ZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKElQQzo6TWFjaFBvcnQgY29ubmVjdGlvbklkZW50aWZp
ZXIpCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAjIEtleWJvYXJkIHN1cHBvcnQK
KyAgICBJbnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKSAtPiAoVmVjdG9yPFdlYkNvcmU6
OktleXByZXNzQ29tbWFuZD4gY29tbWFuZE5hbWUpCisjZW5kaWYKKworI2lmIEVOQUJMRShERVBS
RUNBVEVEX0ZFQVRVUkUpCisgICAgRGVwcmVjYXRlZE9wZXJhdGlvbihJUEM6OkR1bW15VHlwZSBk
dW1teSkKKyNlbmRpZgorCisjaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQorICAgIEV4
cGVyaW1lbnRhbE9wZXJhdGlvbihJUEM6OkR1bW15VHlwZSBkdW1teSkKKyNlbmRpZgorfQorCisj
ZW5kaWYKKyNlbmRpZgo=
</data>
<flag name="review"
          id="244285"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="244287"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>