<?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>200098</bug_id>
          
          <creation_ts>2019-07-24 15:16:48 -0700</creation_ts>
          <short_desc>[WHLSL] UnnamedType should be reference counted</short_desc>
          <delta_ts>2019-07-28 19:29:09 -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>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>thorton</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1555530</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-24 15:16:48 -0700</bug_when>
    <thetext>We clone them &gt; 433k times in some of Justin&apos;s simple demos! That&apos;s craziness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555613</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-24 18:29:11 -0700</bug_when>
    <thetext>Gonna work on this now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555661</commentid>
    <comment_count>2</comment_count>
      <attachid>374854</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-24 19:59:09 -0700</bug_when>
    <thetext>Created attachment 374854
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555664</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-24 20:06:34 -0700</bug_when>
    <thetext>seems like 40% speedup on hello-cube.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555665</commentid>
    <comment_count>4</comment_count>
      <attachid>374856</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-24 20:08:59 -0700</bug_when>
    <thetext>Created attachment 374856
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555944</commentid>
    <comment_count>5</comment_count>
      <attachid>374918</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-25 15:57:57 -0700</bug_when>
    <thetext>Created attachment 374918
WIP

Might be ready. Just want to read it over once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556003</commentid>
    <comment_count>6</comment_count>
      <attachid>374931</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-25 19:11:02 -0700</bug_when>
    <thetext>Created attachment 374931
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556004</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-07-25 19:13:50 -0700</bug_when>
    <thetext>Attachment 374931 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:958:  &apos;getterReturnType&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedNullptr&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:971:  &apos;anderReturnType&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedNullptr&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:988:  &apos;threadAnderReturnType&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedNullptr&apos;.  [readability/naming/protected] [4]
Total errors found: 3 in 47 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>1556241</commentid>
    <comment_count>8</comment_count>
      <attachid>374931</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-26 14:26:19 -0700</bug_when>
    <thetext>Comment on attachment 374931
patch

Clearing flags on attachment: 374931

Committed r247878: &lt;https://trac.webkit.org/changeset/247878&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556242</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-26 14:26:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556290</commentid>
    <comment_count>10</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-07-26 17:01:38 -0700</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/247878/webkit

caused testing in webgpu/ to exit early on Mojave Debug with crashes

Build:
https://build.webkit.org/builders/Apple%20Mojave%20Debug%20WK2%20%28Tests%29/builds/3784

Results:
https://build.webkit.org/results/Apple%20Mojave%20Debug%20WK2%20(Tests)/r247879%20(3784)/results.html

I was able to reproduce this by just running the webgpu/ directory locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556319</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-26 18:37:47 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #10)
&gt; It looks like the changes in https://trac.webkit.org/changeset/247878/webkit
&gt; 
&gt; caused testing in webgpu/ to exit early on Mojave Debug with crashes
&gt; 
&gt; Build:
&gt; https://build.webkit.org/builders/Apple%20Mojave%20Debug%20WK2%20%28Tests%29/
&gt; builds/3784
&gt; 
&gt; Results:
&gt; https://build.webkit.org/results/Apple%20Mojave%20Debug%20WK2%20(Tests)/
&gt; r247879%20(3784)/results.html
&gt; 
&gt; I was able to reproduce this by just running the webgpu/ directory locally.

Looking into it now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556323</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-26 19:03:34 -0700</bug_when>
    <thetext>I think I have the fix. Just waiting for my local build to finish</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556327</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-26 19:19:02 -0700</bug_when>
    <thetext>fixed in:
https://trac.webkit.org/changeset/247887/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556476</commentid>
    <comment_count>14</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-07-28 19:28:50 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #13)
&gt; fixed in:
&gt; https://trac.webkit.org/changeset/247887/webkit

And a follow up in https://trac.webkit.org/changeset/247899/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556477</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-28 19:29:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/53644774&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374854</attachid>
            <date>2019-07-24 19:59:09 -0700</date>
            <delta_ts>2019-07-24 20:08:59 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>101171</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzgwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE5LTA3LTI0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gQWRkIG9wdGlvbmFs
IGxvZ2dpbmcgZm9yIHBoYXNlIHRpbWluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMDA5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFzIHdlJ3JlIGRvaW5nIFdITFNMIGNvbXBpbGVyIHNwZWVkdXAg
d29yaywgaXQgaGVscHMgdG8gYmUgYWJsZSB0bworICAgICAgICBsb2cgcGhhc2UgdGltZXMuIEkg
dGhpbmsgYSBmZXcgb2YgdXMgaGF2ZSB3cml0dGVuIHN1Y2ggcGF0Y2hlcyBsb2NhbGx5LgorICAg
ICAgICBJbiB0aGlzIHBhdGNoLCBJJ20gYWRkaW5nIGEgd2F5IHRvIGVhc2lseSBzd2l0Y2ggdGhp
cyBsb2dnaW5nIG9uIGFuZAorICAgICAgICBvZmYgYnkgZmxpcHBpbmcgYSAiY29uc3RleHByIGJv
b2wiIGFuZCByZWJ1aWxkaW5nLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpsb2dQaGFzZVRpbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQaGFzZVRpbWVyOjpQaGFzZVRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpQaGFzZVRpbWVyOjp+UGhhc2VUaW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
cHJlcGFyZSk6CisKIDIwMTktMDctMjQgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJFR1JFU1NJT046IE92ZXJsYXk6IGhpZ2hsaWdo
dGluZyBhIDo6YmVmb3JlLzo6YWZ0ZXIgc2hvd3MgdGhlIG5vZGUgaW5mbyBvZiB0aGUgcGFyZW50
IGluc3RlYWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCShy
ZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBJbnRIYXNoPHNpemVfdD46
Omhhc2gobV9mdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUoKSk7CiAgICAgICAgIGhhc2ggXj0g
bV9mdW5jdGlvbi0+bmFtZSgpLmhhc2goKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2Z1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBoYXNo
IF49IG1fZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLnZhbHVlKCktPmhhc2goKTsK
KyAgICAgICAgICAgIGhhc2ggXj0gbV9mdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50eXBlKCkt
Pmhhc2goKTsKIAogICAgICAgICBpZiAobV9mdW5jdGlvbi0+aXNDYXN0KCkpCiAgICAgICAgICAg
ICBoYXNoIF49IG1fZnVuY3Rpb24tPnR5cGUoKS5oYXNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlz
aW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMCArMTIxLDEwIEBAIHB1YmxpYzoK
IHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRv
ckFuZGVySW5kZXhlcihBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCiB7
CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKLSAgICBhdXRvIHJldHVyblR5cGUg
PSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGxvY2F0aW9uLCBmaXJzdEFyZ3VtZW50
LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7Cisg
ICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKGxvY2F0aW9uLCBm
aXJzdEFyZ3VtZW50LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVsZW1lbnRUeXBlKCku
Y2xvbmUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
IHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
Pihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwgU3Ry
aW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVy
cygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KGxvY2F0aW9uLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51
bGxwdHIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAobG9jYXRpb24sIGludHJpbnNpY3MudWludFR5cGUoKSksIFN0cmluZygpLCBu
dWxscHRyLCBudWxscHRyKSk7CiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9y
JltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTQxLDEyICsxNDEsMTIgQEAgc3RhdGlj
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZQogewogICAgIGNvbnN0IGJvb2wgaXNP
cGVyYXRvciA9IHRydWU7CiAgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOwotICAgIGF1dG8gYXJndW1l
bnRUeXBlID0gZmlyc3RBcmd1bWVudC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB7CisgICAgYXV0byBhcmd1bWVudFR5cGUgPSBmaXJzdEFyZ3VtZW50LnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoW10oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4g
UmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5jbG9u
ZSgpOwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKLSAgICAgICAgcmV0dXJuIHNlY29uZEFyZ3VtZW50
LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1
bm5hbWVkVHlwZSkgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IFJlZjxBU1Q6OlVubmFtZWRUeXBl
PiB7CisgICAgICAgIHJldHVybiBzZWNvbmRBcmd1bWVudC52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFtdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB7CiAgICAgICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7Ci0gICAg
ICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mKSAtPiBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICAgICAgLy8g
V2UgZW5jb3VudGVyZWQgIm51bGwgPT0gbnVsbCIuCiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MiBUaGlzIGNhbiBwcm9i
YWJseSBiZSBnZW5lcmFsaXplZCwgdXNpbmcgdGhlICJwcmVmZXJyZWQgdHlwZSIgaW5mcmFzdHJ1
Y3R1cmUgdXNlZCBieSBnZW5lcmljIGxpdGVyYWxzCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIHJlCiAgICAgfSkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBhcmd1bWVudFR5cGUt
PmNsb25lKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgcGFyYW1ldGVycy5h
cHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBB
U1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KFdURk1vdmUoYXJn
dW1lbnRUeXBlKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcGFyYW1ldGVy
cy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9u
LCBBU1Q6OlF1YWxpZmllcnMoKSwgUmVmPEFTVDo6VW5uYW1lZFR5cGU+KFdURk1vdmUoYXJndW1l
bnRUeXBlKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgcmV0dXJuIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRp
b24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5
cGUpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xNjgs
MTQgKzE2OCwxNCBAQCBlbnVtIGNsYXNzIEFjY2VwdGFiaWxpdHkgewogc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihj
b25zdCBTdHJpbmcmIG5hbWUsIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBJ
bnRyaW5zaWNzJiBpbnRyaW5zaWNzKQogewogICAgIGlmIChuYW1lID09ICJvcGVyYXRvciZbXSIg
JiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgYXV0byogZmlyc3RBcmd1bWVudEFycmF5
UmVmID0gdHlwZXNbMF0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZSogeworICAgICAgICBhdXRvKiBmaXJzdEFyZ3VtZW50QXJyYXlSZWYgPSB0eXBlc1swXS5nZXQo
KS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1l
ZFR5cGUpIC0+IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CiAgICAgICAgICAgICBpZiAoaXM8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1
bm5hbWVkVHlwZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlw
ZSkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0sIFtdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSogewog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0pKTsKLSAgICAgICAgYm9vbCBz
ZWNvbmRBcmd1bWVudElzVWludCA9IHR5cGVzWzFdLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wg
eworICAgICAgICBib29sIHNlY29uZEFyZ3VtZW50SXNVaW50ID0gdHlwZXNbMV0uZ2V0KCkudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlw
ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50
cmluc2ljcy51aW50VHlwZSgpKTsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKICAgICAgICAg
ICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5S
ZXNvbHZlKGludHJpbnNpY3MudWludFR5cGUoKSk7CkBAIC0xODMsOSArMTgzLDkgQEAgc3RhdGlj
IE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQogICAgICAgICBpZiAoZmlyc3RBcmd1
bWVudEFycmF5UmVmICYmIHNlY29uZEFyZ3VtZW50SXNVaW50KQogICAgICAgICAgICAgcmV0dXJu
IHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIobG9jYXRpb24sICpmaXJzdEFyZ3VtZW50
QXJyYXlSZWYsIGludHJpbnNpY3MpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSAib3BlcmF0b3Iu
bGVuZ3RoIiAmJiB0eXBlcy5zaXplKCkgPT0gMSkgewotICAgICAgICBhdXRvKiBmaXJzdEFyZ3Vt
ZW50UmVmZXJlbmNlID0gdHlwZXNbMF0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRU
eXBlKiB7CisgICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRSZWZlcmVuY2UgPSB0eXBlc1swXS5n
ZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5u
YW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKICAgICAgICAgICAgIGlmIChpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFt
ZWRUeXBlKSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5
cGUmPih1bm5hbWVkVHlwZSkpKQotICAgICAgICAgICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLnB0cigpOwogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChsb2Nh
dGlvbiwgKmZpcnN0QXJndW1lbnRSZWZlcmVuY2UsIGludHJpbnNpY3MpOwogICAgIH0gZWxzZSBp
ZiAobmFtZSA9PSAib3BlcmF0b3I9PSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKICAgICAgICAg
YXV0byBhY2NlcHRhYmlsaXR5ID0gW10oUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkgLT4g
QWNjZXB0YWJpbGl0eSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5
cGUpIC0+IEFjY2VwdGFiaWxpdHkgeworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUu
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRU
eXBlKSAtPiBBY2NlcHRhYmlsaXR5IHsKICAgICAgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUg
PSB1bm5hbWVkVHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihkb3du
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSA/IEFjY2VwdGFiaWxpdHk6OlllcyA6
IEFjY2VwdGFiaWxpdHk6Ok5vOwogICAgICAgICAgICAgfSwgW10oUmVmUHRyPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IEFjY2VwdGFiaWxpdHkg
ewpAQCAtMzIxLDE0ICszMjEsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2Fk
KGNvbnN0IAogICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBD
aGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CiAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
cGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8mIGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlID0g
KCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5vZGUo
KTsKKyAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSBmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAo
aXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpKSB7CiAgICAgICAg
ICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0
UGFyYW1ldGVyVW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6Oklu
ZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwor
ICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gZnVuY3Rpb25EZWZp
bml0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAg
IGlmICghaXM8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSk7CkBAIC0z
NDUsMTQgKzM0NSwxNCBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3Qg
CiAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2lu
ZDo6SW5kZXggPyAzIDogMjsKICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAg
ICAgIGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpV
bm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8m
IHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVu
aWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5
cGUpIHx8IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCkgewotICAg
ICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAg
IGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFT
VDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpOwpAQCAtMzcyLDcgKzM3Miw3
IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCAKICAgICAgICAgVmVj
dG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5cGVSZWZlcmVuY2VzOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVjdGVkUGFyYW1ldGVycyAtIDE7
ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhcmd1
bWVudFR5cGVzLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBl
KCktPmNsb25lKCkpOwogICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50
VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVu
dFR5cGUpOwogICAgICAgICBhdXRvKiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
KCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcyk7CkBAIC0zOTUsNyArMzk1LDcg
QEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IAogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRv
JiB1bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAg
ICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0
PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CkBAIC00NzEsMTAgKzQ3MSwxMCBAQCBwcml2
YXRlOgogICAgIH07CiAgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZv
KEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CiAgICAg
T3B0aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1
aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKLSAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24mKTsKKyAgICBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVjdXJzZUFuZFdyYXBCYXNl
VHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOwogICAgIGJvb2wgcmVjdXJzZUFu
ZFJlcXVpcmVCb29sVHlwZShBU1Q6OkV4cHJlc3Npb24mKTsKLSAgICB2b2lkIGFzc2lnblR5cGUo
QVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIEFTVDo6VHlw
ZUFubm90YXRpb24pOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAg
IHZvaWQgYXNzaWduQ29uY3JldGVUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6
RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4sIEFTVDo6VHlwZUFu
bm90YXRpb24pOwogICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVzb2x2
aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24pOwogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwpAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMo
KQogewogICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV90eXBlTWFwKSB7Ci0gICAgICAg
IGF1dG8gc3VjY2VzcyA9IGtleVZhbHVlUGFpci52YWx1ZS0+dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7
CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGtleVZhbHVlUGFpci52YWx1ZS0+dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9v
bCB7CiAgICAgICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRUeXBlKHVubmFtZWRUeXBlLT5j
bG9uZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9LCBbJl0oUmVmUHRy
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJv
b2wgewpAQCAtNTk3LDQxICs1OTcsNDEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZ1bmN0
aW9uRGVmaW5pdAogICAgIFZpc2l0b3I6OnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29t
bWl0KFJlc29sdmluZ1R5cGUmIGxlZnQsIFJlc29sdmluZ1R5cGUmIHJpZ2h0KQorc3RhdGljIFJl
ZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiBsZWZ0
LCBSZXNvbHZpbmdUeXBlJiByaWdodCkKIHsKLSAgICByZXR1cm4gbGVmdC52aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICByZXR1cm4gcmlnaHQu
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBy
aWdodCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgcmV0
dXJuIGxlZnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiBsZWZ0KSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICByZXR1cm4gcmln
aHQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdo
dCkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgICAgIGlmIChtYXRjaGVz
KGxlZnQsIHJpZ2h0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC0+Y2xvbmUoKTsKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIH0sIFsmXShSZWZQdHI8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSwg
WyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBSZWZQdHI8QVNU
OjpVbm5hbWVkVHlwZT4gewogICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KGxlZnQs
IHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKICAgICAgICAgfSkpOwotICAgIH0sIFsmXShSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgcmV0dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgIH0sIFsmXShSZWZQdHI8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4g
eworICAgICAgICByZXR1cm4gcmlnaHQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiByaWdodCkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAg
ICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChyaWdodCwgbGVmdC0+cmVzb2x2YWJsZVR5
cGUoKSk7Ci0gICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBy
aWdodCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAg
IH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gUmVmUHRy
PEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChs
ZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CiAgICAgICAg
IH0pKTsKICAgICB9KSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQorc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRU
eXBlPiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc29s
dmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAg
IHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgcmVzb2x2aW5nVHlwZSkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHsKICAgICAgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHJlc29sdmluZ1R5cGUpKQogICAg
ICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLmNsb25lKCk7Ci0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJl
c29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgcmVzb2x2aW5nVHlwZSkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsK
ICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHVubmFtZWRUeXBlLCByZXNvbHZpbmdUeXBl
LT5yZXNvbHZhYmxlVHlwZSgpKTsKICAgICB9KSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdU
eXBlKQorc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBjb21taXQoUmVzb2x2aW5nVHlw
ZSYgcmVzb2x2aW5nVHlwZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBl
KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICByZXR1cm4g
cmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mIHVubmFtZWRUeXBlKSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAg
ICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IFJlZlB0cjxBU1Q6
OlVubmFtZWRUeXBlPiB7CiAgICAgICAgIGlmICghcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJl
c29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBj
b21taXQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkpOwogICAgICAg
ICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2
ZWRUeXBlKCkuY2xvbmUoKTsKQEAgLTc0NywxNCArNzQ3LDE0IEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmEKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWdu
VHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0g
QVNUOjpSaWdodFZhbHVlKCkpCit2b2lkIENoZWNrZXI6OmFzc2lnbkNvbmNyZXRlVHlwZShBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB1bm5hbWVkVHlw
ZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgp
KQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3Rk
OjptYWtlX3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihXVEZNb3ZlKHVubmFtZWRUeXBlKSkpOwogICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgZXhw
cmVzc2lvbi5zZXRUeXBlQW5ub3RhdGlvbihXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAK
LXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJl
ZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwg
QVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQor
dm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVm
UHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNU
OjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewog
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtl
X3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihXVEZNb3ZlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSkp
OwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBA
IC03NjMsNyArNzYzLDcgQEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lv
bgogCiB2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
biwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBl
QW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewotICAgIHJlc29sdmluZ1R5cGUudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1
bHQpIHsKKyAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90
eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtlX3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihy
ZXN1bHQtPmNsb25lKCkpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmVzdWx0KSB7CkBAIC03ODksNyArNzg5LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OkFzc2lnbm1lbnRFeHByZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWdu
VHlwZShhc3NpZ25tZW50RXhwcmVzc2lvbiwgV1RGTW92ZSgqcmVzdWx0VHlwZSkpOworICAgIGFz
c2lnbkNvbmNyZXRlVHlwZShhc3NpZ25tZW50RXhwcmVzc2lvbiwgKnJlc3VsdFR5cGUpOwogfQog
CiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKQEAgLTgwNCw4ICs4MDQsOCBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlCiAgICAgaWYgKCFuZXdWYWx1ZUluZm8pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4+IG1hdGNoZWRUeXBlID0gbWF0Y2hBbmRDb21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5n
VHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkKLSAgICAgICAgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpLnNldFR5cGUoV1RGTW92ZShtYXRjaGVkVHlwZS52YWx1
ZSgpKSk7CisgICAgaWYgKFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaGVkVHlwZSA9IG1h
dGNoQW5kQ29tbWl0KGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSkpCisgICAgICAgIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFs
dWUoKS5zZXRUeXBlKCptYXRjaGVkVHlwZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNldEVycm9y
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTgyMCw4ICs4MjAsOCBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlCiAKIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRV
bm5hbWVkVHlwZShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQogewotICAgIHJldHVybiBy
ZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgIHJldHVybiAm
dHlwZTsKKyAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtd
KFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAg
ICAgICByZXR1cm4gdHlwZS5wdHIoKTsKICAgICB9LCBbXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CiAgICAgICAgIC8vIEZJWE1F
OiBJZiB0aGUgdHlwZSBpc24ndCBjb21taXR0ZWQsIHNob3VsZCB3ZSBqdXN0IGNvbW1pdCgpIGl0
IG5vdz8KICAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZl
ZFR5cGUoKTsKQEAgLTg1Miw3ICs4NTIsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RGVy
ZWZlcmVuY2VFeHByCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKGRl
cmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmVsZW1lbnRUeXBlKCkuY2xvbmUoKSwg
QVNUOjpMZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkgfSk7CisgICAgYXNz
aWduQ29uY3JldGVUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmVsZW1l
bnRUeXBlKCkuY2xvbmUoKSwgQVNUOjpMZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1Nw
YWNlKCkgfSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJl
c3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKQEAgLTg3Myw3ICs4NzMsNyBAQCB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhc3NpZ25UeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxB
U1Q6OlBvaW50ZXJUeXBlPihtYWtlUG9pbnRlckV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICps
ZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduQ29u
Y3JldGVUeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRl
KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2Us
IGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24pCkBAIC04OTQsNyArODk0LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJh
eVJlZmVyZQogICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7
CiAgICAgICAgICAgICBhdXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIFNhdmUgdGhlIGZhY3QgdGhhdCB3ZSdyZSBu
b3QgdGFyZ2V0dGluZyB0aGUgaXRlbTsgd2UncmUgdGFyZ2V0dGluZyB0aGUgaXRlbSdzIGlubmVy
IGVsZW1lbnQuCi0gICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFj
ZSgpLCBwb2ludGVyVHlwZS5lbGVtZW50VHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgIGFz
c2lnbkNvbmNyZXRlVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uY29kZUxv
Y2F0aW9uKCksIHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpLCBwb2ludGVyVHlwZS5lbGVtZW50
VHlwZSgpLmNsb25lKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05
MDcsNyArOTA3LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZQog
ICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkgewogICAgICAgICAg
ICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4MTYzIFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICAgICAgICAg
IGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkp
OworICAgICAgICAgICAgYXNzaWduQ29uY3JldGVUeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50
eXBlKCkuY2xvbmUoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpA
QCAtOTE4LDE1ICs5MTgsMTUgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJl
ZmVyZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAqbGVmdEFkZHJl
c3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnbkNvbmNyZXRlVHlw
ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6
Y3JlYXRlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICpsZWZ0
QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKEFTVDo6VW5uYW1lZFR5cGUmIGJhc2VUeXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNz
U3BhY2UpCitzdGF0aWMgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IGFyZ3VtZW50VHlwZUZvckFu
ZE92ZXJsb2FkKEFTVDo6VW5uYW1lZFR5cGUmIGJhc2VUeXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UpCiB7CiAgICAgYXV0byYgdW5pZnlOb2RlID0gYmFzZVR5cGUudW5pZnlOb2Rl
KCk7CiAgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CiAgICAgICAgIGF1
dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwotICAg
ICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KG5hbWVkVHlwZS5j
b2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobmFt
ZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBuYW1lZFR5cGUpKSB9OworICAgICAgICByZXR1cm4geyBB
U1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUobmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNz
U3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChuYW1lZFR5cGUuY29kZUxvY2F0aW9uKCks
IG5hbWVkVHlwZSkpIH07CiAgICAgfQogCiAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAtOTM1LDEyICs5MzUsMTIgQEAgc3Rh
dGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAgICAgICByZXR1cm4gdW5u
YW1lZFR5cGUuY2xvbmUoKTsKIAogICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKQotICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBkb3duY2FzdDxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgpKSB9OworICAgICAgICBy
ZXR1cm4geyBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKHVubmFtZWRUeXBlLmNvZGVM
b2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVk
VHlwZSkudHlwZSgpLmNsb25lKCkpIH07CiAKICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgdW5uYW1lZFR5cGUu
Y2xvbmUoKSkgfTsKKyAgICByZXR1cm4geyBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUodW5uYW1l
ZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgdW5uYW1lZFR5cGUuY2xvbmUoKSkg
fTsKIH0KIAogdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKiBhZGRp
dGlvbmFsQXJndW1lbnRUeXBlKQpAQCAtOTcyLDcgKzk3Miw3IEBAIHZvaWQgQ2hlY2tlcjo6Zmlu
aXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNl
SW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOwogICAgIGlmIChsZWZ0QWRk
cmVzc1NwYWNlKSB7CiAgICAgICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2Fk
ID0gV0hMU0w6OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpiYXNlVW5uYW1lZFR5cGUsICps
ZWZ0QWRkcmVzc1NwYWNlKSkgewotICAgICAgICAgICAgUmVzb2x2aW5nVHlwZSBhcmd1bWVudFR5
cGUgPSB7IFdURk1vdmUoKmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKSB9OworICAgICAgICAg
ICAgUmVzb2x2aW5nVHlwZSBhcmd1bWVudFR5cGUgPSB7IFJlZjxBU1Q6OlVubmFtZWRUeXBlPigq
YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQpIH07CiAgICAgICAgICAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYW5kZXJBcmd1bWVudFR5cGVzIHsgYXJn
dW1lbnRUeXBlIH07CiAgICAgICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3VtZW50VHlwZSkKICAg
ICAgICAgICAgICAgICBhbmRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1l
bnRUeXBlKTsKQEAgLTk4Nyw3ICs5ODcsNyBAQCB2b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0aW5n
KEFTVDo6UHJvcGVyCiAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRlckZ1
bmN0aW9uID0gbnVsbHB0cjsKICAgICBBU1Q6OlVubmFtZWRUeXBlKiB0aHJlYWRBbmRlclJldHVy
blR5cGUgPSBudWxscHRyOwogICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2Fk
ID0gV0hMU0w6OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpiYXNlVW5uYW1lZFR5cGUsIEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQpKSB7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgYXJndW1l
bnRUeXBlID0geyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFz
ZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKSB9OworICAgICAgICBSZXNvbHZpbmdUeXBlIGFy
Z3VtZW50VHlwZSA9IHsgUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6UG9pbnRlclR5cGU6OmNy
ZWF0ZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQsIGJhc2VVbm5hbWVkVHlwZS0+Y2xvbmUoKSkpIH07CiAgICAgICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFy
Z3VtZW50VHlwZXMgeyBhcmd1bWVudFR5cGUgfTsKICAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmd1
bWVudFR5cGUpCiAgICAgICAgICAgICB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCph
ZGRpdGlvbmFsQXJndW1lbnRUeXBlKTsKQEAgLTEwNjMsNyArMTA2Myw3IEBAIHZvaWQgQ2hlY2tl
cjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICAgICAgICAgIHR5cGVBbm5vdGF0aW9u
ID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoIWJhc2VJbmZvLT50
eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSAmJiAoc2V0dGVyRnVuY3Rpb24gfHwgdGhyZWFk
QW5kZXJGdW5jdGlvbikpCiAgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExl
ZnRWYWx1ZSgpOwotICAgIGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBmaWVs
ZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKKyAgICBhc3NpZ25Db25j
cmV0ZVR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdU
Rk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCkBAIC0xMDg0LDcgKzEwODQsNyBAQCB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuCiAgICAgQVNTRVJUKHZhcmlhYmxlUmVm
ZXJlbmNlLnZhcmlhYmxlKCkpOwogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJs
ZSgpLT50eXBlKCkpOwogICAgIAotICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZh
cmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgQVNUOjpMZWZ0VmFs
dWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworICAgIGFzc2lnbkNvbmNyZXRlVHlw
ZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgp
LT5jbG9uZSgpLCBBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkK
QEAgLTExMzgsMTkgKzExMzgsMTkgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok51bGxMaXRl
cmFsJiBudQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xl
YW5MaXRlcmFsKQogewotICAgIGFzc2lnblR5cGUoYm9vbGVhbkxpdGVyYWwsIEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChib29sZWFuTGl0ZXJhbC5jb2RlTG9jYXRpb24oKSwgbV9pbnRyaW5zaWNz
LmJvb2xUeXBlKCkpKTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUoYm9vbGVhbkxpdGVyYWwsIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChib29sZWFuTGl0ZXJhbC5jb2RlTG9jYXRpb24oKSwgbV9p
bnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKQogewogICAg
IEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkp
OwogICAgIGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICplbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCk7Ci0gICAgYXNzaWduVHlwZShlbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChlbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwuY29kZUxvY2F0aW9uKCksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgIGFz
c2lnbkNvbmNyZXRlVHlwZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwsIEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuY29kZUxvY2F0aW9uKCksIGVudW1l
cmF0aW9uRGVmaW5pdGlvbikpOwogfQogCiBib29sIENoZWNrZXI6OmlzQm9vbFR5cGUoUmVzb2x2
aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQp
IC0+IGJvb2wgeworICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7CiAgICAgICAgIHJl
dHVybiBtYXRjaGVzKGxlZnQsIG1faW50cmluc2ljcy5ib29sVHlwZSgpKTsKICAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gYm9vbCB7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJpbnNpY3MuYm9v
bFR5cGUoKSwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSkpOwpAQCAtMTE3Myw3ICsxMTczLDcgQEAg
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZQogewogICAgIGlmICghcmVj
dXJzZUFuZFJlcXVpcmVCb29sVHlwZShsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpKQog
ICAgICAgICByZXR1cm47Ci0gICAgYXNzaWduVHlwZShsb2dpY2FsTm90RXhwcmVzc2lvbiwgQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvZ2ljYWxOb3RFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
LCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShsb2dp
Y2FsTm90RXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvZ2ljYWxOb3RFeHBy
ZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOwogfQogCiB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNz
aW9uKQpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkxvZ2lj
YWxFeHByZXNzaQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJv
b2xUeXBlKGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpKQogICAgICAgICByZXR1cm47Ci0gICAg
YXNzaWduVHlwZShsb2dpY2FsRXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxv
Z2ljYWxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkp
OworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShsb2dpY2FsRXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKGxvZ2ljYWxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBtX2ludHJpbnNp
Y3MuYm9vbFR5cGUoKSkpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1l
bnQmIGlmU3RhdGVtZW50KQpAQCAtMTQwNCw3ICsxNDA0LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OlRlcm5hcnlFeHByZXNzaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNz
aWduVHlwZSh0ZXJuYXJ5RXhwcmVzc2lvbiwgV1RGTW92ZSgqcmVzdWx0VHlwZSkpOworICAgIGFz
c2lnbkNvbmNyZXRlVHlwZSh0ZXJuYXJ5RXhwcmVzc2lvbiwgKnJlc3VsdFR5cGUpOwogfQogCiB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQpA
QCAtMTQ1MCw3ICsxNDUwLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJgogCiAgICAgY2FsbEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKmZ1bmN0aW9uKTsKIAotICAg
IGFzc2lnblR5cGUoY2FsbEV4cHJlc3Npb24sIGZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7Cisg
ICAgYXNzaWduQ29uY3JldGVUeXBlKGNhbGxFeHByZXNzaW9uLCBmdW5jdGlvbi0+dHlwZSgpLmNs
b25lKCkpOwogfQogCiBib29sIGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBl
cy5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwx
MSBAQCBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uCiAgICAgcmV0dXJu
IG1hdGNoZXModW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKIH0K
IAotc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRD
b21taXQoQVNUOjpUeXBlJiB1bmlmeU5vZGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFi
bGVUeXBlKQorc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChB
U1Q6OlR5cGUmIHVuaWZ5Tm9kZSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUp
CiB7CiAgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKTsKICAg
ICBpZiAoIXJlc29sdmFibGVUeXBlLmNhblJlc29sdmUodW5pZnlOb2RlKSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGlzPEFT
VDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CiAgICAgICAgIGF1dG8mIG5hbWVkVW5pZnlOb2Rl
ID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgIGF1dG8gcmVz
dWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKG5hbWVkVW5pZnlOb2RlLmNvZGVMb2NhdGlv
bigpLCBuYW1lZFVuaWZ5Tm9kZSk7CkBAIC05OCwxNyArOTgsMTcgQEAgc3RhdGljIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBl
KQorUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKIHsK
ICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIHJlc29s
dmFibGVUeXBlKTsKIH0KIAotT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBt
YXRjaEFuZENvbW1pdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVU
eXBlJiByZXNvbHZhYmxlVHlwZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENv
bW1pdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNv
bHZhYmxlVHlwZSkKIHsKICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBlLnVuaWZ5
Tm9kZSgpLCByZXNvbHZhYmxlVHlwZSk7CiB9CiAKLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJs
ZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIpCitSZWZQdHI8QVNU
OjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2
YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIpCiB7CiAgICAg
QVNTRVJUKCFyZXNvbHZhYmxlVHlwZTEubWF5YmVSZXNvbHZlZFR5cGUoKSk7CiAgICAgQVNTRVJU
KCFyZXNvbHZhYmxlVHlwZTIubWF5YmVSZXNvbHZlZFR5cGUoKSk7CkBAIC0xMjksMTIgKzEyOSwx
MiBAQCBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hCiAgICAgfQogICAg
IGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6
Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgewogICAgICAgICAvLyBGSVhNRTog
VHJ5aW5nIHRvIG1hdGNoIG51bGxwdHIgYW5kIG51bGxwdHIgZmFpbHMuCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBudWxscHRyOwogfQogCi1PcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNv
bHZhYmxlVHlwZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBjb21taXQoQVNUOjpSZXNvbHZh
YmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCiB7CiAgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5t
YXliZVJlc29sdmVkVHlwZSgpKTsKICAgICBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihy
ZXNvbHZhYmxlVHlwZSkpIHsKQEAgLTE1NCw5ICsxNTQsOSBAQCBPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4+IGNvCiAgICAgfQogICAgIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0
Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWlscy4KLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGJvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1
bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0
eXBlQXJndW1lbnRzKQpAQCAtMTc5LDggKzE3OSw4IEBAIGJvb2wgaW5mZXJUeXBlc0ZvclR5cGVB
cmd1bWVudHMoQVNUOjpOYW0KICAgICAgICAgYXV0byBhc3NpZ24gPSBbJl0oQVNUOjpUeXBlQXJn
dW1lbnQmIHR5cGVBcmd1bWVudCwgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qJiBleHByZXNzaW9u
LCBBU1Q6OlR5cGVSZWZlcmVuY2UqJiB0eXBlUmVmZXJlbmNlKSB7CiAgICAgICAgICAgICBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25z
dGFudEV4cHJlc3Npb24pIHsKICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gJmNvbnN0YW50
RXhwcmVzc2lvbjsKLSAgICAgICAgICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJl
bmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgewotICAgICAgICAgICAgICAgIHR5cGVSZWZlcmVuY2Ug
PSAmdGhlVHlwZVJlZmVyZW5jZTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8QVNUOjpUeXBlUmVm
ZXJlbmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIHR5cGVSZWZlcmVu
Y2UgPSB0aGVUeXBlUmVmZXJlbmNlLnB0cigpOwogICAgICAgICAgICAgfSksIHR5cGVBcmd1bWVu
dCk7CiAgICAgICAgIH07CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
aW5mZXJUeXBlc0ZvckNhbGxJbXBsCiAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVy
cygpLnNpemUoKSAhPSBhcmd1bWVudFR5cGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBzdWNjZXNzID0gYXJndW1lbnRUeXBlc1tp
XS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gYXJn
dW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKICAgICAgICAgICAgIHJldHVybiBt
YXRjaGVzKCpwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLCB1bm5hbWVk
VHlwZSk7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gcmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShwb3NzaWJs
ZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVy
VHlwZXMuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0Nywx
MCBAQCBjbGFzcyBVbm5hbWVkVHlwZTsKIGJvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJiwgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYpOwogYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6
TmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUmKTsKIGJvb2wgbWF0Y2hlcyhjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUmKTsKLU9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVkVHlwZSYs
IEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBl
Jik7Ci1PcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0
KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7Ci1PcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJik7
CitSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVkVHlw
ZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRj
aEFuZENvbW1pdChBU1Q6Ok5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK1JlZlB0
cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiwg
QVNUOjpSZXNvbHZhYmxlVHlwZSYpOworUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IGNvbW1pdChB
U1Q6OlJlc29sdmFibGVUeXBlJik7CiBib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFT
VDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOwogYm9vbCBp
bmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rp
b24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1l
bnRUeXBlcywgY29uc3QgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKIGJvb2wgaW5m
ZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1bmN0aW9u
LCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50
VHlwZXMsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRy
aW5zaWNzLmNwcAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDkg
KzI4Nyw5IEBAIGJvb2wgSW50cmluc2ljczo6YWRkVmVjdG9yKEFTVDo6TmF0aXZlVHkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBl
QXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pKTsKICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkp
OwotICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+
KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlID0gc3RhdGlj
X2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8UmVmPEFTVDo6VHlwZVJlZmVyZW5j
ZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKICAgICBhdXRv
JiBsZW5ndGhFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pOwogICAgIEFTU0VSVCghaW5u
ZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpOwogICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiogYXJyYXk7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCBib29sIEludHJpbnNpY3M6OmFk
ZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VS
VChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKLSAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJl
bmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CiAgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5
cGVBcmd1bWVudHMoKVsyXSkpOwotICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFT
VDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYg
aW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8UmVm
PEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KClbMF0pKTsKICAgICBhdXRvJiByb3dFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFu
dEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pOwog
ICAgIGF1dG8mIGNvbHVtbkV4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSk7CiAgICAgQVNT
RVJUKCFpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSk7CkBAIC00MTEsOCArNDExLDgg
QEAgdm9pZCBJbnRyaW5zaWNzOjphZGREZXB0aFRleHR1cmUoQVNUOjpOYQogdm9pZCBJbnRyaW5z
aWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCiB7CiAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKCkuc2l6ZSgpID09IDEpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVu
aXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFy
Z3VtZW50cygpWzBdKSk7Ci0gICAgYXV0byYgaW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0
YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFJlZjxBU1Q6OlR5cGVSZWZl
cmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CiAgICAg
QVNTRVJUKCFpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSk7CiAgICAgaWYgKGFkZEZ1
bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5uZXJUeXBlKSkgewogICAgICAgICBt
X3RleHR1cmVTZXQuYWRkKCZuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsNyArNDE2LDcgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlVHlwZUFyZ3VtZW50KCkgLT4gRXhwZQogICAgIH0KICAgICBDT05TVU1FX1RZUEUo
cmVzdWx0LCBJZGVudGlmaWVyKTsKICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqcmVz
dWx0KTsKLSAgICByZXR1cm4gQVNUOjpUeXBlQXJndW1lbnQobWFrZVVuaXF1ZVJlZjxBU1Q6OlR5
cGVSZWZlcmVuY2U+KGxvY2F0aW9uLCByZXN1bHQtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJp
bmcoKSwgQVNUOjpUeXBlQXJndW1lbnRzKCkpKTsKKyAgICByZXR1cm4gQVNUOjpUeXBlQXJndW1l
bnQoQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUobG9jYXRpb24sIHJlc3VsdC0+c3RyaW5nVmll
dyhtX2xleGVyKS50b1N0cmluZygpLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkpOwogfQogCiBhdXRv
IFBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnRzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpUeXBlQXJndW1l
bnRzLCBFcnJvcj4KQEAgLTUwNSw3ICs1MDUsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3Vm
Zml4Tm9uQWJicmV2aWF0CiAgICAgcmV0dXJuIHt7IHsgKnRva2VuIH0sICp0b2tlbiwgeyBhZGRy
ZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0IH19OwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VUeXBl
KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4KK2F1dG8g
UGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVy
cm9yPgogewogICAgIGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSB0cnlUeXBlczwKICAgICAgICAg
VG9rZW46OlR5cGU6OkNvbnN0YW50LApAQCAtNTMzLDIwICs1MzMsMjAgQEAgYXV0byBQYXJzZXI6
OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPFVuaQogICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0g
QVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCA9IFsmXShj
b25zdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB7CisgICAgICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRl
ZCA9IFsmXShjb25zdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCwgUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IFJlZjxBU1Q6OlVubmFtZWRU
eXBlPiB7CiAgICAgICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqYWRkcmVzc1Nw
YWNlVG9rZW4sIHR5cGVTdWZmaXhBYmJyZXZpYXRlZC5sb2NhdGlvbik7CiAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgICAgICBj
YXNlIFRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlx
dWVSZWY8QVNUOjpQb2ludGVyVHlwZT4obG9jYXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShw
cmV2aW91cykpIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpQb2ludGVyVHlwZTo6
Y3JlYXRlKGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMpKSB9OwogICAg
ICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4obG9j
YXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGU6OmNyZWF0ZShsb2NhdGlvbiwgYWRk
cmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50eXBlID09
IFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5VHlwZT4obG9jYXRpb24sIFdURk1vdmUocHJldmlv
dXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9OworICAgICAgICAgICAg
ICAgIHJldHVybiB7IEFTVDo6QXJyYXlUeXBlOjpjcmVhdGUobG9jYXRpb24sIFdURk1vdmUocHJl
dmlvdXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9OwogICAgICAgICAg
ICAgfQogICAgICAgICB9OwogICAgICAgICBQQVJTRShmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCwgVHlwZVN1ZmZpeEFiYnJldmlhdGVkKTsKLSAgICAgICAgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+IHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3Zl
KCphZGRyZXNzU3BhY2VUb2tlbiksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmco
KSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgICAgICBSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4gcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUoV1RGTW92ZSgqYWRkcmVzc1Nw
YWNlVG9rZW4pLCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUo
KnR5cGVBcmd1bWVudHMpKTsKICAgICAgICAgYXV0byBuZXh0ID0gY29uc3RydWN0VHlwZUZyb21T
dWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQsIFdURk1vdmUocmVz
dWx0KSk7CiAgICAgICAgIHJlc3VsdCA9IFdURk1vdmUobmV4dCk7CiAgICAgICAgIHdoaWxlICh0
cnVlKSB7CkBAIC01NjQsMTkgKzU2NCwxOSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4g
RXhwZWN0ZWQ8VW5pCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiAgICAgfQogCi0g
ICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNvbnN0
IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+IHsKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0
ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQsIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBSZWY8QVNUOjpV
bm5hbWVkVHlwZT4gewogICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqbmFtZSwg
dHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmxvY2F0aW9uKTsKICAgICAgICAgc3dpdGNoICh0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIFRva2VuOjpU
eXBlOjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihsb2NhdGlvbiwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2Us
IFdURk1vdmUocHJldmlvdXMpKSB9OworICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpQb2ludGVy
VHlwZTo6Y3JlYXRlKGxvY2F0aW9uLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NT
cGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlNx
dWFyZUJyYWNrZXRQYWlyOgotICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4obG9jYXRpb24sICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQu
YWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7
IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUobG9jYXRpb24sICp0eXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVCh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9r
ZW4udHlwZSA9PSBUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQpOwotICAgICAgICAgICAg
cmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5VHlwZT4obG9jYXRpb24sIFdURk1vdmUo
cHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9OworICAg
ICAgICAgICAgcmV0dXJuIHsgQVNUOjpBcnJheVR5cGU6OmNyZWF0ZShsb2NhdGlvbiwgV1RGTW92
ZShwcmV2aW91cyksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubnVtRWxlbWVudHMpIH07CiAg
ICAgICAgIH0KICAgICB9OwotICAgIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQg
PSBtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4oKm5hbWUsIG5hbWUtPnN0cmluZ1Zp
ZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIFJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OmNyZWF0ZSgq
bmFtZSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBl
QXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgUEVFSyhuZXh0VG9rZW4p
OwogICAgICAgICBpZiAobmV4dFRva2VuLT50eXBlICE9IFRva2VuOjpUeXBlOjpTdGFyCkBAIC04
MTQsMTIgKzgxNCwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24o
CiAgICAgQ09OU1VNRV9UWVBFKG9yaWdpbiwgRW51bSk7CiAgICAgQ09OU1VNRV9UWVBFKG5hbWUs
IElkZW50aWZpZXIpOwogCi0gICAgYXV0byB0eXBlID0gKFsmXSgpIC0+IEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKKyAgICBhdXRvIHR5cGUgPSAoWyZdKCkg
LT4gRXhwZWN0ZWQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gewogICAgICAgICBpZiAo
dHJ5VHlwZShUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgICAgICBQQVJTRShwYXJzZWRU
eXBlLCBUeXBlKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpwYXJzZWRUeXBlKTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5j
ZT4oKm9yaWdpbiwgImludCJfc3RyLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkgfTsKKyAgICAgICAg
cmV0dXJuIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUoKm9yaWdpbiwgImludCJfc3RyLCBB
U1Q6OlR5cGVBcmd1bWVudHMoKSkgfTsKICAgICB9KSgpOwogICAgIGlmICghdHlwZSkKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CkBAIC0xMjI4LDcgKzEy
MjgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VEb1doaWxlTG9vcCgpIC0+IEV4cGVjCiAgICAgcmV0
dXJuIEFTVDo6RG9XaGlsZUxvb3AoeyAqb3JpZ2luLCAqc2VtaWNvbG9ufSwgV1RGTW92ZSgqYm9k
eSksIFdURk1vdmUoKmNvbmRpdGlvbmFsKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVZhcmlh
YmxlRGVjbGFyYXRpb24oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkgLT4gRXhw
ZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4KK2F1dG8gUGFyc2VyOjpwYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb24oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkgLT4gRXhw
ZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4KIHsKICAgICBQRUVLKG9yaWdp
bik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFy
c2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQYXJzZXIuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDkgKzE3
MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBudW1FbGVtZW50czsK
ICAgICB9OwogICAgIEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgRXJyb3I+IHBh
cnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCk7Ci0gICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAgRXhw
ZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNz
U3BhY2VUeXBlKCk7Ci0gICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBF
cnJvcj4gcGFyc2VUeXBlKCk7CisgICAgRXhwZWN0ZWQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBF
cnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7CisgICAgRXhwZWN0ZWQ8UmVmPEFTVDo6VW5u
YW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7CisgICAgRXhwZWN0
ZWQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VUeXBlKCk7CiAgICAgRXhwZWN0
ZWQ8QVNUOjpUeXBlRGVmaW5pdGlvbiwgRXJyb3I+IHBhcnNlVHlwZURlZmluaXRpb24oKTsKICAg
ICBFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYywgRXJyb3I+IHBhcnNlQnVpbHRJblNlbWFu
dGljKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpSZXNvdXJjZVNlbWFudGljLCBFcnJvcj4gcGFyc2VS
ZXNvdXJjZVNlbWFudGljKCk7CkBAIC0yMDUsNyArMjA1LDcgQEAgcHJpdmF0ZToKICAgICBFeHBl
Y3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiBwYXJzZUZvckxvb3AoKTsKICAgICBFeHBlY3RlZDxB
U1Q6OldoaWxlTG9vcCwgRXJyb3I+IHBhcnNlV2hpbGVMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNU
OjpEb1doaWxlTG9vcCwgRXJyb3I+IHBhcnNlRG9XaGlsZUxvb3AoKTsKLSAgICBFeHBlY3RlZDxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mJik7CiAgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCwgRXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1
Miw3IEBACiAjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCiAjaW5jbHVk
ZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3Rvbmlj
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC02Myw2ICs2NCw3IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQWZ0ZXJQYXJz
aW4KIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRFbmQgPSBmYWxzZTsKIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzID0gZmFsc2U7CiBzdGF0aWMgY29u
c3RleHByIGJvb2wgZHVtcFBhc3NGYWlsdXJlID0gZHVtcEFTVEJlZm9yZUVhY2hQYXNzIHx8IGR1
bXBBU1RBZnRlclBhcnNpbmcgfHwgZHVtcEFTVEF0RW5kIHx8IGFsd2F5c0R1bXBQYXNzRmFpbHVy
ZXM7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBoYXNlVGltZXMgPSB0cnVlOwogCiBzdGF0
aWMgY29uc3RleHByIGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5ID0gZmFsc2U7CiAKQEAg
LTkyLDkgKzk0LDQ3IEBAIHN0YXRpYyBib29sIGR1bXBBU1RBdEVuZElmTmVlZGVkKFByb2dyYW0K
ICAgICByZXR1cm4gZHVtcEFTVElmTmVlZGVkKGR1bXBBU1RBdEVuZCwgcHJvZ3JhbSwgIkFTVCBh
dCBlbmQiKTsKIH0KIAordXNpbmcgUGhhc2VUaW1lcyA9IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5n
LCBTZWNvbmRzPj47CisKK3N0YXRpYyB2b2lkIGxvZ1BoYXNlVGltZXMoUGhhc2VUaW1lcyYgcGhh
c2VUaW1lcykKK3sKKyAgICBpZiAoIWR1bXBQaGFzZVRpbWVzKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogcGhhc2VUaW1lcykKKyAgICAgICAgZGF0YUxvZ0xuKGVu
dHJ5LmZpcnN0LCAiOiAiLCBlbnRyeS5zZWNvbmQubWlsbGlzZWNvbmRzKCksICIgbXMiKTsKK30K
KworY2xhc3MgUGhhc2VUaW1lciB7CitwdWJsaWM6CisgICAgUGhhc2VUaW1lcihjb25zdCBjaGFy
KiBwaGFzZU5hbWUsIFBoYXNlVGltZXMmIHBoYXNlVGltZXMpCisgICAgICAgIDogbV9waGFzZVRp
bWVzKHBoYXNlVGltZXMpCisgICAgeworICAgICAgICBpZiAoZHVtcFBoYXNlVGltZXMpIHsKKyAg
ICAgICAgICAgIG1fcGhhc2VOYW1lID0gcGhhc2VOYW1lOworICAgICAgICAgICAgbV9zdGFydCA9
IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICB9CisgICAgfQorCisgICAgflBoYXNlVGlt
ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKGR1bXBQaGFzZVRpbWVzKSB7CisgICAgICAgICAgICBh
dXRvIHRvdGFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9zdGFydDsKKyAgICAgICAg
ICAgIG1fcGhhc2VUaW1lcy5hcHBlbmQoeyBtX3BoYXNlTmFtZSwgdG90YWxUaW1lIH0pOworICAg
ICAgICB9CisgICAgfQorCisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fcGhhc2VOYW1lOworICAg
IFBoYXNlVGltZXMmIG1fcGhhc2VUaW1lczsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnQ7Cit9
OworCiAjZGVmaW5lIENIRUNLX1BBU1MocGFzcywgLi4uKSBcCiAgICAgZG8geyBcCiAgICAgICAg
IGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFtLCAiQVNUIGJlZm9yZSAiICMg
cGFzcyk7IFwKKyAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCNwYXNzLCBwaGFzZVRpbWVz
KTsgXAogICAgICAgICBpZiAoIXBhc3MoX19WQV9BUkdTX18pKSB7IFwKICAgICAgICAgICAgIGlm
IChkdW1wUGFzc0ZhaWx1cmUpIFwKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCBw
YXNzOiAiICMgcGFzcyk7IFwKQEAgLTEwNCwyMCArMTQ0LDI5IEBAIHN0YXRpYyBib29sIGR1bXBB
U1RBdEVuZElmTmVlZGVkKFByb2dyYW0KIAogI2RlZmluZSBSVU5fUEFTUyhwYXNzLCAuLi4pIFwK
ICAgICBkbyB7IFwKKyAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCNwYXNzLCBwaGFzZVRp
bWVzKTsgXAogICAgICAgICBkdW1wQVNUQmV0d2VlbkVhY2hQYXNzSWZOZWVkZWQocHJvZ3JhbSwg
IkFTVCBiZWZvcmUgIiAjIHBhc3MpOyBcCiAgICAgICAgIHBhc3MoX19WQV9BUkdTX18pOyBcCiAg
ICAgfSB3aGlsZSAoMCkKIAotc3RhdGljIE9wdGlvbmFsPFByb2dyYW0+IHByZXBhcmVTaGFyZWQo
U3RyaW5nJiB3aGxzbFNvdXJjZSkKK3N0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hh
cmVkKFBoYXNlVGltZXMmIHBoYXNlVGltZXMsIFN0cmluZyYgd2hsc2xTb3VyY2UpCiB7CiAgICAg
UHJvZ3JhbSBwcm9ncmFtOwogICAgIFBhcnNlciBwYXJzZXI7Ci0gICAgaWYgKGF1dG8gcGFyc2VG
YWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzZXI6Ok1vZGU6
OlVzZXIpKSB7Ci0gICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpCi0gICAgICAgICAgICBkYXRh
TG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgKnBhcnNlRmFpbHVyZSk7Ci0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICB7CisgICAgICAgIFBoYXNlVGltZXIg
cGhhc2VUaW1lcigicGFyc2UiLCBwaGFzZVRpbWVzKTsKKyAgICAgICAgaWYgKGF1dG8gcGFyc2VG
YWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzZXI6Ok1vZGU6
OlVzZXIpKSB7CisgICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCAqcGFyc2VGYWls
dXJlKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB7CisgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigiaW5jbHVkZVN0YW5kYXJk
TGlicmFyeSIsIHBoYXNlVGltZXMpOworICAgICAgICBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KHBy
b2dyYW0sIHBhcnNlciwgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5KTsKICAgICB9Ci0gICAgaW5j
bHVkZVN0YW5kYXJkTGlicmFyeShwcm9ncmFtLCBwYXJzZXIsIHBhcnNlRnVsbFN0YW5kYXJkTGli
cmFyeSk7CiAKICAgICBpZiAoIWR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFt
LCAiQVNUIGFmdGVyIHBhcnNpbmciKSkKICAgICAgICAgZHVtcEFTVEFmdGVyUGFyc2luZ0lmTmVl
ZGVkKHByb2dyYW0pOwpAQCAtMTUxLDE0ICsyMDAsMzAgQEAgc3RhdGljIE9wdGlvbmFsPFByb2dy
YW0+IHByZXBhcmVTaGFyZWQoUwogCiBPcHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVw
YXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKQogewotICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQo
d2hsc2xTb3VyY2UpOwotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICBhdXRvIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3Jh
bSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLSAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3Mp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgUGhhc2VUaW1lcyBwaGFzZVRpbWVz
OworICAgIE1ldGFsOjpSZW5kZXJNZXRhbENvZGUgZ2VuZXJhdGVkQ29kZTsKIAotICAgIGF1dG8g
Z2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92
ZSgqbWF0Y2hlZFNlbWFudGljcyksIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQpOwor
ICAgIHsKKyAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJwcmVwYXJlIHRvdGFsIiwgcGhh
c2VUaW1lcyk7CisgICAgICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1l
cywgd2hsc2xTb3VyY2UpOworICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIE9wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1hbnRp
Y3M+IG1hdGNoZWRTZW1hbnRpY3M7CisgICAgICAgIHsKKyAgICAgICAgICAgIFBoYXNlVGltZXIg
cGhhc2VUaW1lcigibWF0Y2hTZW1hbnRpY3MiLCBwaGFzZVRpbWVzKTsKKyAgICAgICAgICAgIG1h
dGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgeworICAg
ICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJnZW5lcmF0ZU1ldGFsQ29kZSIsIHBoYXNl
VGltZXMpOworICAgICAgICAgICAgZ2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFs
Q29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNlbWFudGljcyksIHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvci5sYXlvdXQpOworICAgICAgICB9CisgICAgfQorCisgICAgbG9nUGhhc2VUaW1l
cyhwaGFzZVRpbWVzKTsKIAogICAgIFJlbmRlclByZXBhcmVSZXN1bHQgcmVzdWx0OwogICAgIHJl
c3VsdC5tZXRhbFNvdXJjZSA9IFdURk1vdmUoZ2VuZXJhdGVkQ29kZS5tZXRhbFNvdXJjZSk7CkBA
IC0xNjksMTcgKzIzNCwzOCBAQCBPcHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJl
KFN0CiAKIE9wdGlvbmFsPENvbXB1dGVQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hs
c2xTb3VyY2UsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IpCiB7Ci0gICAgYXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZCh3aGxzbFNvdXJjZSk7
Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1
dG8gbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKLSAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3MpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byBjb21wdXRlRGltZW5zaW9ucyA9IFdITFNMOjpj
b21wdXRlRGltZW5zaW9ucygqcHJvZ3JhbSwgKm1hdGNoZWRTZW1hbnRpY3MtPnNoYWRlcik7Ci0g
ICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBQaGFzZVRpbWVzIHBoYXNlVGltZXM7CisgICAgTWV0YWw6OkNvbXB1dGVNZXRhbENvZGUg
Z2VuZXJhdGVkQ29kZTsKKyAgICBPcHRpb25hbDxDb21wdXRlRGltZW5zaW9ucz4gY29tcHV0ZURp
bWVuc2lvbnM7CisKKyAgICB7CisgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigicHJlcGFy
ZSB0b3RhbCIsIHBoYXNlVGltZXMpOworICAgICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hh
cmVkKHBoYXNlVGltZXMsIHdobHNsU291cmNlKTsKKyAgICAgICAgaWYgKCFwcm9ncmFtKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxNYXRjaGVk
Q29tcHV0ZVNlbWFudGljcz4gbWF0Y2hlZFNlbWFudGljczsKKyAgICAgICAgeworICAgICAgICAg
ICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJtYXRjaFNlbWFudGljcyIsIHBoYXNlVGltZXMpOwor
ICAgICAgICAgICAgbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBj
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFu
dGljcykKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisK
KyAgICAgICAgeworICAgICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJjb21wdXRlRGlt
ZW5zaW9ucyIsIHBoYXNlVGltZXMpOworICAgICAgICAgICAgY29tcHV0ZURpbWVuc2lvbnMgPSBX
SExTTDo6Y29tcHV0ZURpbWVuc2lvbnMoKnByb2dyYW0sICptYXRjaGVkU2VtYW50aWNzLT5zaGFk
ZXIpOworICAgICAgICAgICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAg
ICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJnZW5lcmF0ZU1ldGFsQ29kZSIsIHBoYXNlVGltZXMp
OworICAgICAgICAgICAgZ2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgq
cHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNlbWFudGljcyksIGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IubGF5b3V0KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGF1dG8gZ2VuZXJhdGVkQ29k
ZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNl
bWFudGljcyksIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKKyAgICBsb2dQaGFz
ZVRpbWVzKHBoYXNlVGltZXMpOwogCiAgICAgQ29tcHV0ZVByZXBhcmVSZXN1bHQgcmVzdWx0Owog
ICAgIHJlc3VsdC5tZXRhbFNvdXJjZSA9IFdURk1vdmUoZ2VuZXJhdGVkQ29kZS5tZXRhbFNvdXJj
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNl
cnZlVmFyaWFibGVMaWZldGltZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAJKHJl
dmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5
ICsxMDAsOSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBUb2tlbiBhbm9ueW1vdXNUb2tlCiBjbGFz
cyBQcmVzZXJ2ZUxpZmV0aW1lcyA6IHB1YmxpYyBWaXNpdG9yIHsKICAgICB1c2luZyBCYXNlID0g
VmlzaXRvcjsKIHB1YmxpYzoKLSAgICBQcmVzZXJ2ZUxpZmV0aW1lcyhVbmlxdWVSZWY8QVNUOjpU
eXBlUmVmZXJlbmNlPiYgc3RydWN0VHlwZSwgY29uc3QgSGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24qLCBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqPiYgdmFyaWFibGVNYXBwaW5nKQotICAg
ICAgICA6IG1fc3RydWN0VHlwZShzdHJ1Y3RUeXBlKQotICAgICAgICAsIG1fcG9pbnRlclRvU3Ry
dWN0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGFub255bW91c1Rva2VuKFRv
a2VuOjpUeXBlOjpJZGVudGlmaWVyKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgbV9zdHJ1
Y3RUeXBlLT5jbG9uZSgpKSkKKyAgICBQcmVzZXJ2ZUxpZmV0aW1lcyhSZWY8QVNUOjpUeXBlUmVm
ZXJlbmNlPiBzdHJ1Y3RUeXBlLCBjb25zdCBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biosIEFTVDo6U3RydWN0dXJlRWxlbWVudCo+JiB2YXJpYWJsZU1hcHBpbmcpCisgICAgICAgIDog
bV9zdHJ1Y3RUeXBlKFdURk1vdmUoc3RydWN0VHlwZSkpCisgICAgICAgICwgbV9wb2ludGVyVG9T
dHJ1Y3RUeXBlKEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0ZShhbm9ueW1vdXNUb2tlbihUb2tlbjo6
VHlwZTo6SWRlbnRpZmllciksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIG1fc3RydWN0VHlw
ZS0+Y2xvbmUoKSkpCiAgICAgICAgICwgbV92YXJpYWJsZU1hcHBpbmcodmFyaWFibGVNYXBwaW5n
KQogICAgIHsgfQogCkBAIC0yMzYsOCArMjM2LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIG1fc3RydWN0VmFyaWFibGUgeyBudWxscHRyIH07CiAK
LSAgICBVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgbV9zdHJ1Y3RUeXBlOwotICAgIFVu
aXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPiBtX3BvaW50ZXJUb1N0cnVjdFR5cGU7CisgICAgUmVm
PEFTVDo6VHlwZVJlZmVyZW5jZT4gbV9zdHJ1Y3RUeXBlOworICAgIFJlZjxBU1Q6OlBvaW50ZXJU
eXBlPiBtX3BvaW50ZXJUb1N0cnVjdFR5cGU7CiAgICAgLy8gSWYgdGhpcyBtYXBwaW5nIGNvbnRh
aW5zIHRoZSB2YXJpYWJsZSwgaXQgbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUncyBjYW5vbmljYWwg
bG9jYXRpb24KICAgICAvLyBpcyBpbiB0aGUgc3RydWN0IHdlIHVzZSB0byBwcmVzZXJ2ZSB2YXJp
YWJsZSBsaWZldGltZXMuCiAgICAgY29uc3QgSGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24qLCBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqPiYgbV92YXJpYWJsZU1hcHBpbmc7CkBAIC0yNzEs
NyArMjcxLDcgQEAgdm9pZCBwcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzKFByb2dyYW0mIAogCiAg
ICAgewogICAgICAgICBhdXRvIHdyYXBwZXJTdHJ1Y3RUeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGFub255bW91c1Rva2VuKFRva2VuOjpUeXBlOjpJZGVudGlmaWVyKSwgd3JhcHBlclN0
cnVjdERlZmluaXRpb24pOwotICAgICAgICBQcmVzZXJ2ZUxpZmV0aW1lcyBwcmVzZXJ2ZUxpZmV0
aW1lcyh3cmFwcGVyU3RydWN0VHlwZSwgdmFyaWFibGVNYXBwaW5nKTsKKyAgICAgICAgUHJlc2Vy
dmVMaWZldGltZXMgcHJlc2VydmVMaWZldGltZXMoV1RGTW92ZSh3cmFwcGVyU3RydWN0VHlwZSks
IHZhcmlhYmxlTWFwcGluZyk7CiAgICAgICAgIHByZXNlcnZlTGlmZXRpbWVzLlZpc2l0b3I6OnZp
c2l0KHByb2dyYW0pOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCShy
ZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxNCArOTgsMTQg
QEAgc3RydWN0IEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0IHsKIH07CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBFeHByZXNzaW9uQ29uc3RydWN0b3IsIHR5cGVuYW1lIFR5cGVDb25zdHJ1Y3Rvcj4KLXN0
YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4gd3JhcEFuZGVyQ2FsbEFyZ3Vt
ZW50KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4gYmFzZVR5cGUsIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0aHJlYWRB
bmRlckZ1bmN0aW9uKQorc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiB3
cmFwQW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Np
b24sIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiBiYXNlVHlwZSwgYm9vbCBhbmRlckZ1bmN0aW9uLCBi
b29sIHRocmVhZEFuZGVyRnVuY3Rpb24pCiB7CiAgICAgYXV0byBsb2NhdGlvbiA9IGV4cHJlc3Np
b24tPmNvZGVMb2NhdGlvbigpOwogICAgIGlmIChhdXRvIGFkZHJlc3NTcGFjZSA9IGV4cHJlc3Np
b24tPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKSB7CiAgICAgICAgIGlmICgh
YW5kZXJGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IGF1dG8gbWFrZUFycmF5UmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxFeHByZXNzaW9uQ29uc3Ry
dWN0b3I+KGxvY2F0aW9uLCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKLSAgICAgICAgbWFrZUFycmF5
UmVmZXJlbmNlLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZUNvbnN0cnVjdG9yPihsb2NhdGlv
biwgKmFkZHJlc3NTcGFjZSwgV1RGTW92ZShiYXNlVHlwZSkpKTsKKyAgICAgICAgbWFrZUFycmF5
UmVmZXJlbmNlLT5zZXRUeXBlKFR5cGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGxvY2F0aW9uLCAqYWRk
cmVzc1NwYWNlLCBXVEZNb3ZlKGJhc2VUeXBlKSkpOwogICAgICAgICBtYWtlQXJyYXlSZWZlcmVu
Y2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
IHt7IFdURk1vdmUobWFrZUFycmF5UmVmZXJlbmNlKSwgV1RGOjpudWxsb3B0LCBXaGljaEFuZGVy
OjpBbmRlciB9fTsKICAgICB9CkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIE9wdGlvbmFsPEFu
ZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PgogICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9
KTsKIAogICAgICAgICBhdXRvIGV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Npb25D
b25zdHJ1Y3Rvcj4obG9jYXRpb24sIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7Ci0gICAg
ICAgIGF1dG8gcmVzdWx0VHlwZSA9IG1ha2VVbmlxdWVSZWY8VHlwZUNvbnN0cnVjdG9yPihsb2Nh
dGlvbiwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgV1RGTW92ZShiYXNlVHlwZSkpOworICAg
ICAgICBhdXRvIHJlc3VsdFR5cGUgPSBUeXBlQ29uc3RydWN0b3I6OmNyZWF0ZShsb2NhdGlvbiwg
QVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgV1RGTW92ZShiYXNlVHlwZSkpOwogICAgICAgICBl
eHByZXNzaW9uLT5zZXRUeXBlKHJlc3VsdFR5cGUtPmNsb25lKCkpOwogICAgICAgICBleHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKQEAgLTMxNyw3ICsz
MTcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAgICAgQVNU
OjpFeHByZXNzaW9uJiBpbm5lckxlZnRFeHByZXNzaW9uID0gbGVmdEV4cHJlc3Npb247CiAKICAg
ICAvLyBDcmVhdGUgInAiIHZhcmlhYmxlLgotICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxlZnRFeHByZXNzaW9uLT5jb2Rl
TG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PihtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGxlZnRFeHByZXNzaW9uLT5jb2RlTG9j
YXRpb24oKSwgKmxlZnRFeHByZXNzaW9uLT50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3Bh
Y2UoKSwgbGVmdEV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25lKCkpKSwgU3RyaW5nKCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxlZnRFeHByZXNzaW9uLT5jb2RlTG9jYXRp
b24oKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0ZShsZWZ0RXhw
cmVzc2lvbi0+Y29kZUxvY2F0aW9uKCksICpsZWZ0RXhwcmVzc2lvbi0+dHlwZUFubm90YXRpb24o
KS5sZWZ0QWRkcmVzc1NwYWNlKCksIGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKS5jbG9u
ZSgpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwogCiAgICAgLy8gQ3JlYXRlICJxIiBh
bmQgInIiIHZhcmlhYmxlcy4KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4+IGludGVybWVkaWF0ZVZhcmlhYmxlczsKQEAgLTM2Myw3ICszNjMsNyBAQCBzdGF0
aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAgICAgLy8gU3RlcCAxOgogICAg
IHsKICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihpbm5lckxlZnRFeHByZXNzaW9uLmNvZGVMb2NhdGlv
bigpLCBXVEZNb3ZlKGxlZnRFeHByZXNzaW9uKSk7Ci0gICAgICAgIG1ha2VQb2ludGVyRXhwcmVz
c2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGlubmVyTGVmdEV4
cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICppbm5lckxlZnRFeHByZXNzaW9uLnR5cGVBbm5vdGF0
aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpLCBpbm5lckxlZnRFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpLmNsb25lKCkpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKEFT
VDo6UG9pbnRlclR5cGU6OmNyZWF0ZShpbm5lckxlZnRFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
LCAqaW5uZXJMZWZ0RXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2Uo
KSwgaW5uZXJMZWZ0RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKSk7CiAgICAgICAg
IG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOwogCiAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRl
clZhcmlhYmxlKSk7CkBAIC01NjgsOSArNTY4LDkgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2
aXNpdChBU1Q6OlJlYWRNbwogICAgICAgICBzaW1wbGlmeUxlZnRWYWx1ZShyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIAogICAgICAgICBhdXRvIGJhc2VUeXBlID0gcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgp
OwotICAgICAgICBhdXRvIHBvaW50ZXJUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihsZWZ0VmFsdWVMb2NhdGlvbiwgKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCksIGJhc2VUeXBlLT5jbG9u
ZSgpKTsKKyAgICAgICAgYXV0byBwb2ludGVyVHlwZSA9IEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0
ZShsZWZ0VmFsdWVMb2NhdGlvbiwgKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVl
KCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCksIGJhc2VUeXBlLT5jbG9uZSgp
KTsKIAotICAgICAgICBhdXRvIHBvaW50ZXJWYXJpYWJsZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihsZWZ0VmFsdWVMb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCks
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihwb2ludGVyVHlwZS0+Y2xvbmUoKSksIFN0cmlu
ZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgYXV0byBwb2ludGVyVmFyaWFibGUgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obGVmdFZhbHVlTG9jYXRpb24s
IEFTVDo6UXVhbGlmaWVycygpLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIG51bGxw
dHIsIG51bGxwdHIpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gZXhwcmVzc2lvbnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAko
cmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5jCiB7CiAgICAgdW5z
aWduZWQgY29udmVyc2lvbkNvc3QgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2Fu
ZGlkYXRlLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBjb252ZXJzaW9uQ29z
dCArPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAgY29udmVy
c2lvbkNvc3QgKz0gYXJndW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShSZWY8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiB1bnNpZ25lZCB7CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiB1bnNpZ25lZCB7CiAgICAgICAgICAgICByZXR1
cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVyc2lvbkNv
c3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5
cGUuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEyICs4MCwx
MiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFJlc29sdmluZ1R5cGUoVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiYgdikKKyAgICBSZXNvbHZpbmdUeXBlKFJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB2KQogICAgICAgICA6IG1faW5uZXIoV1RGTW92ZSh2KSkKICAgICB7CiAgICAgfQog
Ci0gICAgUmVzb2x2aW5nVHlwZShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgdikK
KyAgICBSZXNvbHZpbmdUeXBlKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4gdikKICAg
ICAgICAgOiBtX2lubmVyKFdURk1vdmUodikpCiAgICAgewogICAgIH0KQEAgLTEwNSwxOCArMTA1
LDE4IEBAIHB1YmxpYzoKIAogICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRUeXBlKCkK
ICAgICB7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4obV9pbm5lcikpCi0gICAgICAgICAgICByZXR1cm4gJldURjo6Z2V0PFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcikpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpnZXQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKS5wdHIo
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikgLT4gZGVjbHR5
cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+Jj4oKSkpCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYg
dmlzaXRvcikgLT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFy
aWFudDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4+Jj4oKSkpCiAgICAgewogICAgICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2lu
bmVyKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmFyaWFudDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+IG1faW5uZXI7CisgICAg
VmFyaWFudDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4+IG1faW5uZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0
cnVjdG9ycy5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBib29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3Jh
bSYgcHJvCiAKICAgICAgICAgYXV0byBsb2NhdGlvbiA9IG5hbWVkVHlwZS5nZXQoKS5jb2RlTG9j
YXRpb24oKTsKIAotICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygp
LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxv
Y2F0aW9uLCBuYW1lZFR5cGUuZ2V0KCkpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwor
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5hbWVkVHlwZS5nZXQoKSksIFN0cmluZygpLCBudWxs
cHRyLCBudWxscHRyKTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0
ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1
Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5h
bWVkVHlwZS5nZXQoKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyks
IG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCBib29sIHN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9nCiAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRl
ZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBh
dXRvIGxvY2F0aW9uID0gZW51bWVyYXRpb25EZWZpbml0aW9uLT5jb2RlTG9jYXRpb24oKTsKICAg
ICAgICAgewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJz
KCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
bG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVs
bHB0cik7Ci0gICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMo
KSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChs
b2NhdGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygp
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlv
biksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbjIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
bG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9j
YXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRy
KTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEp
KTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJh
dGlvbjIpKTsKQEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMoUHJvZwogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byB2YXJp
YWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9u
KSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihs
b2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2Nh
dGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIp
OwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUo
KS5jbG9uZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVs
bHB0ciwgaXNPcGVyYXRvcikpOwpAQCAtNjIsNyArNjIsNyBAQCBib29sIHN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucyhQcm9nCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlv
bkRlZmluaXRpb24pKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlv
biwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+dHlwZSgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1l
dGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKQEAgLTc0LDcgKzc0LDcgQEAgYm9vbCBzeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZwogICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxv
Y2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCku
Y2xvbmUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0
ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOworICAgICAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBw
ZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTEgQEAgYm9vbCBzeW50aGVzaXpl
U3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYQogICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVs
ZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAg
ICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAogICAgICAgICAgICAgYXV0byBj
cmVhdGVBbmRlciA9IFsmXShBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpIC0+IEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0gICAgICAgICAgICAgICAgYXV0byBhcmd1bWVu
dFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KHN0cnVjdHVyZUVsZW1lbnQu
Y29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKHN0
cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIHN0cnVjdHVyZURlZmluaXRpb24pKTsKLSAg
ICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwg
QVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFy
Z3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgYXV0byBhcmd1bWVudFR5cGUgPSBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUoc3RydWN0dXJl
RWxlbWVudC5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgc3RydWN0dXJlRGVmaW5pdGlv
bikpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihzdHJ1Y3R1cmVFbGVtZW50LmNvZGVMb2Nh
dGlvbigpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1bWVudFR5cGUpLCBTdHJpbmco
KSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAgICAgICAgICAgICAgIGF1dG8gcmV0dXJu
VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oc3RydWN0dXJlRWxlbWVudC5j
b2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9u
ZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlBvaW50ZXJUeXBl
OjpjcmVhdGUoc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBz
dHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKICAgICAgICAgICAgICAgICBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24oc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIG1ha2VT
dHJpbmcoIm9wZXJhdG9yJi4iLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSksIFdURk1vdmUocGFy
YW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKICAgICAgICAgICAgIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAJ
KHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0CiB7CiAgICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHBy
ZXNzaW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjb25zdGFudEV4cHJlc3Npb24p
OwotICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5j
ZSkgeworICAgIH0sIFsmXShSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkg
ewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZVJlZmVyZW5jZSk7CiAgICAgfSksIHR5
cGVBcmd1bWVudCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAko
cmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0
MCwxNiBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVi
bGljIFJlZmVyZW5jZVR5cGUgewogICAgIHVzaW5nIEJhc2UgPSBSZWZlcmVuY2VUeXBlOwotcHVi
bGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJl
c3NTcGFjZSBhZGRyZXNzU3BhY2UsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiBlbGVtZW50VHlw
ZSkKKworICAgIEFycmF5UmVmZXJlbmNlVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJl
c3NTcGFjZSBhZGRyZXNzU3BhY2UsIFJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUpCiAgICAg
ICAgIDogQmFzZShsb2NhdGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKGVsZW1lbnRUeXBlKSkK
ICAgICB7CiAgICAgfQorcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXJyYXlSZWZlcmVuY2VUeXBl
PiBjcmVhdGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNl
LCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQXJyYXlSZWZlcmVuY2VUeXBlKGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdU
Rk1vdmUoZWxlbWVudFR5cGUpKSk7CisgICAgfQogCiAgICAgdmlydHVhbCB+QXJyYXlSZWZlcmVu
Y2VUeXBlKCkgPSBkZWZhdWx0OwogCkBAIC01MywxMCArNTgsMTAgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXJyYXlSZWZlcmVuY2VUeXBlPihj
b2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7Ci0g
ICAgfQorICAgIC8vVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgLy97CisgICAgLy8gICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXJyYXlSZWZlcmVuY2VU
eXBlPihjb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUo
KSk7CisgICAgLy99CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJh
eVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xBcnJheVR5cGUuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDEzICs0MCwxOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7
CiAKIGNsYXNzIEFycmF5VHlwZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7Ci1wdWJsaWM6Ci0gICAg
QXJyYXlUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYm
IGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICBBcnJheVR5cGUoQ29kZUxv
Y2F0aW9uIGxvY2F0aW9uLCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBu
dW1FbGVtZW50cykKICAgICAgICAgOiBVbm5hbWVkVHlwZShsb2NhdGlvbikKICAgICAgICAgLCBt
X2VsZW1lbnRUeXBlKFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgICAgICAsIG1fbnVtRWxlbWVu
dHMobnVtRWxlbWVudHMpCiAgICAgewogICAgIH0KK3B1YmxpYzoKKworICAgIHN0YXRpYyBSZWY8
QXJyYXlUeXBlPiBjcmVhdGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBSZWY8VW5uYW1lZFR5cGU+
IGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEFycmF5VHlwZShsb2NhdGlvbiwgV1RGTW92ZShlbGVtZW50VHlwZSks
IG51bUVsZW1lbnRzKSk7CisgICAgfQogCiAgICAgdmlydHVhbCB+QXJyYXlUeXBlKCkgPSBkZWZh
dWx0OwogCkBAIC01OSwxMCArNjQsMTAgQEAgcHVibGljOgogICAgIFVubmFtZWRUeXBlJiB0eXBl
KCkgeyByZXR1cm4gbV9lbGVtZW50VHlwZTsgfQogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50czsgfQogCi0gICAgVW5pcXVlUmVmPFVubmFtZWRU
eXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZVJlZjxBcnJheVR5cGU+KGNvZGVMb2NhdGlvbigpLCBtX2VsZW1lbnRUeXBlLT5jbG9uZSgp
LCBtX251bUVsZW1lbnRzKTsKLSAgICB9CisgICAgLy9VbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNs
b25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICAvL3sKKyAgICAvLyAgICByZXR1cm4gbWFrZVVuaXF1
ZVJlZjxBcnJheVR5cGU+KGNvZGVMb2NhdGlvbigpLCBtX2VsZW1lbnRUeXBlLT5jbG9uZSgpLCBt
X251bUVsZW1lbnRzKTsKKyAgICAvL30KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCBvdmVy
cmlkZQogICAgIHsKQEAgLTc5LDcgKzg0LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgUmVmPFVubmFt
ZWRUeXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVt
ZXJhdGlvbkRlZmluaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAkocmV2aXNpb24g
MjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RW51bWVyYXRpb25EZWZpbml0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
bmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBO
YW1lZFR5cGUgewogcHVibGljOgotICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihDb2RlTG9jYXRp
b24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiB0eXBl
KQorICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmlu
ZyYmIG5hbWUsIFJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKICAgICAgICAgOiBOYW1lZFR5cGUobG9j
YXRpb24sIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCiAg
ICAgewpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFVu
aXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV90eXBl
OwogICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8RW51bWVyYXRpb25NZW1iZXI+
PiBtX21lbWJlcnM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3
OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHBy
ZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKm1fdHlwZTsKICAgICB9CiAKLSAgICB2b2lkIHNldFR5cGUoVW5pcXVlUmVmPFVu
bmFtZWRUeXBlPiYmIHR5cGUpCisgICAgdm9pZCBzZXRUeXBlKFJlZjxVbm5hbWVkVHlwZT4gdHlw
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV90eXBlKTsKICAgICAgICAgbV90eXBlID0gV1RG
TW92ZSh0eXBlKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
Q29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9uOwotICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5h
bWVkVHlwZT4+IG1fdHlwZTsKKyAgICBSZWZQdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBP
cHRpb25hbDxUeXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbjsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAog
RmxvYXRMaXRlcmFsVHlwZTo6RmxvYXRMaXRlcmFsVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24s
IGZsb2F0IHZhbHVlKQogICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAsIG1fcHJlZmVycmVkVHlw
ZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KGxvY2F0aW9uLCAiZmxvYXQiX3N0ciwgVHlw
ZUFyZ3VtZW50cygpKSkKKyAgICAsIG1fcHJlZmVycmVkVHlwZShUeXBlUmVmZXJlbmNlOjpjcmVh
dGUobG9jYXRpb24sICJmbG9hdCJfc3RyLCBUeXBlQXJndW1lbnRzKCkpKQogewogfQogCkBAIC03
Nyw3ICs3Nyw3IEBAIEZsb2F0TGl0ZXJhbFR5cGUgRmxvYXRMaXRlcmFsVHlwZTo6Y2xvbmUKICAg
ICBGbG9hdExpdGVyYWxUeXBlIHJlc3VsdChtX3ByZWZlcnJlZFR5cGUtPmNvZGVMb2NhdGlvbigp
LCBtX3ZhbHVlKTsKICAgICBpZiAoYXV0byogdHlwZSA9IG1heWJlUmVzb2x2ZWRUeXBlKCkpCiAg
ICAgICAgIHJlc3VsdC5yZXNvbHZlKHR5cGUtPmNsb25lKCkpOwotICAgIHJlc3VsdC5tX3ByZWZl
cnJlZFR5cGUgPSBtX3ByZWZlcnJlZFR5cGUtPmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgIHJl
c3VsdC5tX3ByZWZlcnJlZFR5cGUgPSBtX3ByZWZlcnJlZFR5cGUuY29weVJlZigpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgJKHJl
dmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBA
QCBwcml2YXRlOgogICAgIGZsb2F0IG1fdmFsdWU7CiAgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9w
dHIgdG8gcmVzb2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgogICAgIC8vIENvbnN0
YW50RXhwcmVzc2lvbiAtPiBMaXRlcmFsVHlwZSAtPiBUeXBlUmVmZXJlbmNlIC0+IFR5cGVBcmd1
bWVudHMgLT4gQ29uc3RhbnRFeHByZXNzaW9uCi0gICAgVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+
IG1fcHJlZmVycmVkVHlwZTsKKyAgICBSZWY8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEZ1bmN0aW9uRGVj
bGFyYXRpb24gewogcHVibGljOgotICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oQ29kZUxvY2F0aW9u
IGxvY2F0aW9uLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRy
eVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiB0eXBl
LCBTdHJpbmcmJiBuYW1lLCBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHBhcmFtZXRlcnMsIHN0ZDo6
dW5pcXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCBpc09wZXJhdG9yKQorICAgIEZ1
bmN0aW9uRGVjbGFyYXRpb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBdHRyaWJ1dGVCbG9jayYm
IGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUs
IFJlZjxVbm5hbWVkVHlwZT4gdHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlv
bnMmJiBwYXJhbWV0ZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+JiYgc2VtYW50aWMsIGJv
b2wgaXNPcGVyYXRvcikKICAgICAgICAgOiBtX2NvZGVMb2NhdGlvbihsb2NhdGlvbikKICAgICAg
ICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQogICAgICAgICAs
IG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBAIC04Miw3ICs4Miw3IEBAIHByaXZh
dGU6CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsKICAgICBPcHRpb25hbDxF
bnRyeVBvaW50VHlwZT4gbV9lbnRyeVBvaW50VHlwZTsKICAgICBib29sIG1faXNPcGVyYXRvcjsK
LSAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAgICBSZWY8VW5uYW1lZFR5cGU+
IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zIG1f
cGFyYW1ldGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+IG1fc2VtYW50aWM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2Vy
TGl0ZXJhbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHJldmlzaW9uIDI0Nzc5
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVn
ZXJMaXRlcmFsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNw
YWNlIEFTVCB7CiAKIEludGVnZXJMaXRlcmFsVHlwZTo6SW50ZWdlckxpdGVyYWxUeXBlKENvZGVM
b2NhdGlvbiBsb2NhdGlvbiwgaW50IHZhbHVlKQogICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAs
IG1fcHJlZmVycmVkVHlwZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KGxvY2F0aW9uLCAi
aW50Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUoVHlwZVJl
ZmVyZW5jZTo6Y3JlYXRlKGxvY2F0aW9uLCAiaW50Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7
CiB9CiAKQEAgLTc4LDcgKzc4LDcgQEAgSW50ZWdlckxpdGVyYWxUeXBlIEludGVnZXJMaXRlcmFs
VHlwZTo6YwogICAgIEludGVnZXJMaXRlcmFsVHlwZSByZXN1bHQobV9wcmVmZXJyZWRUeXBlLT5j
b2RlTG9jYXRpb24oKSwgbV92YWx1ZSk7CiAgICAgaWYgKGF1dG8qIHR5cGUgPSBtYXliZVJlc29s
dmVkVHlwZSgpKQogICAgICAgICByZXN1bHQucmVzb2x2ZSh0eXBlLT5jbG9uZSgpKTsKLSAgICBy
ZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLT5jbG9uZVR5cGVSZWZlcmVu
Y2UoKTsKKyAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLmNvcHlS
ZWYoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2Vy
TGl0ZXJhbFR5cGUuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV92YWx1ZTsKICAgICAvLyBU
aGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3
ZWVuCiAgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZl
cmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KLSAgICBVbmlxdWVS
ZWY8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworICAgIFJlZjxUeXBlUmVmZXJlbmNl
PiBtX3ByZWZlcnJlZFR5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UG9pbnRlclR5cGUuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsMTEgKzQwLDE3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBQb2ludGVyVHlwZSA6IHB1
YmxpYyBSZWZlcmVuY2VUeXBlIHsKICAgICB1c2luZyBCYXNlID0gUmVmZXJlbmNlVHlwZTsKLXB1
YmxpYzoKLSAgICBQb2ludGVyVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJlc3NTcGFj
ZSBhZGRyZXNzU3BhY2UsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUpCisKKyAg
ICBQb2ludGVyVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJlc3NTcGFjZSBhZGRyZXNz
U3BhY2UsIFJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUpCiAgICAgICAgIDogQmFzZShsb2Nh
dGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICB7CiAgICAgfQor
cHVibGljOgorCisgICAgc3RhdGljIFJlZjxQb2ludGVyVHlwZT4gY3JlYXRlKENvZGVMb2NhdGlv
biBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRUeXBlPiBl
bGVtZW50VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBvaW50ZXJU
eXBlKGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKSk7CisgICAg
fQogCiAgICAgdmlydHVhbCB+UG9pbnRlclR5cGUoKSA9IGRlZmF1bHQ7CiAKQEAgLTUzLDEwICs1
OSwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFBvaW50
ZXJUeXBlPihjb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xv
bmUoKSk7Ci0gICAgfQorICAgIC8vVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0
IG92ZXJyaWRlCisgICAgLy97CisgICAgLy8gICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UG9pbnRl
clR5cGU+KGNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UoKSwgZWxlbWVudFR5cGUoKS5jbG9u
ZSgpKTsKKyAgICAvL30KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCBvdmVycmlkZQogICAg
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgJ
KHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDggKzExOCw4IEBAIHByaXZhdGU6CiAgICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihD
b2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsZWZ0VmFsdWUpCiAg
ICAgICAgIDogRXhwcmVzc2lvbihsb2NhdGlvbikKICAgICAgICAgLCBtX2xlZnRWYWx1ZShXVEZN
b3ZlKGxlZnRWYWx1ZSkpCi0gICAgICAgICwgbV9vbGRWYWx1ZShtYWtlVW5pcXVlUmVmPFZhcmlh
YmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwgU3Ry
aW5nKCksIG51bGxwdHIsIG51bGxwdHIpKQotICAgICAgICAsIG1fbmV3VmFsdWUobWFrZVVuaXF1
ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgUXVhbGlmaWVycygpLCBXVEY6Om51
bGxvcHQsIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29sZFZhbHVl
KG1ha2VVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIFF1YWxpZmllcnMo
KSwgbnVsbHB0ciwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICAsIG1fbmV3
VmFsdWUobWFrZVVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgUXVhbGlm
aWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpCiAgICAgewogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVmZXJlbmNlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAkocmV2aXNpb24gMjQ3NzkxKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTQgQEAgbmFtZXNwYWNlIFdITFNMIHsK
IG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBSZWZlcmVuY2VUeXBlIDogcHVibGljIFVubmFtZWRU
eXBlIHsKLXB1YmxpYzoKLSAgICBSZWZlcmVuY2VUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwg
QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIGVsZW1l
bnRUeXBlKQorcHJvdGVjdGVkOgorICAgIFJlZmVyZW5jZVR5cGUoQ29kZUxvY2F0aW9uIGxvY2F0
aW9uLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlLCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRU
eXBlKQogICAgICAgICA6IFVubmFtZWRUeXBlKGxvY2F0aW9uKQogICAgICAgICAsIG1fYWRkcmVz
c1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUoZWxl
bWVudFR5cGUpKQogICAgIHsKICAgICB9CitwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5SZWZlcmVu
Y2VUeXBlKCkgPSBkZWZhdWx0OwogCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7Ci0gICAgVW5pcXVlUmVmPFVubmFt
ZWRUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV9lbGVtZW50VHlw
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlw
ZS5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMyAr
NzIsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fcmVzb2x2ZWRUeXBlOwogICAgIH0K
IAotICAgIHZvaWQgcmVzb2x2ZShVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAgICB2
b2lkIHJlc29sdmUoUmVmPFVubmFtZWRUeXBlPiB0eXBlKQogICAgIHsKICAgICAgICAgbV9yZXNv
bHZlZFR5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBPcHRpb25h
bDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiBtX3Jlc29sdmVkVHlwZTsKKyAgICBSZWZQdHI8VW5u
YW1lZFR5cGU+IG1fcmVzb2x2ZWRUeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNs
YXNzIFN0cnVjdHVyZUVsZW1lbnQgewogcHVibGljOgotICAgIFN0cnVjdHVyZUVsZW1lbnQoQ29k
ZUxvY2F0aW9uIGxvY2F0aW9uLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgVW5pcXVlUmVmPFVu
bmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRp
Yz4mJiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVtZW50KENvZGVMb2NhdGlvbiBsb2NhdGlv
biwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIFJlZjxVbm5hbWVkVHlwZT4gdHlwZSwgU3RyaW5n
JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiYmIHNlbWFudGljKQogICAgICAgICA6
IG1fY29kZUxvY2F0aW9uKGxvY2F0aW9uKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3Zl
KHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjMsNyAr
NjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENvZGVMb2NhdGlvbiBtX2NvZGVMb2NhdGlv
bjsKICAgICBRdWFsaWZpZXJzIG1fcXVhbGlmaWVyczsKLSAgICBVbmlxdWVSZWY8VW5uYW1lZFR5
cGU+IG1fdHlwZTsKKyAgICBSZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9u
YW1lOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRpYz4gbV9zZW1hbnRpYzsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDggQEAgVHlwZUFyZ3VtZW50IGNsb25lKGNvbnN0IFR5
cGVBcmd1bWVudCYgdAogewogICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
W10oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIC0+IFR5cGVB
cmd1bWVudCB7CiAgICAgICAgIHJldHVybiBjb25zdGFudEV4cHJlc3Npb24uY2xvbmUoKTsKLSAg
ICB9LCBbXShjb25zdCBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIC0+
IFR5cGVBcmd1bWVudCB7Ci0gICAgICAgIHJldHVybiB0eXBlUmVmZXJlbmNlLT5jbG9uZVR5cGVS
ZWZlcmVuY2UoKTsKKyAgICB9LCBbXShjb25zdCBSZWY8VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZl
cmVuY2UpIC0+IFR5cGVBcmd1bWVudCB7CisgICAgICAgIHJldHVybiB0eXBlUmVmZXJlbmNlLmNv
cHlSZWYoKTsKICAgICB9KSwgdHlwZUFyZ3VtZW50KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFy
Z3VtZW50LmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBUeXBlUmVmZXJlbmNlOwogCi11c2lu
ZyBUeXBlQXJndW1lbnQgPSBWYXJpYW50PENvbnN0YW50RXhwcmVzc2lvbiwgVW5pcXVlUmVmPFR5
cGVSZWZlcmVuY2U+PjsKK3VzaW5nIFR5cGVBcmd1bWVudCA9IFZhcmlhbnQ8Q29uc3RhbnRFeHBy
ZXNzaW9uLCBSZWY8VHlwZVJlZmVyZW5jZT4+OwogdXNpbmcgVHlwZUFyZ3VtZW50cyA9IFZlY3Rv
cjxUeXBlQXJndW1lbnQ+OwogCiBUeXBlQXJndW1lbnQgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xU
eXBlRGVmaW5pdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAK
IGNsYXNzIFR5cGVEZWZpbml0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6Ci0gICAg
VHlwZURlZmluaXRpb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBVbmlx
dWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAgICBUeXBlRGVmaW5pdGlvbihDb2RlTG9jYXRp
b24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIFJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKICAgICAg
ICAgOiBOYW1lZFR5cGUobG9jYXRpb24sIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBl
KFdURk1vdmUodHlwZSkpCiAgICAgewpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIFJlZjxV
bm5hbWVkVHlwZT4gbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlUmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDEyICszNywxMiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3Bh
Y2UgQVNUIHsKIAotVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+IFR5cGVSZWZlcmVuY2U6OndyYXAo
Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSkKK1JlZjxUeXBl
UmVmZXJlbmNlPiBUeXBlUmVmZXJlbmNlOjp3cmFwKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgTmFt
ZWRUeXBlJiByZXNvbHZlZFR5cGUpCiB7CiAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRz
OwogICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkpCiAgICAg
ICAgIHR5cGVBcmd1bWVudHMgPSBBU1Q6OmNsb25lKGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4ocmVzb2x2ZWRUeXBlKS50eXBlQXJndW1lbnRzKCkpOwotICAgIGF1dG8gcmVzdWx0ID0g
bWFrZVVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihsb2NhdGlvbiwgU3RyaW5nKHJlc29sdmVkVHlw
ZS5uYW1lKCkpLCBXVEZNb3ZlKHR5cGVBcmd1bWVudHMpKTsKKyAgICBhdXRvIHJlc3VsdCA9IFR5
cGVSZWZlcmVuY2U6OmNyZWF0ZShsb2NhdGlvbiwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkp
LCBXVEZNb3ZlKHR5cGVBcmd1bWVudHMpKTsKICAgICByZXN1bHQtPnNldFJlc29sdmVkVHlwZShy
ZXNvbHZlZFR5cGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJl
ZmVyZW5jZS5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDIwICs0MywyNCBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIE5hbWVkVHlwZTsKIAogY2xhc3Mg
VHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7Ci1wdWJsaWM6CiAgICAgVHlwZVJl
ZmVyZW5jZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIFR5cGVBcmd1bWVu
dHMmJiB0eXBlQXJndW1lbnRzKQogICAgICAgICA6IFVubmFtZWRUeXBlKGxvY2F0aW9uKQogICAg
ICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhX
VEZNb3ZlKHR5cGVBcmd1bWVudHMpKQogICAgIHsKICAgICB9CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxUeXBlUmVmZXJlbmNlPiBjcmVhdGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcm
JiBuYW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqIG5ldyBUeXBlUmVmZXJlbmNlKGxvY2F0aW9uLCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHR5cGVBcmd1bWVudHMpKSk7CisgICAgfQogCiAgICAgdmlydHVhbCB+VHlwZVJl
ZmVyZW5jZSgpID0gZGVmYXVsdDsKIAogICAgIFR5cGVSZWZlcmVuY2UoY29uc3QgVHlwZVJlZmVy
ZW5jZSYpID0gZGVsZXRlOwogICAgIFR5cGVSZWZlcmVuY2UoVHlwZVJlZmVyZW5jZSYmKSA9IGRl
ZmF1bHQ7CiAKLSAgICBzdGF0aWMgVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+IHdyYXAoQ29kZUxv
Y2F0aW9uLCBOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSk7CisgICAgc3RhdGljIFJlZjxUeXBlUmVm
ZXJlbmNlPiB3cmFwKENvZGVMb2NhdGlvbiwgTmFtZWRUeXBlJiByZXNvbHZlZFR5cGUpOwogCiAg
ICAgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKQEAgLTg2LDE4ICs5MCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVzb2x2ZWRUeXBlID0g
JnJlc29sdmVkVHlwZTsKICAgICB9CiAKLSAgICBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4gY2xv
bmVUeXBlUmVmZXJlbmNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFr
ZVVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihjb2RlTG9jYXRpb24oKSwgU3RyaW5nKG1fbmFtZSks
IEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7Ci0gICAgICAgIGlmIChtX3Jlc29sdmVkVHlw
ZSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKCptX3Jlc29sdmVkVHlwZSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgVW5pcXVlUmVmPFVubmFtZWRU
eXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gY2xvbmVU
eXBlUmVmZXJlbmNlKCk7Ci0gICAgfQorICAgIC8vUmVmPFR5cGVSZWZlcmVuY2U+IGNsb25lVHlw
ZVJlZmVyZW5jZSgpIGNvbnN0CisgICAgLy97CisgICAgLy8gICAgYXV0byByZXN1bHQgPSBtYWtl
VW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KGNvZGVMb2NhdGlvbigpLCBTdHJpbmcobV9uYW1lKSwg
QVNUOjpjbG9uZShtX3R5cGVBcmd1bWVudHMpKTsKKyAgICAvLyAgICBpZiAobV9yZXNvbHZlZFR5
cGUpCisgICAgLy8gICAgICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKCptX3Jlc29sdmVkVHlw
ZSk7CisgICAgLy8gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAvL30KKworICAgIC8vVW5pcXVlUmVm
PFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgLy97CisgICAgLy8gICAg
cmV0dXJuIGNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgIC8vfQogCiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCShyZXZp
c2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xVbm5hbWVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNM
IHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFVubmFtZWRUeXBlIDogcHVibGljIFR5cGUg
eworY2xhc3MgVW5uYW1lZFR5cGUgOiBwdWJsaWMgVHlwZSwgcHVibGljIFJlZkNvdW50ZWQ8VW5u
YW1lZFR5cGU+IHsKIHB1YmxpYzoKICAgICBVbm5hbWVkVHlwZShDb2RlTG9jYXRpb24gbG9jYXRp
b24pCiAgICAgICAgIDogbV9jb2RlTG9jYXRpb24obG9jYXRpb24pCkBAIC02MCw3ICs2MSw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzOyB9CiAgICAgdmlydHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVybiAqdGhp
czsgfQogCi0gICAgdmlydHVhbCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qg
PSAwOworICAgIC8vdmlydHVhbCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qg
PSAwOworICAgIC8vIE9PUFMKKyAgICBSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3QgeyBy
ZXR1cm4gUmVmPFVubmFtZWRUeXBlPihjb25zdF9jYXN0PFVubmFtZWRUeXBlJj4oKnRoaXMpKTsg
fQogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBoYXNoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3QgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAkocmV2aXNp
b24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCB1bnNpZ25l
ZCB2YWx1ZSkKICAgICA6IG1fdmFsdWUodmFsdWUpCi0gICAgLCBtX3ByZWZlcnJlZFR5cGUobWFr
ZVVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihsb2NhdGlvbiwgInVpbnQiX3N0ciwgVHlwZUFyZ3Vt
ZW50cygpKSkKKyAgICAsIG1fcHJlZmVycmVkVHlwZShUeXBlUmVmZXJlbmNlOjpjcmVhdGUobG9j
YXRpb24sICJ1aW50Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7CiB9CiAKQEAgLTgxLDcgKzgx
LDcgQEAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgVW5zaWduZWRJbnRlZwogICAgIFVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlIHJlc3VsdChtX3ByZWZlcnJlZFR5cGUtPmNvZGVMb2NhdGlv
bigpLCBtX3ZhbHVlKTsKICAgICBpZiAoYXV0byogdHlwZSA9IG1heWJlUmVzb2x2ZWRUeXBlKCkp
CiAgICAgICAgIHJlc3VsdC5yZXNvbHZlKHR5cGUtPmNsb25lKCkpOwotICAgIHJlc3VsdC5tX3By
ZWZlcnJlZFR5cGUgPSBtX3ByZWZlcnJlZFR5cGUtPmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAg
IHJlc3VsdC5tX3ByZWZlcnJlZFR5cGUgPSBtX3ByZWZlcnJlZFR5cGUuY29weVJlZigpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fdmFsdWU7CiAgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIgdG8gcmVzb2x2ZSBhIGNpcmN1
bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgogICAgIC8vIENvbnN0YW50RXhwcmVzc2lvbiAtPiBMaXRl
cmFsVHlwZSAtPiBUeXBlUmVmZXJlbmNlIC0+IFR5cGVBcmd1bWVudHMgLT4gQ29uc3RhbnRFeHBy
ZXNzaW9uCi0gICAgVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+IG1fcHJlZmVycmVkVHlwZTsKKyAg
ICBSZWY8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgQVNUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCShyZXZpc2lv
biAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
bmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uIGZpbmFsIHsKIC8vIEZp
bmFsIGJlY2F1c2Ugd2UgbWFkZSB0aGUgZGVzdHJ1Y3RvciBub24tdmlydHVhbC4KIHB1YmxpYzoK
LSAgICBWYXJpYWJsZURlY2xhcmF0aW9uKENvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb24sIFF1YWxp
ZmllcnMmJiBxdWFsaWZpZXJzLCBPcHRpb25hbDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiYmIHR5
cGUsIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRpYywg
c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVE
ZWNsYXJhdGlvbihDb2RlTG9jYXRpb24gY29kZUxvY2F0aW9uLCBRdWFsaWZpZXJzJiYgcXVhbGlm
aWVycywgUmVmUHRyPFVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5p
cXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAgIDogbV9jb2RlTG9jYXRpb24oY29kZUxvY2F0aW9uKQog
ICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1f
dHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjYsMTIgKzY2LDEyIEBAIHB1YmxpYzoKICAgICAvLyBX
ZSB1c2UgdGhpcyBmb3IgUmVhZE1vZGlmeVdyaXRlIGV4cHJlc3Npb25zLCBzaW5jZSB3ZSBkb24n
dCBrbm93IHRoZSB0eXBlIG9mIHRoZWlyCiAgICAgLy8gaW50ZXJuYWwgdmFyaWFibGVzIHVudGls
IHRoZSBjaGVja2VyIHJ1bnMuIEFsbCBvdGhlciB2YXJpYWJsZXMgc2hvdWxkIHN0YXJ0IGxpZmUg
b3V0CiAgICAgLy8gd2l0aCBhIHR5cGUuCi0gICAgdm9pZCBzZXRUeXBlKFVuaXF1ZVJlZjxVbm5h
bWVkVHlwZT4gdHlwZSkKKyAgICB2b2lkIHNldFR5cGUoUmVmPFVubmFtZWRUeXBlPiB0eXBlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFtX3R5cGUpOwogICAgICAgICBtX3R5cGUgPSBXVEZNb3Zl
KHR5cGUpOwogICAgIH0KLSAgICBjb25zdCBPcHRpb25hbDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+
PiYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFJlZlB0cjxVbm5h
bWVkVHlwZT4mIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBVbm5hbWVkVHlw
ZSogdHlwZSgpIHsgcmV0dXJuIG1fdHlwZSA/ICYqbV90eXBlIDogbnVsbHB0cjsgfQogICAgIFNl
bWFudGljKiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWMuZ2V0KCk7IH0KICAgICBFeHBy
ZXNzaW9uKiBpbml0aWFsaXplcigpIHsgcmV0dXJuIG1faW5pdGlhbGl6ZXIuZ2V0KCk7IH0KQEAg
LTg4LDcgKzg4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDb2RlTG9jYXRpb24gbV9jb2Rl
TG9jYXRpb247CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgT3B0aW9uYWw8VW5p
cXVlUmVmPFVubmFtZWRUeXBlPj4gbV90eXBlOworICAgIFJlZlB0cjxVbm5hbWVkVHlwZT4gbV90
eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBt
X3NlbWFudGljOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2luaXRpYWxpemVy
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHJl
dmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEs
OCArMTAxLDggQEAgc3RhdGljIEFTVDo6TmFtZWRUeXBlJiB2ZWN0b3JJbm5lclR5cGUoQQogICAg
ICAgICByZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0aW9uOwogCiAgICAgQVNTRVJUKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOwotICAgIEFTU0VSVChX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7Ci0gICAgcmV0dXJuIFdURjo6
Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpWzBdKS0+cmVzb2x2ZWRUeXBlKCk7CisgICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICByZXR1cm4gV1RGOjpnZXQ8UmVmPEFTVDo6
VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0p
LT5yZXNvbHZlZFR5cGUoKTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlY3RvclN1ZmZpeChp
bnQgdmVjdG9yTGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xOYXRpdmVUeXBlV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZVR5cGVXcml0ZXIu
Y3BwCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZVR5cGVXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw4ICs2OCw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZVR5cGUoQVNUOjpOYXRpdmVUeXBlRGUKICAg
ICAgICAgcmV0dXJuICJzYW1wbGVyIl9zdHI7CiAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgPT0gInZlY3RvciIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwotICAgICAgICBhdXRvJiB0eXBlUmVm
ZXJlbmNlID0gV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNl
ID0gV1RGOjpnZXQ8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMF0pOwogICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB0eXBlUmVm
ZXJlbmNlLT51bmlmeU5vZGUoKTsKICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUg
PSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKQEAgLTEx
MSw4ICsxMTEsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVUeXBlKEFTVDo6TmF0aXZlVHlwZURlCiAg
ICAgfQogICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJtYXRyaXgiKSB7
CiAgICAgICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNp
emUoKSA9PSAzKTsKLSAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVl
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pKTsKLSAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1
ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzBdKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEFT
VDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MF0pKTsKKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFJlZjxBU1Q6OlR5
cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsK
ICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gdHlwZVJlZmVyZW5jZS0+dW5pZnlOb2RlKCk7CiAg
ICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5v
ZGUpOwogICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CkBAIC0xMzcsOCArMTM3LDggQEAgU3RyaW5nIHdy
aXRlTmF0aXZlVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZQogICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZygiYXJyYXk8IiwgcHJlZml4LCAiLCAiLCBjb2x1bW5zICogcm93cywgIj4iKTsKICAgICB9CiAg
ICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09
IDEpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5
cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7
Ci0gICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVS
ZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4o
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIHR5
cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CiAgICAgYXV0byBwcmVmaXggPSAoWyZd
KCkgLT4gU3RyaW5nIHsKICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIlRleHR1cmUxRCIpCiAgICAgICAgICAgICByZXR1cm4gInRleHR1cmUxZCJfc3RyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374856</attachid>
            <date>2019-07-24 20:08:59 -0700</date>
            <delta_ts>2019-07-25 15:57:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>145608</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzgwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE5LTA3LTI0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gQWRkIG9wdGlvbmFs
IGxvZ2dpbmcgZm9yIHBoYXNlIHRpbWluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMDA5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFzIHdlJ3JlIGRvaW5nIFdITFNMIGNvbXBpbGVyIHNwZWVkdXAg
d29yaywgaXQgaGVscHMgdG8gYmUgYWJsZSB0bworICAgICAgICBsb2cgcGhhc2UgdGltZXMuIEkg
dGhpbmsgYSBmZXcgb2YgdXMgaGF2ZSB3cml0dGVuIHN1Y2ggcGF0Y2hlcyBsb2NhbGx5LgorICAg
ICAgICBJbiB0aGlzIHBhdGNoLCBJJ20gYWRkaW5nIGEgd2F5IHRvIGVhc2lseSBzd2l0Y2ggdGhp
cyBsb2dnaW5nIG9uIGFuZAorICAgICAgICBvZmYgYnkgZmxpcHBpbmcgYSAiY29uc3RleHByIGJv
b2wiIGFuZCByZWJ1aWxkaW5nLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpsb2dQaGFzZVRpbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQaGFzZVRpbWVyOjpQaGFzZVRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpQaGFzZVRpbWVyOjp+UGhhc2VUaW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
cHJlcGFyZSk6CisKIDIwMTktMDctMjQgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJFR1JFU1NJT046IE92ZXJsYXk6IGhpZ2hsaWdo
dGluZyBhIDo6YmVmb3JlLzo6YWZ0ZXIgc2hvd3MgdGhlIG5vZGUgaW5mbyBvZiB0aGUgcGFyZW50
IGluc3RlYWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCShy
ZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBJbnRIYXNoPHNpemVfdD46
Omhhc2gobV9mdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUoKSk7CiAgICAgICAgIGhhc2ggXj0g
bV9mdW5jdGlvbi0+bmFtZSgpLmhhc2goKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2Z1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBoYXNo
IF49IG1fZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLnZhbHVlKCktPmhhc2goKTsK
KyAgICAgICAgICAgIGhhc2ggXj0gbV9mdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50eXBlKCkt
Pmhhc2goKTsKIAogICAgICAgICBpZiAobV9mdW5jdGlvbi0+aXNDYXN0KCkpCiAgICAgICAgICAg
ICBoYXNoIF49IG1fZnVuY3Rpb24tPnR5cGUoKS5oYXNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlz
aW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMCArMTIxLDEwIEBAIHB1YmxpYzoK
IHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRv
ckFuZGVySW5kZXhlcihBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCiB7
CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKLSAgICBhdXRvIHJldHVyblR5cGUg
PSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGxvY2F0aW9uLCBmaXJzdEFyZ3VtZW50
LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7Cisg
ICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKGxvY2F0aW9uLCBm
aXJzdEFyZ3VtZW50LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVsZW1lbnRUeXBlKCku
Y2xvbmUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
IHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
Pihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwgU3Ry
aW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVy
cygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KGxvY2F0aW9uLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51
bGxwdHIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAobG9jYXRpb24sIGludHJpbnNpY3MudWludFR5cGUoKSksIFN0cmluZygpLCBu
dWxscHRyLCBudWxscHRyKSk7CiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9y
JltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTQxLDEyICsxNDEsMTIgQEAgc3RhdGlj
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZQogewogICAgIGNvbnN0IGJvb2wgaXNP
cGVyYXRvciA9IHRydWU7CiAgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOwotICAgIGF1dG8gYXJndW1l
bnRUeXBlID0gZmlyc3RBcmd1bWVudC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB7CisgICAgYXV0byBhcmd1bWVudFR5cGUgPSBmaXJzdEFyZ3VtZW50LnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoW10oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4g
UmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5jbG9u
ZSgpOwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKLSAgICAgICAgcmV0dXJuIHNlY29uZEFyZ3VtZW50
LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1
bm5hbWVkVHlwZSkgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IFJlZjxBU1Q6OlVubmFtZWRUeXBl
PiB7CisgICAgICAgIHJldHVybiBzZWNvbmRBcmd1bWVudC52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFtdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB7CiAgICAgICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7Ci0gICAg
ICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mKSAtPiBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICAgICAgLy8g
V2UgZW5jb3VudGVyZWQgIm51bGwgPT0gbnVsbCIuCiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MiBUaGlzIGNhbiBwcm9i
YWJseSBiZSBnZW5lcmFsaXplZCwgdXNpbmcgdGhlICJwcmVmZXJyZWQgdHlwZSIgaW5mcmFzdHJ1
Y3R1cmUgdXNlZCBieSBnZW5lcmljIGxpdGVyYWxzCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIHJlCiAgICAgfSkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBhcmd1bWVudFR5cGUt
PmNsb25lKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgcGFyYW1ldGVycy5h
cHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBB
U1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KFdURk1vdmUoYXJn
dW1lbnRUeXBlKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcGFyYW1ldGVy
cy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9u
LCBBU1Q6OlF1YWxpZmllcnMoKSwgUmVmPEFTVDo6VW5uYW1lZFR5cGU+KFdURk1vdmUoYXJndW1l
bnRUeXBlKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgcmV0dXJuIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRp
b24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5
cGUpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwogfQogCkBAIC0xNjgs
MTQgKzE2OCwxNCBAQCBlbnVtIGNsYXNzIEFjY2VwdGFiaWxpdHkgewogc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihj
b25zdCBTdHJpbmcmIG5hbWUsIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBJ
bnRyaW5zaWNzJiBpbnRyaW5zaWNzKQogewogICAgIGlmIChuYW1lID09ICJvcGVyYXRvciZbXSIg
JiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgYXV0byogZmlyc3RBcmd1bWVudEFycmF5
UmVmID0gdHlwZXNbMF0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZSogeworICAgICAgICBhdXRvKiBmaXJzdEFyZ3VtZW50QXJyYXlSZWYgPSB0eXBlc1swXS5nZXQo
KS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1l
ZFR5cGUpIC0+IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CiAgICAgICAgICAgICBpZiAoaXM8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1
bm5hbWVkVHlwZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlw
ZSkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0sIFtdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSogewog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0pKTsKLSAgICAgICAgYm9vbCBz
ZWNvbmRBcmd1bWVudElzVWludCA9IHR5cGVzWzFdLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wg
eworICAgICAgICBib29sIHNlY29uZEFyZ3VtZW50SXNVaW50ID0gdHlwZXNbMV0uZ2V0KCkudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlw
ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50
cmluc2ljcy51aW50VHlwZSgpKTsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKICAgICAgICAg
ICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5S
ZXNvbHZlKGludHJpbnNpY3MudWludFR5cGUoKSk7CkBAIC0xODMsOSArMTgzLDkgQEAgc3RhdGlj
IE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQogICAgICAgICBpZiAoZmlyc3RBcmd1
bWVudEFycmF5UmVmICYmIHNlY29uZEFyZ3VtZW50SXNVaW50KQogICAgICAgICAgICAgcmV0dXJu
IHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIobG9jYXRpb24sICpmaXJzdEFyZ3VtZW50
QXJyYXlSZWYsIGludHJpbnNpY3MpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSAib3BlcmF0b3Iu
bGVuZ3RoIiAmJiB0eXBlcy5zaXplKCkgPT0gMSkgewotICAgICAgICBhdXRvKiBmaXJzdEFyZ3Vt
ZW50UmVmZXJlbmNlID0gdHlwZXNbMF0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRU
eXBlKiB7CisgICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRSZWZlcmVuY2UgPSB0eXBlc1swXS5n
ZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5u
YW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKICAgICAgICAgICAgIGlmIChpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFt
ZWRUeXBlKSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5
cGUmPih1bm5hbWVkVHlwZSkpKQotICAgICAgICAgICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLnB0cigpOwogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChsb2Nh
dGlvbiwgKmZpcnN0QXJndW1lbnRSZWZlcmVuY2UsIGludHJpbnNpY3MpOwogICAgIH0gZWxzZSBp
ZiAobmFtZSA9PSAib3BlcmF0b3I9PSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKICAgICAgICAg
YXV0byBhY2NlcHRhYmlsaXR5ID0gW10oUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkgLT4g
QWNjZXB0YWJpbGl0eSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5
cGUpIC0+IEFjY2VwdGFiaWxpdHkgeworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUu
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRU
eXBlKSAtPiBBY2NlcHRhYmlsaXR5IHsKICAgICAgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUg
PSB1bm5hbWVkVHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihkb3du
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSA/IEFjY2VwdGFiaWxpdHk6OlllcyA6
IEFjY2VwdGFiaWxpdHk6Ok5vOwogICAgICAgICAgICAgfSwgW10oUmVmUHRyPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IEFjY2VwdGFiaWxpdHkg
ewpAQCAtMzIxLDE0ICszMjEsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2Fk
KGNvbnN0IAogICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBD
aGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CiAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
cGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8mIGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlID0g
KCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpLT51bmlmeU5vZGUo
KTsKKyAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSBmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAo
aXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpKSB7CiAgICAgICAg
ICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0
UGFyYW1ldGVyVW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6Oklu
ZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOwor
ICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gZnVuY3Rpb25EZWZp
bml0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAg
IGlmICghaXM8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSk7CkBAIC0z
NDUsMTQgKzM0NSwxNCBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3Qg
CiAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2lu
ZDo6SW5kZXggPyAzIDogMjsKICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAg
ICAgIGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpV
bm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8m
IHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVu
aWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5
cGUpIHx8IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCkgewotICAg
ICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAg
IGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAgICBpZiAoIWlzPEFT
VDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUpOwpAQCAtMzcyLDcgKzM3Miw3
IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCAKICAgICAgICAgVmVj
dG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5cGVSZWZlcmVuY2VzOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVjdGVkUGFyYW1ldGVycyAtIDE7
ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBhcmd1
bWVudFR5cGVzLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBl
KCktPmNsb25lKCkpOwogICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50
VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVu
dFR5cGUpOwogICAgICAgICBhdXRvKiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
KCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcyk7CkBAIC0zOTUsNyArMzk1LDcg
QEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IAogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRv
JiB1bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAg
ICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0
PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CkBAIC00NzEsMTAgKzQ3MSwxMCBAQCBwcml2
YXRlOgogICAgIH07CiAgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZv
KEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CiAgICAg
T3B0aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1
aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKLSAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24mKTsKKyAgICBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVjdXJzZUFuZFdyYXBCYXNl
VHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOwogICAgIGJvb2wgcmVjdXJzZUFu
ZFJlcXVpcmVCb29sVHlwZShBU1Q6OkV4cHJlc3Npb24mKTsKLSAgICB2b2lkIGFzc2lnblR5cGUo
QVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIEFTVDo6VHlw
ZUFubm90YXRpb24pOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOworICAg
IHZvaWQgYXNzaWduQ29uY3JldGVUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6
RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4sIEFTVDo6VHlwZUFu
bm90YXRpb24pOwogICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVzb2x2
aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24pOwogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwpAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMo
KQogewogICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV90eXBlTWFwKSB7Ci0gICAgICAg
IGF1dG8gc3VjY2VzcyA9IGtleVZhbHVlUGFpci52YWx1ZS0+dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7
CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGtleVZhbHVlUGFpci52YWx1ZS0+dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9v
bCB7CiAgICAgICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRUeXBlKHVubmFtZWRUeXBlLT5j
bG9uZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9LCBbJl0oUmVmUHRy
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJv
b2wgewpAQCAtNTk3LDQxICs1OTcsNDEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZ1bmN0
aW9uRGVmaW5pdAogICAgIFZpc2l0b3I6OnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29t
bWl0KFJlc29sdmluZ1R5cGUmIGxlZnQsIFJlc29sdmluZ1R5cGUmIHJpZ2h0KQorc3RhdGljIFJl
ZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiBsZWZ0
LCBSZXNvbHZpbmdUeXBlJiByaWdodCkKIHsKLSAgICByZXR1cm4gbGVmdC52aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICByZXR1cm4gcmlnaHQu
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBy
aWdodCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgcmV0
dXJuIGxlZnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiBsZWZ0KSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICByZXR1cm4gcmln
aHQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdo
dCkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgICAgIGlmIChtYXRjaGVz
KGxlZnQsIHJpZ2h0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC0+Y2xvbmUoKTsKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIH0sIFsmXShSZWZQdHI8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSwg
WyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBSZWZQdHI8QVNU
OjpVbm5hbWVkVHlwZT4gewogICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KGxlZnQs
IHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKICAgICAgICAgfSkpOwotICAgIH0sIFsmXShSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgcmV0dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgIH0sIFsmXShSZWZQdHI8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4g
eworICAgICAgICByZXR1cm4gcmlnaHQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiByaWdodCkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAg
ICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChyaWdodCwgbGVmdC0+cmVzb2x2YWJsZVR5
cGUoKSk7Ci0gICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBy
aWdodCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAg
IH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gUmVmUHRy
PEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChs
ZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CiAgICAgICAg
IH0pKTsKICAgICB9KSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQorc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRU
eXBlPiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc29s
dmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAg
IHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgcmVzb2x2aW5nVHlwZSkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHsKICAgICAgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHJlc29sdmluZ1R5cGUpKQogICAg
ICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLmNsb25lKCk7Ci0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJl
c29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgcmVzb2x2aW5nVHlwZSkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsK
ICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHVubmFtZWRUeXBlLCByZXNvbHZpbmdUeXBl
LT5yZXNvbHZhYmxlVHlwZSgpKTsKICAgICB9KSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdU
eXBlKQorc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBjb21taXQoUmVzb2x2aW5nVHlw
ZSYgcmVzb2x2aW5nVHlwZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBl
KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICByZXR1cm4g
cmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mIHVubmFtZWRUeXBlKSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAg
ICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IFJlZlB0cjxBU1Q6
OlVubmFtZWRUeXBlPiB7CiAgICAgICAgIGlmICghcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJl
c29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBj
b21taXQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkpOwogICAgICAg
ICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2
ZWRUeXBlKCkuY2xvbmUoKTsKQEAgLTc0NywxNCArNzQ3LDE0IEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmEKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWdu
VHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0g
QVNUOjpSaWdodFZhbHVlKCkpCit2b2lkIENoZWNrZXI6OmFzc2lnbkNvbmNyZXRlVHlwZShBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB1bm5hbWVkVHlw
ZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgp
KQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3Rk
OjptYWtlX3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihXVEZNb3ZlKHVubmFtZWRUeXBlKSkpOwogICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgZXhw
cmVzc2lvbi5zZXRUeXBlQW5ub3RhdGlvbihXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAK
LXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJl
ZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwg
QVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQor
dm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVm
UHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNU
OjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewog
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtl
X3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihXVEZNb3ZlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSkp
OwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBA
IC03NjMsNyArNzYzLDcgQEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lv
bgogCiB2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
biwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBl
QW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewotICAgIHJlc29sdmluZ1R5cGUudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1
bHQpIHsKKyAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90
eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtlX3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihy
ZXN1bHQtPmNsb25lKCkpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmVzdWx0KSB7CkBAIC03ODksNyArNzg5LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OkFzc2lnbm1lbnRFeHByZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWdu
VHlwZShhc3NpZ25tZW50RXhwcmVzc2lvbiwgV1RGTW92ZSgqcmVzdWx0VHlwZSkpOworICAgIGFz
c2lnbkNvbmNyZXRlVHlwZShhc3NpZ25tZW50RXhwcmVzc2lvbiwgKnJlc3VsdFR5cGUpOwogfQog
CiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKQEAgLTgwNCw4ICs4MDQsOCBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlCiAgICAgaWYgKCFuZXdWYWx1ZUluZm8pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4+IG1hdGNoZWRUeXBlID0gbWF0Y2hBbmRDb21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5n
VHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkKLSAgICAgICAgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpLnNldFR5cGUoV1RGTW92ZShtYXRjaGVkVHlwZS52YWx1
ZSgpKSk7CisgICAgaWYgKFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaGVkVHlwZSA9IG1h
dGNoQW5kQ29tbWl0KGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSkpCisgICAgICAgIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFs
dWUoKS5zZXRUeXBlKCptYXRjaGVkVHlwZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNldEVycm9y
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTgyMCw4ICs4MjAsOCBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlCiAKIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRV
bm5hbWVkVHlwZShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQogewotICAgIHJldHVybiBy
ZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgIHJldHVybiAm
dHlwZTsKKyAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtd
KFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAg
ICAgICByZXR1cm4gdHlwZS5wdHIoKTsKICAgICB9LCBbXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CiAgICAgICAgIC8vIEZJWE1F
OiBJZiB0aGUgdHlwZSBpc24ndCBjb21taXR0ZWQsIHNob3VsZCB3ZSBqdXN0IGNvbW1pdCgpIGl0
IG5vdz8KICAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZl
ZFR5cGUoKTsKQEAgLTg1Miw3ICs4NTIsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RGVy
ZWZlcmVuY2VFeHByCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKGRl
cmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmVsZW1lbnRUeXBlKCkuY2xvbmUoKSwg
QVNUOjpMZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkgfSk7CisgICAgYXNz
aWduQ29uY3JldGVUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmVsZW1l
bnRUeXBlKCkuY2xvbmUoKSwgQVNUOjpMZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1Nw
YWNlKCkgfSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJl
c3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKQEAgLTg3Myw3ICs4NzMsNyBAQCB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhc3NpZ25UeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxB
U1Q6OlBvaW50ZXJUeXBlPihtYWtlUG9pbnRlckV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICps
ZWZ0QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduQ29u
Y3JldGVUeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRl
KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2Us
IGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24pCkBAIC04OTQsNyArODk0LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJh
eVJlZmVyZQogICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7
CiAgICAgICAgICAgICBhdXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIFNhdmUgdGhlIGZhY3QgdGhhdCB3ZSdyZSBu
b3QgdGFyZ2V0dGluZyB0aGUgaXRlbTsgd2UncmUgdGFyZ2V0dGluZyB0aGUgaXRlbSdzIGlubmVy
IGVsZW1lbnQuCi0gICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFj
ZSgpLCBwb2ludGVyVHlwZS5lbGVtZW50VHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgIGFz
c2lnbkNvbmNyZXRlVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uY29kZUxv
Y2F0aW9uKCksIHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpLCBwb2ludGVyVHlwZS5lbGVtZW50
VHlwZSgpLmNsb25lKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05
MDcsNyArOTA3LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZQog
ICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkgewogICAgICAgICAg
ICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4MTYzIFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICAgICAgICAg
IGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkp
OworICAgICAgICAgICAgYXNzaWduQ29uY3JldGVUeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50
eXBlKCkuY2xvbmUoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpA
QCAtOTE4LDE1ICs5MTgsMTUgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJl
ZmVyZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAqbGVmdEFkZHJl
c3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnbkNvbmNyZXRlVHlw
ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6
Y3JlYXRlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICpsZWZ0
QWRkcmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKEFTVDo6VW5uYW1lZFR5cGUmIGJhc2VUeXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNz
U3BhY2UpCitzdGF0aWMgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IGFyZ3VtZW50VHlwZUZvckFu
ZE92ZXJsb2FkKEFTVDo6VW5uYW1lZFR5cGUmIGJhc2VUeXBlLCBBU1Q6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UpCiB7CiAgICAgYXV0byYgdW5pZnlOb2RlID0gYmFzZVR5cGUudW5pZnlOb2Rl
KCk7CiAgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CiAgICAgICAgIGF1
dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwotICAg
ICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KG5hbWVkVHlwZS5j
b2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobmFt
ZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBuYW1lZFR5cGUpKSB9OworICAgICAgICByZXR1cm4geyBB
U1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUobmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNz
U3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChuYW1lZFR5cGUuY29kZUxvY2F0aW9uKCks
IG5hbWVkVHlwZSkpIH07CiAgICAgfQogCiAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAtOTM1LDEyICs5MzUsMTIgQEAgc3Rh
dGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAgICAgICByZXR1cm4gdW5u
YW1lZFR5cGUuY2xvbmUoKTsKIAogICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKQotICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBkb3duY2FzdDxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgpKSB9OworICAgICAgICBy
ZXR1cm4geyBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKHVubmFtZWRUeXBlLmNvZGVM
b2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVk
VHlwZSkudHlwZSgpLmNsb25lKCkpIH07CiAKICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgdW5uYW1lZFR5cGUu
Y2xvbmUoKSkgfTsKKyAgICByZXR1cm4geyBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUodW5uYW1l
ZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgdW5uYW1lZFR5cGUuY2xvbmUoKSkg
fTsKIH0KIAogdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKiBhZGRp
dGlvbmFsQXJndW1lbnRUeXBlKQpAQCAtOTcyLDcgKzk3Miw3IEBAIHZvaWQgQ2hlY2tlcjo6Zmlu
aXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNl
SW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOwogICAgIGlmIChsZWZ0QWRk
cmVzc1NwYWNlKSB7CiAgICAgICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2Fk
ID0gV0hMU0w6OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpiYXNlVW5uYW1lZFR5cGUsICps
ZWZ0QWRkcmVzc1NwYWNlKSkgewotICAgICAgICAgICAgUmVzb2x2aW5nVHlwZSBhcmd1bWVudFR5
cGUgPSB7IFdURk1vdmUoKmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKSB9OworICAgICAgICAg
ICAgUmVzb2x2aW5nVHlwZSBhcmd1bWVudFR5cGUgPSB7IFJlZjxBU1Q6OlVubmFtZWRUeXBlPigq
YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQpIH07CiAgICAgICAgICAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYW5kZXJBcmd1bWVudFR5cGVzIHsgYXJn
dW1lbnRUeXBlIH07CiAgICAgICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3VtZW50VHlwZSkKICAg
ICAgICAgICAgICAgICBhbmRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1l
bnRUeXBlKTsKQEAgLTk4Nyw3ICs5ODcsNyBAQCB2b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0aW5n
KEFTVDo6UHJvcGVyCiAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRlckZ1
bmN0aW9uID0gbnVsbHB0cjsKICAgICBBU1Q6OlVubmFtZWRUeXBlKiB0aHJlYWRBbmRlclJldHVy
blR5cGUgPSBudWxscHRyOwogICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2Fk
ID0gV0hMU0w6OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpiYXNlVW5uYW1lZFR5cGUsIEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQpKSB7Ci0gICAgICAgIFJlc29sdmluZ1R5cGUgYXJndW1l
bnRUeXBlID0geyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFz
ZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKSB9OworICAgICAgICBSZXNvbHZpbmdUeXBlIGFy
Z3VtZW50VHlwZSA9IHsgUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6UG9pbnRlclR5cGU6OmNy
ZWF0ZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQsIGJhc2VVbm5hbWVkVHlwZS0+Y2xvbmUoKSkpIH07CiAgICAgICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFy
Z3VtZW50VHlwZXMgeyBhcmd1bWVudFR5cGUgfTsKICAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmd1
bWVudFR5cGUpCiAgICAgICAgICAgICB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCph
ZGRpdGlvbmFsQXJndW1lbnRUeXBlKTsKQEAgLTEwNjMsNyArMTA2Myw3IEBAIHZvaWQgQ2hlY2tl
cjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICAgICAgICAgIHR5cGVBbm5vdGF0aW9u
ID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoIWJhc2VJbmZvLT50
eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSAmJiAoc2V0dGVyRnVuY3Rpb24gfHwgdGhyZWFk
QW5kZXJGdW5jdGlvbikpCiAgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExl
ZnRWYWx1ZSgpOwotICAgIGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBmaWVs
ZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKKyAgICBhc3NpZ25Db25j
cmV0ZVR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdU
Rk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCkBAIC0xMDg0LDcgKzEwODQsNyBAQCB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuCiAgICAgQVNTRVJUKHZhcmlhYmxlUmVm
ZXJlbmNlLnZhcmlhYmxlKCkpOwogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJs
ZSgpLT50eXBlKCkpOwogICAgIAotICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZh
cmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgQVNUOjpMZWZ0VmFs
dWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworICAgIGFzc2lnbkNvbmNyZXRlVHlw
ZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgp
LT5jbG9uZSgpLCBBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkK
QEAgLTExMzgsMTkgKzExMzgsMTkgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok51bGxMaXRl
cmFsJiBudQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xl
YW5MaXRlcmFsKQogewotICAgIGFzc2lnblR5cGUoYm9vbGVhbkxpdGVyYWwsIEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChib29sZWFuTGl0ZXJhbC5jb2RlTG9jYXRpb24oKSwgbV9pbnRyaW5zaWNz
LmJvb2xUeXBlKCkpKTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUoYm9vbGVhbkxpdGVyYWwsIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChib29sZWFuTGl0ZXJhbC5jb2RlTG9jYXRpb24oKSwgbV9p
bnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKQogewogICAg
IEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkp
OwogICAgIGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICplbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCk7Ci0gICAgYXNzaWduVHlwZShlbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChlbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwuY29kZUxvY2F0aW9uKCksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgIGFz
c2lnbkNvbmNyZXRlVHlwZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwsIEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuY29kZUxvY2F0aW9uKCksIGVudW1l
cmF0aW9uRGVmaW5pdGlvbikpOwogfQogCiBib29sIENoZWNrZXI6OmlzQm9vbFR5cGUoUmVzb2x2
aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQp
IC0+IGJvb2wgeworICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7CiAgICAgICAgIHJl
dHVybiBtYXRjaGVzKGxlZnQsIG1faW50cmluc2ljcy5ib29sVHlwZSgpKTsKICAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gYm9vbCB7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJpbnNpY3MuYm9v
bFR5cGUoKSwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSkpOwpAQCAtMTE3Myw3ICsxMTczLDcgQEAg
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZQogewogICAgIGlmICghcmVj
dXJzZUFuZFJlcXVpcmVCb29sVHlwZShsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpKQog
ICAgICAgICByZXR1cm47Ci0gICAgYXNzaWduVHlwZShsb2dpY2FsTm90RXhwcmVzc2lvbiwgQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvZ2ljYWxOb3RFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
LCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShsb2dp
Y2FsTm90RXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvZ2ljYWxOb3RFeHBy
ZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOwogfQogCiB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNz
aW9uKQpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkxvZ2lj
YWxFeHByZXNzaQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJv
b2xUeXBlKGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpKQogICAgICAgICByZXR1cm47Ci0gICAg
YXNzaWduVHlwZShsb2dpY2FsRXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxv
Z2ljYWxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkp
OworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShsb2dpY2FsRXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKGxvZ2ljYWxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBtX2ludHJpbnNp
Y3MuYm9vbFR5cGUoKSkpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1l
bnQmIGlmU3RhdGVtZW50KQpAQCAtMTQwNCw3ICsxNDA0LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OlRlcm5hcnlFeHByZXNzaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNz
aWduVHlwZSh0ZXJuYXJ5RXhwcmVzc2lvbiwgV1RGTW92ZSgqcmVzdWx0VHlwZSkpOworICAgIGFz
c2lnbkNvbmNyZXRlVHlwZSh0ZXJuYXJ5RXhwcmVzc2lvbiwgKnJlc3VsdFR5cGUpOwogfQogCiB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQpA
QCAtMTQ1MCw3ICsxNDUwLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJgogCiAgICAgY2FsbEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKmZ1bmN0aW9uKTsKIAotICAg
IGFzc2lnblR5cGUoY2FsbEV4cHJlc3Npb24sIGZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7Cisg
ICAgYXNzaWduQ29uY3JldGVUeXBlKGNhbGxFeHByZXNzaW9uLCBmdW5jdGlvbi0+dHlwZSgpLmNs
b25lKCkpOwogfQogCiBib29sIGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBl
cy5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwx
MSBAQCBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uCiAgICAgcmV0dXJu
IG1hdGNoZXModW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKIH0K
IAotc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRD
b21taXQoQVNUOjpUeXBlJiB1bmlmeU5vZGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFi
bGVUeXBlKQorc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChB
U1Q6OlR5cGUmIHVuaWZ5Tm9kZSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUp
CiB7CiAgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKTsKICAg
ICBpZiAoIXJlc29sdmFibGVUeXBlLmNhblJlc29sdmUodW5pZnlOb2RlKSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGlzPEFT
VDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CiAgICAgICAgIGF1dG8mIG5hbWVkVW5pZnlOb2Rl
ID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgIGF1dG8gcmVz
dWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKG5hbWVkVW5pZnlOb2RlLmNvZGVMb2NhdGlv
bigpLCBuYW1lZFVuaWZ5Tm9kZSk7CkBAIC05OCwxNyArOTgsMTcgQEAgc3RhdGljIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBl
KQorUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKIHsK
ICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIHJlc29s
dmFibGVUeXBlKTsKIH0KIAotT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBt
YXRjaEFuZENvbW1pdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVU
eXBlJiByZXNvbHZhYmxlVHlwZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENv
bW1pdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNv
bHZhYmxlVHlwZSkKIHsKICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBlLnVuaWZ5
Tm9kZSgpLCByZXNvbHZhYmxlVHlwZSk7CiB9CiAKLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJs
ZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIpCitSZWZQdHI8QVNU
OjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2
YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIpCiB7CiAgICAg
QVNTRVJUKCFyZXNvbHZhYmxlVHlwZTEubWF5YmVSZXNvbHZlZFR5cGUoKSk7CiAgICAgQVNTRVJU
KCFyZXNvbHZhYmxlVHlwZTIubWF5YmVSZXNvbHZlZFR5cGUoKSk7CkBAIC0xMjksMTIgKzEyOSwx
MiBAQCBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hCiAgICAgfQogICAg
IGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6
Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgewogICAgICAgICAvLyBGSVhNRTog
VHJ5aW5nIHRvIG1hdGNoIG51bGxwdHIgYW5kIG51bGxwdHIgZmFpbHMuCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBudWxscHRyOwogfQogCi1PcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNv
bHZhYmxlVHlwZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBjb21taXQoQVNUOjpSZXNvbHZh
YmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCiB7CiAgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5t
YXliZVJlc29sdmVkVHlwZSgpKTsKICAgICBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihy
ZXNvbHZhYmxlVHlwZSkpIHsKQEAgLTE1NCw5ICsxNTQsOSBAQCBPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4+IGNvCiAgICAgfQogICAgIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0
Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWlscy4KLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGJvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1
bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0
eXBlQXJndW1lbnRzKQpAQCAtMTc5LDggKzE3OSw4IEBAIGJvb2wgaW5mZXJUeXBlc0ZvclR5cGVB
cmd1bWVudHMoQVNUOjpOYW0KICAgICAgICAgYXV0byBhc3NpZ24gPSBbJl0oQVNUOjpUeXBlQXJn
dW1lbnQmIHR5cGVBcmd1bWVudCwgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qJiBleHByZXNzaW9u
LCBBU1Q6OlR5cGVSZWZlcmVuY2UqJiB0eXBlUmVmZXJlbmNlKSB7CiAgICAgICAgICAgICBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25z
dGFudEV4cHJlc3Npb24pIHsKICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gJmNvbnN0YW50
RXhwcmVzc2lvbjsKLSAgICAgICAgICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJl
bmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgewotICAgICAgICAgICAgICAgIHR5cGVSZWZlcmVuY2Ug
PSAmdGhlVHlwZVJlZmVyZW5jZTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8QVNUOjpUeXBlUmVm
ZXJlbmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIHR5cGVSZWZlcmVu
Y2UgPSB0aGVUeXBlUmVmZXJlbmNlLnB0cigpOwogICAgICAgICAgICAgfSksIHR5cGVBcmd1bWVu
dCk7CiAgICAgICAgIH07CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
aW5mZXJUeXBlc0ZvckNhbGxJbXBsCiAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVy
cygpLnNpemUoKSAhPSBhcmd1bWVudFR5cGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBzdWNjZXNzID0gYXJndW1lbnRUeXBlc1tp
XS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gYXJn
dW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKICAgICAgICAgICAgIHJldHVybiBt
YXRjaGVzKCpwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLCB1bm5hbWVk
VHlwZSk7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gcmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShwb3NzaWJs
ZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVy
VHlwZXMuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0Nywx
MCBAQCBjbGFzcyBVbm5hbWVkVHlwZTsKIGJvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJiwgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYpOwogYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6
TmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUmKTsKIGJvb2wgbWF0Y2hlcyhjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUmKTsKLU9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVkVHlwZSYs
IEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBl
Jik7Ci1PcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0
KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7Ci1PcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJik7
CitSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVkVHlw
ZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRj
aEFuZENvbW1pdChBU1Q6Ok5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK1JlZlB0
cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiwg
QVNUOjpSZXNvbHZhYmxlVHlwZSYpOworUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IGNvbW1pdChB
U1Q6OlJlc29sdmFibGVUeXBlJik7CiBib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFT
VDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOwogYm9vbCBp
bmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rp
b24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1l
bnRUeXBlcywgY29uc3QgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKIGJvb2wgaW5m
ZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1bmN0aW9u
LCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50
VHlwZXMsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRy
aW5zaWNzLmNwcAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDkg
KzI4Nyw5IEBAIGJvb2wgSW50cmluc2ljczo6YWRkVmVjdG9yKEFTVDo6TmF0aXZlVHkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBl
QXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pKTsKICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkp
OwotICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+
KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlID0gc3RhdGlj
X2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8UmVmPEFTVDo6VHlwZVJlZmVyZW5j
ZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKICAgICBhdXRv
JiBsZW5ndGhFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pOwogICAgIEFTU0VSVCghaW5u
ZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpOwogICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiogYXJyYXk7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCBib29sIEludHJpbnNpY3M6OmFk
ZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VS
VChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKLSAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJl
bmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CiAgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5
cGVBcmd1bWVudHMoKVsyXSkpOwotICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFT
VDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYg
aW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8UmVm
PEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KClbMF0pKTsKICAgICBhdXRvJiByb3dFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFu
dEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pOwog
ICAgIGF1dG8mIGNvbHVtbkV4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSk7CiAgICAgQVNT
RVJUKCFpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSk7CkBAIC00MTEsOCArNDExLDgg
QEAgdm9pZCBJbnRyaW5zaWNzOjphZGREZXB0aFRleHR1cmUoQVNUOjpOYQogdm9pZCBJbnRyaW5z
aWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCiB7CiAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKCkuc2l6ZSgpID09IDEpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVu
aXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFy
Z3VtZW50cygpWzBdKSk7Ci0gICAgYXV0byYgaW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0
YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFJlZjxBU1Q6OlR5cGVSZWZl
cmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CiAgICAg
QVNTRVJUKCFpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSk7CiAgICAgaWYgKGFkZEZ1
bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5uZXJUeXBlKSkgewogICAgICAgICBt
X3RleHR1cmVTZXQuYWRkKCZuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsNyArNDE2LDcgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlVHlwZUFyZ3VtZW50KCkgLT4gRXhwZQogICAgIH0KICAgICBDT05TVU1FX1RZUEUo
cmVzdWx0LCBJZGVudGlmaWVyKTsKICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqcmVz
dWx0KTsKLSAgICByZXR1cm4gQVNUOjpUeXBlQXJndW1lbnQobWFrZVVuaXF1ZVJlZjxBU1Q6OlR5
cGVSZWZlcmVuY2U+KGxvY2F0aW9uLCByZXN1bHQtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJp
bmcoKSwgQVNUOjpUeXBlQXJndW1lbnRzKCkpKTsKKyAgICByZXR1cm4gQVNUOjpUeXBlQXJndW1l
bnQoQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUobG9jYXRpb24sIHJlc3VsdC0+c3RyaW5nVmll
dyhtX2xleGVyKS50b1N0cmluZygpLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkpOwogfQogCiBhdXRv
IFBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnRzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpUeXBlQXJndW1l
bnRzLCBFcnJvcj4KQEAgLTUwNSw3ICs1MDUsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3Vm
Zml4Tm9uQWJicmV2aWF0CiAgICAgcmV0dXJuIHt7IHsgKnRva2VuIH0sICp0b2tlbiwgeyBhZGRy
ZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0IH19OwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VUeXBl
KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4KK2F1dG8g
UGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVy
cm9yPgogewogICAgIGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSB0cnlUeXBlczwKICAgICAgICAg
VG9rZW46OlR5cGU6OkNvbnN0YW50LApAQCAtNTMzLDIwICs1MzMsMjAgQEAgYXV0byBQYXJzZXI6
OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPFVuaQogICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0g
QVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCA9IFsmXShj
b25zdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB7CisgICAgICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRl
ZCA9IFsmXShjb25zdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCwgUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IFJlZjxBU1Q6OlVubmFtZWRU
eXBlPiB7CiAgICAgICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqYWRkcmVzc1Nw
YWNlVG9rZW4sIHR5cGVTdWZmaXhBYmJyZXZpYXRlZC5sb2NhdGlvbik7CiAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgICAgICBj
YXNlIFRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlx
dWVSZWY8QVNUOjpQb2ludGVyVHlwZT4obG9jYXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShw
cmV2aW91cykpIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpQb2ludGVyVHlwZTo6
Y3JlYXRlKGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMpKSB9OwogICAg
ICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4obG9j
YXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGU6OmNyZWF0ZShsb2NhdGlvbiwgYWRk
cmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50eXBlID09
IFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5VHlwZT4obG9jYXRpb24sIFdURk1vdmUocHJldmlv
dXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9OworICAgICAgICAgICAg
ICAgIHJldHVybiB7IEFTVDo6QXJyYXlUeXBlOjpjcmVhdGUobG9jYXRpb24sIFdURk1vdmUocHJl
dmlvdXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9OwogICAgICAgICAg
ICAgfQogICAgICAgICB9OwogICAgICAgICBQQVJTRShmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCwgVHlwZVN1ZmZpeEFiYnJldmlhdGVkKTsKLSAgICAgICAgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+IHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3Zl
KCphZGRyZXNzU3BhY2VUb2tlbiksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmco
KSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgICAgICBSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4gcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUoV1RGTW92ZSgqYWRkcmVzc1Nw
YWNlVG9rZW4pLCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUo
KnR5cGVBcmd1bWVudHMpKTsKICAgICAgICAgYXV0byBuZXh0ID0gY29uc3RydWN0VHlwZUZyb21T
dWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQsIFdURk1vdmUocmVz
dWx0KSk7CiAgICAgICAgIHJlc3VsdCA9IFdURk1vdmUobmV4dCk7CiAgICAgICAgIHdoaWxlICh0
cnVlKSB7CkBAIC01NjQsMTkgKzU2NCwxOSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4g
RXhwZWN0ZWQ8VW5pCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiAgICAgfQogCi0g
ICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNvbnN0
IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+IHsKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0
ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQsIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBSZWY8QVNUOjpV
bm5hbWVkVHlwZT4gewogICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqbmFtZSwg
dHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmxvY2F0aW9uKTsKICAgICAgICAgc3dpdGNoICh0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIFRva2VuOjpU
eXBlOjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihsb2NhdGlvbiwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2Us
IFdURk1vdmUocHJldmlvdXMpKSB9OworICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpQb2ludGVy
VHlwZTo6Y3JlYXRlKGxvY2F0aW9uLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NT
cGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlNx
dWFyZUJyYWNrZXRQYWlyOgotICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4obG9jYXRpb24sICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQu
YWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7
IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUobG9jYXRpb24sICp0eXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVCh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9r
ZW4udHlwZSA9PSBUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQpOwotICAgICAgICAgICAg
cmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5VHlwZT4obG9jYXRpb24sIFdURk1vdmUo
cHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9OworICAg
ICAgICAgICAgcmV0dXJuIHsgQVNUOjpBcnJheVR5cGU6OmNyZWF0ZShsb2NhdGlvbiwgV1RGTW92
ZShwcmV2aW91cyksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubnVtRWxlbWVudHMpIH07CiAg
ICAgICAgIH0KICAgICB9OwotICAgIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQg
PSBtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4oKm5hbWUsIG5hbWUtPnN0cmluZ1Zp
ZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIFJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OmNyZWF0ZSgq
bmFtZSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBl
QXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgUEVFSyhuZXh0VG9rZW4p
OwogICAgICAgICBpZiAobmV4dFRva2VuLT50eXBlICE9IFRva2VuOjpUeXBlOjpTdGFyCkBAIC04
MTQsMTIgKzgxNCwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24o
CiAgICAgQ09OU1VNRV9UWVBFKG9yaWdpbiwgRW51bSk7CiAgICAgQ09OU1VNRV9UWVBFKG5hbWUs
IElkZW50aWZpZXIpOwogCi0gICAgYXV0byB0eXBlID0gKFsmXSgpIC0+IEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKKyAgICBhdXRvIHR5cGUgPSAoWyZdKCkg
LT4gRXhwZWN0ZWQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gewogICAgICAgICBpZiAo
dHJ5VHlwZShUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgICAgICBQQVJTRShwYXJzZWRU
eXBlLCBUeXBlKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpwYXJzZWRUeXBlKTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5j
ZT4oKm9yaWdpbiwgImludCJfc3RyLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkgfTsKKyAgICAgICAg
cmV0dXJuIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUoKm9yaWdpbiwgImludCJfc3RyLCBB
U1Q6OlR5cGVBcmd1bWVudHMoKSkgfTsKICAgICB9KSgpOwogICAgIGlmICghdHlwZSkKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CkBAIC0xMjI4LDcgKzEy
MjgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VEb1doaWxlTG9vcCgpIC0+IEV4cGVjCiAgICAgcmV0
dXJuIEFTVDo6RG9XaGlsZUxvb3AoeyAqb3JpZ2luLCAqc2VtaWNvbG9ufSwgV1RGTW92ZSgqYm9k
eSksIFdURk1vdmUoKmNvbmRpdGlvbmFsKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVZhcmlh
YmxlRGVjbGFyYXRpb24oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkgLT4gRXhw
ZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4KK2F1dG8gUGFyc2VyOjpwYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb24oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkgLT4gRXhw
ZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4KIHsKICAgICBQRUVLKG9yaWdp
bik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFy
c2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQYXJzZXIuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDkgKzE3
MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBudW1FbGVtZW50czsK
ICAgICB9OwogICAgIEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgRXJyb3I+IHBh
cnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCk7Ci0gICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAgRXhw
ZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNz
U3BhY2VUeXBlKCk7Ci0gICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBF
cnJvcj4gcGFyc2VUeXBlKCk7CisgICAgRXhwZWN0ZWQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBF
cnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7CisgICAgRXhwZWN0ZWQ8UmVmPEFTVDo6VW5u
YW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7CisgICAgRXhwZWN0
ZWQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VUeXBlKCk7CiAgICAgRXhwZWN0
ZWQ8QVNUOjpUeXBlRGVmaW5pdGlvbiwgRXJyb3I+IHBhcnNlVHlwZURlZmluaXRpb24oKTsKICAg
ICBFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYywgRXJyb3I+IHBhcnNlQnVpbHRJblNlbWFu
dGljKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpSZXNvdXJjZVNlbWFudGljLCBFcnJvcj4gcGFyc2VS
ZXNvdXJjZVNlbWFudGljKCk7CkBAIC0yMDUsNyArMjA1LDcgQEAgcHJpdmF0ZToKICAgICBFeHBl
Y3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiBwYXJzZUZvckxvb3AoKTsKICAgICBFeHBlY3RlZDxB
U1Q6OldoaWxlTG9vcCwgRXJyb3I+IHBhcnNlV2hpbGVMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNU
OjpEb1doaWxlTG9vcCwgRXJyb3I+IHBhcnNlRG9XaGlsZUxvb3AoKTsKLSAgICBFeHBlY3RlZDxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mJik7CiAgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCwgRXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1
Miw3IEBACiAjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCiAjaW5jbHVk
ZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3Rvbmlj
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC02Myw2ICs2NCw3IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQWZ0ZXJQYXJz
aW4KIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRFbmQgPSBmYWxzZTsKIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzID0gZmFsc2U7CiBzdGF0aWMgY29u
c3RleHByIGJvb2wgZHVtcFBhc3NGYWlsdXJlID0gZHVtcEFTVEJlZm9yZUVhY2hQYXNzIHx8IGR1
bXBBU1RBZnRlclBhcnNpbmcgfHwgZHVtcEFTVEF0RW5kIHx8IGFsd2F5c0R1bXBQYXNzRmFpbHVy
ZXM7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBoYXNlVGltZXMgPSB0cnVlOwogCiBzdGF0
aWMgY29uc3RleHByIGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5ID0gZmFsc2U7CiAKQEAg
LTkyLDkgKzk0LDQ3IEBAIHN0YXRpYyBib29sIGR1bXBBU1RBdEVuZElmTmVlZGVkKFByb2dyYW0K
ICAgICByZXR1cm4gZHVtcEFTVElmTmVlZGVkKGR1bXBBU1RBdEVuZCwgcHJvZ3JhbSwgIkFTVCBh
dCBlbmQiKTsKIH0KIAordXNpbmcgUGhhc2VUaW1lcyA9IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5n
LCBTZWNvbmRzPj47CisKK3N0YXRpYyB2b2lkIGxvZ1BoYXNlVGltZXMoUGhhc2VUaW1lcyYgcGhh
c2VUaW1lcykKK3sKKyAgICBpZiAoIWR1bXBQaGFzZVRpbWVzKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogcGhhc2VUaW1lcykKKyAgICAgICAgZGF0YUxvZ0xuKGVu
dHJ5LmZpcnN0LCAiOiAiLCBlbnRyeS5zZWNvbmQubWlsbGlzZWNvbmRzKCksICIgbXMiKTsKK30K
KworY2xhc3MgUGhhc2VUaW1lciB7CitwdWJsaWM6CisgICAgUGhhc2VUaW1lcihjb25zdCBjaGFy
KiBwaGFzZU5hbWUsIFBoYXNlVGltZXMmIHBoYXNlVGltZXMpCisgICAgICAgIDogbV9waGFzZVRp
bWVzKHBoYXNlVGltZXMpCisgICAgeworICAgICAgICBpZiAoZHVtcFBoYXNlVGltZXMpIHsKKyAg
ICAgICAgICAgIG1fcGhhc2VOYW1lID0gcGhhc2VOYW1lOworICAgICAgICAgICAgbV9zdGFydCA9
IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICB9CisgICAgfQorCisgICAgflBoYXNlVGlt
ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKGR1bXBQaGFzZVRpbWVzKSB7CisgICAgICAgICAgICBh
dXRvIHRvdGFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9zdGFydDsKKyAgICAgICAg
ICAgIG1fcGhhc2VUaW1lcy5hcHBlbmQoeyBtX3BoYXNlTmFtZSwgdG90YWxUaW1lIH0pOworICAg
ICAgICB9CisgICAgfQorCisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fcGhhc2VOYW1lOworICAg
IFBoYXNlVGltZXMmIG1fcGhhc2VUaW1lczsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnQ7Cit9
OworCiAjZGVmaW5lIENIRUNLX1BBU1MocGFzcywgLi4uKSBcCiAgICAgZG8geyBcCiAgICAgICAg
IGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFtLCAiQVNUIGJlZm9yZSAiICMg
cGFzcyk7IFwKKyAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCNwYXNzLCBwaGFzZVRpbWVz
KTsgXAogICAgICAgICBpZiAoIXBhc3MoX19WQV9BUkdTX18pKSB7IFwKICAgICAgICAgICAgIGlm
IChkdW1wUGFzc0ZhaWx1cmUpIFwKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCBw
YXNzOiAiICMgcGFzcyk7IFwKQEAgLTEwNCwyMCArMTQ0LDI5IEBAIHN0YXRpYyBib29sIGR1bXBB
U1RBdEVuZElmTmVlZGVkKFByb2dyYW0KIAogI2RlZmluZSBSVU5fUEFTUyhwYXNzLCAuLi4pIFwK
ICAgICBkbyB7IFwKKyAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCNwYXNzLCBwaGFzZVRp
bWVzKTsgXAogICAgICAgICBkdW1wQVNUQmV0d2VlbkVhY2hQYXNzSWZOZWVkZWQocHJvZ3JhbSwg
IkFTVCBiZWZvcmUgIiAjIHBhc3MpOyBcCiAgICAgICAgIHBhc3MoX19WQV9BUkdTX18pOyBcCiAg
ICAgfSB3aGlsZSAoMCkKIAotc3RhdGljIE9wdGlvbmFsPFByb2dyYW0+IHByZXBhcmVTaGFyZWQo
U3RyaW5nJiB3aGxzbFNvdXJjZSkKK3N0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hh
cmVkKFBoYXNlVGltZXMmIHBoYXNlVGltZXMsIFN0cmluZyYgd2hsc2xTb3VyY2UpCiB7CiAgICAg
UHJvZ3JhbSBwcm9ncmFtOwogICAgIFBhcnNlciBwYXJzZXI7Ci0gICAgaWYgKGF1dG8gcGFyc2VG
YWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzZXI6Ok1vZGU6
OlVzZXIpKSB7Ci0gICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpCi0gICAgICAgICAgICBkYXRh
TG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgKnBhcnNlRmFpbHVyZSk7Ci0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICB7CisgICAgICAgIFBoYXNlVGltZXIg
cGhhc2VUaW1lcigicGFyc2UiLCBwaGFzZVRpbWVzKTsKKyAgICAgICAgaWYgKGF1dG8gcGFyc2VG
YWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzZXI6Ok1vZGU6
OlVzZXIpKSB7CisgICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCAqcGFyc2VGYWls
dXJlKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB7CisgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigiaW5jbHVkZVN0YW5kYXJk
TGlicmFyeSIsIHBoYXNlVGltZXMpOworICAgICAgICBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KHBy
b2dyYW0sIHBhcnNlciwgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5KTsKICAgICB9Ci0gICAgaW5j
bHVkZVN0YW5kYXJkTGlicmFyeShwcm9ncmFtLCBwYXJzZXIsIHBhcnNlRnVsbFN0YW5kYXJkTGli
cmFyeSk7CiAKICAgICBpZiAoIWR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFt
LCAiQVNUIGFmdGVyIHBhcnNpbmciKSkKICAgICAgICAgZHVtcEFTVEFmdGVyUGFyc2luZ0lmTmVl
ZGVkKHByb2dyYW0pOwpAQCAtMTUxLDE0ICsyMDAsMzAgQEAgc3RhdGljIE9wdGlvbmFsPFByb2dy
YW0+IHByZXBhcmVTaGFyZWQoUwogCiBPcHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVw
YXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKQogewotICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQo
d2hsc2xTb3VyY2UpOwotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICBhdXRvIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3Jh
bSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKLSAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3Mp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgUGhhc2VUaW1lcyBwaGFzZVRpbWVz
OworICAgIE1ldGFsOjpSZW5kZXJNZXRhbENvZGUgZ2VuZXJhdGVkQ29kZTsKIAotICAgIGF1dG8g
Z2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92
ZSgqbWF0Y2hlZFNlbWFudGljcyksIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQpOwor
ICAgIHsKKyAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJwcmVwYXJlIHRvdGFsIiwgcGhh
c2VUaW1lcyk7CisgICAgICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1l
cywgd2hsc2xTb3VyY2UpOworICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIE9wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1hbnRp
Y3M+IG1hdGNoZWRTZW1hbnRpY3M7CisgICAgICAgIHsKKyAgICAgICAgICAgIFBoYXNlVGltZXIg
cGhhc2VUaW1lcigibWF0Y2hTZW1hbnRpY3MiLCBwaGFzZVRpbWVzKTsKKyAgICAgICAgICAgIG1h
dGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgeworICAg
ICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJnZW5lcmF0ZU1ldGFsQ29kZSIsIHBoYXNl
VGltZXMpOworICAgICAgICAgICAgZ2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFs
Q29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNlbWFudGljcyksIHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvci5sYXlvdXQpOworICAgICAgICB9CisgICAgfQorCisgICAgbG9nUGhhc2VUaW1l
cyhwaGFzZVRpbWVzKTsKIAogICAgIFJlbmRlclByZXBhcmVSZXN1bHQgcmVzdWx0OwogICAgIHJl
c3VsdC5tZXRhbFNvdXJjZSA9IFdURk1vdmUoZ2VuZXJhdGVkQ29kZS5tZXRhbFNvdXJjZSk7CkBA
IC0xNjksMTcgKzIzNCwzOCBAQCBPcHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJl
KFN0CiAKIE9wdGlvbmFsPENvbXB1dGVQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hs
c2xTb3VyY2UsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IpCiB7Ci0gICAgYXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZCh3aGxzbFNvdXJjZSk7
Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1
dG8gbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKLSAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3MpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byBjb21wdXRlRGltZW5zaW9ucyA9IFdITFNMOjpj
b21wdXRlRGltZW5zaW9ucygqcHJvZ3JhbSwgKm1hdGNoZWRTZW1hbnRpY3MtPnNoYWRlcik7Ci0g
ICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBQaGFzZVRpbWVzIHBoYXNlVGltZXM7CisgICAgTWV0YWw6OkNvbXB1dGVNZXRhbENvZGUg
Z2VuZXJhdGVkQ29kZTsKKyAgICBPcHRpb25hbDxDb21wdXRlRGltZW5zaW9ucz4gY29tcHV0ZURp
bWVuc2lvbnM7CisKKyAgICB7CisgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigicHJlcGFy
ZSB0b3RhbCIsIHBoYXNlVGltZXMpOworICAgICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hh
cmVkKHBoYXNlVGltZXMsIHdobHNsU291cmNlKTsKKyAgICAgICAgaWYgKCFwcm9ncmFtKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxNYXRjaGVk
Q29tcHV0ZVNlbWFudGljcz4gbWF0Y2hlZFNlbWFudGljczsKKyAgICAgICAgeworICAgICAgICAg
ICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJtYXRjaFNlbWFudGljcyIsIHBoYXNlVGltZXMpOwor
ICAgICAgICAgICAgbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBj
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFu
dGljcykKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisK
KyAgICAgICAgeworICAgICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJjb21wdXRlRGlt
ZW5zaW9ucyIsIHBoYXNlVGltZXMpOworICAgICAgICAgICAgY29tcHV0ZURpbWVuc2lvbnMgPSBX
SExTTDo6Y29tcHV0ZURpbWVuc2lvbnMoKnByb2dyYW0sICptYXRjaGVkU2VtYW50aWNzLT5zaGFk
ZXIpOworICAgICAgICAgICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAg
ICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJnZW5lcmF0ZU1ldGFsQ29kZSIsIHBoYXNlVGltZXMp
OworICAgICAgICAgICAgZ2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgq
cHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNlbWFudGljcyksIGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IubGF5b3V0KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGF1dG8gZ2VuZXJhdGVkQ29k
ZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNl
bWFudGljcyksIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKKyAgICBsb2dQaGFz
ZVRpbWVzKHBoYXNlVGltZXMpOwogCiAgICAgQ29tcHV0ZVByZXBhcmVSZXN1bHQgcmVzdWx0Owog
ICAgIHJlc3VsdC5tZXRhbFNvdXJjZSA9IFdURk1vdmUoZ2VuZXJhdGVkQ29kZS5tZXRhbFNvdXJj
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNl
cnZlVmFyaWFibGVMaWZldGltZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAJKHJl
dmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5
ICsxMDAsOSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBUb2tlbiBhbm9ueW1vdXNUb2tlCiBjbGFz
cyBQcmVzZXJ2ZUxpZmV0aW1lcyA6IHB1YmxpYyBWaXNpdG9yIHsKICAgICB1c2luZyBCYXNlID0g
VmlzaXRvcjsKIHB1YmxpYzoKLSAgICBQcmVzZXJ2ZUxpZmV0aW1lcyhVbmlxdWVSZWY8QVNUOjpU
eXBlUmVmZXJlbmNlPiYgc3RydWN0VHlwZSwgY29uc3QgSGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24qLCBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqPiYgdmFyaWFibGVNYXBwaW5nKQotICAg
ICAgICA6IG1fc3RydWN0VHlwZShzdHJ1Y3RUeXBlKQotICAgICAgICAsIG1fcG9pbnRlclRvU3Ry
dWN0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGFub255bW91c1Rva2VuKFRv
a2VuOjpUeXBlOjpJZGVudGlmaWVyKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgbV9zdHJ1
Y3RUeXBlLT5jbG9uZSgpKSkKKyAgICBQcmVzZXJ2ZUxpZmV0aW1lcyhSZWY8QVNUOjpUeXBlUmVm
ZXJlbmNlPiBzdHJ1Y3RUeXBlLCBjb25zdCBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biosIEFTVDo6U3RydWN0dXJlRWxlbWVudCo+JiB2YXJpYWJsZU1hcHBpbmcpCisgICAgICAgIDog
bV9zdHJ1Y3RUeXBlKFdURk1vdmUoc3RydWN0VHlwZSkpCisgICAgICAgICwgbV9wb2ludGVyVG9T
dHJ1Y3RUeXBlKEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0ZShhbm9ueW1vdXNUb2tlbihUb2tlbjo6
VHlwZTo6SWRlbnRpZmllciksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIG1fc3RydWN0VHlw
ZS0+Y2xvbmUoKSkpCiAgICAgICAgICwgbV92YXJpYWJsZU1hcHBpbmcodmFyaWFibGVNYXBwaW5n
KQogICAgIHsgfQogCkBAIC0yMzYsOCArMjM2LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIG1fc3RydWN0VmFyaWFibGUgeyBudWxscHRyIH07CiAK
LSAgICBVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgbV9zdHJ1Y3RUeXBlOwotICAgIFVu
aXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPiBtX3BvaW50ZXJUb1N0cnVjdFR5cGU7CisgICAgUmVm
PEFTVDo6VHlwZVJlZmVyZW5jZT4gbV9zdHJ1Y3RUeXBlOworICAgIFJlZjxBU1Q6OlBvaW50ZXJU
eXBlPiBtX3BvaW50ZXJUb1N0cnVjdFR5cGU7CiAgICAgLy8gSWYgdGhpcyBtYXBwaW5nIGNvbnRh
aW5zIHRoZSB2YXJpYWJsZSwgaXQgbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUncyBjYW5vbmljYWwg
bG9jYXRpb24KICAgICAvLyBpcyBpbiB0aGUgc3RydWN0IHdlIHVzZSB0byBwcmVzZXJ2ZSB2YXJp
YWJsZSBsaWZldGltZXMuCiAgICAgY29uc3QgSGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24qLCBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqPiYgbV92YXJpYWJsZU1hcHBpbmc7CkBAIC0yNzEs
NyArMjcxLDcgQEAgdm9pZCBwcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzKFByb2dyYW0mIAogCiAg
ICAgewogICAgICAgICBhdXRvIHdyYXBwZXJTdHJ1Y3RUeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGFub255bW91c1Rva2VuKFRva2VuOjpUeXBlOjpJZGVudGlmaWVyKSwgd3JhcHBlclN0
cnVjdERlZmluaXRpb24pOwotICAgICAgICBQcmVzZXJ2ZUxpZmV0aW1lcyBwcmVzZXJ2ZUxpZmV0
aW1lcyh3cmFwcGVyU3RydWN0VHlwZSwgdmFyaWFibGVNYXBwaW5nKTsKKyAgICAgICAgUHJlc2Vy
dmVMaWZldGltZXMgcHJlc2VydmVMaWZldGltZXMoV1RGTW92ZSh3cmFwcGVyU3RydWN0VHlwZSks
IHZhcmlhYmxlTWFwcGluZyk7CiAgICAgICAgIHByZXNlcnZlTGlmZXRpbWVzLlZpc2l0b3I6OnZp
c2l0KHByb2dyYW0pOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCShy
ZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxNCArOTgsMTQg
QEAgc3RydWN0IEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0IHsKIH07CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBFeHByZXNzaW9uQ29uc3RydWN0b3IsIHR5cGVuYW1lIFR5cGVDb25zdHJ1Y3Rvcj4KLXN0
YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4gd3JhcEFuZGVyQ2FsbEFyZ3Vt
ZW50KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4gYmFzZVR5cGUsIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0aHJlYWRB
bmRlckZ1bmN0aW9uKQorc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiB3
cmFwQW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Np
b24sIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiBiYXNlVHlwZSwgYm9vbCBhbmRlckZ1bmN0aW9uLCBi
b29sIHRocmVhZEFuZGVyRnVuY3Rpb24pCiB7CiAgICAgYXV0byBsb2NhdGlvbiA9IGV4cHJlc3Np
b24tPmNvZGVMb2NhdGlvbigpOwogICAgIGlmIChhdXRvIGFkZHJlc3NTcGFjZSA9IGV4cHJlc3Np
b24tPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKSB7CiAgICAgICAgIGlmICgh
YW5kZXJGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IGF1dG8gbWFrZUFycmF5UmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxFeHByZXNzaW9uQ29uc3Ry
dWN0b3I+KGxvY2F0aW9uLCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKLSAgICAgICAgbWFrZUFycmF5
UmVmZXJlbmNlLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZUNvbnN0cnVjdG9yPihsb2NhdGlv
biwgKmFkZHJlc3NTcGFjZSwgV1RGTW92ZShiYXNlVHlwZSkpKTsKKyAgICAgICAgbWFrZUFycmF5
UmVmZXJlbmNlLT5zZXRUeXBlKFR5cGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGxvY2F0aW9uLCAqYWRk
cmVzc1NwYWNlLCBXVEZNb3ZlKGJhc2VUeXBlKSkpOwogICAgICAgICBtYWtlQXJyYXlSZWZlcmVu
Y2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
IHt7IFdURk1vdmUobWFrZUFycmF5UmVmZXJlbmNlKSwgV1RGOjpudWxsb3B0LCBXaGljaEFuZGVy
OjpBbmRlciB9fTsKICAgICB9CkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIE9wdGlvbmFsPEFu
ZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PgogICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9
KTsKIAogICAgICAgICBhdXRvIGV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Npb25D
b25zdHJ1Y3Rvcj4obG9jYXRpb24sIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7Ci0gICAg
ICAgIGF1dG8gcmVzdWx0VHlwZSA9IG1ha2VVbmlxdWVSZWY8VHlwZUNvbnN0cnVjdG9yPihsb2Nh
dGlvbiwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgV1RGTW92ZShiYXNlVHlwZSkpOworICAg
ICAgICBhdXRvIHJlc3VsdFR5cGUgPSBUeXBlQ29uc3RydWN0b3I6OmNyZWF0ZShsb2NhdGlvbiwg
QVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgV1RGTW92ZShiYXNlVHlwZSkpOwogICAgICAgICBl
eHByZXNzaW9uLT5zZXRUeXBlKHJlc3VsdFR5cGUtPmNsb25lKCkpOwogICAgICAgICBleHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKQEAgLTMxNyw3ICsz
MTcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAgICAgQVNU
OjpFeHByZXNzaW9uJiBpbm5lckxlZnRFeHByZXNzaW9uID0gbGVmdEV4cHJlc3Npb247CiAKICAg
ICAvLyBDcmVhdGUgInAiIHZhcmlhYmxlLgotICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxlZnRFeHByZXNzaW9uLT5jb2Rl
TG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PihtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGxlZnRFeHByZXNzaW9uLT5jb2RlTG9j
YXRpb24oKSwgKmxlZnRFeHByZXNzaW9uLT50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3Bh
Y2UoKSwgbGVmdEV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25lKCkpKSwgU3RyaW5nKCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxlZnRFeHByZXNzaW9uLT5jb2RlTG9jYXRp
b24oKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0ZShsZWZ0RXhw
cmVzc2lvbi0+Y29kZUxvY2F0aW9uKCksICpsZWZ0RXhwcmVzc2lvbi0+dHlwZUFubm90YXRpb24o
KS5sZWZ0QWRkcmVzc1NwYWNlKCksIGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKS5jbG9u
ZSgpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwogCiAgICAgLy8gQ3JlYXRlICJxIiBh
bmQgInIiIHZhcmlhYmxlcy4KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4+IGludGVybWVkaWF0ZVZhcmlhYmxlczsKQEAgLTM2Myw3ICszNjMsNyBAQCBzdGF0
aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAgICAgLy8gU3RlcCAxOgogICAg
IHsKICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihpbm5lckxlZnRFeHByZXNzaW9uLmNvZGVMb2NhdGlv
bigpLCBXVEZNb3ZlKGxlZnRFeHByZXNzaW9uKSk7Ci0gICAgICAgIG1ha2VQb2ludGVyRXhwcmVz
c2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGlubmVyTGVmdEV4
cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICppbm5lckxlZnRFeHByZXNzaW9uLnR5cGVBbm5vdGF0
aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpLCBpbm5lckxlZnRFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpLmNsb25lKCkpKTsKKyAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKEFT
VDo6UG9pbnRlclR5cGU6OmNyZWF0ZShpbm5lckxlZnRFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
LCAqaW5uZXJMZWZ0RXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2Uo
KSwgaW5uZXJMZWZ0RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKSk7CiAgICAgICAg
IG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOwogCiAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRl
clZhcmlhYmxlKSk7CkBAIC01NjgsOSArNTY4LDkgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2
aXNpdChBU1Q6OlJlYWRNbwogICAgICAgICBzaW1wbGlmeUxlZnRWYWx1ZShyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIAogICAgICAgICBhdXRvIGJhc2VUeXBlID0gcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgp
OwotICAgICAgICBhdXRvIHBvaW50ZXJUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihsZWZ0VmFsdWVMb2NhdGlvbiwgKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCksIGJhc2VUeXBlLT5jbG9u
ZSgpKTsKKyAgICAgICAgYXV0byBwb2ludGVyVHlwZSA9IEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0
ZShsZWZ0VmFsdWVMb2NhdGlvbiwgKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVl
KCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCksIGJhc2VUeXBlLT5jbG9uZSgp
KTsKIAotICAgICAgICBhdXRvIHBvaW50ZXJWYXJpYWJsZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihsZWZ0VmFsdWVMb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCks
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihwb2ludGVyVHlwZS0+Y2xvbmUoKSksIFN0cmlu
ZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgYXV0byBwb2ludGVyVmFyaWFibGUgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obGVmdFZhbHVlTG9jYXRpb24s
IEFTVDo6UXVhbGlmaWVycygpLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIG51bGxw
dHIsIG51bGxwdHIpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gZXhwcmVzc2lvbnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAko
cmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5jCiB7CiAgICAgdW5z
aWduZWQgY29udmVyc2lvbkNvc3QgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2Fu
ZGlkYXRlLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBjb252ZXJzaW9uQ29z
dCArPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAgY29udmVy
c2lvbkNvc3QgKz0gYXJndW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShSZWY8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiB1bnNpZ25lZCB7CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiB1bnNpZ25lZCB7CiAgICAgICAgICAgICByZXR1
cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVyc2lvbkNv
c3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5
cGUuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEyICs4MCwx
MiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFJlc29sdmluZ1R5cGUoVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiYgdikKKyAgICBSZXNvbHZpbmdUeXBlKFJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB2KQogICAgICAgICA6IG1faW5uZXIoV1RGTW92ZSh2KSkKICAgICB7CiAgICAgfQog
Ci0gICAgUmVzb2x2aW5nVHlwZShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgdikK
KyAgICBSZXNvbHZpbmdUeXBlKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4gdikKICAg
ICAgICAgOiBtX2lubmVyKFdURk1vdmUodikpCiAgICAgewogICAgIH0KQEAgLTEwNSwxOCArMTA1
LDE4IEBAIHB1YmxpYzoKIAogICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRUeXBlKCkK
ICAgICB7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4obV9pbm5lcikpCi0gICAgICAgICAgICByZXR1cm4gJldURjo6Z2V0PFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcik7CisgICAgICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcikpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpnZXQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKS5wdHIo
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikgLT4gZGVjbHR5
cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+Jj4oKSkpCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlzaXRvciYg
dmlzaXRvcikgLT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFy
aWFudDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4+Jj4oKSkpCiAgICAgewogICAgICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2lu
bmVyKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmFyaWFudDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+IG1faW5uZXI7CisgICAg
VmFyaWFudDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4+IG1faW5uZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0
cnVjdG9ycy5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBib29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3Jh
bSYgcHJvCiAKICAgICAgICAgYXV0byBsb2NhdGlvbiA9IG5hbWVkVHlwZS5nZXQoKS5jb2RlTG9j
YXRpb24oKTsKIAotICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygp
LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxv
Y2F0aW9uLCBuYW1lZFR5cGUuZ2V0KCkpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwor
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5hbWVkVHlwZS5nZXQoKSksIFN0cmluZygpLCBudWxs
cHRyLCBudWxscHRyKTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0
ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1
Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5h
bWVkVHlwZS5nZXQoKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyks
IG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCBib29sIHN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9nCiAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRl
ZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBh
dXRvIGxvY2F0aW9uID0gZW51bWVyYXRpb25EZWZpbml0aW9uLT5jb2RlTG9jYXRpb24oKTsKICAg
ICAgICAgewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJz
KCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
bG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVs
bHB0cik7Ci0gICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMo
KSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChs
b2NhdGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygp
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlv
biksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbjIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
bG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9j
YXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRy
KTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEp
KTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJh
dGlvbjIpKTsKQEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMoUHJvZwogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byB2YXJp
YWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9u
KSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihs
b2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2Nh
dGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIp
OwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUo
KS5jbG9uZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVs
bHB0ciwgaXNPcGVyYXRvcikpOwpAQCAtNjIsNyArNjIsNyBAQCBib29sIHN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucyhQcm9nCiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlv
bkRlZmluaXRpb24pKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlv
biwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+dHlwZSgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1l
dGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKQEAgLTc0LDcgKzc0LDcgQEAgYm9vbCBzeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZwogICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxv
Y2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCku
Y2xvbmUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0
ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOworICAgICAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBw
ZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTEgQEAgYm9vbCBzeW50aGVzaXpl
U3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYQogICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVs
ZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAg
ICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAogICAgICAgICAgICAgYXV0byBj
cmVhdGVBbmRlciA9IFsmXShBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpIC0+IEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0gICAgICAgICAgICAgICAgYXV0byBhcmd1bWVu
dFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KHN0cnVjdHVyZUVsZW1lbnQu
Y29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKHN0
cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIHN0cnVjdHVyZURlZmluaXRpb24pKTsKLSAg
ICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwg
QVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFy
Z3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgYXV0byBhcmd1bWVudFR5cGUgPSBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUoc3RydWN0dXJl
RWxlbWVudC5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgc3RydWN0dXJlRGVmaW5pdGlv
bikpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihzdHJ1Y3R1cmVFbGVtZW50LmNvZGVMb2Nh
dGlvbigpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1bWVudFR5cGUpLCBTdHJpbmco
KSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAgICAgICAgICAgICAgIGF1dG8gcmV0dXJu
VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oc3RydWN0dXJlRWxlbWVudC5j
b2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9u
ZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlBvaW50ZXJUeXBl
OjpjcmVhdGUoc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBz
dHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKICAgICAgICAgICAgICAgICBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24oc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIG1ha2VT
dHJpbmcoIm9wZXJhdG9yJi4iLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSksIFdURk1vdmUocGFy
YW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKICAgICAgICAgICAgIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAJ
KHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0CiB7CiAgICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHBy
ZXNzaW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjb25zdGFudEV4cHJlc3Npb24p
OwotICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5j
ZSkgeworICAgIH0sIFsmXShSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkg
ewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZVJlZmVyZW5jZSk7CiAgICAgfSksIHR5
cGVBcmd1bWVudCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaAkocmV2aXNpb24gMjQ3
NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRk
cmVzc1NwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCiAjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcw
LDYgKzcxLDcgQEAgc3RydWN0IFJpZ2h0VmFsdWUgewogCiAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE1OCBUaGlzIHdyYXBwZXIgbWlnaHQgbm90
IGJlIG5lY2Vzc2FyeS4KIGNsYXNzIFR5cGVBbm5vdGF0aW9uIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBUeXBlQW5ub3RhdGlvbigpCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgJKHJldmlzaW9u
IDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgi
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM5LDEyICs0MCwxOCBAQCBu
YW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEFycmF5UmVmZXJlbmNl
VHlwZSA6IHB1YmxpYyBSZWZlcmVuY2VUeXBlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICB1c2luZyBCYXNlID0gUmVmZXJlbmNlVHlwZTsKLXB1YmxpYzoKLSAgICBBcnJheVJl
ZmVyZW5jZVR5cGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1Nw
YWNlLCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgZWxlbWVudFR5cGUpCisKKyAgICBBcnJheVJl
ZmVyZW5jZVR5cGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1Nw
YWNlLCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlKQogICAgICAgICA6IEJhc2UobG9jYXRp
b24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFycmF5UmVmZXJlbmNlVHlwZT4gY3JlYXRlKENvZGVMb2Nh
dGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRUeXBl
PiBlbGVtZW50VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFycmF5
UmVmZXJlbmNlVHlwZShsb2NhdGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKGVsZW1lbnRUeXBl
KSkpOworICAgIH0KIAogICAgIHZpcnR1YWwgfkFycmF5UmVmZXJlbmNlVHlwZSgpID0gZGVmYXVs
dDsKIApAQCAtNTMsMTAgKzYwLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNBcnJheVJlZmVy
ZW5jZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBVbmlxdWVS
ZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmPEFycmF5UmVmZXJlbmNlVHlwZT4oY29kZUxvY2F0aW9uKCksIGFk
ZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOwotICAgIH0KKyAgICAvL1VuaXF1
ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQorICAgIC8veworICAgIC8v
ICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFycmF5UmVmZXJlbmNlVHlwZT4oY29kZUxvY2F0aW9u
KCksIGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgIC8vfQogCiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlU
eXBlLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50
LmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkBAIC00MCwxMyArNDEsMTkgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVz
cGFjZSBBU1QgewogCiBjbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewotcHVi
bGljOgotICAgIEFycmF5VHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxVbm5h
bWVkVHlwZT4mJiBlbGVtZW50VHlwZSwgdW5zaWduZWQgbnVtRWxlbWVudHMpCisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgQXJyYXlUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwg
UmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSwgdW5zaWduZWQgbnVtRWxlbWVudHMpCiAgICAg
ICAgIDogVW5uYW1lZFR5cGUobG9jYXRpb24pCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShXVEZN
b3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRzKQog
ICAgIHsKICAgICB9CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUmVmPEFycmF5VHlwZT4gY3JlYXRl
KENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSwgdW5z
aWduZWQgbnVtRWxlbWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBB
cnJheVR5cGUobG9jYXRpb24sIFdURk1vdmUoZWxlbWVudFR5cGUpLCBudW1FbGVtZW50cykpOwor
ICAgIH0KIAogICAgIHZpcnR1YWwgfkFycmF5VHlwZSgpID0gZGVmYXVsdDsKIApAQCAtNTksMTAg
KzY2LDEwIEBAIHB1YmxpYzoKICAgICBVbm5hbWVkVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fZWxl
bWVudFR5cGU7IH0KICAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtRWxlbWVudHM7IH0KIAotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXJyYXlUeXBl
Pihjb2RlTG9jYXRpb24oKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7
Ci0gICAgfQorICAgIC8vVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgLy97CisgICAgLy8gICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXJyYXlUeXBlPihj
b2RlTG9jYXRpb24oKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7Cisg
ICAgLy99CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CkBAIC03
OSw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPFVu
bmFtZWRUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV9lbGVtZW50
VHlwZTsKICAgICB1bnNpZ25lZCBtX251bUVsZW1lbnRzOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEV4
cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1Qgewog
CiBjbGFzcyBBc3NpZ25tZW50RXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBBc3NpZ25tZW50RXhwcmVzc2lv
bihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnQsIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiYmIHJpZ2h0KQogICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRp
b24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xC
YXNlRnVuY3Rpb25BdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaAkocmV2aXNp
b24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNiAr
MzcsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEJhc2VG
dW5jdGlvbkF0dHJpYnV0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgQmFzZUZ1bmN0aW9uQXR0cmlidXRlKENvZGVMb2NhdGlvbiBsb2NhdGlvbikKICAgICAg
ICAgOiBtX2NvZGVMb2NhdGlvbihsb2NhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5o
CShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xCYXNlU2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogCiAjaW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5oIgogI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Myw2ICs0NCw3IEBAIGNsYXNzIEZ1bmN0
aW9uRGVmaW5pdGlvbjsKIGNsYXNzIFVubmFtZWRUeXBlOwogCiBjbGFzcyBCYXNlU2VtYW50aWMg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEJhc2VTZW1hbnRp
YyhDb2RlTG9jYXRpb24gbG9jYXRpb24pCiAgICAgICAgIDogbV9jb2RlTG9jYXRpb24obG9jYXRp
b24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEJsb2NrLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICszOSw3IEBAIG5hbWVzcGFj
ZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQmxvY2sgOiBwdWJsaWMgU3RhdGVt
ZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBCbG9jayhD
b2RlTG9jYXRpb24gbG9jYXRpb24sIFN0YXRlbWVudHMmJiBzdGF0ZW1lbnRzKQogICAgICAgICA6
IFN0YXRlbWVudChsb2NhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQm9vbGVhbkxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzcsNiArMzgsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IEJvb2xlYW5MaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIEJvb2xlYW5MaXRlcmFsKENvZGVMb2NhdGlvbiBsb2Nh
dGlvbiwgYm9vbCB2YWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKGxvY2F0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnJlYWsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xC
cmVhay5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xCcmVhay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM3LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFz
cyBCcmVhayA6IHB1YmxpYyBTdGF0ZW1lbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEJyZWFrKENvZGVMb2NhdGlvbiBsb2NhdGlvbikKICAgICAgICAgOiBT
dGF0ZW1lbnQobG9jYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQnVpbHRJblNlbWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
IAogI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNM
IHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBCdWlsdEluU2VtYW50aWMgOiBwdWJsaWMgQmFz
ZVNlbWFudGljIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBl
bnVtIGNsYXNzIFZhcmlhYmxlIDogdWludDhfdCB7CiAgICAgICAgIFNWSW5zdGFuY2VJRCwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHBy
ZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNiArNDIsNyBAQCBuYW1l
c3BhY2UgQVNUIHsKIGNsYXNzIE5hbWVkVHlwZTsKIAogY2xhc3MgQ2FsbEV4cHJlc3Npb24gOiBw
dWJsaWMgRXhwcmVzc2lvbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgQ2FsbEV4cHJlc3Npb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1l
LCBWZWN0b3I8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYmIGFyZ3VtZW50cykKICAgICAgICAgOiBF
eHByZXNzaW9uKGxvY2F0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQ29tbWFFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29tbWFFeHByZXNzaW9uLmgJKHJl
dmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTENvbW1hRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgi
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zOSw2ICs0MCw3IEBAIG5hbWVzcGFjZSBX
SExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQ29tbWFFeHByZXNzaW9uIDogcHVibGlj
IEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IENvbW1hRXhwcmVzc2lvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFZlY3RvcjxVbmlxdWVSZWY8
RXhwcmVzc2lvbj4+JiYgbGlzdCkKICAgICAgICAgOiBFeHByZXNzaW9uKGxvY2F0aW9uKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRF
eHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhw
cmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV0hM
U0xJbnRlZ2VyTGl0ZXJhbC5oIgogI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKICNpbmNs
dWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ1LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAvLyBzbyB0aGlzIGlzIGEgd3JhcHBl
ciBjbGFzcyB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4gQXMgc29vbiBhcyB3ZSBk
b24ndAogLy8gaGF2ZSB0byBzdXBwb3J0IFNpZXJyYSwgdGhpcyBjYW4gYmUgbWlncmF0ZWQgdG8g
YSBWYXJpYW50IHByb3Blci4KIGNsYXNzIENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uKEludGVn
ZXJMaXRlcmFsJiYgaW50ZWdlckxpdGVyYWwpCiAgICAgICAgIDogbV92YXJpYW50KFdURk1vdmUo
aW50ZWdlckxpdGVyYWwpKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ29udGludWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb250aW51ZS5oCShyZXZpc2lvbiAyNDc3OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb250aW51ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTExleGVy
LmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDYgKzM4LDcgQEAgbmFtZXNwYWNl
IFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBDb250aW51ZSA6IHB1YmxpYyBTdGF0
ZW1lbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIENvbnRp
bnVlKENvZGVMb2NhdGlvbiBsb2NhdGlvbikKICAgICAgICAgOiBTdGF0ZW1lbnQobG9jYXRpb24p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEZXJl
ZmVyZW5jZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaAkocmV2aXNpb24g
MjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RGVyZWZlcmVuY2VFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
IAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArMzksNyBAQCBuYW1lc3BhY2UgV0hMU0wg
ewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIERlcmVmZXJlbmNlRXhwcmVzc2lvbiA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBEZXJlZmVyZW5jZUV4cHJlc3Npb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBVbmlxdWVSZWY8
RXhwcmVzc2lvbj4mJiBwb2ludGVyKQogICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRpb24pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb1doaWxl
TG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTERvV2hpbGVMb29wLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvV2hpbGVMb29wLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNp
bmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksNiArNDAsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFt
ZXNwYWNlIEFTVCB7CiAKIGNsYXNzIERvV2hpbGVMb29wIDogcHVibGljIFN0YXRlbWVudCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRG9XaGlsZUxvb3AoQ29k
ZUxvY2F0aW9uIGxvY2F0aW9uLCBVbmlxdWVSZWY8U3RhdGVtZW50PiYmIGJvZHksIFVuaXF1ZVJl
ZjxFeHByZXNzaW9uPiYmIGNvbmRpdGlvbmFsKQogICAgICAgICA6IFN0YXRlbWVudChsb2NhdGlv
bikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERv
dEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgogI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIApAQCAtMzksNiArNDAsNyBAQCBuYW1l
c3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIERvdEV4cHJlc3Npb24gOiBw
dWJsaWMgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICBEb3RFeHByZXNzaW9uKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwg
VW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgYmFzZSwgU3RyaW5nJiYgZmllbGROYW1lKQogICAgICAg
ICA6IFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihsb2NhdGlvbiwgV1RGTW92ZShiYXNlKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgJ
KHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zOSw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCA6IHB1YmxpYyBTdGF0
ZW1lbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEVmZmVj
dGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQoVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgZWZmZWN0ZnVs
RXhwcmVzc2lvbikKICAgICAgICAgOiBTdGF0ZW1lbnQoZWZmZWN0ZnVsRXhwcmVzc2lvbi0+Y29k
ZUxvY2F0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24u
aAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNM
VW5uYW1lZFR5cGUuaCIKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00NSw4ICs0Niw5IEBAIG5hbWVzcGFjZSBX
SExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uIDog
cHVibGljIE5hbWVkVHlwZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgRW51bWVyYXRpb25EZWZpbml0aW9uKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgU3RyaW5n
JiYgbmFtZSwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgRW51bWVyYXRpb25E
ZWZpbml0aW9uKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgU3RyaW5nJiYgbmFtZSwgUmVmPFVubmFt
ZWRUeXBlPiB0eXBlKQogICAgICAgICA6IE5hbWVkVHlwZShsb2NhdGlvbiwgV1RGTW92ZShuYW1l
KSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKICAgICB7CkBAIC04NCw3ICs4Niw3
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVmPFVubmFtZWRUeXBl
PiBtX3R5cGU7CisgICAgUmVmPFVubmFtZWRUeXBlPiBtX3R5cGU7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIHN0ZDo6dW5pcXVlX3B0cjxFbnVtZXJhdGlvbk1lbWJlcj4+IG1fbWVtYmVyczsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1l
cmF0aW9uTWVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaAkocmV2aXNpb24gMjQ3NzkxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRp
b25NZW1iZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAi
V0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00
MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3Mg
RW51bWVyYXRpb25NZW1iZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIEVudW1lcmF0aW9uTWVtYmVyKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgU3RyaW5nJiYg
bmFtZSwgaW50NjRfdCB2YWx1ZSkKICAgICAgICAgOiBtX2NvZGVMb2NhdGlvbihsb2NhdGlvbikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCShyZXZp
c2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsNiArNDEsNyBAQCBjbGFzcyBFbnVtZXJh
dGlvbkRlZmluaXRpb247CiBjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKIAogY2xhc3MgRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChDb2Rl
TG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIGxlZnQsIFN0cmluZyYmIHJpZ2h0KQogICAgICAg
ICA6IEV4cHJlc3Npb24obG9jYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCShyZXZpc2lv
biAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJXSExTTEFkZHJlc3NTcGFjZS5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRl
ICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKQEAgLTQw
LDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBF
eHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBF
eHByZXNzaW9uKENvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb24pCiAgICAgICAgIDogbV9jb2RlTG9j
YXRpb24oY29kZUxvY2F0aW9uKQpAQCAtNjIsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAqbV90eXBlOwogICAgIH0KIAotICAgIHZvaWQgc2V0VHlwZShVbmlxdWVSZWY8VW5uYW1l
ZFR5cGU+JiYgdHlwZSkKKyAgICB2b2lkIHNldFR5cGUoUmVmPFVubmFtZWRUeXBlPiB0eXBlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFtX3R5cGUpOwogICAgICAgICBtX3R5cGUgPSBXVEZNb3Zl
KHR5cGUpOwpAQCAtMTE3LDcgKzExOSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBDb2Rl
TG9jYXRpb24gbV9jb2RlTG9jYXRpb247Ci0gICAgT3B0aW9uYWw8VW5pcXVlUmVmPFVubmFtZWRU
eXBlPj4gbV90eXBlOworICAgIFJlZlB0cjxVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIE9wdGlv
bmFsPFR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9uOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmFsbHRocm91Z2guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
YWxsdGhyb3VnaC5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGYWxsdGhyb3VnaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xT
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM3LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBB
U1QgewogCiBjbGFzcyBGYWxsdGhyb3VnaCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEZhbGx0aHJvdWdoKENvZGVMb2NhdGlv
biBsb2NhdGlvbikKICAgICAgICAgOiBTdGF0ZW1lbnQobG9jYXRpb24pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWwuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJX
SExTTEZsb2F0TGl0ZXJhbFR5cGUuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw2ICsz
OSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgRmxvYXRM
aXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEZsb2F0TGl0ZXJhbChDb2RlTG9jYXRpb24gbG9jYXRpb24sIGZsb2F0
IHZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRpb24pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGbG9hdExpdGVyYWxUeXBlLmNwcAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIEZsb2F0TGl0
ZXJhbFR5cGU6OkZsb2F0TGl0ZXJhbFR5cGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBmbG9hdCB2
YWx1ZSkKICAgICA6IG1fdmFsdWUodmFsdWUpCi0gICAgLCBtX3ByZWZlcnJlZFR5cGUobWFrZVVu
aXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihsb2NhdGlvbiwgImZsb2F0Il9zdHIsIFR5cGVBcmd1bWVu
dHMoKSkpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUoVHlwZVJlZmVyZW5jZTo6Y3JlYXRlKGxvY2F0
aW9uLCAiZmxvYXQiX3N0ciwgVHlwZUFyZ3VtZW50cygpKSkKIHsKIH0KIApAQCAtNzcsNyArNzcs
NyBAQCBGbG9hdExpdGVyYWxUeXBlIEZsb2F0TGl0ZXJhbFR5cGU6OmNsb25lCiAgICAgRmxvYXRM
aXRlcmFsVHlwZSByZXN1bHQobV9wcmVmZXJyZWRUeXBlLT5jb2RlTG9jYXRpb24oKSwgbV92YWx1
ZSk7CiAgICAgaWYgKGF1dG8qIHR5cGUgPSBtYXliZVJlc29sdmVkVHlwZSgpKQogICAgICAgICBy
ZXN1bHQucmVzb2x2ZSh0eXBlLT5jbG9uZSgpKTsKLSAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBl
ID0gbV9wcmVmZXJyZWRUeXBlLT5jbG9uZVR5cGVSZWZlcmVuY2UoKTsKKyAgICByZXN1bHQubV9w
cmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLmNvcHlSZWYoKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCShyZXZpc2lvbiAy
NDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBB
U1QgewogY2xhc3MgVHlwZVJlZmVyZW5jZTsKIAogY2xhc3MgRmxvYXRMaXRlcmFsVHlwZSA6IHB1
YmxpYyBSZXNvbHZhYmxlVHlwZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgRmxvYXRMaXRlcmFsVHlwZShDb2RlTG9jYXRpb24sIGZsb2F0IHZhbHVlKTsKIApA
QCAtNjYsNyArNjgsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fdmFsdWU7CiAgICAgLy8gVGhp
cyBpcyBhIHVuaXF1ZV9wdHIgdG8gcmVzb2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2Vl
bgogICAgIC8vIENvbnN0YW50RXhwcmVzc2lvbiAtPiBMaXRlcmFsVHlwZSAtPiBUeXBlUmVmZXJl
bmNlIC0+IFR5cGVBcmd1bWVudHMgLT4gQ29uc3RhbnRFeHByZXNzaW9uCi0gICAgVW5pcXVlUmVm
PFR5cGVSZWZlcmVuY2U+IG1fcHJlZmVycmVkVHlwZTsKKyAgICBSZWY8VHlwZVJlZmVyZW5jZT4g
bV9wcmVmZXJyZWRUeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRm9yTG9v
cC5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGb3JMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1Zh
cmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00Myw2ICs0NCw3IEBAIG5hbWVz
cGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgRm9yTG9vcCA6IHB1YmxpYyBT
dGF0ZW1lbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEZv
ckxvb3AoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBWYXJpYW50PFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+
LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgaW5pdGlhbGl6YXRpb24sIHN0ZDo6dW5pcXVlX3B0
cjxFeHByZXNzaW9uPiYmIGNvbmRpdGlvbiwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYg
aW5jcmVtZW50LCBVbmlxdWVSZWY8U3RhdGVtZW50PiYmIGJvZHkpCiAgICAgICAgIDogU3RhdGVt
ZW50KGxvY2F0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAko
cmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1l
ZFR5cGUuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDMsOCArNDQsOSBAQCBuYW1lc3BhY2UgV0hM
U0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb24geworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEZ1bmN0aW9uRGVjbGFyYXRp
b24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2Nr
LCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIFVuaXF1ZVJlZjxVbm5h
bWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHBh
cmFtZXRlcnMsIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCBpc09w
ZXJhdG9yKQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBB
dHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4g
ZW50cnlQb2ludFR5cGUsIFJlZjxVbm5hbWVkVHlwZT4gdHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFy
aWFibGVEZWNsYXJhdGlvbnMmJiBwYXJhbWV0ZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+
JiYgc2VtYW50aWMsIGJvb2wgaXNPcGVyYXRvcikKICAgICAgICAgOiBtX2NvZGVMb2NhdGlvbihs
b2NhdGlvbikKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmlidXRlQmxv
Y2spKQogICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBAIC04Miw3
ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsK
ICAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gbV9lbnRyeVBvaW50VHlwZTsKICAgICBib29s
IG1faXNPcGVyYXRvcjsKLSAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAgICBS
ZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZhcmlhYmxl
RGVjbGFyYXRpb25zIG1fcGFyYW1ldGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+
IG1fc2VtYW50aWM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIldITFNMQmxvY2suaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVj
bGFyYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM3LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBB
U1QgewogCiBjbGFzcyBGdW5jdGlvbkRlZmluaXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJh
dGlvbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRnVuY3Rp
b25EZWZpbml0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24mJiBmdW5jdGlvbkRlY2xhcmF0aW9uLCBC
bG9jayYmIGJsb2NrKQogICAgICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZShmdW5j
dGlvbkRlY2xhcmF0aW9uKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMR2xvYmFsVmFyaWFibGVS
ZWZlcmVuY2UuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMR2xvYmFsVmFyaWFibGVSZWZlcmVuY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1
ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCw2ICszOSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3Mg
R2xvYmFsVmFyaWFibGVSZWZlcmVuY2UgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgR2xvYmFsVmFyaWFibGVSZWZlcmVuY2Uo
Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBiYXNlLCBTdHJ1
Y3R1cmVFbGVtZW50KiBzdHJ1Y3RGaWVsZCkKICAgICAgICAgOiBFeHByZXNzaW9uKGxvY2F0aW9u
KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSWZT
dGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJZlN0YXRlbWVudC5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJZlN0YXRlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2lu
Y2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgSWZTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJZlN0YXRlbWVudChDb2RlTG9jYXRp
b24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGNvbmRpdGlvbmFsLCBVbmlxdWVS
ZWY8U3RhdGVtZW50PiYmIGJvZHksIHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+JiYgZWxzZUJv
ZHkpCiAgICAgICAgIDogU3RhdGVtZW50KGxvY2F0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhF
eHByZXNzaW9uLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hM
U0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzgsNiArMzksNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IEluZGV4RXhwcmVzc2lvbiA6IHB1YmxpYyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24geworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluZGV4RXhwcmVzc2lvbihD
b2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGJhc2UsIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiYmIGluZGV4KQogICAgICAgICA6IFByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbihsb2NhdGlvbiwgV1RGTW92ZShiYXNlKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWwuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMSW50
ZWdlckxpdGVyYWxUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNiArMzksNyBA
QCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEludGVnZXJMaXRl
cmFsIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIEludGVnZXJMaXRlcmFsKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHZh
bHVlKQogICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIEludGVn
ZXJMaXRlcmFsVHlwZTo6SW50ZWdlckxpdGVyYWxUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwg
aW50IHZhbHVlKQogICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAsIG1fcHJlZmVycmVkVHlwZSht
YWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KGxvY2F0aW9uLCAiaW50Il9zdHIsIFR5cGVBcmd1
bWVudHMoKSkpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUoVHlwZVJlZmVyZW5jZTo6Y3JlYXRlKGxv
Y2F0aW9uLCAiaW50Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7CiB9CiAKQEAgLTc4LDcgKzc4
LDcgQEAgSW50ZWdlckxpdGVyYWxUeXBlIEludGVnZXJMaXRlcmFsVHlwZTo6YwogICAgIEludGVn
ZXJMaXRlcmFsVHlwZSByZXN1bHQobV9wcmVmZXJyZWRUeXBlLT5jb2RlTG9jYXRpb24oKSwgbV92
YWx1ZSk7CiAgICAgaWYgKGF1dG8qIHR5cGUgPSBtYXliZVJlc29sdmVkVHlwZSgpKQogICAgICAg
ICByZXN1bHQucmVzb2x2ZSh0eXBlLT5jbG9uZSgpKTsKLSAgICByZXN1bHQubV9wcmVmZXJyZWRU
eXBlID0gbV9wcmVmZXJyZWRUeXBlLT5jbG9uZVR5cGVSZWZlcmVuY2UoKTsKKyAgICByZXN1bHQu
bV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLmNvcHlSZWYoKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00MCw2ICs0MSw3IEBAIG5h
bWVzcGFjZSBBU1QgewogY2xhc3MgVHlwZVJlZmVyZW5jZTsKIAogY2xhc3MgSW50ZWdlckxpdGVy
YWxUeXBlIDogcHVibGljIFJlc29sdmFibGVUeXBlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUoQ29kZUxvY2F0aW9uLCBpbnQg
dmFsdWUpOwogCkBAIC02Niw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdmFsdWU7CiAg
ICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIgdG8gcmVzb2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVu
Y3kgYmV0d2VlbgogICAgIC8vIENvbnN0YW50RXhwcmVzc2lvbiAtPiBMaXRlcmFsVHlwZSAtPiBU
eXBlUmVmZXJlbmNlIC0+IFR5cGVBcmd1bWVudHMgLT4gQ29uc3RhbnRFeHByZXNzaW9uCi0gICAg
VW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+IG1fcHJlZmVycmVkVHlwZTsKKyAgICBSZWY8VHlwZVJl
ZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsRXhw
cmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTExvZ2ljYWxFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxFeHByZXNz
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNM
RXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzgsNiArMzksNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7
CiAKIGNsYXNzIExvZ2ljYWxFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVp
bnQ4X3QgewogICAgICAgICBBbmQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxOb3RFeHBy
ZXNzaW9uLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArMzksNyBA
QCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIExvZ2ljYWxOb3RF
eHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIExvZ2ljYWxOb3RFeHByZXNzaW9uKENvZGVMb2NhdGlvbiBsb2Nh
dGlvbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgb3BlcmFuZCkKICAgICAgICAgOiBFeHByZXNz
aW9uKGxvY2F0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJl
c3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiBj
bGFzcyBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBVbmlxdWVSZWY8RXhwcmVzc2lv
bj4mJiBsZWZ0VmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihsb2NhdGlvbikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhw
cmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRl
ckV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVk
ZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zOCw2ICszOSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3Bh
Y2UgQVNUIHsKIAogY2xhc3MgTWFrZVBvaW50ZXJFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Np
b24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE1ha2VQb2lu
dGVyRXhwcmVzc2lvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiYmIGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKGxvY2F0aW9uKQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TmFtZWRUeXBlLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBl
LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArMzksNyBAQCBuYW1lc3Bh
Y2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5hbWVkVHlwZSA6IHB1YmxpYyBU
eXBlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBOYW1lZFR5
cGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lKQogICAgICAgICA6IG1fY29k
ZUxvY2F0aW9uKGxvY2F0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2lu
Y2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNiArMzcsNyBAQCBuYW1lc3Bh
Y2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlv
bkRlY2xhcmF0aW9uJiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKICAgICAgICAgOiBGdW5jdGlvbkRl
Y2xhcmF0aW9uKFdURk1vdmUoZnVuY3Rpb25EZWNsYXJhdGlvbikpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJXSExTTE5h
bWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSAiV0hM
U0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsNiAr
NDEsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihDb2RlTG9jYXRp
b24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIFR5cGVBcmd1bWVudHMmJiB0eXBlQXJndW1lbnRz
KQogICAgICAgICA6IE5hbWVkVHlwZShsb2NhdGlvbiwgV1RGTW92ZShuYW1lKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTnVsbExpdGVyYWwuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgorI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNiAr
MzksNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE51bGxM
aXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIE51bGxMaXRlcmFsKENvZGVMb2NhdGlvbiBsb2NhdGlvbikKICAgICAg
ICAgOiBFeHByZXNzaW9uKGxvY2F0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBl
LmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM2LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1Qgewog
CiBjbGFzcyBOdWxsTGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE51bGxMaXRlcmFsVHlwZSgpID0g
ZGVmYXVsdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1
ZGUgIldITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw2ICszNyw3IEBAIG5hbWVzcGFj
ZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlIDogcHVibGljIEJhc2VGdW5jdGlvbkF0dHJpYnV0ZSB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKENv
ZGVMb2NhdGlvbiBsb2NhdGlvbiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5z
aWduZWQgZGVwdGgpCiAgICAgICAgIDogQmFzZUZ1bmN0aW9uQXR0cmlidXRlKGxvY2F0aW9uKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRl
clR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5j
bHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
ICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKQEAgLTM5LDEyICs0MCwxOSBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFT
VCB7CiAKIGNsYXNzIFBvaW50ZXJUeXBlIDogcHVibGljIFJlZmVyZW5jZVR5cGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHVzaW5nIEJhc2UgPSBSZWZlcmVuY2VUeXBlOwot
cHVibGljOgotICAgIFBvaW50ZXJUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZSwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSkKKwor
ICAgIFBvaW50ZXJUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSkKICAgICAgICAgOiBCYXNlKGxv
Y2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9
CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUmVmPFBvaW50ZXJUeXBlPiBjcmVhdGUoQ29kZUxvY2F0
aW9uIGxvY2F0aW9uLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlLCBSZWY8VW5uYW1lZFR5cGU+
IGVsZW1lbnRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUG9pbnRl
clR5cGUobG9jYXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpKTsKKyAg
ICB9CiAKICAgICB2aXJ0dWFsIH5Qb2ludGVyVHlwZSgpID0gZGVmYXVsdDsKIApAQCAtNTMsMTAg
KzYxLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUo
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UG9p
bnRlclR5cGU+KGNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UoKSwgZWxlbWVudFR5cGUoKS5j
bG9uZSgpKTsKLSAgICB9CisgICAgLy9VbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29u
c3Qgb3ZlcnJpZGUKKyAgICAvL3sKKyAgICAvLyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxQb2lu
dGVyVHlwZT4oY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgpLmNs
b25lKCkpOworICAgIC8vfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IG92ZXJyaWRlCiAg
ICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgJ
KHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOSw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1l
c3BhY2UgQVNUIHsKIAogY2xhc3MgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIDogcHVibGljIEV4
cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxF
eHByZXNzaW9uPiYmIGJhc2UpCiAgICAgICAgIDogRXhwcmVzc2lvbihsb2NhdGlvbikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTUwLDYgKzUxLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAgKiAgNy4gUmV0dXJu
IHRoZSByZXN1bHQKICAqLwogY2xhc3MgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgVW5pcXVlUmVmPFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+IGNyZWF0ZShDb2Rl
TG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsVmFsdWUpCiAgICAgewpA
QCAtMTE4LDggKzEyMCw4IEBAIHByaXZhdGU6CiAgICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsZWZ0VmFsdWUp
CiAgICAgICAgIDogRXhwcmVzc2lvbihsb2NhdGlvbikKICAgICAgICAgLCBtX2xlZnRWYWx1ZShX
VEZNb3ZlKGxlZnRWYWx1ZSkpCi0gICAgICAgICwgbV9vbGRWYWx1ZShtYWtlVW5pcXVlUmVmPFZh
cmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwg
U3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKQotICAgICAgICAsIG1fbmV3VmFsdWUobWFrZVVu
aXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgUXVhbGlmaWVycygpLCBXVEY6
Om51bGxvcHQsIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29sZFZh
bHVlKG1ha2VVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIFF1YWxpZmll
cnMoKSwgbnVsbHB0ciwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICAsIG1f
bmV3VmFsdWUobWFrZVVuaXF1ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgUXVh
bGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpCiAgICAgewog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmVmZXJlbmNlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAkocmV2aXNpb24gMjQ3NzkxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNl
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xB
ZGRyZXNzU3BhY2UuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xV
bm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00MCwx
MyArNDEsMTUgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBS
ZWZlcmVuY2VUeXBlIDogcHVibGljIFVubmFtZWRUeXBlIHsKLXB1YmxpYzoKLSAgICBSZWZlcmVu
Y2VUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwg
VW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHJvdGVjdGVkOgorICAgIFJlZmVyZW5jZVR5cGUoQ29kZUxvY2F0aW9uIGxv
Y2F0aW9uLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlLCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1l
bnRUeXBlKQogICAgICAgICA6IFVubmFtZWRUeXBlKGxvY2F0aW9uKQogICAgICAgICAsIG1fYWRk
cmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUo
ZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CitwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5SZWZl
cmVuY2VUeXBlKCkgPSBkZWZhdWx0OwogCkBAIC02Niw3ICs2OSw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7Ci0gICAgVW5pcXVlUmVmPFVu
bmFtZWRUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV9lbGVtZW50
VHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxl
VHlwZS5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVk
VHlwZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNM
IHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBSZXNvbHZhYmxlVHlwZSA6IHB1YmxpYyBUeXBl
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBSZXNvbHZhYmxl
VHlwZSgpID0gZGVmYXVsdDsKIApAQCAtNzIsMTMgKzc0LDEzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuICptX3Jlc29sdmVkVHlwZTsKICAgICB9CiAKLSAgICB2b2lkIHJlc29sdmUoVW5pcXVl
UmVmPFVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgdm9pZCByZXNvbHZlKFJlZjxVbm5hbWVkVHlw
ZT4gdHlwZSkKICAgICB7CiAgICAgICAgIG1fcmVzb2x2ZWRUeXBlID0gV1RGTW92ZSh0eXBlKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3B0aW9uYWw8VW5pcXVlUmVmPFVubmFtZWRUeXBlPj4g
bV9yZXNvbHZlZFR5cGU7CisgICAgUmVmUHRyPFVubmFtZWRUeXBlPiBtX3Jlc29sdmVkVHlwZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50
aWMuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM3LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBB
U1QgewogCiBjbGFzcyBSZXNvdXJjZVNlbWFudGljIDogcHVibGljIEJhc2VTZW1hbnRpYyB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2Rl
IDogdWludDhfdCB7CiAgICAgICAgIFVub3JkZXJlZEFjY2Vzc1ZpZXcsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4u
aAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUmV0dXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNs
dWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
VW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDYgKzQxLDcgQEAgbmFt
ZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBSZXR1cm4gOiBwdWJsaWMg
U3RhdGVtZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBS
ZXR1cm4oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4m
JiB2YWx1ZSkKICAgICAgICAgOiBTdGF0ZW1lbnQobG9jYXRpb24pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAkocmV2aXNpb24g
MjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzcsNiArMzgsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFT
VCB7CiAKIGNsYXNzIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyA6IHB1YmxpYyBCYXNl
U2VtYW50aWMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyhDb2RlTG9jYXRpb24gbG9jYXRpb24pCiAgICAg
ICAgIDogQmFzZVNlbWFudGljKGxvY2F0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91
dFNlbWFudGljLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgogI2lu
Y2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5h
bWVzcGFjZSBBU1QgewogCiBjbGFzcyBTdGFnZUluT3V0U2VtYW50aWMgOiBwdWJsaWMgQmFzZVNl
bWFudGljIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBTdGFn
ZUluT3V0U2VtYW50aWMoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCB1bnNpZ25lZCBpbmRleCkKICAg
ICAgICAgOiBCYXNlU2VtYW50aWMobG9jYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zNyw2ICszOCw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNU
IHsKIAogY2xhc3MgU3RhdGVtZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBTdGF0ZW1lbnQoQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbikKICAgICAgICAg
OiBtX2NvZGVMb2NhdGlvbihjb2RlTG9jYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnRMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50TGlz
dC5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTdGF0ZW1lbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVu
dC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICszOSw3IEBAIG5hbWVzcGFjZSBXSExT
TCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgU3RhdGVtZW50TGlzdCA6IHB1YmxpYyBTdGF0
ZW1lbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHVzaW5nIEJhc2UgPSBT
dGF0ZW1lbnQ7CiBwdWJsaWM6CiAgICAgU3RhdGVtZW50TGlzdChDb2RlTG9jYXRpb24gbG9jYXRp
b24sIFN0YXRlbWVudHMmJiBzdGF0ZW1lbnRzKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVy
ZURlZmluaXRpb24uaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUg
IldITFNMTmFtZWRUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNl
IFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uIDog
cHVibGljIE5hbWVkVHlwZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgU3RydWN0dXJlRGVmaW5pdGlvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYm
IG5hbWUsIFN0cnVjdHVyZUVsZW1lbnRzJiYgc3RydWN0dXJlRWxlbWVudHMpCiAgICAgICAgIDog
TmFtZWRUeXBlKGxvY2F0aW9uLCBXVEZNb3ZlKG5hbWUpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVj
dHVyZUVsZW1lbnQuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKICNpbmNsdWRl
ICJXSExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQwLDggKzQxLDkgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBB
U1QgewogCiBjbGFzcyBTdHJ1Y3R1cmVFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVFbGVtZW50KENvZGVMb2NhdGlvbiBsb2NhdGlv
biwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiB0eXBl
LCBTdHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+JiYgc2VtYW50aWMpCisg
ICAgU3RydWN0dXJlRWxlbWVudChDb2RlTG9jYXRpb24gbG9jYXRpb24sIFF1YWxpZmllcnMmJiBx
dWFsaWZpZXJzLCBSZWY8VW5uYW1lZFR5cGU+IHR5cGUsIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5p
cXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRpYykKICAgICAgICAgOiBtX2NvZGVMb2NhdGlvbihs
b2NhdGlvbikKICAgICAgICAgLCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKICAg
ICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKQEAgLTYzLDcgKzY1LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247CiAgICAgUXVhbGlmaWVy
cyBtX3F1YWxpZmllcnM7Ci0gICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBtX3R5cGU7CisgICAg
UmVmPFVubmFtZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2VtYW50aWM+IG1fc2VtYW50aWM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaENhc2Uu
aAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExl
eGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAog
Y2xhc3MgU3dpdGNoQ2FzZSA6IHB1YmxpYyBTdGF0ZW1lbnQgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFN3aXRjaENhc2UoQ29kZUxvY2F0aW9uIGxvY2F0aW9u
LCBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+JiYgdmFsdWUsIEJsb2NrJiYgYmxvY2spCiAg
ICAgICAgIDogU3RhdGVtZW50KGxvY2F0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoU3RhdGVt
ZW50LmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN3aXRjaFN0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVt
ZW50LmgiCiAjaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1Qgewog
CiBjbGFzcyBTd2l0Y2hTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBTd2l0Y2hTdGF0ZW1lbnQoQ29kZUxvY2F0
aW9uIGxvY2F0aW9uLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiB2YWx1ZSwgVmVjdG9yPFN3aXRj
aENhc2U+JiYgc3dpdGNoQ2FzZXMpCiAgICAgICAgIDogU3RhdGVtZW50KGxvY2F0aW9uKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVGVybmFyeUV4
cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUZXJuYXJ5RXhwcmVz
c2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExT
TEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1Qg
ewogCiBjbGFzcyBUZXJuYXJ5RXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBUZXJuYXJ5RXhwcmVzc2lvbihD
b2RlTG9jYXRpb24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIHByZWRpY2F0ZSwg
VW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgYm9keUV4cHJlc3Npb24sIFVuaXF1ZVJlZjxFeHByZXNz
aW9uPiYmIGVsc2VFeHByZXNzaW9uKQogICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRpb24pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZS5oCShyZXZpc2lvbiAyNDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgog
I2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYs
NiArMzcsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFR5
cGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFR5cGUoKSA9
IGRlZmF1bHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFR5cGVBcmd1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAkocmV2aXNpb24gMjQ3
NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlw
ZUFyZ3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBUeXBlQXJndW1l
bnQgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50JiB0CiB7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhw
cmVzc2lvbikgLT4gVHlwZUFyZ3VtZW50IHsKICAgICAgICAgcmV0dXJuIGNvbnN0YW50RXhwcmVz
c2lvbi5jbG9uZSgpOwotICAgIH0sIFtdKGNvbnN0IFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiYg
dHlwZVJlZmVyZW5jZSkgLT4gVHlwZUFyZ3VtZW50IHsKLSAgICAgICAgcmV0dXJuIHR5cGVSZWZl
cmVuY2UtPmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgIH0sIFtdKGNvbnN0IFJlZjxUeXBlUmVm
ZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkgLT4gVHlwZUFyZ3VtZW50IHsKKyAgICAgICAgcmV0dXJu
IHR5cGVSZWZlcmVuY2UuY29weVJlZigpOwogICAgIH0pLCB0eXBlQXJndW1lbnQpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJn
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFR5cGVS
ZWZlcmVuY2U7CiAKLXVzaW5nIFR5cGVBcmd1bWVudCA9IFZhcmlhbnQ8Q29uc3RhbnRFeHByZXNz
aW9uLCBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4+OwordXNpbmcgVHlwZUFyZ3VtZW50ID0gVmFy
aWFudDxDb25zdGFudEV4cHJlc3Npb24sIFJlZjxUeXBlUmVmZXJlbmNlPj47CiB1c2luZyBUeXBl
QXJndW1lbnRzID0gVmVjdG9yPFR5cGVBcmd1bWVudD47CiAKIFR5cGVBcmd1bWVudCBjbG9uZShj
b25zdCBUeXBlQXJndW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVHlwZURlZmluaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2lu
Y2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgog
I2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIApAQCAtNDAsOCArNDEsOSBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7
CiAKIGNsYXNzIFR5cGVEZWZpbml0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVHlwZURlZmluaXRpb24oQ29kZUxvY2F0
aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlw
ZSkKKyAgICBUeXBlRGVmaW5pdGlvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIG5h
bWUsIFJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKICAgICAgICAgOiBOYW1lZFR5cGUobG9jYXRpb24s
IFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCiAgICAgewpA
QCAtNjcsNyArNjksNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFVuaXF1ZVJl
ZjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV90eXBlOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAko
cmV2aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNywx
MiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotVW5pcXVlUmVmPFR5
cGVSZWZlcmVuY2U+IFR5cGVSZWZlcmVuY2U6OndyYXAoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBO
YW1lZFR5cGUmIHJlc29sdmVkVHlwZSkKK1JlZjxUeXBlUmVmZXJlbmNlPiBUeXBlUmVmZXJlbmNl
Ojp3cmFwKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgTmFtZWRUeXBlJiByZXNvbHZlZFR5cGUpCiB7
CiAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOwogICAgIGlmIChpczxOYXRpdmVUeXBl
RGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkpCiAgICAgICAgIHR5cGVBcmd1bWVudHMgPSBBU1Q6
OmNsb25lKGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBlKS50eXBl
QXJndW1lbnRzKCkpOwotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxUeXBlUmVmZXJl
bmNlPihsb2NhdGlvbiwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkpLCBXVEZNb3ZlKHR5cGVB
cmd1bWVudHMpKTsKKyAgICBhdXRvIHJlc3VsdCA9IFR5cGVSZWZlcmVuY2U6OmNyZWF0ZShsb2Nh
dGlvbiwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkpLCBXVEZNb3ZlKHR5cGVBcmd1bWVudHMp
KTsKICAgICByZXN1bHQtPnNldFJlc29sdmVkVHlwZShyZXNvbHZlZFR5cGUpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNDc3
OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJX
SExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVk
ZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5j
bHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC00MywyMCArNDQsMjUgQEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBOYW1lZFR5cGU7CiAK
IGNsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewotcHVibGljOgorICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFR5cGVSZWZlcmVuY2UoQ29kZUxvY2F0aW9u
IGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFyZ3VtZW50cykK
ICAgICAgICAgOiBVbm5hbWVkVHlwZShsb2NhdGlvbikKICAgICAgICAgLCBtX25hbWUoV1RGTW92
ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGVBcmd1bWVudHMoV1RGTW92ZSh0eXBlQXJndW1lbnRz
KSkKICAgICB7CiAgICAgfQorcHVibGljOgorICAgIHN0YXRpYyBSZWY8VHlwZVJlZmVyZW5jZT4g
Y3JlYXRlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50
cyYmIHR5cGVBcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKiBuZXcg
VHlwZVJlZmVyZW5jZShsb2NhdGlvbiwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0eXBlQXJndW1l
bnRzKSkpOworICAgIH0KIAogICAgIHZpcnR1YWwgflR5cGVSZWZlcmVuY2UoKSA9IGRlZmF1bHQ7
CiAKICAgICBUeXBlUmVmZXJlbmNlKGNvbnN0IFR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsKICAg
ICBUeXBlUmVmZXJlbmNlKFR5cGVSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCi0gICAgc3RhdGlj
IFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiB3cmFwKENvZGVMb2NhdGlvbiwgTmFtZWRUeXBlJiBy
ZXNvbHZlZFR5cGUpOworICAgIHN0YXRpYyBSZWY8VHlwZVJlZmVyZW5jZT4gd3JhcChDb2RlTG9j
YXRpb24sIE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKTsKIAogICAgIGJvb2wgaXNUeXBlUmVmZXJl
bmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC04NiwxOCArOTIsMTgg
QEAgcHVibGljOgogICAgICAgICBtX3Jlc29sdmVkVHlwZSA9ICZyZXNvbHZlZFR5cGU7CiAgICAg
fQogCi0gICAgVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+IGNsb25lVHlwZVJlZmVyZW5jZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVy
ZW5jZT4oY29kZUxvY2F0aW9uKCksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFy
Z3VtZW50cykpOwotICAgICAgICBpZiAobV9yZXNvbHZlZFR5cGUpCi0gICAgICAgICAgICByZXN1
bHQtPnNldFJlc29sdmVkVHlwZSgqbV9yZXNvbHZlZFR5cGUpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLQotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNsb25lVHlwZVJlZmVyZW5jZSgpOwotICAg
IH0KKyAgICAvL1JlZjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBjb25zdAor
ICAgIC8veworICAgIC8vICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxUeXBlUmVmZXJl
bmNlPihjb2RlTG9jYXRpb24oKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90eXBlQXJn
dW1lbnRzKSk7CisgICAgLy8gICAgaWYgKG1fcmVzb2x2ZWRUeXBlKQorICAgIC8vICAgICAgICBy
ZXN1bHQtPnNldFJlc29sdmVkVHlwZSgqbV9yZXNvbHZlZFR5cGUpOworICAgIC8vICAgIHJldHVy
biByZXN1bHQ7CisgICAgLy99CisKKyAgICAvL1VuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUo
KSBjb25zdCBvdmVycmlkZQorICAgIC8veworICAgIC8vICAgIHJldHVybiBjbG9uZVR5cGVSZWZl
cmVuY2UoKTsKKyAgICAvL30KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCBvdmVycmlkZQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVubmFtZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAkocmV2aXNpb24gMjQ3NzkxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgogI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC0zOCw3ICszOSw4IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1Qg
ewogCi1jbGFzcyBVbm5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFVubmFtZWRUeXBl
IDogcHVibGljIFR5cGUsIHB1YmxpYyBSZWZDb3VudGVkPFVubmFtZWRUeXBlPiB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgVW5uYW1lZFR5cGUoQ29kZUxvY2F0
aW9uIGxvY2F0aW9uKQogICAgICAgICA6IG1fY29kZUxvY2F0aW9uKGxvY2F0aW9uKQpAQCAtNjAs
NyArNjIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBj
b25zdCB7IHJldHVybiAqdGhpczsgfQogICAgIHZpcnR1YWwgVHlwZSYgdW5pZnlOb2RlKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KIAotICAgIHZpcnR1YWwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9u
ZSgpIGNvbnN0ID0gMDsKKyAgICAvL3ZpcnR1YWwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9u
ZSgpIGNvbnN0ID0gMDsKKyAgICAvLyBPT1BTCisgICAgUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgp
IGNvbnN0IHsgcmV0dXJuIFJlZjxVbm5hbWVkVHlwZT4oY29uc3RfY2FzdDxVbm5hbWVkVHlwZSY+
KCp0aGlzKSk7IH0KIAogICAgIHZpcnR1YWwgdW5zaWduZWQgaGFzaCgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0ID0gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2ln
bmVkSW50ZWdlckxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgJKHJldmlzaW9u
IDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
ICNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgiCisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw2ICszOSw3
IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsKENvZGVMb2NhdGlv
biBsb2NhdGlvbiwgdW5zaWduZWQgdmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihsb2NhdGlv
bikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZS5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGU6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKENvZGVMb2NhdGlvbiBsb2Nh
dGlvbiwgdW5zaWduZWQgdmFsdWUpCiAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgICwgbV9wcmVm
ZXJyZWRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4obG9jYXRpb24sICJ1aW50Il9z
dHIsIFR5cGVBcmd1bWVudHMoKSkpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUoVHlwZVJlZmVyZW5j
ZTo6Y3JlYXRlKGxvY2F0aW9uLCAidWludCJfc3RyLCBUeXBlQXJndW1lbnRzKCkpKQogewogfQog
CkBAIC04MSw3ICs4MSw3IEBAIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlIFVuc2lnbmVkSW50
ZWcKICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSByZXN1bHQobV9wcmVmZXJyZWRUeXBl
LT5jb2RlTG9jYXRpb24oKSwgbV92YWx1ZSk7CiAgICAgaWYgKGF1dG8qIHR5cGUgPSBtYXliZVJl
c29sdmVkVHlwZSgpKQogICAgICAgICByZXN1bHQucmVzb2x2ZSh0eXBlLT5jbG9uZSgpKTsKLSAg
ICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLT5jbG9uZVR5cGVSZWZl
cmVuY2UoKTsKKyAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLmNv
cHlSZWYoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBBU1Qg
ewogY2xhc3MgVHlwZVJlZmVyZW5jZTsKIAogY2xhc3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKENvZGVMb2NhdGlvbiwg
dW5zaWduZWQgdmFsdWUpOwogCkBAIC02Niw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2ly
Y3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCiAgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExp
dGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4
cHJlc3Npb24KLSAgICBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOwor
ICAgIFJlZjxUeXBlUmVmZXJlbmNlPiBtX3ByZWZlcnJlZFR5cGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgJKHJldmlz
aW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNp
bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgpAQCAtNDQsOSArNDUsMTAgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5h
bWVzcGFjZSBBU1QgewogCiBjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uIGZpbmFsIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIC8vIEZpbmFsIGJlY2F1c2Ugd2UgbWFkZSB0aGUgZGVz
dHJ1Y3RvciBub24tdmlydHVhbC4KIHB1YmxpYzoKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uKENv
ZGVMb2NhdGlvbiBjb2RlTG9jYXRpb24sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBPcHRpb25h
bDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5p
cXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihDb2RlTG9jYXRpb24gY29k
ZUxvY2F0aW9uLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgUmVmUHRyPFVubmFtZWRUeXBlPiYm
IHR5cGUsIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRp
Yywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAgIDog
bV9jb2RlTG9jYXRpb24oY29kZUxvY2F0aW9uKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZN
b3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjYs
MTIgKzY4LDEyIEBAIHB1YmxpYzoKICAgICAvLyBXZSB1c2UgdGhpcyBmb3IgUmVhZE1vZGlmeVdy
aXRlIGV4cHJlc3Npb25zLCBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZSB0eXBlIG9mIHRoZWlyCiAg
ICAgLy8gaW50ZXJuYWwgdmFyaWFibGVzIHVudGlsIHRoZSBjaGVja2VyIHJ1bnMuIEFsbCBvdGhl
ciB2YXJpYWJsZXMgc2hvdWxkIHN0YXJ0IGxpZmUgb3V0CiAgICAgLy8gd2l0aCBhIHR5cGUuCi0g
ICAgdm9pZCBzZXRUeXBlKFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKKyAgICB2b2lkIHNl
dFR5cGUoUmVmPFVubmFtZWRUeXBlPiB0eXBlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX3R5
cGUpOwogICAgICAgICBtX3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAgIH0KLSAgICBjb25zdCBP
cHRpb25hbDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQorICAgIGNvbnN0IFJlZlB0cjxVbm5hbWVkVHlwZT4mIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KICAgICBVbm5hbWVkVHlwZSogdHlwZSgpIHsgcmV0dXJuIG1fdHlwZSA/
ICYqbV90eXBlIDogbnVsbHB0cjsgfQogICAgIFNlbWFudGljKiBzZW1hbnRpYygpIHsgcmV0dXJu
IG1fc2VtYW50aWMuZ2V0KCk7IH0KICAgICBFeHByZXNzaW9uKiBpbml0aWFsaXplcigpIHsgcmV0
dXJuIG1faW5pdGlhbGl6ZXIuZ2V0KCk7IH0KQEAgLTg4LDcgKzkwLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247CiAgICAgUXVhbGlmaWVycyBt
X3F1YWxpZmllcnM7Ci0gICAgT3B0aW9uYWw8VW5pcXVlUmVmPFVubmFtZWRUeXBlPj4gbV90eXBl
OworICAgIFJlZlB0cjxVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBtX3NlbWFudGljOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxFeHByZXNzaW9uPiBtX2luaXRpYWxpemVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oCShyZXZpc2lvbiAyNDc3OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAjaW5j
bHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM5LDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFjZSBBU1QgewogCiBjbGFz
cyBWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50KENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgVmFyaWFibGVEZWNsYXJhdGlvbnMm
JiB2YXJpYWJsZURlY2xhcmF0aW9ucykKICAgICAgICAgOiBTdGF0ZW1lbnQobG9jYXRpb24pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJs
ZVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVm
ZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExT
TEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzks
NiArNDAsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFZh
cmlhYmxlUmVmZXJlbmNlIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFZhcmlhYmxlUmVmZXJlbmNlKENvZGVMb2NhdGlvbiBs
b2NhdGlvbiwgU3RyaW5nJiYgbmFtZSkKICAgICAgICAgOiBFeHByZXNzaW9uKGxvY2F0aW9uKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVM
b29wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMV2hpbGVMb29wLmgJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFdoaWxlTG9vcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM5LDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIG5hbWVzcGFj
ZSBBU1QgewogCiBjbGFzcyBXaGlsZUxvb3AgOiBwdWJsaWMgU3RhdGVtZW50IHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXaGlsZUxvb3AoQ29kZUxvY2F0aW9u
IGxvY2F0aW9uLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBjb25kaXRpb25hbCwgVW5pcXVlUmVm
PFN0YXRlbWVudD4mJiBib2R5KQogICAgICAgICA6IFN0YXRlbWVudChsb2NhdGlvbikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVu
Y3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAy
NDc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw4
IEBAIHN0YXRpYyBBU1Q6Ok5hbWVkVHlwZSYgdmVjdG9ySW5uZXJUeXBlKEEKICAgICAgICAgcmV0
dXJuIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKIAogICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKLSAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwotICAgIHJldHVybiBXVEY6OmdldDxVbmlx
dWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1
bWVudHMoKVswXSktPnJlc29sdmVkVHlwZSgpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpWzBdKSk7CisgICAgcmV0dXJuIFdURjo6Z2V0PFJlZjxBU1Q6OlR5cGVSZWZl
cmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKS0+cmVzb2x2
ZWRUeXBlKCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZWN0b3JTdWZmaXgoaW50IHZlY3Rv
ckxlbmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMTmF0aXZlVHlwZVdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVUeXBlV3JpdGVyLmNwcAkocmV2
aXNpb24gMjQ3NzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xOYXRpdmVUeXBlV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgs
OCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVUeXBlKEFTVDo6TmF0aXZlVHlwZURlCiAgICAgICAgIHJl
dHVybiAic2FtcGxlciJfc3RyOwogICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJ2ZWN0b3IiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKLSAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9
IFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50
eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6
Z2V0PFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFy
Z3VtZW50cygpWzBdKTsKICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gdHlwZVJlZmVyZW5jZS0+
dW5pZnlOb2RlKCk7CiAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gZG93bmNh
c3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CkBAIC0xMTEsOCArMTEx
LDggQEAgU3RyaW5nIHdyaXRlTmF0aXZlVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZQogICAgIH0KICAg
ICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAibWF0cml4IikgewogICAgICAg
ICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0g
Myk7Ci0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6
OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBd
KSk7Ci0gICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8QVNU
OjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsw
XSk7CisgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6OlR5cGVS
ZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7Cisg
ICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxSZWY8QVNUOjpUeXBlUmVmZXJl
bmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CiAgICAgICAg
IGF1dG8mIHVuaWZ5Tm9kZSA9IHR5cGVSZWZlcmVuY2UtPnVuaWZ5Tm9kZSgpOwogICAgICAgICBh
dXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKICAg
ICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihuYW1lZFR5cGUpOwpAQCAtMTM3LDggKzEzNyw4IEBAIFN0cmluZyB3cml0ZU5hdGl2
ZVR5cGUoQVNUOjpOYXRpdmVUeXBlRGUKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImFycmF5
PCIsIHByZWZpeCwgIiwgIiwgY29sdW1ucyAqIHJvd3MsICI+Iik7CiAgICAgfQogICAgIEFTU0VS
VChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAxKTsKLSAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJl
bmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwotICAgIGF1
dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNl
Pj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiB0eXBlUmVmZXJl
bmNlID0gV1RGOjpnZXQ8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMF0pOwogICAgIGF1dG8gcHJlZml4ID0gKFsmXSgpIC0+IFN0
cmluZyB7CiAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0
dXJlMUQiKQogICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMWQiX3N0cjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgpAQCAtNTgsNiArNTksNyBAQCBuYW1lc3BhY2Ug
V0hMU0wgewogbmFtZXNwYWNlIE1ldGFsIHsKIAogY2xhc3MgQmFzZVR5cGVOYW1lTm9kZSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgQmFzZVR5cGVOYW1lTm9k
ZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lKQogICAgICAg
ICA6IG1fcGFyZW50KHBhcmVudCkKQEAgLTg0LDYgKzg2LDcgQEAgcHJpdmF0ZToKIH07CiAKIGNs
YXNzIEFycmF5VHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEFycmF5VHlwZU5hbWVOb2RlKEJh
c2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5hbWUsIHVuc2lnbmVkIG51
bUVsZW1lbnRzKQogICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1h
bmdsZWROYW1lKSkKQEAgLTk5LDYgKzEwMiw3IEBAIHByaXZhdGU6CiB9OwogCiBjbGFzcyBBcnJh
eVJlZmVyZW5jZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBBcnJheVJlZmVyZW5jZVR5cGVO
YW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lLCBB
U1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCiAgICAgICAgIDogQmFzZVR5cGVOYW1lTm9k
ZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQpAQCAtMTE0LDYgKzExOCw3IEBAIHByaXZh
dGU6CiB9OwogCiBjbGFzcyBQb2ludGVyVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFt
ZU5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBvaW50
ZXJUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBtYW5nbGVk
TmFtZSwgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQogICAgICAgICA6IEJhc2VUeXBl
TmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSkKQEAgLTEyOSw2ICsxMzQsNyBA
QCBwcml2YXRlOgogfTsKIAogY2xhc3MgUmVmZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGljIEJh
c2VUeXBlTmFtZU5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIFJlZmVyZW5jZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmlu
ZyYmIG1hbmdsZWROYW1lLCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQogICAgICAgICA6IEJh
c2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSkKQEAgLTM0NCw2ICsz
NTAsNyBAQCBCYXNlVHlwZU5hbWVOb2RlKiBUeXBlTmFtZXI6Omluc2VydChBU1Q6CiB9CiAKIGNs
YXNzIE1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3IgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE1ldGFsVHlwZURlY2xhcmF0aW9u
V3JpdGVyKHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6TmFtZWRUeXBlJik+JiYgbWFuZ2xlZE5h
bWVGb3JOYW1lZFR5cGUpCiAgICAgICAgIDogbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZShXVEZN
b3ZlKG1hbmdsZWROYW1lRm9yTmFtZWRUeXBlKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374918</attachid>
            <date>2019-07-25 15:57:57 -0700</date>
            <delta_ts>2019-07-25 19:11:02 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>154112</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRp
YWxpemVWYXJpYWJsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwCShyZXZpc2lvbiAy
NDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9J
bml0aWFsaXplVmFyaWFibGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBw
cml2YXRlOgogICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gIjx6ZXJvLWluaXQ+Il9zOwog
I2VuZGlmCiAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6Q2FsbEV4cHJlc3Npb24+KHZhcmlhYmxlRGVjbGFyYXRpb24uY29kZUxvY2F0aW9uKCksIFdU
Rk1vdmUoZnVuY3Rpb25OYW1lKSwgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+Pigp
KTsKLSAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUodHlwZS0+Y2xvbmUoKSk7CisgICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKCp0eXBlKTsKICAgICAgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFyZ3VtZW50VHlwZXM7CiAg
ICAgICAgIGF1dG8qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQobV9jYXN0RnVu
Y3Rpb25zLCBhcmd1bWVudFR5cGVzLCB0eXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGhh
c2ggPSBJbnRIYXNoPHNpemVfdD46Omhhc2gobV9mdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUo
KSk7CiAgICAgICAgIGhhc2ggXj0gbV9mdW5jdGlvbi0+bmFtZSgpLmhhc2goKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBoYXNoIF49IG1fZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS0+dHlw
ZSgpLnZhbHVlKCktPmhhc2goKTsKKyAgICAgICAgICAgIGhhc2ggXj0gbV9mdW5jdGlvbi0+cGFy
YW1ldGVycygpW2ldLT50eXBlKCktPmhhc2goKTsKIAogICAgICAgICBpZiAobV9mdW5jdGlvbi0+
aXNDYXN0KCkpCiAgICAgICAgICAgICBoYXNoIF49IG1fZnVuY3Rpb24tPnR5cGUoKS5oYXNoKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwx
MCArMTIxLDEwIEBAIHB1YmxpYzoKIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihDb2RlTG9jYXRpb24gbG9jYXRpb24s
IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBmaXJzdEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNz
JiBpbnRyaW5zaWNzKQogewogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7Ci0gICAg
YXV0byByZXR1cm5UeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihsb2NhdGlv
biwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVudC5lbGVtZW50VHlw
ZSgpLmNsb25lKCkpOworICAgIGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6UG9pbnRlclR5cGU6OmNy
ZWF0ZShsb2NhdGlvbiwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVu
dC5lbGVtZW50VHlwZSgpKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRl
cnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9u
ZSgpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5k
KG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpR
dWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAobG9jYXRpb24sIGludHJpbnNpY3MudWludFR5cGUoKSkpLCBTdHJpbmcoKSwgbnVs
bHB0ciwgbnVsbHB0cikpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksICZmaXJz
dEFyZ3VtZW50LCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIHBhcmFtZXRlcnMu
YXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwg
QVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgaW50
cmluc2ljcy51aW50VHlwZSgpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICBy
ZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1v
dmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwog
fQogCkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiByZQogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgYXV0byByZXR1
cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBpbnRyaW5zaWNzLnVp
bnRUeXBlKCkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBmaXJzdEFyZ3VtZW50LmNsb25lKCksIFN0
cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmll
cnMoKSwgJmZpcnN0QXJndW1lbnQsIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAg
cmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZN
b3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9y
KSk7CiB9CiAKQEAgLTE0MSwxMiArMTQxLDEyIEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gcmUKIHsKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAg
IGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgaW50
cmluc2ljcy5ib29sVHlwZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IGZpcnN0QXJndW1l
bnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHVubmFtZWRUeXBlKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewotICAgICAgICBy
ZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewotICAgICAg
ICByZXR1cm4gc2Vjb25kQXJndW1lbnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4gewotICAgICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5jbG9uZSgpOwotICAg
ICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgYXV0byBhcmd1bWVudFR5cGUgPSBmaXJzdEFyZ3Vt
ZW50LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5h
bWVkVHlwZSkgLT4gUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgcmV0dXJuIHVubmFt
ZWRUeXBlLmNvcHlSZWYoKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYpIC0+IFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgIHJldHVybiBzZWNvbmRB
cmd1bWVudC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
dW5uYW1lZFR5cGUpIC0+IFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICByZXR1
cm4gdW5uYW1lZFR5cGUuY29weVJlZigpOworICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYpIC0+IFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CiAgICAgICAgICAg
ICAvLyBXZSBlbmNvdW50ZXJlZCAibnVsbCA9PSBudWxsIi4KICAgICAgICAgICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYyIFRoaXMgY2Fu
IHByb2JhYmx5IGJlIGdlbmVyYWxpemVkLCB1c2luZyB0aGUgInByZWZlcnJlZCB0eXBlIiBpbmZy
YXN0cnVjdHVyZSB1c2VkIGJ5IGdlbmVyaWMgbGl0ZXJhbHMKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMTU0LDggKzE1NCw4IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gcmUKICAgICAgICAgfSkpOwogICAgIH0pKTsKICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmll
cnMoKSwgYXJndW1lbnRUeXBlLT5jbG9uZSgpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikp
OwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0
cikpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIGFyZ3VtZW50VHlwZS5jb3B5
UmVmKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcGFyYW1ldGVycy5hcHBl
bmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6
OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1bWVudFR5cGUpLCBTdHJpbmcoKSwgbnVsbHB0ciwg
bnVsbHB0cikpOwogICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIs
IGlzT3BlcmF0b3IpKTsKIH0KIApAQCAtMTY4LDE0ICsxNjgsMTQgQEAgZW51bSBjbGFzcyBBY2Nl
cHRhYmlsaXR5IHsKIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24+IHJlc29sdmVCeUluc3RhbnRpYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBDb2RlTG9jYXRp
b24gbG9jYXRpb24sIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmlu
Z1R5cGU+PiYgdHlwZXMsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCiB7CiAgICAgaWYg
KG5hbWUgPT0gIm9wZXJhdG9yJltdIiAmJiB0eXBlcy5zaXplKCkgPT0gMikgewotICAgICAgICBh
dXRvKiBmaXJzdEFyZ3VtZW50QXJyYXlSZWYgPSB0eXBlc1swXS5nZXQoKS52aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+
IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CisgICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRB
cnJheVJlZiA9IHR5cGVzWzBdLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUq
IHsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nh
c3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpV
bm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfSwgW10oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlKiB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfSkpOwotICAgICAgICBib29sIHNlY29uZEFyZ3VtZW50SXNVaW50ID0gdHlwZXNbMV0uZ2V0
KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgIGJvb2wgc2Vjb25kQXJndW1lbnRJc1Vp
bnQgPSB0eXBlc1sxXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKICAgICAgICAgICAgIHJldHVybiBt
YXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOwogICAgICAgICB9LCBb
Jl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UpIC0+IGJvb2wgewogICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUoaW50cmluc2ljcy51aW50VHlwZSgpKTsKQEAg
LTE4Myw5ICsxODMsOSBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
CiAgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50QXJyYXlSZWYgJiYgc2Vjb25kQXJndW1lbnRJc1Vp
bnQpCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihs
b2NhdGlvbiwgKmZpcnN0QXJndW1lbnRBcnJheVJlZiwgaW50cmluc2ljcyk7CiAgICAgfSBlbHNl
IGlmIChuYW1lID09ICJvcGVyYXRvci5sZW5ndGgiICYmIHR5cGVzLnNpemUoKSA9PSAxKSB7Ci0g
ICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRSZWZlcmVuY2UgPSB0eXBlc1swXS5nZXQoKS52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1l
ZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgYXV0byogZmlyc3RBcmd1bWVu
dFJlZmVyZW5jZSA9IHR5cGVzWzBdLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewog
ICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxB
U1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3Rh
dGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuICZ1bm5hbWVkVHlwZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5uYW1lZFR5
cGUucHRyKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSwgW10oUmVm
UHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTk0LDcgKzE5NCw3IEBAIHN0YXRpYyBPcHRp
b25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICAgICAgICAgIHJldHVybiByZXNvbHZl
V2l0aE9wZXJhdG9yTGVuZ3RoKGxvY2F0aW9uLCAqZmlyc3RBcmd1bWVudFJlZmVyZW5jZSwgaW50
cmluc2ljcyk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09ICJvcGVyYXRvcj09IiAmJiB0eXBlcy5z
aXplKCkgPT0gMikgewogICAgICAgICBhdXRvIGFjY2VwdGFiaWxpdHkgPSBbXShSZXNvbHZpbmdU
eXBlJiByZXNvbHZpbmdUeXBlKSAtPiBBY2NlcHRhYmlsaXR5IHsKLSAgICAgICAgICAgIHJldHVy
biByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQWNjZXB0YWJpbGl0eSB7CisgICAgICAgICAg
ICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFjY2VwdGFiaWxpdHkgewogICAgICAgICAg
ICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHVubmFtZWRUeXBlLT51bmlmeU5vZGUoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSAmJiBpczxB
U1Q6OlJlZmVyZW5jZVR5cGU+KGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkp
ID8gQWNjZXB0YWJpbGl0eTo6WWVzIDogQWNjZXB0YWJpbGl0eTo6Tm87CiAgICAgICAgICAgICB9
LCBbXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZSkgLT4gQWNjZXB0YWJpbGl0eSB7CkBAIC0zMjEsMTQgKzMyMSwxNCBAQCBzdGF0aWMgYm9v
bCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgCiAgICAgICAgIHNpemVfdCBudW1FeHBlY3Rl
ZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAyIDogMTsKICAgICAgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVk
UGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgZmly
c3RQYXJhbWV0ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClb
MF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICBhdXRvJiBmaXJzdFBhcmFtZXRlclVu
aWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5p
ZnlOb2RlKCk7CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdFBhcmFtZXRl
clVuaWZ5Tm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpOwogICAgICAgICAgICAg
aWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlw
ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlm
IChraW5kID09IENoZWNrS2luZDo6SW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIHNlY29uZFBh
cmFtZXRlclVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS0+
dHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJV
bmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCktPnVu
aWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFy
YW1ldGVyVW5pZnlOb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oc2Vjb25kUGFy
YW1ldGVyVW5pZnlOb2RlKTsKQEAgLTM0NSwxNCArMzQ1LDE0IEBAIHN0YXRpYyBib29sIGNoZWNr
T3BlcmF0b3JPdmVybG9hZChjb25zdCAKICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1l
dGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDMgOiAyOwogICAgICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0
ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiBmaXJzdEFyZ3Vt
ZW50VW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9
IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7
CiAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2Rl
KSkgewogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6
OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2luZCA9PSBD
aGVja0tpbmQ6OkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlm
eU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSktPnVu
aWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0g
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsK
ICAgICAgICAgICAgIGlmICghaXM8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5
Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYg
bmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRlclVuaWZ5
Tm9kZSk7CkBAIC0zNzIsNyArMzcyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJs
b2FkKGNvbnN0IAogICAgICAgICBWZWN0b3I8UmVzb2x2aW5nVHlwZT4gYXJndW1lbnRUeXBlczsK
ICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFy
Z3VtZW50VHlwZVJlZmVyZW5jZXM7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
RXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMTsgKytpKQotICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5h
cHBlbmQoKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpLT5jbG9u
ZSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCpmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpOwogICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50
VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2Vz
LmFwcGVuZChhcmd1bWVudFR5cGUpOwogICAgICAgICBhdXRvKiBvdmVybG9hZCA9IHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcyk7CkBA
IC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0
IAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICB7Ci0g
ICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKClbMF0tPnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgdW5pZnlO
b2RlID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5v
ZGUoKTsKICAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVk
VHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CkBAIC00NzEsMTAg
KzQ3MSwxMCBAQCBwcml2YXRlOgogICAgIH07CiAgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJl
Y3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUg
PSBmYWxzZSk7CiAgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNz
aW9uJiwgYm9vbCByZXF1aXJlc0xlZnRWYWx1ZSA9IGZhbHNlKTsKLSAgICBPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKKyAgICBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVj
dXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOwogICAg
IGJvb2wgcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShBU1Q6OkV4cHJlc3Npb24mKTsKLSAgICB2
b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24pOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4
cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlwZUFu
bm90YXRpb24pOworICAgIHZvaWQgYXNzaWduQ29uY3JldGVUeXBlKEFTVDo6RXhwcmVzc2lvbiYs
IFJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBh
c3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4sIEFTVDo6VHlwZUFubm90YXRpb24pOwogICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHBy
ZXNzaW9uJiwgUmVzb2x2aW5nVHlwZSYsIEFTVDo6VHlwZUFubm90YXRpb24pOwogCiAgICAgdm9p
ZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwpAQCAtNTQxLDE1ICs1
NDEsMTUgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChQcm9ncmFtJiBwcm9ncmFtKQogRXhwZWN0ZWQ8
dm9pZCwgRXJyb3I+IENoZWNrZXI6OmFzc2lnblR5cGVzKCkKIHsKICAgICBmb3IgKGF1dG8mIGtl
eVZhbHVlUGFpciA6IG1fdHlwZU1hcCkgewotICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBrZXlWYWx1
ZVBhaXIudmFsdWUtPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewotICAgICAgICAgICAga2V5VmFsdWVQ
YWlyLmtleS0+c2V0VHlwZSh1bm5hbWVkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIGF1dG8gc3Vj
Y2VzcyA9IGtleVZhbHVlUGFpci52YWx1ZS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICBr
ZXlWYWx1ZVBhaXIua2V5LT5zZXRUeXBlKHVubmFtZWRUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKICAgICAgICAgICAg
IGlmICghcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkubWF5YmVSZXNv
bHZlZFR5cGUoKSkgewogICAgICAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oY29t
bWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtl
eVZhbHVlUGFpci5rZXktPnNldFR5cGUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFi
bGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBrZXlWYWx1ZVBh
aXIua2V5LT5zZXRUeXBlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgp
LnJlc29sdmVkVHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KSk7
CiAgICAgICAgIGlmICghc3VjY2VzcykKQEAgLTU5Nyw0NCArNTk3LDQ0IEBAIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXQKICAgICBWaXNpdG9yOjp2aXNpdChmdW5jdGlv
bkRlZmluaXRpb24pOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiBsZWZ0LCBSZXNvbHZpbmdUeXBl
JiByaWdodCkKK3N0YXRpYyBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQo
UmVzb2x2aW5nVHlwZSYgbGVmdCwgUmVzb2x2aW5nVHlwZSYgcmlnaHQpCiB7Ci0gICAgcmV0dXJu
IGxlZnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiBsZWZ0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAg
ICAgICAgcmV0dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4geworICAgIHJldHVybiBsZWZ0LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsK
KyAgICAgICAgcmV0dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CiAgICAg
ICAgICAgICBpZiAobWF0Y2hlcyhsZWZ0LCByaWdodCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGxlZnQtPmNsb25lKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAg
ICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgICAgIHJldHVy
biBsZWZ0LmNvcHlSZWYoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IFJlZlB0cjxB
U1Q6OlVubmFtZWRUeXBlPiB7CiAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobGVm
dCwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkpOwogICAgICAgICB9KSk7Ci0gICAgfSwgWyZdKFJl
ZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICByZXR1cm4gcmlnaHQudmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdodCkgLT4gT3B0
aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgfSwgWyZdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBl
PiB7CisgICAgICAgIHJldHVybiByaWdodC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHJpZ2h0KSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gewog
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHJpZ2h0LCBsZWZ0LT5yZXNvbHZhYmxl
VHlwZSgpKTsKLSAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAg
ICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBSZWZQ
dHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0
KGxlZnQtPnJlc29sdmFibGVUeXBlKCksIHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKICAgICAg
ICAgfSkpOwogICAgIH0pKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwg
QVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCitzdGF0aWMgUmVmUHRyPEFTVDo6VW5uYW1l
ZFR5cGU+IG1hdGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQogewotICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVz
b2x2aW5nVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7Cisg
ICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiByZXNvbHZpbmdUeXBlKSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlw
ZT4gewogICAgICAgICBpZiAobWF0Y2hlcyh1bm5hbWVkVHlwZSwgcmVzb2x2aW5nVHlwZSkpCi0g
ICAgICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUuY2xvbmUoKTsKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYg
cmVzb2x2aW5nVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7
CisgICAgICAgICAgICByZXR1cm4gJnVubmFtZWRUeXBlOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2aW5n
VHlwZSkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgcmV0dXJuIG1hdGNo
QW5kQ29tbWl0KHVubmFtZWRUeXBlLCByZXNvbHZpbmdUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsK
ICAgICB9KSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4+IGNvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQorc3RhdGljIFJlZlB0cjxB
U1Q6OlVubmFtZWRUeXBlPiBjb21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkKIHsK
LSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5jbG9u
ZSgpOwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiB7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gUmVmUHRyPEFTVDo6VW5uYW1l
ZFR5cGU+IHsKKyAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLmNvcHlSZWYoKTsKKyAgICB9LCBb
Jl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UpIC0+IFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CiAgICAgICAgIGlmICghcmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKSkKICAg
ICAgICAgICAgIHJldHVybiBjb21taXQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFi
bGVUeXBlKCkpOwotICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29s
dmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsKKyAgICAgICAgcmV0dXJuICZyZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKTsKICAg
ICB9KSk7CiB9CiAKQEAgLTc0NywxNCArNzQ3LDE0IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpWYXJpYWJsZURlY2xhcmEKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYm
IHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpS
aWdodFZhbHVlKCkpCit2b2lkIENoZWNrZXI6OmFzc2lnbkNvbmNyZXRlVHlwZShBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24sIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB1bm5hbWVkVHlwZSwgQVNU
OjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewog
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtl
X3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihXVEZNb3ZlKHVubmFtZWRUeXBlKSkpOwogICAgIEFTU0VS
VF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgZXhwcmVzc2lv
bi5zZXRUeXBlQW5ub3RhdGlvbihXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKLXZvaWQg
Q2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNUOjpU
eXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQordm9pZCBD
aGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVmUHRyPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNUOjpUeXBl
QW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewogICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtlX3VuaXF1
ZTxSZXNvbHZpbmdUeXBlPihXVEZNb3ZlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSkpOwogICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC03NjMs
OCArNzYzLDggQEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbgogCiB2
b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVz
b2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3Rh
dGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewotICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsK
LSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBzdGQ6
Om1ha2VfdW5pcXVlPFJlc29sdmluZ1R5cGU+KHJlc3VsdC0+Y2xvbmUoKSkpOworICAgIHJlc29s
dmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHBy
ZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPFJlc29sdmluZ1R5cGU+KHJlc3VsdC5jb3B5UmVmKCkp
KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0KSB7
CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3Rk
OjptYWtlX3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihyZXN1bHQuY29weVJlZigpKSk7CkBAIC03ODks
NyArNzg5LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWduVHlwZShhc3NpZ25tZW50RXhwcmVzc2lv
biwgV1RGTW92ZSgqcmVzdWx0VHlwZSkpOworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShhc3NpZ25t
ZW50RXhwcmVzc2lvbiwgKnJlc3VsdFR5cGUpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikK
QEAgLTc5OCwxNCArNzk4LDE0IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5
V3JpdGUKICAgICBpZiAoIWxlZnRWYWx1ZUluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKS5zZXRUeXBlKGxlZnRWYWx1ZUluZm8t
PnJlc29sdmluZ1R5cGUuZ2V0VW5uYW1lZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpLnNldFR5cGUoKmxlZnRWYWx1ZUluZm8tPnJlc29s
dmluZ1R5cGUuZ2V0VW5uYW1lZFR5cGUoKSk7CiAKICAgICBhdXRvIG5ld1ZhbHVlSW5mbyA9IHJl
Y3Vyc2VBbmRHZXRJbmZvKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNz
aW9uKCkpOwogICAgIGlmICghbmV3VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaGVkVHlwZSA9IG1h
dGNoQW5kQ29tbWl0KGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSkpCi0gICAgICAgIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFs
dWUoKS5zZXRUeXBlKFdURk1vdmUobWF0Y2hlZFR5cGUudmFsdWUoKSkpOworICAgIGlmIChSZWZQ
dHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hlZFR5cGUgPSBtYXRjaEFuZENvbW1pdChsZWZ0VmFs
dWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpKQorICAg
ICAgICByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkuc2V0VHlwZSgqbWF0Y2hl
ZFR5cGUpOwogICAgIGVsc2UgewogICAgICAgICBzZXRFcnJvcihFcnJvcigiQmFzZSBvZiB0aGUg
cmVhZC1tb2RpZnktd3JpdGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBtYXRjaCB0aGUgdHlwZSBvZiB0
aGUgbmV3IHZhbHVlLiIsIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkp
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtODIwLDggKzgyMCw4IEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGUKIAogc3RhdGljIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVu
bmFtZWRUeXBlKFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUpCiB7Ci0gICAgcmV0dXJuIHJl
c29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKLSAgICAgICAgcmV0dXJuICZ0
eXBlOworICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10o
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAg
ICAgIHJldHVybiB0eXBlLnB0cigpOwogICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mIHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKICAgICAgICAgLy8gRklYTUU6
IElmIHRoZSB0eXBlIGlzbid0IGNvbW1pdHRlZCwgc2hvdWxkIHdlIGp1c3QgY29tbWl0KCkgaXQg
bm93PwogICAgICAgICByZXR1cm4gdHlwZS0+cmVzb2x2YWJsZVR5cGUoKS5tYXliZVJlc29sdmVk
VHlwZSgpOwpAQCAtODUyLDcgKzg1Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJl
ZmVyZW5jZUV4cHIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+ZWxlbWVudFR5cGUoKS5jbG9uZSgpLCBB
U1Q6OkxlZnRWYWx1ZSB7IHBvaW50ZXJUeXBlLT5hZGRyZXNzU3BhY2UoKSB9KTsKKyAgICBhc3Np
Z25Db25jcmV0ZVR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+ZWxlbWVu
dFR5cGUoKSwgQVNUOjpMZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkgfSk7
CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1h
a2VQb2ludGVyRXhwcmVzc2lvbikKQEAgLTg3Myw3ICs4NzMsNyBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
c3NpZ25UeXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihtYWtlUG9pbnRlckV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICpsZWZ0QWRkcmVz
c1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CisgICAgYXNzaWduQ29uY3JldGVUeXBl
KG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2UsICpsZWZ0VmFs
dWVUeXBlKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQpAQCAtODk0LDcgKzg5
NCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmUKICAgICAgICAg
aWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkgewogICAgICAgICAgICAgYXV0
byYgcG9pbnRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSk7
CiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODE2MyBTYXZlIHRoZSBmYWN0IHRoYXQgd2UncmUgbm90IHRhcmdldHRpbmcgdGhl
IGl0ZW07IHdlJ3JlIHRhcmdldHRpbmcgdGhlIGl0ZW0ncyBpbm5lciBlbGVtZW50LgotICAgICAg
ICAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVl
UmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmNvZGVMb2NhdGlvbigpLCBwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSwgcG9pbnRlclR5cGUu
ZWxlbWVudFR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICBhc3NpZ25Db25jcmV0ZVR5cGUo
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGU6OmNy
ZWF0ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBwb2ludGVy
VHlwZS5hZGRyZXNzU3BhY2UoKSwgcG9pbnRlclR5cGUuZWxlbWVudFR5cGUoKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTkwNyw3ICs5MDcsNyBAQCB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlCiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5
VHlwZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3du
Y2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOwogICAgICAgICAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjMgU2F2ZSB0aGUg
bnVtYmVyIG9mIGVsZW1lbnRzLgotICAgICAgICAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPiht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAqbGVmdEFkZHJlc3NT
cGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICBhc3NpZ25Db25j
cmV0ZVR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU6OmNyZWF0ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
LCAqbGVmdEFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtOTE4LDI5ICs5MTgsMjkgQEAgdm9pZCBDaGVja2Vy
Ojp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVm
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNv
ZGVMb2NhdGlvbigpLCAqbGVmdEFkZHJlc3NTcGFjZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkp
OworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24uY29kZUxvY2F0aW9uKCksICpsZWZ0QWRkcmVzc1NwYWNlLCAqbGVmdFZhbHVlVHlwZSkpOwog
fQogCi1zdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBhcmd1bWVu
dFR5cGVGb3JBbmRPdmVybG9hZChBU1Q6OlVubmFtZWRUeXBlJiBiYXNlVHlwZSwgQVNUOjpBZGRy
ZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBh
cmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChBU1Q6OlVubmFtZWRUeXBlJiBiYXNlVHlwZSwgQVNU
OjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQogewogICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGJh
c2VUeXBlLnVuaWZ5Tm9kZSgpOwogICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2Rl
KSkgewogICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4o
dW5pZnlOb2RlKTsKLSAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihuYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKG5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwgbmFtZWRUeXBlKSkgfTsKKyAg
ICAgICAgcmV0dXJuIHsgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKG5hbWVkVHlwZS5jb2RlTG9j
YXRpb24oKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobmFtZWRUeXBl
LmNvZGVMb2NhdGlvbigpLCBuYW1lZFR5cGUpKSB9OwogICAgIH0KIAogICAgIGF1dG8mIHVubmFt
ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKIAogICAgIGlm
IChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICByZXR1
cm4gdW5uYW1lZFR5cGUuY2xvbmUoKTsKKyAgICAgICAgcmV0dXJuICZ1bm5hbWVkVHlwZTsKIAog
ICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICByZXR1cm4g
eyBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZS5jb2Rl
TG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZFR5cGUpLnR5cGUoKS5jbG9uZSgpKSB9OworICAgICAgICByZXR1cm4geyBBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZTo6Y3JlYXRlKHVubmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3Bh
Y2UsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpKSB9OwogCiAg
ICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4geyBt
YWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlLmNvZGVMb2NhdGlvbigp
LCBhZGRyZXNzU3BhY2UsIHVubmFtZWRUeXBlLmNsb25lKCkpIH07CisgICAgcmV0dXJuIHsgQVNU
OjpQb2ludGVyVHlwZTo6Y3JlYXRlKHVubmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNz
U3BhY2UsIHVubmFtZWRUeXBlKSB9OwogfQogCiB2b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0aW5n
KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24s
IFJlc29sdmluZ1R5cGUqIGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCkBAIC05NTUsNyArOTU1LDcg
QEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcgogICAgIH0KIAogICAg
IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0dGVyRnVuY3Rpb24gPSBudWxscHRyOwotICAg
IEFTVDo6VW5uYW1lZFR5cGUqIGdldHRlclJldHVyblR5cGUgPSBudWxscHRyOworICAgIFJlZlB0
cjxBU1Q6OlVubmFtZWRUeXBlPiBnZXR0ZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKICAgICB7CiAg
ICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBnZXR0
ZXJBcmd1bWVudFR5cGVzIHsgYmFzZUluZm8tPnJlc29sdmluZ1R5cGUgfTsKICAgICAgICAgaWYg
KGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCkBAIC05NjgsMTEgKzk2OCwxMSBAQCB2b2lkIENoZWNr
ZXI6OmZpbmlzaFZpc2l0aW5nKEFTVDo6UHJvcGVyCiAgICAgfQogCiAgICAgQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiBhbmRlckZ1bmN0aW9uID0gbnVsbHB0cjsKLSAgICBBU1Q6OlVubmFtZWRU
eXBlKiBhbmRlclJldHVyblR5cGUgPSBudWxscHRyOworICAgIFJlZlB0cjxBU1Q6OlVubmFtZWRU
eXBlPiBhbmRlclJldHVyblR5cGUgPSBudWxscHRyOwogICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFj
ZSA9IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CiAgICAgaWYg
KGxlZnRBZGRyZXNzU3BhY2UpIHsKICAgICAgICAgaWYgKGF1dG8gYXJndW1lbnRUeXBlRm9yQW5k
T3ZlcmxvYWQgPSBXSExTTDo6YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5hbWVk
VHlwZSwgKmxlZnRBZGRyZXNzU3BhY2UpKSB7Ci0gICAgICAgICAgICBSZXNvbHZpbmdUeXBlIGFy
Z3VtZW50VHlwZSA9IHsgV1RGTW92ZSgqYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQpIH07Cisg
ICAgICAgICAgICBSZXNvbHZpbmdUeXBlIGFyZ3VtZW50VHlwZSA9IHsgUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+KCphcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCkgfTsKICAgICAgICAgICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRlckFyZ3VtZW50VHlw
ZXMgeyBhcmd1bWVudFR5cGUgfTsKICAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsQXJndW1lbnRU
eXBlKQogICAgICAgICAgICAgICAgIGFuZGVyQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFkZGl0aW9u
YWxBcmd1bWVudFR5cGUpOwpAQCAtOTg1LDkgKzk4NSw5IEBAIHZvaWQgQ2hlY2tlcjo6ZmluaXNo
VmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICB9CiAKICAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHRocmVhZEFuZGVyRnVuY3Rpb24gPSBudWxscHRyOwotICAgIEFTVDo6VW5uYW1lZFR5cGUq
IHRocmVhZEFuZGVyUmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgUmVmUHRyPEFTVDo6VW5uYW1l
ZFR5cGU+IHRocmVhZEFuZGVyUmV0dXJuVHlwZSA9IG51bGxwdHI7CiAgICAgaWYgKGF1dG8gYXJn
dW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQgPSBXSExTTDo6YXJndW1lbnRUeXBlRm9yQW5kT3Zlcmxv
YWQoKmJhc2VVbm5hbWVkVHlwZSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpIHsKLSAgICAg
ICAgUmVzb2x2aW5nVHlwZSBhcmd1bWVudFR5cGUgPSB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2lu
dGVyVHlwZT4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgpLmNsb25lKCkpIH07Cisg
ICAgICAgIFJlc29sdmluZ1R5cGUgYXJndW1lbnRUeXBlID0geyBSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4oQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgKmJhc2VVbm5hbWVkVHlwZSkp
IH07CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+
PiB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMgeyBhcmd1bWVudFR5cGUgfTsKICAgICAgICAgaWYg
KGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCiAgICAgICAgICAgICB0aHJlYWRBbmRlckFyZ3VtZW50
VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1lbnRUeXBlKTsKQEAgLTEwMjgsMTIgKzEwMjgs
MTIgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpVbm5hbWVkVHlwZSogZmllbGRUeXBlID0gZ2V0dGVy
UmV0dXJuVHlwZSA/IGdldHRlclJldHVyblR5cGUgOiBhbmRlclJldHVyblR5cGUgPyBhbmRlclJl
dHVyblR5cGUgOiB0aHJlYWRBbmRlclJldHVyblR5cGU7CisgICAgUmVmPEFTVDo6VW5uYW1lZFR5
cGU+IGZpZWxkVHlwZSA9IGdldHRlclJldHVyblR5cGUgPyAqZ2V0dGVyUmV0dXJuVHlwZSA6IGFu
ZGVyUmV0dXJuVHlwZSA/ICphbmRlclJldHVyblR5cGUgOiAqdGhyZWFkQW5kZXJSZXR1cm5UeXBl
OwogCiAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXR0ZXJGdW5jdGlvbiA9IG51bGxw
dHI7CiAgICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0dGVyUmV0dXJuVHlwZSA9IG51bGxwdHI7CiAg
ICAgewotICAgICAgICBSZXNvbHZpbmdUeXBlIGZpZWxkUmVzb2x2aW5nVHlwZShmaWVsZFR5cGUt
PmNsb25lKCkpOworICAgICAgICBSZXNvbHZpbmdUeXBlIGZpZWxkUmVzb2x2aW5nVHlwZShmaWVs
ZFR5cGUuY29weVJlZigpKTsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+IHNldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVzb2x2aW5n
VHlwZSB9OwogICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3VtZW50VHlwZSkKICAgICAgICAgICAg
IHNldHRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1lbnRUeXBlKTsKQEAg
LTEwNjMsNyArMTA2Myw3IEBAIHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9w
ZXIKICAgICAgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgp
OwogICAgIH0gZWxzZSBpZiAoIWJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUo
KSAmJiAoc2V0dGVyRnVuY3Rpb24gfHwgdGhyZWFkQW5kZXJGdW5jdGlvbikpCiAgICAgICAgIHR5
cGVBbm5vdGF0aW9uID0gQVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOwotICAgIGFzc2lnblR5cGUo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlw
ZUFubm90YXRpb24pKTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLCBXVEZNb3ZlKGZpZWxkVHlwZSksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0K
IAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24p
CkBAIC0xMDg0LDcgKzEwODQsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVS
ZWZlcmVuCiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOwogICAgIEFT
U0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCkpOwogICAgIAotICAgIGFz
c2lnblR5cGUodmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkt
PnR5cGUoKS0+Y2xvbmUoKSwgQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOworICAgIGFzc2lnbkNvbmNyZXRlVHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgKnZhcmlh
YmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKSwgQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmV0
dXJuJiByZXR1cm5TdGF0ZW1lbnQpCkBAIC0xMTM4LDE5ICsxMTM4LDE5IEBAIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnUKIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkKIHsKLSAgICBhc3NpZ25UeXBlKGJvb2xl
YW5MaXRlcmFsLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoYm9vbGVhbkxpdGVyYWwuY29kZUxv
Y2F0aW9uKCksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7CisgICAgYXNzaWduQ29uY3JldGVU
eXBlKGJvb2xlYW5MaXRlcmFsLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoYm9vbGVhbkxpdGVy
YWwuY29kZUxvY2F0aW9uKCksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7CiB9CiAKIHZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbCkKIHsKICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVu
dW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKICAgICBhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24g
PSAqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpOwotICAg
IGFzc2lnblR5cGUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmNvZGVMb2NhdGlvbigpLCBlbnVtZXJhdGlv
bkRlZmluaXRpb24pKTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUoZW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmNvZGVMb2NhdGlvbigpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKIH0KIAogYm9vbCBDaGVj
a2VyOjppc0Jvb2xUeXBlKFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUpCiB7Ci0gICAgcmV0
dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBib29sIHsKKyAgICByZXR1cm4gcmVzb2x2aW5nVHlw
ZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQp
IC0+IGJvb2wgewogICAgICAgICByZXR1cm4gbWF0Y2hlcyhsZWZ0LCBtX2ludHJpbnNpY3MuYm9v
bFR5cGUoKSk7CiAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxl
ZnQpIC0+IGJvb2wgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRD
b21taXQobV9pbnRyaW5zaWNzLmJvb2xUeXBlKCksIGxlZnQtPnJlc29sdmFibGVUeXBlKCkpKTsK
QEAgLTExNzMsNyArMTE3Myw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90
RXhwcmUKIHsKICAgICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUobG9naWNhbE5vdEV4
cHJlc3Npb24ub3BlcmFuZCgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGFzc2lnblR5cGUobG9n
aWNhbE5vdEV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2dpY2FsTm90RXhw
cmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKKyAgICBh
c3NpZ25Db25jcmV0ZVR5cGUobG9naWNhbE5vdEV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChsb2dpY2FsTm90RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgbV9pbnRyaW5zaWNz
LmJvb2xUeXBlKCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHBy
ZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKQEAgLTExODIsNyArMTE4Miw3IEBAIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2kKICAgICAgICAgcmV0dXJuOwogICAgIGlm
ICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGFzc2lnblR5cGUobG9naWNhbEV4cHJlc3Npb24sIEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChsb2dpY2FsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgbV9p
bnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUobG9naWNhbEV4
cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2dpY2FsRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKIH0KIAogdm9pZCBDaGVja2Vy
Ojp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKQEAgLTE0MDQsNyArMTQwNCw3
IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2kKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUodGVybmFyeUV4cHJlc3Npb24sIFdURk1vdmUo
KnJlc3VsdFR5cGUpKTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUodGVybmFyeUV4cHJlc3Npb24s
ICpyZXN1bHRUeXBlKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJiBjYWxsRXhwcmVzc2lvbikKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYKIAogICAgIGNhbGxFeHByZXNzaW9uLnNldEZ1bmN0
aW9uKCpmdW5jdGlvbik7CiAKLSAgICBhc3NpZ25UeXBlKGNhbGxFeHByZXNzaW9uLCBmdW5jdGlv
bi0+dHlwZSgpLmNsb25lKCkpOworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShjYWxsRXhwcmVzc2lv
biwgZnVuY3Rpb24tPnR5cGUoKSk7CiB9CiAKIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVjayhQ
cm9ncmFtJiBwcm9ncmFtKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbmZlclR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCShyZXZpc2lvbiAyNDc4MzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw4MiArODEsODIgQEAgYm9vbCBtYXRjaGVzKGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUmIHVubgogICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLnVuaWZ5
Tm9kZSgpLCBvdGhlci51bmlmeU5vZGUoKSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VHlwZSYgdW5pZnlOb2Rl
LCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3N0YXRpYyBSZWZQdHI8QVNU
OjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpUeXBlJiB1bmlmeU5vZGUsIEFTVDo6
UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQogewogICAgIEFTU0VSVCghcmVzb2x2YWJs
ZVR5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSk7CiAgICAgaWYgKCFyZXNvbHZhYmxlVHlwZS5jYW5S
ZXNvbHZlKHVuaWZ5Tm9kZSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkg
ewogICAgICAgICBhdXRvJiBuYW1lZFVuaWZ5Tm9kZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBl
Pih1bmlmeU5vZGUpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChuYW1lZFVuaWZ5Tm9kZS5jb2RlTG9jYXRpb24oKSwgbmFtZWRVbmlmeU5vZGUpOwotICAg
ICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgICAgIHJl
c29sdmFibGVUeXBlLnJlc29sdmUocmVzdWx0LmNvcHlSZWYoKSk7CiAgICAgICAgIHJldHVybiB7
IFdURk1vdmUocmVzdWx0KSB9OwogICAgIH0KIAotICAgIGF1dG8gcmVzdWx0ID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKS5jbG9uZSgpOwotICAgIHJlc29sdmFibGVUeXBl
LnJlc29sdmUocmVzdWx0LT5jbG9uZSgpKTsKKyAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVz
dWx0ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICByZXNvbHZh
YmxlVHlwZS5yZXNvbHZlKHJlc3VsdC5jb3B5UmVmKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQo
QVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29s
dmFibGVUeXBlKQorUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxl
VHlwZSkKIHsKICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUudW5pZnlOb2Rl
KCksIHJlc29sdmFibGVUeXBlKTsKIH0KIAotT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBBU1Q6OlJl
c29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBt
YXRjaEFuZENvbW1pdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVU
eXBlJiByZXNvbHZhYmxlVHlwZSkKIHsKICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRU
eXBlLnVuaWZ5Tm9kZSgpLCByZXNvbHZhYmxlVHlwZSk7CiB9CiAKLU9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYg
cmVzb2x2YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIpCitS
ZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlw
ZSYgcmVzb2x2YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIp
CiB7CiAgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZTEubWF5YmVSZXNvbHZlZFR5cGUoKSk7CiAg
ICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZTIubWF5YmVSZXNvbHZlZFR5cGUoKSk7CiAgICAgaWYg
KGlzPEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6OkZs
b2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKLSAgICAgICAgcmVzb2x2YWJsZVR5
cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlw
ZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKLSAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJl
c29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpLnBy
ZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6Rmxv
YXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsK
KyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKSk7CisgICAgICAgIHJlc29s
dmFibGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkpOworICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFT
VDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCk7CiAg
ICAgfQogICAgIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUx
KSAmJiBpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgewotICAg
ICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAg
IHJlc29sdmFibGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBl
PihyZXNvbHZhYmxlVHlwZTIpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKLSAgICAgICAgcmV0
dXJuIGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnBy
ZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShk
b3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJy
ZWRUeXBlKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6
OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkpOwor
ICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZh
YmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKTsKICAgICB9CiAgICAgaWYgKGlzPEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgewotICAgICAgICByZXNvbHZh
YmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
PihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKLSAgICAgICAgcmVz
b2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAg
IHJldHVybiBkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZh
YmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgICAgICByZXNvbHZhYmxlVHlw
ZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNv
bHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKSk7CisgICAgICAgIHJlc29sdmFibGVUeXBlMi5y
ZXNvbHZlKGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFi
bGVUeXBlMikucHJlZmVycmVkVHlwZSgpKTsKKyAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6
OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5
cGUoKTsKICAgICB9CiAgICAgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZTEpICYmIGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWls
cy4KLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gY29tbWl0KEFTVDo6UmVz
b2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQorUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IGNv
bW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKIHsKICAgICBBU1NFUlQo
IXJlc29sdmFibGVUeXBlLm1heWJlUmVzb2x2ZWRUeXBlKCkpOwogICAgIGlmIChpczxBU1Q6OkZs
b2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKSkgewogICAgICAgICBhdXRvJiBmbG9hdExp
dGVyYWxUeXBlID0gZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlw
ZSk7Ci0gICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZmxvYXRMaXRlcmFsVHlwZS5wcmVm
ZXJyZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHJldHVybiBmbG9hdExpdGVyYWxUeXBlLnBy
ZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGZs
b2F0TGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKKyAgICAgICAgcmV0dXJuICZmbG9hdExp
dGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKTsKICAgICB9CiAgICAgaWYgKGlzPEFTVDo6SW50ZWdl
ckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKICAgICAgICAgYXV0byYgaW50ZWdlckxp
dGVyYWxUeXBlID0gZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVU
eXBlKTsKLSAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShpbnRlZ2VyTGl0ZXJhbFR5cGUu
cHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOwotICAgICAgICByZXR1cm4gaW50ZWdlckxpdGVyYWxU
eXBlLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNv
bHZlKGludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCkpOworICAgICAgICByZXR1cm4g
JmludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCk7CiAgICAgfQogICAgIGlmIChpczxB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKICAgICAg
ICAgYXV0byYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSk7Ci0gICAgICAgIHJlc29sdmFi
bGVUeXBlLnJlc29sdmUodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgp
LmNsb25lKCkpOwotICAgICAgICByZXR1cm4gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUucHJl
ZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUodW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKKyAgICAgICAgcmV0dXJu
ICZ1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCk7CiAgICAgfQogICAg
IGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWlscy4KLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGJv
b2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlw
ZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQpAQCAtMTc5LDggKzE3OSw4IEBA
IGJvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW0KICAgICAgICAgYXV0byBh
c3NpZ24gPSBbJl0oQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVBcmd1bWVudCwgQVNUOjpDb25zdGFu
dEV4cHJlc3Npb24qJiBleHByZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UqJiB0eXBlUmVmZXJl
bmNlKSB7CiAgICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6
Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgICAgICAgICAg
ICBleHByZXNzaW9uID0gJmNvbnN0YW50RXhwcmVzc2lvbjsKLSAgICAgICAgICAgIH0sIFsmXShV
bmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgewotICAgICAg
ICAgICAgICAgIHR5cGVSZWZlcmVuY2UgPSAmdGhlVHlwZVJlZmVyZW5jZTsKKyAgICAgICAgICAg
IH0sIFsmXShSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgeworICAg
ICAgICAgICAgICAgIHR5cGVSZWZlcmVuY2UgPSB0aGVUeXBlUmVmZXJlbmNlLnB0cigpOwogICAg
ICAgICAgICAgfSksIHR5cGVBcmd1bWVudCk7CiAgICAgICAgIH07CiAKQEAgLTIwNSw3ICsyMDUs
NyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaW5mZXJUeXBlc0ZvckNhbGxJbXBsCiAgICAgaWYgKHBv
c3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBhcmd1bWVudFR5cGVzLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9z
c2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBz
dWNjZXNzID0gYXJndW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAg
ICAgICAgYXV0byBzdWNjZXNzID0gYXJndW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29s
IHsKICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCpwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRl
cnMoKVtpXS0+dHlwZSgpLCB1bm5hbWVkVHlwZSk7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7
CiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVU
eXBlKCkuY2FuUmVzb2x2ZShwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgp
LT51bmlmeU5vZGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEluZmVyVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBjbGFzcyBVbm5hbWVkVHlwZTsKIGJvb2wgbWF0
Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYpOwog
Ym9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6TmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUm
KTsKIGJvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1l
ZFR5cGUmKTsKLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRD
b21taXQoQVNUOjpVbm5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKLU9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5
cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7Ci1PcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29s
dmFibGVUeXBlJik7Ci1PcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1p
dChBU1Q6OlJlc29sdmFibGVUeXBlJik7CitSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hB
bmRDb21taXQoQVNUOjpVbm5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK1JlZlB0
cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6Ok5hbWVkVHlwZSYsIEFTVDo6
UmVzb2x2YWJsZVR5cGUmKTsKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1p
dChBU1Q6OlJlc29sdmFibGVUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworUmVmUHRyPEFT
VDo6VW5uYW1lZFR5cGU+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJik7CiBib29sIGluZmVy
VHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6
VHlwZUFyZ3VtZW50cyYpOwogYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgY29uc3QgQVNUOjpOYW1lZFR5cGUqIGNh
c3RSZXR1cm5UeXBlKTsKIGJvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUqIGNh
c3RSZXR1cm5UeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMSW50cmluc2ljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg3LDkgKzI4Nyw5IEBAIGJvb2wgSW50cmluc2ljczo6YWRkVmVj
dG9yKEFTVDo6TmF0aXZlVHkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOwotICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKICAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkpOwotICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19j
YXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZl
cmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAg
YXV0byYgaW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpn
ZXQ8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKICAgICBhdXRvJiBsZW5ndGhFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNU
OjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KClbMV0pOwogICAgIEFTU0VSVCghaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpOwog
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogYXJyYXk7CkBAIC0zMjYsMTAgKzMyNiwx
MCBAQCBib29sIEludHJpbnNpY3M6OmFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpLnNpemUoKSA9PSAzKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxV
bmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxB
U1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
WzBdKSk7CiAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4
cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKICAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4o
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSkpOwotICAgIGF1dG8mIGlu
bmVyVHlwZSA9IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFVuaXF1
ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBl
UmVmZXJlbmNlJj4oV1RGOjpnZXQ8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKICAgICBhdXRvJiByb3dFeHByZXNzaW9u
ID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMV0pOwogICAgIGF1dG8mIGNvbHVtbkV4cHJlc3Npb24gPSBXVEY6
OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVsyXSk7CiAgICAgQVNTRVJUKCFpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNp
emUoKSk7CkBAIC00MTEsOCArNDExLDggQEAgdm9pZCBJbnRyaW5zaWNzOjphZGREZXB0aFRleHR1
cmUoQVNUOjpOYQogdm9pZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCiB7CiAgICAgQVNTRVJUKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOwotICAgIEFTU0VSVChX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7Ci0gICAgYXV0byYgaW5uZXJU
eXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8VW5pcXVlUmVm
PEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8QVNUOjpUeXBl
UmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwor
ICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+KFdU
Rjo6Z2V0PFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpWzBdKSk7CiAgICAgQVNTRVJUKCFpbm5lclR5cGUudHlwZUFyZ3VtZW50cygp
LnNpemUoKSk7CiAgICAgaWYgKGFkZEZ1bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwg
aW5uZXJUeXBlKSkgewogICAgICAgICBtX3RleHR1cmVTZXQuYWRkKCZuYXRpdmVUeXBlRGVjbGFy
YXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTYsNyArNDE2LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZUFyZ3VtZW50KCkgLT4gRXhwZQog
ICAgIH0KICAgICBDT05TVU1FX1RZUEUocmVzdWx0LCBJZGVudGlmaWVyKTsKICAgICBDb2RlTG9j
YXRpb24gbG9jYXRpb24oKnJlc3VsdCk7Ci0gICAgcmV0dXJuIEFTVDo6VHlwZUFyZ3VtZW50KG1h
a2VVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPihsb2NhdGlvbiwgcmVzdWx0LT5zdHJpbmdW
aWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIEFTVDo6VHlwZUFyZ3VtZW50cygpKSk7CisgICAgcmV0
dXJuIEFTVDo6VHlwZUFyZ3VtZW50KEFTVDo6VHlwZVJlZmVyZW5jZTo6Y3JlYXRlKGxvY2F0aW9u
LCByZXN1bHQtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgQVNUOjpUeXBlQXJndW1l
bnRzKCkpKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlVHlwZUFyZ3VtZW50cygpIC0+IEV4cGVj
dGVkPEFTVDo6VHlwZUFyZ3VtZW50cywgRXJyb3I+CkBAIC01MDUsNyArNTA1LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdAogICAgIHJldHVybiB7eyB7ICp0b2tl
biB9LCAqdG9rZW4sIHsgYWRkcmVzc1NwYWNlIH0sIFdURjo6bnVsbG9wdCB9fTsKIH0KIAotYXV0
byBQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiwgRXJyb3I+CithdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0ZWQ8UmVmPEFT
VDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4KIHsKICAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0g
dHJ5VHlwZXM8CiAgICAgICAgIFRva2VuOjpUeXBlOjpDb25zdGFudCwKQEAgLTUzMywyMCArNTMz
LDIwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmkKICAgICAgICAg
ICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4
QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeEFiYnJldmlhdGVkJiB0eXBlU3VmZml4
QWJicmV2aWF0ZWQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICBhdXRvIGNvbnN0cnVjdFR5cGVG
cm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeEFiYnJldmlhdGVkJiB0
eXBlU3VmZml4QWJicmV2aWF0ZWQsIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAt
PiBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0
aW9uKCphZGRyZXNzU3BhY2VUb2tlbiwgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLmxvY2F0aW9uKTsK
ICAgICAgICAgICAgIHN3aXRjaCAodHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuLnR5cGUpIHsK
ICAgICAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlN0YXI6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihsb2NhdGlvbiwgYWRkcmVzc1Nw
YWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBBU1Q6
OlBvaW50ZXJUeXBlOjpjcmVhdGUobG9jYXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2
aW91cykpIH07CiAgICAgICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFp
cjoKLSAgICAgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPihsb2NhdGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRl
KGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMpKSB9OwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZVN1ZmZpeEFiYnJldmlhdGVk
LnRva2VuLnR5cGUgPT0gVG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0KTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlUeXBlPihsb2NhdGlvbiwg
V1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4QWJicmV2aWF0ZWQubnVtRWxlbWVudHMpIH07
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpBcnJheVR5cGU6OmNyZWF0ZShsb2NhdGlv
biwgV1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4QWJicmV2aWF0ZWQubnVtRWxlbWVudHMp
IH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAgICAgICAgIFBBUlNFKGZpcnN0VHlwZVN1
ZmZpeEFiYnJldmlhdGVkLCBUeXBlU3VmZml4QWJicmV2aWF0ZWQpOwotICAgICAgICBVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZl
cmVuY2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xl
eGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CisgICAgICAgIFJlZjxB
U1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OmNyZWF0ZShXVEZN
b3ZlKCphZGRyZXNzU3BhY2VUb2tlbiksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJp
bmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOwogICAgICAgICBhdXRvIG5leHQgPSBjb25z
dHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkKCpmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCwgV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShuZXh0KTsKICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTU2NCwxOSArNTY0LDE5IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKICAgICB9CiAKLSAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0
ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZm
aXhOb25BYmJyZXZpYXRlZCA9IFsmXShjb25zdCBUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQmIHR5
cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMp
IC0+IFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CiAgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlv
bigqbmFtZSwgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmxvY2F0aW9uKTsKICAgICAgICAgc3dp
dGNoICh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNl
IFRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxB
U1Q6OlBvaW50ZXJUeXBlPihsb2NhdGlvbiwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRy
ZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMpKSB9OworICAgICAgICAgICAgcmV0dXJuIHsgQVNU
OjpQb2ludGVyVHlwZTo6Y3JlYXRlKGxvY2F0aW9uLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
LmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CiAgICAgICAgIGNhc2UgVG9rZW46
OlR5cGU6OlNxdWFyZUJyYWNrZXRQYWlyOgotICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1
ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4obG9jYXRpb24sICp0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKKyAgICAgICAgICAg
IHJldHVybiB7IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUobG9jYXRpb24sICp0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVCh0eXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQudG9rZW4udHlwZSA9PSBUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQpOwotICAg
ICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5VHlwZT4obG9jYXRpb24s
IFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLm51bUVsZW1lbnRz
KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpBcnJheVR5cGU6OmNyZWF0ZShsb2NhdGlv
biwgV1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubnVtRWxlbWVu
dHMpIH07CiAgICAgICAgIH0KICAgICB9OwotICAgIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiByZXN1bHQgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4oKm5hbWUsIG5hbWUt
PnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykp
OworICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6
OmNyZWF0ZSgqbmFtZSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZN
b3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgUEVFSyhu
ZXh0VG9rZW4pOwogICAgICAgICBpZiAobmV4dFRva2VuLT50eXBlICE9IFRva2VuOjpUeXBlOjpT
dGFyCkBAIC04MTQsMTIgKzgxNCwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRl
ZmluaXRpb24oCiAgICAgQ09OU1VNRV9UWVBFKG9yaWdpbiwgRW51bSk7CiAgICAgQ09OU1VNRV9U
WVBFKG5hbWUsIElkZW50aWZpZXIpOwogCi0gICAgYXV0byB0eXBlID0gKFsmXSgpIC0+IEV4cGVj
dGVkPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKKyAgICBhdXRvIHR5cGUg
PSAoWyZdKCkgLT4gRXhwZWN0ZWQ8UmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gewogICAg
ICAgICBpZiAodHJ5VHlwZShUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgICAgICBQQVJT
RShwYXJzZWRUeXBlLCBUeXBlKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpwYXJzZWRU
eXBlKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VHlw
ZVJlZmVyZW5jZT4oKm9yaWdpbiwgImludCJfc3RyLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkgfTsK
KyAgICAgICAgcmV0dXJuIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUoKm9yaWdpbiwgImlu
dCJfc3RyLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkgfTsKICAgICB9KSgpOwogICAgIGlmICghdHlw
ZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CkBAIC0x
MjI4LDcgKzEyMjgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VEb1doaWxlTG9vcCgpIC0+IEV4cGVj
CiAgICAgcmV0dXJuIEFTVDo6RG9XaGlsZUxvb3AoeyAqb3JpZ2luLCAqc2VtaWNvbG9ufSwgV1RG
TW92ZSgqYm9keSksIFdURk1vdmUoKmNvbmRpdGlvbmFsKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlw
ZSkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4KK2F1dG8gUGFy
c2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlw
ZSkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4KIHsKICAgICBQ
RUVLKG9yaWdpbik7CiAKQEAgLTEyNTMsNyArMTI1Myw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb25zKCkKIAogICAgIFBBUlNFKHR5cGUsIFR5cGUpOwogCi0gICAgYXV0
byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0
eXBlKS0+Y2xvbmUoKSk7CisgICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb24odHlwZS0+Y29weVJlZigpKTsKICAgICBpZiAoIWZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0
VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKIApAQCAtMTI2MSw3ICsxMjYxLDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKQogICAgIHJlc3VsdC5hcHBlbmQo
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKmZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbikpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKFRva2VuOjpUeXBlOjpD
b21tYSkpIHsKLSAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVj
bGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24odHlwZS0+Y29weVJlZigpKTsKICAg
ICAgICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUo
KnZhcmlhYmxlRGVjbGFyYXRpb24pKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Nyw5ICsxNTcsOSBAQCBwcml2YXRlOgogICAgICAgICBPcHRpb25hbDx1bnNp
Z25lZD4gbnVtRWxlbWVudHM7CiAgICAgfTsKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQsIEVycm9yPiBwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpOwotICAgIEV4
cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlQWRkcmVzc1Nw
YWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJy
b3I+IHBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlVHlwZSgpOworICAgIEV4cGVjdGVkPFJlZjxB
U1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOworICAgIEV4
cGVjdGVkPFJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlTm9uQWRkcmVzc1NwYWNl
VHlwZSgpOworICAgIEV4cGVjdGVkPFJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNl
VHlwZSgpOwogICAgIEV4cGVjdGVkPEFTVDo6VHlwZURlZmluaXRpb24sIEVycm9yPiBwYXJzZVR5
cGVEZWZpbml0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpCdWlsdEluU2VtYW50aWMsIEVycm9y
PiBwYXJzZUJ1aWx0SW5TZW1hbnRpYygpOwogICAgIEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VTZW1h
bnRpYywgRXJyb3I+IHBhcnNlUmVzb3VyY2VTZW1hbnRpYygpOwpAQCAtMTkyLDcgKzE5Miw3IEBA
IHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJvcj4gcGFyc2VGb3JMb29w
KCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVycm9yPiBwYXJzZVdoaWxlTG9vcCgp
OwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiBwYXJzZURvV2hpbGVMb29w
KCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmKTsKKyAgICBF
eHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb24oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYpOwogICAgIEV4cGVjdGVkPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b25zKCk7CiAgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+IHBh
cnNlU3RhdGVtZW50KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEFm
dGVyUGFyc2luCiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEF0RW5kID0gZmFsc2U7CiBz
dGF0aWMgY29uc3RleHByIGJvb2wgYWx3YXlzRHVtcFBhc3NGYWlsdXJlcyA9IGZhbHNlOwogc3Rh
dGljIGNvbnN0ZXhwciBib29sIGR1bXBQYXNzRmFpbHVyZSA9IGR1bXBBU1RCZWZvcmVFYWNoUGFz
cyB8fCBkdW1wQVNUQWZ0ZXJQYXJzaW5nIHx8IGR1bXBBU1RBdEVuZCB8fCBhbHdheXNEdW1wUGFz
c0ZhaWx1cmVzOwotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQaGFzZVRpbWVzID0gZmFsc2U7
CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBoYXNlVGltZXMgPSB0cnVlOwogCiBzdGF0aWMg
Y29uc3RleHByIGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5ID0gZmFsc2U7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJs
ZUxpZmV0aW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAkocmV2aXNpb24gMjQ3
ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2
ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDE2ICsxMDAsMTYg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgVG9rZW4gYW5vbnltb3VzVG9rZQogY2xhc3MgUHJlc2Vy
dmVMaWZldGltZXMgOiBwdWJsaWMgVmlzaXRvciB7CiAgICAgdXNpbmcgQmFzZSA9IFZpc2l0b3I7
CiBwdWJsaWM6Ci0gICAgUHJlc2VydmVMaWZldGltZXMoVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVy
ZW5jZT4mIHN0cnVjdFR5cGUsIGNvbnN0IEhhc2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
KiwgQVNUOjpTdHJ1Y3R1cmVFbGVtZW50Kj4mIHZhcmlhYmxlTWFwcGluZykKLSAgICAgICAgOiBt
X3N0cnVjdFR5cGUoc3RydWN0VHlwZSkKLSAgICAgICAgLCBtX3BvaW50ZXJUb1N0cnVjdFR5cGUo
bWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihhbm9ueW1vdXNUb2tlbihUb2tlbjo6VHlw
ZTo6SWRlbnRpZmllciksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIG1fc3RydWN0VHlwZS0+
Y2xvbmUoKSkpCisgICAgUHJlc2VydmVMaWZldGltZXMoUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4g
c3RydWN0VHlwZSwgY29uc3QgSGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qLCBBU1Q6
OlN0cnVjdHVyZUVsZW1lbnQqPiYgdmFyaWFibGVNYXBwaW5nKQorICAgICAgICA6IG1fc3RydWN0
VHlwZShXVEZNb3ZlKHN0cnVjdFR5cGUpKQorICAgICAgICAsIG1fcG9pbnRlclRvU3RydWN0VHlw
ZShBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUoYW5vbnltb3VzVG9rZW4oVG9rZW46OlR5cGU6Oklk
ZW50aWZpZXIpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBtX3N0cnVjdFR5cGUuY29weVJl
ZigpKSkKICAgICAgICAgLCBtX3ZhcmlhYmxlTWFwcGluZyh2YXJpYWJsZU1hcHBpbmcpCiAgICAg
eyB9CiAKICAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4gbWFrZVN0cnVjdFZh
cmlhYmxlUmVmZXJlbmNlKCkKICAgICB7CiAgICAgICAgIGF1dG8gc3RydWN0VmFyaWFibGVSZWZl
cmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U6OndyYXAoKm1fc3RydWN0VmFyaWFibGUpKTsKLSAgICAgICAgc3RydWN0VmFy
aWFibGVSZWZlcmVuY2UtPnNldFR5cGUobV9zdHJ1Y3RWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgp
KTsKKyAgICAgICAgc3RydWN0VmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoKm1fc3RydWN0VmFy
aWFibGUtPnR5cGUoKSk7CiAgICAgICAgIHN0cnVjdFZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
CiAgICAgICAgIHJldHVybiBzdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZTsKICAgICB9CkBAIC0xMTcs
MTUgKzExNywxNSBAQCBwdWJsaWM6CiAgICAgVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJl
c3Npb24+IGFzc2lnblZhcmlhYmxlSW50b1N0cnVjdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlLCBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqIGVsZW1lbnQpCiAgICAgewogICAgICAg
ICBhdXRvIGxocyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZT4o
dmFyaWFibGUuY29kZUxvY2F0aW9uKCksIG1ha2VTdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZSgpLCBl
bGVtZW50KTsKLSAgICAgICAgbGhzLT5zZXRUeXBlKHZhcmlhYmxlLnR5cGUoKS0+Y2xvbmUoKSk7
CisgICAgICAgIGxocy0+c2V0VHlwZSgqdmFyaWFibGUudHlwZSgpKTsKICAgICAgICAgbGhzLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7CiAKICAgICAgICAgYXV0byByaHMgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGUpKTsKLSAgICAg
ICAgcmhzLT5zZXRUeXBlKHZhcmlhYmxlLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJocy0+
c2V0VHlwZSgqdmFyaWFibGUudHlwZSgpKTsKICAgICAgICAgcmhzLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKICAgICAg
ICAgYXV0byBhc3NpZ25tZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uPih2YXJpYWJsZS5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShsaHMpLCBXVEZNb3ZlKHJocykp
OwotICAgICAgICBhc3NpZ25tZW50LT5zZXRUeXBlKHZhcmlhYmxlLnR5cGUoKS0+Y2xvbmUoKSk7
CisgICAgICAgIGFzc2lnbm1lbnQtPnNldFR5cGUoKnZhcmlhYmxlLnR5cGUoKSk7CiAgICAgICAg
IGFzc2lnbm1lbnQtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKIAogICAg
ICAgICByZXR1cm4gYXNzaWdubWVudDsKQEAgLTEzNiwxMCArMTM2LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgYm9vbCBpc0VudHJ5UG9pbnQgPSAhIWZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50
VHlwZSgpOwogICAgICAgICBpZiAoaXNFbnRyeVBvaW50KSB7CiAgICAgICAgICAgICBhdXRvIHN0
cnVjdFZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4oZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpLCBBU1Q6OlF1YWxpZmll
cnMoKSwKLSAgICAgICAgICAgICAgICBtX3N0cnVjdFR5cGUtPmNsb25lKCksIFN0cmluZygpLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBtX3N0cnVjdFR5cGUuY29weVJlZigp
LCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKICAgICAgICAgICAgIGF1dG8gc3RydWN0
VmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoc3RydWN0VmFyaWFibGVEZWNsYXJhdGlvbikp
OwotICAgICAgICAgICAgc3RydWN0VmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUobV9zdHJ1Y3RU
eXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHN0cnVjdFZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlKG1fc3RydWN0VHlwZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgc3RydWN0VmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsKIAogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBzdHJ1Y3RWYXJpYWJsZURlY2xhcmF0aW9uczsKQEAgLTE0NywxMSArMTQ3LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGF1dG8gc3RydWN0RGVjbGFyYXRpb25TdGF0ZW1lbnQgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KGZ1bmN0aW9uRGVmaW5p
dGlvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShzdHJ1Y3RWYXJpYWJsZURlY2xhcmF0aW9ucykp
OwogCiAgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IHN0ZDo6bWFrZV91
bmlxdWU8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2Rl
TG9jYXRpb24oKSwgV1RGTW92ZShzdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZSkpOwotICAgICAgICAg
ICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1fcG9pbnRlclRvU3RydWN0VHlwZS0+
Y2xvbmUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobV9w
b2ludGVyVG9TdHJ1Y3RUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBtYWtlUG9pbnRlckV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKIAogICAgICAg
ICAgICAgYXV0byBwb2ludGVyRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4oZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpLCBBU1Q6OlF1
YWxpZmllcnMoKSwKLSAgICAgICAgICAgICAgICBtX3BvaW50ZXJUb1N0cnVjdFR5cGUtPmNsb25l
KCksICJ3cmFwcGVyIl9zLCBudWxscHRyLCBXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikp
OworICAgICAgICAgICAgICAgIG1fcG9pbnRlclRvU3RydWN0VHlwZS5jb3B5UmVmKCksICJ3cmFw
cGVyIl9zLCBudWxscHRyLCBXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOwogICAgICAg
ICAgICAgbV9zdHJ1Y3RWYXJpYWJsZSA9ICZwb2ludGVyRGVjbGFyYXRpb247CiAKICAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcG9pbnRlclZhcmlhYmxlRGVjbGFyYXRpb25z
OwpAQCAtMTYyLDcgKzE2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZ1bmN0aW9uRGVmaW5p
dGlvbi5ibG9jaygpLnN0YXRlbWVudHMoKS5pbnNlcnQoMSwgV1RGTW92ZShwb2ludGVyRGVjbGFy
YXRpb25TdGF0ZW1lbnQpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF1dG8gcG9p
bnRlckRlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2RlTG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksCi0g
ICAgICAgICAgICAgICAgbV9wb2ludGVyVG9TdHJ1Y3RUeXBlLT5jbG9uZSgpLCAid3JhcHBlciJf
cywgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgbV9wb2ludGVyVG9TdHJ1Y3RU
eXBlLmNvcHlSZWYoKSwgIndyYXBwZXIiX3MsIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICAg
ICAgbV9zdHJ1Y3RWYXJpYWJsZSA9ICZwb2ludGVyRGVjbGFyYXRpb247CiAgICAgICAgICAgICBm
dW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJEZWNs
YXJhdGlvbikpOwogICAgICAgICB9CkBAIC0yMDIsNyArMjAyLDcgQEAgcHVibGljOgogICAgICAg
ICBpZiAoaXRlciA9PSBtX3ZhcmlhYmxlTWFwcGluZy5lbmQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBhdXRvIHR5cGUgPSB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50
eXBlKCktPmNsb25lKCk7CisgICAgICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB0eXBlID0gKnZh
cmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKTsKICAgICAgICAgQVNUOjpUeXBlQW5u
b3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IHZhcmlhYmxlUmVmZXJlbmNlLnR5cGVBbm5vdGF0aW9u
KCk7CiAgICAgICAgIGF1dG8qIGludGVybmFsRmllbGQgPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6
R2xvYmFsVmFyaWFibGVSZWZlcmVuY2U+KHZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVy
ZW5jZS5jb2RlTG9jYXRpb24oKSwgbWFrZVN0cnVjdFZhcmlhYmxlUmVmZXJlbmNlKCksIGl0ZXIt
PnZhbHVlKTsKICAgICAgICAgaW50ZXJuYWxGaWVsZC0+c2V0VHlwZShXVEZNb3ZlKHR5cGUpKTsK
QEAgLTIzNiw4ICsyMzYsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiogbV9zdHJ1Y3RWYXJpYWJsZSB7IG51bGxwdHIgfTsKIAotICAgIFVuaXF1ZVJl
ZjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiBtX3N0cnVjdFR5cGU7Ci0gICAgVW5pcXVlUmVmPEFTVDo6
UG9pbnRlclR5cGU+IG1fcG9pbnRlclRvU3RydWN0VHlwZTsKKyAgICBSZWY8QVNUOjpUeXBlUmVm
ZXJlbmNlPiBtX3N0cnVjdFR5cGU7CisgICAgUmVmPEFTVDo6UG9pbnRlclR5cGU+IG1fcG9pbnRl
clRvU3RydWN0VHlwZTsKICAgICAvLyBJZiB0aGlzIG1hcHBpbmcgY29udGFpbnMgdGhlIHZhcmlh
YmxlLCBpdCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSdzIGNhbm9uaWNhbCBsb2NhdGlvbgogICAg
IC8vIGlzIGluIHRoZSBzdHJ1Y3Qgd2UgdXNlIHRvIHByZXNlcnZlIHZhcmlhYmxlIGxpZmV0aW1l
cy4KICAgICBjb25zdCBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiosIEFTVDo6U3Ry
dWN0dXJlRWxlbWVudCo+JiBtX3ZhcmlhYmxlTWFwcGluZzsKQEAgLTI1Niw3ICsyNTYsNyBAQCB2
b2lkIHByZXNlcnZlVmFyaWFibGVMaWZldGltZXMoUHJvZ3JhbSYgCiAgICAgZm9yIChhdXRvJiBw
YWlyIDogZXNjYXBlZFZhcmlhYmxlcykgewogICAgICAgICBhdXRvKiB2YXJpYWJsZSA9IHBhaXIu
a2V5OwogICAgICAgICBTdHJpbmcgbmFtZSA9IHBhaXIudmFsdWU7Ci0gICAgICAgIGVsZW1lbnRz
LmFwcGVuZChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQgeyB2YXJpYWJsZS0+Y29kZUxvY2F0aW9uKCks
IHsgfSwgdmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSwgV1RGTW92ZShuYW1lKSwgbnVsbHB0ciB9
KTsKKyAgICAgICAgZWxlbWVudHMuYXBwZW5kKEFTVDo6U3RydWN0dXJlRWxlbWVudCB7IHZhcmlh
YmxlLT5jb2RlTG9jYXRpb24oKSwgeyB9LCAqdmFyaWFibGUtPnR5cGUoKSwgV1RGTW92ZShuYW1l
KSwgbnVsbHB0ciB9KTsKICAgICB9CiAKICAgICAvLyBOYW1lIG9mIHRoaXMgZG9lc24ndCBtYXR0
ZXIsIHNpbmNlIHdlIGRvbid0IHVzZSBzdHJ1Y3QgbmFtZXMgd2hlbgpAQCAtMjcxLDcgKzI3MSw3
IEBAIHZvaWQgcHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcyhQcm9ncmFtJiAKIAogICAgIHsKICAg
ICAgICAgYXV0byB3cmFwcGVyU3RydWN0VHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChh
bm9ueW1vdXNUb2tlbihUb2tlbjo6VHlwZTo6SWRlbnRpZmllciksIHdyYXBwZXJTdHJ1Y3REZWZp
bml0aW9uKTsKLSAgICAgICAgUHJlc2VydmVMaWZldGltZXMgcHJlc2VydmVMaWZldGltZXMod3Jh
cHBlclN0cnVjdFR5cGUsIHZhcmlhYmxlTWFwcGluZyk7CisgICAgICAgIFByZXNlcnZlTGlmZXRp
bWVzIHByZXNlcnZlTGlmZXRpbWVzKFdURk1vdmUod3JhcHBlclN0cnVjdFR5cGUpLCB2YXJpYWJs
ZU1hcHBpbmcpOwogICAgICAgICBwcmVzZXJ2ZUxpZmV0aW1lcy5WaXNpdG9yOjp2aXNpdChwcm9n
cmFtKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkocmV2aXNpb24g
MjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9w
ZXJ0eVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsMzUgKzk4LDM1IEBAIHN0cnVj
dCBBbmRlckNhbGxBcmd1bWVudFJlc3VsdCB7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRXhw
cmVzc2lvbkNvbnN0cnVjdG9yLCB0eXBlbmFtZSBUeXBlQ29uc3RydWN0b3I+Ci1zdGF0aWMgT3B0
aW9uYWw8QW5kZXJDYWxsQXJndW1lbnRSZXN1bHQ+IHdyYXBBbmRlckNhbGxBcmd1bWVudChVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+IGJhc2VUeXBlLCBib29sIGFuZGVyRnVuY3Rpb24sIGJvb2wgdGhyZWFkQW5kZXJGdW5j
dGlvbikKK3N0YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4gd3JhcEFuZGVy
Q2FsbEFyZ3VtZW50KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uLCBSZWY8
QVNUOjpVbm5hbWVkVHlwZT4gYmFzZVR5cGUsIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0aHJl
YWRBbmRlckZ1bmN0aW9uKQogewogICAgIGF1dG8gbG9jYXRpb24gPSBleHByZXNzaW9uLT5jb2Rl
TG9jYXRpb24oKTsKICAgICBpZiAoYXV0byBhZGRyZXNzU3BhY2UgPSBleHByZXNzaW9uLT50eXBl
QW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSkgewogICAgICAgICBpZiAoIWFuZGVyRnVu
Y3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBhdXRvIG1h
a2VBcnJheVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8RXhwcmVzc2lvbkNvbnN0cnVjdG9yPihs
b2NhdGlvbiwgV1RGTW92ZShleHByZXNzaW9uKSk7Ci0gICAgICAgIG1ha2VBcnJheVJlZmVyZW5j
ZS0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPFR5cGVDb25zdHJ1Y3Rvcj4obG9jYXRpb24sICphZGRy
ZXNzU3BhY2UsIFdURk1vdmUoYmFzZVR5cGUpKSk7CisgICAgICAgIG1ha2VBcnJheVJlZmVyZW5j
ZS0+c2V0VHlwZShUeXBlQ29uc3RydWN0b3I6OmNyZWF0ZShsb2NhdGlvbiwgKmFkZHJlc3NTcGFj
ZSwgV1RGTW92ZShiYXNlVHlwZSkpKTsKICAgICAgICAgbWFrZUFycmF5UmVmZXJlbmNlLT5zZXRU
eXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB7eyBXVEZN
b3ZlKG1ha2VBcnJheVJlZmVyZW5jZSksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIg
fX07CiAgICAgfQogICAgIGlmICh0aHJlYWRBbmRlckZ1bmN0aW9uKSB7Ci0gICAgICAgIGF1dG8g
dmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIGJhc2VUeXBlLT5jbG9uZSgpLCBTdHJp
bmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNU
OjpRdWFsaWZpZXJzKCksIGJhc2VUeXBlLmNvcHlSZWYoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51
bGxwdHIpOwogCiAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZh
cmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBl
KGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBl
KGJhc2VUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0p
OwogCiAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJl
bmNlMSksIFdURk1vdmUoZXhwcmVzc2lvbikpOwotICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNz
aW9uLT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikp
OwotICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkp
OworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUuY29weVJlZigp
KTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKICAgICAgICAgYXV0byBl
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxFeHByZXNzaW9uQ29uc3RydWN0b3I+KGxvY2F0aW9u
LCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOwotICAgICAgICBhdXRvIHJlc3VsdFR5cGUg
PSBtYWtlVW5pcXVlUmVmPFR5cGVDb25zdHJ1Y3Rvcj4obG9jYXRpb24sIEFTVDo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWQsIFdURk1vdmUoYmFzZVR5cGUpKTsKLSAgICAgICAgZXhwcmVzc2lvbi0+c2V0
VHlwZShyZXN1bHRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgYXV0byByZXN1bHRUeXBlID0gVHlw
ZUNvbnN0cnVjdG9yOjpjcmVhdGUobG9jYXRpb24sIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQs
IFdURk1vdmUoYmFzZVR5cGUpKTsKKyAgICAgICAgZXhwcmVzc2lvbi0+c2V0VHlwZShyZXN1bHRU
eXBlLmNvcHlSZWYoKSk7CiAgICAgICAgIGV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKIAogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+IGV4cHJlc3Npb25zOwpAQCAtMTUxLDkgKzE1MSw5IEBAIHN0YXRpYyBPcHRpb25hbDxB
bmRlckNhbGxBcmd1bWVudFJlc3VsdD4KICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPih1bm5hbWVkVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4ge3sgV1RGTW92ZShleHBy
ZXNzaW9uKSwgV1RGOjpudWxsb3B0LCBXaGljaEFuZGVyOjpBbmRlciB9fTsKICAgICAgICAgaWYg
KGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gd3Jh
cEFuZGVyQ2FsbEFyZ3VtZW50PEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgQVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KGV4cHJlc3Npb24sIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBl
Pih1bm5hbWVkVHlwZSkudHlwZSgpLmNsb25lKCksIGFuZGVyRnVuY3Rpb24sIHRocmVhZEFuZGVy
RnVuY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIHdyYXBBbmRlckNhbGxBcmd1bWVudDxBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihl
eHByZXNzaW9uLCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKSwg
YW5kZXJGdW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5jdGlvbik7CiAgICAgfQotICAgIHJldHVybiB3
cmFwQW5kZXJDYWxsQXJndW1lbnQ8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24sIEFTVDo6UG9p
bnRlclR5cGU+KGV4cHJlc3Npb24sIGV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25lKCks
IGFuZGVyRnVuY3Rpb24sIHRocmVhZEFuZGVyRnVuY3Rpb24pOworICAgIHJldHVybiB3cmFwQW5k
ZXJDYWxsQXJndW1lbnQ8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24sIEFTVDo6UG9pbnRlclR5
cGU+KGV4cHJlc3Npb24sIGV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLCBhbmRlckZ1bmN0aW9u
LCB0aHJlYWRBbmRlckZ1bmN0aW9uKTsKIH0KIAogc3RhdGljIFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+IHNldHRlckNhbGwoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZWxldmFudEFuZGVy
LCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIG5ld1ZhbHVlLCBjb25zdCBzdGQ6OmZ1bmN0
aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0b3J5LCBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24qIGluZGV4VmFyaWFibGUpCkBAIC0xNjMsNyArMTYzLDcgQEAg
c3RhdGljIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHNldHRlcgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKCppbmRleFZh
cmlhYmxlKSk7CiAgICAgICAgIEFTU0VSVChpbmRleFZhcmlhYmxlLT50eXBlKCkpOwotICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShpbmRleFZhcmlhYmxlLT50eXBlKCktPmNsb25l
KCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSgqaW5kZXhWYXJpYWJsZS0+
dHlwZSgpKTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdo
dD8KICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7
CiAgICAgfTsKQEAgLTE4MSwxNiArMTgxLDE2IEBAIHN0YXRpYyBVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiBzZXR0ZXIKICAgICAgICAgbWF5YmVBZGRJbmRleEFyZ3VtZW50KGFyZ3VtZW50cyk7
CiAKICAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxs
RXhwcmVzc2lvbj4obG9jYXRpb24sIFN0cmluZyhyZWxldmFudEFuZGVyLT5uYW1lKCkpLCBXVEZN
b3ZlKGFyZ3VtZW50cykpOwotICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShyZWxldmFu
dEFuZGVyLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBl
KHJlbGV2YW50QW5kZXItPnR5cGUoKSk7CiAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5z
ZXRGdW5jdGlvbigqcmVsZXZhbnRBbmRlcik7CiAKICAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4
cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihsb2Nh
dGlvbiwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwotICAgICAgICBkZXJlZmVyZW5jZUV4cHJl
c3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4ocmVsZXZhbnRBbmRlci0+
dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJl
c3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4ocmVsZXZhbnRBbmRlci0+
dHlwZSgpKS5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7CiAKICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoZGVyZWZlcmVu
Y2VFeHByZXNzaW9uKSwgV1RGTW92ZShuZXdWYWx1ZSkpOwotICAgICAgICBhc3NpZ25tZW50RXhw
cmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihyZWxldmFudEFuZGVy
LT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHJlbGV2YW50QW5kZXIt
PnR5cGUoKSkuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAgcmV0dXJuIFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsK
QEAgLTIwNSwxMiArMjA1LDEyIEBAIHN0YXRpYyBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBz
ZXR0ZXIKICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobmV3VmFsdWUpKTsKIAogICAgIGF1
dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGxv
Y2F0aW9uLCBTdHJpbmcocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uKCkt
Pm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgY2FsbEV4cHJlc3Npb24tPnNldFR5
cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uKCktPnR5cGUoKS5jbG9u
ZSgpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uc2V0dGVyRnVuY3Rpb24oKS0+dHlwZSgpKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogICAgIGNhbGxFeHByZXNzaW9uLT5zZXRG
dW5jdGlvbigqcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uKCkpOwogCiAg
ICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbj4obG9jYXRpb24sIGxlZnRWYWx1ZUZhY3RvcnkoKSwgV1RGTW92ZShjYWxs
RXhwcmVzc2lvbikpOwotICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAg
YXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNl
dHRlckZ1bmN0aW9uKCktPnR5cGUoKSk7CiAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKIAogICAgIHJldHVybiBVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CkBAIC0yMjMs
NyArMjIzLDcgQEAgc3RhdGljIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IGdldHRlcgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3
cmFwKCppbmRleFZhcmlhYmxlKSk7CiAgICAgICAgIEFTU0VSVChpbmRleFZhcmlhYmxlLT50eXBl
KCkpOwotICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShpbmRleFZhcmlhYmxlLT50
eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSgqaW5k
ZXhWYXJpYWJsZS0+dHlwZSgpKTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkg
SXMgdGhpcyByaWdodD8KICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlKSk7CiAgICAgfTsKQEAgLTI0MiwxMiArMjQyLDEyIEBAIHN0YXRpYyBVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPiBnZXR0ZXIKICAgICAgICAgbWF5YmVBZGRJbmRleEFyZ3VtZW50
KGFyZ3VtZW50cyk7CiAKICAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4obG9jYXRpb24sIFN0cmluZyhyZWxldmFudEFuZGVyLT5u
YW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0
VHlwZShyZWxldmFudEFuZGVyLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRUeXBlKHJlbGV2YW50QW5kZXItPnR5cGUoKSk7CiAgICAgICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAgICAgICAgIGNhbGxF
eHByZXNzaW9uLT5zZXRGdW5jdGlvbigqcmVsZXZhbnRBbmRlcik7CiAKICAgICAgICAgYXV0byBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHBy
ZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwotICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4ocmVs
ZXZhbnRBbmRlci0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4ocmVs
ZXZhbnRBbmRlci0+dHlwZSgpKS5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgZGVyZWZlcmVuY2VF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7CiAKICAgICAgICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+KFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSk7CkBAIC0yNjEsNyArMjYxLDcg
QEAgc3RhdGljIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IGdldHRlcgogICAgIG1heWJlQWRk
SW5kZXhBcmd1bWVudChhcmd1bWVudHMpOwogCiAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4obG9jYXRpb24sIFN0cmluZyhwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1
bWVudHMpKTsKLSAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uZ2V0dGVyRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRUeXBlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpLT50
eXBlKCkpOwogICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CiAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb24oKSk7CiAKQEAgLTMxNywxNCArMzE3LDE0IEBAIHN0
YXRpYyBNb2RpZnlSZXN1bHQgbW9kaWZ5KEFTVDo6UHJvcGVydHkKICAgICBBU1Q6OkV4cHJlc3Np
b24mIGlubmVyTGVmdEV4cHJlc3Npb24gPSBsZWZ0RXhwcmVzc2lvbjsKIAogICAgIC8vIENyZWF0
ZSAicCIgdmFyaWFibGUuCi0gICAgYXV0byBwb2ludGVyVmFyaWFibGUgPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obGVmdEV4cHJlc3Npb24tPmNvZGVMb2NhdGlvbigp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KG1ha2VVbmlx
dWVSZWY8QVNUOjpQb2ludGVyVHlwZT4obGVmdEV4cHJlc3Npb24tPmNvZGVMb2NhdGlvbigpLCAq
bGVmdEV4cHJlc3Npb24tPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpLCBsZWZ0
RXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSkpLCBTdHJpbmcoKSwgbnVsbHB0ciwg
bnVsbHB0cik7CisgICAgYXV0byBwb2ludGVyVmFyaWFibGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4obGVmdEV4cHJlc3Npb24tPmNvZGVMb2NhdGlvbigpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKGxlZnRFeHByZXNzaW9uLT5j
b2RlTG9jYXRpb24oKSwgKmxlZnRFeHByZXNzaW9uLT50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRy
ZXNzU3BhY2UoKSwgbGVmdEV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpKSwgU3RyaW5nKCksIG51
bGxwdHIsIG51bGxwdHIpOwogCiAgICAgLy8gQ3JlYXRlICJxIiBhbmQgInIiIHZhcmlhYmxlcy4K
ICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IGludGVybWVk
aWF0ZVZhcmlhYmxlczsKICAgICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShjaGFpbi5zaXplKCkgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGNo
YWluLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biA9IHN0YXRpY19jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJj4oY2hhaW5baV0p
OwotICAgICAgICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
Y29kZUxvY2F0aW9uKCksIEFTVDo6UXVhbGlmaWVycygpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsK
KyAgICAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNv
ZGVMb2NhdGlvbigpLCBBU1Q6OlF1YWxpZmllcnMoKSwgJnByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5yZXNvbHZlZFR5cGUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICB9CiAK
ICAgICAvLyBDb25zaWRlciBhW2ZvbygpXVtiXSA9IGM7CkBAIC0zNTUsNyArMzU1LDcgQEAgc3Rh
dGljIE1vZGlmeVJlc3VsdCBtb2RpZnkoQVNUOjpQcm9wZXJ0eQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgYXV0byYgaW5kZXhFeHByZXNzaW9uID0gZG93bmNhc3Q8
QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Ci0gICAgICAg
IGluZGV4VmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBB
U1Q6OlF1YWxpZmllcnMoKSwgaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpLnJlc29s
dmVkVHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAg
IGluZGV4VmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBB
U1Q6OlF1YWxpZmllcnMoKSwgJmluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24oKS5yZXNv
bHZlZFR5cGUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICB9CiAKICAgICBW
ZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwpAQCAtMzYzLDE2
ICszNjMsMTYgQEAgc3RhdGljIE1vZGlmeVJlc3VsdCBtb2RpZnkoQVNUOjpQcm9wZXJ0eQogICAg
IC8vIFN0ZXAgMToKICAgICB7CiAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oaW5uZXJMZWZ0RXhwcmVz
c2lvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShsZWZ0RXhwcmVzc2lvbikpOwotICAgICAgICBt
YWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihpbm5lckxlZnRFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAqaW5uZXJMZWZ0RXhwcmVz
c2lvbi50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSwgaW5uZXJMZWZ0RXhwcmVz
c2lvbi5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgIG1ha2VQb2ludGVyRXhwcmVz
c2lvbi0+c2V0VHlwZShBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUoaW5uZXJMZWZ0RXhwcmVzc2lv
bi5jb2RlTG9jYXRpb24oKSwgKmlubmVyTGVmdEV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS5s
ZWZ0QWRkcmVzc1NwYWNlKCksIGlubmVyTGVmdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpKTsK
ICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CiAKICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cChwb2ludGVyVmFyaWFibGUpKTsKICAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlw
ZSgpKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxl
LT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSgq
cG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOwogICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFk
IH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
ODE2OSBJcyB0aGlzIHJpZ2h0PwogCiAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGlubmVyTGVmdEV4cHJl
c3Npb24uY29kZUxvY2F0aW9uKCksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3Zl
KG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOwotICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+
c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIGFzc2ln
bm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7CiAgICAg
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFs
dWUoKSk7CiAKICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4
cHJlc3Npb24pKTsKQEAgLTM4NCwxOSArMzg0LDE5IEBAIHN0YXRpYyBNb2RpZnlSZXN1bHQgbW9k
aWZ5KEFTVDo6UHJvcGVydHkKICAgICAgICAgaWYgKHByZXZpb3VzKSB7CiAgICAgICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKCpwcmV2aW91cykpOwogICAgICAgICAg
ICAgQVNTRVJUKHByZXZpb3VzLT50eXBlKCkpOwotICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UtPnNldFR5cGUocHJldmlvdXMtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZSgqcHJldmlvdXMtPnR5cGUoKSk7CiAgICAgICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogICAgICAgICAgICAgcmV0
dXJuIHZhcmlhYmxlUmVmZXJlbmNlOwogICAgICAgICB9CiAKICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpW
YXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKICAgICAgICAgQVNTRVJU
KHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNl
dFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZS0+c2V0VHlwZSgqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOwogICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogCiAgICAgICAgIGF1dG8g
ZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBXVEZNb3Zl
KHZhcmlhYmxlUmVmZXJlbmNlKSk7CiAgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5
cGUoKSk7Ci0gICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmVsZW1lbnRUeXBlKCku
Y2xvbmUoKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmVsZW1lbnRUeXBl
KCkpOwogICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJs
ZS0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKICAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbjsKICAgICB9OwpAQCAtNDA4LDExICs0MDgsMTEgQEAgc3RhdGljIE1vZGlmeVJl
c3VsdCBtb2RpZnkoQVNUOjpQcm9wZXJ0eQogCiAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVu
Y2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2U6OndyYXAoKmluZGV4VmFyaWFibGUpKTsKICAgICAgICAgQVNTRVJUKGluZGV4VmFy
aWFibGUtPmdldCgpLnR5cGUoKSk7Ci0gICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBl
KGluZGV4VmFyaWFibGUtPmdldCgpLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlKCppbmRleFZhcmlhYmxlLT5nZXQoKS50eXBlKCkpOwogICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBB
U1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogCiAgICAgICAgIGF1
dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4
cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92
ZSh2YXJpYWJsZVJlZmVyZW5jZSksIGluZGV4RXhwcmVzc2lvbi50YWtlSW5kZXgoKSk7Ci0gICAg
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGluZGV4VmFyaWFibGUtPmdldCgpLnR5
cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKCpp
bmRleFZhcmlhYmxlLT5nZXQoKS50eXBlKCkpOwogICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgIGV4cHJl
c3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CkBAIC00MjksMTEg
KzQyOSwxMSBAQCBzdGF0aWMgTW9kaWZ5UmVzdWx0IG1vZGlmeShBU1Q6OlByb3BlcnR5CiAKICAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CiAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgp
LT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoKnZhcmlhYmxl
RGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkg
SXMgdGhpcyByaWdodD8KIAogICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uY29kZUxvY2F0aW9uKCksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3Zl
KGNhbGxFeHByZXNzaW9uKSk7Ci0gICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBl
KHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgYXNzaWdubWVu
dEV4cHJlc3Npb24tPnNldFR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAg
ICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1
ZSgpKTsKIAogICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhw
cmVzc2lvbikpOwpAQCAtNDUxLDcgKzQ1MSw2IEBAIHN0YXRpYyBNb2RpZnlSZXN1bHQgbW9kaWZ5
KEFTVDo6UHJvcGVydHkKIAogICAgIC8vIFN0ZXAgNDoKICAgICBVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiByaWdodFZhbHVlID0gV1RGTW92ZShtb2RpZmljYXRpb25SZXN1bHQucmVzdWx0KTsK
LSAgICBhdXRvIGV4cHJlc3Npb25UeXBlID0gcmlnaHRWYWx1ZS0+cmVzb2x2ZWRUeXBlKCkuY2xv
bmUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYWluLnNpemUoKSAtIDE7ICsraSkg
ewogICAgICAgICBBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uID0gY2hhaW5baV07CiAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYg
dmFyaWFibGVEZWNsYXJhdGlvbiA9IGludGVybWVkaWF0ZVZhcmlhYmxlc1tpXTsKQEAgLTQ2MCw3
ICs0NTksNyBAQCBzdGF0aWMgTW9kaWZ5UmVzdWx0IG1vZGlmeShBU1Q6OlByb3BlcnR5CiAgICAg
ICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0ZXJDYWxsKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24o
KSwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4gewogICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJp
YWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlv
bi50eXBlKCkpOwotICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUodmFyaWFi
bGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAgICAgICAgICAgICBy
ZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CiAgICAgICAgIH0sIGluZGV4VmFyaWFibGUgPyAmKmlu
ZGV4VmFyaWFibGUgOiBudWxscHRyKTsKQEAgLTQ2OSw3ICs0NjgsNyBAQCBzdGF0aWMgTW9kaWZ5
UmVzdWx0IG1vZGlmeShBU1Q6OlByb3BlcnR5CiAKICAgICAgICAgcmlnaHRWYWx1ZSA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6
d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xh
cmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIHJpZ2h0VmFsdWUtPnNldFR5cGUodmFyaWFibGVEZWNs
YXJhdGlvbi50eXBlKCktPmNsb25lKCkpOworICAgICAgICByaWdodFZhbHVlLT5zZXRUeXBlKCp2
YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHJpZ2h0VmFsdWUtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkg
SXMgdGhpcyByaWdodD8KICAgICB9CiAKQEAgLTQ3OSwxMiArNDc4LDEyIEBAIHN0YXRpYyBNb2Rp
ZnlSZXN1bHQgbW9kaWZ5KEFTVDo6UHJvcGVydHkKICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhw
cmVzc2lvbiA9IHNldHRlckNhbGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0o
KSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CiAgICAgICAgICAgICBhdXRvIHZhcmlh
YmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOwogICAgICAgICAgICAg
QVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKCpwb2ludGVyVmFyaWFibGUtPnR5cGUo
KSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0
PwogCiAgICAgICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5j
b2RlTG9jYXRpb24oKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOwogICAgICAgICAgICAg
QVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZh
cmlhYmxlLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBv
aW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlhYmxlLT50eXBlKCkpLmFkZHJlc3NT
cGFjZSgpIH0pOwogICAgICAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNlRXhwcmVzc2lvbjsKICAg
ICAgICAgfSwgaW5kZXhWYXJpYWJsZXNbaW5kZXhWYXJpYWJsZXMuc2l6ZSgpIC0gMV0gPyAmKihp
bmRleFZhcmlhYmxlc1tpbmRleFZhcmlhYmxlcy5zaXplKCkgLSAxXSkgOiBudWxscHRyKTsKQEAg
LTUxMyw3ICs1MTIsNyBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWdu
CiAgICAgfQogICAgIEFTU0VSVCghYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5v
dGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpOwogCi0gICAgYXV0byB0eXBlID0gYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpOworICAgIFJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiB0eXBlID0gYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKS5yZXNvbHZlZFR5
cGUoKTsKIAogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdo
dCgpKTsKIApAQCAtNTUyLDI0ICs1NTEsMjQgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNp
dChBU1Q6OlJlYWRNbwogCiAgICAgICAgIHNpbXBsaWZ5TGVmdFZhbHVlKHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwogCi0gICAgICAgIGF1dG8gYmFzZVR5cGUgPSByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLmNsb25lKCk7
Ci0gICAgICAgIGF1dG8gcG9pbnRlclR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5
cGU+KGxlZnRWYWx1ZUxvY2F0aW9uLCAqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSwgYmFzZVR5cGUtPmNsb25l
KCkpOworICAgICAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gYmFzZVR5cGUgPSByZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICBSZWY8
QVNUOjpVbm5hbWVkVHlwZT4gcG9pbnRlclR5cGUgPSBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUo
bGVmdFZhbHVlTG9jYXRpb24sICpyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
LnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpLCBiYXNlVHlwZS5jb3B5UmVmKCkp
OwogCi0gICAgICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KGxlZnRWYWx1ZUxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwg
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KHBvaW50ZXJUeXBlLT5jbG9uZSgpKSwgU3RyaW5n
KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBhdXRvIHBvaW50ZXJWYXJpYWJsZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsZWZ0VmFsdWVMb2NhdGlvbiwg
QVNUOjpRdWFsaWZpZXJzKCksIHBvaW50ZXJUeXBlLmNvcHlSZWYoKSwgU3RyaW5nKCksIG51bGxw
dHIsIG51bGxwdHIpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gZXhwcmVzc2lvbnM7CiAKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRl
ckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihs
ZWZ0VmFsdWVMb2NhdGlvbiwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTGVmdFZhbHVl
KCkpOwotICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKHBvaW50ZXJU
eXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZShwb2ludGVyVHlwZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAgICAg
IGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7Ci0g
ICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVHlwZS5j
b3B5UmVmKCkpOwogICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhp
cyByaWdodD8KIAogICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4obGVmdFZhbHVlTG9jYXRpb24sIFdU
Rk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikp
OwotICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclR5cGUt
PmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocG9p
bnRlclR5cGUuY29weVJlZigpKTsKICAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAgICAgIGV4cHJl
c3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CkBAIC01NzcsMTkg
KzU3NiwxOSBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vCiAKICAg
ICAgICAgewogICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAo
cG9pbnRlclZhcmlhYmxlKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5
cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Ux
LT5zZXRUeXBlKHBvaW50ZXJUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZTEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAgICAgICAgICAgYXV0byBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uPihsb2NhdGlvbiwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEpKTsKLSAgICAgICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAg
ICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUuY29weVJlZigp
KTsKICAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJp
Z2h0PwogCiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ub2xkVmFyaWFibGVSZWZlcmVuY2UoKTsKLSAgICAgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlMi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUuY29weVJlZigpKTsKICAgICAgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogCiAgICAgICAg
ICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2ln
bm1lbnRFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTIpLCBX
VEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOwotICAgICAgICAgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdu
bWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUuY29weVJlZigpKTsKICAgICAgICAgICAg
IGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7CiAKICAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRF
eHByZXNzaW9uKSk7CkBAIC01OTcsMTIgKzU5NiwxMiBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6
OnZpc2l0KEFTVDo6UmVhZE1vCiAKICAgICAgICAgewogICAgICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVu
Y2UoKTsKLSAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGJhc2VUeXBlLT5j
bG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGJhc2VUeXBl
LmNvcHlSZWYoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0
aGlzIHJpZ2h0PwogCiAgICAgICAgICAgICBhdXRvIG5ld1ZhbHVlRXhwcmVzc2lvbiA9IHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZU5ld1ZhbHVlRXhwcmVzc2lvbigpOwogICAgICAgICAg
ICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZN
b3ZlKG5ld1ZhbHVlRXhwcmVzc2lvbikpOwotICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Np
b24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUuY29weVJlZigpKTsKICAgICAgICAgICAgIGFzc2ln
bm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAK
ICAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNz
aW9uKSk7CkBAIC02MTAsMjYgKzYwOSwyNiBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0
KEFTVDo6UmVhZE1vCiAKICAgICAgICAgewogICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVy
ZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7Ci0gICAgICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZTEtPnNldFR5cGUocG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAg
dmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKHBvaW50ZXJUeXBlLmNvcHlSZWYoKSk7CiAgICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZh
bHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAg
ICAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5j
ZTEpKTsKLSAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlw
ZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUo
YmFzZVR5cGUuY29weVJlZigpKTsKICAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogCiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlMiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsK
LSAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUo
KSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUuY29w
eVJlZigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlz
IHJpZ2h0PwogCiAgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShkZXJl
ZmVyZW5jZUV4cHJlc3Npb24pLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOwotICAgICAg
ICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOwor
ICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUuY29weVJl
ZigpKTsKICAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChX
VEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CiAgICAgICAgIH0KIAogICAgICAgICBhdXRv
IHJlc3VsdEV4cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VSZXN1bHRF
eHByZXNzaW9uKCk7Ci0gICAgICAgIGF1dG8gdHlwZSA9IHJlc3VsdEV4cHJlc3Npb24tPnJlc29s
dmVkVHlwZSgpLmNsb25lKCk7CisgICAgICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB0eXBlID0g
cmVzdWx0RXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCk7CiAgICAgICAgIGV4cHJlc3Npb25zLmFw
cGVuZChXVEZNb3ZlKHJlc3VsdEV4cHJlc3Npb24pKTsKIAogICAgICAgICBVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsKQEAgLTY1NSwxMSArNjU0LDExIEBAIHZv
aWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8KIAogICAgICAgICB7CiAgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5vbGRWYXJpYWJsZVJlZmVyZW5jZSgpOwotICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Ut
PnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5
cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkpOwogICAg
ICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZh
bHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAg
ICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpB
c3NpZ25tZW50RXhwcmVzc2lvbj4obGVmdFZhbHVlTG9jYXRpb24sIFdURk1vdmUodmFyaWFibGVS
ZWZlcmVuY2UpLCBXVEZNb3ZlKGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikpOwotICAgICAgICAg
ICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2ln
bm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCkucmVzb2x2ZWRUeXBlKCkpOwogICAgICAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKIAogICAgICAgICAgICAgZXhw
cmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKQEAgLTY2Nywx
OSArNjY2LDE5IEBAIHZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8KIAog
ICAgICAgICB7CiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJlZmVyZW5jZSgpOwotICAgICAgICAgICAgdmFy
aWFibGVSZWZlcmVuY2UtPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2
ZWRUeXBlKCkpOwogICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhp
cyByaWdodD8KIAogICAgICAgICAgICAgYXV0byBuZXdWYWx1ZUV4cHJlc3Npb24gPSByZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLnRha2VOZXdWYWx1ZUV4cHJlc3Npb24oKTsKICAgICAgICAgICAg
IGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24+KGxlZnRWYWx1ZUxvY2F0aW9uLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNl
KSwgV1RGTW92ZShuZXdWYWx1ZUV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgIGFzc2lnbm1lbnRF
eHByZXNzaW9uLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCku
cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVk
VHlwZSgpKTsKICAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJp
YWJsZVJlZmVyZW5jZSgpOwotICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLmNsb25lKCkp
OworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKTsKICAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAgICAgICByZXR1cm4geyBXVEZNb3Zl
KGV4cHJlc3Npb25zKSwgIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpIH07CkBAIC02ODgsNyAr
Njg3LDcgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRNbwogICAgIHNp
bXBsaWZ5TGVmdFZhbHVlKG1vZGlmeVJlc3VsdC5pbm5lckxlZnRWYWx1ZSk7CiAKICAgICBhdXRv
IHJlc3VsdEV4cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VSZXN1bHRF
eHByZXNzaW9uKCk7Ci0gICAgYXV0byB0eXBlID0gcmVzdWx0RXhwcmVzc2lvbi0+cmVzb2x2ZWRU
eXBlKCkuY2xvbmUoKTsKKyAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gdHlwZSA9IHJlc3VsdEV4
cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpOwogICAgIG1vZGlmeVJlc3VsdC5leHByZXNzaW9ucy5h
cHBlbmQoV1RGTW92ZShyZXN1bHRFeHByZXNzaW9uKSk7CiAKICAgICBVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPiBvbGRWYXJpYWJsZURlY2xhcmF0aW9uID0gcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi50YWtlT2xkVmFsdWUoKTsKQEAgLTcyMywxMiArNzIyLDEyIEBAIHZvaWQg
UHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlSaWdodFZhbHUKICAgICAgICAgaWYgKGlzPEFTVDo6
SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQogICAgICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uKS50YWtlSW5kZXgoKSk7CiAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGxvY2F0aW9uLCBTdHJpbmco
YW5kZXJGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICAgICAgY2Fs
bEV4cHJlc3Npb24tPnNldFR5cGUoYW5kZXJGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOworICAg
ICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShhbmRlckZ1bmN0aW9uLT50eXBlKCkpOwogICAg
ICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OwogICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZGVyRnVuY3Rpb24pOwog
CiAgICAgICAgIGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IEFTVDo6cmVwbGFjZVdpdGg8
QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgbG9j
YXRpb24sIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKLSAgICAgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24t
PnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24t
PnR5cGUoKSkuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOwogCiAgICAgICAg
IGlmIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uID0gYXJndW1lbnQtPnZhcmlhYmxlRGVjbGFy
YXRpb24pCkBAIC03NTIsNyArNzUxLDcgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjpzaW1wbGlm
eVJpZ2h0VmFsdQogICAgICAgICBjYWxsRXhwcmVzc2lvbiA9IEFTVDo6cmVwbGFjZVdpdGg8QVNU
OjpDYWxsRXhwcmVzc2lvbj4oZG90RXhwcmVzc2lvbiwgbG9jYXRpb24sIFN0cmluZyhnZXR0ZXJG
dW5jdGlvbi5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwogICAgIH0KICAgICBjYWxsRXhw
cmVzc2lvbi0+c2V0RnVuY3Rpb24oZ2V0dGVyRnVuY3Rpb24pOwotICAgIGNhbGxFeHByZXNzaW9u
LT5zZXRUeXBlKGdldHRlckZ1bmN0aW9uLnR5cGUoKS5jbG9uZSgpKTsKKyAgICBjYWxsRXhwcmVz
c2lvbi0+c2V0VHlwZShnZXR0ZXJGdW5jdGlvbi50eXBlKCkpOwogICAgIGNhbGxFeHByZXNzaW9u
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiB9CiAKQEAgLTc4NSwxMiAr
Nzg0LDEyIEBAIHZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6ZmluaXNoVmlzaXRpbmcKICAgICBp
ZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikpCiAg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbikudGFrZUluZGV4KCkpOwogICAgIGF1dG8gY2FsbEV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGxvY2F0aW9uLCBTdHJp
bmcoYW5kZXJGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZShhbmRlckZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7CisgICAg
Y2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5kZXJGdW5jdGlvbi0+dHlwZSgpKTsKICAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kZXJGdW5jdGlvbik7CiAKICAgICBhdXRvKiBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGxvY2F0aW9uLCBXVEZNb3ZlKGNh
bGxFeHByZXNzaW9uKSk7Ci0gICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25j
YXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUo
KS5jbG9uZSgpKTsKKyAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpKTsK
ICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZh
bHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5h
ZGRyZXNzU3BhY2UoKSB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwu
Y3BwCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChBU1Q6OkZ1bmMKIHsKICAg
ICB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdCA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjYW5kaWRhdGUucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnZlcnNp
b25Db3N0ICs9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JikgLT4gdW5zaWduZWQgeworICAgICAgICBj
b252ZXJzaW9uQ29zdCArPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVuc2lnbmVkIHsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IHVuc2lnbmVkIHsKICAgICAgICAgICAg
IHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJz
aW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
aW5nVHlwZS5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsMTIg
KzgwLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgUmVzb2x2aW5nVHlwZShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB2KQorICAgIFJlc29sdmluZ1R5cGUoUmVmPEFTVDo6
VW5uYW1lZFR5cGU+IHYpCiAgICAgICAgIDogbV9pbm5lcihXVEZNb3ZlKHYpKQogICAgIHsKICAg
ICB9CiAKLSAgICBSZXNvbHZpbmdUeXBlKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
JiB2KQorICAgIFJlc29sdmluZ1R5cGUoUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiB2
KQogICAgICAgICA6IG1faW5uZXIoV1RGTW92ZSh2KSkKICAgICB7CiAgICAgfQpAQCAtMTA1LDE4
ICsxMDUsMTggQEAgcHVibGljOgogCiAgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0VW5uYW1lZFR5
cGUoKQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKSkKLSAgICAgICAgICAgIHJldHVybiAmV1RGOjpn
ZXQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKTsKKyAgICAgICAgaWYgKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEFTVDo6VW5uYW1lZFR5cGU+PihtX2lubmVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6OmdldDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KG1faW5uZXIp
LnB0cigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVmlzaXRvcj4gYXV0byB2aXNpdChjb25zdCBWaXNpdG9yJiB2aXNpdG9yKSAtPiBk
ZWNsdHlwZShXVEY6OnZpc2l0KHZpc2l0b3IsIHN0ZDo6ZGVjbHZhbDxWYXJpYW50PFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj4mPigp
KSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvcj4gYXV0byB2aXNpdChjb25zdCBWaXNp
dG9yJiB2aXNpdG9yKSAtPiBkZWNsdHlwZShXVEY6OnZpc2l0KHZpc2l0b3IsIHN0ZDo6ZGVjbHZh
bDxWYXJpYW50PFJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPj4mPigpKSkKICAgICB7CiAgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3Is
IG1faW5uZXIpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWYXJpYW50PFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj4gbV9pbm5lcjsK
KyAgICBWYXJpYW50PFJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPj4gbV9pbm5lcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBFeHBlY3RlZDx2
b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUFycmF5T3BlCiAKICAgICBmb3IgKGF1dG8mIGFycmF5VHlw
ZSA6IGFycmF5VHlwZXMpIHsKICAgICAgICAgYXV0byBsb2NhdGlvbiA9IGFycmF5VHlwZS5nZXQo
KS5jb2RlTG9jYXRpb24oKTsKLSAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgYXJyYXlUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgJmFy
cmF5VHlwZS5nZXQoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIHByb2dyYW0uaW50cmluc2ljcygp
LnVpbnRUeXBlKCkpLCAib3BlcmF0b3IubGVuZ3RoIl9zdHIsIFdURk1vdmUocGFyYW1ldGVycyks
IG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3Ry
dWN0b3JzLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU5LDE0ICsxNTksMTQgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVD
b25zdHJ1YwogICAgICAgICBhdXRvIGxvY2F0aW9uID0gdW5uYW1lZFR5cGUuY29kZUxvY2F0aW9u
KCk7CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1
YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuY2xvbmUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwg
JnVubmFtZWRUeXBlLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgdW5uYW1lZFR5cGUuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOworICAgICAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVk
VHlwZSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwg
aXNPcGVyYXRvcikpOwogICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29u
c3RydWN0b3IpKTsKICAgICAgICAgfQogCi0gICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0
aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuY2xv
bmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBu
dWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9u
LCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUsICJvcGVy
YXRvciBjYXN0Il9zdHIsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgbnVsbHB0ciwgaXNP
cGVyYXRvcikpOwogICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENv
bnN0cnVjdG9yKSkpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNv
dWxkIG5vdCBzeW50aGVzaXplIGRlZmF1bHQgY29uc3RydWN0b3IiKSk7CiAgICAgfQpAQCAtMTc5
LDcgKzE3OSw3IEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplQ29uc3RydWMKIAog
ICAgICAgICBhdXRvIGxvY2F0aW9uID0gbmFtZWRUeXBlLmdldCgpLmNvZGVMb2NhdGlvbigpOwog
Ci0gICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5h
bWVkVHlwZS5nZXQoKSkpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGF1
dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChsb2NhdGlvbiwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxw
dHIpOwogICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgbmFtZWRUeXBlLmdl
dCgpKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwg
aXNPcGVyYXRvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBz
eW50aGVzaXplRW51bWVyYXQKICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIGF1dG8gbG9jYXRp
b24gPSBlbnVtZXJhdGlvbkRlZmluaXRpb24tPmNvZGVMb2NhdGlvbigpOwogICAgICAgICB7Ci0g
ICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24xID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwg
ZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKLSAg
ICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBl
bnVtZXJhdGlvbkRlZmluaXRpb24pKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOworICAg
ICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5n
KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0
aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwg
QVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgZW51
bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAg
ICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOwogICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwpA
QCAtNTMsMjggKzUzLDI4IEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplRW51bWVy
YXQKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlv
biwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJp
bmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFy
YXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24s
IEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKICAgICAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUo
KSwgIm9wZXJhdG9yLnZhbHVlIl9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlz
T3BlcmF0b3IpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlv
biwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+dHlwZSgpLCAib3BlcmF0b3IudmFsdWUiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
bnVsbHB0ciwgaXNPcGVyYXRvcikpOwogICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBjcmVhdGUgb3BlcmF0b3IudmFsdWUgZm9y
IGVudW0gdHlwZS4iKSk7CiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRv
IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmlu
aXRpb24pKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB2
YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7
CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKLSAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNU
OjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
dHlwZSgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyks
IG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dy
YW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90IGNyZWF0ZSBjb3B5IGNv
bnN0cnVjdG9yIGZvciBlbnVtIHR5cGUuIikpOwogICAgICAgICB9CiAKICAgICAgICAgewotICAg
ICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRp
b25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIp
OworICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgJmVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7
CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
LSAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRy
aWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbikp
LCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09w
ZXJhdG9yKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24s
IEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbiksICJvcGVyYXRvciBjYXN0Il9z
dHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3Qg
Y3JlYXRlICdvcGVyYXRvciBjYXN0JyBmb3IgZW51bSB0eXBlLiIpKTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3Ry
dWN0dXJlQWNjZXNzb3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCShyZXZp
c2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MSArNDYsMTEgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVTdHJ1Y3R1cgogICAg
ICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5z
dHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAgICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9y
Ji5maWVsZAogICAgICAgICAgICAgYXV0byBjcmVhdGVBbmRlciA9IFsmXShBU1Q6OkFkZHJlc3NT
cGFjZSBhZGRyZXNzU3BhY2UpIC0+IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9p
bnRlclR5cGU+KHN0cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKHN0cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCks
IHN0cnVjdHVyZURlZmluaXRpb24pKTsKLSAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVj
bGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oc3RydWN0
dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBBU1Q6OlBv
aW50ZXJUeXBlOjpjcmVhdGUoc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgYWRkcmVz
c1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoc3RydWN0dXJlRWxlbWVudC5jb2RlTG9j
YXRpb24oKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihzdHJ1Y3R1cmVFbGVtZW50LmNvZGVMb2NhdGlvbigpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RG
TW92ZShhcmd1bWVudFR5cGUpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwot
ICAgICAgICAgICAgICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2lu
dGVyVHlwZT4oc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBz
dHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJl
dHVyblR5cGUgPSBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUoc3RydWN0dXJlRWxlbWVudC5jb2Rl
TG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CiAgICAg
ICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKHN0cnVjdHVyZUVsZW1lbnQuY29k
ZUxvY2F0aW9uKCksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3Zl
KHJldHVyblR5cGUpLCBtYWtlU3RyaW5nKCJvcGVyYXRvciYuIiwgc3RydWN0dXJlRWxlbWVudC5u
YW1lKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CiAgICAgICAgICAg
ICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjEsNyArMTYxLDcgQEAgdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYgdAog
ewogICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJl
c3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
Y29uc3RhbnRFeHByZXNzaW9uKTsKLSAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVy
ZW5jZT4mIHR5cGVSZWZlcmVuY2UpIHsKKyAgICB9LCBbJl0oUmVmPEFTVDo6VHlwZVJlZmVyZW5j
ZT4mIHR5cGVSZWZlcmVuY2UpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZl
cmVuY2UpOwogICAgIH0pLCB0eXBlQXJndW1lbnQpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJy
YXlSZWZlcmVuY2VUeXBlLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxMSArNDIsMTYgQEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBBcnJheVJl
ZmVyZW5jZVR5cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgdXNpbmcgQmFzZSA9IFJlZmVyZW5jZVR5cGU7Ci1wdWJsaWM6Ci0gICAg
QXJyYXlSZWZlcmVuY2VUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorCisgICAg
QXJyYXlSZWZlcmVuY2VUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSkKICAgICAgICAgOiBCYXNl
KGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAg
ICB9CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBcnJheVJlZmVyZW5jZVR5cGU+IGNyZWF0ZShD
b2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIFJlZjxVbm5h
bWVkVHlwZT4gZWxlbWVudFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBcnJheVJlZmVyZW5jZVR5cGUobG9jYXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVt
ZW50VHlwZSkpKTsKKyAgICB9CiAKICAgICB2aXJ0dWFsIH5BcnJheVJlZmVyZW5jZVR5cGUoKSA9
IGRlZmF1bHQ7CiAKQEAgLTU1LDExICs2MCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNBcnJh
eVJlZmVyZW5jZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBV
bmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFycmF5UmVmZXJlbmNlVHlwZT4oY29kZUxvY2F0aW9u
KCksIGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOwotICAgIH0KLQogICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIHRo
aXMtPkJhc2U6Omhhc2goKSBeIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoKCJhcnJh
eSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QXJyYXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxMyArNDIsMTggQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEFycmF5
VHlwZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgQXJyYXlUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgVW5pcXVlUmVm
PFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICBB
cnJheVR5cGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRU
eXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKICAgICAgICAgOiBVbm5hbWVkVHlwZShsb2NhdGlv
bikKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgICAg
ICAsIG1fbnVtRWxlbWVudHMobnVtRWxlbWVudHMpCiAgICAgewogICAgIH0KK3B1YmxpYzoKKwor
ICAgIHN0YXRpYyBSZWY8QXJyYXlUeXBlPiBjcmVhdGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBS
ZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFycmF5VHlwZShsb2NhdGlvbiwgV1RGTW92
ZShlbGVtZW50VHlwZSksIG51bUVsZW1lbnRzKSk7CisgICAgfQogCiAgICAgdmlydHVhbCB+QXJy
YXlUeXBlKCkgPSBkZWZhdWx0OwogCkBAIC02MSwxMSArNjYsNiBAQCBwdWJsaWM6CiAgICAgVW5u
YW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX2VsZW1lbnRUeXBlOyB9CiAgICAgdW5zaWduZWQg
bnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVsZW1lbnRzOyB9CiAKLSAgICBVbmlx
dWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtYWtlVW5pcXVlUmVmPEFycmF5VHlwZT4oY29kZUxvY2F0aW9uKCksIG1fZWxlbWVu
dFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOwotICAgIH0KLQogICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1
bnNpZ25lZD46Omhhc2gobV9udW1FbGVtZW50cykgXiBtX2VsZW1lbnRUeXBlLT5oYXNoKCk7CkBA
IC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVW5pcXVlUmVm
PFVubmFtZWRUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV9lbGVt
ZW50VHlwZTsKICAgICB1bnNpZ25lZCBtX251bUVsZW1lbnRzOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Np
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVz
c2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExT
TEV4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaAko
cmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEJhc2VTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5oCShyZXZpc2lvbiAyNDc4MzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlU2Vt
YW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5oIgogI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xCb29sZWFuTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgJ
KHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExTTENvZGVM
b2NhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
Q2FsbEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc4MzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVz
c2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xF
eHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29tbWFFeHByZXNzaW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQ29tbWFFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbW1hRXhwcmVzc2lvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRGVy
ZWZlcmVuY2VFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJl
Zi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJh
dGlvbkRlZmluaXRpb24uaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBFbnVtZXJh
dGlvbkRlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oQ29kZUxvY2F0aW9u
IGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSkK
KyAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcm
JiBuYW1lLCBSZWY8VW5uYW1lZFR5cGU+IHR5cGUpCiAgICAgICAgIDogTmFtZWRUeXBlKGxvY2F0
aW9uLCBXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQogICAg
IHsKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBVbmlx
dWVSZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAgICBSZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsK
ICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEVudW1lcmF0aW9uTWVtYmVyPj4g
bV9tZW1iZXJzOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCShy
ZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTENvbnN0
YW50RXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaAkocmV2aXNpb24gMjQ3ODM1
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCShy
ZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gKm1fdHlwZTsKICAgICB9CiAKLSAgICB2b2lkIHNldFR5cGUo
VW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgdm9pZCBzZXRUeXBlKFJlZjxVbm5h
bWVkVHlwZT4gdHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV90eXBlKTsKICAgICAgICAg
bV90eXBlID0gV1RGTW92ZSh0eXBlKTsKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHZv
aWQgY29weVR5cGVUbyhFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChhdXRvKiByZXNvbHZlZFR5cGUgPSBjb25zdF9jYXN0PEV4cHJlc3Npb24qPih0aGlzKS0+bWF5
YmVSZXNvbHZlZFR5cGUoKSkKLSAgICAgICAgICAgIG90aGVyLnNldFR5cGUocmVzb2x2ZWRUeXBl
LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIG90aGVyLnNldFR5cGUoKnJlc29sdmVkVHlwZSk7CiAg
ICAgICAgIGlmIChhdXRvKiB0eXBlQW5ub3RhdGlvbiA9IG1heWJlVHlwZUFubm90YXRpb24oKSkK
ICAgICAgICAgICAgIG90aGVyLnNldFR5cGVBbm5vdGF0aW9uKFR5cGVBbm5vdGF0aW9uKCp0eXBl
QW5ub3RhdGlvbikpOwogICAgIH0KQEAgLTExOSw3ICsxMTksNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9uOwotICAgIE9wdGlvbmFsPFVuaXF1
ZVJlZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKKyAgICBSZWZQdHI8VW5uYW1lZFR5cGU+IG1fdHlw
ZTsKICAgICBPcHRpb25hbDxUeXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbjsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0
TGl0ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5o
IgogI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC02NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgRmxvYXRMaXRlcmFsIHJl
c3VsdChjb2RlTG9jYXRpb24oKSwgbV92YWx1ZSk7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBt
X3R5cGUuY2xvbmUoKTsKICAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IG1fdHlwZS5t
YXliZVJlc29sdmVkVHlwZSgpKQotICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJl
c29sdmVkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUo
Y29uc3RfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4oKnJlc29sdmVkVHlwZSkpOwogICAgICAgICBj
b3B5VHlwZVRvKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBBU1Qgewog
CiBGbG9hdExpdGVyYWxUeXBlOjpGbG9hdExpdGVyYWxUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlv
biwgZmxvYXQgdmFsdWUpCiAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgICwgbV9wcmVmZXJyZWRU
eXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4obG9jYXRpb24sICJmbG9hdCJfc3RyLCBU
eXBlQXJndW1lbnRzKCkpKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKFR5cGVSZWZlcmVuY2U6OmNy
ZWF0ZShsb2NhdGlvbiwgImZsb2F0Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7CiB9CiAKQEAg
LTc2LDggKzc2LDggQEAgRmxvYXRMaXRlcmFsVHlwZSBGbG9hdExpdGVyYWxUeXBlOjpjbG9uZQog
ewogICAgIEZsb2F0TGl0ZXJhbFR5cGUgcmVzdWx0KG1fcHJlZmVycmVkVHlwZS0+Y29kZUxvY2F0
aW9uKCksIG1fdmFsdWUpOwogICAgIGlmIChhdXRvKiB0eXBlID0gbWF5YmVSZXNvbHZlZFR5cGUo
KSkKLSAgICAgICAgcmVzdWx0LnJlc29sdmUodHlwZS0+Y2xvbmUoKSk7Ci0gICAgcmVzdWx0Lm1f
cHJlZmVycmVkVHlwZSA9IG1fcHJlZmVycmVkVHlwZS0+Y2xvbmVUeXBlUmVmZXJlbmNlKCk7Cisg
ICAgICAgIHJlc3VsdC5yZXNvbHZlKGNvbnN0X2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KCp0eXBl
KSk7CisgICAgcmVzdWx0Lm1fcHJlZmVycmVkVHlwZSA9IG1fcHJlZmVycmVkVHlwZS5jb3B5UmVm
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJh
bFR5cGUuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlz
IGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCiAg
ICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2Ug
LT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KLSAgICBVbmlxdWVSZWY8VHlw
ZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworICAgIFJlZjxUeXBlUmVmZXJlbmNlPiBtX3By
ZWZlcnJlZFR5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIEZ1
bmN0aW9uRGVjbGFyYXRpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBdHRyaWJ1
dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQ
b2ludFR5cGUsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBW
YXJpYWJsZURlY2xhcmF0aW9ucyYmIHBhcmFtZXRlcnMsIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRp
Yz4mJiBzZW1hbnRpYywgYm9vbCBpc09wZXJhdG9yKQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24o
Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2NrLCBP
cHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIFJlZjxVbm5hbWVkVHlwZT4g
dHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBwYXJhbWV0ZXJzLCBz
dGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+JiYgc2VtYW50aWMsIGJvb2wgaXNPcGVyYXRvcikKICAg
ICAgICAgOiBtX2NvZGVMb2NhdGlvbihsb2NhdGlvbikKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJs
b2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQogICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUo
ZW50cnlQb2ludFR5cGUpCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgQXR0cmlidXRl
QmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsKICAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gbV9l
bnRyeVBvaW50VHlwZTsKICAgICBib29sIG1faXNPcGVyYXRvcjsKLSAgICBVbmlxdWVSZWY8VW5u
YW1lZFR5cGU+IG1fdHlwZTsKKyAgICBSZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJp
bmcgbV9uYW1lOwogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zIG1fcGFyYW1ldGVyczsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+IG1fc2VtYW50aWM7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVn
ZXJMaXRlcmFsLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJX
SExTTEludGVnZXJMaXRlcmFsVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgSW50ZWdlckxpdGVyYWwgcmVzdWx0KGNvZGVM
b2NhdGlvbigpLCBtX3ZhbHVlKTsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IG1fdHlwZS5jbG9u
ZSgpOwogICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gbV90eXBlLm1heWJlUmVzb2x2
ZWRUeXBlKCkpCi0gICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzb2x2ZWRUeXBl
LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShjb25zdF9jYXN0
PEFTVDo6VW5uYW1lZFR5cGUmPigqcmVzb2x2ZWRUeXBlKSk7CiAgICAgICAgIGNvcHlUeXBlVG8o
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIElu
dGVnZXJMaXRlcmFsVHlwZTo6SW50ZWdlckxpdGVyYWxUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlv
biwgaW50IHZhbHVlKQogICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAsIG1fcHJlZmVycmVkVHlw
ZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KGxvY2F0aW9uLCAiaW50Il9zdHIsIFR5cGVB
cmd1bWVudHMoKSkpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUoVHlwZVJlZmVyZW5jZTo6Y3JlYXRl
KGxvY2F0aW9uLCAiaW50Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7CiB9CiAKQEAgLTc3LDgg
Kzc3LDggQEAgSW50ZWdlckxpdGVyYWxUeXBlIEludGVnZXJMaXRlcmFsVHlwZTo6YwogewogICAg
IEludGVnZXJMaXRlcmFsVHlwZSByZXN1bHQobV9wcmVmZXJyZWRUeXBlLT5jb2RlTG9jYXRpb24o
KSwgbV92YWx1ZSk7CiAgICAgaWYgKGF1dG8qIHR5cGUgPSBtYXliZVJlc29sdmVkVHlwZSgpKQot
ICAgICAgICByZXN1bHQucmVzb2x2ZSh0eXBlLT5jbG9uZSgpKTsKLSAgICByZXN1bHQubV9wcmVm
ZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLT5jbG9uZVR5cGVSZWZlcmVuY2UoKTsKKyAgICAg
ICAgcmVzdWx0LnJlc29sdmUoY29uc3RfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4oKnR5cGUpKTsK
KyAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLmNvcHlSZWYoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlz
IGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCiAg
ICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2Ug
LT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KLSAgICBVbmlxdWVSZWY8VHlw
ZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworICAgIFJlZjxUeXBlUmVmZXJlbmNlPiBtX3By
ZWZlcnJlZFR5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxFeHByZXNzaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TG9naWNhbEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTG9naWNhbEV4cHJlc3Npb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgi
CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTG9naWNhbE5v
dEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc4MzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2Fs
Tm90RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNM
RXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCShy
ZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJh
bC5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gTnVsbExpdGVyYWwoY29k
ZUxvY2F0aW9uKCkpOwogICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gbV90eXBlLm1h
eWJlUmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVz
b2x2ZWRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShj
b25zdF9jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPigqcmVzb2x2ZWRUeXBlKSk7CiAgICAgICAgIGNv
cHlUeXBlVG8ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFBvaW50ZXJUeXBlLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDExICs0MiwxNyBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIFBvaW50ZXJUeXBlIDog
cHVibGljIFJlZmVyZW5jZVR5cGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IHVzaW5nIEJhc2UgPSBSZWZlcmVuY2VUeXBlOwotcHVibGljOgotICAgIFBvaW50ZXJUeXBlKENv
ZGVMb2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgVW5pcXVlUmVm
PFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSkKKworICAgIFBvaW50ZXJUeXBlKENvZGVMb2NhdGlv
biBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRUeXBlPiBl
bGVtZW50VHlwZSkKICAgICAgICAgOiBCYXNlKGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUmVm
PFBvaW50ZXJUeXBlPiBjcmVhdGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBZGRyZXNzU3BhY2Ug
YWRkcmVzc1NwYWNlLCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUG9pbnRlclR5cGUobG9jYXRpb24sIGFkZHJlc3NTcGFj
ZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpKTsKKyAgICB9CiAKICAgICB2aXJ0dWFsIH5Qb2ludGVy
VHlwZSgpID0gZGVmYXVsdDsKIApAQCAtNTUsMTAgKzYxLDEwIEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UG9pbnRlclR5cGU+KGNvZGVMb2NhdGlvbigpLCBh
ZGRyZXNzU3BhY2UoKSwgZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKLSAgICB9CisgICAgLy9Vbmlx
dWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICAvL3sKKyAgICAv
LyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxQb2ludGVyVHlwZT4oY29kZUxvY2F0aW9uKCksIGFk
ZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgIC8vfQogCiAgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hM
U0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgog
I2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAkocmV2aXNpb24g
MjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksOCArMTE5
LDggQEAgcHJpdmF0ZToKICAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKENvZGVMb2NhdGlv
biBsb2NhdGlvbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxlZnRWYWx1ZSkKICAgICAgICAgOiBF
eHByZXNzaW9uKGxvY2F0aW9uKQogICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZh
bHVlKSkKLSAgICAgICAgLCBtX29sZFZhbHVlKG1ha2VVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJh
dGlvbj4obG9jYXRpb24sIFF1YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0LCBTdHJpbmcoKSwgbnVs
bHB0ciwgbnVsbHB0cikpCi0gICAgICAgICwgbV9uZXdWYWx1ZShtYWtlVW5pcXVlUmVmPFZhcmlh
YmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwgU3Ry
aW5nKCksIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICAsIG1fb2xkVmFsdWUobWFrZVVuaXF1
ZVJlZjxWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgUXVhbGlmaWVycygpLCBudWxscHRy
LCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpCisgICAgICAgICwgbV9uZXdWYWx1ZShtYWtl
VW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBRdWFsaWZpZXJzKCksIG51
bGxwdHIsIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSkKICAgICB7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDEzICs0MiwxNCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgUmVm
ZXJlbmNlVHlwZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgUmVmZXJlbmNlVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24s
IEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiBlbGVt
ZW50VHlwZSkKK3Byb3RlY3RlZDoKKyAgICBSZWZlcmVuY2VUeXBlKENvZGVMb2NhdGlvbiBsb2Nh
dGlvbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50
VHlwZSkKICAgICAgICAgOiBVbm5hbWVkVHlwZShsb2NhdGlvbikKICAgICAgICAgLCBtX2FkZHJl
c3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShXVEZNb3ZlKGVs
ZW1lbnRUeXBlKSkKICAgICB7CiAgICAgfQorcHVibGljOgogCiAgICAgdmlydHVhbCB+UmVmZXJl
bmNlVHlwZSgpID0gZGVmYXVsdDsKIApAQCAtNjgsNyArNjksNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgQWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOwotICAgIFVuaXF1ZVJlZjxVbm5h
bWVkVHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBSZWY8VW5uYW1lZFR5cGU+IG1fZWxlbWVudFR5
cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc29sdmFibGVUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5
cGUuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTMg
Kzc0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX3Jlc29sdmVkVHlwZTsKICAgICB9
CiAKLSAgICB2b2lkIHJlc29sdmUoVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAg
dm9pZCByZXNvbHZlKFJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKICAgICB7CiAgICAgICAgIG1fcmVz
b2x2ZWRUeXBlID0gV1RGTW92ZSh0eXBlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3B0aW9u
YWw8VW5pcXVlUmVmPFVubmFtZWRUeXBlPj4gbV9yZXNvbHZlZFR5cGU7CisgICAgUmVmUHRyPFVu
bmFtZWRUeXBlPiBtX3Jlc29sdmVkVHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VT
ZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRp
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xCYXNl
U2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTEJh
c2VTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oCShy
ZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xDb2Rl
TG9jYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50
LmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVl
UmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVF
bGVtZW50LmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIFN0cnVjdHVyZUVsZW1lbnQgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0cnVjdHVyZUVsZW1l
bnQoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgVW5pcXVl
UmVmPFVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxT
ZW1hbnRpYz4mJiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVtZW50KENvZGVMb2NhdGlvbiBs
b2NhdGlvbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIFJlZjxVbm5hbWVkVHlwZT4gdHlwZSwg
U3RyaW5nJiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiYmIHNlbWFudGljKQogICAg
ICAgICA6IG1fY29kZUxvY2F0aW9uKGxvY2F0aW9uKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhX
VEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAt
NjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENvZGVMb2NhdGlvbiBtX2NvZGVM
b2NhdGlvbjsKICAgICBRdWFsaWZpZXJzIG1fcXVhbGlmaWVyczsKLSAgICBVbmlxdWVSZWY8VW5u
YW1lZFR5cGU+IG1fdHlwZTsKKyAgICBSZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJp
bmcgbV9uYW1lOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRpYz4gbV9zZW1hbnRpYzsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUZXJu
YXJ5RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFRlcm5hcnlFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzgzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFRlcm5hcnlF
eHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAkocmV2aXNpb24g
MjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VHlwZUFyZ3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBUeXBlQXJn
dW1lbnQgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50JiB0CiB7CiAgICAgcmV0dXJuIFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50
RXhwcmVzc2lvbikgLT4gVHlwZUFyZ3VtZW50IHsKICAgICAgICAgcmV0dXJuIGNvbnN0YW50RXhw
cmVzc2lvbi5jbG9uZSgpOwotICAgIH0sIFtdKGNvbnN0IFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNl
PiYgdHlwZVJlZmVyZW5jZSkgLT4gVHlwZUFyZ3VtZW50IHsKLSAgICAgICAgcmV0dXJuIHR5cGVS
ZWZlcmVuY2UtPmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgIH0sIFtdKGNvbnN0IFJlZjxUeXBl
UmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkgLT4gVHlwZUFyZ3VtZW50IHsKKyAgICAgICAgcmV0
dXJuIHR5cGVSZWZlcmVuY2UuY29weVJlZigpOwogICAgIH0pLCB0eXBlQXJndW1lbnQpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
QXJndW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFR5
cGVSZWZlcmVuY2U7CiAKLXVzaW5nIFR5cGVBcmd1bWVudCA9IFZhcmlhbnQ8Q29uc3RhbnRFeHBy
ZXNzaW9uLCBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4+OwordXNpbmcgVHlwZUFyZ3VtZW50ID0g
VmFyaWFudDxDb25zdGFudEV4cHJlc3Npb24sIFJlZjxUeXBlUmVmZXJlbmNlPj47CiB1c2luZyBU
eXBlQXJndW1lbnRzID0gVmVjdG9yPFR5cGVBcmd1bWVudD47CiAKIFR5cGVBcmd1bWVudCBjbG9u
ZShjb25zdCBUeXBlQXJndW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAko
cmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZURlZmluaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBA
QCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIFR5cGVEZWZpbml0aW9uIDogcHVibGljIE5hbWVkVHlw
ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVHlwZURlZmlu
aXRpb24oQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBVbmlxdWVSZWY8VW5u
YW1lZFR5cGU+JiYgdHlwZSkKKyAgICBUeXBlRGVmaW5pdGlvbihDb2RlTG9jYXRpb24gbG9jYXRp
b24sIFN0cmluZyYmIG5hbWUsIFJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKICAgICAgICAgOiBOYW1l
ZFR5cGUobG9jYXRpb24sIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUo
dHlwZSkpCiAgICAgewpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIFJlZjxVbm5hbWVkVHlw
ZT4gbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
UmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDEyICszNywxMiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsK
IAotVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+IFR5cGVSZWZlcmVuY2U6OndyYXAoQ29kZUxvY2F0
aW9uIGxvY2F0aW9uLCBOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSkKK1JlZjxUeXBlUmVmZXJlbmNl
PiBUeXBlUmVmZXJlbmNlOjp3cmFwKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgTmFtZWRUeXBlJiBy
ZXNvbHZlZFR5cGUpCiB7CiAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOwogICAgIGlm
IChpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkpCiAgICAgICAgIHR5cGVB
cmd1bWVudHMgPSBBU1Q6OmNsb25lKGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVz
b2x2ZWRUeXBlKS50eXBlQXJndW1lbnRzKCkpOwotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1
ZVJlZjxUeXBlUmVmZXJlbmNlPihsb2NhdGlvbiwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkp
LCBXVEZNb3ZlKHR5cGVBcmd1bWVudHMpKTsKKyAgICBhdXRvIHJlc3VsdCA9IFR5cGVSZWZlcmVu
Y2U6OmNyZWF0ZShsb2NhdGlvbiwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkpLCBXVEZNb3Zl
KHR5cGVBcmd1bWVudHMpKTsKICAgICByZXN1bHQtPnNldFJlc29sdmVkVHlwZShyZXNvbHZlZFR5
cGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5o
CShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIwICs0NSwy
NCBAQCBjbGFzcyBOYW1lZFR5cGU7CiAKIGNsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgVW5u
YW1lZFR5cGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgogICAgIFR5
cGVSZWZlcmVuY2UoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJn
dW1lbnRzJiYgdHlwZUFyZ3VtZW50cykKICAgICAgICAgOiBVbm5hbWVkVHlwZShsb2NhdGlvbikK
ICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGVBcmd1bWVu
dHMoV1RGTW92ZSh0eXBlQXJndW1lbnRzKSkKICAgICB7CiAgICAgfQorcHVibGljOgorICAgIHN0
YXRpYyBSZWY8VHlwZVJlZmVyZW5jZT4gY3JlYXRlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgU3Ry
aW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKiBuZXcgVHlwZVJlZmVyZW5jZShsb2NhdGlvbiwgV1RGTW92ZShu
YW1lKSwgV1RGTW92ZSh0eXBlQXJndW1lbnRzKSkpOworICAgIH0KIAogICAgIHZpcnR1YWwgflR5
cGVSZWZlcmVuY2UoKSA9IGRlZmF1bHQ7CiAKICAgICBUeXBlUmVmZXJlbmNlKGNvbnN0IFR5cGVS
ZWZlcmVuY2UmKSA9IGRlbGV0ZTsKICAgICBUeXBlUmVmZXJlbmNlKFR5cGVSZWZlcmVuY2UmJikg
PSBkZWZhdWx0OwogCi0gICAgc3RhdGljIFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiB3cmFwKENv
ZGVMb2NhdGlvbiwgTmFtZWRUeXBlJiByZXNvbHZlZFR5cGUpOworICAgIHN0YXRpYyBSZWY8VHlw
ZVJlZmVyZW5jZT4gd3JhcChDb2RlTG9jYXRpb24sIE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKTsK
IAogICAgIGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogCkBAIC04OCwxOSArOTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVzb2x2ZWRUeXBl
ID0gJnJlc29sdmVkVHlwZTsKICAgICB9CiAKLSAgICBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4g
Y2xvbmVUeXBlUmVmZXJlbmNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0g
bWFrZVVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihjb2RlTG9jYXRpb24oKSwgU3RyaW5nKG1fbmFt
ZSksIEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7Ci0gICAgICAgIGlmIChtX3Jlc29sdmVk
VHlwZSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKCptX3Jlc29sdmVkVHlw
ZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgVW5pcXVlUmVmPFVubmFt
ZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gY2xv
bmVUeXBlUmVmZXJlbmNlKCk7Ci0gICAgfQotCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IG92
ZXJyaWRlCiAgICAgewogICAgICAgICAvLyBDdXJyZW50bHksIHdlIG9ubHkgdXNlIHRoaXMgZnVu
Y3Rpb24gYWZ0ZXIgdGhlIG5hbWUgcmVzb2x2ZXIgcnVucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5
cGUuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjks
NyBAQAogCiAjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFR5
cGUuaCIKLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBVbm5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFVu
bmFtZWRUeXBlIDogcHVibGljIFR5cGUsIHB1YmxpYyBSZWZDb3VudGVkPFVubmFtZWRUeXBlPiB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgVW5uYW1lZFR5cGUo
Q29kZUxvY2F0aW9uIGxvY2F0aW9uKQpAQCAtNjIsOCArNjIsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQogICAg
IHZpcnR1YWwgVHlwZSYgdW5pZnlOb2RlKCkgeyByZXR1cm4gKnRoaXM7IH0KIAotICAgIHZpcnR1
YWwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1
YWwgdW5zaWduZWQgaGFzaCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0ID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbCByZXN1bHQoY29kZUxvY2F0aW9uKCksIG1fdmFsdWUpOwogICAg
ICAgICByZXN1bHQubV90eXBlID0gbV90eXBlLmNsb25lKCk7CiAgICAgICAgIGlmIChhdXRvKiBy
ZXNvbHZlZFR5cGUgPSBtX3R5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkKLSAgICAgICAgICAgIHJl
c3VsdC5tX3R5cGUucmVzb2x2ZShyZXNvbHZlZFR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAg
cmVzdWx0Lm1fdHlwZS5yZXNvbHZlKGNvbnN0X2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KCpyZXNv
bHZlZFR5cGUpKTsKICAgICAgICAgY29weVR5cGVUbyhyZXN1bHQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZS5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKENvZGVM
b2NhdGlvbiBsb2NhdGlvbiwgdW5zaWduZWQgdmFsdWUpCiAgICAgOiBtX3ZhbHVlKHZhbHVlKQot
ICAgICwgbV9wcmVmZXJyZWRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4obG9jYXRp
b24sICJ1aW50Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUo
VHlwZVJlZmVyZW5jZTo6Y3JlYXRlKGxvY2F0aW9uLCAidWludCJfc3RyLCBUeXBlQXJndW1lbnRz
KCkpKQogewogfQogCkBAIC04MCw4ICs4MCw4IEBAIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
IFVuc2lnbmVkSW50ZWcKIHsKICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSByZXN1bHQo
bV9wcmVmZXJyZWRUeXBlLT5jb2RlTG9jYXRpb24oKSwgbV92YWx1ZSk7CiAgICAgaWYgKGF1dG8q
IHR5cGUgPSBtYXliZVJlc29sdmVkVHlwZSgpKQotICAgICAgICByZXN1bHQucmVzb2x2ZSh0eXBl
LT5jbG9uZSgpKTsKLSAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBl
LT5jbG9uZVR5cGVSZWZlcmVuY2UoKTsKKyAgICAgICAgcmVzdWx0LnJlc29sdmUoY29uc3RfY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlJj4oKnR5cGUpKTsKKyAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBl
ID0gbV9wcmVmZXJyZWRUeXBlLmNvcHlSZWYoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgJKHJl
dmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3ZhbHVlOwogICAgIC8vIFRoaXMg
aXMgYSB1bmlxdWVfcHRyIHRvIHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4K
ICAgICAvLyBDb25zdGFudEV4cHJlc3Npb24gLT4gTGl0ZXJhbFR5cGUgLT4gVHlwZVJlZmVyZW5j
ZSAtPiBUeXBlQXJndW1lbnRzIC0+IENvbnN0YW50RXhwcmVzc2lvbgotICAgIFVuaXF1ZVJlZjxU
eXBlUmVmZXJlbmNlPiBtX3ByZWZlcnJlZFR5cGU7CisgICAgUmVmPFR5cGVSZWZlcmVuY2U+IG1f
cHJlZmVycmVkVHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRp
b24gZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogLy8gRmluYWwgYmVjYXVz
ZSB3ZSBtYWRlIHRoZSBkZXN0cnVjdG9yIG5vbi12aXJ0dWFsLgogcHVibGljOgotICAgIFZhcmlh
YmxlRGVjbGFyYXRpb24oQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbiwgUXVhbGlmaWVycyYmIHF1
YWxpZmllcnMsIE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4+JiYgdHlwZSwgU3RyaW5n
JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiYmIHNlbWFudGljLCBzdGQ6OnVuaXF1
ZV9wdHI8RXhwcmVzc2lvbj4mJiBpbml0aWFsaXplcikKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9u
KENvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb24sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBSZWZQ
dHI8VW5uYW1lZFR5cGU+IHR5cGUsIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxTZW1h
bnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6
ZXIpCiAgICAgICAgIDogbV9jb2RlTG9jYXRpb24oY29kZUxvY2F0aW9uKQogICAgICAgICAsIG1f
cXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3Zl
KHR5cGUpKQpAQCAtNjcsMTIgKzY3LDEyIEBAIHB1YmxpYzoKICAgICAvLyBXZSB1c2UgdGhpcyBm
b3IgUmVhZE1vZGlmeVdyaXRlIGV4cHJlc3Npb25zLCBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZSB0
eXBlIG9mIHRoZWlyCiAgICAgLy8gaW50ZXJuYWwgdmFyaWFibGVzIHVudGlsIHRoZSBjaGVja2Vy
IHJ1bnMuIEFsbCBvdGhlciB2YXJpYWJsZXMgc2hvdWxkIHN0YXJ0IGxpZmUgb3V0CiAgICAgLy8g
d2l0aCBhIHR5cGUuCi0gICAgdm9pZCBzZXRUeXBlKFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gdHlw
ZSkKKyAgICB2b2lkIHNldFR5cGUoUmVmPFVubmFtZWRUeXBlPiB0eXBlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKCFtX3R5cGUpOwogICAgICAgICBtX3R5cGUgPSBXVEZNb3ZlKHR5cGUpOwogICAg
IH0KLSAgICBjb25zdCBPcHRpb25hbDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiYgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFJlZlB0cjxVbm5hbWVkVHlwZT4mIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBVbm5hbWVkVHlwZSogdHlwZSgpIHsg
cmV0dXJuIG1fdHlwZSA/ICYqbV90eXBlIDogbnVsbHB0cjsgfQogICAgIFNlbWFudGljKiBzZW1h
bnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWMuZ2V0KCk7IH0KICAgICBFeHByZXNzaW9uKiBpbml0
aWFsaXplcigpIHsgcmV0dXJuIG1faW5pdGlhbGl6ZXIuZ2V0KCk7IH0KQEAgLTg5LDcgKzg5LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247CiAg
ICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgT3B0aW9uYWw8VW5pcXVlUmVmPFVubmFt
ZWRUeXBlPj4gbV90eXBlOworICAgIFJlZlB0cjxVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0
cmluZyBtX25hbWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBtX3NlbWFudGljOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2luaXRpYWxpemVyOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlv
bldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0Nzgz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0
aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDggQEAg
c3RhdGljIEFTVDo6TmFtZWRUeXBlJiB2ZWN0b3JJbm5lclR5cGUoQQogICAgICAgICByZXR1cm4g
bmF0aXZlVHlwZURlY2xhcmF0aW9uOwogCiAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFVuaXF1ZVJl
ZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpWzBdKS0+cmVzb2x2ZWRUeXBlKCk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKKyAgICByZXR1cm4gV1RGOjpnZXQ8UmVmPEFTVDo6VHlwZVJlZmVyZW5j
ZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pLT5yZXNvbHZlZFR5
cGUoKTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlY3RvclN1ZmZpeChpbnQgdmVjdG9yTGVu
Z3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xOYXRpdmVUeXBlV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZVR5cGVXcml0ZXIuY3BwCShyZXZpc2lv
biAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE5hdGl2ZVR5cGVXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2OCw4IEBA
IFN0cmluZyB3cml0ZU5hdGl2ZVR5cGUoQVNUOjpOYXRpdmVUeXBlRGUKICAgICAgICAgcmV0dXJu
ICJzYW1wbGVyIl9zdHI7CiAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InZlY3RvciIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVswXSkpOwotICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gV1RG
OjpnZXQ8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVswXSkpOworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gV1RGOjpnZXQ8
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pOwogICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB0eXBlUmVmZXJlbmNlLT51bmlm
eU5vZGUoKTsKICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5
cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKQEAgLTExMSw4ICsxMTEsOCBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVUeXBlKEFTVDo6TmF0aXZlVHlwZURlCiAgICAgfQogICAgIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJtYXRyaXgiKSB7CiAgICAgICAgIEFT
U0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsK
LSAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VHlw
ZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsK
LSAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5
cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsK
KyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEFTVDo6VHlwZVJlZmVy
ZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICAg
ICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKICAgICAgICAgYXV0
byYgdW5pZnlOb2RlID0gdHlwZVJlZmVyZW5jZS0+dW5pZnlOb2RlKCk7CiAgICAgICAgIGF1dG8m
IG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwogICAgICAg
ICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KG5hbWVkVHlwZSk7CkBAIC0xMzcsOCArMTM3LDggQEAgU3RyaW5nIHdyaXRlTmF0aXZlVHlw
ZShBU1Q6Ok5hdGl2ZVR5cGVEZQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiYXJyYXk8Iiwg
cHJlZml4LCAiLCAiLCBjb2x1bW5zICogcm93cywgIj4iKTsKICAgICB9CiAgICAgQVNTRVJUKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOwotICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7Ci0gICAgYXV0byYg
dHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+Pihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBBU1NFUlQoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIHR5cGVSZWZlcmVuY2Ug
PSBXVEY6OmdldDxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVswXSk7CiAgICAgYXV0byBwcmVmaXggPSAoWyZdKCkgLT4gU3RyaW5n
IHsKICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUx
RCIpCiAgICAgICAgICAgICByZXR1cm4gInRleHR1cmUxZCJfc3RyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374931</attachid>
            <date>2019-07-25 19:11:02 -0700</date>
            <delta_ts>2019-07-26 14:26:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>152163</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Nzg1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBAQAorMjAxOS0wNy0yNSAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIFVubmFtZWRUeXBl
IHNob3VsZCBiZSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBVbm5hbWVkVHlwZSByZWZlcmVu
Y2UgY291bnRlZC4gVGhlIG1vdGl2YXRpb24gZm9yIGRvaW5nIHRoaXMKKyAgICAgICAgaXMgSSBt
ZWFzdXJlZCBob3cgbWFueSB0aW1lcyB3ZSB3ZXJlIGNsb25pbmcgVW5uYW1lZFR5cGVzLCBhbmQg
SSBmb3VuZCB3ZSB3ZXJlCisgICAgICAgIGRvaW5nIGl0IH40MzMsMDAwIHRpbWVzIGluIHNvbWUg
b2YgSnVzdGluJ3MgZGVtb3MuIFRoaXMgaXMgaHVnZWx5IHdhc3RlZnVsLAorICAgICAgICBnaXZl
biB0aGF0IGFuIFVubmFtZWRUeXBlIGlzIGltbXV0YWJsZSBpbiB0aGUgc2Vuc2UgdGhhdCBvbmNl
IHRoZSB0eXBlIGlzCisgICAgICAgIHJlc29sdmVkLCBpdCB3aWxsIG5ldmVyIGNoYW5nZS4gU28g
aW5zdGVhZCBvZiByZXBlYXRlZGx5IGNsb25pbmcgdGhlIHNhbWUKKyAgICAgICAgdHlwZSwgYW5k
IGhhdmluZyBFeHByZXNzaW9uIHBvaW50IHRvIGEgVW5pcXVlUmVmIG9mIFVubmFtZWRUeXBlLCB3
ZSBzaG91bGQKKyAgICAgICAgaW5zdGVhZCBtYWtlIFVubmFtZWRUeXBlIHJlZmVyZW5jZSBjb3Vu
dGVkLCBhbmQgaGF2ZSBleHByZXNzaW9ucyBwb2ludCB0byBhCisgICAgICAgIHBvdGVudGlhbGx5
IHNoYXJlZCBVbm5hbWVkVHlwZS4KKyAgICAgICAgCisgICAgICAgIERvaW5nIHRoaXMgaXMgaHVn
ZWx5IGJlbmVmaWNpYWwgdG8gV0hMU0wgY29tcGlsZSB0aW1lcy4gT24gSnVzdGluJ3MgZGVtb3Ms
CisgICAgICAgIHRoZXNlIGFyZSB0aGUgcmVzdWx0cyBJJ20gZ2V0dGluZzoKKyAgICAgICAgCisg
ICAgICAgIGhlbGxvLXRyaWFuZ2xlOiBuZXV0cmFsCisgICAgICAgIGhlbGxvLWN1YmU6IDU1JSBm
YXN0ZXIKKyAgICAgICAgY29tcHV0ZS1ibHVyOiAzNSUgZmFzdGVyCisgICAgICAgIHRleHR1cmVk
LWN1YmU6IDQ5JSBmYXN0ZXIKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFycmF5UmVmZXJlbmNlVHlwZS5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlOjpBcnJheVJlZmVyZW5jZVR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6QXJyYXlUeXBlOjpBcnJheVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6QXJyYXlUeXBlOjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246OnNldFR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6Y29weVR5cGVUbyBjb25z
dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGbG9hdExpdGVyYWw6OmNsb25lIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVy
YWxUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5
cGU6OkZsb2F0TGl0ZXJhbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6Rmxv
YXRMaXRlcmFsVHlwZTo6Y2xvbmUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uOjpGdW5jdGlvbkRlY2xhcmF0aW9uKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVyYWw6OmNsb25lIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVy
YWxUeXBlOjpJbnRlZ2VyTGl0ZXJhbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6SW50ZWdlckxpdGVyYWxUeXBlOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6Ok51bGxMaXRlcmFsOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OlBvaW50ZXJUeXBlOjpQb2ludGVyVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xSZWZlcmVuY2VUeXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpS
ZWZlcmVuY2VUeXBlOjpSZWZlcmVuY2VUeXBlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlwZS5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkFTVDo6UmVzb2x2YWJsZVR5cGU6OnJlc29sdmUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpBU1Q6OlN0cnVjdHVyZUVsZW1lbnQ6OlN0cnVjdHVyZUVsZW1lbnQpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpjbG9uZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpBU1Q6OlR5cGVEZWZpbml0aW9uOjpUeXBlRGVmaW5pdGlvbik6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6VHlwZVJlZmVyZW5jZTo6Y2xvbmVUeXBlUmVmZXJlbmNlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlw
ZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50
ZWdlckxpdGVyYWw6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGU6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3Jp
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6dmVjdG9ySW5uZXJUeXBl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZVR5cGVX
cml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5hdGl2ZVR5
cGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRpYWxpemVW
YXJpYWJsZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkF1dG9Jbml0aWFsaXplOjp2
aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RHVwbGljYXRlRnVuY3Rp
b25LZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVdpdGhPcGVyYXRv
ckFuZGVySW5kZXhlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVdpdGhPcGVy
YXRvckxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVdpdGhSZWZlcmVu
Y2VDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlQnlJbnN0YW50
aWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVja09wZXJhdG9yT3ZlcmxvYWQp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmFzc2lnblR5cGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjptYXRjaEFuZENvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25D
b25jcmV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmFzc2lnblR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmZvcndhcmRUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6Z2V0VW5uYW1lZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmFyZ3Vt
ZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2Vy
OjpmaW5pc2hWaXNpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6aXNC
b29sVHlwZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaEFuZENvbW1pdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjppbmZl
clR5cGVzRm9yVHlwZUFyZ3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aW5mZXJU
eXBlc0ZvckNhbGxJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
ZmVyVHlwZXMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNp
Y3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmFkZFZlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6YWRkTWF0cml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjphZGRUZXh0dXJlKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6UGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6UGFyc2VyOjpwYXJzZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6
cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBh
cnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpQcmVzZXJ2ZUxpZmV0aW1lczo6UHJlc2VydmVMaWZldGltZXMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlByZXNlcnZlTGlmZXRpbWVzOjptYWtlU3RydWN0VmFyaWFibGVSZWZl
cmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlByZXNlcnZlTGlmZXRpbWVzOjphc3Np
Z25WYXJpYWJsZUludG9TdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnByZXNlcnZl
VmFyaWFibGVMaWZldGltZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJvcGVydHlSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6d3JhcEFuZGVy
Q2FsbEFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjphbmRlckNhbGxBcmd1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c2V0dGVyQ2FsbCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6Z2V0dGVyQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bW9kaWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlSaWdodFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZWZ0VmFsdWVTaW1wbGlmaWVyOjpmaW5p
c2hWaXNpdGluZyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZl
T3ZlcmxvYWRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjb252ZXJzaW9uQ29z
dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmg6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UmVzb2x2aW5nVHlwZTo6UmVzb2x2aW5nVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UmVzb2x2aW5nVHlwZTo6Z2V0VW5uYW1lZFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmluZ1R5cGU6OnZpc2l0KToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpzeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
Q29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpzeW50aGVzaXplQ29u
c3RydWN0b3JzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3lu
dGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OnN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6VmlzaXRvcjo6dmlzaXQpOgorCiAyMDE5LTA3LTI1ICBUaW0gSG9ydG9uICA8dGltb3Ro
eV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFN1YnBpeGVsIGZyaW5nZXMgYXJvdW5kIFRl
eHRJbmRpY2F0b3Igc25hcHNob3RzIGF0IG5vbi1pbnRlZ3JhbCBzY2FsZSBmYWN0b3JzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXpl
VmFyaWFibGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAkocmV2aXNpb24gMjQ3ODM1
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlh
bGl6ZVZhcmlhYmxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9ICI8emVyby1pbml0PiJfczsKICNlbmRp
ZgogICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNh
bGxFeHByZXNzaW9uPih2YXJpYWJsZURlY2xhcmF0aW9uLmNvZGVMb2NhdGlvbigpLCBXVEZNb3Zl
KGZ1bmN0aW9uTmFtZSksIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4oKSk7Ci0g
ICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKHR5cGUtPmNsb25lKCkpOworICAgICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0VHlwZSgqdHlwZSk7CiAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5cGVzOwogICAgICAg
ICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKG1fY2FzdEZ1bmN0aW9u
cywgYXJndW1lbnRUeXBlcywgdHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRl
RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBoYXNoID0g
SW50SGFzaDxzaXplX3Q+OjpoYXNoKG1fZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5zaXplKCkpOwog
ICAgICAgICBoYXNoIF49IG1fZnVuY3Rpb24tPm5hbWUoKS5oYXNoKCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgaGFzaCBePSBtX2Z1bmN0aW9uLT5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS52
YWx1ZSgpLT5oYXNoKCk7CisgICAgICAgICAgICBoYXNoIF49IG1fZnVuY3Rpb24tPnBhcmFtZXRl
cnMoKVtpXS0+dHlwZSgpLT5oYXNoKCk7CiAKICAgICAgICAgaWYgKG1fZnVuY3Rpb24tPmlzQ2Fz
dCgpKQogICAgICAgICAgICAgaGFzaCBePSBtX2Z1bmN0aW9uLT50eXBlKCkuaGFzaCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrZXIuY3BwCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTAgKzEy
MSwxMCBAQCBwdWJsaWM6CiBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJl
c29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50
cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwotICAgIGF1dG8g
cmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4obG9jYXRpb24sIGZp
cnN0QXJndW1lbnQuYWRkcmVzc1NwYWNlKCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5j
bG9uZSgpKTsKKyAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlBvaW50ZXJUeXBlOjpjcmVhdGUo
bG9jYXRpb24sIGZpcnN0QXJndW1lbnQuYWRkcmVzc1NwYWNlKCksIGZpcnN0QXJndW1lbnQuZWxl
bWVudFR5cGUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwot
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwg
U3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlm
aWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKGxvY2F0aW9uLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpKSwgU3RyaW5nKCksIG51bGxwdHIs
IG51bGxwdHIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCAmZmlyc3RBcmd1
bWVudCwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6
UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGludHJpbnNp
Y3MudWludFR5cGUoKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgcmV0dXJu
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
bG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJl
dHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKIH0KIApA
QCAtMTMzLDcgKzEzMyw3IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
cmUKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0dXJuVHlw
ZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgaW50cmluc2ljcy51aW50VHlw
ZSgpKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFy
YW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxv
Y2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmco
KSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCks
ICZmaXJzdEFyZ3VtZW50LCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgIHJldHVy
biBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShy
ZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwog
fQogCkBAIC0xNDEsMTIgKzE0MSwxMiBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uIHJlCiB7CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBhdXRv
IHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGludHJpbnNp
Y3MuYm9vbFR5cGUoKSk7Ci0gICAgYXV0byBhcmd1bWVudFR5cGUgPSBmaXJzdEFyZ3VtZW50LnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5h
bWVkVHlwZSkgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKLSAgICAgICAgcmV0dXJu
IHVubmFtZWRUeXBlLT5jbG9uZSgpOwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JikgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKLSAgICAgICAgcmV0
dXJuIHNlY29uZEFyZ3VtZW50LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+IHsKLSAgICAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKLSAgICAgICAg
fSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4geworICAgIGF1dG8gYXJndW1lbnRUeXBlID0gZmlyc3RBcmd1bWVudC52
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5
cGUpIC0+IFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgIHJldHVybiB1bm5hbWVkVHlw
ZS5jb3B5UmVmKCk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
KSAtPiBSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICByZXR1cm4gc2Vjb25kQXJndW1l
bnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFt
ZWRUeXBlKSAtPiBSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0dXJuIHVu
bmFtZWRUeXBlLmNvcHlSZWYoKTsKKyAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mKSAtPiBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICAgICAgLy8g
V2UgZW5jb3VudGVyZWQgIm51bGwgPT0gbnVsbCIuCiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MiBUaGlzIGNhbiBwcm9i
YWJseSBiZSBnZW5lcmFsaXplZCwgdXNpbmcgdGhlICJwcmVmZXJyZWQgdHlwZSIgaW5mcmFzdHJ1
Y3R1cmUgdXNlZCBieSBnZW5lcmljIGxpdGVyYWxzCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE1NCw4ICsxNTQsOCBAQCBzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIHJlCiAgICAgICAgIH0pKTsKICAgICB9KSk7CiAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCks
IGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4oV1RGTW92ZShhcmd1bWVudFR5cGUpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpKTsK
KyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBhcmd1bWVudFR5cGUuY29weVJlZigp
LCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFs
aWZpZXJzKCksIFdURk1vdmUoYXJndW1lbnRUeXBlKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxw
dHIpKTsKICAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3I9PSIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09w
ZXJhdG9yKSk7CiB9CiAKQEAgLTE2OCwxNCArMTY4LDE0IEBAIGVudW0gY2xhc3MgQWNjZXB0YWJp
bGl0eSB7CiBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiBy
ZXNvbHZlQnlJbnN0YW50aWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgQ29kZUxvY2F0aW9uIGxv
Y2F0aW9uLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQogewogICAgIGlmIChuYW1l
ID09ICJvcGVyYXRvciZbXSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgYXV0byog
Zmlyc3RBcmd1bWVudEFycmF5UmVmID0gdHlwZXNbMF0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZSogeworICAgICAgICBhdXRvKiBmaXJzdEFyZ3VtZW50QXJyYXlS
ZWYgPSB0eXBlc1swXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CiAg
ICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFT
VDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiAm
ZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1l
ZFR5cGUmPih1bm5hbWVkVHlwZSkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZSogewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0p
KTsKLSAgICAgICAgYm9vbCBzZWNvbmRBcmd1bWVudElzVWludCA9IHR5cGVzWzFdLmdldCgpLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5u
YW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICBib29sIHNlY29uZEFyZ3VtZW50SXNVaW50ID0g
dHlwZXNbMV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gbWF0Y2hl
cyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKICAgICAgICAgfSwgWyZdKFJl
ZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAt
PiBib29sIHsKICAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVz
b2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKGludHJpbnNpY3MudWludFR5cGUoKSk7CkBAIC0xODMs
OSArMTgzLDkgQEAgc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQogICAg
ICAgICBpZiAoZmlyc3RBcmd1bWVudEFycmF5UmVmICYmIHNlY29uZEFyZ3VtZW50SXNVaW50KQog
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIobG9jYXRp
b24sICpmaXJzdEFyZ3VtZW50QXJyYXlSZWYsIGludHJpbnNpY3MpOwogICAgIH0gZWxzZSBpZiAo
bmFtZSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiB0eXBlcy5zaXplKCkgPT0gMSkgewotICAgICAg
ICBhdXRvKiBmaXJzdEFyZ3VtZW50UmVmZXJlbmNlID0gdHlwZXNbMF0uZ2V0KCkudmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBl
KSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRSZWZl
cmVuY2UgPSB0eXBlc1swXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKICAgICAg
ICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpV
bm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19j
YXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAmdW5uYW1lZFR5cGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLnB0
cigpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0sIFtdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhP
cGVyYXRvckxlbmd0aChsb2NhdGlvbiwgKmZpcnN0QXJndW1lbnRSZWZlcmVuY2UsIGludHJpbnNp
Y3MpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSAib3BlcmF0b3I9PSIgJiYgdHlwZXMuc2l6ZSgp
ID09IDIpIHsKICAgICAgICAgYXV0byBhY2NlcHRhYmlsaXR5ID0gW10oUmVzb2x2aW5nVHlwZSYg
cmVzb2x2aW5nVHlwZSkgLT4gQWNjZXB0YWJpbGl0eSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
b2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFjY2VwdGFiaWxpdHkgeworICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBY2NlcHRhYmlsaXR5IHsKICAgICAgICAgICAgICAg
ICBhdXRvJiB1bmlmeU5vZGUgPSB1bm5hbWVkVHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkgJiYgaXM8QVNUOjpS
ZWZlcmVuY2VUeXBlPihkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSA/IEFj
Y2VwdGFiaWxpdHk6OlllcyA6IEFjY2VwdGFiaWxpdHk6Ok5vOwogICAgICAgICAgICAgfSwgW10o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Up
IC0+IEFjY2VwdGFiaWxpdHkgewpAQCAtMzIxLDE0ICszMjEsMTQgQEAgc3RhdGljIGJvb2wgY2hl
Y2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IAogICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJh
bWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CiAgICAgICAgIGlmIChm
dW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFt
ZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8mIGZpcnN0UGFy
YW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgYXV0byYgZmlyc3RQYXJhbWV0ZXJVbmlmeU5v
ZGUgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9k
ZSgpOwogICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlm
eU5vZGUpKSB7CiAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChp
czxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2lu
ZCA9PSBDaGVja0tpbmQ6OkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0
ZXJVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUo
KSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlO
b2RlID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpLT51bmlmeU5v
ZGUoKTsKICAgICAgICAgICAgIGlmICghaXM8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRl
clVuaWZ5Tm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
YXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHNlY29uZFBhcmFtZXRl
clVuaWZ5Tm9kZSk7CkBAIC0zNDUsMTQgKzM0NSwxNCBAQCBzdGF0aWMgYm9vbCBjaGVja09wZXJh
dG9yT3ZlcmxvYWQoY29uc3QgCiAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMg
PSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAzIDogMjsKICAgICAgICAgaWYgKGZ1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVu
aWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+
dW5pZnlOb2RlKCk7CisgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSBmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAg
ICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSkpIHsK
ICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlw
ZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5h
bWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtpbmQgPT0gQ2hlY2tL
aW5kOjpJbmRleCkgewotICAgICAgICAgICAgYXV0byYgc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2Rl
ID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpLT51bmlmeU5v
ZGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHNlY29uZFBhcmFtZXRlclVuaWZ5Tm9kZSA9IGZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAg
ICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGF1dG8mIG5hbWVk
VHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUp
OwpAQCAtMzcyLDcgKzM3Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChj
b25zdCAKICAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAg
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVu
dFR5cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVj
dGVkUGFyYW1ldGVycyAtIDE7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5k
KCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKS0+Y2xvbmUoKSk7
CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgqZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVtpXS0+dHlwZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUg
OiBhcmd1bWVudFR5cGVzKQogICAgICAgICAgICAgYXJndW1lbnRUeXBlUmVmZXJlbmNlcy5hcHBl
bmQoYXJndW1lbnRUeXBlKTsKICAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMpOwpAQCAtMzk1
LDcgKzM5NSw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCAKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgewotICAgICAg
ICAgICAgYXV0byYgdW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9
IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7
CiAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUg
PSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAtNDcxLDEwICs0NzEs
MTAgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNl
QW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTGVmdFZhbHVlID0gZmFs
c2UpOwogICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYs
IGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7Ci0gICAgT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uJik7CisgICAgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHJlY3Vyc2VB
bmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKICAgICBib29s
IHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNUOjpFeHByZXNzaW9uJik7Ci0gICAgdm9pZCBh
c3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYm
LCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNz
aW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0
aW9uKTsKKyAgICB2b2lkIGFzc2lnbkNvbmNyZXRlVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWY8
QVNUOjpVbm5hbWVkVHlwZT4sIEFTVDo6VHlwZUFubm90YXRpb24pOworICAgIHZvaWQgYXNzaWdu
VHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+LCBB
U1Q6OlR5cGVBbm5vdGF0aW9uKTsKICAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lv
biYsIFJlc29sdmluZ1R5cGUmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKIAogICAgIHZvaWQgdmlz
aXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKQEAgLTU0MSwxNSArNTQxLDE1
IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKIEV4cGVjdGVkPHZvaWQs
IEVycm9yPiBDaGVja2VyOjphc3NpZ25UeXBlcygpCiB7CiAgICAgZm9yIChhdXRvJiBrZXlWYWx1
ZVBhaXIgOiBtX3R5cGVNYXApIHsKLSAgICAgICAgYXV0byBzdWNjZXNzID0ga2V5VmFsdWVQYWly
LnZhbHVlLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKLSAgICAgICAgICAgIGtleVZhbHVlUGFpci5r
ZXktPnNldFR5cGUodW5uYW1lZFR5cGUtPmNsb25lKCkpOworICAgICAgICBhdXRvIHN1Y2Nlc3Mg
PSBrZXlWYWx1ZVBhaXIudmFsdWUtPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAga2V5VmFs
dWVQYWlyLmtleS0+c2V0VHlwZSh1bm5hbWVkVHlwZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBpZiAo
IXJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLm1heWJlUmVzb2x2ZWRU
eXBlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGNvbW1pdChy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSkpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBrZXlWYWx1
ZVBhaXIua2V5LT5zZXRUeXBlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpLnJlc29sdmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAga2V5VmFsdWVQYWlyLmtl
eS0+c2V0VHlwZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNv
bHZlZFR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSkpOwogICAg
ICAgICBpZiAoIXN1Y2Nlc3MpCkBAIC01OTcsNDQgKzU5Nyw0NCBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0CiAgICAgVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZp
bml0aW9uKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5nVHlwZSYgbGVmdCwgUmVzb2x2aW5nVHlwZSYgcmln
aHQpCitzdGF0aWMgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KFJlc29s
dmluZ1R5cGUmIGxlZnQsIFJlc29sdmluZ1R5cGUmIHJpZ2h0KQogewotICAgIHJldHVybiBsZWZ0
LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
bGVmdCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7Ci0gICAgICAg
IHJldHVybiByaWdodC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4+IHsKKyAgICByZXR1cm4gbGVmdC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAg
ICAgIHJldHVybiByaWdodC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHJpZ2h0KSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICAg
ICAgaWYgKG1hdGNoZXMobGVmdCwgcmlnaHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0
LT5jbG9uZSgpOwotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgfSwg
WyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVm
dC5jb3B5UmVmKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSwgWyZd
KFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBSZWZQdHI8QVNUOjpV
bm5hbWVkVHlwZT4gewogICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KGxlZnQsIHJp
Z2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKICAgICAgICAgfSkpOwotICAgIH0sIFsmXShSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgcmV0dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gewor
ICAgICAgICByZXR1cm4gcmlnaHQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiByaWdodCkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAg
ICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChyaWdodCwgbGVmdC0+cmVzb2x2YWJsZVR5cGUo
KSk7Ci0gICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdo
dCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIH0s
IFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gUmVmUHRyPEFT
VDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChsZWZ0
LT5yZXNvbHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CiAgICAgICAgIH0p
KTsKICAgICB9KSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IG1hdGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQorc3RhdGljIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBl
PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlLCBBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc29sdmlu
Z1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgIHJl
dHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgcmVzb2x2aW5nVHlwZSkgLT4gUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsK
ICAgICAgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHJlc29sdmluZ1R5cGUpKQotICAgICAg
ICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLmNsb25lKCk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29s
dmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAg
ICAgICAgICAgcmV0dXJuICZ1bm5hbWVkVHlwZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmluZ1R5cGUp
IC0+IFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CiAgICAgICAgIHJldHVybiBtYXRjaEFuZENv
bW1pdCh1bm5hbWVkVHlwZSwgcmVzb2x2aW5nVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSk7CiAgICAg
fSkpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBj
b21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkKK3N0YXRpYyBSZWZQdHI8QVNUOjpV
bm5hbWVkVHlwZT4gY29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUpCiB7Ci0gICAg
cmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+PiB7Ci0gICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsK
LSAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewor
ICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBl
PiB7CisgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS5jb3B5UmVmKCk7CisgICAgfSwgWyZdKFJl
ZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAt
PiBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICBpZiAoIXJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLm1heWJlUmVzb2x2ZWRUeXBlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gY29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpKTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxl
VHlwZSgpLnJlc29sdmVkVHlwZSgpLmNsb25lKCk7CisgICAgICAgIHJldHVybiAmcmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCk7CiAgICAgfSkp
OwogfQogCkBAIC03NDcsMTQgKzc0NywxNCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFy
aWFibGVEZWNsYXJhCiAgICAgfQogfQogCi12b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpF
eHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5h
bWVkVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRW
YWx1ZSgpKQordm9pZCBDaGVja2VyOjphc3NpZ25Db25jcmV0ZVR5cGUoQVNUOjpFeHByZXNzaW9u
JiBleHByZXNzaW9uLCBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gdW5uYW1lZFR5cGUsIEFTVDo6VHlw
ZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlx
dWU8UmVzb2x2aW5nVHlwZT4oV1RGTW92ZSh1bm5hbWVkVHlwZSkpKTsKICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAgIGV4cHJlc3Npb24uc2V0
VHlwZUFubm90YXRpb24oV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogfQogCi12b2lkIENoZWNr
ZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UsIEFTVDo6VHlwZUFu
bm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKK3ZvaWQgQ2hlY2tl
cjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UsIEFTVDo6VHlwZUFubm90
YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8UmVz
b2x2aW5nVHlwZT4oV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpKTsKICAgICBBU1NF
UlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtNzYzLDggKzc2
Myw4IEBAIHZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24KIAogdm9pZCBD
aGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmlu
Z1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24g
PSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKLSAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7Ci0gICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtl
X3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihyZXN1bHQtPmNsb25lKCkpKTsKKyAgICByZXNvbHZpbmdU
eXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVz
dWx0KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lv
biwgc3RkOjptYWtlX3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihyZXN1bHQuY29weVJlZigpKSk7CiAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAg
ICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgewogICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFr
ZV91bmlxdWU8UmVzb2x2aW5nVHlwZT4ocmVzdWx0LmNvcHlSZWYoKSkpOwpAQCAtNzg5LDcgKzc4
OSw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmUKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGFzc2lnblR5cGUoYXNzaWdubWVudEV4cHJlc3Npb24sIFdU
Rk1vdmUoKnJlc3VsdFR5cGUpKTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUoYXNzaWdubWVudEV4
cHJlc3Npb24sICpyZXN1bHRUeXBlKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCkBAIC03
OTgsMTQgKzc5OCwxNCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRl
CiAgICAgaWYgKCFsZWZ0VmFsdWVJbmZvKQogICAgICAgICByZXR1cm47CiAKLSAgICByZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkuc2V0VHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNv
bHZpbmdUeXBlLmdldFVubmFtZWRUeXBlKCktPmNsb25lKCkpOworICAgIHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ub2xkVmFsdWUoKS5zZXRUeXBlKCpsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdU
eXBlLmdldFVubmFtZWRUeXBlKCkpOwogCiAgICAgYXV0byBuZXdWYWx1ZUluZm8gPSByZWN1cnNl
QW5kR2V0SW5mbyhyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigp
KTsKICAgICBpZiAoIW5ld1ZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE9w
dGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hlZFR5cGUgPSBtYXRjaEFu
ZENvbW1pdChsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29s
dmluZ1R5cGUpKQotICAgICAgICByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCku
c2V0VHlwZShXVEZNb3ZlKG1hdGNoZWRUeXBlLnZhbHVlKCkpKTsKKyAgICBpZiAoUmVmUHRyPEFT
VDo6VW5uYW1lZFR5cGU+IG1hdGNoZWRUeXBlID0gbWF0Y2hBbmRDb21taXQobGVmdFZhbHVlSW5m
by0+cmVzb2x2aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkKKyAgICAgICAg
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpLnNldFR5cGUoKm1hdGNoZWRUeXBl
KTsKICAgICBlbHNlIHsKICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkJhc2Ugb2YgdGhlIHJlYWQt
bW9kaWZ5LXdyaXRlIGV4cHJlc3Npb24gZG9lcyBub3QgbWF0Y2ggdGhlIHR5cGUgb2YgdGhlIG5l
dyB2YWx1ZS4iLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTgyMCw4ICs4MjAsOCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6UmVhZE1vZGlmeVdyaXRlCiAKIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVk
VHlwZShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQogewotICAgIHJldHVybiByZXNvbHZp
bmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7Ci0gICAgICAgIHJldHVybiAmdHlwZTsK
KyAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICBy
ZXR1cm4gdHlwZS5wdHIoKTsKICAgICB9LCBbXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0
aGUgdHlwZSBpc24ndCBjb21taXR0ZWQsIHNob3VsZCB3ZSBqdXN0IGNvbW1pdCgpIGl0IG5vdz8K
ICAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUo
KTsKQEAgLTg1Miw3ICs4NTIsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVu
Y2VFeHByCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKGRlcmVmZXJl
bmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmVsZW1lbnRUeXBlKCkuY2xvbmUoKSwgQVNUOjpM
ZWZ0VmFsdWUgeyBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkgfSk7CisgICAgYXNzaWduQ29u
Y3JldGVUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmVsZW1lbnRUeXBl
KCksIEFTVDo6TGVmdFZhbHVlIHsgcG9pbnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpIH0pOwogfQog
CiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9p
bnRlckV4cHJlc3Npb24pCkBAIC04NzMsNyArODczLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6Ok1ha2VQb2ludGVyRXhwcgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXNzaWdu
VHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4obWFrZVBvaW50ZXJFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAqbGVmdEFkZHJlc3NTcGFj
ZSwgbGVmdFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShtYWtl
UG9pbnRlckV4cHJlc3Npb24sIEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0ZShtYWtlUG9pbnRlckV4
cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICpsZWZ0QWRkcmVzc1NwYWNlLCAqbGVmdFZhbHVlVHlw
ZSkpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKQEAgLTg5NCw3ICs4OTQsNyBA
QCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlCiAgICAgICAgIGlmIChp
czxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHBv
aW50ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTgxNjMgU2F2ZSB0aGUgZmFjdCB0aGF0IHdlJ3JlIG5vdCB0YXJnZXR0aW5nIHRoZSBpdGVt
OyB3ZSdyZSB0YXJnZXR0aW5nIHRoZSBpdGVtJ3MgaW5uZXIgZWxlbWVudC4KLSAgICAgICAgICAg
IGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCksIHBvaW50ZXJUeXBlLmVsZW1l
bnRUeXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAgYXNzaWduQ29uY3JldGVUeXBlKG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpjcmVhdGUo
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgcG9pbnRlclR5cGUu
YWRkcmVzc1NwYWNlKCksIHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC05MDcsNyArOTA3LDcgQEAgdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZQogICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+
KHVubmFtZWRUeXBlKSkgewogICAgICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8
QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIFNhdmUgdGhlIG51bWJl
ciBvZiBlbGVtZW50cy4KLSAgICAgICAgICAgIGFzc2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4obWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2Us
IGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAgYXNzaWduQ29uY3JldGVU
eXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
OjpjcmVhdGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgKmxl
ZnRBZGRyZXNzU3BhY2UsIGFycmF5VHlwZS50eXBlKCkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KQEAgLTkxOCwyOSArOTE4LDI5IEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpNYWtlQXJyYXlSZWZlcmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFz
c2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5jb2RlTG9j
YXRpb24oKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKKyAg
ICBhc3NpZ25Db25jcmV0ZVR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgQVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU6OmNyZWF0ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNv
ZGVMb2NhdGlvbigpLCAqbGVmdEFkZHJlc3NTcGFjZSwgKmxlZnRWYWx1ZVR5cGUpKTsKIH0KIAot
c3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gYXJndW1lbnRUeXBl
Rm9yQW5kT3ZlcmxvYWQoQVNUOjpVbm5hbWVkVHlwZSYgYmFzZVR5cGUsIEFTVDo6QWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZSkKK3N0YXRpYyBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gYXJndW1l
bnRUeXBlRm9yQW5kT3ZlcmxvYWQoQVNUOjpVbm5hbWVkVHlwZSYgYmFzZVR5cGUsIEFTVDo6QWRk
cmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKIHsKICAgICBhdXRvJiB1bmlmeU5vZGUgPSBiYXNlVHlw
ZS51bmlmeU5vZGUoKTsKICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsK
ICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5
Tm9kZSk7Ci0gICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4o
bmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChuYW1lZFR5cGUuY29kZUxvY2F0aW9uKCksIG5hbWVkVHlwZSkpIH07CisgICAgICAg
IHJldHVybiB7IEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0ZShuYW1lZFR5cGUuY29kZUxvY2F0aW9u
KCksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKG5hbWVkVHlwZS5jb2Rl
TG9jYXRpb24oKSwgbmFtZWRUeXBlKSkgfTsKICAgICB9CiAKICAgICBhdXRvJiB1bm5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAKICAgICBpZiAoaXM8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgcmV0dXJuIHVu
bmFtZWRUeXBlLmNsb25lKCk7CisgICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7CiAKICAgICBp
ZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgcmV0dXJuIHsgbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUuY29kZUxvY2F0
aW9uKCksIGFkZHJlc3NTcGFjZSwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KS50eXBlKCkuY2xvbmUoKSkgfTsKKyAgICAgICAgcmV0dXJuIHsgQVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU6OmNyZWF0ZSh1bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNlLCBk
b3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKSkgfTsKIAogICAgIGlm
IChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHsgbWFrZVVu
aXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwgYWRk
cmVzc1NwYWNlLCB1bm5hbWVkVHlwZS5jbG9uZSgpKSB9OworICAgIHJldHVybiB7IEFTVDo6UG9p
bnRlclR5cGU6OmNyZWF0ZSh1bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKSwgYWRkcmVzc1NwYWNl
LCB1bm5hbWVkVHlwZSkgfTsKIH0KIAogdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6
OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBSZXNv
bHZpbmdUeXBlKiBhZGRpdGlvbmFsQXJndW1lbnRUeXBlKQpAQCAtOTU1LDcgKzk1NSw3IEBAIHZv
aWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICB9CiAKICAgICBBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdldHRlckZ1bmN0aW9uID0gbnVsbHB0cjsKLSAgICBBU1Q6
OlVubmFtZWRUeXBlKiBnZXR0ZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8QVNU
OjpVbm5hbWVkVHlwZT4gZ2V0dGVyUmV0dXJuVHlwZSA9IG51bGxwdHI7CiAgICAgewogICAgICAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gZ2V0dGVyQXJn
dW1lbnRUeXBlcyB7IGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlIH07CiAgICAgICAgIGlmIChhZGRp
dGlvbmFsQXJndW1lbnRUeXBlKQpAQCAtOTY4LDExICs5NjgsMTEgQEAgdm9pZCBDaGVja2VyOjpm
aW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcgogICAgIH0KIAogICAgIEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogYW5kZXJGdW5jdGlvbiA9IG51bGxwdHI7Ci0gICAgQVNUOjpVbm5hbWVkVHlwZSog
YW5kZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4g
YW5kZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBi
YXNlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOwogICAgIGlmIChsZWZ0
QWRkcmVzc1NwYWNlKSB7CiAgICAgICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkID0gV0hMU0w6OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpiYXNlVW5uYW1lZFR5cGUs
ICpsZWZ0QWRkcmVzc1NwYWNlKSkgewotICAgICAgICAgICAgUmVzb2x2aW5nVHlwZSBhcmd1bWVu
dFR5cGUgPSB7IFdURk1vdmUoKmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKSB9OworICAgICAg
ICAgICAgUmVzb2x2aW5nVHlwZSBhcmd1bWVudFR5cGUgPSB7IFJlZjxBU1Q6OlVubmFtZWRUeXBl
PigqYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQpIH07CiAgICAgICAgICAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYW5kZXJBcmd1bWVudFR5cGVzIHsg
YXJndW1lbnRUeXBlIH07CiAgICAgICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3VtZW50VHlwZSkK
ICAgICAgICAgICAgICAgICBhbmRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJn
dW1lbnRUeXBlKTsKQEAgLTk4NSw5ICs5ODUsOSBAQCB2b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0
aW5nKEFTVDo6UHJvcGVyCiAgICAgfQogCiAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiB0
aHJlYWRBbmRlckZ1bmN0aW9uID0gbnVsbHB0cjsKLSAgICBBU1Q6OlVubmFtZWRUeXBlKiB0aHJl
YWRBbmRlclJldHVyblR5cGUgPSBudWxscHRyOworICAgIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBl
PiB0aHJlYWRBbmRlclJldHVyblR5cGUgPSBudWxscHRyOwogICAgIGlmIChhdXRvIGFyZ3VtZW50
VHlwZUZvckFuZE92ZXJsb2FkID0gV0hMU0w6OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpi
YXNlVW5uYW1lZFR5cGUsIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQpKSB7Ci0gICAgICAgIFJl
c29sdmluZ1R5cGUgYXJndW1lbnRUeXBlID0geyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5
cGU+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCwgYmFzZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKSB9OworICAgICAg
ICBSZXNvbHZpbmdUeXBlIGFyZ3VtZW50VHlwZSA9IHsgUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFT
VDo6UG9pbnRlclR5cGU6OmNyZWF0ZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0
aW9uKCksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsICpiYXNlVW5uYW1lZFR5cGUpKSB9Owog
ICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gdGhy
ZWFkQW5kZXJBcmd1bWVudFR5cGVzIHsgYXJndW1lbnRUeXBlIH07CiAgICAgICAgIGlmIChhZGRp
dGlvbmFsQXJndW1lbnRUeXBlKQogICAgICAgICAgICAgdGhyZWFkQW5kZXJBcmd1bWVudFR5cGVz
LmFwcGVuZCgqYWRkaXRpb25hbEFyZ3VtZW50VHlwZSk7CkBAIC0xMDI4LDEyICsxMDI4LDEyIEBA
IHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldHRlclJldHVy
blR5cGUgPyBnZXR0ZXJSZXR1cm5UeXBlIDogYW5kZXJSZXR1cm5UeXBlID8gYW5kZXJSZXR1cm5U
eXBlIDogdGhyZWFkQW5kZXJSZXR1cm5UeXBlOworICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiBm
aWVsZFR5cGUgPSBnZXR0ZXJSZXR1cm5UeXBlID8gKmdldHRlclJldHVyblR5cGUgOiBhbmRlclJl
dHVyblR5cGUgPyAqYW5kZXJSZXR1cm5UeXBlIDogKnRocmVhZEFuZGVyUmV0dXJuVHlwZTsKIAog
ICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0dGVyRnVuY3Rpb24gPSBudWxscHRyOwog
ICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldHRlclJldHVyblR5cGUgPSBudWxscHRyOwogICAgIHsK
LSAgICAgICAgUmVzb2x2aW5nVHlwZSBmaWVsZFJlc29sdmluZ1R5cGUoZmllbGRUeXBlLT5jbG9u
ZSgpKTsKKyAgICAgICAgUmVzb2x2aW5nVHlwZSBmaWVsZFJlc29sdmluZ1R5cGUoZmllbGRUeXBl
LmNvcHlSZWYoKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29s
dmluZ1R5cGU+PiBzZXR0ZXJBcmd1bWVudFR5cGVzIHsgYmFzZUluZm8tPnJlc29sdmluZ1R5cGUg
fTsKICAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCiAgICAgICAgICAgICBzZXR0
ZXJBcmd1bWVudFR5cGVzLmFwcGVuZCgqYWRkaXRpb25hbEFyZ3VtZW50VHlwZSk7CkBAIC0xMDYz
LDcgKzEwNjMsNyBAQCB2b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0aW5nKEFTVDo6UHJvcGVyCiAg
ICAgICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUoKTsKICAg
ICB9IGVsc2UgaWYgKCFiYXNlSW5mby0+dHlwZUFubm90YXRpb24uaXNSaWdodFZhbHVlKCkgJiYg
KHNldHRlckZ1bmN0aW9uIHx8IHRocmVhZEFuZGVyRnVuY3Rpb24pKQogICAgICAgICB0eXBlQW5u
b3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUoKTsKLSAgICBhc3NpZ25UeXBlKHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiwgZmllbGRUeXBlLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5v
dGF0aW9uKSk7CisgICAgYXNzaWduQ29uY3JldGVUeXBlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biwgV1RGTW92ZShmaWVsZFR5cGUpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQpAQCAt
MTA4NCw3ICsxMDg0LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJl
bgogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKICAgICBBU1NFUlQo
dmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpKTsKICAgICAKLSAgICBhc3NpZ25U
eXBlKHZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBl
KCktPmNsb25lKCksIEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9
KTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUodmFyaWFibGVSZWZlcmVuY2UsICp2YXJpYWJsZVJl
ZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCksIEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJldHVybiYg
cmV0dXJuU3RhdGVtZW50KQpAQCAtMTEzOCwxOSArMTEzOCwxOSBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6TnVsbExpdGVyYWwmIG51CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpCb29s
ZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpCiB7Ci0gICAgYXNzaWduVHlwZShib29sZWFuTGl0
ZXJhbCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGJvb2xlYW5MaXRlcmFsLmNvZGVMb2NhdGlv
bigpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOworICAgIGFzc2lnbkNvbmNyZXRlVHlwZShi
b29sZWFuTGl0ZXJhbCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGJvb2xlYW5MaXRlcmFsLmNv
ZGVMb2NhdGlvbigpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOwogfQogCiB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwpCiB7CiAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJh
dGlvbkRlZmluaXRpb24oKSk7CiAgICAgYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gKmVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKLSAgICBhc3Np
Z25UeXBlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5jb2RlTG9jYXRpb24oKSwgZW51bWVyYXRpb25EZWZp
bml0aW9uKSk7CisgICAgYXNzaWduQ29uY3JldGVUeXBlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5jb2Rl
TG9jYXRpb24oKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CiB9CiAKIGJvb2wgQ2hlY2tlcjo6
aXNCb29sVHlwZShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQogewotICAgIHJldHVybiBy
ZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBi
b29sIHsKICAgICAgICAgcmV0dXJuIG1hdGNoZXMobGVmdCwgbV9pbnRyaW5zaWNzLmJvb2xUeXBl
KCkpOwogICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAt
PiBib29sIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0
KG1faW50cmluc2ljcy5ib29sVHlwZSgpLCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKSk7CkBAIC0x
MTczLDcgKzExNzMsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJl
CiB7CiAgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKGxvZ2ljYWxOb3RFeHByZXNz
aW9uLm9wZXJhbmQoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBhc3NpZ25UeXBlKGxvZ2ljYWxO
b3RFeHByZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9naWNhbE5vdEV4cHJlc3Np
b24uY29kZUxvY2F0aW9uKCksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7CisgICAgYXNzaWdu
Q29uY3JldGVUeXBlKGxvZ2ljYWxOb3RFeHByZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAobG9naWNhbE5vdEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIG1faW50cmluc2ljcy5ib29s
VHlwZSgpKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lv
biYgbG9naWNhbEV4cHJlc3Npb24pCkBAIC0xMTgyLDcgKzExODIsNyBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3NpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXJl
Y3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBhc3NpZ25UeXBlKGxvZ2ljYWxFeHByZXNzaW9uLCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAobG9naWNhbEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIG1faW50cmlu
c2ljcy5ib29sVHlwZSgpKSk7CisgICAgYXNzaWduQ29uY3JldGVUeXBlKGxvZ2ljYWxFeHByZXNz
aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9naWNhbEV4cHJlc3Npb24uY29kZUxvY2F0
aW9uKCksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCkBAIC0xNDA0LDcgKzE0MDQsNyBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3NpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhc3NpZ25UeXBlKHRlcm5hcnlFeHByZXNzaW9uLCBXVEZNb3ZlKCpyZXN1
bHRUeXBlKSk7CisgICAgYXNzaWduQ29uY3JldGVUeXBlKHRlcm5hcnlFeHByZXNzaW9uLCAqcmVz
dWx0VHlwZSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYg
Y2FsbEV4cHJlc3Npb24pCkBAIC0xNDUyLDcgKzE0NTIsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6Q2FsbEV4cHJlc3Npb24mCiAKICAgICBjYWxsRXhwcmVzc2lvbi5zZXRGdW5jdGlvbigq
ZnVuY3Rpb24pOwogCi0gICAgYXNzaWduVHlwZShjYWxsRXhwcmVzc2lvbiwgZnVuY3Rpb24tPnR5
cGUoKS5jbG9uZSgpKTsKKyAgICBhc3NpZ25Db25jcmV0ZVR5cGUoY2FsbEV4cHJlc3Npb24sIGZ1
bmN0aW9uLT50eXBlKCkpOwogfQogCiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2soUHJvZ3Jh
bSYgcHJvZ3JhbSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW5mZXJUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsODIgKzgxLDgyIEBAIGJvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVu
bmFtZWRUeXBlJiB1bm4KICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZS51bmlmeU5vZGUo
KSwgb3RoZXIudW5pZnlOb2RlKCkpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlR5cGUmIHVuaWZ5Tm9kZSwgQVNU
OjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCitzdGF0aWMgUmVmUHRyPEFTVDo6VW5u
YW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VHlwZSYgdW5pZnlOb2RlLCBBU1Q6OlJlc29s
dmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKIHsKICAgICBBU1NFUlQoIXJlc29sdmFibGVUeXBl
Lm1heWJlUmVzb2x2ZWRUeXBlKCkpOwogICAgIGlmICghcmVzb2x2YWJsZVR5cGUuY2FuUmVzb2x2
ZSh1bmlmeU5vZGUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKICAg
ICAgICAgYXV0byYgbmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
bmFtZWRVbmlmeU5vZGUuY29kZUxvY2F0aW9uKCksIG5hbWVkVW5pZnlOb2RlKTsKLSAgICAgICAg
cmVzb2x2YWJsZVR5cGUucmVzb2x2ZShyZXN1bHQtPmNsb25lKCkpOworICAgICAgICByZXNvbHZh
YmxlVHlwZS5yZXNvbHZlKHJlc3VsdC5jb3B5UmVmKCkpOwogICAgICAgICByZXR1cm4geyBXVEZN
b3ZlKHJlc3VsdCkgfTsKICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdCA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkuY2xvbmUoKTsKLSAgICByZXNvbHZhYmxlVHlwZS5yZXNv
bHZlKHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9
IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgcmVzb2x2YWJsZVR5
cGUucmVzb2x2ZShyZXN1bHQuY29weVJlZigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1P
cHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxl
VHlwZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUp
CiB7CiAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCBy
ZXNvbHZhYmxlVHlwZSk7CiB9CiAKLU9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgQVNUOjpSZXNvbHZh
YmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCitSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hB
bmRDb21taXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYg
cmVzb2x2YWJsZVR5cGUpCiB7CiAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KG5hbWVkVHlwZS51
bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOwogfQogCi1PcHRpb25hbDxVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29s
dmFibGVUeXBlMSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUyKQorUmVmUHRy
PEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJl
c29sdmFibGVUeXBlMSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUyKQogewog
ICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUxLm1heWJlUmVzb2x2ZWRUeXBlKCkpOwogICAgIEFT
U0VSVCghcmVzb2x2YWJsZVR5cGUyLm1heWJlUmVzb2x2ZWRUeXBlKCkpOwogICAgIGlmIChpczxB
U1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpGbG9hdExp
dGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7Ci0gICAgICAgIHJlc29sdmFibGVUeXBlMS5y
ZXNvbHZlKGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5w
cmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHJlc29sdmFibGVUeXBlMi5yZXNvbHZl
KGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJy
ZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkZsb2F0TGl0
ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAg
ICAgIHJlc29sdmFibGVUeXBlMS5yZXNvbHZlKGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkpOworICAgICAgICByZXNvbHZhYmxl
VHlwZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVU
eXBlMikucHJlZmVycmVkVHlwZSgpKTsKKyAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OkZs
b2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpOwogICAgIH0K
ICAgICBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYg
aXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKLSAgICAgICAg
cmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+
KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOwotICAgICAgICByZXNv
bHZhYmxlVHlwZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVz
b2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHJldHVybiBk
b3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJy
ZWRUeXBlKCkuY2xvbmUoKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNh
c3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlw
ZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpJbnRl
Z2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVkVHlwZSgpKTsKKyAgICAg
ICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5
cGUxKS5wcmVmZXJyZWRUeXBlKCk7CiAgICAgfQogICAgIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKLSAgICAgICAgcmVzb2x2YWJsZVR5
cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVz
b2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHJlc29sdmFi
bGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+
KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOwotICAgICAgICByZXR1
cm4gZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5
cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJl
c29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJs
ZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIucmVzb2x2
ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlw
ZTIpLnByZWZlcnJlZFR5cGUoKSk7CisgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCk7
CiAgICAgfQogICAgIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUx
KSAmJiBpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgewogICAgICAg
ICAvLyBGSVhNRTogVHJ5aW5nIHRvIG1hdGNoIG51bGxwdHIgYW5kIG51bGxwdHIgZmFpbHMuCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBudWxscHRyOwogfQogCi1P
cHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFi
bGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK1JlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBjb21taXQo
QVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCiB7CiAgICAgQVNTRVJUKCFyZXNv
bHZhYmxlVHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKTsKICAgICBpZiAoaXM8QVNUOjpGbG9hdExp
dGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKICAgICAgICAgYXV0byYgZmxvYXRMaXRlcmFs
VHlwZSA9IGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpOwot
ICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGZsb2F0TGl0ZXJhbFR5cGUucHJlZmVycmVk
VHlwZSgpLmNsb25lKCkpOwotICAgICAgICByZXR1cm4gZmxvYXRMaXRlcmFsVHlwZS5wcmVmZXJy
ZWRUeXBlKCkuY2xvbmUoKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShmbG9hdExp
dGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7CisgICAgICAgIHJldHVybiAmZmxvYXRMaXRlcmFs
VHlwZS5wcmVmZXJyZWRUeXBlKCk7CiAgICAgfQogICAgIGlmIChpczxBU1Q6OkludGVnZXJMaXRl
cmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CiAgICAgICAgIGF1dG8mIGludGVnZXJMaXRlcmFs
VHlwZSA9IGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSk7
Ci0gICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoaW50ZWdlckxpdGVyYWxUeXBlLnByZWZl
cnJlZFR5cGUoKS5jbG9uZSgpKTsKLSAgICAgICAgcmV0dXJuIGludGVnZXJMaXRlcmFsVHlwZS5w
cmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShp
bnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKKyAgICAgICAgcmV0dXJuICZpbnRl
Z2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpOwogICAgIH0KICAgICBpZiAoaXM8QVNUOjpV
bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CiAgICAgICAgIGF1
dG8mIHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlID0gZG93bmNhc3Q8QVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpOwotICAgICAgICByZXNvbHZhYmxlVHlw
ZS5yZXNvbHZlKHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKS5jbG9u
ZSgpKTsKLSAgICAgICAgcmV0dXJuIHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJl
ZFR5cGUoKS5jbG9uZSgpOworICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKHVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7CisgICAgICAgIHJldHVybiAmdW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpOwogICAgIH0KICAgICBpZiAo
aXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKSkgewogICAgICAgICAvLyBG
SVhNRTogVHJ5aW5nIHRvIG1hdGNoIG51bGxwdHIgYW5kIG51bGxwdHIgZmFpbHMuCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBib29sIGlu
ZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFT
VDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKQEAgLTE3OSw4ICsxNzksOCBAQCBib29s
IGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtCiAgICAgICAgIGF1dG8gYXNzaWdu
ID0gWyZdKEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQsIEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uKiYgZXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlKiYgdHlwZVJlZmVyZW5jZSkg
ewogICAgICAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICAgICAgICAgICAgICAgZXhw
cmVzc2lvbiA9ICZjb25zdGFudEV4cHJlc3Npb247Ci0gICAgICAgICAgICB9LCBbJl0oVW5pcXVl
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHRoZVR5cGVSZWZlcmVuY2UpIHsKLSAgICAgICAgICAg
ICAgICB0eXBlUmVmZXJlbmNlID0gJnRoZVR5cGVSZWZlcmVuY2U7CisgICAgICAgICAgICB9LCBb
Jl0oUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHRoZVR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAg
ICAgICAgICB0eXBlUmVmZXJlbmNlID0gdGhlVHlwZVJlZmVyZW5jZS5wdHIoKTsKICAgICAgICAg
ICAgIH0pLCB0eXBlQXJndW1lbnQpOwogICAgICAgICB9OwogCkBAIC0yMDUsNyArMjA1LDcgQEAg
QUxXQVlTX0lOTElORSBib29sIGluZmVyVHlwZXNGb3JDYWxsSW1wbAogICAgIGlmIChwb3NzaWJs
ZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gYXJndW1lbnRUeXBlcy5zaXplKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc3NpYmxl
RnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8gc3VjY2Vz
cyA9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAg
IGF1dG8gc3VjY2VzcyA9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CiAg
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClb
aV0tPnR5cGUoKSwgdW5uYW1lZFR5cGUpOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgewogICAg
ICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgp
LmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS0+dW5p
ZnlOb2RlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbmZlclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NywxMCArNDcsMTAgQEAgY2xhc3MgVW5uYW1lZFR5cGU7CiBib29sIG1hdGNoZXMo
Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmKTsKIGJvb2wg
bWF0Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6TmFtZWRUeXBlJik7CiBi
b29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6TmFtZWRUeXBl
Jik7Ci1PcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0
KEFTVDo6VW5uYW1lZFR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7Ci1PcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6TmFtZWRUeXBlJiwg
QVNUOjpSZXNvbHZhYmxlVHlwZSYpOwotT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiwgQVNUOjpSZXNvbHZhYmxl
VHlwZSYpOwotT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXQoQVNU
OjpSZXNvbHZhYmxlVHlwZSYpOworUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29t
bWl0KEFTVDo6VW5uYW1lZFR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7CitSZWZQdHI8QVNU
OjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmLCBBU1Q6OlJlc29s
dmFibGVUeXBlJik7CitSZWZQdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNU
OjpSZXNvbHZhYmxlVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK1JlZlB0cjxBU1Q6OlVu
bmFtZWRUeXBlPiBjb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYpOwogYm9vbCBpbmZlclR5cGVz
Rm9yVHlwZUFyZ3VtZW50cyhBU1Q6Ok5hbWVkVHlwZSYgcG9zc2libGVUeXBlLCBBU1Q6OlR5cGVB
cmd1bWVudHMmKTsKIGJvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNv
bHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIGNvbnN0IEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0
dXJuVHlwZSk7CiBib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlKiBjYXN0UmV0
dXJuVHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEludHJpbnNpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4Nyw5ICsyODcsOSBAQCBib29sIEludHJpbnNpY3M6OmFkZFZlY3RvcihB
U1Q6Ok5hdGl2ZVR5CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKLSAgICBBU1NFUlQo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CiAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50
eXBlQXJndW1lbnRzKClbMV0pKTsKLSAgICBhdXRvJiBpbm5lclR5cGUgPSBzdGF0aWNfY2FzdDxB
U1Q6OlR5cGVSZWZlcmVuY2UmPihXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNl
Pj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8m
IGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFJl
ZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpWzBdKSk7CiAgICAgYXV0byYgbGVuZ3RoRXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFd
KTsKICAgICBBU1NFUlQoIWlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpKTsKICAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbioqIGFycmF5OwpAQCAtMzI2LDEwICszMjYsMTAgQEAg
Ym9vbCBJbnRyaW5zaWNzOjphZGRNYXRyaXgoQVNUOjpOYXRpdmVUeQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KS5zaXplKCkgPT0gMyk7Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVl
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8QVNUOjpU
eXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkp
OwogICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNz
aW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CiAgICAgQVNT
RVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0pKTsKLSAgICBhdXRvJiBpbm5lclR5
cGUgPSBzdGF0aWNfY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2UmPihXVEY6OmdldDxVbmlxdWVSZWY8
QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KVswXSkpOworICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVy
ZW5jZSY+KFdURjo6Z2V0PFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CiAgICAgYXV0byYgcm93RXhwcmVzc2lvbiA9IFdU
Rjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpWzFdKTsKICAgICBhdXRvJiBjb2x1bW5FeHByZXNzaW9uID0gV1RGOjpnZXQ8
QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMl0pOwogICAgIEFTU0VSVCghaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkp
OwpAQCAtNDExLDggKzQxMSw4IEBAIHZvaWQgSW50cmluc2ljczo6YWRkRGVwdGhUZXh0dXJlKEFT
VDo6TmEKIHZvaWQgSW50cmluc2ljczo6YWRkVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQogewogICAgIEFTU0VSVChuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAxKTsKLSAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwotICAgIGF1dG8mIGlubmVyVHlwZSA9
IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6
OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBd
KSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEFTVDo6VHlwZVJlZmVy
ZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBh
dXRvJiBpbm5lclR5cGUgPSBzdGF0aWNfY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2UmPihXVEY6Omdl
dDxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1
bWVudHMoKVswXSkpOwogICAgIEFTU0VSVCghaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXpl
KCkpOwogICAgIGlmIChhZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVy
VHlwZSkpIHsKICAgICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xhcmF0aW9u
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFBhcnNlci5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE2LDcg
KzQxNiw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudCgpIC0+IEV4cGUKICAgICB9
CiAgICAgQ09OU1VNRV9UWVBFKHJlc3VsdCwgSWRlbnRpZmllcik7CiAgICAgQ29kZUxvY2F0aW9u
IGxvY2F0aW9uKCpyZXN1bHQpOwotICAgIHJldHVybiBBU1Q6OlR5cGVBcmd1bWVudChtYWtlVW5p
cXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4obG9jYXRpb24sIHJlc3VsdC0+c3RyaW5nVmlldyht
X2xleGVyKS50b1N0cmluZygpLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkpOworICAgIHJldHVybiBB
U1Q6OlR5cGVBcmd1bWVudChBU1Q6OlR5cGVSZWZlcmVuY2U6OmNyZWF0ZShsb2NhdGlvbiwgcmVz
dWx0LT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIEFTVDo6VHlwZUFyZ3VtZW50cygp
KSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudHMoKSAtPiBFeHBlY3RlZDxB
U1Q6OlR5cGVBcmd1bWVudHMsIEVycm9yPgpAQCAtNTA1LDcgKzUwNSw3IEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXQKICAgICByZXR1cm4ge3sgeyAqdG9rZW4gfSwg
KnRva2VuLCB7IGFkZHJlc3NTcGFjZSB9LCBXVEY6Om51bGxvcHQgfX07CiB9CiAKLWF1dG8gUGFy
c2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4s
IEVycm9yPgorYXV0byBQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPFJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiwgRXJyb3I+CiB7CiAgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IHRyeVR5
cGVzPAogICAgICAgICBUb2tlbjo6VHlwZTo6Q29uc3RhbnQsCkBAIC01MzMsMjAgKzUzMywyMCBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0ZWQ8VW5pCiAgICAgICAgICAgICBh
ZGRyZXNzU3BhY2UgPSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJl
dmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJl
dmlhdGVkLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1
ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1
ZmZpeEFiYnJldmlhdGVkLCBSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gUmVm
PEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbigq
YWRkcmVzc1NwYWNlVG9rZW4sIHR5cGVTdWZmaXhBYmJyZXZpYXRlZC5sb2NhdGlvbik7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAg
ICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgICAgIHJldHVybiB7
IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4obG9jYXRpb24sIGFkZHJlc3NTcGFjZSwg
V1RGTW92ZShwcmV2aW91cykpIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpQb2lu
dGVyVHlwZTo6Y3JlYXRlKGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMp
KSB9OwogICAgICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4obG9jYXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGU6OmNyZWF0ZShsb2Nh
dGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tl
bi50eXBlID09IFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5VHlwZT4obG9jYXRpb24sIFdURk1v
dmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9OworICAg
ICAgICAgICAgICAgIHJldHVybiB7IEFTVDo6QXJyYXlUeXBlOjpjcmVhdGUobG9jYXRpb24sIFdU
Rk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9Owog
ICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICBQQVJTRShmaXJzdFR5cGVTdWZmaXhB
YmJyZXZpYXRlZCwgVHlwZVN1ZmZpeEFiYnJldmlhdGVkKTsKLSAgICAgICAgVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNl
PihXVEZNb3ZlKCphZGRyZXNzU3BhY2VUb2tlbiksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlciku
dG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgICAgICBSZWY8QVNUOjpV
bm5hbWVkVHlwZT4gcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUoV1RGTW92ZSgq
YWRkcmVzc1NwYWNlVG9rZW4pLCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCks
IFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKICAgICAgICAgYXV0byBuZXh0ID0gY29uc3RydWN0
VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQsIFdU
Rk1vdmUocmVzdWx0KSk7CiAgICAgICAgIHJlc3VsdCA9IFdURk1vdmUobmV4dCk7CiAgICAgICAg
IHdoaWxlICh0cnVlKSB7CkBAIC01NjQsMTkgKzU2NCwxOSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VU
eXBlKCkgLT4gRXhwZWN0ZWQ8VW5pCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiAg
ICAgfQogCi0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0g
WyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9u
QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3Vm
Zml4Tm9uQWJicmV2aWF0ZWQsIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24oKm5h
bWUsIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5sb2NhdGlvbik7CiAgICAgICAgIHN3aXRjaCAo
dHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLnRva2VuLnR5cGUpIHsKICAgICAgICAgY2FzZSBUb2tl
bjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQ
b2ludGVyVHlwZT4obG9jYXRpb24sICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1Nw
YWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEFTVDo6UG9p
bnRlclR5cGU6OmNyZWF0ZShsb2NhdGlvbiwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRy
ZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMpKSB9OwogICAgICAgICBjYXNlIFRva2VuOjpUeXBl
OjpTcXVhcmVCcmFja2V0UGFpcjoKLSAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGxvY2F0aW9uLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CisgICAgICAgICAgICByZXR1
cm4geyBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZTo6Y3JlYXRlKGxvY2F0aW9uLCAqdHlwZVN1ZmZp
eE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlQodHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
LnRva2VuLnR5cGUgPT0gVG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0KTsKLSAgICAgICAg
ICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVR5cGU+KGxvY2F0aW9uLCBXVEZN
b3ZlKHByZXZpb3VzKSwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5udW1FbGVtZW50cykgfTsK
KyAgICAgICAgICAgIHJldHVybiB7IEFTVDo6QXJyYXlUeXBlOjpjcmVhdGUobG9jYXRpb24sIFdU
Rk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLm51bUVsZW1lbnRzKSB9
OwogICAgICAgICB9CiAgICAgfTsKLSAgICBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVz
dWx0ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KCpuYW1lLCBuYW1lLT5zdHJp
bmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAg
ICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVh
dGUoKm5hbWUsIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgq
dHlwZUFyZ3VtZW50cykpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIFBFRUsobmV4dFRv
a2VuKTsKICAgICAgICAgaWYgKG5leHRUb2tlbi0+dHlwZSAhPSBUb2tlbjo6VHlwZTo6U3RhcgpA
QCAtODE0LDEyICs4MTQsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25EZWZpbml0
aW9uKAogICAgIENPTlNVTUVfVFlQRShvcmlnaW4sIEVudW0pOwogICAgIENPTlNVTUVfVFlQRShu
YW1lLCBJZGVudGlmaWVyKTsKIAotICAgIGF1dG8gdHlwZSA9IChbJl0oKSAtPiBFeHBlY3RlZDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byB0eXBlID0gKFsm
XSgpIC0+IEV4cGVjdGVkPFJlZjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKICAgICAgICAg
aWYgKHRyeVR5cGUoVG9rZW46OlR5cGU6OkNvbG9uKSkgewogICAgICAgICAgICAgUEFSU0UocGFy
c2VkVHlwZSwgVHlwZSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcGFyc2VkVHlwZSk7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZl
cmVuY2U+KCpvcmlnaW4sICJpbnQiX3N0ciwgQVNUOjpUeXBlQXJndW1lbnRzKCkpIH07CisgICAg
ICAgIHJldHVybiB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6Y3JlYXRlKCpvcmlnaW4sICJpbnQiX3N0
ciwgQVNUOjpUeXBlQXJndW1lbnRzKCkpIH07CiAgICAgfSkoKTsKICAgICBpZiAoIXR5cGUpCiAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwpAQCAtMTIyOCw3
ICsxMjI4LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRG9XaGlsZUxvb3AoKSAtPiBFeHBlYwogICAg
IHJldHVybiBBU1Q6OkRvV2hpbGVMb29wKHsgKm9yaWdpbiwgKnNlbWljb2xvbn0sIFdURk1vdmUo
KmJvZHkpLCBXVEZNb3ZlKCpjb25kaXRpb25hbCkpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+CithdXRvIFBhcnNlcjo6
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+CiB7CiAgICAgUEVFSyhv
cmlnaW4pOwogCkBAIC0xMjUzLDcgKzEyNTMsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9ucygpCiAKICAgICBQQVJTRSh0eXBlLCBUeXBlKTsKIAotICAgIGF1dG8gZmly
c3RWYXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCgqdHlwZSkt
PmNsb25lKCkpOworICAgIGF1dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uKHR5cGUtPmNvcHlSZWYoKSk7CiAgICAgaWYgKCFmaXJzdFZhcmlhYmxl
RGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFZhcmlh
YmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKQEAgLTEyNjEsNyArMTI2MSw3IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkKICAgICByZXN1bHQuYXBwZW5kKG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCpmaXJzdFZhcmlhYmxl
RGVjbGFyYXRpb24pKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShUb2tlbjo6VHlwZTo6Q29tbWEp
KSB7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNs
YXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0
aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHR5cGUtPmNvcHlSZWYoKSk7CiAgICAgICAg
IGlmICghdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPih2YXJpYWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOwogICAgICAgICByZXN1bHQuYXBw
ZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCp2YXJp
YWJsZURlY2xhcmF0aW9uKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTcsOSArMTU3LDkgQEAgcHJpdmF0ZToKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+
IG51bUVsZW1lbnRzOwogICAgIH07CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKTsKLSAgICBFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZUFkZHJlc3NTcGFjZVR5
cGUoKTsKLSAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBw
YXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKLSAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxSZWY8QVNUOjpV
bm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3Rl
ZDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUo
KTsKKyAgICBFeHBlY3RlZDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZVR5cGUo
KTsKICAgICBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJvcj4gcGFyc2VUeXBlRGVm
aW5pdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGljLCBFcnJvcj4gcGFy
c2VCdWlsdEluU2VtYW50aWMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMs
IEVycm9yPiBwYXJzZVJlc291cmNlU2VtYW50aWMoKTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBwcml2
YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6Rm9yTG9vcCwgRXJyb3I+IHBhcnNlRm9yTG9vcCgpOwog
ICAgIEV4cGVjdGVkPEFTVDo6V2hpbGVMb29wLCBFcnJvcj4gcGFyc2VXaGlsZUxvb3AoKTsKICAg
ICBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJvcj4gcGFyc2VEb1doaWxlTG9vcCgpOwot
ICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlVmFyaWFi
bGVEZWNsYXJhdGlvbihVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJik7CisgICAgRXhwZWN0
ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9uKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmKTsKICAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50LCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygp
OwogICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiBwYXJzZVN0
YXRlbWVudCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1l
cy5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCwxNiArMTAwLDE2IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFRva2VuIGFub255bW91
c1Rva2UKIGNsYXNzIFByZXNlcnZlTGlmZXRpbWVzIDogcHVibGljIFZpc2l0b3IgewogICAgIHVz
aW5nIEJhc2UgPSBWaXNpdG9yOwogcHVibGljOgotICAgIFByZXNlcnZlTGlmZXRpbWVzKFVuaXF1
ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiBzdHJ1Y3RUeXBlLCBjb25zdCBIYXNoTWFwPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiosIEFTVDo6U3RydWN0dXJlRWxlbWVudCo+JiB2YXJpYWJsZU1h
cHBpbmcpCi0gICAgICAgIDogbV9zdHJ1Y3RUeXBlKHN0cnVjdFR5cGUpCi0gICAgICAgICwgbV9w
b2ludGVyVG9TdHJ1Y3RUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oYW5vbnlt
b3VzVG9rZW4oVG9rZW46OlR5cGU6OklkZW50aWZpZXIpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkLCBtX3N0cnVjdFR5cGUtPmNsb25lKCkpKQorICAgIFByZXNlcnZlTGlmZXRpbWVzKFJlZjxB
U1Q6OlR5cGVSZWZlcmVuY2U+IHN0cnVjdFR5cGUsIGNvbnN0IEhhc2hNYXA8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uKiwgQVNUOjpTdHJ1Y3R1cmVFbGVtZW50Kj4mIHZhcmlhYmxlTWFwcGluZykK
KyAgICAgICAgOiBtX3N0cnVjdFR5cGUoV1RGTW92ZShzdHJ1Y3RUeXBlKSkKKyAgICAgICAgLCBt
X3BvaW50ZXJUb1N0cnVjdFR5cGUoQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKGFub255bW91c1Rv
a2VuKFRva2VuOjpUeXBlOjpJZGVudGlmaWVyKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwg
bV9zdHJ1Y3RUeXBlLmNvcHlSZWYoKSkpCiAgICAgICAgICwgbV92YXJpYWJsZU1hcHBpbmcodmFy
aWFibGVNYXBwaW5nKQogICAgIHsgfQogCiAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U+IG1ha2VTdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZSgpCiAgICAgewogICAgICAgICBhdXRv
IHN0cnVjdFZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKCptX3N0cnVjdFZhcmlhYmxlKSk7
Ci0gICAgICAgIHN0cnVjdFZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKG1fc3RydWN0VmFyaWFi
bGUtPnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHN0cnVjdFZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlKCptX3N0cnVjdFZhcmlhYmxlLT50eXBlKCkpOwogICAgICAgICBzdHJ1Y3RWYXJpYWJs
ZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJl
c3NTcGFjZTo6VGhyZWFkIH0pOwogICAgICAgICByZXR1cm4gc3RydWN0VmFyaWFibGVSZWZlcmVu
Y2U7CiAgICAgfQpAQCAtMTE3LDE1ICsxMTcsMTUgQEAgcHVibGljOgogICAgIFVuaXF1ZVJlZjxB
U1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPiBhc3NpZ25WYXJpYWJsZUludG9TdHJ1Y3QoQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZSwgQVNUOjpTdHJ1Y3R1cmVFbGVtZW50KiBlbGVt
ZW50KQogICAgIHsKICAgICAgICAgYXV0byBsaHMgPSBtYWtlVW5pcXVlUmVmPEFTVDo6R2xvYmFs
VmFyaWFibGVSZWZlcmVuY2U+KHZhcmlhYmxlLmNvZGVMb2NhdGlvbigpLCBtYWtlU3RydWN0VmFy
aWFibGVSZWZlcmVuY2UoKSwgZWxlbWVudCk7Ci0gICAgICAgIGxocy0+c2V0VHlwZSh2YXJpYWJs
ZS50eXBlKCktPmNsb25lKCkpOworICAgICAgICBsaHMtPnNldFR5cGUoKnZhcmlhYmxlLnR5cGUo
KSk7CiAgICAgICAgIGxocy0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogCiAgICAgICAgIGF1dG8gcmhzID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFw
KHZhcmlhYmxlKSk7Ci0gICAgICAgIHJocy0+c2V0VHlwZSh2YXJpYWJsZS50eXBlKCktPmNsb25l
KCkpOworICAgICAgICByaHMtPnNldFR5cGUoKnZhcmlhYmxlLnR5cGUoKSk7CiAgICAgICAgIHJo
cy0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkIH0pOwogCiAgICAgICAgIGF1dG8gYXNzaWdubWVudCA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpBc3NpZ25tZW50RXhwcmVzc2lvbj4odmFyaWFibGUuY29kZUxvY2F0aW9uKCksIFdURk1vdmUo
bGhzKSwgV1RGTW92ZShyaHMpKTsKLSAgICAgICAgYXNzaWdubWVudC0+c2V0VHlwZSh2YXJpYWJs
ZS50eXBlKCktPmNsb25lKCkpOworICAgICAgICBhc3NpZ25tZW50LT5zZXRUeXBlKCp2YXJpYWJs
ZS50eXBlKCkpOwogICAgICAgICBhc3NpZ25tZW50LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CiAKICAgICAgICAgcmV0dXJuIGFzc2lnbm1lbnQ7CkBAIC0xMzYsMTAgKzEz
NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNFbnRyeVBvaW50ID0gISFmdW5jdGlvbkRl
ZmluaXRpb24uZW50cnlQb2ludFR5cGUoKTsKICAgICAgICAgaWYgKGlzRW50cnlQb2ludCkgewog
ICAgICAgICAgICAgYXV0byBzdHJ1Y3RWYXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2RlTG9jYXRp
b24oKSwgQVNUOjpRdWFsaWZpZXJzKCksCi0gICAgICAgICAgICAgICAgbV9zdHJ1Y3RUeXBlLT5j
bG9uZSgpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgbV9z
dHJ1Y3RUeXBlLmNvcHlSZWYoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwogCiAgICAg
ICAgICAgICBhdXRvIHN0cnVjdFZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHN0cnVjdFZh
cmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgIHN0cnVjdFZhcmlhYmxlUmVmZXJlbmNl
LT5zZXRUeXBlKG1fc3RydWN0VHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBzdHJ1Y3RWYXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZShtX3N0cnVjdFR5cGUuY29weVJlZigpKTsKICAgICAgICAg
ICAgIHN0cnVjdFZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMgc3RydWN0VmFyaWFibGVEZWNsYXJhdGlvbnM7CkBAIC0xNDcs
MTEgKzE0NywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBhdXRvIHN0cnVjdERlY2xhcmF0aW9u
U3RhdGVtZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50PihmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCksIFdURk1vdmUoc3RydWN0VmFy
aWFibGVEZWNsYXJhdGlvbnMpKTsKIAogICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJl
c3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihmdW5j
dGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCksIFdURk1vdmUoc3RydWN0VmFyaWFibGVSZWZl
cmVuY2UpKTsKLSAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtX3Bv
aW50ZXJUb1N0cnVjdFR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLT5zZXRUeXBlKG1fcG9pbnRlclRvU3RydWN0VHlwZS5jb3B5UmVmKCkpOwogICAgICAg
ICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7CiAKICAgICAgICAgICAgIGF1dG8gcG9pbnRlckRlY2xhcmF0aW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2Rl
TG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksCi0gICAgICAgICAgICAgICAgbV9wb2ludGVy
VG9TdHJ1Y3RUeXBlLT5jbG9uZSgpLCAid3JhcHBlciJfcywgbnVsbHB0ciwgV1RGTW92ZShtYWtl
UG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgICAgICBtX3BvaW50ZXJUb1N0cnVjdFR5
cGUuY29weVJlZigpLCAid3JhcHBlciJfcywgbnVsbHB0ciwgV1RGTW92ZShtYWtlUG9pbnRlckV4
cHJlc3Npb24pKTsKICAgICAgICAgICAgIG1fc3RydWN0VmFyaWFibGUgPSAmcG9pbnRlckRlY2xh
cmF0aW9uOwogCiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBvaW50ZXJW
YXJpYWJsZURlY2xhcmF0aW9uczsKQEAgLTE2Miw3ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0ZW1lbnRzKCkuaW5zZXJ0KDEsIFdU
Rk1vdmUocG9pbnRlckRlY2xhcmF0aW9uU3RhdGVtZW50KSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBhdXRvIHBvaW50ZXJEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCksIEFT
VDo6UXVhbGlmaWVycygpLAotICAgICAgICAgICAgICAgIG1fcG9pbnRlclRvU3RydWN0VHlwZS0+
Y2xvbmUoKSwgIndyYXBwZXIiX3MsIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAgICAg
IG1fcG9pbnRlclRvU3RydWN0VHlwZS5jb3B5UmVmKCksICJ3cmFwcGVyIl9zLCBudWxscHRyLCBu
dWxscHRyKTsKICAgICAgICAgICAgIG1fc3RydWN0VmFyaWFibGUgPSAmcG9pbnRlckRlY2xhcmF0
aW9uOwogICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5hcHBlbmQo
V1RGTW92ZShwb2ludGVyRGVjbGFyYXRpb24pKTsKICAgICAgICAgfQpAQCAtMjAyLDcgKzIwMiw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGl0ZXIgPT0gbV92YXJpYWJsZU1hcHBpbmcuZW5kKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byB0eXBlID0gdmFyaWFibGVSZWZl
cmVuY2UudmFyaWFibGUoKS0+dHlwZSgpLT5jbG9uZSgpOworICAgICAgICBSZWY8QVNUOjpVbm5h
bWVkVHlwZT4gdHlwZSA9ICp2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCk7CiAg
ICAgICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSB2YXJpYWJsZVJlZmVy
ZW5jZS50eXBlQW5ub3RhdGlvbigpOwogICAgICAgICBhdXRvKiBpbnRlcm5hbEZpZWxkID0gQVNU
OjpyZXBsYWNlV2l0aDxBU1Q6Okdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlPih2YXJpYWJsZVJlZmVy
ZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UuY29kZUxvY2F0aW9uKCksIG1ha2VTdHJ1Y3RWYXJpYWJs
ZVJlZmVyZW5jZSgpLCBpdGVyLT52YWx1ZSk7CiAgICAgICAgIGludGVybmFsRmllbGQtPnNldFR5
cGUoV1RGTW92ZSh0eXBlKSk7CkBAIC0yMzYsOCArMjM2LDggQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIG1fc3RydWN0VmFyaWFibGUgeyBudWxscHRy
IH07CiAKLSAgICBVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgbV9zdHJ1Y3RUeXBlOwot
ICAgIFVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPiBtX3BvaW50ZXJUb1N0cnVjdFR5cGU7Cisg
ICAgUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4gbV9zdHJ1Y3RUeXBlOworICAgIFJlZjxBU1Q6OlBv
aW50ZXJUeXBlPiBtX3BvaW50ZXJUb1N0cnVjdFR5cGU7CiAgICAgLy8gSWYgdGhpcyBtYXBwaW5n
IGNvbnRhaW5zIHRoZSB2YXJpYWJsZSwgaXQgbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUncyBjYW5v
bmljYWwgbG9jYXRpb24KICAgICAvLyBpcyBpbiB0aGUgc3RydWN0IHdlIHVzZSB0byBwcmVzZXJ2
ZSB2YXJpYWJsZSBsaWZldGltZXMuCiAgICAgY29uc3QgSGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24qLCBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqPiYgbV92YXJpYWJsZU1hcHBpbmc7CkBA
IC0yNTYsNyArMjU2LDcgQEAgdm9pZCBwcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzKFByb2dyYW0m
IAogICAgIGZvciAoYXV0byYgcGFpciA6IGVzY2FwZWRWYXJpYWJsZXMpIHsKICAgICAgICAgYXV0
byogdmFyaWFibGUgPSBwYWlyLmtleTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBwYWlyLnZhbHVl
OwotICAgICAgICBlbGVtZW50cy5hcHBlbmQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50IHsgdmFyaWFi
bGUtPmNvZGVMb2NhdGlvbigpLCB7IH0sIHZhcmlhYmxlLT50eXBlKCktPmNsb25lKCksIFdURk1v
dmUobmFtZSksIG51bGxwdHIgfSk7CisgICAgICAgIGVsZW1lbnRzLmFwcGVuZChBU1Q6OlN0cnVj
dHVyZUVsZW1lbnQgeyB2YXJpYWJsZS0+Y29kZUxvY2F0aW9uKCksIHsgfSwgKnZhcmlhYmxlLT50
eXBlKCksIFdURk1vdmUobmFtZSksIG51bGxwdHIgfSk7CiAgICAgfQogCiAgICAgLy8gTmFtZSBv
ZiB0aGlzIGRvZXNuJ3QgbWF0dGVyLCBzaW5jZSB3ZSBkb24ndCB1c2Ugc3RydWN0IG5hbWVzIHdo
ZW4KQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIHByZXNlcnZlVmFyaWFibGVMaWZldGltZXMoUHJv
Z3JhbSYgCiAKICAgICB7CiAgICAgICAgIGF1dG8gd3JhcHBlclN0cnVjdFR5cGUgPSBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoYW5vbnltb3VzVG9rZW4oVG9rZW46OlR5cGU6OklkZW50aWZpZXIp
LCB3cmFwcGVyU3RydWN0RGVmaW5pdGlvbik7Ci0gICAgICAgIFByZXNlcnZlTGlmZXRpbWVzIHBy
ZXNlcnZlTGlmZXRpbWVzKHdyYXBwZXJTdHJ1Y3RUeXBlLCB2YXJpYWJsZU1hcHBpbmcpOworICAg
ICAgICBQcmVzZXJ2ZUxpZmV0aW1lcyBwcmVzZXJ2ZUxpZmV0aW1lcyhXVEZNb3ZlKHdyYXBwZXJT
dHJ1Y3RUeXBlKSwgdmFyaWFibGVNYXBwaW5nKTsKICAgICAgICAgcHJlc2VydmVMaWZldGltZXMu
VmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNv
bHZlci5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDM1ICs5OCwzNSBAQCBzdHJ1Y3QgQW5kZXJDYWxsQXJndW1lbnRSZXN1bHQgewogfTsKIAogdGVt
cGxhdGUgPHR5cGVuYW1lIEV4cHJlc3Npb25Db25zdHJ1Y3RvciwgdHlwZW5hbWUgVHlwZUNvbnN0
cnVjdG9yPgotc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiB3cmFwQW5k
ZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24sIFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiBiYXNlVHlwZSwgYm9vbCBhbmRlckZ1bmN0aW9uLCBi
b29sIHRocmVhZEFuZGVyRnVuY3Rpb24pCitzdGF0aWMgT3B0aW9uYWw8QW5kZXJDYWxsQXJndW1l
bnRSZXN1bHQ+IHdyYXBBbmRlckNhbGxBcmd1bWVudChVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PiYgZXhwcmVzc2lvbiwgUmVmPEFTVDo6VW5uYW1lZFR5cGU+IGJhc2VUeXBlLCBib29sIGFuZGVy
RnVuY3Rpb24sIGJvb2wgdGhyZWFkQW5kZXJGdW5jdGlvbikKIHsKICAgICBhdXRvIGxvY2F0aW9u
ID0gZXhwcmVzc2lvbi0+Y29kZUxvY2F0aW9uKCk7CiAgICAgaWYgKGF1dG8gYWRkcmVzc1NwYWNl
ID0gZXhwcmVzc2lvbi0+dHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKICAg
ICAgICAgaWYgKCFhbmRlckZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgYXV0byBtYWtlQXJyYXlSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEV4cHJl
c3Npb25Db25zdHJ1Y3Rvcj4obG9jYXRpb24sIFdURk1vdmUoZXhwcmVzc2lvbikpOwotICAgICAg
ICBtYWtlQXJyYXlSZWZlcmVuY2UtPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxUeXBlQ29uc3RydWN0
b3I+KGxvY2F0aW9uLCAqYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKGJhc2VUeXBlKSkpOworICAgICAg
ICBtYWtlQXJyYXlSZWZlcmVuY2UtPnNldFR5cGUoVHlwZUNvbnN0cnVjdG9yOjpjcmVhdGUobG9j
YXRpb24sICphZGRyZXNzU3BhY2UsIFdURk1vdmUoYmFzZVR5cGUpKSk7CiAgICAgICAgIG1ha2VB
cnJheVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogICAg
ICAgICByZXR1cm4ge3sgV1RGTW92ZShtYWtlQXJyYXlSZWZlcmVuY2UpLCBXVEY6Om51bGxvcHQs
IFdoaWNoQW5kZXI6OkFuZGVyIH19OwogICAgIH0KICAgICBpZiAodGhyZWFkQW5kZXJGdW5jdGlv
bikgewotICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBiYXNl
VHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBhdXRv
IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBiYXNlVHlwZS5jb3B5UmVmKCksIFN0
cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKIAogICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlMS0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlMS0+c2V0VHlwZShiYXNlVHlwZS5jb3B5UmVmKCkpOwogICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsKIAogICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RG
TW92ZSh2YXJpYWJsZVJlZmVyZW5jZTEpLCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKLSAgICAgICAg
YXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAg
ICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS5jb3B5UmVmKCkpOwogICAg
ICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOwogCiAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZh
cmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBl
KGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBl
KGJhc2VUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0p
OwogCiAgICAgICAgIGF1dG8gZXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8RXhwcmVzc2lvbkNv
bnN0cnVjdG9yPihsb2NhdGlvbiwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZTIpKTsKLSAgICAg
ICAgYXV0byByZXN1bHRUeXBlID0gbWFrZVVuaXF1ZVJlZjxUeXBlQ29uc3RydWN0b3I+KGxvY2F0
aW9uLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBXVEZNb3ZlKGJhc2VUeXBlKSk7Ci0gICAg
ICAgIGV4cHJlc3Npb24tPnNldFR5cGUocmVzdWx0VHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIGF1
dG8gcmVzdWx0VHlwZSA9IFR5cGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGxvY2F0aW9uLCBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkLCBXVEZNb3ZlKGJhc2VUeXBlKSk7CisgICAgICAgIGV4cHJlc3Np
b24tPnNldFR5cGUocmVzdWx0VHlwZS5jb3B5UmVmKCkpOwogICAgICAgICBleHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAgVmVjdG9yPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKQEAgLTE1MSw5ICsxNTEsOSBA
QCBzdGF0aWMgT3B0aW9uYWw8QW5kZXJDYWxsQXJndW1lbnRSZXN1bHQ+CiAgICAgICAgIGlmIChp
czxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgcmV0
dXJuIHt7IFdURk1vdmUoZXhwcmVzc2lvbiksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5k
ZXIgfX07CiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAg
ICAgICAgICAgcmV0dXJuIHdyYXBBbmRlckNhbGxBcmd1bWVudDxBU1Q6Ok1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihleHByZXNzaW9uLCBkb3du
Y2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgpLCBhbmRlckZ1
bmN0aW9uLCB0aHJlYWRBbmRlckZ1bmN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB3cmFwQW5k
ZXJDYWxsQXJndW1lbnQ8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4oZXhwcmVzc2lvbiwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUeXBlKS50eXBlKCksIGFuZGVyRnVuY3Rpb24sIHRocmVhZEFuZGVyRnVuY3Rpb24pOwog
ICAgIH0KLSAgICByZXR1cm4gd3JhcEFuZGVyQ2FsbEFyZ3VtZW50PEFTVDo6TWFrZVBvaW50ZXJF
eHByZXNzaW9uLCBBU1Q6OlBvaW50ZXJUeXBlPihleHByZXNzaW9uLCBleHByZXNzaW9uLT5yZXNv
bHZlZFR5cGUoKS5jbG9uZSgpLCBhbmRlckZ1bmN0aW9uLCB0aHJlYWRBbmRlckZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gd3JhcEFuZGVyQ2FsbEFyZ3VtZW50PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNz
aW9uLCBBU1Q6OlBvaW50ZXJUeXBlPihleHByZXNzaW9uLCBleHByZXNzaW9uLT5yZXNvbHZlZFR5
cGUoKSwgYW5kZXJGdW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5jdGlvbik7CiB9CiAKIHN0YXRpYyBV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBzZXR0ZXJDYWxsKEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogcmVsZXZhbnRBbmRlciwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBuZXdWYWx1
ZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgbGVm
dFZhbHVlRmFjdG9yeSwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBpbmRleFZhcmlhYmxlKQpA
QCAtMTYzLDcgKzE2Myw3IEBAIHN0YXRpYyBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBzZXR0
ZXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZTo6d3JhcCgqaW5kZXhWYXJpYWJsZSkpOwogICAgICAgICBBU1NFUlQoaW5kZXhWYXJpYWJs
ZS0+dHlwZSgpKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoaW5kZXhWYXJp
YWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5
cGUoKmluZGV4VmFyaWFibGUtPnR5cGUoKSk7CiAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZVJlZmVyZW5jZSkpOwogICAgIH07CkBAIC0xODEsMTYgKzE4MSwxNiBAQCBzdGF0aWMg
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gc2V0dGVyCiAgICAgICAgIG1heWJlQWRkSW5kZXhB
cmd1bWVudChhcmd1bWVudHMpOwogCiAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGxvY2F0aW9uLCBTdHJpbmcocmVsZXZhbnRB
bmRlci0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICAgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGUocmVsZXZhbnRBbmRlci0+dHlwZSgpLmNsb25lKCkpOworICAgICAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZShyZWxldmFudEFuZGVyLT50eXBlKCkpOwogICAgICAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogICAgICAg
ICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKnJlbGV2YW50QW5kZXIpOwogCiAgICAgICAg
IGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJl
bmNlRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKLSAgICAg
ICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KHJlbGV2YW50QW5kZXItPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAg
ICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KHJlbGV2YW50QW5kZXItPnR5cGUoKSkuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogCiAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGxvY2F0aW9u
LCBXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiksIFdURk1vdmUobmV3VmFsdWUpKTsKLSAg
ICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4ocmVsZXZhbnRBbmRlci0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAg
ICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPihyZWxldmFudEFuZGVyLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICBhc3Np
Z25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwog
CiAgICAgICAgIHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2ln
bm1lbnRFeHByZXNzaW9uKSk7CkBAIC0yMDUsMTIgKzIwNSwxMiBAQCBzdGF0aWMgVW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4gc2V0dGVyCiAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG5l
d1ZhbHVlKSk7CiAKICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkNhbGxFeHByZXNzaW9uPihsb2NhdGlvbiwgU3RyaW5nKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5zZXR0ZXJGdW5jdGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRUeXBlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5j
dGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUocHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uKCktPnR5cGUoKSk7CiAgICAgY2Fs
bEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKnByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXR0
ZXJGdW5jdGlvbigpKTsKIAogICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGxvY2F0aW9uLCBsZWZ0VmFsdWVGYWN0
b3J5KCksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKLSAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb24oKS0+dHlw
ZSgpLmNsb25lKCkpOworICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50eXBlKCkpOwogICAgIGFzc2lnbm1l
bnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAg
ICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShhc3NpZ25tZW50RXhw
cmVzc2lvbikpOwpAQCAtMjIzLDcgKzIyMyw3IEBAIHN0YXRpYyBVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiBnZXR0ZXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpW
YXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgqaW5kZXhWYXJpYWJsZSkpOwogICAgICAgICBBU1NFUlQo
aW5kZXhWYXJpYWJsZS0+dHlwZSgpKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5
cGUoaW5kZXhWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGUoKmluZGV4VmFyaWFibGUtPnR5cGUoKSk7CiAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOwogICAgIH07CkBAIC0yNDIsMTIgKzI0Miwx
MiBAQCBzdGF0aWMgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gZ2V0dGVyCiAgICAgICAgIG1h
eWJlQWRkSW5kZXhBcmd1bWVudChhcmd1bWVudHMpOwogCiAgICAgICAgIGF1dG8gY2FsbEV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGxvY2F0aW9uLCBTdHJp
bmcocmVsZXZhbnRBbmRlci0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICAgICAg
Y2FsbEV4cHJlc3Npb24tPnNldFR5cGUocmVsZXZhbnRBbmRlci0+dHlwZSgpLmNsb25lKCkpOwor
ICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShyZWxldmFudEFuZGVyLT50eXBlKCkpOwog
ICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOwogICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKnJlbGV2YW50QW5kZXIp
OwogCiAgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoY2FsbEV4cHJlc3Np
b24pKTsKLSAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KHJlbGV2YW50QW5kZXItPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9u
ZSgpKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KHJlbGV2YW50QW5kZXItPnR5cGUoKSkuZWxlbWVudFR5cGUoKSk7CiAg
ICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0
VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogCiAgICAgICAgIHJldHVybiBV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikp
OwpAQCAtMjYxLDcgKzI2MSw3IEBAIHN0YXRpYyBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBn
ZXR0ZXIKICAgICBtYXliZUFkZEluZGV4QXJndW1lbnQoYXJndW1lbnRzKTsKIAogICAgIGF1dG8g
Y2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGxvY2F0
aW9uLCBTdHJpbmcocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCktPm5h
bWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgp
KTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
Z2V0dGVyRnVuY3Rpb24oKS0+dHlwZSgpKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5j
dGlvbigqcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCkpOwogCkBAIC0z
MTcsMTQgKzMxNywxNCBAQCBzdGF0aWMgTW9kaWZ5UmVzdWx0IG1vZGlmeShBU1Q6OlByb3BlcnR5
CiAgICAgQVNUOjpFeHByZXNzaW9uJiBpbm5lckxlZnRFeHByZXNzaW9uID0gbGVmdEV4cHJlc3Np
b247CiAKICAgICAvLyBDcmVhdGUgInAiIHZhcmlhYmxlLgotICAgIGF1dG8gcG9pbnRlclZhcmlh
YmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxlZnRFeHByZXNz
aW9uLT5jb2RlTG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPihtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGxlZnRFeHByZXNzaW9u
LT5jb2RlTG9jYXRpb24oKSwgKmxlZnRFeHByZXNzaW9uLT50eXBlQW5ub3RhdGlvbigpLmxlZnRB
ZGRyZXNzU3BhY2UoKSwgbGVmdEV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25lKCkpKSwg
U3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGF1dG8gcG9pbnRlclZhcmlhYmxlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxlZnRFeHByZXNzaW9uLT5j
b2RlTG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6UG9pbnRlclR5cGU6OmNyZWF0
ZShsZWZ0RXhwcmVzc2lvbi0+Y29kZUxvY2F0aW9uKCksICpsZWZ0RXhwcmVzc2lvbi0+dHlwZUFu
bm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCksIGxlZnRFeHByZXNzaW9uLT5yZXNvbHZlZFR5
cGUoKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKIAogICAgIC8vIENyZWF0ZSAicSIg
YW5kICJyIiB2YXJpYWJsZXMuCiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+PiBpbnRlcm1lZGlhdGVWYXJpYWJsZXM7CiAgICAgaW50ZXJtZWRpYXRlVmFyaWFi
bGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hhaW4uc2l6ZSgpIC0gMSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPCBjaGFpbi5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiBwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24gPSBzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiY+KGNoYWluW2ldKTsKLSAgICAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnVuY2hl
Y2tlZEFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4ocHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBBU1Q6OlF1YWxpZmllcnMoKSwgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBu
dWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIGludGVybWVkaWF0ZVZhcmlhYmxlcy51bmNoZWNr
ZWRBcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksICZwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCksIFN0cmluZygpLCBudWxscHRyLCBu
dWxscHRyKSk7CiAgICAgfQogCiAgICAgLy8gQ29uc2lkZXIgYVtmb28oKV1bYl0gPSBjOwpAQCAt
MzU1LDcgKzM1NSw3IEBAIHN0YXRpYyBNb2RpZnlSZXN1bHQgbW9kaWZ5KEFTVDo6UHJvcGVydHkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8mIGluZGV4RXhw
cmVzc2lvbiA9IGRvd25jYXN0PEFTVDo6SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24pOwotICAgICAgICBpbmRleFZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5jb2RlTG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksIGluZGV4RXhwcmVzc2lvbi5pbmRl
eEV4cHJlc3Npb24oKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgbnVsbHB0ciwg
bnVsbHB0cikpOworICAgICAgICBpbmRleFZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5jb2RlTG9jYXRpb24oKSwgQVNUOjpRdWFsaWZpZXJzKCksICZpbmRleEV4cHJlc3Npb24uaW5k
ZXhFeHByZXNzaW9uKCkucmVzb2x2ZWRUeXBlKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRy
KSk7CiAgICAgfQogCiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHBy
ZXNzaW9uczsKQEAgLTM2MywxNiArMzYzLDE2IEBAIHN0YXRpYyBNb2RpZnlSZXN1bHQgbW9kaWZ5
KEFTVDo6UHJvcGVydHkKICAgICAvLyBTdGVwIDE6CiAgICAgewogICAgICAgICBhdXRvIG1ha2VQ
b2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b24+KGlubmVyTGVmdEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIFdURk1vdmUobGVmdEV4cHJl
c3Npb24pKTsKLSAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlx
dWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oaW5uZXJMZWZ0RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24o
KSwgKmlubmVyTGVmdEV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNl
KCksIGlubmVyTGVmdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSkpOworICAgICAg
ICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUoQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRl
KGlubmVyTGVmdEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksICppbm5lckxlZnRFeHByZXNzaW9u
LnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpLCBpbm5lckxlZnRFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpKSk7CiAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgIGF1dG8gdmFyaWFibGVS
ZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CiAgICAgICAgIEFTU0VSVChw
b2ludGVyVmFyaWFibGUtPnR5cGUoKSk7Ci0gICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGUoKnBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKICAgICAgICAgdmFy
aWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAgICAgICBhdXRvIGFz
c2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uPihpbm5lckxlZnRFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlKSwgV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKLSAgICAgICAgYXNz
aWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25l
KCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZSgqcG9pbnRlclZhcmlh
YmxlLT50eXBlKCkpOwogICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChX
VEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CkBAIC0zODQsMTkgKzM4NCwxOSBAQCBzdGF0
aWMgTW9kaWZ5UmVzdWx0IG1vZGlmeShBU1Q6OlByb3BlcnR5CiAgICAgICAgIGlmIChwcmV2aW91
cykgewogICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgqcHJl
dmlvdXMpKTsKICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKLSAgICAgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHByZXZpb3VzLT50eXBlKCktPmNsb25lKCkp
OworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoKnByZXZpb3VzLT50eXBl
KCkpOwogICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdo
dD8KICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKICAgICAgICAgfQogCiAg
ICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxl
KSk7CiAgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7Ci0gICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgp
KTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoKnBvaW50ZXJWYXJpYWJsZS0+
dHlwZSgpKTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdo
dD8KIAogICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOwogICAgICAgICBBU1NFUlQo
cG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOwotICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24t
PnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlw
ZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+
dHlwZSgpKS5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7CiAgICAgICAg
IHJldHVybiBkZXJlZmVyZW5jZUV4cHJlc3Npb247CiAgICAgfTsKQEAgLTQwOCwxMSArNDA4LDEx
IEBAIHN0YXRpYyBNb2RpZnlSZXN1bHQgbW9kaWZ5KEFTVDo6UHJvcGVydHkKIAogICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKCppbmRleFZhcmlhYmxlKSk7CiAgICAg
ICAgIEFTU0VSVChpbmRleFZhcmlhYmxlLT5nZXQoKS50eXBlKCkpOwotICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZS0+c2V0VHlwZShpbmRleFZhcmlhYmxlLT5nZXQoKS50eXBlKCktPmNsb25lKCkp
OworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSgqaW5kZXhWYXJpYWJsZS0+Z2V0
KCkudHlwZSgpKTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyBy
aWdodD8KIAogICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29k
ZUxvY2F0aW9uKCksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBpbmRleEV4cHJlc3Npb24u
dGFrZUluZGV4KCkpOwotICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShpbmRl
eFZhcmlhYmxlLT5nZXQoKS50eXBlKCktPmNsb25lKCkpOworICAgICAgICBhc3NpZ25tZW50RXhw
cmVzc2lvbi0+c2V0VHlwZSgqaW5kZXhWYXJpYWJsZS0+Z2V0KCkudHlwZSgpKTsKICAgICAgICAg
YXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgp
KTsKIAogICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVz
c2lvbikpOwpAQCAtNDI5LDExICs0MjksMTEgQEAgc3RhdGljIE1vZGlmeVJlc3VsdCBtb2RpZnko
QVNUOjpQcm9wZXJ0eQogCiAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6Ondy
YXAodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJh
dGlvbi50eXBlKCkpOwotICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJs
ZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
LT5zZXRUeXBlKCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKICAgICAgICAgYXV0byBhc3NpZ25t
ZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4o
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCBXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwotICAgICAgICBhc3NpZ25tZW50
RXhwcmVzc2lvbi0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7
CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKCp2YXJpYWJsZURlY2xhcmF0
aW9uLnR5cGUoKSk7CiAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdU
Rk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKQEAgLTQ1MSw3ICs0NTEsNiBAQCBzdGF0aWMg
TW9kaWZ5UmVzdWx0IG1vZGlmeShBU1Q6OlByb3BlcnR5CiAKICAgICAvLyBTdGVwIDQ6CiAgICAg
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gcmlnaHRWYWx1ZSA9IFdURk1vdmUobW9kaWZpY2F0
aW9uUmVzdWx0LnJlc3VsdCk7Ci0gICAgYXV0byBleHByZXNzaW9uVHlwZSA9IHJpZ2h0VmFsdWUt
PnJlc29sdmVkVHlwZSgpLmNsb25lKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFp
bi5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiA9IGNoYWluW2ldOwogICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJp
YWJsZXNbaV07CkBAIC00NjAsNyArNDU5LDcgQEAgc3RhdGljIE1vZGlmeVJlc3VsdCBtb2RpZnko
QVNUOjpQcm9wZXJ0eQogICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gc2V0dGVy
Q2FsbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi50
aHJlYWRBbmRlckZ1bmN0aW9uKCksIFdURk1vdmUocmlnaHRWYWx1ZSksIFsmXSgpIC0+IFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVu
Y2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgQVNTRVJU
KHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLT5zZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJp
Z2h0PwogICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOwogICAgICAgICB9LCBp
bmRleFZhcmlhYmxlID8gJippbmRleFZhcmlhYmxlIDogbnVsbHB0cik7CkBAIC00NjksNyArNDY4
LDcgQEAgc3RhdGljIE1vZGlmeVJlc3VsdCBtb2RpZnkoQVNUOjpQcm9wZXJ0eQogCiAgICAgICAg
IHJpZ2h0VmFsdWUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICBB
U1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICByaWdodFZhbHVlLT5z
ZXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmln
aHRWYWx1ZS0+c2V0VHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBy
aWdodFZhbHVlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAgICAgfQogCkBAIC00NzksMTIgKzQ3
OCwxMiBAQCBzdGF0aWMgTW9kaWZ5UmVzdWx0IG1vZGlmeShBU1Q6OlByb3BlcnR5CiAgICAgICAg
IGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0ZXJDYWxsKHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSwgV1RGTW92
ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gewogICAg
ICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFi
bGUpKTsKICAgICAgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7Ci0gICAg
ICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUo
KS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSgqcG9p
bnRlclZhcmlhYmxlLT50eXBlKCkpOwogICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAgICAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJl
c3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIFdURk1vdmUodmFyaWFibGVSZWZlcmVu
Y2UpKTsKICAgICAgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUoKSk7Ci0gICAg
ICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkp
OworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKSk7
CiAgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJs
ZS0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKICAgICAgICAgICAgIHJldHVybiBkZXJlZmVy
ZW5jZUV4cHJlc3Npb247CiAgICAgICAgIH0sIGluZGV4VmFyaWFibGVzW2luZGV4VmFyaWFibGVz
LnNpemUoKSAtIDFdID8gJiooaW5kZXhWYXJpYWJsZXNbaW5kZXhWYXJpYWJsZXMuc2l6ZSgpIC0g
MV0pIDogbnVsbHB0cik7CkBAIC01MTMsNyArNTEyLDcgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVy
Ojp2aXNpdChBU1Q6OkFzc2lnbgogICAgIH0KICAgICBBU1NFUlQoIWFzc2lnbm1lbnRFeHByZXNz
aW9uLmxlZnQoKS50eXBlQW5ub3RhdGlvbigpLmlzUmlnaHRWYWx1ZSgpKTsKIAotICAgIGF1dG8g
dHlwZSA9IGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUo
KTsKKyAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gdHlwZSA9IGFzc2lnbm1lbnRFeHByZXNzaW9u
LnJpZ2h0KCkucmVzb2x2ZWRUeXBlKCk7CiAKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdu
bWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CiAKQEAgLTU1MiwyNCArNTUxLDI0IEBAIHZvaWQgUHJv
cGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8KIAogICAgICAgICBzaW1wbGlmeUxlZnRW
YWx1ZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKIAotICAgICAgICBh
dXRvIGJhc2VUeXBlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNv
bHZlZFR5cGUoKS5jbG9uZSgpOwotICAgICAgICBhdXRvIHBvaW50ZXJUeXBlID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihsZWZ0VmFsdWVMb2NhdGlvbiwgKnJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNl
KCksIGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgUmVmPEFTVDo6VW5uYW1lZFR5cGU+IGJh
c2VUeXBlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5
cGUoKTsKKyAgICAgICAgUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHBvaW50ZXJUeXBlID0gQVNUOjpQ
b2ludGVyVHlwZTo6Y3JlYXRlKGxlZnRWYWx1ZUxvY2F0aW9uLCAqcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSwg
YmFzZVR5cGUuY29weVJlZigpKTsKIAotICAgICAgICBhdXRvIHBvaW50ZXJWYXJpYWJsZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsZWZ0VmFsdWVMb2NhdGlvbiwg
QVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihwb2ludGVyVHlw
ZS0+Y2xvbmUoKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgYXV0byBw
b2ludGVyVmFyaWFibGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
bGVmdFZhbHVlTG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBwb2ludGVyVHlwZS5jb3B5UmVm
KCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKIAogICAgICAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwogCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQ
b2ludGVyRXhwcmVzc2lvbj4obGVmdFZhbHVlTG9jYXRpb24sIHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24udGFrZUxlZnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lv
bi0+c2V0VHlwZShwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICBtYWtlUG9pbnRl
ckV4cHJlc3Npb24tPnNldFR5cGUocG9pbnRlclR5cGUuY29weVJlZigpKTsKICAgICAgICAgICAg
IG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVl
KCkpOwogCiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBv
aW50ZXJWYXJpYWJsZSkpOwotICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
cG9pbnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNl
dFR5cGUocG9pbnRlclR5cGUuY29weVJlZigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKICAgICAgICAgICAgIGF1dG8gYXNzaWdubWVu
dEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGxl
ZnRWYWx1ZUxvY2F0aW9uLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZShtYWtl
UG9pbnRlckV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5z
ZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLT5zZXRUeXBlKHBvaW50ZXJUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBhc3Np
Z25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwog
CiAgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVz
c2lvbikpOwpAQCAtNTc3LDE5ICs1NzYsMTkgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNp
dChBU1Q6OlJlYWRNbwogCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZl
cmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOwotICAgICAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UxLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZShwb2ludGVyVHlwZS5jb3B5UmVmKCkpOwogICAg
ICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKICAg
ICAgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUodmFyaWFibGVSZWZlcmVu
Y2UxKSk7Ci0gICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5
cGUtPmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBl
KGJhc2VUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVy
ZW5jZTIgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhcmlhYmxlUmVmZXJlbmNlKCk7
Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUoYmFzZVR5cGUtPmNsb25l
KCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlKGJhc2VUeXBlLmNv
cHlSZWYoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhp
cyByaWdodD8KIAogICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUodmFy
aWFibGVSZWZlcmVuY2UyKSwgV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsKLSAgICAg
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsK
KyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlS
ZWYoKSk7CiAgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQo
V1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwpAQCAtNTk3LDEyICs1OTYsMTIgQEAgdm9p
ZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRNbwogCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
Lm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+
c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZS0+c2V0VHlwZShiYXNlVHlwZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAgICAgICAgICAgYXV0byBuZXdWYWx1
ZUV4cHJlc3Npb24gPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnRha2VOZXdWYWx1ZUV4cHJl
c3Npb24oKTsKICAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKHZhcmlh
YmxlUmVmZXJlbmNlKSwgV1RGTW92ZShuZXdWYWx1ZUV4cHJlc3Npb24pKTsKLSAgICAgICAgICAg
IGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAg
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7
CiAgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92
ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwpAQCAtNjEwLDI2ICs2MDksMjYgQEAgdm9pZCBQcm9w
ZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRNbwogCiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOwot
ICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKHBvaW50ZXJUeXBlLT5jbG9u
ZSgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZShwb2ludGVyVHlw
ZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElz
IHRoaXMgcmlnaHQ/CiAKICAgICAgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1v
dmUodmFyaWFibGVSZWZlcmVuY2UxKSk7Ci0gICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2VF
eHByZXNzaW9uLT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNU
OjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAgICAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1Zh
cmlhYmxlUmVmZXJlbmNlKCk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5
cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5z
ZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZTItPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KIAogICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4obG9j
YXRpb24sIFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZSh2YXJpYWJsZVJl
ZmVyZW5jZTIpKTsKLSAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJh
c2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRU
eXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgICAgICBl
eHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwogICAgICAg
ICB9CiAKICAgICAgICAgYXV0byByZXN1bHRFeHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi50YWtlUmVzdWx0RXhwcmVzc2lvbigpOwotICAgICAgICBhdXRvIHR5cGUgPSByZXN1
bHRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpOworICAgICAgICBSZWY8QVNUOjpV
bm5hbWVkVHlwZT4gdHlwZSA9IHJlc3VsdEV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpOwogICAg
ICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShyZXN1bHRFeHByZXNzaW9uKSk7CiAKICAg
ICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gb2xkVmFyaWFibGVEZWNs
YXJhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZU9sZFZhbHVlKCk7CkBAIC02
NTUsMTEgKzY1NCwxMSBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1v
CiAKICAgICAgICAgewogICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFyaWFibGVSZWZlcmVuY2UoKTsKLSAgICAgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVm
dFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJl
c29sdmVkVHlwZSgpKTsKICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElz
IHRoaXMgcmlnaHQ/CiAKICAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGxlZnRWYWx1ZUxvY2F0aW9u
LCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZShsYXN0R2V0dGVyQ2FsbEV4cHJl
c3Npb24pKTsKLSAgICAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7
CisgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKTsKICAgICAgICAgICAgIGFz
c2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
CiAKICAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHBy
ZXNzaW9uKSk7CkBAIC02NjcsMTkgKzY2NiwxOSBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZp
c2l0KEFTVDo6UmVhZE1vCiAKICAgICAgICAgewogICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJl
ZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2Uo
KTsKLSAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKTsKICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKICAgICAgICAgICAgIGF1dG8gbmV3VmFsdWVF
eHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi50YWtlTmV3VmFsdWVFeHByZXNz
aW9uKCk7CiAgICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihsZWZ0VmFsdWVMb2NhdGlvbiwgV1RGTW92
ZSh2YXJpYWJsZVJlZmVyZW5jZSksIFdURk1vdmUobmV3VmFsdWVFeHByZXNzaW9uKSk7Ci0gICAg
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAg
YXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5s
ZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKSk7CiAgICAgICAgICAgICBhc3NpZ25tZW50RXhwcmVz
c2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgICAg
ICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwogICAg
ICAgICB9CiAKICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsKLSAgICAgICAgdmFyaWFibGVSZWZl
cmVuY2UtPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNv
bHZlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUo
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKSk7CiAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1
ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKICAgICAg
ICAgcmV0dXJuIHsgV1RGTW92ZShleHByZXNzaW9ucyksICBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJl
bmNlKSB9OwpAQCAtNjg4LDcgKzY4Nyw3IEBAIHZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQo
QVNUOjpSZWFkTW8KICAgICBzaW1wbGlmeUxlZnRWYWx1ZShtb2RpZnlSZXN1bHQuaW5uZXJMZWZ0
VmFsdWUpOwogCiAgICAgYXV0byByZXN1bHRFeHByZXNzaW9uID0gcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi50YWtlUmVzdWx0RXhwcmVzc2lvbigpOwotICAgIGF1dG8gdHlwZSA9IHJlc3VsdEV4
cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25lKCk7CisgICAgUmVmPEFTVDo6VW5uYW1lZFR5
cGU+IHR5cGUgPSByZXN1bHRFeHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKTsKICAgICBtb2RpZnlS
ZXN1bHQuZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUocmVzdWx0RXhwcmVzc2lvbikpOwogCiAg
ICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gb2xkVmFyaWFibGVEZWNsYXJh
dGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24udGFrZU9sZFZhbHVlKCk7CkBAIC03MjMs
MTIgKzcyMiwxMiBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnNpbXBsaWZ5UmlnaHRWYWx1CiAg
ICAgICAgIGlmIChpczxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uKSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZG93bmNhc3Q8QVNUOjpJbmRleEV4
cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikudGFrZUluZGV4KCkpOwogICAgICAg
ICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9u
Pihsb2NhdGlvbiwgU3RyaW5nKGFuZGVyRnVuY3Rpb24tPm5hbWUoKSksIFdURk1vdmUoYXJndW1l
bnRzKSk7Ci0gICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFuZGVyRnVuY3Rpb24tPnR5
cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5kZXJGdW5j
dGlvbi0+dHlwZSgpKTsKICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9u
KCphbmRlckZ1bmN0aW9uKTsKIAogICAgICAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24g
PSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24sIGxvY2F0aW9uLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Ci0gICAg
ICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAg
ICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJU
eXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93
bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3Bh
Y2UoKSB9KTsKIAogICAgICAgICBpZiAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA9IGFyZ3Vt
ZW50LT52YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNzUyLDcgKzc1MSw3IEBAIHZvaWQgUHJvcGVy
dHlSZXNvbHZlcjo6c2ltcGxpZnlSaWdodFZhbHUKICAgICAgICAgY2FsbEV4cHJlc3Npb24gPSBB
U1Q6OnJlcGxhY2VXaXRoPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGRvdEV4cHJlc3Npb24sIGxvY2F0
aW9uLCBTdHJpbmcoZ2V0dGVyRnVuY3Rpb24ubmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsK
ICAgICB9CiAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKGdldHRlckZ1bmN0aW9uKTsK
LSAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShnZXR0ZXJGdW5jdGlvbi50eXBlKCkuY2xvbmUo
KSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZ2V0dGVyRnVuY3Rpb24udHlwZSgpKTsK
ICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OwogfQogCkBAIC03ODUsMTIgKzc4NCwxMiBAQCB2b2lkIExlZnRWYWx1ZVNpbXBsaWZpZXI6OmZp
bmlzaFZpc2l0aW5nCiAgICAgaWYgKGlzPEFTVDo6SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24pKQogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGRvd25jYXN0PEFTVDo6
SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pLnRha2VJbmRleCgpKTsK
ICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNz
aW9uPihsb2NhdGlvbiwgU3RyaW5nKGFuZGVyRnVuY3Rpb24tPm5hbWUoKSksIFdURk1vdmUoYXJn
dW1lbnRzKSk7Ci0gICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoYW5kZXJGdW5jdGlvbi0+dHlw
ZSgpLmNsb25lKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFuZGVyRnVuY3Rpb24t
PnR5cGUoKSk7CiAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZGVyRnVuY3Rp
b24pOwogCiAgICAgYXV0byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gQVNUOjpyZXBsYWNlV2l0
aDxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBs
b2NhdGlvbiwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwotICAgIGRlcmVmZXJlbmNlRXhwcmVz
c2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50
eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9u
LT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUo
KSkuZWxlbWVudFR5cGUoKSk7CiAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVy
RnVuY3Rpb24tPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNv
c3QoQVNUOjpGdW5jCiB7CiAgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QgPSAwOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FuZGlkYXRlLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkg
ewotICAgICAgICBjb252ZXJzaW9uQ29zdCArPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVu
c2lnbmVkIHsKKyAgICAgICAgY29udmVyc2lvbkNvc3QgKz0gYXJndW1lbnRUeXBlc1tpXS5nZXQo
KS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShSZWY8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiB1
bnNpZ25lZCB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiB1bnNp
Z25lZCB7CiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29s
dmFibGVUeXBlKCkuY29udmVyc2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0tPnR5
cGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJl
c29sdmluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDEyICs4MCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IFJlc29sdmluZ1R5cGUoVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdikKKyAgICBSZXNv
bHZpbmdUeXBlKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiB2KQogICAgICAgICA6IG1faW5uZXIoV1RG
TW92ZSh2KSkKICAgICB7CiAgICAgfQogCi0gICAgUmVzb2x2aW5nVHlwZShSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiYgdikKKyAgICBSZXNvbHZpbmdUeXBlKFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4gdikKICAgICAgICAgOiBtX2lubmVyKFdURk1vdmUodikpCiAgICAg
ewogICAgIH0KQEAgLTEwNSwxOCArMTA1LDE4IEBAIHB1YmxpYzoKIAogICAgIEFTVDo6VW5uYW1l
ZFR5cGUqIGdldFVubmFtZWRUeXBlKCkKICAgICB7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5lcikpCi0gICAgICAg
ICAgICByZXR1cm4gJldURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4obV9pbm5l
cik7CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6OlVubmFtZWRU
eXBlPj4obV9pbm5lcikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpnZXQ8UmVmPEFTVDo6VW5u
YW1lZFR5cGU+PihtX2lubmVyKS5wdHIoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1dG8gdmlzaXQoY29uc3QgVmlz
aXRvciYgdmlzaXRvcikgLT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2aXNpdG9yLCBzdGQ6OmRlY2x2
YWw8VmFyaWFudDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4+Jj4oKSkpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+IGF1
dG8gdmlzaXQoY29uc3QgVmlzaXRvciYgdmlzaXRvcikgLT4gZGVjbHR5cGUoV1RGOjp2aXNpdCh2
aXNpdG9yLCBzdGQ6OmRlY2x2YWw8VmFyaWFudDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0
cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+Jj4oKSkpCiAgICAgewogICAgICAgICByZXR1cm4g
V1RGOjp2aXNpdCh2aXNpdG9yLCBtX2lubmVyKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmFy
aWFudDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4+IG1faW5uZXI7CisgICAgVmFyaWFudDxSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJl
ZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+IG1faW5uZXI7CiB9OwogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9w
ZXJhdG9yTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAkocmV2aXNp
b24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcg
KzY2LDcgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVBcnJheU9wZQogCiAgICAg
Zm9yIChhdXRvJiBhcnJheVR5cGUgOiBhcnJheVR5cGVzKSB7CiAgICAgICAgIGF1dG8gbG9jYXRp
b24gPSBhcnJheVR5cGUuZ2V0KCkuY29kZUxvY2F0aW9uKCk7Ci0gICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihs
b2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJp
bmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNU
OjpRdWFsaWZpZXJzKCksICZhcnJheVR5cGUuZ2V0KCksIFN0cmluZygpLCBudWxscHRyLCBudWxs
cHRyKTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBw
cm9ncmFtLmludHJpbnNpY3MoKS51aW50VHlwZSgpKSwgIm9wZXJhdG9yLmxlbmd0aCJfc3RyLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxNCArMTU5LDE0IEBAIEV4cGVjdGVkPHZvaWQs
IEVycm9yPiBzeW50aGVzaXplQ29uc3RydWMKICAgICAgICAgYXV0byBsb2NhdGlvbiA9IHVubmFt
ZWRUeXBlLmNvZGVMb2NhdGlvbigpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gdmFy
aWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
Pihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmNsb25lKCksIFN0cmlu
ZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJh
dGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwg
QVNUOjpRdWFsaWZpZXJzKCksICZ1bm5hbWVkVHlwZSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxw
dHIpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwog
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0
cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmNsb25lKCksICJvcGVyYXRvciBjYXN0
Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKKyAgICAg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUsICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFy
YW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgICAgIHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CiAgICAgICAgIH0KIAotICAgICAgICBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIHVubmFtZWRUeXBlLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMoKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOworICAgICAgICBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IHVubmFtZWRUeXBlLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zKCksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEVycm9yKCJDb3VsZCBub3Qgc3ludGhlc2l6ZSBkZWZhdWx0IGNvbnN0cnVjdG9y
IikpOwogICAgIH0KQEAgLTE3OSw3ICsxNzksNyBAQCBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3lu
dGhlc2l6ZUNvbnN0cnVjCiAKICAgICAgICAgYXV0byBsb2NhdGlvbiA9IG5hbWVkVHlwZS5nZXQo
KS5jb2RlTG9jYXRpb24oKTsKIAotICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVh
bGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBuYW1lZFR5cGUuZ2V0KCkpKSwgU3RyaW5nKCksIG51bGxwdHIsIG51
bGxwdHIpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5hbWVkVHlwZS5nZXQoKSksIFN0cmlu
ZygpLCBudWxscHRyLCBudWxscHRyKTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNv
cHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9j
YXRpb24sIG5hbWVkVHlwZS5nZXQoKSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFy
YW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0NzgzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCBFeHBl
Y3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUVudW1lcmF0CiAgICAgZm9yIChhdXRvJiBlbnVt
ZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgewog
ICAgICAgICBhdXRvIGxvY2F0aW9uID0gZW51bWVyYXRpb25EZWZpbml0aW9uLT5jb2RlTG9jYXRp
b24oKTsKICAgICAgICAgewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMSA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpR
dWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCBTdHJpbmcoKSwgbnVs
bHB0ciwgbnVsbHB0cik7Ci0gICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1
YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChsb2NhdGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBudWxs
cHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVh
bGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9u
RGVmaW5pdGlvbiksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1
dG8gdmFyaWFibGVEZWNsYXJhdGlvbjIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBudWxscHRy
LCBudWxscHRyKTsKICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1l
dGVyczsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNs
YXJhdGlvbjEpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFi
bGVEZWNsYXJhdGlvbjIpKTsKQEAgLTUzLDI4ICs1MywyOCBAQCBFeHBlY3RlZDx2b2lkLCBFcnJv
cj4gc3ludGhlc2l6ZUVudW1lcmF0CiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlv
bkRlZmluaXRpb24pKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAg
YXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CiAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKLSAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlv
biwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+dHlwZSgpLmNsb25lKCksICJvcGVyYXRvci52YWx1ZSJfc3RyLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKSwgIm9wZXJhdG9yLnZhbHVlIl9zdHIsIFdU
Rk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgICAgIGlm
ICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgY3JlYXRl
IG9wZXJhdG9yLnZhbHVlIGZvciBlbnVtIHR5cGUuIikpOwogICAgICAgICB9CiAKICAgICAgICAg
ewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGxvY2F0aW9uLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlv
biwgZW51bWVyYXRpb25EZWZpbml0aW9uKSksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3Ry
aW5nKCksIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwg
V1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKSwgIm9wZXJhdG9yIGNh
c3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwogICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNh
bm5vdCBjcmVhdGUgY29weSBjb25zdHJ1Y3RvciBmb3IgZW51bSB0eXBlLiIpKTsKICAgICAgICAg
fQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFs
aWZpZXJzKCksIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygp
LCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNU
OjpRdWFsaWZpZXJzKCksICZlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKSwgU3RyaW5nKCks
IG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJp
YWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
bG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOworICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlvbkRlZmluaXRpb24p
LCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09w
ZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbikpKQogICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChFcnJvcigiQ2Fubm90IGNyZWF0ZSAnb3BlcmF0b3IgY2FzdCcgZm9yIGVudW0gdHlwZS4i
KSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDExIEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50
aGVzaXplU3RydWN0dXIKICAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3Ry
dWN0dXJlRGVmaW5pdGlvbi0+c3RydWN0dXJlRWxlbWVudHMoKSkgewogICAgICAgICAgICAgLy8g
VGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKICAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIg
PSBbJl0oQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gewotICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihzdHJ1Y3R1cmVFbGVtZW50LmNvZGVMb2NhdGlv
bigpLCBhZGRyZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChzdHJ1Y3R1cmVFbGVt
ZW50LmNvZGVMb2NhdGlvbigpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7Ci0gICAgICAgICAgICAg
ICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+KHN0cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIEFTVDo6UXVhbGlm
aWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oV1RGTW92ZShhcmd1bWVudFR5cGUp
KSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGF1dG8gYXJn
dW1lbnRUeXBlID0gQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKHN0cnVjdHVyZUVsZW1lbnQuY29k
ZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKHN0cnVj
dHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIHN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbj4oc3RydWN0dXJlRWxlbWVudC5jb2RlTG9jYXRpb24oKSwgQVNU
OjpRdWFsaWZpZXJzKCksIFdURk1vdmUoYXJndW1lbnRUeXBlKSwgU3RyaW5nKCksIG51bGxwdHIs
IG51bGxwdHIpOwogICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtl
VW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KHN0cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9u
KCksIGFkZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAg
ICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKHN0
cnVjdHVyZUVsZW1lbnQuY29kZUxvY2F0aW9uKCksIGFkZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxl
bWVudC50eXBlKCkpOwogICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihz
dHJ1Y3R1cmVFbGVtZW50LmNvZGVMb2NhdGlvbigpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgbWFrZVN0cmluZygib3BlcmF0b3ImLiIs
IHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwg
aXNPcGVyYXRvcikpOwogICAgICAgICAgICAgICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uOwogICAgICAgICAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAkocmV2aXNpb24gMjQ3ODM1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpUeXBlQXJndW1lbnQmIHQKIHsKICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbik7Ci0gICAgfSwgWyZdKFVuaXF1
ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSB7CisgICAgfSwgWyZdKFJl
ZjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSB7CiAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKICAgICB9KSwgdHlwZUFyZ3VtZW50KTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVm
ZXJlbmNlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCShyZXZpc2lvbiAyNDc4MzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVy
ZW5jZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDE2IEBAIG5hbWVzcGFjZSBB
U1QgewogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGljIFJlZmVyZW5jZVR5cGUgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHVzaW5nIEJhc2UgPSBSZWZlcmVuY2VU
eXBlOwotcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShDb2RlTG9jYXRpb24gbG9jYXRp
b24sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiBl
bGVtZW50VHlwZSkKKworICAgIEFycmF5UmVmZXJlbmNlVHlwZShDb2RlTG9jYXRpb24gbG9jYXRp
b24sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIFJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5
cGUpCiAgICAgICAgIDogQmFzZShsb2NhdGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKGVsZW1l
bnRUeXBlKSkKICAgICB7CiAgICAgfQorcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXJyYXlSZWZl
cmVuY2VUeXBlPiBjcmVhdGUoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlLCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQXJyYXlSZWZlcmVuY2VUeXBlKGxvY2F0aW9uLCBhZGRyZXNz
U3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKSk7CisgICAgfQogCiAgICAgdmlydHVhbCB+QXJy
YXlSZWZlcmVuY2VUeXBlKCkgPSBkZWZhdWx0OwogCkBAIC01NSwxMSArNjAsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92
ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBcnJheVJlZmVyZW5j
ZVR5cGU+KGNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UoKSwgZWxlbWVudFR5cGUoKS5jbG9u
ZSgpKTsKLSAgICB9Ci0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIHJldHVybiB0aGlzLT5CYXNlOjpoYXNoKCkgXiBTdHJpbmdIYXNoZXI6OmNvbXB1
dGVMaXRlcmFsSGFzaCgiYXJyYXkiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCShyZXZpc2lvbiAy
NDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xB
cnJheVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDE4IEBAIG5hbWVzcGFjZSBB
U1QgewogCiBjbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEFycmF5VHlwZShDb2RlTG9jYXRpb24g
bG9jYXRpb24sIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiBlbGVtZW50VHlwZSwgdW5zaWduZWQg
bnVtRWxlbWVudHMpCisgICAgQXJyYXlUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgUmVmPFVu
bmFtZWRUeXBlPiBlbGVtZW50VHlwZSwgdW5zaWduZWQgbnVtRWxlbWVudHMpCiAgICAgICAgIDog
VW5uYW1lZFR5cGUobG9jYXRpb24pCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShXVEZNb3ZlKGVs
ZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRzKQogICAgIHsK
ICAgICB9CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUmVmPEFycmF5VHlwZT4gY3JlYXRlKENvZGVM
b2NhdGlvbiBsb2NhdGlvbiwgUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSwgdW5zaWduZWQg
bnVtRWxlbWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcnJheVR5
cGUobG9jYXRpb24sIFdURk1vdmUoZWxlbWVudFR5cGUpLCBudW1FbGVtZW50cykpOworICAgIH0K
IAogICAgIHZpcnR1YWwgfkFycmF5VHlwZSgpID0gZGVmYXVsdDsKIApAQCAtNjEsMTEgKzY2LDYg
QEAgcHVibGljOgogICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gbV9lbGVtZW50VHlw
ZTsgfQogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVt
ZW50czsgfQogCi0gICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBcnJheVR5cGU+KGNvZGVM
b2NhdGlvbigpLCBtX2VsZW1lbnRUeXBlLT5jbG9uZSgpLCBtX251bUVsZW1lbnRzKTsKLSAgICB9
Ci0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJl
dHVybiBXVEY6OkludEhhc2g8dW5zaWduZWQ+OjpoYXNoKG1fbnVtRWxlbWVudHMpIF4gbV9lbGVt
ZW50VHlwZS0+aGFzaCgpOwpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBSZWY8
VW5uYW1lZFR5cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsK
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCShyZXZp
c2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1Ymxp
YyBOYW1lZFR5cGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IEVudW1lcmF0aW9uRGVmaW5pdGlvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIG5h
bWUsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgIEVudW1lcmF0aW9uRGVmaW5p
dGlvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIFJlZjxVbm5hbWVkVHlw
ZT4gdHlwZSkKICAgICAgICAgOiBOYW1lZFR5cGUobG9jYXRpb24sIFdURk1vdmUobmFtZSkpCiAg
ICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCiAgICAgewpAQCAtODYsNyArODYsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV90
eXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIEhhc2hNYXA8U3RyaW5nLCBz
dGQ6OnVuaXF1ZV9wdHI8RW51bWVyYXRpb25NZW1iZXI+PiBtX21lbWJlcnM7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fdHlwZTsKICAgICB9
CiAKLSAgICB2b2lkIHNldFR5cGUoVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAg
dm9pZCBzZXRUeXBlKFJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VCghbV90eXBlKTsKICAgICAgICAgbV90eXBlID0gV1RGTW92ZSh0eXBlKTsKQEAgLTg3LDcgKzg3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29weVR5cGVUbyhFeHByZXNzaW9uJiBvdGhlcikgY29u
c3QKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBjb25zdF9jYXN0PEV4
cHJlc3Npb24qPih0aGlzKS0+bWF5YmVSZXNvbHZlZFR5cGUoKSkKLSAgICAgICAgICAgIG90aGVy
LnNldFR5cGUocmVzb2x2ZWRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIG90aGVyLnNldFR5
cGUoKnJlc29sdmVkVHlwZSk7CiAgICAgICAgIGlmIChhdXRvKiB0eXBlQW5ub3RhdGlvbiA9IG1h
eWJlVHlwZUFubm90YXRpb24oKSkKICAgICAgICAgICAgIG90aGVyLnNldFR5cGVBbm5vdGF0aW9u
KFR5cGVBbm5vdGF0aW9uKCp0eXBlQW5ub3RhdGlvbikpOwogICAgIH0KQEAgLTExOSw3ICsxMTks
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9u
OwotICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKKyAgICBSZWZQ
dHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBPcHRpb25hbDxUeXBlQW5ub3RhdGlvbj4gbV90
eXBlQW5ub3RhdGlvbjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oCShyZXZpc2lv
biAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGbG9hdExpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEZsb2F0TGl0ZXJhbCByZXN1bHQoY29kZUxvY2F0aW9uKCksIG1fdmFsdWUpOwog
ICAgICAgICByZXN1bHQubV90eXBlID0gbV90eXBlLmNsb25lKCk7CiAgICAgICAgIGlmIChhdXRv
KiByZXNvbHZlZFR5cGUgPSBtX3R5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkKLSAgICAgICAgICAg
IHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXNvbHZlZFR5cGUtPmNsb25lKCkpOworICAgICAgICAg
ICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKGNvbnN0X2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KCpy
ZXNvbHZlZFR5cGUpKTsKICAgICAgICAgY29weVR5cGVUbyhyZXN1bHQpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3Bw
CShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogRmxvYXRMaXRlcmFsVHlwZTo6RmxvYXRMaXRlcmFs
VHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIGZsb2F0IHZhbHVlKQogICAgIDogbV92YWx1ZSh2
YWx1ZSkKLSAgICAsIG1fcHJlZmVycmVkVHlwZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+
KGxvY2F0aW9uLCAiZmxvYXQiX3N0ciwgVHlwZUFyZ3VtZW50cygpKSkKKyAgICAsIG1fcHJlZmVy
cmVkVHlwZShUeXBlUmVmZXJlbmNlOjpjcmVhdGUobG9jYXRpb24sICJmbG9hdCJfc3RyLCBUeXBl
QXJndW1lbnRzKCkpKQogewogfQogCkBAIC03Niw4ICs3Niw4IEBAIEZsb2F0TGl0ZXJhbFR5cGUg
RmxvYXRMaXRlcmFsVHlwZTo6Y2xvbmUKIHsKICAgICBGbG9hdExpdGVyYWxUeXBlIHJlc3VsdCht
X3ByZWZlcnJlZFR5cGUtPmNvZGVMb2NhdGlvbigpLCBtX3ZhbHVlKTsKICAgICBpZiAoYXV0byog
dHlwZSA9IG1heWJlUmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgIHJlc3VsdC5yZXNvbHZlKHR5cGUt
PmNsb25lKCkpOwotICAgIHJlc3VsdC5tX3ByZWZlcnJlZFR5cGUgPSBtX3ByZWZlcnJlZFR5cGUt
PmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgICAgICByZXN1bHQucmVzb2x2ZShjb25zdF9jYXN0
PEFTVDo6VW5uYW1lZFR5cGUmPigqdHlwZSkpOworICAgIHJlc3VsdC5tX3ByZWZlcnJlZFR5cGUg
PSBtX3ByZWZlcnJlZFR5cGUuY29weVJlZigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0
ZXJhbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0
IG1fdmFsdWU7CiAgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIgdG8gcmVzb2x2ZSBhIGNpcmN1
bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgogICAgIC8vIENvbnN0YW50RXhwcmVzc2lvbiAtPiBMaXRl
cmFsVHlwZSAtPiBUeXBlUmVmZXJlbmNlIC0+IFR5cGVBcmd1bWVudHMgLT4gQ29uc3RhbnRFeHBy
ZXNzaW9uCi0gICAgVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+IG1fcHJlZmVycmVkVHlwZTsKKyAg
ICBSZWY8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgQVNUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCShyZXZpc2lv
biAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
bmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKENvZGVM
b2NhdGlvbiBsb2NhdGlvbiwgQXR0cmlidXRlQmxvY2smJiBhdHRyaWJ1dGVCbG9jaywgT3B0aW9u
YWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+
JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBwYXJhbWV0ZXJz
LCBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+JiYgc2VtYW50aWMsIGJvb2wgaXNPcGVyYXRvcikK
KyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQXR0cmlidXRl
QmxvY2smJiBhdHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9p
bnRUeXBlLCBSZWY8VW5uYW1lZFR5cGU+IHR5cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxlRGVj
bGFyYXRpb25zJiYgcGFyYW1ldGVycywgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiYmIHNlbWFu
dGljLCBib29sIGlzT3BlcmF0b3IpCiAgICAgICAgIDogbV9jb2RlTG9jYXRpb24obG9jYXRpb24p
CiAgICAgICAgICwgbV9hdHRyaWJ1dGVCbG9jayhXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSkKICAg
ICAgICAgLCBtX2VudHJ5UG9pbnRUeXBlKGVudHJ5UG9pbnRUeXBlKQpAQCAtODQsNyArODQsNyBA
QCBwcml2YXRlOgogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7CiAgICAgT3B0
aW9uYWw8RW50cnlQb2ludFR5cGU+IG1fZW50cnlQb2ludFR5cGU7CiAgICAgYm9vbCBtX2lzT3Bl
cmF0b3I7Ci0gICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBtX3R5cGU7CisgICAgUmVmPFVubmFt
ZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBWYXJpYWJsZURlY2xhcmF0
aW9ucyBtX3BhcmFtZXRlcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBtX3NlbWFu
dGljOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW50ZWdlckxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc4MzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAg
SW50ZWdlckxpdGVyYWwgcmVzdWx0KGNvZGVMb2NhdGlvbigpLCBtX3ZhbHVlKTsKICAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IG1fdHlwZS5jbG9uZSgpOwogICAgICAgICBpZiAoYXV0byogcmVzb2x2
ZWRUeXBlID0gbV90eXBlLm1heWJlUmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgICAgICByZXN1bHQu
bV90eXBlLnJlc29sdmUocmVzb2x2ZWRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5tX3R5cGUucmVzb2x2ZShjb25zdF9jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPigqcmVzb2x2ZWRU
eXBlKSk7CiAgICAgICAgIGNvcHlUeXBlVG8ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHJl
dmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIEludGVnZXJMaXRlcmFsVHlwZTo6SW50ZWdlckxpdGVy
YWxUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHZhbHVlKQogICAgIDogbV92YWx1ZSh2
YWx1ZSkKLSAgICAsIG1fcHJlZmVycmVkVHlwZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+
KGxvY2F0aW9uLCAiaW50Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCisgICAgLCBtX3ByZWZlcnJl
ZFR5cGUoVHlwZVJlZmVyZW5jZTo6Y3JlYXRlKGxvY2F0aW9uLCAiaW50Il9zdHIsIFR5cGVBcmd1
bWVudHMoKSkpCiB7CiB9CiAKQEAgLTc3LDggKzc3LDggQEAgSW50ZWdlckxpdGVyYWxUeXBlIElu
dGVnZXJMaXRlcmFsVHlwZTo6YwogewogICAgIEludGVnZXJMaXRlcmFsVHlwZSByZXN1bHQobV9w
cmVmZXJyZWRUeXBlLT5jb2RlTG9jYXRpb24oKSwgbV92YWx1ZSk7CiAgICAgaWYgKGF1dG8qIHR5
cGUgPSBtYXliZVJlc29sdmVkVHlwZSgpKQotICAgICAgICByZXN1bHQucmVzb2x2ZSh0eXBlLT5j
bG9uZSgpKTsKLSAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLT5j
bG9uZVR5cGVSZWZlcmVuY2UoKTsKKyAgICAgICAgcmVzdWx0LnJlc29sdmUoY29uc3RfY2FzdDxB
U1Q6OlVubmFtZWRUeXBlJj4oKnR5cGUpKTsKKyAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0g
bV9wcmVmZXJyZWRUeXBlLmNvcHlSZWYoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaAkocmV2aXNpb24gMjQ3ODM1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBp
bnQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2ly
Y3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCiAgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExp
dGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4
cHJlc3Npb24KLSAgICBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOwor
ICAgIFJlZjxUeXBlUmVmZXJlbmNlPiBtX3ByZWZlcnJlZFR5cGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE51bGxMaXRlcmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaAkocmV2aXNpb24gMjQ3ODM1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBhdXRvIHJlc3VsdCA9IE51bGxMaXRlcmFsKGNvZGVMb2NhdGlvbigpKTsKICAgICAgICAgaWYg
KGF1dG8qIHJlc29sdmVkVHlwZSA9IG1fdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKQotICAgICAg
ICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJlc29sdmVkVHlwZS0+Y2xvbmUoKSk7CisgICAg
ICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUoY29uc3RfY2FzdDxBU1Q6OlVubmFtZWRUeXBl
Jj4oKnJlc29sdmVkVHlwZSkpOwogICAgICAgICBjb3B5VHlwZVRvKHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCShyZXZpc2lv
biAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xQb2ludGVyVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTcgQEAgbmFtZXNw
YWNlIEFTVCB7CiBjbGFzcyBQb2ludGVyVHlwZSA6IHB1YmxpYyBSZWZlcmVuY2VUeXBlIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICB1c2luZyBCYXNlID0gUmVmZXJlbmNlVHlw
ZTsKLXB1YmxpYzoKLSAgICBQb2ludGVyVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJl
c3NTcGFjZSBhZGRyZXNzU3BhY2UsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUp
CisKKyAgICBQb2ludGVyVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UsIFJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUpCiAgICAgICAgIDogQmFz
ZShsb2NhdGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICB7CiAg
ICAgfQorcHVibGljOgorCisgICAgc3RhdGljIFJlZjxQb2ludGVyVHlwZT4gY3JlYXRlKENvZGVM
b2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRU
eXBlPiBlbGVtZW50VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBv
aW50ZXJUeXBlKGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKSk7
CisgICAgfQogCiAgICAgdmlydHVhbCB+UG9pbnRlclR5cGUoKSA9IGRlZmF1bHQ7CiAKQEAgLTU1
LDExICs2MSw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xv
bmUoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8
UG9pbnRlclR5cGU+KGNvZGVMb2NhdGlvbigpLCBhZGRyZXNzU3BhY2UoKSwgZWxlbWVudFR5cGUo
KS5jbG9uZSgpKTsKLSAgICB9Ci0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLT5CYXNlOjpoYXNoKCkgXiBTdHJpbmdIYXNoZXI6
OmNvbXB1dGVMaXRlcmFsSGFzaCgicG9pbnRlciIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksOCArMTE5LDggQEAgcHJpdmF0ZToKICAg
ICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgVW5pcXVl
UmVmPEV4cHJlc3Npb24+IGxlZnRWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKGxvY2F0aW9u
KQogICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUobGVmdFZhbHVlKSkKLSAgICAgICAgLCBt
X29sZFZhbHVlKG1ha2VVbmlxdWVSZWY8VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIFF1
YWxpZmllcnMoKSwgV1RGOjpudWxsb3B0LCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cikpCi0g
ICAgICAgICwgbV9uZXdWYWx1ZShtYWtlVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+KGxv
Y2F0aW9uLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9wdCwgU3RyaW5nKCksIG51bGxwdHIsIG51
bGxwdHIpKQorICAgICAgICAsIG1fb2xkVmFsdWUobWFrZVVuaXF1ZVJlZjxWYXJpYWJsZURlY2xh
cmF0aW9uPihsb2NhdGlvbiwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgbnVsbHB0
ciwgbnVsbHB0cikpCisgICAgICAgICwgbV9uZXdWYWx1ZShtYWtlVW5pcXVlUmVmPFZhcmlhYmxl
RGVjbGFyYXRpb24+KGxvY2F0aW9uLCBRdWFsaWZpZXJzKCksIG51bGxwdHIsIFN0cmluZygpLCBu
dWxscHRyLCBudWxscHRyKSkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNl
VHlwZS5oCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEz
ICs0MiwxNCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgUmVmZXJlbmNlVHlwZSA6IHB1Ymxp
YyBVbm5hbWVkVHlwZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgUmVmZXJlbmNlVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJlc3NTcGFjZSBhZGRy
ZXNzU3BhY2UsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiBlbGVtZW50VHlwZSkKK3Byb3RlY3Rl
ZDoKKyAgICBSZWZlcmVuY2VUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNl
IGFkZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSkKICAgICAgICAgOiBV
bm5hbWVkVHlwZShsb2NhdGlvbikKICAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3Bh
Y2UpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICB7
CiAgICAgfQorcHVibGljOgogCiAgICAgdmlydHVhbCB+UmVmZXJlbmNlVHlwZSgpID0gZGVmYXVs
dDsKIApAQCAtNjgsNyArNjksNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgQWRkcmVzc1Nw
YWNlIG1fYWRkcmVzc1NwYWNlOwotICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV9lbGVtZW50
VHlwZTsKKyAgICBSZWY8VW5uYW1lZFR5cGU+IG1fZWxlbWVudFR5cGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFJlc29sdmFibGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaAkocmV2aXNpb24gMjQ3
ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVz
b2x2YWJsZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTMgKzc0LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICptX3Jlc29sdmVkVHlwZTsKICAgICB9CiAKLSAgICB2b2lkIHJlc29s
dmUoVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgdm9pZCByZXNvbHZlKFJlZjxV
bm5hbWVkVHlwZT4gdHlwZSkKICAgICB7CiAgICAgICAgIG1fcmVzb2x2ZWRUeXBlID0gV1RGTW92
ZSh0eXBlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3B0aW9uYWw8VW5pcXVlUmVmPFVubmFt
ZWRUeXBlPj4gbV9yZXNvbHZlZFR5cGU7CisgICAgUmVmUHRyPFVubmFtZWRUeXBlPiBtX3Jlc29s
dmVkVHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVj
dHVyZUVsZW1lbnQuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBBU1QgewogY2xhc3MgU3RydWN0dXJlRWxlbWVu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU3RydWN0dXJl
RWxlbWVudChDb2RlTG9jYXRpb24gbG9jYXRpb24sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBV
bmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgc3RkOjp1bmlxdWVf
cHRyPFNlbWFudGljPiYmIHNlbWFudGljKQorICAgIFN0cnVjdHVyZUVsZW1lbnQoQ29kZUxvY2F0
aW9uIGxvY2F0aW9uLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgUmVmPFVubmFtZWRUeXBlPiB0
eXBlLCBTdHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+JiYgc2VtYW50aWMp
CiAgICAgICAgIDogbV9jb2RlTG9jYXRpb24obG9jYXRpb24pCiAgICAgICAgICwgbV9xdWFsaWZp
ZXJzKFdURk1vdmUocXVhbGlmaWVycykpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkp
CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1f
Y29kZUxvY2F0aW9uOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAgIFVuaXF1ZVJl
ZjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV90eXBlOwogICAg
IFN0cmluZyBtX25hbWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBtX3NlbWFudGlj
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFR5cGVBcmd1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAkocmV2aXNpb24gMjQ3ODM1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBUeXBlQXJndW1lbnQgY2xv
bmUoY29uc3QgVHlwZUFyZ3VtZW50JiB0CiB7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbXShjb25zdCBDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lv
bikgLT4gVHlwZUFyZ3VtZW50IHsKICAgICAgICAgcmV0dXJuIGNvbnN0YW50RXhwcmVzc2lvbi5j
bG9uZSgpOwotICAgIH0sIFtdKGNvbnN0IFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiYgdHlwZVJl
ZmVyZW5jZSkgLT4gVHlwZUFyZ3VtZW50IHsKLSAgICAgICAgcmV0dXJuIHR5cGVSZWZlcmVuY2Ut
PmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgIH0sIFtdKGNvbnN0IFJlZjxUeXBlUmVmZXJlbmNl
PiYgdHlwZVJlZmVyZW5jZSkgLT4gVHlwZUFyZ3VtZW50IHsKKyAgICAgICAgcmV0dXJuIHR5cGVS
ZWZlcmVuY2UuY29weVJlZigpOwogICAgIH0pLCB0eXBlQXJndW1lbnQpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlQXJndW1lbnQuaAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFR5cGVSZWZlcmVu
Y2U7CiAKLXVzaW5nIFR5cGVBcmd1bWVudCA9IFZhcmlhbnQ8Q29uc3RhbnRFeHByZXNzaW9uLCBV
bmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4+OwordXNpbmcgVHlwZUFyZ3VtZW50ID0gVmFyaWFudDxD
b25zdGFudEV4cHJlc3Npb24sIFJlZjxUeXBlUmVmZXJlbmNlPj47CiB1c2luZyBUeXBlQXJndW1l
bnRzID0gVmVjdG9yPFR5cGVBcmd1bWVudD47CiAKIFR5cGVBcmd1bWVudCBjbG9uZShjb25zdCBU
eXBlQXJndW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAkocmV2aXNpb24g
MjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VHlwZURlZmluaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3Bh
Y2UgQVNUIHsKIGNsYXNzIFR5cGVEZWZpbml0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVHlwZURlZmluaXRpb24oQ29k
ZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+
JiYgdHlwZSkKKyAgICBUeXBlRGVmaW5pdGlvbihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmlu
ZyYmIG5hbWUsIFJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKICAgICAgICAgOiBOYW1lZFR5cGUobG9j
YXRpb24sIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCiAg
ICAgewpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFVu
aXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIFJlZjxVbm5hbWVkVHlwZT4gbV90eXBl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNl
LmNwcAkocmV2aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEy
ICszNywxMiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotVW5pcXVl
UmVmPFR5cGVSZWZlcmVuY2U+IFR5cGVSZWZlcmVuY2U6OndyYXAoQ29kZUxvY2F0aW9uIGxvY2F0
aW9uLCBOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSkKK1JlZjxUeXBlUmVmZXJlbmNlPiBUeXBlUmVm
ZXJlbmNlOjp3cmFwKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgTmFtZWRUeXBlJiByZXNvbHZlZFR5
cGUpCiB7CiAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOwogICAgIGlmIChpczxOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkpCiAgICAgICAgIHR5cGVBcmd1bWVudHMg
PSBBU1Q6OmNsb25lKGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBl
KS50eXBlQXJndW1lbnRzKCkpOwotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxUeXBl
UmVmZXJlbmNlPihsb2NhdGlvbiwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkpLCBXVEZNb3Zl
KHR5cGVBcmd1bWVudHMpKTsKKyAgICBhdXRvIHJlc3VsdCA9IFR5cGVSZWZlcmVuY2U6OmNyZWF0
ZShsb2NhdGlvbiwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkpLCBXVEZNb3ZlKHR5cGVBcmd1
bWVudHMpKTsKICAgICByZXN1bHQtPnNldFJlc29sdmVkVHlwZShyZXNvbHZlZFR5cGUpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCShyZXZpc2lv
biAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIwICs0NSwyNCBAQCBjbGFz
cyBOYW1lZFR5cGU7CiAKIGNsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgogICAgIFR5cGVSZWZlcmVu
Y2UoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYg
dHlwZUFyZ3VtZW50cykKICAgICAgICAgOiBVbm5hbWVkVHlwZShsb2NhdGlvbikKICAgICAgICAg
LCBtX25hbWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGVBcmd1bWVudHMoV1RGTW92
ZSh0eXBlQXJndW1lbnRzKSkKICAgICB7CiAgICAgfQorcHVibGljOgorICAgIHN0YXRpYyBSZWY8
VHlwZVJlZmVyZW5jZT4gY3JlYXRlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgU3RyaW5nJiYgbmFt
ZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKiBuZXcgVHlwZVJlZmVyZW5jZShsb2NhdGlvbiwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZSh0eXBlQXJndW1lbnRzKSkpOworICAgIH0KIAogICAgIHZpcnR1YWwgflR5cGVSZWZlcmVu
Y2UoKSA9IGRlZmF1bHQ7CiAKICAgICBUeXBlUmVmZXJlbmNlKGNvbnN0IFR5cGVSZWZlcmVuY2Um
KSA9IGRlbGV0ZTsKICAgICBUeXBlUmVmZXJlbmNlKFR5cGVSZWZlcmVuY2UmJikgPSBkZWZhdWx0
OwogCi0gICAgc3RhdGljIFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiB3cmFwKENvZGVMb2NhdGlv
biwgTmFtZWRUeXBlJiByZXNvbHZlZFR5cGUpOworICAgIHN0YXRpYyBSZWY8VHlwZVJlZmVyZW5j
ZT4gd3JhcChDb2RlTG9jYXRpb24sIE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKTsKIAogICAgIGJv
b2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCkBA
IC04OCwxOSArOTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVzb2x2ZWRUeXBlID0gJnJlc29s
dmVkVHlwZTsKICAgICB9CiAKLSAgICBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4gY2xvbmVUeXBl
UmVmZXJlbmNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1
ZVJlZjxUeXBlUmVmZXJlbmNlPihjb2RlTG9jYXRpb24oKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6
Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7Ci0gICAgICAgIGlmIChtX3Jlc29sdmVkVHlwZSkKLSAg
ICAgICAgICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKCptX3Jlc29sdmVkVHlwZSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVm
ZXJlbmNlKCk7Ci0gICAgfQotCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IG92ZXJyaWRlCiAg
ICAgewogICAgICAgICAvLyBDdXJyZW50bHksIHdlIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gYWZ0
ZXIgdGhlIG5hbWUgcmVzb2x2ZXIgcnVucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAkocmV2
aXNpb24gMjQ3ODM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVW5uYW1lZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMzksNyArNDAsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsK
IAotY2xhc3MgVW5uYW1lZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBVbm5hbWVkVHlwZSA6
IHB1YmxpYyBUeXBlLCBwdWJsaWMgUmVmQ291bnRlZDxVbm5hbWVkVHlwZT4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFVubmFtZWRUeXBlKENvZGVMb2NhdGlv
biBsb2NhdGlvbikKQEAgLTYyLDggKzYzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3Qg
VHlwZSYgdW5pZnlOb2RlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KICAgICB2aXJ0dWFsIFR5
cGUmIHVuaWZ5Tm9kZSgpIHsgcmV0dXJuICp0aGlzOyB9CiAKLSAgICB2aXJ0dWFsIFVuaXF1ZVJl
ZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGhhc2goKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5u
YW1lZFR5cGUmKSBjb25zdCA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwgcmVzdWx0KGNvZGVMb2NhdGlvbigpLCBtX3ZhbHVlKTsKICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IG1fdHlwZS5jbG9uZSgpOwogICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBl
ID0gbV90eXBlLm1heWJlUmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgICAgICByZXN1bHQubV90eXBl
LnJlc29sdmUocmVzb2x2ZWRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5
cGUucmVzb2x2ZShjb25zdF9jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPigqcmVzb2x2ZWRUeXBlKSk7
CiAgICAgICAgIGNvcHlUeXBlVG8ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xV
bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUuY3BwCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZShDb2RlTG9jYXRpb24gbG9j
YXRpb24sIHVuc2lnbmVkIHZhbHVlKQogICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAsIG1fcHJl
ZmVycmVkVHlwZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KGxvY2F0aW9uLCAidWludCJf
c3RyLCBUeXBlQXJndW1lbnRzKCkpKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKFR5cGVSZWZlcmVu
Y2U6OmNyZWF0ZShsb2NhdGlvbiwgInVpbnQiX3N0ciwgVHlwZUFyZ3VtZW50cygpKSkKIHsKIH0K
IApAQCAtODAsOCArODAsOCBAQCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSBVbnNpZ25lZElu
dGVnCiB7CiAgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgcmVzdWx0KG1fcHJlZmVycmVk
VHlwZS0+Y29kZUxvY2F0aW9uKCksIG1fdmFsdWUpOwogICAgIGlmIChhdXRvKiB0eXBlID0gbWF5
YmVSZXNvbHZlZFR5cGUoKSkKLSAgICAgICAgcmVzdWx0LnJlc29sdmUodHlwZS0+Y2xvbmUoKSk7
Ci0gICAgcmVzdWx0Lm1fcHJlZmVycmVkVHlwZSA9IG1fcHJlZmVycmVkVHlwZS0+Y2xvbmVUeXBl
UmVmZXJlbmNlKCk7CisgICAgICAgIHJlc3VsdC5yZXNvbHZlKGNvbnN0X2Nhc3Q8QVNUOjpVbm5h
bWVkVHlwZSY+KCp0eXBlKSk7CisgICAgcmVzdWx0Lm1fcHJlZmVycmVkVHlwZSA9IG1fcHJlZmVy
cmVkVHlwZS5jb3B5UmVmKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oCShyZXZpc2lvbiAyNDc4
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBA
IHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVl
X3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCiAgICAgLy8gQ29u
c3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFy
Z3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KLSAgICBVbmlxdWVSZWY8VHlwZVJlZmVyZW5j
ZT4gbV9wcmVmZXJyZWRUeXBlOworICAgIFJlZjxUeXBlUmVmZXJlbmNlPiBtX3ByZWZlcnJlZFR5
cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDI0NzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uIGZpbmFsIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIC8vIEZpbmFsIGJlY2F1c2Ugd2UgbWFkZSB0
aGUgZGVzdHJ1Y3RvciBub24tdmlydHVhbC4KIHB1YmxpYzoKLSAgICBWYXJpYWJsZURlY2xhcmF0
aW9uKENvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb24sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBP
cHRpb25hbDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIHN0
ZDo6dW5pcXVlX3B0cjxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJl
c3Npb24+JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihDb2RlTG9jYXRp
b24gY29kZUxvY2F0aW9uLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgUmVmUHRyPFVubmFtZWRU
eXBlPiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+JiYgc2Vt
YW50aWMsIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGluaXRpYWxpemVyKQogICAgICAg
ICA6IG1fY29kZUxvY2F0aW9uKGNvZGVMb2NhdGlvbikKICAgICAgICAgLCBtX3F1YWxpZmllcnMo
V1RGTW92ZShxdWFsaWZpZXJzKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKQEAg
LTY3LDEyICs2NywxMiBAQCBwdWJsaWM6CiAgICAgLy8gV2UgdXNlIHRoaXMgZm9yIFJlYWRNb2Rp
ZnlXcml0ZSBleHByZXNzaW9ucywgc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgdHlwZSBvZiB0aGVp
cgogICAgIC8vIGludGVybmFsIHZhcmlhYmxlcyB1bnRpbCB0aGUgY2hlY2tlciBydW5zLiBBbGwg
b3RoZXIgdmFyaWFibGVzIHNob3VsZCBzdGFydCBsaWZlIG91dAogICAgIC8vIHdpdGggYSB0eXBl
LgotICAgIHZvaWQgc2V0VHlwZShVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IHR5cGUpCisgICAgdm9p
ZCBzZXRUeXBlKFJlZjxVbm5hbWVkVHlwZT4gdHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
bV90eXBlKTsKICAgICAgICAgbV90eXBlID0gV1RGTW92ZSh0eXBlKTsKICAgICB9Ci0gICAgY29u
c3QgT3B0aW9uYWw8VW5pcXVlUmVmPFVubmFtZWRUeXBlPj4mIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICBjb25zdCBSZWZQdHI8VW5uYW1lZFR5cGU+JiB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CiAgICAgVW5uYW1lZFR5cGUqIHR5cGUoKSB7IHJldHVybiBtX3R5
cGUgPyAmKm1fdHlwZSA6IG51bGxwdHI7IH0KICAgICBTZW1hbnRpYyogc2VtYW50aWMoKSB7IHJl
dHVybiBtX3NlbWFudGljLmdldCgpOyB9CiAgICAgRXhwcmVzc2lvbiogaW5pdGlhbGl6ZXIoKSB7
IHJldHVybiBtX2luaXRpYWxpemVyLmdldCgpOyB9CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9uOwogICAgIFF1YWxpZmll
cnMgbV9xdWFsaWZpZXJzOwotICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4+IG1f
dHlwZTsKKyAgICBSZWZQdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1l
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZW1hbnRpYz4gbV9zZW1hbnRpYzsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9pbml0aWFsaXplcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDc4MzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9u
V3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw4IEBAIHN0YXRpYyBBU1Q6
Ok5hbWVkVHlwZSYgdmVjdG9ySW5uZXJUeXBlKEEKICAgICAgICAgcmV0dXJuIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKIAogICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpLnNpemUoKSA9PSAyKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxV
bmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVswXSkpOwotICAgIHJldHVybiBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBl
UmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSktPnJl
c29sdmVkVHlwZSgpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6
OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBd
KSk7CisgICAgcmV0dXJuIFdURjo6Z2V0PFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKS0+cmVzb2x2ZWRUeXBlKCk7CiB9CiAK
IHN0YXRpYyBjb25zdCBjaGFyKiB2ZWN0b3JTdWZmaXgoaW50IHZlY3Rvckxlbmd0aCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlVHlw
ZVdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVUeXBlV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ3ODM1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVU
eXBlV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOCBAQCBTdHJpbmcgd3Jp
dGVOYXRpdmVUeXBlKEFTVDo6TmF0aXZlVHlwZURlCiAgICAgICAgIHJldHVybiAic2FtcGxlciJf
c3RyOwogICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ2ZWN0b3IiKSB7
CiAgICAgICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNp
emUoKSA9PSAyKTsKLSAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVl
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pKTsKLSAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1
ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzBdKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEFT
VDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MF0pKTsKKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFJlZjxBU1Q6OlR5
cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsK
ICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gdHlwZVJlZmVyZW5jZS0+dW5pZnlOb2RlKCk7CiAg
ICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5v
ZGUpOwogICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CkBAIC0xMTEsOCArMTExLDggQEAgU3RyaW5nIHdy
aXRlTmF0aXZlVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZQogICAgIH0KICAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAibWF0cml4IikgewogICAgICAgICBBU1NFUlQobmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMyk7Ci0gICAgICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7Ci0gICAgICAgIGF1
dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNl
Pj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgICAgIGF1dG8mIHR5
cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CiAgICAgICAgIGF1dG8mIHVuaWZ5Tm9k
ZSA9IHR5cGVSZWZlcmVuY2UtPnVuaWZ5Tm9kZSgpOwogICAgICAgICBhdXRvJiBuYW1lZFR5cGUg
PSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKICAgICAgICAgYXV0byYgcGFy
YW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5
cGUpOwpAQCAtMTM3LDggKzEzNyw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZVR5cGUoQVNUOjpOYXRp
dmVUeXBlRGUKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImFycmF5PCIsIHByZWZpeCwgIiwg
IiwgY29sdW1ucyAqIHJvd3MsICI+Iik7CiAgICAgfQogICAgIEFTU0VSVChuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAxKTsKLSAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwotICAgIGF1dG8mIHR5cGVSZWZlcmVu
Y2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50
eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gV1RGOjpnZXQ8
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pOwogICAgIGF1dG8gcHJlZml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CiAgICAgICAg
IGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlMUQiKQogICAgICAg
ICAgICAgcmV0dXJuICJ0ZXh0dXJlMWQiX3N0cjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>