<?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>200462</bug_id>
          
          <creation_ts>2019-08-05 18:10:02 -0700</creation_ts>
          <short_desc>[WHLSL] cache results of argumentTypeForAndOverload inside Checker</short_desc>
          <delta_ts>2019-08-07 11:16:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1558666</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 18:10:02 -0700</bug_when>
    <thetext>We spend 4-5ms in that function in compute_boids.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559045</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-06 19:43:23 -0700</bug_when>
    <thetext>Seems like a solid 4-5ms speedup in checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559046</commentid>
    <comment_count>2</comment_count>
      <attachid>375678</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-06 19:44:03 -0700</bug_when>
    <thetext>Created attachment 375678
WIP

need to rebase. But we have a 99% hit rate on compute_boids!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559062</commentid>
    <comment_count>3</comment_count>
      <attachid>375683</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-06 21:32:56 -0700</bug_when>
    <thetext>Created attachment 375683
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559063</commentid>
    <comment_count>4</comment_count>
      <attachid>375683</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-06 21:34:19 -0700</bug_when>
    <thetext>Comment on attachment 375683
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:-106
&gt; -        static const bool emptyValueIsZero = true;

This was bogus, which is why I&apos;m removing it. (This should belong on Traits. And we never use these Traits as values in a hash table.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559065</commentid>
    <comment_count>5</comment_count>
      <attachid>375685</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-06 21:35:54 -0700</bug_when>
    <thetext>Created attachment 375685
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559148</commentid>
    <comment_count>6</comment_count>
      <attachid>375685</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-08-07 10:02:45 -0700</bug_when>
    <thetext>Comment on attachment 375685
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559190</commentid>
    <comment_count>7</comment_count>
      <attachid>375685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-07 11:14:03 -0700</bug_when>
    <thetext>Comment on attachment 375685
patch

Clearing flags on attachment: 375685

Committed r248378: &lt;https://trac.webkit.org/changeset/248378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559191</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-07 11:14:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559195</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-07 11:16:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/54041999&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375678</attachid>
            <date>2019-08-06 19:44:03 -0700</date>
            <delta_ts>2019-08-06 21:32:56 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>24528</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE5LTA4LTA2ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTWFrZSByZXNvbHZl
RnVuY3Rpb24gaW4gQ2hlY2tlciBmYXN0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMDI4NworCisgICAgICAgIFJldmlld2VkIGJ5IFJvYmluIE1v
cmlzc2V0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgY29tcHV0ZV9ib2lkcyBmYXN0ZXIg
YnkgbWFraW5nIGZ1bmN0aW9uIG92ZXJsb2FkCisgICAgICAgIHJlc29sdXRpb24gZmFzdGVyIGlu
c2lkZSB0aGUgQ2hlY2tlci4gSXQncyBhIH42bXMgc3BlZWR1cCBpbiB0aGUKKyAgICAgICAgY2hl
Y2tlci4gVGhlIG1haW4gaWRlYSBpcyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG92ZXJsb2FkcyB3
ZSBuZWVkCisgICAgICAgIHRvIGxvb2sgZm9yIGJ5IHVzaW5nIGEgaGFzaCB0YWJsZSB0aGF0IGRl
c2NyaWJlcyBhIGZ1bmN0aW9uJ3MgdHlwZQorICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcg
YSBoYXNoIHRhYmxlIGtleWVkIGJ5IGEgZnVuY3Rpb24ncyBuYW1lLgorICAgICAgICAKKyAgICAg
ICAgVGhlIGludGVyZXN0aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbCBoZXJlIGlzIHdlIG11c3Qg
Y29uc3RydWN0IGVudHJpZXMKKyAgICAgICAgaW4gdGhlIGhhc2ggdGFibGUgc3VjaCB0aGF0IHRo
ZXkgc3RpbGwgYWxsb3cgY29uc3RhbnRzIHRvIGJlIHJlc29sdmVkIHRvCisgICAgICAgIHZhcmlv
dXMgdHlwZXMuIFRoaXMgbWVhbnMgdGhhdCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIG11c3Qg
bm9ybWFsaXplCisgICAgICAgIHRoZSB2ZWN0b3Igb2YgdHlwZXMgaXQgdXNlcyB0byBleHByZXNz
IGEgZnVuY3Rpb24ncyBpZGVudGl0eS4gVGhlIG5vcm1hbGl6YXRpb24KKyAgICAgICAgcnVsZXMg
YXJlOgorICAgICAgICAtIGludCA9PiBmbG9hdAorICAgICAgICAtIHVpbnQgPT4gZmxvYXQKKyAg
ICAgICAgLSBUKiA9PiBmbG9hdCoKKyAgICAgICAgLSBUW10gPT4gZmxvYXQqCisgICAgICAgIAor
ICAgICAgICBUaGUgZmlyc3QgdHdvIHJ1bGVzIGFyZSBiZWNhdXNlIGludCBjb25zdGFudHMgY2Fu
IGJlIG1hdGNoZWQgYWdhaW5zdAorICAgICAgICB0aGUgZmxvYXQgYW5kIHVpbnQgdHlwZXMuIFRo
ZSBsYXR0ZXIgdHdvIHJ1bGVzIGFyZSBiZWNhdXNlIHRoZSBudWxsCisgICAgICAgIGxpdGVyYWwg
Y2FuIGJlIG1hdGNoZWQgYWdhaW5zdCBhbnkgcG9pbnRlciBvciBhbnkgYXJyYXkgcmVmZXJlbmNl
CisgICAgICAgICh3ZSBwaWNrIGZsb2F0KiBhcmJpdHJhcmlseSkuIEV2ZW4gdGhvdWdoIGl0IHNl
ZW1zIGxpa2UgdGhlc2UKKyAgICAgICAgbm9ybWFsaXphdGlvbiBydWxlcyB3b3VsZCBkcmFzdGlj
YWxseSBicm9hZGVuIHRoZSBlZmZpY2FjeSBvZiB0aGUgaGFzaAorICAgICAgICB0YWJsZSwgd2Ug
c3RpbGwgc2VlIGEgMTAweCByZWR1Y3Rpb24gaW4gdGhlIG51bWJlciBvZiBvdmVybG9hZHMgd2Ug
bXVzdAorICAgICAgICByZXNvbHZlIGluc2lkZSBjb21wdXRlX2JvaWRzLiBXZSBnbyBmcm9tIGhh
dmluZyB0byByZXNvbHZlIDQwMCwwMDAKKyAgICAgICAgb3ZlcmxvYWRzIHRvIGp1c3QgcmVzb2x2
aW5nIDQsMDAwLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGdW5jdGlvbktleTo6RnVuY3Rpb25LZXkp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZ1bmN0aW9uS2V5Ojppc0VtcHR5VmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZ1bmN0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RnVuY3Rpb25LZXk6
Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZ1bmN0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGdW5jdGlvbktleTo6SGFz
aDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RnVuY3Rpb25LZXk6Okhhc2g6OmVx
dWFsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGdW5jdGlvbktleTo6VHJhaXRzOjppc0Vt
cHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OkNoZWNrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OndyYXBwZWRGbG9hdFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmdlbmVyaWNQb2ludGVyVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6bm9ybWFsaXplZFR5cGVGb3JGdW5jdGlvbktl
eSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6cmVzb2x2ZUZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpmaW5pc2hWaXNpdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OnJlc29sdmVGdW5jdGlvbik6IERlbGV0ZWQuCisKIDIwMTktMDgtMDYgIENvbW1pdCBR
dWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIyNDgyODkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0ODMyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTQwIEBAIHB1YmxpYzoKICAgICB9CiB9OwogCitjbGFz
cyBGdW5jdGlvbktleSB7CitwdWJsaWM6CisgICAgRnVuY3Rpb25LZXkoKSA9IGRlZmF1bHQ7Cisg
ICAgRnVuY3Rpb25LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIHsKKyAg
ICAgICAgbV9jYXN0UmV0dXJuVHlwZSA9IGJpdHdpc2VfY2FzdDxBU1Q6Ok5hbWVkVHlwZSo+KHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOworICAgIH0KKworICAgIEZ1bmN0aW9uS2V5KFN0cmlu
ZyBuYW1lLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4g
dHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSA9IG51bGxwdHIpCisgICAgICAg
IDogbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgICwgbV90eXBlcyhXVEZNb3ZlKHR5cGVz
KSkKKyAgICAgICAgLCBtX2Nhc3RSZXR1cm5UeXBlKGNhc3RSZXR1cm5UeXBlKQorICAgIHsgfQor
CisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuaXNOdWxsKCk7
IH0KKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9j
YXN0UmV0dXJuVHlwZSA9PSBiaXR3aXNlX2Nhc3Q8QVNUOjpOYW1lZFR5cGUqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDEpKTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBoYXNoID0gSW50SGFzaDxzaXplX3Q+OjpoYXNoKG1fdHlwZXMuc2l6
ZSgpKTsKKyAgICAgICAgaGFzaCBePSBtX25hbWUuaGFzaCgpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBoYXNoIF49IG1f
dHlwZXNbaV0uZ2V0KCkuaGFzaCgpICsgaTsKKworICAgICAgICBpZiAobV9jYXN0UmV0dXJuVHlw
ZSkKKyAgICAgICAgICAgIGhhc2ggXj0gV1RGOjpQdHJIYXNoPEFTVDo6VHlwZSo+OjpoYXNoKCZt
X2Nhc3RSZXR1cm5UeXBlLT51bmlmeU5vZGUoKSk7CisKKyAgICAgICAgcmV0dXJuIGhhc2g7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZ1bmN0aW9uS2V5JiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGVzLnNpemUoKSAhPSBvdGhlci5tX3R5cGVzLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAobV9uYW1lICE9
IG90aGVyLm1fbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghbWF0Y2hlcyhtX3R5cGVzW2ldLmdldCgpLCBvdGhlci5tX3R5cGVzW2ldLmdldCgpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoISFt
X2Nhc3RSZXR1cm5UeXBlICE9ICEhb3RoZXIubV9jYXN0UmV0dXJuVHlwZSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIW1fY2FzdFJldHVyblR5cGUpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoJm1fY2FzdFJldHVyblR5cGUtPnVuaWZ5
Tm9kZSgpID09ICZvdGhlci5tX2Nhc3RSZXR1cm5UeXBlLT51bmlmeU5vZGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBz
dHJ1Y3QgSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZ1bmN0aW9u
S2V5JiBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrZXkuaGFzaCgpOworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRnVuY3Rpb25LZXkmIGEs
IGNvbnN0IEZ1bmN0aW9uS2V5JiBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA9
PSBiOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgIH07CisKKyAgICBzdHJ1Y3QgVHJhaXRzIDogcHVi
bGljIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZ1bmN0aW9uS2V5PiB7CisgICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAg
c3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IEZ1bmN0aW9uS2V5JiBrZXkpIHsgcmV0dXJu
IGtleS5pc0VtcHR5VmFsdWUoKTsgfQorICAgIH07CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1f
bmFtZTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBl
Pj4gbV90eXBlczsKKyAgICBBU1Q6Ok5hbWVkVHlwZSogbV9jYXN0UmV0dXJuVHlwZTsKK307CisK
K2NsYXNzIEFuZE92ZXJsb2FkQXJndW1lbnRLZXkgeworcHVibGljOgorICAgIEFuZE92ZXJsb2Fk
QXJndW1lbnRLZXkoKSA9IGRlZmF1bHQ7CisgICAgQW5kT3ZlcmxvYWRBcmd1bWVudEtleShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAgICAgICBtX3R5cGUgPSBiaXR3
aXNlX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOwor
ICAgIH0KKworICAgIEFuZE92ZXJsb2FkQXJndW1lbnRLZXkoQVNUOjpVbm5hbWVkVHlwZSYgdHlw
ZSwgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorICAgICAgICA6IG1fdHlwZSgmdHlw
ZSkKKyAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCisgICAgeyB9CisKKyAg
ICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3R5cGU7IH0KKyAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IGJpdHdp
c2VfY2FzdDxBU1Q6OlVubmFtZWRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0K
KworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludEhh
c2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4obV9hZGRyZXNzU3BhY2UpKQor
ICAgICAgICAgICAgXiBtX3R5cGUtPmhhc2goKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQW5kT3ZlcmxvYWRBcmd1bWVudEtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKm1fdHlwZSA9PSAqb3RoZXIubV90eXBlCisgICAgICAgICAgICAmJiBtX2Fk
ZHJlc3NTcGFjZSA9PSBvdGhlci5tX2FkZHJlc3NTcGFjZTsKKyAgICB9CisKKyAgICBzdHJ1Y3Qg
SGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEFuZE92ZXJsb2FkQXJn
dW1lbnRLZXkmIGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7
CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBbmRPdmVybG9h
ZEFyZ3VtZW50S2V5JiBhLCBjb25zdCBBbmRPdmVybG9hZEFyZ3VtZW50S2V5JiBiKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgIH07
CisKKyAgICBzdHJ1Y3QgVHJhaXRzIDogcHVibGljIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PEFuZE92ZXJsb2FkQXJndW1lbnRLZXk+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
SXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5
VmFsdWUoY29uc3QgQW5kT3ZlcmxvYWRBcmd1bWVudEtleSYga2V5KSB7IHJldHVybiBrZXkuaXNF
bXB0eVZhbHVlKCk7IH0KKyAgICB9OworCitwcml2YXRlOgorICAgIEFTVDo6VW5uYW1lZFR5cGUq
IG1fdHlwZSB7IG51bGxwdHIgfTsKKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFj
ZTsKK307CisKIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdp
dGhPcGVyYXRvckFuZGVySW5kZXhlcihDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlJiBmaXJzdEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KQogewogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CkBAIC0yMTcsMjEgKzM1MSw2
IEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCi1zdGF0aWMgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNv
bHZlRnVuY3Rpb24oUHJvZ3JhbSYgcHJvZ3JhbSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIHBvc3NpYmxlT3ZlcmxvYWRzLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBT
dHJpbmcmIG5hbWUsIENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3QgSW50cmluc2ljcyYgaW50
cmluc2ljcywgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlID0gbnVsbHB0cikKLXsKLSAg
ICBpZiAocG9zc2libGVPdmVybG9hZHMpIHsKLSAgICAgICAgaWYgKEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZCgqcG9zc2libGVPdmVy
bG9hZHMsIHR5cGVzLCBjYXN0UmV0dXJuVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b247Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50
aWF0aW9uKG5hbWUsIGxvY2F0aW9uLCB0eXBlcywgaW50cmluc2ljcykpIHsKLSAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKLSAgICAgICAgcmV0dXJuICZwcm9n
cmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkubGFzdCgpOwotICAgIH0KLQotICAgIHJl
dHVybiBudWxscHRyOwotfQotCiBzdGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0b3I8RW50
cnlQb2ludEl0ZW0+JiBpbnB1dEl0ZW1zLCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBvdXRwdXRJ
dGVtcywgY29uc3QgT3B0aW9uYWw8QVNUOjpFbnRyeVBvaW50VHlwZT4mIGVudHJ5UG9pbnRUeXBl
LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQogewogICAgIHsKQEAgLTQ1MCwxMCArNTY5
LDMxIEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCAKIAogY2xhc3Mg
Q2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKIHB1YmxpYzoKKyAgICBkb3VibGUgbnVtSGl0cyB7
IDAgfTsKKyAgICBkb3VibGUgdG90YWwgeyAwIH07CiAgICAgQ2hlY2tlcihjb25zdCBJbnRyaW5z
aWNzJiBpbnRyaW5zaWNzLCBQcm9ncmFtJiBwcm9ncmFtKQogICAgICAgICA6IG1faW50cmluc2lj
cyhpbnRyaW5zaWNzKQogICAgICAgICAsIG1fcHJvZ3JhbShwcm9ncmFtKQogICAgIHsKKyAgICAg
ICAgYXV0byBhZGRGdW5jdGlvbiA9IFsmXSAoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5j
dGlvbikgeworICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi5pc0Nhc3QoKSAmJiBpczxBU1Q6Ok5hbWVk
VHlwZT4oZnVuY3Rpb24udHlwZSgpLnVuaWZ5Tm9kZSgpKSkKKyAgICAgICAgICAgICAgICBjYXN0
UmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oZnVuY3Rpb24udHlwZSgpLnVu
aWZ5Tm9kZSgpKTsKKworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpVbm5hbWVkVHlwZT4+IHR5cGVzOworICAgICAgICAgICAgdHlwZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShmdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKKworICAgICAgICAgICAg
Zm9yIChhdXRvJiBwYXJhbSA6IGZ1bmN0aW9uLnBhcmFtZXRlcnMoKSkKKyAgICAgICAgICAgICAg
ICB0eXBlcy51bmNoZWNrZWRBcHBlbmQobm9ybWFsaXplZFR5cGVGb3JGdW5jdGlvbktleSgqcGFy
YW0tPnR5cGUoKSkpOworCisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZnVuY3Rpb25z
LmFkZChGdW5jdGlvbktleSB7IGZ1bmN0aW9uLm5hbWUoKSwgV1RGTW92ZSh0eXBlcyksIGNhc3RS
ZXR1cm5UeXBlIH0sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+KCkpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQoZnVuY3Rpb24pOworICAgICAgICB9OworCisgICAgICAgIGZvciAoYXV0byYgZnVu
Y3Rpb24gOiBtX3Byb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICAgICAgYWRk
RnVuY3Rpb24oZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDog
bV9wcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgICAgICBhZGRG
dW5jdGlvbihmdW5jdGlvbi5nZXQoKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+Q2hlY2tlcigp
ID0gZGVmYXVsdDsKQEAgLTUxMSw2ICs2NTEsMzggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmlu
aXNoVmlzaXRpbmcoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mLCBSZXNvbHZpbmdUeXBl
KiBhZGRpdGlvbmFsQXJndW1lbnRUeXBlID0gbnVsbHB0cik7CiAKKyAgICBBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbihWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIG5hbWUsIENvZGVMb2NhdGlv
biwgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlID0gbnVsbHB0cik7CisKKyAgICBSZWZQ
dHI8QVNUOjpVbm5hbWVkVHlwZT4gYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoQVNUOjpVbm5h
bWVkVHlwZSYgYmFzZVR5cGUsIEFTVDo6QWRkcmVzc1NwYWNlKTsKKworICAgIEFTVDo6VW5uYW1l
ZFR5cGUmIHdyYXBwZWRGbG9hdFR5cGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3dyYXBwZWRG
bG9hdFR5cGUpCisgICAgICAgICAgICBtX3dyYXBwZWRGbG9hdFR5cGUgPSBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAoeyB9LCBtX2ludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgICAgICByZXR1
cm4gKm1fd3JhcHBlZEZsb2F0VHlwZTsKKyAgICB9CisKKyAgICBBU1Q6OlVubmFtZWRUeXBlJiBn
ZW5lcmljUG9pbnRlclR5cGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2dlbmVyaWNQb2ludGVy
VHlwZSkKKyAgICAgICAgICAgIG1fZ2VuZXJpY1BvaW50ZXJUeXBlID0gQVNUOjpQb2ludGVyVHlw
ZTo6Y3JlYXRlKHsgfSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKHsgfSwgbV9pbnRyaW5zaWNzLmZsb2F0VHlwZSgpKSk7CisgICAgICAgIHJldHVy
biAqbV9nZW5lcmljUG9pbnRlclR5cGU7CisgICAgfQorCisgICAgQVNUOjpVbm5hbWVkVHlwZSYg
bm9ybWFsaXplZFR5cGVGb3JGdW5jdGlvbktleShBU1Q6OlVubmFtZWRUeXBlJiB0eXBlKQorICAg
IHsKKyAgICAgICAgYXV0byogdW5pZnlOb2RlID0gJnR5cGUudW5pZnlOb2RlKCk7CisgICAgICAg
IGlmICh1bmlmeU5vZGUgPT0gJm1faW50cmluc2ljcy51aW50VHlwZSgpIHx8IHVuaWZ5Tm9kZSA9
PSAmbV9pbnRyaW5zaWNzLmludFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVkRmxv
YXRUeXBlKCk7CisKKyAgICAgICAgaWYgKGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4odHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJpY1BvaW50ZXJUeXBlKCk7CisKKyAgICAgICAgcmV0dXJu
IHR5cGU7CisgICAgfQorCisgICAgUmVmUHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4gbV93cmFwcGVk
RmxvYXRUeXBlOworICAgIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtX2dlbmVyaWNQb2ludGVy
VHlwZTsKICAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIHN0ZDo6dW5pcXVlX3B0cjxSZXNv
bHZpbmdUeXBlPj4gbV90eXBlTWFwOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5
UG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7CkBAIC01
MTgsNiArNjkwLDggQEAgcHJpdmF0ZToKICAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNp
Y3M7CiAgICAgUHJvZ3JhbSYgbV9wcm9ncmFtOwogICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
KiBtX2N1cnJlbnRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBIYXNoTWFwPEZ1bmN0aW9uS2V5
LCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+
LCAxPiwgRnVuY3Rpb25LZXk6Okhhc2gsIEZ1bmN0aW9uS2V5OjpUcmFpdHM+IG1fZnVuY3Rpb25z
OworICAgIEhhc2hNYXA8QW5kT3ZlcmxvYWRBcmd1bWVudEtleSwgUmVmUHRyPEFTVDo6VW5uYW1l
ZFR5cGU+LCBBbmRPdmVybG9hZEFyZ3VtZW50S2V5OjpIYXNoLCBBbmRPdmVybG9hZEFyZ3VtZW50
S2V5OjpUcmFpdHM+IG1fYW5kT3ZlcmxvYWRBcmd1bWVudE1hcDsKIH07CiAKIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKQEAgLTYzOCw2ICs4MTIsNTMgQEAgc3RhdGljIFJl
ZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBjb21taXQoUgogICAgIH0pKTsKIH0KIAorQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKiBDaGVja2VyOjpyZXNvbHZlRnVuY3Rpb24oVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBuYW1l
LCBDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkK
K3sKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4g
dW5uYW1lZFR5cGVzOworICAgIHVubmFtZWRUeXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHR5
cGVzLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8gcmVzb2x2aW5nVHlwZSA6IHR5cGVzKSB7Cisg
ICAgICAgIEFTVDo6VW5uYW1lZFR5cGUqIHR5cGUgPSByZXNvbHZpbmdUeXBlLmdldCgpLnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUp
IC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS5w
dHIoKTsKKyAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJl
c29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAg
ICBpZiAocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkubWF5YmVSZXNv
bHZlZFR5cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJnJlc29sdmFibGVUeXBlUmVmZXJl
bmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpOworCisgICAgICAgICAgICBpZiAo
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuaXNGbG9hdExpdGVyYWxU
eXBlKCkKKyAgICAgICAgICAgICAgICB8fCByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2
YWJsZVR5cGUoKS5pc0ludGVnZXJMaXRlcmFsVHlwZSgpCisgICAgICAgICAgICAgICAgfHwgcmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuaXNVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAmd3JhcHBlZEZsb2F0VHlwZSgp
OworCisgICAgICAgICAgICBpZiAocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVU
eXBlKCkuaXNOdWxsTGl0ZXJhbFR5cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmdlbmVy
aWNQb2ludGVyVHlwZSgpOworCisgICAgICAgICAgICByZXR1cm4gY29tbWl0KHJlc29sdmFibGVU
eXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKS5nZXQoKTsKKyAgICAgICAgfSkpOworCisg
ICAgICAgIGlmICghdHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNvdWxkIG5v
dCByZXNvbHZlIHRoZSB0eXBlIG9mIGEgY29uc3RhbnQuIikpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB1bm5hbWVkVHlwZXMudW5jaGVja2VkQXBw
ZW5kKG5vcm1hbGl6ZWRUeXBlRm9yRnVuY3Rpb25LZXkoKnR5cGUpKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8gaXRlciA9IG1fZnVuY3Rpb25zLmZpbmQoRnVuY3Rpb25LZXkgeyBuYW1l
LCBXVEZNb3ZlKHVubmFtZWRUeXBlcyksIGNhc3RSZXR1cm5UeXBlIH0pOworICAgICAgICBpZiAo
aXRlciAhPSBtX2Z1bmN0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAgaWYgKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiogZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChpdGVyLT52
YWx1ZSwgdHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYXV0byBuZXdGdW5jdGlvbiA9IHJl
c29sdmVCeUluc3RhbnRpYXRpb24obmFtZSwgbG9jYXRpb24sIHR5cGVzLCBtX2ludHJpbnNpY3Mp
KSB7CisgICAgICAgIG1fcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAg
ICAgICAgcmV0dXJuICZtX3Byb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5sYXN0
KCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKIHsK
ICAgICBib29sIGlzU2lnbmVkOwpAQCAtOTIxLDI2ICsxMTQyLDQyIEBAIHZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmUKICAgICBhc3NpZ25Db25jcmV0ZVR5cGUobWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGU6OmNyZWF0ZSht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAqbGVmdEFkZHJlc3NT
cGFjZSwgKmxlZnRWYWx1ZVR5cGUpKTsKIH0KIAotc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRU
eXBlPiBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChBU1Q6OlVubmFtZWRUeXBlJiBiYXNlVHlw
ZSwgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorUmVmUHRyPEFTVDo6VW5uYW1lZFR5
cGU+IENoZWNrZXI6OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKEFTVDo6VW5uYW1lZFR5cGUm
IGJhc2VUeXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCiB7Ci0gICAgYXV0byYg
dW5pZnlOb2RlID0gYmFzZVR5cGUudW5pZnlOb2RlKCk7Ci0gICAgaWYgKGlzPEFTVDo6TmFtZWRU
eXBlPih1bmlmeU5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwotICAgICAgICByZXR1cm4geyBBU1Q6OlBvaW50ZXJU
eXBlOjpjcmVhdGUobmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChuYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIG5hbWVkVHlwZSkp
IH07CisgICAgKyt0b3RhbDsKKyAgICBBbmRPdmVybG9hZEFyZ3VtZW50S2V5IGtleSB7IGJhc2VU
eXBlLCBhZGRyZXNzU3BhY2UgfTsKKyAgICB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fYW5kT3Zl
cmxvYWRBcmd1bWVudE1hcC5maW5kKGtleSk7CisgICAgICAgIGlmIChpdGVyICE9IG1fYW5kT3Zl
cmxvYWRBcmd1bWVudE1hcC5lbmQoKSkgeworICAgICAgICAgICAgKytudW1IaXRzOworICAgICAg
ICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byYg
dW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAg
IGF1dG8gY3JlYXRlQXJndW1lbnRUeXBlID0gWyZdICgpIC0+IFJlZlB0cjxBU1Q6OlVubmFtZWRU
eXBlPiB7CisgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGJhc2VUeXBlLnVuaWZ5Tm9kZSgpOwor
ICAgICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAg
IGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKG5hbWVkVHlwZS5j
b2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobmFt
ZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBuYW1lZFR5cGUpKSB9OworICAgICAgICB9CiAKLSAgICBp
ZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgcmV0
dXJuICZ1bm5hbWVkVHlwZTsKKyAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxB
U1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwogCi0gICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBl
Pih1bm5hbWVkVHlwZSkpCi0gICAgICAgIHJldHVybiB7IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
OjpjcmVhdGUodW5uYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgZG93bmNh
c3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkpIH07CisgICAgICAgIGlmIChp
czxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0
dXJuICZ1bm5hbWVkVHlwZTsKIAotICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoaXM8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB7IEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlOjpjcmVhdGUodW5uYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFj
ZSwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkpIH07CisKKyAg
ICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIHJldHVybiB7IEFTVDo6UG9pbnRlclR5cGU6OmNy
ZWF0ZSh1bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCB1bm5hbWVkVHlw
ZSkgfTsKKyAgICB9OwogCi0gICAgcmV0dXJuIHsgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKHVu
bmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIHVubmFtZWRUeXBlKSB9Owor
ICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlQXJndW1lbnRUeXBlKCk7CisgICAgbV9hbmRPdmVybG9h
ZEFyZ3VtZW50TWFwLmFkZChrZXksIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
dm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKiBhZGRpdGlvbmFsQXJn
dW1lbnRUeXBlKQpAQCAtOTYxLDggKzExOTgsOSBAQCB2b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0
aW5nKEFTVDo6UHJvcGVyCiAgICAgICAgIGlmIChhZGRpdGlvbmFsQXJndW1lbnRUeXBlKQogICAg
ICAgICAgICAgZ2V0dGVyQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFkZGl0aW9uYWxBcmd1bWVudFR5
cGUpOwogICAgICAgICBhdXRvIGdldHRlck5hbWUgPSBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
Z2V0dGVyRnVuY3Rpb25OYW1lKCk7Ci0gICAgICAgIGF1dG8qIGdldHRlckZ1bmN0aW9ucyA9IG1f
cHJvZ3JhbS5uYW1lQ29udGV4dCgpLmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1lKTsKLSAgICAgICAg
Z2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb24obV9wcm9ncmFtLCBnZXR0ZXJGdW5jdGlv
bnMsIGdldHRlckFyZ3VtZW50VHlwZXMsIGdldHRlck5hbWUsIHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5jb2RlTG9jYXRpb24oKSwgbV9pbnRyaW5zaWNzKTsKKyAgICAgICAgZ2V0dGVyRnVuY3Rp
b24gPSByZXNvbHZlRnVuY3Rpb24oZ2V0dGVyQXJndW1lbnRUeXBlcywgZ2V0dGVyTmFtZSwgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKTsKKyAgICAgICAgaWYgKGhhc0Vy
cm9yKCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnZXR0ZXJGdW5jdGlvbikK
ICAgICAgICAgICAgIGdldHRlclJldHVyblR5cGUgPSAmZ2V0dGVyRnVuY3Rpb24tPnR5cGUoKTsK
ICAgICB9CkBAIC05NzEsMTQgKzEyMDksMTUgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGlu
ZyhBU1Q6OlByb3BlcgogICAgIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBhbmRlclJldHVyblR5
cGUgPSBudWxscHRyOwogICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBl
QW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CiAgICAgaWYgKGxlZnRBZGRyZXNzU3BhY2Up
IHsKLSAgICAgICAgaWYgKGF1dG8gYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQgPSBXSExTTDo6
YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5hbWVkVHlwZSwgKmxlZnRBZGRyZXNz
U3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkID0g
dGhpcy0+YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5hbWVkVHlwZSwgKmxlZnRB
ZGRyZXNzU3BhY2UpKSB7CiAgICAgICAgICAgICBSZXNvbHZpbmdUeXBlIGFyZ3VtZW50VHlwZSA9
IHsgUmVmPEFTVDo6VW5uYW1lZFR5cGU+KCphcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCkgfTsK
ICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+
PiBhbmRlckFyZ3VtZW50VHlwZXMgeyBhcmd1bWVudFR5cGUgfTsKICAgICAgICAgICAgIGlmIChh
ZGRpdGlvbmFsQXJndW1lbnRUeXBlKQogICAgICAgICAgICAgICAgIGFuZGVyQXJndW1lbnRUeXBl
cy5hcHBlbmQoKmFkZGl0aW9uYWxBcmd1bWVudFR5cGUpOwogICAgICAgICAgICAgYXV0byBhbmRl
ck5hbWUgPSBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbk5hbWUoKTsKLSAg
ICAgICAgICAgIGF1dG8qIGFuZGVyRnVuY3Rpb25zID0gbV9wcm9ncmFtLm5hbWVDb250ZXh0KCku
Z2V0RnVuY3Rpb25zKGFuZGVyTmFtZSk7Ci0gICAgICAgICAgICBhbmRlckZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uKG1fcHJvZ3JhbSwgYW5kZXJGdW5jdGlvbnMsIGFuZGVyQXJndW1lbnRUeXBl
cywgYW5kZXJOYW1lLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIG1f
aW50cmluc2ljcyk7CisgICAgICAgICAgICBhbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9u
KGFuZGVyQXJndW1lbnRUeXBlcywgYW5kZXJOYW1lLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
Y29kZUxvY2F0aW9uKCkpOworICAgICAgICAgICAgaWYgKGhhc0Vycm9yKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgaWYgKGFuZGVyRnVuY3Rpb24pCiAgICAgICAgICAg
ICAgICAgYW5kZXJSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVy
RnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjQgRW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFu
ZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKICAgICAgICAgfQpAQCAtOTg2LDE0ICsxMjI1
LDE1IEBAIHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKIAogICAgIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogdGhyZWFkQW5kZXJGdW5jdGlvbiA9IG51bGxwdHI7CiAg
ICAgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHRocmVhZEFuZGVyUmV0dXJuVHlwZSA9IG51bGxw
dHI7Ci0gICAgaWYgKGF1dG8gYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQgPSBXSExTTDo6YXJn
dW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5hbWVkVHlwZSwgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCkpIHsKKyAgICBpZiAoYXV0byBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCA9
IHRoaXMtPmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpiYXNlVW5uYW1lZFR5cGUsIEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQpKSB7CiAgICAgICAgIFJlc29sdmluZ1R5cGUgYXJndW1lbnRU
eXBlID0geyBSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCwgKmJhc2VVbm5hbWVkVHlwZSkpIH07CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMgeyBh
cmd1bWVudFR5cGUgfTsKICAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCiAgICAg
ICAgICAgICB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1l
bnRUeXBlKTsKICAgICAgICAgYXV0byBhbmRlck5hbWUgPSBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uYW5kZXJGdW5jdGlvbk5hbWUoKTsKLSAgICAgICAgYXV0byogYW5kZXJGdW5jdGlvbnMgPSBt
X3Byb2dyYW0ubmFtZUNvbnRleHQoKS5nZXRGdW5jdGlvbnMoYW5kZXJOYW1lKTsKLSAgICAgICAg
dGhyZWFkQW5kZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbihtX3Byb2dyYW0sIGFuZGVyRnVu
Y3Rpb25zLCB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMsIGFuZGVyTmFtZSwgcHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBtX2ludHJpbnNpY3MpOworICAgICAgICB0aHJl
YWRBbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uKHRocmVhZEFuZGVyQXJndW1lbnRUeXBl
cywgYW5kZXJOYW1lLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpOwor
ICAgICAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYg
KHRocmVhZEFuZGVyRnVuY3Rpb24pCiAgICAgICAgICAgICB0aHJlYWRBbmRlclJldHVyblR5cGUg
PSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odGhyZWFkQW5kZXJGdW5jdGlvbi0+dHlwZSgp
KS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlz
IGJlIGEgcG9pbnRlcgogICAgIH0KQEAgLTEwMzksOCArMTI3OSw5IEBAIHZvaWQgQ2hlY2tlcjo6
ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICAgICAgICAgIHNldHRlckFyZ3VtZW50VHlw
ZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1lbnRUeXBlKTsKICAgICAgICAgc2V0dGVyQXJndW1l
bnRUeXBlcy5hcHBlbmQoZmllbGRSZXNvbHZpbmdUeXBlKTsKICAgICAgICAgYXV0byBzZXR0ZXJO
YW1lID0gcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uTmFtZSgpOwotICAg
ICAgICBhdXRvKiBzZXR0ZXJGdW5jdGlvbnMgPSBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKS5nZXRG
dW5jdGlvbnMoc2V0dGVyTmFtZSk7Ci0gICAgICAgIHNldHRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1
bmN0aW9uKG1fcHJvZ3JhbSwgc2V0dGVyRnVuY3Rpb25zLCBzZXR0ZXJBcmd1bWVudFR5cGVzLCBz
ZXR0ZXJOYW1lLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIG1faW50
cmluc2ljcyk7CisgICAgICAgIHNldHRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uKHNldHRl
ckFyZ3VtZW50VHlwZXMsIHNldHRlck5hbWUsIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSk7CisgICAgICAgIGlmIChoYXNFcnJvcigpKQorICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBpZiAoc2V0dGVyRnVuY3Rpb24pCiAgICAgICAgICAgICBzZXR0ZXJSZXR1cm5U
eXBlID0gJnNldHRlckZ1bmN0aW9uLT50eXBlKCk7CiAgICAgfQpAQCAtMTQyMCwyMiArMTY2MSwy
NCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mCiAgICAgLy8gRG9u
J3QgcmVjdXJzZSBvbiB0aGUgY2FzdFJldHVyblR5cGUsIGJlY2F1c2UgaXQncyBndWFyYW50ZWVk
IHRvIGJlIGEgTmFtZWRUeXBlLCB3aGljaCB3aWxsIGdldCB2aXNpdGVkIGxhdGVyLgogICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gcmVjdXJzZSB0byB0aGUgc2FtZSBub2RlIHR3aWNlLgogCi0gICAg
TmFtZUNvbnRleHQmIG5hbWVDb250ZXh0ID0gbV9wcm9ncmFtLm5hbWVDb250ZXh0KCk7Ci0gICAg
YXV0byogZnVuY3Rpb25zID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9u
Lm5hbWUoKSk7Ci0gICAgaWYgKCFmdW5jdGlvbnMpIHsKLSAgICAgICAgaWYgKGF1dG8qIHR5cGVz
ID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkgewotICAgICAg
ICAgICAgaWYgKHR5cGVzLT5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgICAgIGlmICgoZnVu
Y3Rpb25zID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKCJvcGVyYXRvciBjYXN0Il9zdHIpKSkK
LSAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKCp0eXBlcylb
MF0uZ2V0KCkpOworICAgIGF1dG8qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uKHR5cGVzLCBj
YWxsRXhwcmVzc2lvbi5uYW1lKCksIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKTsKKyAg
ICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFmdW5jdGlvbikg
eworICAgICAgICBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQgPSBtX3Byb2dyYW0ubmFtZUNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNhc3RUeXBlcyA9IG5hbWVDb250ZXh0LmdldFR5cGVz
KGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChjYXN0VHlwZXMtPnNp
emUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIGNhc3RUeXBlID0g
KCpjYXN0VHlwZXMpWzBdLmdldCgpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gcmVzb2x2
ZUZ1bmN0aW9uKHR5cGVzLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBjYWxsRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSwgJmNhc3RUeXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoY2FzdFR5
cGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmICghZnVuY3Rpb25z
KSB7Ci0gICAgICAgIHNldEVycm9yKEVycm9yKCJDb3VsZCBub3QgZmluZCBhbnkgZnVuY3Rpb25z
IHdpdGggYXBwcm9wcmlhdGUgbmFtZS4iLCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgYXV0byogZnVuY3Rpb24gPSByZXNvbHZl
RnVuY3Rpb24obV9wcm9ncmFtLCBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsRXhwcmVzc2lvbi5uYW1l
KCksIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBtX2ludHJpbnNpY3MsIGNhbGxFeHBy
ZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpOwogICAgIGlmICghZnVuY3Rpb24pIHsKICAgICAgICAg
Ly8gRklYTUU6IEFkZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgZm9yIHdoeSB3ZSBjYW4ndCByZXNv
bHZlIHRvIG9uZSBvZiB0aGUgb3ZlcnJpZGVzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMTMzCkBAIC0xNDYxLDcgKzE3MDQsOSBAQCBFeHBl
Y3RlZDx2b2lkLCBFcnJvcj4gY2hlY2soUHJvZ3JhbSYgcHJvCiAgICAgY2hlY2tlci5jaGVja0Vy
cm9yQW5kVmlzaXQocHJvZ3JhbSk7CiAgICAgaWYgKGNoZWNrZXIuaGFzRXJyb3IoKSkKICAgICAg
ICAgcmV0dXJuIGNoZWNrZXIucmVzdWx0KCk7Ci0gICAgcmV0dXJuIGNoZWNrZXIuYXNzaWduVHlw
ZXMoKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNoZWNrZXIuYXNzaWduVHlwZXMoKTsKKyAgICBkYXRh
TG9nTG4oImhpdCByYXRlOiAiLCBjaGVja2VyLm51bUhpdHMvY2hlY2tlci50b3RhbCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAko
cmV2aXNpb24gMjQ4MzI5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMg
Y29uc3RleHByIGJvb2wgZHVtcEFTVEFmdGVyUGFyc2luCiBzdGF0aWMgY29uc3RleHByIGJvb2wg
ZHVtcEFTVEF0RW5kID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgYWx3YXlzRHVtcFBh
c3NGYWlsdXJlcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQYXNzRmFpbHVy
ZSA9IGR1bXBBU1RCZWZvcmVFYWNoUGFzcyB8fCBkdW1wQVNUQWZ0ZXJQYXJzaW5nIHx8IGR1bXBB
U1RBdEVuZCB8fCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzOwotc3RhdGljIGNvbnN0ZXhwciBib29s
IGR1bXBQaGFzZVRpbWVzID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBoYXNl
VGltZXMgPSB0cnVlOwogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRM
aWJyYXJ5ID0gZmFsc2U7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375683</attachid>
            <date>2019-08-06 21:32:56 -0700</date>
            <delta_ts>2019-08-06 21:35:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>9357</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE5LTA4LTA2ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gY2FjaGUgcmVzdWx0
cyBvZiBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCBpbnNpZGUgQ2hlY2tlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNDYyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBJIHByb2ZpbGVkIHRo
ZSB0aW1lIHdlIHNwZW50IGluIHRoZSBjaGVja2VyLCBpdCB0dXJuZWQgb3V0IHRoYXQgCisgICAg
ICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkIGlzIG9uZSBvZiB0aGUgbW9zdCBleHBlbnNp
dmUgZnVuY3Rpb25zLiBJZgorICAgICAgICB3ZSBqdXN0IGNhY2hlIHRoZSByZXN1bHRzIG9mIHRo
YXQgZnVuY3Rpb24sIHdlIGNhbiBhdm9pZCA5OSUgb2YgdGhlCisgICAgICAgIGR1cGxpY2F0ZSBh
bGxvY2F0aW9ucyB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gY29tcHV0ZV9ib2lkcy4gVGhpcyBwYXRj
aAorICAgICAgICBpcyBhIH40bXMgc3BlZWR1cCBpbiB0aGUgY2hlY2tlciBvbiBjb21wdXRlX2Jv
aWRzLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucy5jcHA6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVj
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBbmRPdmVybG9hZFR5cGVLZXk6OkFu
ZE92ZXJsb2FkVHlwZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QW5kT3ZlcmxvYWRU
eXBlS2V5Ojppc0VtcHR5VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFu
ZE92ZXJsb2FkVHlwZUtleTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFuZE92ZXJsb2FkVHlwZUtleTo6aGFzaCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QW5kT3ZlcmxvYWRUeXBlS2V5OjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBbmRPdmVybG9hZFR5cGVLZXk6Okhhc2g6Omhh
c2gpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFuZE92ZXJsb2FkVHlwZUtleTo6SGFzaDo6
ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFuZE92ZXJsb2FkVHlwZUtleTo6VHJh
aXRzOjppc0VtcHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmFy
Z3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVj
a2VyOjpmaW5pc2hWaXNpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6YXJndW1lbnRU
eXBlRm9yQW5kT3ZlcmxvYWQpOiBEZWxldGVkLgorCiAyMDE5LTA4LTA2ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSExTTF0gTWFrZSByZXNvbHZlRnVuY3Rp
b24gaW4gQ2hlY2tlciBmYXN0ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMuY3BwCShyZXZpc2lvbiAyNDgzMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDcgKzEwMyw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwogICAgIH07CiAK
ICAgICBzdHJ1Y3QgVHJhaXRzIDogcHVibGljIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPER1
cGxpY2F0ZUZ1bmN0aW9uS2V5PiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0ODMzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksNTcgQEAgcHJpdmF0ZToKICAgICBBU1Q6Ok5hbWVk
VHlwZSogbV9jYXN0UmV0dXJuVHlwZTsKIH07CiAKK2NsYXNzIEFuZE92ZXJsb2FkVHlwZUtleSB7
CitwdWJsaWM6CisgICAgQW5kT3ZlcmxvYWRUeXBlS2V5KCkgPSBkZWZhdWx0OworICAgIEFuZE92
ZXJsb2FkVHlwZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAg
ICAgICBtX3R5cGUgPSBiaXR3aXNlX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMSkpOworICAgIH0KKworICAgIEFuZE92ZXJsb2FkVHlwZUtleShBU1Q6OlVu
bmFtZWRUeXBlJiB0eXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgICAg
IDogbV90eXBlKCZ0eXBlKQorICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkK
KyAgICB7IH0KKworICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gIW1fdHlw
ZTsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gYml0d2lzZV9jYXN0PEFTVDo6VW5uYW1lZFR5cGUqPihzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDEpKTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gSW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihtX2Fk
ZHJlc3NTcGFjZSkpIF4gbV90eXBlLT5oYXNoKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEFuZE92ZXJsb2FkVHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKm1fdHlwZSA9PSAqb3RoZXIubV90eXBlCisgICAgICAgICAgICAmJiBtX2FkZHJl
c3NTcGFjZSA9PSBvdGhlci5tX2FkZHJlc3NTcGFjZTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgSGFz
aCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEFuZE92ZXJsb2FkVHlwZUtl
eSYga2V5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEFuZE92ZXJsb2FkVHlwZUtl
eSYgYSwgY29uc3QgQW5kT3ZlcmxvYWRUeXBlS2V5JiBiKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYSA9PSBiOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9OworCisgICAgc3Ry
dWN0IFRyYWl0cyA6IHB1YmxpYyBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxBbmRPdmVybG9h
ZFR5cGVLZXk+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVu
Y3Rpb24gPSB0cnVlOworICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgQW5k
T3ZlcmxvYWRUeXBlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5pc0VtcHR5VmFsdWUoKTsgfQorICAg
IH07CisKK3ByaXZhdGU6CisgICAgQVNUOjpVbm5hbWVkVHlwZSogbV90eXBlIHsgbnVsbHB0ciB9
OworICAgIEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKwogc3RhdGljIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRl
eGVyKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0
QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCiB7CiAgICAgY29uc3QgYm9v
bCBpc09wZXJhdG9yID0gdHJ1ZTsKQEAgLTU5OCw2ICs2NDksOCBAQCBwcml2YXRlOgogCiAgICAg
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb24oVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBuYW1l
LCBDb2RlTG9jYXRpb24sIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSA9IG51bGxwdHIp
OwogCisgICAgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKEFTVDo6VW5uYW1lZFR5cGUmIGJhc2VUeXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSk7CisKICAg
ICBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkRmxvYXRUeXBlKCkKICAgICB7CiAgICAgICAgIGlm
ICghbV93cmFwcGVkRmxvYXRUeXBlKQpAQCAtNjM0LDYgKzY4Nyw3IEBAIHByaXZhdGU6CiAgICAg
UHJvZ3JhbSYgbV9wcm9ncmFtOwogICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBtX2N1cnJl
bnRGdW5jdGlvbiB7IG51bGxwdHIgfTsKICAgICBIYXNoTWFwPEZ1bmN0aW9uS2V5LCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiwgRnVu
Y3Rpb25LZXk6Okhhc2gsIEZ1bmN0aW9uS2V5OjpUcmFpdHM+IG1fZnVuY3Rpb25zOworICAgIEhh
c2hNYXA8QW5kT3ZlcmxvYWRUeXBlS2V5LCBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEFuZE92
ZXJsb2FkVHlwZUtleTo6SGFzaCwgQW5kT3ZlcmxvYWRUeXBlS2V5OjpUcmFpdHM+IG1fYW5kT3Zl
cmxvYWRUeXBlTWFwOwogfTsKIAogdm9pZCBDaGVja2VyOjp2aXNpdChQcm9ncmFtJiBwcm9ncmFt
KQpAQCAtMTA4NCwyNiArMTEzOCwzOSBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFy
cmF5UmVmZXJlCiAgICAgYXNzaWduQ29uY3JldGVUeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2UsICpsZWZ0VmFsdWVU
eXBlKSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gYXJndW1lbnRUeXBl
Rm9yQW5kT3ZlcmxvYWQoQVNUOjpVbm5hbWVkVHlwZSYgYmFzZVR5cGUsIEFTVDo6QWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBDaGVja2VyOjphcmd1
bWVudFR5cGVGb3JBbmRPdmVybG9hZChBU1Q6OlVubmFtZWRUeXBlJiBiYXNlVHlwZSwgQVNUOjpB
ZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQogewotICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGJhc2VU
eXBlLnVuaWZ5Tm9kZSgpOwotICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkg
ewotICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKLSAgICAgICAgcmV0dXJuIHsgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKG5hbWVk
VHlwZS5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAobmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBuYW1lZFR5cGUpKSB9OworICAgIEFuZE92ZXJs
b2FkVHlwZUtleSBrZXkgeyBiYXNlVHlwZSwgYWRkcmVzc1NwYWNlIH07CisgICAgeworICAgICAg
ICBhdXRvIGl0ZXIgPSBtX2FuZE92ZXJsb2FkVHlwZU1hcC5maW5kKGtleSk7CisgICAgICAgIGlm
IChpdGVyICE9IG1fYW5kT3ZlcmxvYWRUeXBlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXItPnZhbHVlOwogICAgIH0KIAotICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICBhdXRvIGNyZWF0ZUFyZ3VtZW50VHlw
ZSA9IFsmXSAoKSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICBhdXRvJiB1
bmlmeU5vZGUgPSBiYXNlVHlwZS51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIHJldHVybiB7IEFT
VDo6UG9pbnRlclR5cGU6OmNyZWF0ZShuYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NT
cGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKG5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwg
bmFtZWRUeXBlKSkgfTsKKyAgICAgICAgfQogCi0gICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7CisgICAg
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlO
b2RlKTsKIAotICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAg
ICByZXR1cm4geyBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKHVubmFtZWRUeXBlLmNv
ZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5h
bWVkVHlwZSkudHlwZSgpKSB9OworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7CiAKLSAg
ICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4geyBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKHVubmFt
ZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkVHlwZSkudHlwZSgpKSB9OworCisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICByZXR1cm4geyBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUodW5uYW1lZFR5cGUuY29kZUxv
Y2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgdW5uYW1lZFR5cGUpIH07CisgICAgfTsKIAotICAgIHJl
dHVybiB7IEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0ZSh1bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24o
KSwgYWRkcmVzc1NwYWNlLCB1bm5hbWVkVHlwZSkgfTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0
ZUFyZ3VtZW50VHlwZSgpOworICAgIG1fYW5kT3ZlcmxvYWRUeXBlTWFwLmFkZChrZXksIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGlu
ZyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LCBSZXNvbHZpbmdUeXBlKiBhZGRpdGlvbmFsQXJndW1lbnRUeXBlKQpAQCAtMTEzNSw3ICsxMjAy
LDcgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcgogICAgIFJlZlB0
cjxBU1Q6OlVubmFtZWRUeXBlPiBhbmRlclJldHVyblR5cGUgPSBudWxscHRyOwogICAgIGF1dG8g
bGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1Nw
YWNlKCk7CiAgICAgaWYgKGxlZnRBZGRyZXNzU3BhY2UpIHsKLSAgICAgICAgaWYgKGF1dG8gYXJn
dW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQgPSBXSExTTDo6YXJndW1lbnRUeXBlRm9yQW5kT3Zlcmxv
YWQoKmJhc2VVbm5hbWVkVHlwZSwgKmxlZnRBZGRyZXNzU3BhY2UpKSB7CisgICAgICAgIGlmIChh
dXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkID0gdGhpcy0+YXJndW1lbnRUeXBlRm9yQW5k
T3ZlcmxvYWQoKmJhc2VVbm5hbWVkVHlwZSwgKmxlZnRBZGRyZXNzU3BhY2UpKSB7CiAgICAgICAg
ICAgICBSZXNvbHZpbmdUeXBlIGFyZ3VtZW50VHlwZSA9IHsgUmVmPEFTVDo6VW5uYW1lZFR5cGU+
KCphcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCkgfTsKICAgICAgICAgICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRlckFyZ3VtZW50VHlwZXMgeyBh
cmd1bWVudFR5cGUgfTsKICAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsQXJndW1lbnRUeXBlKQpA
QCAtMTE1MSw3ICsxMjE4LDcgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlBy
b3BlcgogCiAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRlckZ1bmN0aW9u
ID0gbnVsbHB0cjsKICAgICBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gdGhyZWFkQW5kZXJSZXR1
cm5UeXBlID0gbnVsbHB0cjsKLSAgICBpZiAoYXV0byBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9h
ZCA9IFdITFNMOjphcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCgqYmFzZVVubmFtZWRUeXBlLCBB
U1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSkgeworICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZv
ckFuZE92ZXJsb2FkID0gdGhpcy0+YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5h
bWVkVHlwZSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpIHsKICAgICAgICAgUmVzb2x2aW5n
VHlwZSBhcmd1bWVudFR5cGUgPSB7IFJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlBvaW50ZXJU
eXBlOjpjcmVhdGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCAqYmFzZVVubmFtZWRUeXBlKSkgfTsKICAgICAgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHRocmVhZEFuZGVyQXJn
dW1lbnRUeXBlcyB7IGFyZ3VtZW50VHlwZSB9OwogICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3Vt
ZW50VHlwZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375685</attachid>
            <date>2019-08-06 21:35:54 -0700</date>
            <delta_ts>2019-08-07 11:14:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>9357</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE5LTA4LTA2ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gY2FjaGUgcmVzdWx0
cyBvZiBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCBpbnNpZGUgQ2hlY2tlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNDYyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBJIHByb2ZpbGVkIHRo
ZSB0aW1lIHdlIHNwZW50IGluIHRoZSBjaGVja2VyLCBpdCB0dXJuZWQgb3V0IHRoYXQgCisgICAg
ICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkIGlzIG9uZSBvZiB0aGUgbW9zdCBleHBlbnNp
dmUgZnVuY3Rpb25zLiBJZgorICAgICAgICB3ZSBqdXN0IGNhY2hlIHRoZSByZXN1bHRzIG9mIHRo
YXQgZnVuY3Rpb24sIHdlIGNhbiBhdm9pZCA5OSUgb2YgdGhlCisgICAgICAgIGR1cGxpY2F0ZSBh
bGxvY2F0aW9ucyB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gY29tcHV0ZV9ib2lkcy4gVGhpcyBwYXRj
aAorICAgICAgICBpcyBhIH40bXMgc3BlZWR1cCBpbiB0aGUgY2hlY2tlciBvbiBjb21wdXRlX2Jv
aWRzLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucy5jcHA6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVj
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBbmRPdmVybG9hZFR5cGVLZXk6OkFu
ZE92ZXJsb2FkVHlwZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QW5kT3ZlcmxvYWRU
eXBlS2V5Ojppc0VtcHR5VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFu
ZE92ZXJsb2FkVHlwZUtleTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFuZE92ZXJsb2FkVHlwZUtleTo6aGFzaCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QW5kT3ZlcmxvYWRUeXBlS2V5OjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBbmRPdmVybG9hZFR5cGVLZXk6Okhhc2g6Omhh
c2gpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFuZE92ZXJsb2FkVHlwZUtleTo6SGFzaDo6
ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFuZE92ZXJsb2FkVHlwZUtleTo6VHJh
aXRzOjppc0VtcHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmFy
Z3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVj
a2VyOjpmaW5pc2hWaXNpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6YXJndW1lbnRU
eXBlRm9yQW5kT3ZlcmxvYWQpOiBEZWxldGVkLgorCiAyMDE5LTA4LTA2ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSExTTF0gTWFrZSByZXNvbHZlRnVuY3Rp
b24gaW4gQ2hlY2tlciBmYXN0ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMuY3BwCShyZXZpc2lvbiAyNDgzMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDcgKzEwMyw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwogICAgIH07CiAK
ICAgICBzdHJ1Y3QgVHJhaXRzIDogcHVibGljIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPER1
cGxpY2F0ZUZ1bmN0aW9uS2V5PiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0ODMzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksNTcgQEAgcHJpdmF0ZToKICAgICBBU1Q6Ok5hbWVk
VHlwZSogbV9jYXN0UmV0dXJuVHlwZTsKIH07CiAKK2NsYXNzIEFuZE92ZXJsb2FkVHlwZUtleSB7
CitwdWJsaWM6CisgICAgQW5kT3ZlcmxvYWRUeXBlS2V5KCkgPSBkZWZhdWx0OworICAgIEFuZE92
ZXJsb2FkVHlwZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAg
ICAgICBtX3R5cGUgPSBiaXR3aXNlX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMSkpOworICAgIH0KKworICAgIEFuZE92ZXJsb2FkVHlwZUtleShBU1Q6OlVu
bmFtZWRUeXBlJiB0eXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgICAg
IDogbV90eXBlKCZ0eXBlKQorICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkK
KyAgICB7IH0KKworICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gIW1fdHlw
ZTsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gYml0d2lzZV9jYXN0PEFTVDo6VW5uYW1lZFR5cGUqPihzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDEpKTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gSW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihtX2Fk
ZHJlc3NTcGFjZSkpIF4gbV90eXBlLT5oYXNoKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEFuZE92ZXJsb2FkVHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9hZGRyZXNzU3BhY2UgPT0gb3RoZXIubV9hZGRyZXNzU3BhY2UKKyAgICAgICAg
ICAgICYmICptX3R5cGUgPT0gKm90aGVyLm1fdHlwZTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgSGFz
aCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEFuZE92ZXJsb2FkVHlwZUtl
eSYga2V5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEFuZE92ZXJsb2FkVHlwZUtl
eSYgYSwgY29uc3QgQW5kT3ZlcmxvYWRUeXBlS2V5JiBiKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYSA9PSBiOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9OworCisgICAgc3Ry
dWN0IFRyYWl0cyA6IHB1YmxpYyBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxBbmRPdmVybG9h
ZFR5cGVLZXk+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVu
Y3Rpb24gPSB0cnVlOworICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgQW5k
T3ZlcmxvYWRUeXBlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5pc0VtcHR5VmFsdWUoKTsgfQorICAg
IH07CisKK3ByaXZhdGU6CisgICAgQVNUOjpVbm5hbWVkVHlwZSogbV90eXBlIHsgbnVsbHB0ciB9
OworICAgIEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKwogc3RhdGljIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRl
eGVyKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0
QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCiB7CiAgICAgY29uc3QgYm9v
bCBpc09wZXJhdG9yID0gdHJ1ZTsKQEAgLTU5OCw2ICs2NDksOCBAQCBwcml2YXRlOgogCiAgICAg
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb24oVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBuYW1l
LCBDb2RlTG9jYXRpb24sIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSA9IG51bGxwdHIp
OwogCisgICAgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKEFTVDo6VW5uYW1lZFR5cGUmIGJhc2VUeXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSk7CisKICAg
ICBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkRmxvYXRUeXBlKCkKICAgICB7CiAgICAgICAgIGlm
ICghbV93cmFwcGVkRmxvYXRUeXBlKQpAQCAtNjM0LDYgKzY4Nyw3IEBAIHByaXZhdGU6CiAgICAg
UHJvZ3JhbSYgbV9wcm9ncmFtOwogICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBtX2N1cnJl
bnRGdW5jdGlvbiB7IG51bGxwdHIgfTsKICAgICBIYXNoTWFwPEZ1bmN0aW9uS2V5LCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiwgRnVu
Y3Rpb25LZXk6Okhhc2gsIEZ1bmN0aW9uS2V5OjpUcmFpdHM+IG1fZnVuY3Rpb25zOworICAgIEhh
c2hNYXA8QW5kT3ZlcmxvYWRUeXBlS2V5LCBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEFuZE92
ZXJsb2FkVHlwZUtleTo6SGFzaCwgQW5kT3ZlcmxvYWRUeXBlS2V5OjpUcmFpdHM+IG1fYW5kT3Zl
cmxvYWRUeXBlTWFwOwogfTsKIAogdm9pZCBDaGVja2VyOjp2aXNpdChQcm9ncmFtJiBwcm9ncmFt
KQpAQCAtMTA4NCwyNiArMTEzOCwzOSBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFy
cmF5UmVmZXJlCiAgICAgYXNzaWduQ29uY3JldGVUeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2UsICpsZWZ0VmFsdWVU
eXBlKSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gYXJndW1lbnRUeXBl
Rm9yQW5kT3ZlcmxvYWQoQVNUOjpVbm5hbWVkVHlwZSYgYmFzZVR5cGUsIEFTVDo6QWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBDaGVja2VyOjphcmd1
bWVudFR5cGVGb3JBbmRPdmVybG9hZChBU1Q6OlVubmFtZWRUeXBlJiBiYXNlVHlwZSwgQVNUOjpB
ZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQogewotICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGJhc2VU
eXBlLnVuaWZ5Tm9kZSgpOwotICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkg
ewotICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKLSAgICAgICAgcmV0dXJuIHsgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKG5hbWVk
VHlwZS5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAobmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBuYW1lZFR5cGUpKSB9OworICAgIEFuZE92ZXJs
b2FkVHlwZUtleSBrZXkgeyBiYXNlVHlwZSwgYWRkcmVzc1NwYWNlIH07CisgICAgeworICAgICAg
ICBhdXRvIGl0ZXIgPSBtX2FuZE92ZXJsb2FkVHlwZU1hcC5maW5kKGtleSk7CisgICAgICAgIGlm
IChpdGVyICE9IG1fYW5kT3ZlcmxvYWRUeXBlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXItPnZhbHVlOwogICAgIH0KIAotICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICBhdXRvIGNyZWF0ZUFyZ3VtZW50VHlw
ZSA9IFsmXSAoKSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICBhdXRvJiB1
bmlmeU5vZGUgPSBiYXNlVHlwZS51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIHJldHVybiB7IEFT
VDo6UG9pbnRlclR5cGU6OmNyZWF0ZShuYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NT
cGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKG5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwg
bmFtZWRUeXBlKSkgfTsKKyAgICAgICAgfQogCi0gICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7CisgICAg
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlO
b2RlKTsKIAotICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAg
ICByZXR1cm4geyBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKHVubmFtZWRUeXBlLmNv
ZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5h
bWVkVHlwZSkudHlwZSgpKSB9OworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7CiAKLSAg
ICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4geyBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKHVubmFt
ZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkVHlwZSkudHlwZSgpKSB9OworCisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICByZXR1cm4geyBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUodW5uYW1lZFR5cGUuY29kZUxv
Y2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgdW5uYW1lZFR5cGUpIH07CisgICAgfTsKIAotICAgIHJl
dHVybiB7IEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0ZSh1bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24o
KSwgYWRkcmVzc1NwYWNlLCB1bm5hbWVkVHlwZSkgfTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0
ZUFyZ3VtZW50VHlwZSgpOworICAgIG1fYW5kT3ZlcmxvYWRUeXBlTWFwLmFkZChrZXksIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGlu
ZyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LCBSZXNvbHZpbmdUeXBlKiBhZGRpdGlvbmFsQXJndW1lbnRUeXBlKQpAQCAtMTEzNSw3ICsxMjAy
LDcgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcgogICAgIFJlZlB0
cjxBU1Q6OlVubmFtZWRUeXBlPiBhbmRlclJldHVyblR5cGUgPSBudWxscHRyOwogICAgIGF1dG8g
bGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1Nw
YWNlKCk7CiAgICAgaWYgKGxlZnRBZGRyZXNzU3BhY2UpIHsKLSAgICAgICAgaWYgKGF1dG8gYXJn
dW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQgPSBXSExTTDo6YXJndW1lbnRUeXBlRm9yQW5kT3Zlcmxv
YWQoKmJhc2VVbm5hbWVkVHlwZSwgKmxlZnRBZGRyZXNzU3BhY2UpKSB7CisgICAgICAgIGlmIChh
dXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkID0gdGhpcy0+YXJndW1lbnRUeXBlRm9yQW5k
T3ZlcmxvYWQoKmJhc2VVbm5hbWVkVHlwZSwgKmxlZnRBZGRyZXNzU3BhY2UpKSB7CiAgICAgICAg
ICAgICBSZXNvbHZpbmdUeXBlIGFyZ3VtZW50VHlwZSA9IHsgUmVmPEFTVDo6VW5uYW1lZFR5cGU+
KCphcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCkgfTsKICAgICAgICAgICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRlckFyZ3VtZW50VHlwZXMgeyBh
cmd1bWVudFR5cGUgfTsKICAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsQXJndW1lbnRUeXBlKQpA
QCAtMTE1MSw3ICsxMjE4LDcgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlBy
b3BlcgogCiAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRlckZ1bmN0aW9u
ID0gbnVsbHB0cjsKICAgICBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gdGhyZWFkQW5kZXJSZXR1
cm5UeXBlID0gbnVsbHB0cjsKLSAgICBpZiAoYXV0byBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9h
ZCA9IFdITFNMOjphcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCgqYmFzZVVubmFtZWRUeXBlLCBB
U1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSkgeworICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZv
ckFuZE92ZXJsb2FkID0gdGhpcy0+YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5h
bWVkVHlwZSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpIHsKICAgICAgICAgUmVzb2x2aW5n
VHlwZSBhcmd1bWVudFR5cGUgPSB7IFJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlBvaW50ZXJU
eXBlOjpjcmVhdGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCAqYmFzZVVubmFtZWRUeXBlKSkgfTsKICAgICAgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHRocmVhZEFuZGVyQXJn
dW1lbnRUeXBlcyB7IGFyZ3VtZW50VHlwZSB9OwogICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3Vt
ZW50VHlwZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>