<?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>198580</bug_id>
          
          <creation_ts>2019-06-05 14:19:27 -0700</creation_ts>
          <short_desc>[WHLSL] Do not generate duplicate constructors/copy constructors in synthesizeConstructors</short_desc>
          <delta_ts>2019-06-18 10:52:10 -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>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1542169</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-05 14:19:27 -0700</bug_when>
    <thetext>e.g:
void foo(thread int*) { }
void foo2(thread int*) { }
void foo3(thread int*) { }
void foo4(thread int*) { }
void foo5(thread int*) { }


We will end up with a bunch of constructors/copy constructors for &quot;thread int*&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544545</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-13 11:39:47 -0700</bug_when>
    <thetext>This crashes the overload resolution in autoInitializeVariables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544625</commentid>
    <comment_count>2</comment_count>
      <attachid>372083</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-13 16:52:55 -0700</bug_when>
    <thetext>Created attachment 372083
WIP

contains code from OOB patch. Might be done besides just waiting for that patch to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544799</commentid>
    <comment_count>3</comment_count>
      <attachid>372131</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-14 12:26:10 -0700</bug_when>
    <thetext>Created attachment 372131
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544801</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-06-14 12:27:47 -0700</bug_when>
    <thetext>Attachment 372131 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:116:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 14 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>1544803</commentid>
    <comment_count>5</comment_count>
      <attachid>372134</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-14 12:29:32 -0700</bug_when>
    <thetext>Created attachment 372134
patch

fix style issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544838</commentid>
    <comment_count>6</comment_count>
      <attachid>372134</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-06-14 14:09:05 -0700</bug_when>
    <thetext>Comment on attachment 372134
patch

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

r=me

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:93
&gt;      newNameResolver.setCurrentFunctionDefinition(m_currentFunction);

These repeated copying of m_currentFunction and m_resolvingCalls make me think we should have a constructor of NameResolver that takes a reference to a parent NameResolver.
This constructor could easily then do the copying and could even take care of allocating the new NameContext.
This is not super urgent or important though, it would just be cleaner.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:225
&gt; +    if (m_isResolvingCalls) {

This could be made a tad more readable by an early exit:
if (!m_isResolvingCalls)
  return;
and then the old code. 5 nested if expressions is getting a bit much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545523</commentid>
    <comment_count>7</comment_count>
      <attachid>372312</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-17 18:57:52 -0700</bug_when>
    <thetext>Created attachment 372312
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545658</commentid>
    <comment_count>8</comment_count>
      <attachid>372134</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 10:27:59 -0700</bug_when>
    <thetext>Comment on attachment 372134
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:93
&gt;&gt;      newNameResolver.setCurrentFunctionDefinition(m_currentFunction);
&gt; 
&gt; These repeated copying of m_currentFunction and m_resolvingCalls make me think we should have a constructor of NameResolver that takes a reference to a parent NameResolver.
&gt; This constructor could easily then do the copying and could even take care of allocating the new NameContext.
&gt; This is not super urgent or important though, it would just be cleaner.

I will make this change.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:225
&gt;&gt; +    if (m_isResolvingCalls) {
&gt; 
&gt; This could be made a tad more readable by an early exit:
&gt; if (!m_isResolvingCalls)
&gt;   return;
&gt; and then the old code. 5 nested if expressions is getting a bit much.

I agree it&apos;s not great, but I&apos;m going to leave this as is, since we do things at the end of the if that we do if we do/don&apos;t take it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545663</commentid>
    <comment_count>9</comment_count>
      <attachid>372348</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 10:36:28 -0700</bug_when>
    <thetext>Created attachment 372348
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545665</commentid>
    <comment_count>10</comment_count>
      <attachid>372348</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-18 10:38:43 -0700</bug_when>
    <thetext>Comment on attachment 372348
patch for landing

Rejecting attachment 372348 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 372348, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Robin Morisset found in /Volumes/Data/EWS/WebKit/LayoutTests/ChangeLog does not appear to be a valid reviewer according to contributors.json.
/Volumes/Data/EWS/WebKit/LayoutTests/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: https://webkit-queues.webkit.org/results/12509627</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545674</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 10:50:07 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/246550/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545677</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-18 10:52:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/51856246&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372083</attachid>
            <date>2019-06-13 16:52:55 -0700</date>
            <delta_ts>2019-06-14 12:26:10 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>72019</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjQwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE5LTA2LTEzICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50IG91
dC1vZi1ib3VuZHMgYW5kIG51bGxwdHIgYmVoYXZpb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NTE2Njg4NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGJlaGF2aW9yIHdlJ3JlIGltcGxlbWVudGluZyBpczoKKyAgICAgICAgLSBPT0Igd3Jp
dGVzIGFyZSBpZ25vcmVkLgorICAgICAgICAtIE9PQiByZWFkcyByZXR1cm4gemVyby4KKyAgICAg
ICAgLSBXcml0ZXMgdG8gbnVsbCBhcmUgaWdub3JlZC4KKyAgICAgICAgLSBSZWFkcyBmcm9tIG51
bGwgcmV0dXJuIHplcm8uCisgICAgICAgIC0gJip4ID09IHgsIGluY2x1ZGluZyAmKm51bGwgPT0g
bnVsbC4KKyAgICAgICAgCisgICAgICAgIFdlIGltcGxlbWVudCB0aGlzIGxpa2Ugc286CisgICAg
ICAgIC0gVGhlIHZhbHVlIHN0YWNrIGluIEZ1bmN0aW9uV3JpdGVyIHR1cm5zIGludG8gYSBzdGFj
ayBvZiBwYWlyczogcnZhbHVlcyBhbmQgbHZhbHVlcy4KKyAgICAgICAgICBydmFsdWVzIGFyZSBy
ZXByZXNlbnRlZCB0aGUgc2FtZSBhcyBiZWZvcmUuIEx2YWx1ZXMgYXJlIGFsd2F5cyBwb2ludGVy
cy4KKyAgICAgICAgLSBBbnl0aGluZyB0aGF0IHByb2R1Y2VzIGFuIGx2YWx1ZSBtdXN0IHB1c2gg
YSBwb2ludGVyIHRvIHRoZSBzdGFjay4gTm90CisgICAgICAgICAgYWxsIHRoaW5ncyBwcm9kdWNl
IGx2YWx1ZXMsIHNvIHRoYXQgZW50cnkgaW4gdGhlIHN0YWNrIG1heSBiZSBlbXB0eS4KKyAgICAg
ICAgICBIb3dldmVyLCBhbGwgdGhpbmdzIHRoYXQgcHJvZHVjZSBsdmFsdWVzIGFsc28gcHJvZHVj
ZSBydmFsdWVzLiBTbywgIip4ID0gNDIiIHdvcmtzLAorICAgICAgICAgIGFuZCBzbyBkb2VzICJm
b28oKngpIi4gTm9kZXMgdGhhdCBwcm9kdWNlIGx2YWx1ZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBh
bHNvIHByb2R1Y2luZworICAgICAgICAgIGFuIHJ2YWx1ZSwgd2hpY2ggc2hvdWxkIGJlIHRoZSB2
YWx1ZSBhcyBpZiB0aGUgbHZhbHVlIHdhcyBkZXJlZmVyZW5jZWQgYXQgdGhhdCBwb2ludAorICAg
ICAgICAgIGluIHByb2dyYW0gZXhlY3V0aW9uLiBTbyB0aGUgIip4IiBpbiAidGhyZWFkIGludCog
eCA9IG51bGw7ICp4IiBwcm9kdWNlcyB0aGUgaW50IHplcm8KKyAgICAgICAgICBmb3IgaXRzIHJ2
YWx1ZSwgYW5kIG51bGwgZm9yIGl0cyBsdmFsdWUuCisgICAgICAgIC0gRGVyZWZlcmVuY2UganVz
dCB3b3JrcywgYXMgZGVyZWZlcmVuY2UgcHJvZHVjZXMgYm90aCBhbiBsdmFsdWUgYW5kIHJ2YWx1
ZS4gRGVyZWZlcmVuY2UKKyAgICAgICAgICBub2RlJ3MgY2hpbGQgbXVzdCBhbHNvIGJlIGFuIGx2
YWx1ZS4gU28gd2UganVzdCBmb3J3YXJkIHRoYXQgdmFsdWUgYWxvbmcgb24KKyAgICAgICAgICB0
aGUgc3RhY2suIEZvciB0aGUgcnZhbHVlLCBpZiB3ZSB0cnkgdG8gZGVyZWZlcmVuY2UgbnVsbHB0
ciwgd2UganVzdCBmaWxsIGluCisgICAgICAgICAgemVybyBieXRlcyBpbnN0ZWFkLiBPdGhlcndp
c2UsIHRoZSBydmFsdWUgaXMgdGhlIHJlc3VsdCBvZiBkZXJlZmVyZW5jaW5nIHRoZQorICAgICAg
ICAgIG5vbi1udWxsIHBvaW50ZXIuCisgICAgICAgIC0gQXNzaWdubWVudCBleHByZXNzaW9ucyBj
aGVjayBpZiB0aGUgaW5jb21pbmcgbHZhbHVlIGlzIG51bGwuIElmIGl0IGlzLCBpdAorICAgICAg
ICAgIHNraXBzIHRoZSBhc3NpZ25tZW50LgorICAgICAgICAtIG9wZXJhdG9yJltdIHJldHVybnMg
bnVsbHB0ciBvbiBhbiBPT0IgYWNjZXNzLiBUaGVuLCBiYXNlZCBvbiB0aGUgYWJvdmUKKyAgICAg
ICAgICBiZWhhdmlvciwgd2UgZ2V0IHRoZSBkZXNpcmVkIE9PQiByZWFkcyByZXR1cm4gemVybywg
YW5kIE9PQiB3cml0ZXMgYXJlCisgICAgICAgICAgaWdub3JlZC4KKyAgICAgICAgLSBNYWtlUG9p
bnRlckV4cHJlc3Npb24ganVzdCB0YWtlcyB0aGUgbGFzdCBsdmFsdWUgb2ZmIHRoZSBzdGFjayAo
d2hpY2ggbXVzdAorICAgICAgICAgIGJlIGEgcG9pbnRlcikgYW5kIHJldHVybnMgaXQgYXMgYW4g
cnZhbHVlLgorICAgICAgICAtIFZhcmlhYmxlUmVmZXJlbmNlIHdpbGwgcHVzaCBib3RoIHRoZSB2
YXJpYWJsZSB2YWx1ZSBhbmQgYSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgIG9u
dG8gdGhlIHN0YWNrLgorCQorICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBmZXcgYnVn
cyB3aGVyZSB3ZSB3ZXJlbid0IGdpdmluZyBjZXJ0YWluIEFTVCBub2RlcyB0aGUKKyAgICAgICAg
cHJvcGVyIGFkZHJlc3Mgc3BhY2UgdmFsdWVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBy
ZW1vdmVzIGNvZGUgdG8gZ2VuZXJhdGUgbmF0aXZlIGZ1bmN0aW9ucyBmb3Igb3BlcmF0b3JzCisg
ICAgICAgICJvcGVyYXRvcltdIiBhbmQgIm9wZXJhdG9yW109IiBhcyB3ZSBzaG91bGQgbmV2ZXIg
YmUgZ2VuZXJhdGluZyB0aGVzZQorICAgICAgICBvdXJzZWx2ZXMuIFdlIHNob3VsZCBvbmx5IGJl
IGdlbmVyYXRpbmcgdGhlICJvcGVyYXRvciZbXSIgYW5kZXIuCisKKyAgICAgICAgVGVzdHM6IHdl
YmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93
aGxzbC1vb2ItYWNjZXNzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6YXBwZW5kUmlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6YXBwZW5kTGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp0YWtlTGFzdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlv
bldyaXRlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlw
ZU5hbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpl
bWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlByZXNlcnZlTGlmZXRpbWVzOjphc3NpZ25WYXJpYWJsZUludG9TdHJ1Y3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvcGVydHlSZXNvbHZlcjo6dmlzaXQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwu
bW06CisgICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6dHJ5U2V0RnVuY3Rpb25zKToKKwogMjAxOS0wNi0xMyAgQ29tbWl0IFF1ZXVl
ICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjI0NjM5NiBhbmQgcjI0NjM5Ny4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAkocmV2aXNpb24g
MjQ2NDA0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZl
clR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsOCBAQCBzdGF0aWMgYm9vbCBt
YXRjaGVzKGNvbnN0IEFTVDo6VHlwZSYgdW5pCiAgICAgICAgIGF1dG8mIHVubmFtZWRUaGlzID0g
ZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKTsKICAgICAgICAgYXV0byYgdW5u
YW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcik7CiAgICAg
ICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVGhpcykgJiYgIWlzPEFT
VDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZE90aGVyKSk7CisgICAgICAgIHJldHVybiB1bm5hbWVk
VGhpcyA9PSB1bm5hbWVkT3RoZXI7CisgICAgICAgIC8qCiAgICAgICAgIGlmIChpczxBU1Q6OlBv
aW50ZXJUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZE90
aGVyKSkgewogICAgICAgICAgICAgYXV0byYgcG9pbnRlclRoaXMgPSBkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPih1bm5hbWVkVGhpcyk7CiAgICAgICAgICAgICBhdXRvJiBwb2ludGVyT3RoZXIg
PSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpOwpAQCAtODMsNiArODUs
NyBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VHlwZSYgdW5pCiAgICAgICAgICAg
ICByZXR1cm4gbWF0Y2hlcyhhcnJheVRoaXMudHlwZSgpLCBhcnJheU90aGVyLnR5cGUoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAqLwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyNDY0MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6
OnZpc2l0KEFTVDo6RnVuY3Rpb25EZQogICAgIE5hbWVDb250ZXh0IG5ld05hbWVDb250ZXh0KCZt
X25hbWVDb250ZXh0KTsKICAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5ld05hbWVD
b250ZXh0KTsKICAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlv
bihtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgbmV3TmFtZVJlc29sdmVyLnNldElzUmVzb2x2aW5n
Q2FsbHMobV9pc1Jlc29sdmluZ0NhbGxzKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rp
b25EZWZpbml0aW9uLnR5cGUoKSk7CiAgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpKQogICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tF
cnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CkBAIC05OSw2ICsxMDAsNyBAQCB2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvCiAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQo
Jm1fbmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNv
bnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9u
KG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdD
YWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVSZXNvbHZlci5WaXNpdG9yOjp2
aXNpdChibG9jayk7CiB9CiAKQEAgLTEwOCwxMSArMTEwLDEzIEBAIHZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OklmU3RhdGVtZW4KICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9u
YW1lQ29udGV4dCk7CiAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuYW1lQ29udGV4
dCk7CiAgICAgbmV3TmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obV9j
dXJyZW50RnVuY3Rpb24pOworICAgIG5ld05hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxz
KG1faXNSZXNvbHZpbmdDYWxscyk7CiAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOwogICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgp
KSB7CiAgICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKICAg
ICAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuYW1lQ29udGV4dCk7CiAgICAgICAg
IG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1fY3VycmVudEZ1
bmN0aW9uKTsKKyAgICAgICAgbmV3TmFtZVJlc29sdmVyLnNldElzUmVzb2x2aW5nQ2FsbHMobV9p
c1Jlc29sdmluZ0NhbGxzKTsKICAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CiAgICAgfQogfQpAQCAtMTIzLDYgKzEyNyw3
IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYKICAgICBOYW1lQ29u
dGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAgTmFtZVJlc29sdmVyIG5ld05h
bWVSZXNvbHZlcihuYW1lQ29udGV4dCk7CiAgICAgbmV3TmFtZVJlc29sdmVyLnNldEN1cnJlbnRG
dW5jdGlvbkRlZmluaXRpb24obV9jdXJyZW50RnVuY3Rpb24pOworICAgIG5ld05hbWVSZXNvbHZl
ci5zZXRJc1Jlc29sdmluZ0NhbGxzKG1faXNSZXNvbHZpbmdDYWxscyk7CiAgICAgbmV3TmFtZVJl
c29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKIH0KIApAQCAtMTMx
LDYgKzEzNiw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb28KICAg
ICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAgTmFtZVJlc29s
dmVyIG5ld05hbWVSZXNvbHZlcihuYW1lQ29udGV4dCk7CiAgICAgbmV3TmFtZVJlc29sdmVyLnNl
dEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obV9jdXJyZW50RnVuY3Rpb24pOworICAgIG5ld05h
bWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKG1faXNSZXNvbHZpbmdDYWxscyk7CiAgICAg
bmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwogfQpAQCAtMTQw
LDYgKzE0Niw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGYKICAg
ICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAgTmFtZVJlc29s
dmVyIG5ld05hbWVSZXNvbHZlcihuYW1lQ29udGV4dCk7CiAgICAgbmV3TmFtZVJlc29sdmVyLnNl
dEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obV9jdXJyZW50RnVuY3Rpb24pOworICAgIG5ld05h
bWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKG1faXNSZXNvbHZpbmdDYWxscyk7CiAgICAg
bmV3TmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KGZvckxvb3ApOwogfQogCkBAIC0xNzQsMTIg
KzE4MSwxNCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJlCiAKIHZv
aWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKQogewotICAgIGlmIChhdXRvKiBnZXR0ZXJGdW5jdGlvbnMg
PSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0
dGVyRnVuY3Rpb25OYW1lKCkpKQotICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0
UG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKmdldHRlckZ1bmN0aW9ucyk7Ci0gICAgaWYgKGF1dG8q
IHNldHRlckZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbk5hbWUoKSkpCi0gICAgICAgIHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZVNldHRlck92ZXJsb2Fkcygqc2V0dGVyRnVuY3Rpb25z
KTsKLSAgICBpZiAoYXV0byogYW5kZXJGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0
aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbk5hbWUoKSkpCi0gICAg
ICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUFuZGVyT3ZlcmxvYWRzKCph
bmRlckZ1bmN0aW9ucyk7CisgICAgaWYgKG1faXNSZXNvbHZpbmdDYWxscykgeworICAgICAgICBp
ZiAoYXV0byogZ2V0dGVyRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgICAg
IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUdldHRlck92ZXJsb2FkcygqZ2V0
dGVyRnVuY3Rpb25zKTsKKyAgICAgICAgaWYgKGF1dG8qIHNldHRlckZ1bmN0aW9ucyA9IG1fbmFt
ZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5j
dGlvbk5hbWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9z
c2libGVTZXR0ZXJPdmVybG9hZHMoKnNldHRlckZ1bmN0aW9ucyk7CisgICAgICAgIGlmIChhdXRv
KiBhbmRlckZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5hbmRlckZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgICAgIHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUFuZGVyT3ZlcmxvYWRzKCphbmRlckZ1bmN0aW9u
cyk7CisgICAgfQogICAgIFZpc2l0b3I6OnZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7
CiB9CiAKQEAgLTIxMCwyMyArMjE5LDI1IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6
OkRvdEV4cHJlc3MKIAogdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Np
b24mIGNhbGxFeHByZXNzaW9uKQogewotICAgIGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3Zlcmxv
YWRzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0
RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCi0gICAgICAgICAgICBjYWxsRXhwcmVz
c2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgaWYgKGF1dG8qIHR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjYWxsRXhwcmVzc2lv
bi5uYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVzLT5zaXplKCkgPT0gMSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5n
ZXRGdW5jdGlvbnMoIm9wZXJhdG9yIGNhc3QiX3N0cikpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxFeHByZXNzaW9uLnNldENhc3REYXRhKCgqdHlwZXMpWzBdLmdldCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25z
KTsKKyAgICBpZiAobV9pc1Jlc29sdmluZ0NhbGxzKSB7CisgICAgICAgIGlmICghY2FsbEV4cHJl
c3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMg
PSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKQorICAg
ICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0eXBlcyA9IG1fbmFt
ZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodHlwZXMtPnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoIm9wZXJh
dG9yIGNhc3QiX3N0cikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhwcmVz
c2lvbi5zZXRDYXN0RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGlmICghY2FsbEV4cHJl
c3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
fQogICAgIFZpc2l0b3I6OnZpc2l0KGNhbGxFeHByZXNzaW9uKTsKIH0KQEAgLTI5NSw2ICszMDYs
MjAgQEAgYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcgogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIHJlc29sdmVDYWxsc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dy
YW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQoreworICAgIG5hbWVSZXNvbHZlci5zZXRJ
c1Jlc29sdmluZ0NhbGxzKHRydWUpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9u
IDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVy
LnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oJmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAg
ICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsK
KyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlv
bihudWxscHRyKTsKKyAgICBuYW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxscyhmYWxzZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMTmFtZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAkocmV2aXNpb24gMjQ2NDA0KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY3VycmVu
dEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOwogICAgIH0KIAorICAgIHZvaWQgc2V0SXNS
ZXNvbHZpbmdDYWxscyhib29sIGlzUmVzb2x2aW5nQ2FsbHMpIHsgbV9pc1Jlc29sdmluZ0NhbGxz
ID0gaXNSZXNvbHZpbmdDYWxsczsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQoQVNUOjpU
eXBlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJikgb3Zl
cnJpZGU7CkBAIC02OCwxMCArNzAsMTIgQEAgcHJpdmF0ZToKICAgICBOYW1lQ29udGV4dCYgbV9u
YW1lQ29udGV4dDsKICAgICBIYXNoU2V0PEFTVDo6VHlwZVJlZmVyZW5jZSo+IG1fdHlwZVJlZmVy
ZW5jZXM7CiAgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIG1fY3VycmVudEZ1bmN0aW9uIHsg
bnVsbHB0ciB9OworICAgIGJvb2wgbV9pc1Jlc29sdmluZ0NhbGxzIHsgZmFsc2UgfTsKIH07CiAK
IGJvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7CiBib29s
IHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKK2Jvb2wg
cmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYpOwogCiB9IC8v
IG5hbWVzcGFjZSBXSExTTAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJldmlzaW9uIDI0NjQwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNSw4ICsxMjUsOSBAQCBzdGF0aWMgT3B0aW9uYWw8UHJvZ3JhbT4gcHJl
cGFyZVNoYXJlZChTCiAgICAgUlVOX1BBU1Moc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycywg
cHJvZ3JhbSk7CiAgICAgUlVOX1BBU1Moc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLCBw
cm9ncmFtKTsKICAgICBSVU5fUEFTUyhzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aCwgcHJv
Z3JhbSk7Ci0gICAgUlVOX1BBU1Moc3ludGhlc2l6ZUNvbnN0cnVjdG9ycywgcHJvZ3JhbSk7CiAg
ICAgUlVOX1BBU1MocmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMsIHByb2dyYW0sIG5hbWVSZXNvbHZl
cik7CisgICAgUlVOX1BBU1Moc3ludGhlc2l6ZUNvbnN0cnVjdG9ycywgcHJvZ3JhbSk7CisgICAg
UlVOX1BBU1MocmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMsIHByb2dyYW0sIG5hbWVSZXNvbHZlcik7
CiAgICAgUlVOX1BBU1MoY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMsIHByb2dyYW0pOwogCiAgICAg
UlVOX1BBU1MoY2hlY2ssIHByb2dyYW0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFy
aWFibGVMaWZldGltZXMuY3BwCShyZXZpc2lvbiAyNDY0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgICAgIGF1dG8g
cmhzID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlKSk7CiAgICAgICAgIHJocy0+c2V0VHlwZSh2YXJpYWJs
ZS50eXBlKCktPmNsb25lKCkpOwotICAgICAgICByaHMtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgcmhzLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKICAgICAgICAgYXV0byBhc3Np
Z25tZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPih2YXJpYWJs
ZS5vcmlnaW4oKSwgV1RGTW92ZShsaHMpLCBXVEZNb3ZlKHJocykpOwogICAgICAgICBhc3NpZ25t
ZW50LT5zZXRUeXBlKHZhcmlhYmxlLnR5cGUoKS0+Y2xvbmUoKSk7CkBAIC0xMzYsNyArMTM2LDcg
QEAgcHVibGljOgogCiAgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGZ1bmN0aW9uRGVmaW5pdGlv
bi5vcmlnaW4oKSwgV1RGTW92ZShzdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZSkpOwogICAgICAgICAg
ICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1fcG9pbnRlclRvU3RydWN0VHlwZS0+
Y2xvbmUoKSk7Ci0gICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKyAg
ICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpS
aWdodFZhbHVlKCkpOwogCiAgICAgICAgICAgICBhdXRvIHBvaW50ZXJEZWNsYXJhdGlvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihmdW5jdGlvbkRlZmluaXRpb24u
b3JpZ2luKCksIEFTVDo6UXVhbGlmaWVycygpLAogICAgICAgICAgICAgICAgIG1fcG9pbnRlclRv
U3RydWN0VHlwZS0+Y2xvbmUoKSwgIndyYXBwZXIiX3MsIFdURjo6bnVsbG9wdCwgT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+KFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9u
KSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9w
ZXJ0eVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyNDY0MDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsNyArNjg3LDExIEBAIHZvaWQgUHJvcGVydHlS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8KICAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CiAgICAgICAgIH0KIAotICAgICAgICBy
ZXR1cm4ge3sgV1RGTW92ZShleHByZXNzaW9ucyksIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
bmV3VmFyaWFibGVSZWZlcmVuY2UoKSB9fTsKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5j
ZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsKKyAg
ICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KKworICAgICAgICByZXR1cm4ge3sgV1RG
TW92ZShleHByZXNzaW9ucyksICBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSB9fTsKICAgICB9
KTsKIAogICAgIGlmICghbW9kaWZ5UmVzdWx0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnku
dHh0CShyZXZpc2lvbiAyNDY0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw2ICs0
MzksOSBAQCBuYXRpdmUgdWludCBvcGVyYXRvcisodWludCwgdWludCk7CiBuYXRpdmUgYm9vbCBv
cGVyYXRvcjwoaW50LCBpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I8KHVpbnQsIHVpbnQpOwog
bmF0aXZlIGJvb2wgb3BlcmF0b3I8KGZsb2F0LCBmbG9hdCk7CituYXRpdmUgYm9vbCBvcGVyYXRv
cj09KGZsb2F0LCBmbG9hdCk7CituYXRpdmUgYm9vbCBvcGVyYXRvcj09KGludCwgaW50KTsKK25h
dGl2ZSBib29sIG9wZXJhdG9yPT0odGhyZWFkIGludCosIHRocmVhZCBpbnQqKTsKIG5hdGl2ZSBm
bG9hdCBvcGVyYXRvciooZmxvYXQsIGZsb2F0KTsKIAogbmF0aXZlIGJvb2wgb3BlcmF0b3IueChi
b29sMik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHJldmlz
aW9uIDI0NjQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUxICs0MSwx
MDUgQEAKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJX
SExTTFZpc2l0b3IuaCIKIAorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSAiV0hM
U0xBU1REdW1wZXIuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wg
ewogCitjbGFzcyBVbm5hbWVkVHlwZUtleSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5cGVLZXko
KSA9IGRlZmF1bHQ7CisgICAgVW5uYW1lZFR5cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKQorICAgIHsKKyAgICAgICAgbV90eXBlID0gYml0d2lzZV9jYXN0PEFTVDo6VW5uYW1l
ZFR5cGUqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKKyAgICB9CisKKyAgICBVbm5hbWVk
VHlwZUtleShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB0eXBlKQorICAgICAgICA6IG1fdHlwZSgm
dHlwZSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4g
IW1fdHlwZTsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgPT0gYml0d2lzZV9jYXN0PEFTVDo6VW5uYW1lZFR5cGUqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDEpKTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV90eXBlLT5oYXNoKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFVubmFtZWRUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAqbV90eXBlID09ICpvdGhlci5tX3R5cGU7CisgICAgfQorCisgICAgQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEFTVDo6VW5uYW1l
ZFR5cGUmPigqbV90eXBlKTsgfQorCisgICAgc3RydWN0IEhhc2ggeworICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBVbm5hbWVkVHlwZUtleSYga2V5KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFVubmFtZWRUeXBlS2V5JiBhLCBjb25zdCBVbm5hbWVkVHlwZUtleSYg
YikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVl
OworICAgIH07CisKKyAgICBzdHJ1Y3QgVHJhaXRzIDogcHVibGljIFdURjo6U2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPFVubmFtZWRUeXBlS2V5PiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0
eVZhbHVlKGNvbnN0IFVubmFtZWRUeXBlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5pc0VtcHR5VmFs
dWUoKTsgfQorICAgIH07CisKK3ByaXZhdGU6CisgICAgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSog
bV90eXBlIHsgbnVsbHB0ciB9OworfTsKKwogY2xhc3MgRmluZEFsbFR5cGVzIDogcHVibGljIFZp
c2l0b3IgewogcHVibGljOgogICAgIH5GaW5kQWxsVHlwZXMoKSA9IGRlZmF1bHQ7CiAKICAgICB2
b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKSBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKHBvaW50ZXJUeXBlKTsKKyAgICAgICAgbV91
bm5hbWVkVHlwZXMuYWRkKFVubmFtZWRUeXBlS2V5IHsgcG9pbnRlclR5cGUgfSk7CiAgICAgICAg
IFZpc2l0b3I6OnZpc2l0KHBvaW50ZXJUeXBlKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpIG92ZXJyaWRlCiAgICAg
ewotICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAg
ICAgICAgbV91bm5hbWVkVHlwZXMuYWRkKFVubmFtZWRUeXBlS2V5IHsgYXJyYXlSZWZlcmVuY2VU
eXBlIH0pOwogICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVJlZmVyZW5jZVR5cGUpOwogICAg
IH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAgICAg
ICBtX3VubmFtZWRUeXBlcy5hZGQoVW5uYW1lZFR5cGVLZXkgeyBhcnJheVR5cGUgfSk7CiAgICAg
ICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5VHlwZSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRp
b24pOworICAgICAgICBhcHBlbmROYW1lZFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKICAg
ICAgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKICAgICB9CiAKICAg
ICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlv
bikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQoc3RydWN0dXJl
RGVmaW5pdGlvbik7CisgICAgICAgIGFwcGVuZE5hbWVkVHlwZShzdHJ1Y3R1cmVEZWZpbml0aW9u
KTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CiAgICAgfQog
CiAgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChu
YXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICBhcHBlbmROYW1lZFR5cGUobmF0aXZlVHlw
ZURlY2xhcmF0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQobmF0aXZlVHlwZURlY2xhcmF0
aW9uKTsKICAgICB9CiAKLSAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVu
bmFtZWRUeXBlPj4gdGFrZVVubmFtZWRUeXBlcygpCisgICAgSGFzaFNldDxVbm5hbWVkVHlwZUtl
eSwgVW5uYW1lZFR5cGVLZXk6Okhhc2gsIFVubmFtZWRUeXBlS2V5OjpUcmFpdHM+IHRha2VVbm5h
bWVkVHlwZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bm5hbWVkVHlwZXMp
OwogICAgIH0KQEAgLTk2LDcgKzE1MCwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiBtX3Vu
bmFtZWRUeXBlczsKKyAgICB2b2lkIGFwcGVuZE5hbWVkVHlwZShBU1Q6Ok5hbWVkVHlwZSYgdHlw
ZSkKKyAgICB7CisvLyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGZvciAoYXV0byYgZW50
cnkgOiBtX25hbWVkVHlwZXMpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgmZW50cnkuZ2V0
KCkudW5pZnlOb2RlKCkgIT0gJnR5cGUudW5pZnlOb2RlKCkpOworLy8jZW5kaWYKKyAgICAgICAg
bV9uYW1lZFR5cGVzLmFwcGVuZCh0eXBlKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PFVubmFtZWRU
eXBlS2V5LCBVbm5hbWVkVHlwZUtleTo6SGFzaCwgVW5uYW1lZFR5cGVLZXk6OlRyYWl0cz4gbV91
bm5hbWVkVHlwZXM7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+PiBtX25hbWVkVHlwZXM7CiB9OwogCkBAIC0xMDksMTQgKzE3MiwxNSBAQCBib29sIHN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvCiAKICAgICBib29sIGlzT3BlcmF0b3Ig
PSB0cnVlOwogCi0gICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IHVubmFtZWRUeXBlcykgewot
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgZm9yIChhdXRvJiB1bm5hbWVkVHlw
ZUtleSA6IHVubmFtZWRUeXBlcykgeworICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IHVubmFt
ZWRUeXBlS2V5LnVubmFtZWRUeXBlKCk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlv
biA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4o
dW5uYW1lZFR5cGUub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKICAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1
dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksICJvcGVy
YXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVy
YXRvcikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0
cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUu
b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5
cGUuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
OjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUo
Y29weUNvbnN0cnVjdG9yKSk7CiAKLSAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9z
dHIsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9y
KSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3Ry
dWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlw
ZS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
KCksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogICAgICAgICBpZiAoIXByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgJKHJldmlz
aW9uIDI0NjQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxNSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0aGlzLT5CYXNlOjpoYXNoKCkgXiBTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVMaXRlcmFsSGFzaCgiYXJyYXkiKTsKICAgICB9CiAKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVW5uYW1lZFR5cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKCFpczxBcnJheVJlZmVyZW5jZVR5cGU+KG90aGVyKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8
QXJyYXlSZWZlcmVuY2VUeXBlPihvdGhlcikuYWRkcmVzc1NwYWNlKCkKKyAgICAgICAgICAgICYm
IGVsZW1lbnRUeXBlKCkgPT0gZG93bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlPihvdGhlcikuZWxl
bWVudFR5cGUoKTsKKyAgICB9CisKIHByaXZhdGU6CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAkocmV2aXNpb24gMjQ2NDA0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2gobV9u
dW1FbGVtZW50cykgXiBtX2VsZW1lbnRUeXBlLT5oYXNoKCk7CiAgICAgfQogCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFVubmFtZWRUeXBlJiBvdGhlcikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmICghaXM8QXJyYXlUeXBlPihvdGhlcikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIG51bUVsZW1lbnRzKCkgPT0gZG93bmNhc3Q8QXJyYXlU
eXBlPihvdGhlcikubnVtRWxlbWVudHMoKQorICAgICAgICAgICAgJiYgdHlwZSgpID09IGRvd25j
YXN0PEFycmF5VHlwZT4ob3RoZXIpLnR5cGUoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgVW5p
cXVlUmVmPFVubmFtZWRUeXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVuc2lnbmVkIG1fbnVtRWxl
bWVudHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xQb2ludGVyVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgJKHJldmlzaW9uIDI0NjQwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHRoaXMtPkJhc2U6Omhhc2goKSBeIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoKCJw
b2ludGVyIik7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVubmFtZWRUeXBl
JiBvdGhlcikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghaXM8UG9pbnRlclR5
cGU+KG90aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4g
YWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8UG9pbnRlclR5cGU+KG90aGVyKS5hZGRyZXNzU3Bh
Y2UoKQorICAgICAgICAgICAgJiYgZWxlbWVudFR5cGUoKSA9PSBkb3duY2FzdDxQb2ludGVyVHlw
ZT4ob3RoZXIpLmVsZW1lbnRUeXBlKCk7CisgICAgfQorCiBwcml2YXRlOgogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFR5cGVSZWZlcmVuY2UuaAkocmV2aXNpb24gMjQ2NDA0KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewpAQCAtMTA0LDkgKzEw
NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSB1c2UgdGhpcyBm
dW5jdGlvbiBhZnRlciB0aGUgbmFtZSByZXNvbHZlciBydW5zLgogICAgICAgICAvLyBSZWx5aW5n
IG9uIGhhdmluZyBhIHJlc29sdmVkIHR5cGUgc2ltcGxpZmllcyB0aGlzIGltcGxlbWVudGF0aW9u
LgogICAgICAgICBBU1NFUlQobV9yZXNvbHZlZFR5cGUpOworICAgICAgICAvL2RhdGFMb2dMbiht
X25hbWUpOworICAgICAgICAvL2RhdGFMb2dMbigidGhpcyA9ICIsIFJhd1BvaW50ZXIodGhpcykp
OwogICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPGNvbnN0IFR5cGUqPjo6aGFzaCgmdW5pZnlO
b2RlKCkpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZSYg
b3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9yZXNvbHZlZFR5
cGUpOworICAgICAgICBpZiAoIWlzPFR5cGVSZWZlcmVuY2U+KG90aGVyKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgcmV0dXJuICZ1bmlmeU5vZGUoKSA9PSAmZG93bmNh
c3Q8VHlwZVJlZmVyZW5jZT4ob3RoZXIpLnVuaWZ5Tm9kZSgpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1l
ZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCShyZXZpc2lvbiAyNDY0MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFVuaXF1ZVJlZjxV
bm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhh
c2goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1l
ZFR5cGUmKSBjb25zdCA9IDA7CiAKICAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25X
cml0ZXIuY3BwCShyZXZpc2lvbiAyNDY0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODgsOCArODgsMTggQEAgcHVibGljOgogICAgICAgICAsIG1fZnVuY3Rpb25NYXBwaW5nKGZ1
bmN0aW9uTWFwcGluZykKICAgICAgICAgLCBtX2xheW91dChsYXlvdXQpCiAgICAgeworICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoCisgICAgICAgICAgICAidGVtcGxh
dGUgPHR5cGVuYW1lIFQ+XG4iCisgICAgICAgICAgICAiaW5saW5lIHZvaWQgIiwgbWVtc2V0WmVy
b0Z1bmN0aW9uTmFtZSwgIih0aHJlYWQgVCYgdmFsdWUpXG4iCisgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgIiAgICB0aHJlYWQgY2hhciogcHRyID0gc3RhdGljX2Nhc3Q8dGhyZWFkIGNo
YXIqPihzdGF0aWNfY2FzdDx0aHJlYWQgdm9pZCo+KCZ2YWx1ZSkpO1xuIgorICAgICAgICAgICAg
IiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihUKTsgKytpKVxuIgorICAgICAgICAg
ICAgIiAgICAgICAgcHRyW2ldID0gMDtcbiIKKyAgICAgICAgICAgICJ9XG4iKSk7CiAgICAgfQog
CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBtZW1zZXRaZXJvRnVuY3Rpb25OYW1l
ID0gIm1lbXNldFplcm8iOworCiAgICAgdmlydHVhbCB+RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
KCkgPSBkZWZhdWx0OwogCiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gbV9zdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7IH0KQEAgLTE1MywxMiArMTYzLDQxIEBAIHByb3RlY3RlZDoKICAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInZhcmlhYmxlIiwgbV92YXJpYWJsZUNvdW50KyspOwog
ICAgIH0KIAorICAgIHN0cnVjdCBTdGFja0l0ZW0geworICAgICAgICBTdHJpbmcgdmFsdWU7Cisg
ICAgICAgIFN0cmluZyBsZWZ0VmFsdWU7CisgICAgfTsKKworICAgIHZvaWQgYXBwZW5kUmlnaHRW
YWx1ZShBU1Q6OkV4cHJlc3Npb24mLCBTdHJpbmcgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0
YWNrLmFwcGVuZCh7IFdURk1vdmUodmFsdWUpLCBTdHJpbmcoKSB9KTsKKyAgICB9CisKKyAgICB2
b2lkIGFwcGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFN0cmluZyB2
YWx1ZSwgU3RyaW5nIGxlZnRWYWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZXhw
cmVzc2lvbiwgZXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSk7
CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92ZSh2YWx1ZSksIFdURk1vdmUobGVmdFZh
bHVlKSB9KTsKKyAgICB9CisKKyAgICBTdHJpbmcgdGFrZUxhc3RWYWx1ZSgpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9zdGFjay5sYXN0KCkudmFsdWUpOworICAgICAgICByZXR1cm4gbV9zdGFj
ay50YWtlTGFzdCgpLnZhbHVlOworICAgIH0KKworICAgIFN0cmluZyB0YWtlTGFzdExlZnRWYWx1
ZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9zdGFjay5sYXN0KCkubGVmdFZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKS5sZWZ0VmFsdWU7CisgICAgfQorCiAgICAg
SW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOwogICAgIFR5cGVOYW1lciYgbV90eXBlTmFtZXI7CiAg
ICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBtX2Z1bmN0aW9u
TWFwcGluZzsKICAgICBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiosIFN0cmluZz4g
bV92YXJpYWJsZU1hcHBpbmc7CiAgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gbV9zdGFjazsKKworICAgIFZlY3RvcjxTdGFja0l0ZW0+IG1fc3Rh
Y2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gbV9lbnRyeVBv
aW50U2NhZmZvbGRpbmc7CiAgICAgTGF5b3V0JiBtX2xheW91dDsKICAgICB1bnNpZ25lZCBtX3Zh
cmlhYmxlQ291bnQgeyAwIH07CkBAIC0xNjksNyArMjA4LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9u
TWFwcGluZy5maW5kKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKICAgICBBU1NFUlQoaXRl
cmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQod3JpdGVOYXRpdmVGdW5jdGlvbihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBpdGVy
YXRvci0+dmFsdWUsIG1faW50cmluc2ljcywgbV90eXBlTmFtZXIpKTsKKyAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKHdyaXRlTmF0aXZlRnVuY3Rpb24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biwgaXRlcmF0b3ItPnZhbHVlLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5hbWVyLCBtZW1zZXRaZXJv
RnVuY3Rpb25OYW1lKSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQpAQCAtMjQ2LDcg
KzI4NSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25T
dGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCiB7CiAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lv
bigpKTsKLSAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFRoZSBzdGF0ZW1lbnQgaXMgYWxyZWFk
eSBlZmZlY3RmdWwsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVz
dWx0LgorICAgIHRha2VMYXN0VmFsdWUoKTsgLy8gVGhlIHN0YXRlbWVudCBpcyBhbHJlYWR5IGVm
ZmVjdGZ1bCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQu
CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZhbGx0aHJv
dWdoJikKQEAgLTI2NCw3ICszMDMsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
ZW1pdExvb3AoCiAKICAgICBpZiAobG9vcENvbmRpdGlvbkxvY2F0aW9uID09IExvb3BDb25kaXRp
b25Mb2NhdGlvbjo6QmVmb3JlQm9keSAmJiBjb25kaXRpb25FeHByZXNzaW9uKSB7CiAgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqY29uZGl0aW9uRXhwcmVzc2lvbik7Ci0gICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCks
ICIpIGJyZWFrO1xuIikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoImlmICghIiwgdGFrZUxhc3RWYWx1ZSgpLCAiKSBicmVhaztcbiIpKTsKICAgICB9CiAKICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkbyB7XG4iKTsKQEAgLTI3NiwxMiArMzE1LDEyIEBA
IHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjplbWl0TG9vcCgKICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KCppbmNyZW1lbnQpOwogICAgICAgICAvLyBFeHByZXNzaW9uIHJlc3VsdHMg
Z2V0IHB1c2hlZCB0byBtX3N0YWNrLiBXZSBkb24ndCB1c2UgdGhlIHJlc3VsdAogICAgICAgICAv
LyBvZiBpbmNyZW1lbnQsIHNvIHdlIGRpc3BlbnNlIG9mIHRoYXQgbm93LgotICAgICAgICBtX3N0
YWNrLnRha2VMYXN0KCk7CisgICAgICAgIHRha2VMYXN0VmFsdWUoKTsKICAgICB9CiAKICAgICBp
ZiAobG9vcENvbmRpdGlvbkxvY2F0aW9uID09IExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QWZ0ZXJC
b2R5ICYmIGNvbmRpdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCpjb25kaXRpb25FeHByZXNzaW9uKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7Cisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCB0YWtlTGFz
dFZhbHVlKCksICIpIGJyZWFrO1xuIikpOwogICAgIH0KIAogICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoIn0gXG4iKTsKQEAgLTMwNSw3ICszNDQsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0ZW1lbnQp
OwogICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgewog
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbik7Ci0gICAgICAgIG1fc3RhY2su
dGFrZUxhc3QoKTsgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1
bHQuCisgICAgICAgIHRha2VMYXN0VmFsdWUoKTsgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZyB3aXRoIHRoZSByZXN1bHQuCiAgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7
CiAKICAgICBlbWl0TG9vcChMb29wQ29uZGl0aW9uTG9jYXRpb246OkJlZm9yZUJvZHksIGZvckxv
b3AuY29uZGl0aW9uKCksIGZvckxvb3AuaW5jcmVtZW50KCksIGZvckxvb3AuYm9keSgpKTsKQEAg
LTMxNSw3ICszNTQsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
CiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYg
aWZTdGF0ZW1lbnQpCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRp
dGlvbmFsKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIs
IG1fc3RhY2sudGFrZUxhc3QoKSwgIikge1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiaWYgKCIsIHRha2VMYXN0VmFsdWUoKSwgIikge1xuIikpOwogICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOwogICAgIGlmIChpZlN0YXRlbWVu
dC5lbHNlQm9keSgpKSB7CiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn0gZWxzZSB7
XG4iKTsKQEAgLTMzMCwxMCArMzY5LDEwIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1QKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZXR1cm5TdGF0ZW1lbnQu
dmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZykgewogICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV9lbnRyeVBvaW50U2NhZmZvbGRpbmct
PnBhY2sobV9zdGFjay50YWtlTGFzdCgpLCB2YXJpYWJsZU5hbWUpKTsKKyAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnBhY2sodGFrZUxh
c3RWYWx1ZSgpLCB2YXJpYWJsZU5hbWUpKTsKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
InJldHVybiAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInJldHVybiAiLCB0YWtlTGFzdFZhbHVlKCks
ICI7XG4iKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInJl
dHVybjtcbiIpOwogfQpAQCAtMzQyLDcgKzM4MSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1QKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVt
ZW50LnZhbHVlKCkpOwogCi0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJz
d2l0Y2ggKCIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgeyIpKTsKKyAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN3aXRjaCAoIiwgdGFrZUxhc3RWYWx1ZSgpLCAiKSB7Iikp
OwogICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNl
cygpKQogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZSk7CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CkBAIC0zNzUsNyArNDE0LDcgQEAgdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoaW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkp
OwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUs
ICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAi
PigiLCBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVu
ZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoaW50ZWdlckxpdGVyYWwsIHZh
cmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCkBAIC0z
ODMsNyArNDIyLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAog
ICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAg
YXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwudmFsdWUoKSwgIik7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1l
KTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwsIHZhcmlhYmxl
TmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZs
b2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQpAQCAtMzkxLDcgKzQzMCw3IEBAIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZsb2F0TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7
CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwg
JyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+
KCIsIGZsb2F0TGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2
YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoZmxvYXRMaXRlcmFsLCB2YXJpYWJs
ZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpO
dWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpCkBAIC00MDgsNyArNDQ3LDcgQEAgdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGVsc2UKICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZCgibnVsbHB0ciIpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIjtc
biIpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRW
YWx1ZShudWxsTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKQpA
QCAtNDE2LDcgKzQ1NSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1QKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwog
ICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KGJvb2xlYW5MaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0
YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgYm9vbGVhbkxpdGVyYWwudmFsdWUo
KSA/ICJ0cnVlIiA6ICJmYWxzZSIsICIpO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShib29sZWFuTGl0ZXJhbCwgdmFyaWFibGVO
YW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpCkBAIC00MjYs
NyArNDY1LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAg
IGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0
byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
ICIsIG1hbmdsZWRUeXBlTmFtZSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1l
cmF0aW9uTWVtYmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIo
KSksICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBl
bmRSaWdodFZhbHVlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0K
IAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RXhwcmVzc2lvbiYg
ZXhwcmVzc2lvbikKQEAgLTQzNCwzNyArNDczLDM5IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1QKICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKIH0KIAot
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYp
Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9u
JiBkb3RFeHByZXNzaW9uKQogewogICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxyZWFk
eS4KICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NTc4OCBSZXBsYWNlIHRoaXMgd2l0aCBBU1NFUlRfTk9UX1JFQUNIRUQoKS4KICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIG1fc3RhY2suYXBwZW5kKCJkdW1teSIpOworICAgIGFwcGVuZFJp
Z2h0VmFsdWUoZG90RXhwcmVzc2lvbiwgImR1bW15Iik7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Okdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlJiBnbG9iYWxW
YXJpYWJsZVJlZmVyZW5jZSkKIHsKLSAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpOworICAgIGF1dG8gdmFsdWVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgYXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2UuYmFzZSgpKTsKLSAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInRocmVhZCAiLCBtYW5nbGVkVHlwZU5hbWUs
ICImICIsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIi0+IiwgbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxlUmVm
ZXJlbmNlLnN0cnVjdEZpZWxkKCkpLCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ0aHJlYWQg
IiwgbWFuZ2xlZFR5cGVOYW1lLCAiKiAiLCBwb2ludGVyTmFtZSwgIiA9ICYiLCB0YWtlTGFzdFZh
bHVlKCksICItPiIsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudChn
bG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5zdHJ1Y3RGaWVsZCgpKSwgIjtcbiIpKTsKKyAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhbHVl
TmFtZSwgIiA9ICIsICIqIiwgcG9pbnRlck5hbWUsICI7XG4iKSk7CisgICAgYXBwZW5kTGVmdFZh
bHVlKGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLCB2YWx1ZU5hbWUsIHBvaW50ZXJOYW1lKTsKIH0K
IAotdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNz
aW9uJikKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkluZGV4RXhw
cmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQogewogICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2Vy
ZWQgYWxyZWFkeS4KICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc4OCBSZXBsYWNlIHRoaXMgd2l0aCBBU1NFUlRfTk9UX1JFQUNIRUQoKS4K
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIG1fc3RhY2suYXBwZW5kKCJkdW1teSIpOworICAg
IGFwcGVuZFJpZ2h0VmFsdWUoaW5kZXhFeHByZXNzaW9uLCAiZHVtbXkiKTsKIH0KIAotdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uJikKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQogewogICAgIC8vIFRo
aXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxyZWFkeS4KICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc4OCBSZXBsYWNlIHRoaXMgd2l0aCBBU1NF
UlRfTk9UX1JFQUNIRUQoKS4KICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIG1fc3RhY2suYXBw
ZW5kKCJkdW1teSIpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUocHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLCAiZHVtbXkiKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKQEAgLTQ3Niw3
ICs1MTcsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjAg
SW1wbGVtZW50IHF1YWxpZmllcnMuCiAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlh
bGl6ZXIoKSkgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRp
b24uaW5pdGlhbGl6ZXIoKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7
XG4iKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKSwgJyAn
LCB2YXJpYWJsZU5hbWUsICIgPSAiLCB0YWtlTGFzdFZhbHVlKCksICI7XG4iKSk7CiAgICAgfSBl
bHNlCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKSwgJyAnLCB2
YXJpYWJsZU5hbWUsICI7XG4iKSk7CiB9CkBAIC00ODQsMTEgKzUyNSwxMSBAQCB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Np
b24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQo
KSk7Ci0gICAgYXV0byBsZWZ0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIHBv
aW50ZXJOYW1lID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
YXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgYXV0byByaWdodE5hbWUgPSBtX3N0
YWNrLnRha2VMYXN0KCk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGxl
ZnROYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHJp
Z2h0TmFtZSk7CisgICAgYXV0byByaWdodE5hbWUgPSB0YWtlTGFzdFZhbHVlKCk7CisgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgcG9pbnRlck5hbWUsICIpICoi
LCBwb2ludGVyTmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKKyAgICBhcHBlbmRSaWdo
dFZhbHVlKGFzc2lnbm1lbnRFeHByZXNzaW9uLCByaWdodE5hbWUpOwogfQogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJl
c3Npb24pCkBAIC00OTYsNyArNTM3LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVAogICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50TmFtZXM7CiAgICAgZm9yIChh
dXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7CiAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7Ci0gICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5k
KG1fc3RhY2sudGFrZUxhc3QoKSk7CisgICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5kKHRha2VM
YXN0VmFsdWUoKSk7CiAgICAgfQogICAgIEFTU0VSVChjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigp
KTsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZChjYWxsRXhwcmVz
c2lvbi5mdW5jdGlvbigpKTsKQEAgLTUwOSw3ICs1NTAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoYXJn
dW1lbnROYW1lc1tpXSk7CiAgICAgfQogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4i
KTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFs
dWUoY2FsbEV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9u
KQpAQCAtNTE3LDI2ICs1NTgsMzAgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVAogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDog
Y29tbWFFeHByZXNzaW9uLmxpc3QoKSkgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhw
cmVzc2lvbik7Ci0gICAgICAgIHJlc3VsdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAg
cmVzdWx0ID0gdGFrZUxhc3RWYWx1ZSgpOwogICAgIH0KLSAgICBtX3N0YWNrLmFwcGVuZChyZXN1
bHQpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoY29tbWFFeHByZXNzaW9uLCByZXN1bHQpOwogfQog
CiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7Ci0gICAgYXV0byByaWdodCA9IG1f
c3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIHJpZ2h0ID0gdGFrZUxhc3RWYWx1ZSgpOwogICAg
IGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKEFTVDo6dG9TdHJpbmcoKmRlcmVmZXJlbmNl
RXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSksICcgJywgbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZl
ZFR5cGUoKSksICImICIsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCByaWdodCwgIjtcbiIpKTsKLSAg
ICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGF1dG8gcG9pbnRlck5hbWUgPSBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVz
c2lvbi5wb2ludGVyKCkucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHBvaW50ZXJOYW1lLCAiID0gIiwg
cmlnaHQsICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1f
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2
ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBwb2ludGVyTmFtZSwgIikgIiwgdmFyaWFibGVO
YW1lLCAiID0gKiIsIHJpZ2h0LCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygiZWxzZSAiLCBtZW1zZXRaZXJvRnVuY3Rpb25OYW1lLCAnKCcsIHZhcmlhYmxl
TmFtZSwgIik7XG4iKSk7CisgICAgYXBwZW5kTGVmdFZhbHVlKGRlcmVmZXJlbmNlRXhwcmVzc2lv
biwgdmFyaWFibGVOYW1lLCBwb2ludGVyTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lv
bikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsK
LSAgICBhdXRvIGxlZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBsZWZ0ID0gdGFr
ZUxhc3RWYWx1ZSgpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5y
aWdodCgpKTsKLSAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8g
cmlnaHQgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29s
dmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBsZWZ0KSk7CiAgICAgc3dpdGNo
IChsb2dpY2FsRXhwcmVzc2lvbi50eXBlKCkpIHsKQEAgLTU0OSwyMiArNTk0LDI0IEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhyaWdodCwgIjtcbiIpKTsK
LSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUo
bG9naWNhbEV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90
RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Np
b24ub3BlcmFuZCgpKTsKLSAgICBhdXRvIG9wZXJhbmQgPSBtX3N0YWNrLnRha2VMYXN0KCk7Cisg
ICAgYXV0byBvcGVyYW5kID0gdGFrZUxhc3RWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFibGVOYW1l
ID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShsb2dpY2FsTm90RXhw
cmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gISIsIG9wZXJh
bmQsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBl
bmRSaWdodFZhbHVlKGxvZ2ljYWxOb3RFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewogICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsK
LSAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAvLyBGSVhNRTogVGhp
cyBuZWVkcyB0byBiZSBtYWRlIHRvIHdvcmsuIEl0IHByb2JhYmx5IHNob3VsZCBiZSB1c2luZyB0
aGUgbGFzdCBsZWZ0VmFsdWUgdG9vLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTg4MzgKKyAgICBhdXRvIGxWYWx1ZSA9IHRha2VMYXN0VmFsdWUoKTsK
ICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAg
IGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGlmIChpczxB
U1Q6OlBvaW50ZXJUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKSkKQEAgLTU3NCwxNiArNjIxLDE2IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1QKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYoIiwgbFZhbHVlLCAiWzBd
KSwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICIgfTtcbiIpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwg
JyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYiLCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKLSAgICBt
X3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUobWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtl
UG9pbnRlckV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVy
RXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7Ci0gICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VM
YXN0KCk7CisgICAgYXV0byBwb2ludGVyID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
bWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUs
ICIgPSAmIiwgbFZhbHVlLCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFt
ZSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAn
ICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIHBvaW50ZXIsICI7XG4iKSk7CisgICAgYXBwZW5kUmln
aHRWYWx1ZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24mKQpAQCAtNTk1LDE5ICs2NDIsMTkgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6
VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7Ci0gICAgYXV0byBjaGVjayA9
IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGNoZWNrID0gdGFrZUxhc3RWYWx1ZSgpOwog
CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKHRlcm5hcnlFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICI7XG4iKSk7CiAKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
ImlmICgiLCBjaGVjaywgIikge1xuIikpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5
RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xu
IikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUs
ICIgPSAiLCB0YWtlTGFzdFZhbHVlKCksICI7XG4iKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgifSBlbHNlIHtcbiIpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVz
c2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOwor
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIgPSAi
LCB0YWtlTGFzdFZhbHVlKCksICI7XG4iKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuIik7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdo
dFZhbHVlKHRlcm5hcnlFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFi
bGVSZWZlcmVuY2UpCkBAIC02MTUsNyArNjYyLDkgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVAogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgp
KTsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZU1hcHBpbmcuZmluZCh2YXJpYWJsZVJl
ZmVyZW5jZS52YXJpYWJsZSgpKTsKICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV92YXJpYWJsZU1h
cHBpbmcuZW5kKCkpOwotICAgIG1fc3RhY2suYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAg
YXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidGhyZWFkICIsIG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSh2YXJpYWJsZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSksICIqICIsIHBv
aW50ZXJOYW1lLCAiID0gJiIsIGl0ZXJhdG9yLT52YWx1ZSwgIjtcbiIpKTsKKyAgICBhcHBlbmRM
ZWZ0VmFsdWUodmFyaWFibGVSZWZlcmVuY2UsIGl0ZXJhdG9yLT52YWx1ZSwgcG9pbnRlck5hbWUp
OwogfQogCiBTdHJpbmcgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpjb25zdGFudEV4cHJlc3Np
b25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZl
RnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lv
biAyNDY0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs
NyBAQCBzdGF0aWMgU3RyaW5nIGF0b21pY05hbWUoU3RyaW5nIGlucHV0KQogICAgICAgICByZXR1
cm4gImZldGNoX3hvciJfc3RyOwogfQogCi1TdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIFN0
cmluZyYgb3V0cHV0RnVuY3Rpb25OYW1lLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFt
ZXImIHR5cGVOYW1lcikKK1N0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgU3RyaW5nJiBvdXRw
dXRGdW5jdGlvbk5hbWUsIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5h
bWVyLCBjb25zdCBjaGFyKiBtZW1zZXRaZXJvRnVuY3Rpb25OYW1lKQogewogICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5p
c0Nhc3QoKSkgewpAQCAtODksOCArODksNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihB
U1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGlmICghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7XG4i
KSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwg
bWV0YWxSZXR1cm5OYW1lLCAiIHg7XG4iKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiICAgIHRocmVhZCBjaGFyKiBwdHIgPSBzdGF0aWNfY2FzdDx0aHJlYWQgY2hhcio+KHN0
YXRpY19jYXN0PHRocmVhZCB2b2lkKj4oJngpKTtcbiIpOwotICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9m
KCIsIG1ldGFsUmV0dXJuTmFtZSwgIik7ICsraSkgcHRyW2ldID0gMDtcbiIpKTsKKyAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtZW1zZXRaZXJvRnVu
Y3Rpb25OYW1lLCAiKHgpO1xuIikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiAgICByZXR1cm4geDtcbiIpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1c
biIpOwogICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKQEAgLTIx
NSwzOCArMjE0LDE0IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUK
ICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAKLSAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7Ci0g
ICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVsxXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUs
ICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwg
IiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbVtpXTtcbiIpKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOwotICAgIH0KLQogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAib3BlcmF0b3ImW10iKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CiAgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0
byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJltdLiJfc3Ry
Lmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
MU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gJih2LnBvaW50ZXJb
bl0pO1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Ci0gICAgICAg
IHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsKLSAgICAgICAg
QVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAz
KTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5
cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFd
LT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVsyXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcg
Jywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwg
bWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFtZXRlcjNOYW1lLCAiIHYpIHtc
biIpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIG1baV0g
PSB2O1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAg
cmV0dXJuIG07XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgaWYgKG4g
PCB2Lmxlbmd0aCkgcmV0dXJuICYodi5wb2ludGVyW25dKTtcbiIpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiICAgIHJldHVybiBudWxscHRyO1xuIik7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJ9XG4iKTsKICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRl
ci5oCShyZXZpc2lvbiAyNDY0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIE1ldGFsIHsKIAogY2xhc3MgVHlwZU5hbWVyOwogCi1T
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
LCBTdHJpbmcmIG91dHB1dEZ1bmN0aW9uTmFtZSwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYpOwor
U3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiwgU3RyaW5nJiBvdXRwdXRGdW5jdGlvbk5hbWUsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBj
b25zdCBjaGFyKiBtZW1zZXRaZXJvRnVuY3Rpb25OYW1lKTsKIAogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xUeXBlTmFtZXIuY3BwCShyZXZpc2lvbiAyNDY0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIFR5cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5p
dGlvCiAgICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3RydWN0ICIsIGFycmF5UmVmZXJlbmNl
VHlwZS5tYW5nbGVkTmFtZSgpLCAieyBcbiIpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiICAgICIsIHRvU3RyaW5nKGFycmF5UmVmZXJlbmNlVHlwZS5hZGRyZXNz
U3BhY2UoKSksICIgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgp
LCAiKiBwb2ludGVyO1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHVp
bnQgbGVuZ3RoO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdWludDMy
X3QgbGVuZ3RoO1xuIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGlzPEFycmF5VHlwZU5hbWVOb2RlPihiYXNlVHlw
ZU5hbWVOb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFs
Lm1tCShyZXZpc2lvbiAyNDY0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0JKHdvcmtpbmcgY29weSkKQEAg
LTkyLDggKzkyLDkgQEAgc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlRGltZW5zaW9ucwog
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIGNvbXB1dGVMaWJy
YXJ5ID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3TGlicmFyeVdpdGhTb3Vy
Y2U6d2hsc2xDb21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZSBvcHRpb25zOm5pbCBlcnJvcjomZXJy
b3JdKTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQogICAgICAgICBBU1NF
UlQoY29tcHV0ZUxpYnJhcnkpOworICAgICAgICBpZiAoIWNvbXB1dGVMaWJyYXJ5KQorICAgICAg
ICAgICAgTlNMb2coQCIlQCIsIGVycm9yKTsKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFy
aWFibGVzLCB0aGVyZSBzaG91bGQgYmUgbm8gd2FybmluZ3MsIHNvIHdlIHNob3VsZCBiZSBhYmxl
IHRvIEFTU0VSVCghZXJyb3IpIGhlcmUuCiAKICAgICAgICAgY29tcHV0ZUVudHJ5UG9pbnQgPSB3
aGxzbENvbXBpbGVSZXN1bHQtPm1hbmdsZWRFbnRyeVBvaW50TmFtZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFs
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCShyZXZpc2lvbiAyNDY0MDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVN
ZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDE3LDYgKzQxNyw4IEBAIHN0YXRpYyBib29sIHRy
eVNldEZ1bmN0aW9ucyhjb25zdCBjaGFyKiAKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKIAogICAgICAgICBBU1NFUlQodmVydGV4TGlicmFyeSk7CisgICAgICAgIGlmICghdmVy
dGV4TGlicmFyeSkKKyAgICAgICAgICAgIE5TTG9nKEAiJUAiLCBlcnJvcik7CiAgICAgICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzcxIE9u
Y2Ugd2UgemVyby1maWxsIHZhcmlhYmxlcywgdGhlcmUgc2hvdWxkIGJlIG5vIHdhcm5pbmdzLCBz
byB3ZSBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQoIWVycm9yKSBoZXJlLgogCiAgICAgICAgIGZy
YWdtZW50TGlicmFyeSA9IHZlcnRleExpYnJhcnk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDY0MDQp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBA
QAorMjAxOS0wNi0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbV0hMU0xdIEltcGxlbWVudCBvdXQtb2YtYm91bmRzIGFuZCBudWxscHRyIGJlaGF2aW9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg2MDAKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxNjY4ODUzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2Ut
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVy
ZW5jZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtb29iLWFjY2Vzcy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1vb2ItYWNjZXNzLmh0bWw6
IEFkZGVkLgorCiAyMDE5LTA2LTEzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+
CiAKICAgICAgICAgImRpc3BsYXk6IGNvbnRlbnRzIiBDb250ZW50IGNsaWNrIGRvZXMgbm90IHRy
aWdnZXIKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hv
dWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXBy
b2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1k
dXBsaWNhdGUtY3RvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIg
QEAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFT
UyByZXN1bHRzRmxvYXQzMkFycmF5WzBdIGlzIDIKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsx
XSBpcyA0CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gaXMgNgorUEFTUyByZXN1bHRzRmxv
YXQzMkFycmF5WzNdIGlzIDgKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSBpcyA1CitQQVNT
IHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gaXMgNgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzZd
IGlzIDcKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSBpcyA4CisKSW5kZXg6IExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxp
Y2F0ZS1jdG9ycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1k
dXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy5odG1sCShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMt
c2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBYWVogeworICAg
IGludCB4OworICAgIGludCB5OworICAgIGludCB6OworfQorCit0eXBlZGVmIFhZWjEgPSBYWVo7
Cit0eXBlZGVmIFhZWjIgPSBYWVo7Cit0eXBlZGVmIFhZWjMgPSBYWVo7CisKK1tudW10aHJlYWRz
KDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVm
ZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElE
KSB7CisgICAgdGhyZWFkIGludCogeDsKKyAgICB0aHJlYWQgaW50KiB5OworICAgIHRocmVhZCBm
bG9hdCogZjE7CisgICAgdGhyZWFkIGZsb2F0KiBmMjsKKyAgICBYWVoxIGE7CisgICAgWFlaMiBi
OworICAgIFhZWjMgYzsKKyAgICBpZiAoKnggPT0gKnkgJiYgeCA9PSB5ICYmIHggPT0gbnVsbCAm
JiBmMSA9PSBudWxsICYmICpmMSA9PSAwKSB7CisgICAgICAgIGJ1ZmZlclt1aW50KHRocmVhZElE
LngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsKKyAgICB9Cit9CitgOworbGV0
IHJlc3VsdHNGbG9hdDMyQXJyYXk7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJV
c2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2Fp
dCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7CisgICAg
YnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2
OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5
WzddID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNU
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplOiA0fTsKKyAgICBj
b25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5k
aW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3Vw
TGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8g
e30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1
bHRzQnVmZmVyLCAwLCBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4KTsKKyAgICBj
b25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNz
KCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAg
IGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIu
bWFwUmVhZEFzeW5jKCk7CisgICAgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJh
eVswXSIsICIyIik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMV0iLCAiNCIp
OworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzJdIiwgIjYiKTsKKyAgICBzaG91
bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVszXSIsICI4Iik7CisgICAgc2hvdWxkQmUoInJlc3Vs
dHNGbG9hdDMyQXJyYXlbNF0iLCAiNSIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFy
cmF5WzVdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs2XSIsICI3
Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbN10iLCAiOCIpOworICAgIHJl
c3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwg
ZnVuY3Rpb24oKSB7CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVy
ZWZlcmVuY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1udWxsLWRlcmVmZXJlbmNlLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gaXMgMgorUEFT
UyByZXN1bHRzRmxvYXQzMkFycmF5WzFdIGlzIDQKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsy
XSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gaXMgOAorUEFTUyByZXN1bHRzRmxv
YXQzMkFycmF5WzRdIGlzIDUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSBpcyA2CitQQVNT
IHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gaXMgNworUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5Wzdd
IGlzIDgKKwpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2Uu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVy
ZW5jZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxs
LWRlcmVmZXJlbmNlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qg
c2hhZGVyU291cmNlID0gYAordHlwZWRlZiBGb28gPSB0aHJlYWQgaW50KjsKK0ZvbyBnZXROdWxs
UHRyKCkKK3sKKyAgICByZXR1cm4gbnVsbDsKK30KKworc3RydWN0IFhZWiB7CisgICAgZmxvYXQg
eDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHo7Cit9CisKK1tudW10aHJlYWRzKDIsIDEsIDEp
XQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVn
aXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAg
Rm9vIHB0ciA9IG51bGw7CisgICAgKnB0ciA9IDQyOworICAgICpnZXROdWxsUHRyKCkgPSA0MjsK
KyAgICBpZiAoKnB0ciA9PSAwKSB7CisgICAgICAgIGlmIChwdHIgPT0gZ2V0TnVsbFB0cigpKSB7
CisgICAgICAgICAgICBpZiAoKmdldE51bGxQdHIoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAg
dGhyZWFkIFhZWiogeHl6UHRyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBYWVogeHl6OworICAg
ICAgICAgICAgICAgIHh5ei54ID0gMTsKKyAgICAgICAgICAgICAgICB4eXoueSA9IDE7CisgICAg
ICAgICAgICAgICAgeHl6LnogPSAxOworICAgICAgICAgICAgICAgIGlmICh4eXoueiA9PSAxLjAg
JiYgeHl6LnkgPT0gMS4wICYmIHh5ei56ID09IDEuMCkgeworICAgICAgICAgICAgICAgICAgICAq
eHl6UHRyID0geHl6OworICAgICAgICAgICAgICAgICAgICB4eXogPSAqeHl6UHRyOworICAgICAg
ICAgICAgICAgICAgICBpZiAoeHl6LnogPT0gMC4wICYmIHh5ei55ID09IDAuMCAmJiB4eXoueiA9
PSAwLjApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgmKmdldE51bGxQdHIoKSA9PSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCYqKCYqZ2V0TnVsbFB0cigp
KSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclt1aW50
KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CitgOworbGV0IHJlc3VsdHNGbG9hdDMyQXJyYXk7Cithc3luYyBmdW5jdGlv
biBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1
ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERl
dmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1v
ZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29t
cHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNo
YWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19
OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
ciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNv
bXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0
IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIp
OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5
WzFdID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVszXSA9IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7Cisg
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAg
IGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVm
ZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNv
bnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVm
ZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAs
IHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9y
ID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmdd
fTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91
cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRl
Q29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9C
dWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA4KTsKKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5j
b2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVs
aW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAx
KTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRC
dWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9
IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgcmVzdWx0c0Zsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRC
ZSgicmVzdWx0c0Zsb2F0MzJBcnJheVswXSIsICIyIik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNG
bG9hdDMyQXJyYXlbMV0iLCAiNCIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5
WzJdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVszXSIsICI4Iik7
CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbNF0iLCAiNSIpOworICAgIHNob3Vs
ZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzVdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0
c0Zsb2F0MzJBcnJheVs2XSIsICI3Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJy
YXlbN10iLCAiOCIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgfSk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFjY2Vzcy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gaXMgMgor
UEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzFdIGlzIDQKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJh
eVsyXSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gaXMgOAorUEFTUyByZXN1bHRz
RmxvYXQzMkFycmF5WzRdIGlzIDUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSBpcyA2CitQ
QVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gaXMgNworUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5
WzddIGlzIDgKKwpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFjY2Vzcy5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
CitbbnVtdGhyZWFkcygyLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmlj
ZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlz
cGF0Y2hUaHJlYWRJRCkgeworICAgIGJ1ZmZlclsxMzM3XSA9IDAuMDsKKyAgICBidWZmZXJbNDI0
MjQyNDJdID0gMC4wOworICAgIGlmIChidWZmZXJbMTAwMDAwXSA9PSAwLjApCisgICAgICAgIGJ1
ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIuMDsK
K30KK2A7CitsZXQgcmVzdWx0c0Zsb2F0MzJBcnJheTsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkg
eworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVy
KCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisK
KyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisK
KyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRp
bmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3Ig
PSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1
dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVs
aW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8
IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1
ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAyOwor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzNd
ID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVz
dWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5U
UkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0
c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemU6
IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDgpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
Q29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0
ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRH
cm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNv
bXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVz
dWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIHNob3VsZEJlKCJyZXN1bHRz
RmxvYXQzMkFycmF5WzBdIiwgIjIiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJh
eVsxXSIsICI0Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMl0iLCAiNiIp
OworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzNdIiwgIjgiKTsKKyAgICBzaG91
bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs0XSIsICI1Iik7CisgICAgc2hvdWxkQmUoInJlc3Vs
dHNGbG9hdDMyQXJyYXlbNV0iLCAiNiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFy
cmF5WzZdIiwgIjciKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs3XSIsICI4
Iik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICBzdGFydCgpLnRoZW4oZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30p
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372131</attachid>
            <date>2019-06-14 12:26:10 -0700</date>
            <delta_ts>2019-06-14 12:29:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>30206</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE5LTA2LTE0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gbm90IGdlbmVy
YXRlIGR1cGxpY2F0ZSBjb25zdHJ1Y3RvcnMvY29weSBjb25zdHJ1Y3RvcnMgaW4gc3ludGhlc2l6
ZUNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4NTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJpb3IgdG8gdGhpcyBwYXRjaCwgd2Ugd2VyZSBnZW5lcmF0aW5nIGR1cGxpY2F0ZSBj
b25zdHJ1Y3RvcnMgCisgICAgICAgIGZvciB1bm5hbWVkIHR5cGVzLiBUaGlzIGlzIGJhZCBmb3Ig
dHdvIHJlYXNvbnM6CisgICAgICAgIDEuIEl0J3MgaW5lZmZpY2llbnQsIHNpbmNlIHdlJ2QgZ2Vu
ZXJhdGUgYSBjb25zdHJ1Y3RvciBmb3IgZXZlcnkgcGxhY2UgaW4KKyAgICAgICAgdGhlIEFTVCB3
aGVyZSB3ZSdkIHZpc2l0IHRoaXMgdW5uYW1lZCB0eXBlLgorICAgICAgICAyLiBJdCBtYWRlIGl0
IGltcG9zc2libGUgdG8gcmVzb2x2ZSBmdW5jdGlvbiBvdmVybG9hZHMgdG8gY2FsbAorICAgICAg
ICB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gVGhpcyBtYWRlIGl0IHNvIHRoYXQgdGhlIGF1dG9J
bml0aWFsaXplVmFyaWFibGVzCisgICAgICAgIHBhc3Mgd291bGQgY3Jhc2ggaWYgd2UgZXZlciBn
ZW5lcmF0ZWQgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMKKyAgICAgICAgZm9yIHRo
ZSBzYW1lIHR5cGUuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhpcyBw
YXRjaCBzcGxpdHMgdXAgd2hhdCB1c2VkIHRvIGJlIHRoZSByZXNvbHZlTmFtZXNJbkZ1bmN0aW9u
cworICAgICAgICBwYXNzLiBQcmV2aW91c2x5LCB0aGlzIHBhc3Mgd291bGQgYm90aCByZXNvbHZl
IGNhbGxzIGFuZCByZXNvbHZlIHR5cGUgbmFtZXMuCisgICAgICAgIFN5bnRoZXNpemUgY29uc3Ry
dWN0b3JzIHdvdWxkIHJ1biBiZWZvcmUgdGhpcywgc2luY2UgcmVzb2x2aW5nIGNhbGxzIG1lYW50
IHdlCisgICAgICAgIG1heSByZXNvbHZlIGEgY2FsbCB0byBvbmUgb2YgdGhlc2Ugc3ludGhlc2l6
ZWQgY29uc3RydWN0b3JzLiBIb3dldmVyLCBzeW50aGVzaXplCisgICAgICAgIGNvbnN0cnVjdG9y
cyBub3cgbmVlZHMgdG8gdGVzdCBmb3IgdGhlIGVxdWFsaXR5IHVubmFtZWQgdHlwZXMsIHNvIGl0
IG5vdyByZXF1aXJlcworICAgICAgICBydW5uaW5nIHRoZSB0eXBlIHJlc29sdXRpb24gcGFydCBv
ZiByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyBiZWZvcmUgaXQgcnVucy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgcGF0Y2ggc3BsaXRzIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zIGludG8gdHdvIHBh
cnRzOgorICAgICAgICByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMgYW5kIHJlc29sdmVDYWxs
c0luRnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgU28gd2UgdXNlZCB0byBydW46CisgICAg
ICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlv
bnMKKyAgICAgICAgCisgICAgICAgIEFuZCBub3cgd2UgcnVuOgorICAgICAgICByZXNvbHZlVHlw
ZU5hbWVzSW5GdW5jdGlvbnMgCisgICAgICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAg
ICAgcmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMKKworICAgICAgICBUZXN0OiB3ZWJncHUvd2hsc2wt
ZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbAor
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBl
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNl
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpOYW1lUmVzb2x2ZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZl
Q2FsbHNJbkZ1bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xO
YW1lUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2ZXI6OnNl
dElzUmVzb2x2aW5nQ2FsbHMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3Jz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpVbm5hbWVkVHlwZUtleTo6VW5uYW1lZFR5
cGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5Ojppc0VtcHR5
VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5Ojpp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
VW5uYW1lZFR5cGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVu
bmFtZWRUeXBlS2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpVbm5hbWVkVHlwZUtleTo6dW5uYW1lZFR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlVubmFtZWRUeXBlS2V5OjpIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpVbm5hbWVkVHlwZUtleTo6SGFzaDo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlVubmFtZWRUeXBlS2V5OjpUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6RmluZEFsbFR5cGVzOjp0YWtlVW5uYW1lZFR5cGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpGaW5kQWxsVHlwZXM6OmFwcGVuZE5hbWVkVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUNvbnN0cnVjdG9ycyk6CisKIDIwMTktMDYtMTQgIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRm9s
bG93IHVwIHRvIHIyNDY0MzguIFRoaXMgcmVtb3ZlcyBhIGRlYnVnIGFzc2VydCB1bnRpbApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEluZmVyVHlwZXMuY3BwCShyZXZpc2lvbiAyNDY0MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSwyOCArNjEsNyBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VHlwZSYgdW5pCiAg
ICAgICAgIGF1dG8mIHVubmFtZWRUaGlzID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlUaGlzKTsKICAgICAgICAgYXV0byYgdW5uYW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4odW5pZnlPdGhlcik7CiAgICAgICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlUmVmZXJl
bmNlPih1bm5hbWVkVGhpcykgJiYgIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZE90aGVy
KSk7Ci0gICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8
QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZE90aGVyKSkgewotICAgICAgICAgICAgYXV0byYgcG9p
bnRlclRoaXMgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcyk7Ci0gICAg
ICAgICAgICBhdXRvJiBwb2ludGVyT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkT3RoZXIpOwotICAgICAgICAgICAgaWYgKHBvaW50ZXJUaGlzLmFkZHJlc3NTcGFjZSgp
ICE9IHBvaW50ZXJPdGhlci5hZGRyZXNzU3BhY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhwb2ludGVyVGhpcy5lbGVtZW50VHlw
ZSgpLCBwb2ludGVyT3RoZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcikpIHsKLSAgICAgICAgICAgIGF1dG8mIGFycmF5
UmVmZXJlbmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVk
VGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZU90aGVyID0gZG93bmNhc3Q8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7Ci0gICAgICAgICAgICBpZiAo
YXJyYXlSZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFycmF5UmVmZXJlbmNlT3RoZXIu
YWRkcmVzc1NwYWNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1lbnRUeXBlKCksIGFycmF5
UmVmZXJlbmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlz
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFt
ZWRPdGhlcikpIHsKLSAgICAgICAgICAgIGF1dG8mIGFycmF5VGhpcyA9IGRvd25jYXN0PEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBhcnJheU90aGVyID0g
ZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7Ci0gICAgICAgICAgICBpZiAo
YXJyYXlUaGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5udW1FbGVtZW50cygpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGFy
cmF5VGhpcy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB1bm5hbWVkVGhpcyA9PSB1bm5hbWVkT3RoZXI7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDI0NjQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOSBAQCBOYW1l
UmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYgCiAKIHZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiB7CisgICAgaWYgKG1f
aXNSZXNvbHZpbmdDYWxscykKKyAgICAgICAgcmV0dXJuOworCiAgICAgU2NvcGVkU2V0QWRkZXI8
QVNUOjpUeXBlUmVmZXJlbmNlKj4gYWRkZXIobV90eXBlUmVmZXJlbmNlcywgJnR5cGVSZWZlcmVu
Y2UpOwogICAgIGlmICghYWRkZXIuaXNOZXdFbnRyeSgpKSB7CiAgICAgICAgIHNldEVycm9yKCk7
CkBAIC04OCw2ICs5MSw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9u
RGUKICAgICBOYW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAg
TmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7CiAgICAgbmV3TmFt
ZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obV9jdXJyZW50RnVuY3Rpb24p
OworICAgIG5ld05hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKG1faXNSZXNvbHZpbmdD
YWxscyk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkp
OwogICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKSkKICAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0
ZXIpOwpAQCAtOTksNiArMTAzLDcgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Qmxv
Y2smIGJsbwogICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKICAg
ICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KTsKICAgICBuZXdOYW1l
UmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihtX2N1cnJlbnRGdW5jdGlvbik7
CisgICAgbmV3TmFtZVJlc29sdmVyLnNldElzUmVzb2x2aW5nQ2FsbHMobV9pc1Jlc29sdmluZ0Nh
bGxzKTsKICAgICBuZXdOYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoYmxvY2spOwogfQogCkBA
IC0xMDgsMTEgKzExMywxMyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRl
bWVuCiAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5h
bWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNv
bHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAg
ICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMp
OwogICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9k
eSgpKTsKICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgewogICAgICAgICBOYW1lQ29u
dGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAgICAgIE5hbWVSZXNvbHZlciBu
ZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0
Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgICAgIG5l
d05hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKG1faXNSZXNvbHZpbmdDYWxscyk7CiAg
ICAgICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVs
c2VCb2R5KCkpOwogICAgIH0KIH0KQEAgLTEyMyw2ICsxMzAsNyBAQCB2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmCiAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1f
bmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRl
eHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1f
Y3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxs
cyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CiB9CiAKQEAgLTEzMSw2ICsxMzksNyBAQCB2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vCiAgICAgTmFtZUNvbnRleHQgbmFtZUNv
bnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIo
bmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZp
bml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNv
bHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVSZXNvbHZlci5jaGVj
a0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKIH0KQEAgLTE0MCw2ICsxNDksNyBAQCB2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmCiAgICAgTmFtZUNvbnRleHQgbmFtZUNv
bnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIo
bmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZp
bml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNv
bHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVSZXNvbHZlci5WaXNp
dG9yOjp2aXNpdChmb3JMb29wKTsKIH0KIApAQCAtMTc0LDEyICsxODQsMTQgQEAgdm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZQogCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlz
aXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bikKIHsKLSAgICBpZiAoYXV0byogZ2V0dGVyRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRG
dW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uTmFtZSgpKSkK
LSAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlR2V0dGVyT3Zlcmxv
YWRzKCpnZXR0ZXJGdW5jdGlvbnMpOwotICAgIGlmIChhdXRvKiBzZXR0ZXJGdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0dGVy
RnVuY3Rpb25OYW1lKCkpKQotICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9z
c2libGVTZXR0ZXJPdmVybG9hZHMoKnNldHRlckZ1bmN0aW9ucyk7Ci0gICAgaWYgKGF1dG8qIGFu
ZGVyRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmFuZGVyRnVuY3Rpb25OYW1lKCkpKQotICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uc2V0UG9zc2libGVBbmRlck92ZXJsb2FkcygqYW5kZXJGdW5jdGlvbnMpOworICAg
IGlmIChtX2lzUmVzb2x2aW5nQ2FsbHMpIHsKKyAgICAgICAgaWYgKGF1dG8qIGdldHRlckZ1bmN0
aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5nZXR0ZXJGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uc2V0UG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKmdldHRlckZ1bmN0aW9ucyk7CisgICAg
ICAgIGlmIChhdXRvKiBzZXR0ZXJGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9u
cyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb25OYW1lKCkpKQorICAgICAg
ICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlU2V0dGVyT3ZlcmxvYWRz
KCpzZXR0ZXJGdW5jdGlvbnMpOworICAgICAgICBpZiAoYXV0byogYW5kZXJGdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJG
dW5jdGlvbk5hbWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0
UG9zc2libGVBbmRlck92ZXJsb2FkcygqYW5kZXJGdW5jdGlvbnMpOworICAgIH0KICAgICBWaXNp
dG9yOjp2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOwogfQogCkBAIC0yMTAsMjMgKzIy
MiwyNSBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzCiAKIHZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikK
IHsKLSAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVz
c2lvbi5uYW1lKCkpKQotICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpm
dW5jdGlvbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiB0eXBlcyA9
IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkgewotICAgICAg
ICAgICAgICAgIGlmICh0eXBlcy0+c2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKCJvcGVyYXRv
ciBjYXN0Il9zdHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5z
ZXRDYXN0RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgaWYgKG1faXNSZXNv
bHZpbmdDYWxscykgeworICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2Fkcygp
KSB7CisgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRG
dW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgICAgICBjYWxsRXhw
cmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYXV0byogdHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGNh
bGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVzLT5z
aXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9u
cyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKCJvcGVyYXRvciBjYXN0Il9zdHIpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKCp0
eXBlcylbMF0uZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByZXNz
aW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2Fkcygp
KSB7Ci0gICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFj
YWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICBWaXNpdG9yOjp2aXNp
dChjYWxsRXhwcmVzc2lvbik7CiB9CkBAIC0yNzgsNyArMjkyLDcgQEAgYm9vbCByZXNvbHZlTmFt
ZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHJl
c29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFt
ZVJlc29sdmVyKQorYm9vbCByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYgcHJv
Z3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRvJiBmdW5j
dGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAg
ICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbigmZnVuY3Rpb25EZWZp
bml0aW9uKTsKQEAgLTI5NSw2ICszMDksMjAgQEAgYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9u
cyhQcm9ncmFtJiBwcgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHJlc29sdmVDYWxsc0lu
RnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQor
eworICAgIG5hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKHRydWUpOworICAgIGZvciAo
YXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkp
IHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oJmZ1
bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlz
aXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIuc2V0
Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihudWxscHRyKTsKKyAgICBuYW1lUmVzb2x2ZXIuc2V0
SXNSZXNvbHZpbmdDYWxscyhmYWxzZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdITFNMCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
aAkocmV2aXNpb24gMjQ2NDM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBw
dWJsaWM6CiAgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOwog
ICAgIH0KIAorICAgIHZvaWQgc2V0SXNSZXNvbHZpbmdDYWxscyhib29sIGlzUmVzb2x2aW5nQ2Fs
bHMpIHsgbV9pc1Jlc29sdmluZ0NhbGxzID0gaXNSZXNvbHZpbmdDYWxsczsgfQorCiBwcml2YXRl
OgogICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CkBAIC02OCwxMCArNzAsMTIgQEAgcHJpdmF0
ZToKICAgICBOYW1lQ29udGV4dCYgbV9uYW1lQ29udGV4dDsKICAgICBIYXNoU2V0PEFTVDo6VHlw
ZVJlZmVyZW5jZSo+IG1fdHlwZVJlZmVyZW5jZXM7CiAgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24qIG1fY3VycmVudEZ1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9pc1Jlc29sdmlu
Z0NhbGxzIHsgZmFsc2UgfTsKIH07CiAKIGJvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFt
JiwgTmFtZVJlc29sdmVyJik7Ci1ib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0m
LCBOYW1lUmVzb2x2ZXImKTsKK2Jvb2wgcmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKFByb2dy
YW0mLCBOYW1lUmVzb2x2ZXImKTsKK2Jvb2wgcmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMoUHJvZ3Jh
bSYsIE5hbWVSZXNvbHZlciYpOwogCiB9IC8vIG5hbWVzcGFjZSBXSExTTAogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5j
cHAJKHJldmlzaW9uIDI0NjQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw4ICsxMjUsOSBAQCBz
dGF0aWMgT3B0aW9uYWw8UHJvZ3JhbT4gcHJlcGFyZVNoYXJlZChTCiAgICAgUlVOX1BBU1Moc3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycywgcHJvZ3JhbSk7CiAgICAgUlVOX1BBU1Moc3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLCBwcm9ncmFtKTsKICAgICBSVU5fUEFTUyhzeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aCwgcHJvZ3JhbSk7CisgICAgUlVOX1BBU1MocmVzb2x2ZVR5
cGVOYW1lc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOwogICAgIFJVTl9QQVNT
KHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMsIHByb2dyYW0pOwotICAgIFJVTl9QQVNTKHJlc29sdmVO
YW1lc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIFJVTl9QQVNTKHJl
c29sdmVDYWxsc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOwogICAgIFJVTl9Q
QVNTKGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zLCBwcm9ncmFtKTsKIAogICAgIFJVTl9QQVNTKGNo
ZWNrLCBwcm9ncmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cAkocmV2aXNpb24gMjQ2NDM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NDcgKzQ1LDgyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAor
Y2xhc3MgVW5uYW1lZFR5cGVLZXkgeworcHVibGljOgorICAgIFVubmFtZWRUeXBlS2V5KCkgPSBk
ZWZhdWx0OworICAgIFVubmFtZWRUeXBlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IGJpdHdpc2VfY2FzdDxBU1Q6OlVubmFtZWRUeXBl
Kj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7CisgICAgfQorCisgICAgVW5uYW1lZFR5cGVL
ZXkoQVNUOjpVbm5hbWVkVHlwZSYgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUoJnR5cGUpCisgICAg
eyB9CisKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3R5cGU7IH0K
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ID09IGJpdHdpc2VfY2FzdDxBU1Q6OlVubmFtZWRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PigxKSk7IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3R5cGUtPmhh
c2goKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZUtleSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICptX3R5cGUgPT0gKm90aGVyLm1fdHlwZTsgfQorICAgIEFTVDo6VW5u
YW1lZFR5cGUmIHVubmFtZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gKm1fdHlwZTsgfQorCisgICAg
c3RydWN0IEhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBVbm5hbWVk
VHlwZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFVubmFtZWRUeXBlS2V5JiBhLCBjb25zdCBVbm5hbWVkVHlwZUtleSYgYikg
eyByZXR1cm4gYSA9PSBiOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIH07CisKKyAgICBzdHJ1Y3QgVHJhaXRzIDogcHVi
bGljIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFVubmFtZWRUeXBlS2V5PiB7CisgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFVubmFtZWRUeXBlS2V5JiBrZXkpIHsg
cmV0dXJuIGtleS5pc0VtcHR5VmFsdWUoKTsgfQorICAgIH07CisKK3ByaXZhdGU6CisgICAgQVNU
OjpVbm5hbWVkVHlwZSogbV90eXBlIHsgbnVsbHB0ciB9OworfTsKKwogY2xhc3MgRmluZEFsbFR5
cGVzIDogcHVibGljIFZpc2l0b3IgewogcHVibGljOgogICAgIH5GaW5kQWxsVHlwZXMoKSA9IGRl
ZmF1bHQ7CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKHBvaW50ZXJUeXBl
KTsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYWRkKFVubmFtZWRUeXBlS2V5IHsgcG9pbnRlclR5
cGUgfSk7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KHBvaW50ZXJUeXBlKTsKICAgICB9CiAKICAg
ICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUp
IG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlSZWZl
cmVuY2VUeXBlKTsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYWRkKFVubmFtZWRUeXBlS2V5IHsg
YXJyYXlSZWZlcmVuY2VUeXBlIH0pOwogICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVJlZmVy
ZW5jZVR5cGUpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5
VHlwZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChhcnJh
eVR5cGUpOworICAgICAgICBtX3VubmFtZWRUeXBlcy5hZGQoVW5uYW1lZFR5cGVLZXkgeyBhcnJh
eVR5cGUgfSk7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5VHlwZSk7CiAgICAgfQogCiAg
ICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZp
bml0aW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChlbnVt
ZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBhcHBlbmROYW1lZFR5cGUoZW51bWVyYXRpb25E
ZWZpbml0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9u
KTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3Ry
dWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fbmFtZWRUeXBlcy5h
cHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGFwcGVuZE5hbWVkVHlwZShzdHJ1
Y3R1cmVEZWZpbml0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJlRGVmaW5p
dGlvbik7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9uYW1l
ZFR5cGVzLmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICBhcHBlbmROYW1l
ZFR5cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQobmF0
aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICB9CiAKLSAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gdGFrZVVubmFtZWRUeXBlcygpCisgICAgSGFzaFNl
dDxVbm5hbWVkVHlwZUtleSwgVW5uYW1lZFR5cGVLZXk6Okhhc2gsIFVubmFtZWRUeXBlS2V5OjpU
cmFpdHM+IHRha2VVbm5hbWVkVHlwZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURk1vdmUo
bV91bm5hbWVkVHlwZXMpOwogICAgIH0KQEAgLTk2LDcgKzEzMSwxNyBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5u
YW1lZFR5cGU+PiBtX3VubmFtZWRUeXBlczsKKyAgICB2b2lkIGFwcGVuZE5hbWVkVHlwZShBU1Q6
Ok5hbWVkVHlwZSYgdHlwZSkKKyAgICB7CisgICAgICAgIC8vIFRoZSB3YXkgd2Ugd2FsayB0aGUg
QVNUIGVuc3VyZXMgd2Ugc2hvdWxkIG5ldmVyIHZpc2l0IGEgbmFtZWQgdHlwZSB0d2ljZS4KKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX25hbWVkVHlw
ZXMpCisgICAgICAgICAgICBBU1NFUlQoJmVudHJ5LmdldCgpLnVuaWZ5Tm9kZSgpICE9ICZ0eXBl
LnVuaWZ5Tm9kZSgpKTsKKyNlbmRpZgorICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKHR5cGUp
OworICAgIH0KKworICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXksIFVubmFtZWRUeXBlS2V5OjpI
YXNoLCBVbm5hbWVkVHlwZUtleTo6VHJhaXRzPiBtX3VubmFtZWRUeXBlczsKICAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFtZWRUeXBlczsKIH07
CiAKQEAgLTEwOSwxNCArMTU0LDE1IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9n
cmFtJiBwcm8KIAogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAKLSAgICBmb3IgKGF1dG8m
IHVubmFtZWRUeXBlIDogdW5uYW1lZFR5cGVzKSB7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5u
YW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKKyAgICBmb3IgKGF1dG8mIHVubmFtZWRUeXBlS2V5IDogdW5uYW1lZFR5cGVzKSB7Cisg
ICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gdW5uYW1lZFR5cGVLZXkudW5uYW1lZFR5cGUoKTsK
KyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBh
cmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNs
YXJhdGlvbikpOwotICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNv
bnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
dW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CisgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgpLCAib3BlcmF0b3IgY2Fz
dCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsK
ICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKIAotICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUu
Z2V0KCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucygpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmNsb25lKCksICJvcGVyYXRvciBjYXN0
Il9zdHIsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3Ry
dWN0b3IpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAkocmV2aXNpb24gMjQ2NDM5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHRoaXMtPkJhc2U6Omhhc2goKSBeIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoKCJh
cnJheSIpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZSYg
b3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWlzPEFycmF5UmVmZXJl
bmNlVHlwZT4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJl
dHVybiBhZGRyZXNzU3BhY2UoKSA9PSBkb3duY2FzdDxBcnJheVJlZmVyZW5jZVR5cGU+KG90aGVy
KS5hZGRyZXNzU3BhY2UoKQorICAgICAgICAgICAgJiYgZWxlbWVudFR5cGUoKSA9PSBkb3duY2Fz
dDxBcnJheVJlZmVyZW5jZVR5cGU+KG90aGVyKS5lbGVtZW50VHlwZSgpOworICAgIH0KKwogcHJp
dmF0ZToKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCShyZXZpc2lvbiAyNDY0MzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
V1RGOjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFzaChtX251bUVsZW1lbnRzKSBeIG1fZWxlbWVudFR5
cGUtPmhhc2goKTsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1lZFR5
cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFpczxBcnJheVR5
cGU+KG90aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4g
bnVtRWxlbWVudHMoKSA9PSBkb3duY2FzdDxBcnJheVR5cGU+KG90aGVyKS5udW1FbGVtZW50cygp
CisgICAgICAgICAgICAmJiB0eXBlKCkgPT0gZG93bmNhc3Q8QXJyYXlUeXBlPihvdGhlcikudHlw
ZSgpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IG1fZWxl
bWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRl
clR5cGUuaAkocmV2aXNpb24gMjQ2NDM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGhpcy0+QmFzZTo6aGFzaCgpIF4gU3Ry
aW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2goInBvaW50ZXIiKTsKICAgICB9CiAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1lZFR5cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKCFpczxQb2ludGVyVHlwZT4ob3RoZXIpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBhZGRyZXNzU3BhY2UoKSA9PSBkb3duY2Fz
dDxQb2ludGVyVHlwZT4ob3RoZXIpLmFkZHJlc3NTcGFjZSgpCisgICAgICAgICAgICAmJiBlbGVt
ZW50VHlwZSgpID09IGRvd25jYXN0PFBvaW50ZXJUeXBlPihvdGhlcikuZWxlbWVudFR5cGUoKTsK
KyAgICB9CisKIHByaXZhdGU6CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCShy
ZXZpc2lvbiAyNDY0MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsMTUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPGNvbnN0IFR5cGUqPjo6aGFz
aCgmdW5pZnlOb2RlKCkpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5h
bWVkVHlwZSYgb3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9y
ZXNvbHZlZFR5cGUpOworICAgICAgICBpZiAoIWlzPFR5cGVSZWZlcmVuY2U+KG90aGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgcmV0dXJuICZ1bmlmeU5vZGUoKSA9
PSAmZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4ob3RoZXIpLnVuaWZ5Tm9kZSgpOworICAgIH0KKwog
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJn
dW1lbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVW5uYW1lZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCShyZXZpc2lvbiAyNDY0MzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFVu
aXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGhhc2goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29u
c3QgVW5uYW1lZFR5cGUmKSBjb25zdCA9IDA7CiAKICAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0
NjQzOCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEzIEBACisyMDE5LTA2LTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisg
ICAgICAgIFtXSExTTF0gRG8gbm90IGdlbmVyYXRlIGR1cGxpY2F0ZSBjb25zdHJ1Y3RvcnMvY29w
eSBjb25zdHJ1Y3RvcnMgaW4gc3ludGhlc2l6ZUNvbnN0cnVjdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTgwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtZHVwbGljYXRl
LXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3Qt
cHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbDogQWRkZWQuCisKIDIwMTktMDYtMTQgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dITFNMXSBJbXBsZW1lbnQg
b3V0LW9mLWJvdW5kcyBhbmQgbnVsbHB0ciBiZWhhdmlvcgpJbmRleDogTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0
b3JzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMtZXhwZWN0
ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNh
dGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gaXMg
MgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzFdIGlzIDQKK1BBU1MgcmVzdWx0c0Zsb2F0MzJB
cnJheVsyXSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gaXMgOAorUEFTUyByZXN1
bHRzRmxvYXQzMkFycmF5WzRdIGlzIDUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSBpcyA2
CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gaXMgNworUEFTUyByZXN1bHRzRmxvYXQzMkFy
cmF5WzddIGlzIDgKKwpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10
eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXBy
b2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRl
LWN0b3JzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAorc3RydWN0IFhZWiB7CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgaW50
IHo7Cit9CisKK3R5cGVkZWYgWFlaMSA9IFhZWjsKK3R5cGVkZWYgWFlaMiA9IFhZWjsKK3R5cGVk
ZWYgWFlaMyA9IFhZWjsKKworW251bXRocmVhZHMoMiwgMSwgMSldCitjb21wdXRlIHZvaWQgY29t
cHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0
aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICB0aHJlYWQgaW50KiB4OworICAg
IHRocmVhZCBpbnQqIHk7CisgICAgdGhyZWFkIGZsb2F0KiBmMTsKKyAgICB0aHJlYWQgZmxvYXQq
IGYyOworICAgIFhZWjEgYTsKKyAgICBYWVoyIGI7CisgICAgWFlaMyBjOworICAgIHRocmVhZCBp
bnRbXSBpbnRBcnJheVJlZjE7CisgICAgdGhyZWFkIGludFtdIGludEFycmF5UmVmMjsKKyAgICBp
ZiAoKnggPT0gKnkgJiYgeCA9PSB5ICYmIHggPT0gbnVsbCAmJiBmMSA9PSBudWxsICYmICpmMSA9
PSAwKSB7CisgICAgICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRo
cmVhZElELngpXSAqIDIuMDsKKyAgICB9Cit9CitgOworbGV0IHJlc3VsdHNGbG9hdDMyQXJyYXk7
Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2
aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFk
YXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3Rv
cmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBM
YXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGlu
ZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9
OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxp
bmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9Owor
ICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7
CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVm
ZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOwor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRd
ID0gNTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVs2XSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIu
dW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5T
VE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5n
ID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2Jp
bmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIg
PSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rl
ci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4KTsKKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NF
bmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5k
aXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAg
IGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZp
Y2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3Vs
dHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAg
cmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVy
KTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVswXSIsICIyIik7CisgICAgc2hv
dWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMV0iLCAiNCIpOworICAgIHNob3VsZEJlKCJyZXN1
bHRzRmxvYXQzMkFycmF5WzJdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJB
cnJheVszXSIsICI4Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbNF0iLCAi
NSIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzVdIiwgIjYiKTsKKyAgICBz
aG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs2XSIsICI3Iik7CisgICAgc2hvdWxkQmUoInJl
c3VsdHNGbG9hdDMyQXJyYXlbN10iLCAiOCIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsK
K30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgc3Rh
cnQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372134</attachid>
            <date>2019-06-14 12:29:32 -0700</date>
            <delta_ts>2019-06-17 18:57:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>30205</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE5LTA2LTE0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gbm90IGdlbmVy
YXRlIGR1cGxpY2F0ZSBjb25zdHJ1Y3RvcnMvY29weSBjb25zdHJ1Y3RvcnMgaW4gc3ludGhlc2l6
ZUNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4NTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJpb3IgdG8gdGhpcyBwYXRjaCwgd2Ugd2VyZSBnZW5lcmF0aW5nIGR1cGxpY2F0ZSBj
b25zdHJ1Y3RvcnMgCisgICAgICAgIGZvciB1bm5hbWVkIHR5cGVzLiBUaGlzIGlzIGJhZCBmb3Ig
dHdvIHJlYXNvbnM6CisgICAgICAgIDEuIEl0J3MgaW5lZmZpY2llbnQsIHNpbmNlIHdlJ2QgZ2Vu
ZXJhdGUgYSBjb25zdHJ1Y3RvciBmb3IgZXZlcnkgcGxhY2UgaW4KKyAgICAgICAgdGhlIEFTVCB3
aGVyZSB3ZSdkIHZpc2l0IHRoaXMgdW5uYW1lZCB0eXBlLgorICAgICAgICAyLiBJdCBtYWRlIGl0
IGltcG9zc2libGUgdG8gcmVzb2x2ZSBmdW5jdGlvbiBvdmVybG9hZHMgdG8gY2FsbAorICAgICAg
ICB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gVGhpcyBtYWRlIGl0IHNvIHRoYXQgdGhlIGF1dG9J
bml0aWFsaXplVmFyaWFibGVzCisgICAgICAgIHBhc3Mgd291bGQgY3Jhc2ggaWYgd2UgZXZlciBn
ZW5lcmF0ZWQgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMKKyAgICAgICAgZm9yIHRo
ZSBzYW1lIHR5cGUuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhpcyBw
YXRjaCBzcGxpdHMgdXAgd2hhdCB1c2VkIHRvIGJlIHRoZSByZXNvbHZlTmFtZXNJbkZ1bmN0aW9u
cworICAgICAgICBwYXNzLiBQcmV2aW91c2x5LCB0aGlzIHBhc3Mgd291bGQgYm90aCByZXNvbHZl
IGNhbGxzIGFuZCByZXNvbHZlIHR5cGUgbmFtZXMuCisgICAgICAgIFN5bnRoZXNpemUgY29uc3Ry
dWN0b3JzIHdvdWxkIHJ1biBiZWZvcmUgdGhpcywgc2luY2UgcmVzb2x2aW5nIGNhbGxzIG1lYW50
IHdlCisgICAgICAgIG1heSByZXNvbHZlIGEgY2FsbCB0byBvbmUgb2YgdGhlc2Ugc3ludGhlc2l6
ZWQgY29uc3RydWN0b3JzLiBIb3dldmVyLCBzeW50aGVzaXplCisgICAgICAgIGNvbnN0cnVjdG9y
cyBub3cgbmVlZHMgdG8gdGVzdCBmb3IgdGhlIGVxdWFsaXR5IHVubmFtZWQgdHlwZXMsIHNvIGl0
IG5vdyByZXF1aXJlcworICAgICAgICBydW5uaW5nIHRoZSB0eXBlIHJlc29sdXRpb24gcGFydCBv
ZiByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyBiZWZvcmUgaXQgcnVucy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgcGF0Y2ggc3BsaXRzIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zIGludG8gdHdvIHBh
cnRzOgorICAgICAgICByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMgYW5kIHJlc29sdmVDYWxs
c0luRnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgU28gd2UgdXNlZCB0byBydW46CisgICAg
ICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlv
bnMKKyAgICAgICAgCisgICAgICAgIEFuZCBub3cgd2UgcnVuOgorICAgICAgICByZXNvbHZlVHlw
ZU5hbWVzSW5GdW5jdGlvbnMgCisgICAgICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAg
ICAgcmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMKKworICAgICAgICBUZXN0OiB3ZWJncHUvd2hsc2wt
ZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbAor
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBl
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNl
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpOYW1lUmVzb2x2ZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZl
Q2FsbHNJbkZ1bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xO
YW1lUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2ZXI6OnNl
dElzUmVzb2x2aW5nQ2FsbHMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3Jz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpVbm5hbWVkVHlwZUtleTo6VW5uYW1lZFR5
cGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5Ojppc0VtcHR5
VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5Ojpp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
VW5uYW1lZFR5cGVLZXk6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVu
bmFtZWRUeXBlS2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpVbm5hbWVkVHlwZUtleTo6dW5uYW1lZFR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlVubmFtZWRUeXBlS2V5OjpIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpVbm5hbWVkVHlwZUtleTo6SGFzaDo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlVubmFtZWRUeXBlS2V5OjpUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6RmluZEFsbFR5cGVzOjp0YWtlVW5uYW1lZFR5cGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpGaW5kQWxsVHlwZXM6OmFwcGVuZE5hbWVkVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUNvbnN0cnVjdG9ycyk6CisKIDIwMTktMDYtMTQgIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRm9s
bG93IHVwIHRvIHIyNDY0MzguIFRoaXMgcmVtb3ZlcyBhIGRlYnVnIGFzc2VydCB1bnRpbApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEluZmVyVHlwZXMuY3BwCShyZXZpc2lvbiAyNDY0MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSwyOCArNjEsNyBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VHlwZSYgdW5pCiAg
ICAgICAgIGF1dG8mIHVubmFtZWRUaGlzID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlUaGlzKTsKICAgICAgICAgYXV0byYgdW5uYW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4odW5pZnlPdGhlcik7CiAgICAgICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlUmVmZXJl
bmNlPih1bm5hbWVkVGhpcykgJiYgIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZE90aGVy
KSk7Ci0gICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8
QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZE90aGVyKSkgewotICAgICAgICAgICAgYXV0byYgcG9p
bnRlclRoaXMgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcyk7Ci0gICAg
ICAgICAgICBhdXRvJiBwb2ludGVyT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkT3RoZXIpOwotICAgICAgICAgICAgaWYgKHBvaW50ZXJUaGlzLmFkZHJlc3NTcGFjZSgp
ICE9IHBvaW50ZXJPdGhlci5hZGRyZXNzU3BhY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhwb2ludGVyVGhpcy5lbGVtZW50VHlw
ZSgpLCBwb2ludGVyT3RoZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcikpIHsKLSAgICAgICAgICAgIGF1dG8mIGFycmF5
UmVmZXJlbmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVk
VGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZU90aGVyID0gZG93bmNhc3Q8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7Ci0gICAgICAgICAgICBpZiAo
YXJyYXlSZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFycmF5UmVmZXJlbmNlT3RoZXIu
YWRkcmVzc1NwYWNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1lbnRUeXBlKCksIGFycmF5
UmVmZXJlbmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlz
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFt
ZWRPdGhlcikpIHsKLSAgICAgICAgICAgIGF1dG8mIGFycmF5VGhpcyA9IGRvd25jYXN0PEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBhcnJheU90aGVyID0g
ZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7Ci0gICAgICAgICAgICBpZiAo
YXJyYXlUaGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5udW1FbGVtZW50cygpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGFy
cmF5VGhpcy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB1bm5hbWVkVGhpcyA9PSB1bm5hbWVkT3RoZXI7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDI0NjQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOSBAQCBOYW1l
UmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYgCiAKIHZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiB7CisgICAgaWYgKG1f
aXNSZXNvbHZpbmdDYWxscykKKyAgICAgICAgcmV0dXJuOworCiAgICAgU2NvcGVkU2V0QWRkZXI8
QVNUOjpUeXBlUmVmZXJlbmNlKj4gYWRkZXIobV90eXBlUmVmZXJlbmNlcywgJnR5cGVSZWZlcmVu
Y2UpOwogICAgIGlmICghYWRkZXIuaXNOZXdFbnRyeSgpKSB7CiAgICAgICAgIHNldEVycm9yKCk7
CkBAIC04OCw2ICs5MSw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9u
RGUKICAgICBOYW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAg
TmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7CiAgICAgbmV3TmFt
ZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obV9jdXJyZW50RnVuY3Rpb24p
OworICAgIG5ld05hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKG1faXNSZXNvbHZpbmdD
YWxscyk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkp
OwogICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKSkKICAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0
ZXIpOwpAQCAtOTksNiArMTAzLDcgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Qmxv
Y2smIGJsbwogICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKICAg
ICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KTsKICAgICBuZXdOYW1l
UmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihtX2N1cnJlbnRGdW5jdGlvbik7
CisgICAgbmV3TmFtZVJlc29sdmVyLnNldElzUmVzb2x2aW5nQ2FsbHMobV9pc1Jlc29sdmluZ0Nh
bGxzKTsKICAgICBuZXdOYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoYmxvY2spOwogfQogCkBA
IC0xMDgsMTEgKzExMywxMyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRl
bWVuCiAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5h
bWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNv
bHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAg
ICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMp
OwogICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9k
eSgpKTsKICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgewogICAgICAgICBOYW1lQ29u
dGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAgICAgIE5hbWVSZXNvbHZlciBu
ZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0
Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgICAgIG5l
d05hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKG1faXNSZXNvbHZpbmdDYWxscyk7CiAg
ICAgICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVs
c2VCb2R5KCkpOwogICAgIH0KIH0KQEAgLTEyMyw2ICsxMzAsNyBAQCB2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmCiAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1f
bmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRl
eHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1f
Y3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxs
cyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CiB9CiAKQEAgLTEzMSw2ICsxMzksNyBAQCB2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vCiAgICAgTmFtZUNvbnRleHQgbmFtZUNv
bnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIo
bmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZp
bml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNv
bHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVSZXNvbHZlci5jaGVj
a0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKIH0KQEAgLTE0MCw2ICsxNDksNyBAQCB2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmCiAgICAgTmFtZUNvbnRleHQgbmFtZUNv
bnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIo
bmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZp
bml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNv
bHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVSZXNvbHZlci5WaXNp
dG9yOjp2aXNpdChmb3JMb29wKTsKIH0KIApAQCAtMTc0LDEyICsxODQsMTQgQEAgdm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZQogCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlz
aXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bikKIHsKLSAgICBpZiAoYXV0byogZ2V0dGVyRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRG
dW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uTmFtZSgpKSkK
LSAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlR2V0dGVyT3Zlcmxv
YWRzKCpnZXR0ZXJGdW5jdGlvbnMpOwotICAgIGlmIChhdXRvKiBzZXR0ZXJGdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0dGVy
RnVuY3Rpb25OYW1lKCkpKQotICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9z
c2libGVTZXR0ZXJPdmVybG9hZHMoKnNldHRlckZ1bmN0aW9ucyk7Ci0gICAgaWYgKGF1dG8qIGFu
ZGVyRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmFuZGVyRnVuY3Rpb25OYW1lKCkpKQotICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uc2V0UG9zc2libGVBbmRlck92ZXJsb2FkcygqYW5kZXJGdW5jdGlvbnMpOworICAg
IGlmIChtX2lzUmVzb2x2aW5nQ2FsbHMpIHsKKyAgICAgICAgaWYgKGF1dG8qIGdldHRlckZ1bmN0
aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5nZXR0ZXJGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uc2V0UG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKmdldHRlckZ1bmN0aW9ucyk7CisgICAg
ICAgIGlmIChhdXRvKiBzZXR0ZXJGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9u
cyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb25OYW1lKCkpKQorICAgICAg
ICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlU2V0dGVyT3ZlcmxvYWRz
KCpzZXR0ZXJGdW5jdGlvbnMpOworICAgICAgICBpZiAoYXV0byogYW5kZXJGdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJG
dW5jdGlvbk5hbWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0
UG9zc2libGVBbmRlck92ZXJsb2FkcygqYW5kZXJGdW5jdGlvbnMpOworICAgIH0KICAgICBWaXNp
dG9yOjp2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOwogfQogCkBAIC0yMTAsMjMgKzIy
MiwyNSBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzCiAKIHZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikK
IHsKLSAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVz
c2lvbi5uYW1lKCkpKQotICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpm
dW5jdGlvbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiB0eXBlcyA9
IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkgewotICAgICAg
ICAgICAgICAgIGlmICh0eXBlcy0+c2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKCJvcGVyYXRv
ciBjYXN0Il9zdHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5z
ZXRDYXN0RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgaWYgKG1faXNSZXNv
bHZpbmdDYWxscykgeworICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2Fkcygp
KSB7CisgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRG
dW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgICAgICBjYWxsRXhw
cmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYXV0byogdHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGNh
bGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVzLT5z
aXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9u
cyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKCJvcGVyYXRvciBjYXN0Il9zdHIpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKCp0
eXBlcylbMF0uZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByZXNz
aW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2Fkcygp
KSB7Ci0gICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFj
YWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICBWaXNpdG9yOjp2aXNp
dChjYWxsRXhwcmVzc2lvbik7CiB9CkBAIC0yNzgsNyArMjkyLDcgQEAgYm9vbCByZXNvbHZlTmFt
ZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHJl
c29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFt
ZVJlc29sdmVyKQorYm9vbCByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYgcHJv
Z3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRvJiBmdW5j
dGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAg
ICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbigmZnVuY3Rpb25EZWZp
bml0aW9uKTsKQEAgLTI5NSw2ICszMDksMjAgQEAgYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9u
cyhQcm9ncmFtJiBwcgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHJlc29sdmVDYWxsc0lu
RnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQor
eworICAgIG5hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKHRydWUpOworICAgIGZvciAo
YXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkp
IHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oJmZ1
bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlz
aXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIuc2V0
Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihudWxscHRyKTsKKyAgICBuYW1lUmVzb2x2ZXIuc2V0
SXNSZXNvbHZpbmdDYWxscyhmYWxzZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdITFNMCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
aAkocmV2aXNpb24gMjQ2NDM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBw
dWJsaWM6CiAgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOwog
ICAgIH0KIAorICAgIHZvaWQgc2V0SXNSZXNvbHZpbmdDYWxscyhib29sIGlzUmVzb2x2aW5nQ2Fs
bHMpIHsgbV9pc1Jlc29sdmluZ0NhbGxzID0gaXNSZXNvbHZpbmdDYWxsczsgfQorCiBwcml2YXRl
OgogICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CkBAIC02OCwxMCArNzAsMTIgQEAgcHJpdmF0
ZToKICAgICBOYW1lQ29udGV4dCYgbV9uYW1lQ29udGV4dDsKICAgICBIYXNoU2V0PEFTVDo6VHlw
ZVJlZmVyZW5jZSo+IG1fdHlwZVJlZmVyZW5jZXM7CiAgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24qIG1fY3VycmVudEZ1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9pc1Jlc29sdmlu
Z0NhbGxzIHsgZmFsc2UgfTsKIH07CiAKIGJvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFt
JiwgTmFtZVJlc29sdmVyJik7Ci1ib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0m
LCBOYW1lUmVzb2x2ZXImKTsKK2Jvb2wgcmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKFByb2dy
YW0mLCBOYW1lUmVzb2x2ZXImKTsKK2Jvb2wgcmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMoUHJvZ3Jh
bSYsIE5hbWVSZXNvbHZlciYpOwogCiB9IC8vIG5hbWVzcGFjZSBXSExTTAogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5j
cHAJKHJldmlzaW9uIDI0NjQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw4ICsxMjUsOSBAQCBz
dGF0aWMgT3B0aW9uYWw8UHJvZ3JhbT4gcHJlcGFyZVNoYXJlZChTCiAgICAgUlVOX1BBU1Moc3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycywgcHJvZ3JhbSk7CiAgICAgUlVOX1BBU1Moc3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLCBwcm9ncmFtKTsKICAgICBSVU5fUEFTUyhzeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aCwgcHJvZ3JhbSk7CisgICAgUlVOX1BBU1MocmVzb2x2ZVR5
cGVOYW1lc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOwogICAgIFJVTl9QQVNT
KHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMsIHByb2dyYW0pOwotICAgIFJVTl9QQVNTKHJlc29sdmVO
YW1lc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIFJVTl9QQVNTKHJl
c29sdmVDYWxsc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOwogICAgIFJVTl9Q
QVNTKGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zLCBwcm9ncmFtKTsKIAogICAgIFJVTl9QQVNTKGNo
ZWNrLCBwcm9ncmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cAkocmV2aXNpb24gMjQ2NDM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NDcgKzQ1LDgyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAor
Y2xhc3MgVW5uYW1lZFR5cGVLZXkgeworcHVibGljOgorICAgIFVubmFtZWRUeXBlS2V5KCkgPSBk
ZWZhdWx0OworICAgIFVubmFtZWRUeXBlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IGJpdHdpc2VfY2FzdDxBU1Q6OlVubmFtZWRUeXBl
Kj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7CisgICAgfQorCisgICAgVW5uYW1lZFR5cGVL
ZXkoQVNUOjpVbm5hbWVkVHlwZSYgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUoJnR5cGUpCisgICAg
eyB9CisKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3R5cGU7IH0K
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ID09IGJpdHdpc2VfY2FzdDxBU1Q6OlVubmFtZWRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PigxKSk7IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3R5cGUtPmhh
c2goKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZUtleSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICptX3R5cGUgPT0gKm90aGVyLm1fdHlwZTsgfQorICAgIEFTVDo6VW5u
YW1lZFR5cGUmIHVubmFtZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gKm1fdHlwZTsgfQorCisgICAg
c3RydWN0IEhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBVbm5hbWVk
VHlwZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFVubmFtZWRUeXBlS2V5JiBhLCBjb25zdCBVbm5hbWVkVHlwZUtleSYgYikg
eyByZXR1cm4gYSA9PSBiOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIH07CisKKyAgICBzdHJ1Y3QgVHJhaXRzIDogcHVi
bGljIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFVubmFtZWRUeXBlS2V5PiB7CisgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFVubmFtZWRUeXBlS2V5JiBrZXkpIHsg
cmV0dXJuIGtleS5pc0VtcHR5VmFsdWUoKTsgfQorICAgIH07CisKK3ByaXZhdGU6CisgICAgQVNU
OjpVbm5hbWVkVHlwZSogbV90eXBlIHsgbnVsbHB0ciB9OworfTsKKwogY2xhc3MgRmluZEFsbFR5
cGVzIDogcHVibGljIFZpc2l0b3IgewogcHVibGljOgogICAgIH5GaW5kQWxsVHlwZXMoKSA9IGRl
ZmF1bHQ7CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKHBvaW50ZXJUeXBl
KTsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYWRkKFVubmFtZWRUeXBlS2V5IHsgcG9pbnRlclR5
cGUgfSk7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KHBvaW50ZXJUeXBlKTsKICAgICB9CiAKICAg
ICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUp
IG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlSZWZl
cmVuY2VUeXBlKTsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYWRkKFVubmFtZWRUeXBlS2V5IHsg
YXJyYXlSZWZlcmVuY2VUeXBlIH0pOwogICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVJlZmVy
ZW5jZVR5cGUpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5
VHlwZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChhcnJh
eVR5cGUpOworICAgICAgICBtX3VubmFtZWRUeXBlcy5hZGQoVW5uYW1lZFR5cGVLZXkgeyBhcnJh
eVR5cGUgfSk7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5VHlwZSk7CiAgICAgfQogCiAg
ICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZp
bml0aW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChlbnVt
ZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBhcHBlbmROYW1lZFR5cGUoZW51bWVyYXRpb25E
ZWZpbml0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9u
KTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3Ry
dWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fbmFtZWRUeXBlcy5h
cHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGFwcGVuZE5hbWVkVHlwZShzdHJ1
Y3R1cmVEZWZpbml0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJlRGVmaW5p
dGlvbik7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9uYW1l
ZFR5cGVzLmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICBhcHBlbmROYW1l
ZFR5cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQobmF0
aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICB9CiAKLSAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gdGFrZVVubmFtZWRUeXBlcygpCisgICAgSGFzaFNl
dDxVbm5hbWVkVHlwZUtleSwgVW5uYW1lZFR5cGVLZXk6Okhhc2gsIFVubmFtZWRUeXBlS2V5OjpU
cmFpdHM+IHRha2VVbm5hbWVkVHlwZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURk1vdmUo
bV91bm5hbWVkVHlwZXMpOwogICAgIH0KQEAgLTk2LDcgKzEzMSwxNyBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5u
YW1lZFR5cGU+PiBtX3VubmFtZWRUeXBlczsKKyAgICB2b2lkIGFwcGVuZE5hbWVkVHlwZShBU1Q6
Ok5hbWVkVHlwZSYgdHlwZSkKKyAgICB7CisgICAgICAgIC8vIFRoZSB3YXkgd2Ugd2FsayB0aGUg
QVNUIGVuc3VyZXMgd2Ugc2hvdWxkIG5ldmVyIHZpc2l0IGEgbmFtZWQgdHlwZSB0d2ljZS4KKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX25hbWVkVHlw
ZXMpCisgICAgICAgICAgICBBU1NFUlQoJmVudHJ5LmdldCgpLnVuaWZ5Tm9kZSgpICE9ICZ0eXBl
LnVuaWZ5Tm9kZSgpKTsKKyNlbmRpZgorICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKHR5cGUp
OworICAgIH0KKworICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXksIFVubmFtZWRUeXBlS2V5OjpI
YXNoLCBVbm5hbWVkVHlwZUtleTo6VHJhaXRzPiBtX3VubmFtZWRUeXBlczsKICAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFtZWRUeXBlczsKIH07
CiAKQEAgLTEwOSwxNCArMTU0LDE1IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9n
cmFtJiBwcm8KIAogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAKLSAgICBmb3IgKGF1dG8m
IHVubmFtZWRUeXBlIDogdW5uYW1lZFR5cGVzKSB7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5u
YW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKKyAgICBmb3IgKGF1dG8mIHVubmFtZWRUeXBlS2V5IDogdW5uYW1lZFR5cGVzKSB7Cisg
ICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gdW5uYW1lZFR5cGVLZXkudW5uYW1lZFR5cGUoKTsK
KyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBh
cmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNs
YXJhdGlvbikpOwotICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNv
bnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
dW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CisgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgpLCAib3BlcmF0b3IgY2Fz
dCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsK
ICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKIAotICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUu
Z2V0KCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucygpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKKyAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmNsb25lKCksICJvcGVyYXRvciBjYXN0
Il9zdHIsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3Ry
dWN0b3IpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAkocmV2aXNpb24gMjQ2NDM5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHRoaXMtPkJhc2U6Omhhc2goKSBeIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoKCJh
cnJheSIpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZSYg
b3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWlzPEFycmF5UmVmZXJl
bmNlVHlwZT4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJl
dHVybiBhZGRyZXNzU3BhY2UoKSA9PSBkb3duY2FzdDxBcnJheVJlZmVyZW5jZVR5cGU+KG90aGVy
KS5hZGRyZXNzU3BhY2UoKQorICAgICAgICAgICAgJiYgZWxlbWVudFR5cGUoKSA9PSBkb3duY2Fz
dDxBcnJheVJlZmVyZW5jZVR5cGU+KG90aGVyKS5lbGVtZW50VHlwZSgpOworICAgIH0KKwogcHJp
dmF0ZToKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCShyZXZpc2lvbiAyNDY0MzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
V1RGOjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFzaChtX251bUVsZW1lbnRzKSBeIG1fZWxlbWVudFR5
cGUtPmhhc2goKTsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1lZFR5
cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFpczxBcnJheVR5
cGU+KG90aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4g
bnVtRWxlbWVudHMoKSA9PSBkb3duY2FzdDxBcnJheVR5cGU+KG90aGVyKS5udW1FbGVtZW50cygp
CisgICAgICAgICAgICAmJiB0eXBlKCkgPT0gZG93bmNhc3Q8QXJyYXlUeXBlPihvdGhlcikudHlw
ZSgpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IG1fZWxl
bWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRl
clR5cGUuaAkocmV2aXNpb24gMjQ2NDM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGhpcy0+QmFzZTo6aGFzaCgpIF4gU3Ry
aW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2goInBvaW50ZXIiKTsKICAgICB9CiAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1lZFR5cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKCFpczxQb2ludGVyVHlwZT4ob3RoZXIpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBhZGRyZXNzU3BhY2UoKSA9PSBkb3duY2Fz
dDxQb2ludGVyVHlwZT4ob3RoZXIpLmFkZHJlc3NTcGFjZSgpCisgICAgICAgICAgICAmJiBlbGVt
ZW50VHlwZSgpID09IGRvd25jYXN0PFBvaW50ZXJUeXBlPihvdGhlcikuZWxlbWVudFR5cGUoKTsK
KyAgICB9CisKIHByaXZhdGU6CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCShy
ZXZpc2lvbiAyNDY0MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsMTUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPGNvbnN0IFR5cGUqPjo6aGFz
aCgmdW5pZnlOb2RlKCkpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5h
bWVkVHlwZSYgb3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9y
ZXNvbHZlZFR5cGUpOworICAgICAgICBpZiAoIWlzPFR5cGVSZWZlcmVuY2U+KG90aGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gJnVuaWZ5Tm9kZSgpID09
ICZkb3duY2FzdDxUeXBlUmVmZXJlbmNlPihvdGhlcikudW5pZnlOb2RlKCk7CisgICAgfQorCiBw
cml2YXRlOgogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1
bWVudHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbm5hbWVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgJKHJldmlzaW9uIDI0NjQzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgVW5p
cXVlUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdW5z
aWduZWQgaGFzaCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBVbm5hbWVkVHlwZSYpIGNvbnN0ID0gMDsKIAogICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ2
NDM4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTktMDYtMTQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dITFNMXSBEbyBub3QgZ2VuZXJhdGUgZHVwbGljYXRlIGNvbnN0cnVjdG9ycy9jb3B5
IGNvbnN0cnVjdG9ycyBpbiBzeW50aGVzaXplQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1ODAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmdwdS93aGxzbC1kdXBsaWNhdGUt
dHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1w
cm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy5odG1sOiBBZGRlZC4KKwogMjAxOS0wNi0xNCAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0hMU0xdIEltcGxlbWVudCBv
dXQtb2YtYm91bmRzIGFuZCBudWxscHRyIGJlaGF2aW9yCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3Rv
cnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1k
dXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1leHBlY3Rl
ZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0
ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVswXSBpcyAy
CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gaXMgNAorUEFTUyByZXN1bHRzRmxvYXQzMkFy
cmF5WzJdIGlzIDYKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSBpcyA4CitQQVNTIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbNF0gaXMgNQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzVdIGlzIDYK
K1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSBpcyA3CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJy
YXlbN10gaXMgOAorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5
cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJv
ZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUt
Y3RvcnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJT
b3VyY2UgPSBgCitzdHJ1Y3QgWFlaIHsKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQg
ejsKK30KKwordHlwZWRlZiBYWVoxID0gWFlaOwordHlwZWRlZiBYWVoyID0gWFlaOwordHlwZWRl
ZiBYWVozID0gWFlaOworCitbbnVtdGhyZWFkcygyLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21w
dXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRo
cmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIHRocmVhZCBpbnQqIHg7CisgICAg
dGhyZWFkIGludCogeTsKKyAgICB0aHJlYWQgZmxvYXQqIGYxOworICAgIHRocmVhZCBmbG9hdCog
ZjI7CisgICAgWFlaMSBhOworICAgIFhZWjIgYjsKKyAgICBYWVozIGM7CisgICAgdGhyZWFkIGlu
dFtdIGludEFycmF5UmVmMTsKKyAgICB0aHJlYWQgaW50W10gaW50QXJyYXlSZWYyOworICAgIGlm
ICgqeCA9PSAqeSAmJiB4ID09IHkgJiYgeCA9PSBudWxsICYmIGYxID09IG51bGwgJiYgKmYxID09
IDApIHsKKyAgICAgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gYnVmZmVyW3VpbnQodGhy
ZWFkSUQueCldICogMi4wOworICAgIH0KK30KK2A7CitsZXQgcmVzdWx0c0Zsb2F0MzJBcnJheTsK
K2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZp
Z2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRh
cHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2Uu
Y3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsK
KyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9y
YWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExh
eW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07
CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGlu
ZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307Cisg
ICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsK
KyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZm
ZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7Cisg
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0g
PSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFy
cmF5WzZdID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51
bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNU
T1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBf
UkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVz
dWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZm
ZXI6IHJlc3VsdHNCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcg
PSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRH
cm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmlu
ZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9
IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVy
LmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2Rl
ciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29k
ZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRp
c3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAg
Y29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmlj
ZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0
c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICBy
ZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIp
OworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzBdIiwgIjIiKTsKKyAgICBzaG91
bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVsxXSIsICI0Iik7CisgICAgc2hvdWxkQmUoInJlc3Vs
dHNGbG9hdDMyQXJyYXlbMl0iLCAiNiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFy
cmF5WzNdIiwgIjgiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs0XSIsICI1
Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbNV0iLCAiNiIpOworICAgIHNo
b3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzZdIiwgIjciKTsKKyAgICBzaG91bGRCZSgicmVz
dWx0c0Zsb2F0MzJBcnJheVs3XSIsICI4Iik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOwor
fQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
Oword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICBzdGFy
dCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="387899"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372312</attachid>
            <date>2019-06-17 18:57:52 -0700</date>
            <delta_ts>2019-06-18 10:36:28 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>41287</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBACisyMDE5LTA2LTE3ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gbm90IGdlbmVy
YXRlIGR1cGxpY2F0ZSBjb25zdHJ1Y3RvcnMvY29weSBjb25zdHJ1Y3RvcnMgaW4gc3ludGhlc2l6
ZUNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4NTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAg
ICAgICAgUHJpb3IgdG8gdGhpcyBwYXRjaCwgd2Ugd2VyZSBnZW5lcmF0aW5nIGR1cGxpY2F0ZSBj
b25zdHJ1Y3RvcnMgCisgICAgICAgIGZvciB1bm5hbWVkIHR5cGVzLiBUaGlzIGlzIGJhZCBmb3Ig
dHdvIHJlYXNvbnM6CisgICAgICAgIDEuIEl0J3MgaW5lZmZpY2llbnQsIHNpbmNlIHdlJ2QgZ2Vu
ZXJhdGUgYSBjb25zdHJ1Y3RvciBmb3IgZXZlcnkgcGxhY2UgaW4KKyAgICAgICAgdGhlIEFTVCB3
aGVyZSB3ZSdkIHZpc2l0IHRoaXMgdW5uYW1lZCB0eXBlLgorICAgICAgICAyLiBJdCBtYWRlIGl0
IGltcG9zc2libGUgdG8gcmVzb2x2ZSBmdW5jdGlvbiBvdmVybG9hZHMgdG8gY2FsbAorICAgICAg
ICB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gVGhpcyBtYWRlIGl0IHNvIHRoYXQgdGhlIGF1dG9J
bml0aWFsaXplVmFyaWFibGVzCisgICAgICAgIHBhc3Mgd291bGQgY3Jhc2ggaWYgd2UgZXZlciBn
ZW5lcmF0ZWQgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMKKyAgICAgICAgZm9yIHRo
ZSBzYW1lIHR5cGUuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhpcyBw
YXRjaCBzcGxpdHMgdXAgd2hhdCB1c2VkIHRvIGJlIHRoZSByZXNvbHZlTmFtZXNJbkZ1bmN0aW9u
cworICAgICAgICBwYXNzLiBQcmV2aW91c2x5LCB0aGlzIHBhc3Mgd291bGQgYm90aCByZXNvbHZl
IGNhbGxzIGFuZCByZXNvbHZlIHR5cGUgbmFtZXMuCisgICAgICAgIFN5bnRoZXNpemUgY29uc3Ry
dWN0b3JzIHdvdWxkIHJ1biBiZWZvcmUgdGhpcywgc2luY2UgcmVzb2x2aW5nIGNhbGxzIG1lYW50
IHdlCisgICAgICAgIG1heSByZXNvbHZlIGEgY2FsbCB0byBvbmUgb2YgdGhlc2Ugc3ludGhlc2l6
ZWQgY29uc3RydWN0b3JzLiBIb3dldmVyLCBzeW50aGVzaXplCisgICAgICAgIGNvbnN0cnVjdG9y
cyBub3cgbmVlZHMgdG8gdGVzdCBmb3IgdGhlIGVxdWFsaXR5IHVubmFtZWQgdHlwZXMsIHNvIGl0
IG5vdyByZXF1aXJlcworICAgICAgICBydW5uaW5nIHRoZSB0eXBlIHJlc29sdXRpb24gcGFydCBv
ZiByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyBiZWZvcmUgaXQgcnVucy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgcGF0Y2ggc3BsaXRzIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zIGludG8gdHdvIHBh
cnRzOgorICAgICAgICByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMgYW5kIHJlc29sdmVDYWxs
c0luRnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgU28gd2UgdXNlZCB0byBydW46CisgICAg
ICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlv
bnMKKyAgICAgICAgCisgICAgICAgIEFuZCBub3cgd2UgcnVuOgorICAgICAgICByZXNvbHZlVHlw
ZU5hbWVzSW5GdW5jdGlvbnMgCisgICAgICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAg
ICAgcmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMKKworICAgICAgICBUZXN0OiB3ZWJncHUvd2hsc2wt
ZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbAor
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBl
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVy
YWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkJvb2xlYW5MaXRlcmFsOjpjbG9u
ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWw6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6QVNUOjpFeHByZXNzaW9uOjpjb3B5VHlwZVRvIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbDo6Y2xvbmUgY29uc3QpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6RmxvYXRMaXRlcmFsVHlwZTo6Y2xvbmUgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaDoK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVyYWw6OmNsb25lIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVy
YWxUeXBlOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6
Ok51bGxMaXRlcmFsOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsOjpjbG9uZSBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGU6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRj
aGVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjp2aXNpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlQ2FsbHNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6cmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMpOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjpzZXRJc1Jlc29sdmluZ0NhbGxzKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OnByZXBhcmVTaGFyZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6VW5uYW1lZFR5cGVLZXk6OlVubmFtZWRUeXBlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpVbm5hbWVkVHlwZUtleTo6aXNFbXB0eVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpVbm5hbWVkVHlwZUtleTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5OjpoYXNoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpVbm5hbWVkVHlwZUtleTo6b3BlcmF0b3I9PSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk6OnVubmFtZWRU
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpVbm5hbWVkVHlwZUtleTo6SGFz
aDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk6Okhhc2g6
OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpVbm5hbWVkVHlwZUtleTo6VHJhaXRz
Ojppc0VtcHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZpbmRBbGxUeXBlczo6
dGFrZVVubmFtZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RmluZEFsbFR5cGVz
OjphcHBlbmROYW1lZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMpOgorCiAyMDE5LTA2LTE3ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUu
Y29tPgogCiAgICAgICAgIC1bV0tXZWJzaXRlRGF0YVN0b3JlIHJlbW92ZURhdGFPZlR5cGVzOm1v
ZGlmaWVkU2luY2U6Y29tcGxldGlvbkhhbmRsZXI6XSBkb2Vzbid0IGRlbGV0ZSBfV0tXZWJzaXRl
RGF0YVR5cGVDcmVkZW50aWFscwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xBU1REdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oCShyZXZpc2lvbiAyNDY1MTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDcgQEAgTUFLRV9QUklOVF9BREFQVE9SKFN0YXRlbWVu
dER1bXBlciwgQVNUOgogTUFLRV9QUklOVF9BREFQVE9SKFByb2dyYW1EdW1wZXIsIFByb2dyYW0m
LCBkdW1wQVNUTm9kZSk7CiBNQUtFX1BSSU5UX0FEQVBUT1IoU3RydWN0dXJlRGVmaW5pdGlvbkR1
bXBlciwgQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiwgZHVtcEFTVE5vZGUpOwogTUFLRV9QUklO
VF9BREFQVE9SKEZ1bmN0aW9uRGVmaW5pdGlvbkR1bXBlciwgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mLCBkdW1wQVNUTm9kZSk7CitNQUtFX1BSSU5UX0FEQVBUT1IoTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbkR1bXBlciwgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiwgZHVtcEFTVE5v
ZGUpOwogTUFLRV9QUklOVF9BREFQVE9SKFR5cGVEdW1wZXIsIEFTVDo6VW5uYW1lZFR5cGUmLCBk
dW1wQVNUTm9kZSk7CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbmZlclR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCShyZXZpc2lvbiAyNDY1MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MSwyOCArNjEsNyBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzKGNv
bnN0IEFTVDo6VHlwZSYgdW5pCiAgICAgICAgIGF1dG8mIHVubmFtZWRUaGlzID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKTsKICAgICAgICAgYXV0byYgdW5uYW1lZE90aGVy
ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcik7CiAgICAgICAgIEFTU0VS
VCghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVGhpcykgJiYgIWlzPEFTVDo6VHlwZVJl
ZmVyZW5jZT4odW5uYW1lZE90aGVyKSk7Ci0gICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZE90aGVyKSkgewot
ICAgICAgICAgICAgYXV0byYgcG9pbnRlclRoaXMgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBwb2ludGVyT3RoZXIgPSBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpOwotICAgICAgICAgICAgaWYgKHBvaW50
ZXJUaGlzLmFkZHJlc3NTcGFjZSgpICE9IHBvaW50ZXJPdGhlci5hZGRyZXNzU3BhY2UoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhw
b2ludGVyVGhpcy5lbGVtZW50VHlwZSgpLCBwb2ludGVyT3RoZXIuZWxlbWVudFR5cGUoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVk
VGhpcykgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcikpIHsKLSAg
ICAgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVy
ZW5jZU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhl
cik7Ci0gICAgICAgICAgICBpZiAoYXJyYXlSZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9
IGFycmF5UmVmZXJlbmNlT3RoZXIuYWRkcmVzc1NwYWNlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlz
LmVsZW1lbnRUeXBlKCksIGFycmF5UmVmZXJlbmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8
QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcikpIHsKLSAgICAgICAgICAgIGF1dG8mIGFycmF5
VGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcyk7Ci0gICAgICAgICAg
ICBhdXRvJiBhcnJheU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhl
cik7Ci0gICAgICAgICAgICBpZiAoYXJyYXlUaGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhl
ci5udW1FbGVtZW50cygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIHJldHVybiBtYXRjaGVzKGFycmF5VGhpcy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB1bm5hbWVk
VGhpcyA9PSB1bm5hbWVkT3RoZXI7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNiArNTgsOSBAQCBOYW1lUmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYg
CiAKIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZl
cmVuY2UpCiB7CisgICAgaWYgKG1faXNSZXNvbHZpbmdDYWxscykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgU2NvcGVkU2V0QWRkZXI8QVNUOjpUeXBlUmVmZXJlbmNlKj4gYWRkZXIobV90eXBlUmVm
ZXJlbmNlcywgJnR5cGVSZWZlcmVuY2UpOwogICAgIGlmICghYWRkZXIuaXNOZXdFbnRyeSgpKSB7
CiAgICAgICAgIHNldEVycm9yKCk7CkBAIC04OCw2ICs5MSw3IEBAIHZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OkZ1bmN0aW9uRGUKICAgICBOYW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgm
bV9uYW1lQ29udGV4dCk7CiAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1l
Q29udGV4dCk7CiAgICAgbmV3TmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRp
b24obV9jdXJyZW50RnVuY3Rpb24pOworICAgIG5ld05hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmlu
Z0NhbGxzKG1faXNSZXNvbHZpbmdDYWxscyk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0
aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkKICAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNr
RXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIpOwpAQCAtOTksNiArMTAzLDcgQEAgdm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsbwogICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0
KCZtX25hbWVDb250ZXh0KTsKICAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KTsKICAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlv
bihtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgbmV3TmFtZVJlc29sdmVyLnNldElzUmVzb2x2aW5n
Q2FsbHMobV9pc1Jlc29sdmluZ0NhbGxzKTsKICAgICBuZXdOYW1lUmVzb2x2ZXIuVmlzaXRvcjo6
dmlzaXQoYmxvY2spOwogfQogCkBAIC0xMDgsMTEgKzExMywxMyBAQCB2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVuCiAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1f
bmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRl
eHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1f
Y3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxs
cyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHko
KSkgewogICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAg
ICAgICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgICAg
ICBuZXdOYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihtX2N1cnJlbnRG
dW5jdGlvbik7CisgICAgICAgIG5ld05hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKG1f
aXNSZXNvbHZpbmdDYWxscyk7CiAgICAgICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOwogICAgIH0KIH0KQEAgLTEyMyw2ICsxMzAs
NyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmCiAgICAgTmFtZUNv
bnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNvbHZlciBuZXdO
YW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50
RnVuY3Rpb25EZWZpbml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdOYW1lUmVzb2x2
ZXIuc2V0SXNSZXNvbHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAgIG5ld05hbWVS
ZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CiB9CiAKQEAgLTEz
MSw2ICsxMzksNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vCiAg
ICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNv
bHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5z
ZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdO
YW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAg
IG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CiAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKIH0KQEAgLTE0
MCw2ICsxNDksNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmCiAg
ICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwogICAgIE5hbWVSZXNv
bHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5z
ZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBuZXdO
YW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxscyhtX2lzUmVzb2x2aW5nQ2FsbHMpOwogICAg
IG5ld05hbWVSZXNvbHZlci5WaXNpdG9yOjp2aXNpdChmb3JMb29wKTsKIH0KIApAQCAtMTc0LDEy
ICsxODQsMTQgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZQogCiB2
b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKIHsKLSAgICBpZiAoYXV0byogZ2V0dGVyRnVuY3Rpb25z
ID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdl
dHRlckZ1bmN0aW9uTmFtZSgpKSkKLSAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNl
dFBvc3NpYmxlR2V0dGVyT3ZlcmxvYWRzKCpnZXR0ZXJGdW5jdGlvbnMpOwotICAgIGlmIChhdXRv
KiBzZXR0ZXJGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb25OYW1lKCkpKQotICAgICAgICBwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVTZXR0ZXJPdmVybG9hZHMoKnNldHRlckZ1bmN0aW9u
cyk7Ci0gICAgaWYgKGF1dG8qIGFuZGVyRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5j
dGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb25OYW1lKCkpKQotICAg
ICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVBbmRlck92ZXJsb2Fkcygq
YW5kZXJGdW5jdGlvbnMpOworICAgIGlmIChtX2lzUmVzb2x2aW5nQ2FsbHMpIHsKKyAgICAgICAg
aWYgKGF1dG8qIGdldHRlckZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgICAg
ICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKmdl
dHRlckZ1bmN0aW9ucyk7CisgICAgICAgIGlmIChhdXRvKiBzZXR0ZXJGdW5jdGlvbnMgPSBtX25h
bWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0dGVyRnVu
Y3Rpb25OYW1lKCkpKQorICAgICAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBv
c3NpYmxlU2V0dGVyT3ZlcmxvYWRzKCpzZXR0ZXJGdW5jdGlvbnMpOworICAgICAgICBpZiAoYXV0
byogYW5kZXJGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVBbmRlck92ZXJsb2FkcygqYW5kZXJGdW5jdGlv
bnMpOworICAgIH0KICAgICBWaXNpdG9yOjp2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24p
OwogfQogCkBAIC0yMTAsMjMgKzIyMiwyNSBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNU
OjpEb3RFeHByZXNzCiAKIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJiBjYWxsRXhwcmVzc2lvbikKIHsKLSAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJs
b2FkcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0Lmdl
dEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKQotICAgICAgICAgICAgY2FsbEV4cHJl
c3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChhdXRvKiB0eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Np
b24ubmFtZSgpKSkgewotICAgICAgICAgICAgICAgIGlmICh0eXBlcy0+c2l6ZSgpID09IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQu
Z2V0RnVuY3Rpb25zKCJvcGVyYXRvciBjYXN0Il9zdHIpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9u
cyk7CisgICAgaWYgKG1faXNSZXNvbHZpbmdDYWxscykgeworICAgICAgICBpZiAoIWNhbGxFeHBy
ZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25z
ID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAg
ICAgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogdHlwZXMgPSBtX25h
bWVDb250ZXh0LmdldFR5cGVzKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVzLT5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKCJvcGVy
YXRvciBjYXN0Il9zdHIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJl
c3Npb24uc2V0Q2FzdERhdGEoKCp0eXBlcylbMF0uZ2V0KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWNhbGxFeHBy
ZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7Ci0gICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKCFjYWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAg
IH0KICAgICBWaXNpdG9yOjp2aXNpdChjYWxsRXhwcmVzc2lvbik7CiB9CkBAIC0yNzgsNyArMjky
LDcgQEAgYm9vbCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dy
YW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQorYm9vbCByZXNvbHZlVHlwZU5hbWVzSW5G
dW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCiB7
CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVm
aW5pdGlvbnMoKSkgewogICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVm
aW5pdGlvbigmZnVuY3Rpb25EZWZpbml0aW9uKTsKQEAgLTI5NSw2ICszMDksMjAgQEAgYm9vbCBy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcgogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIHJlc29sdmVDYWxsc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNv
bHZlciYgbmFtZVJlc29sdmVyKQoreworICAgIG5hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0Nh
bGxzKHRydWUpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5m
dW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRG
dW5jdGlvbkRlZmluaXRpb24oJmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIG5hbWVSZXNv
bHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYg
KG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihudWxscHRyKTsK
KyAgICBuYW1lUmVzb2x2ZXIuc2V0SXNSZXNvbHZpbmdDYWxscyhmYWxzZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJl
c29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAkocmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0g
ZnVuY3Rpb25EZWZpbml0aW9uOwogICAgIH0KIAorICAgIHZvaWQgc2V0SXNSZXNvbHZpbmdDYWxs
cyhib29sIGlzUmVzb2x2aW5nQ2FsbHMpIHsgbV9pc1Jlc29sdmluZ0NhbGxzID0gaXNSZXNvbHZp
bmdDYWxsczsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNl
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CkBAIC02
OCwxMCArNzAsMTIgQEAgcHJpdmF0ZToKICAgICBOYW1lQ29udGV4dCYgbV9uYW1lQ29udGV4dDsK
ICAgICBIYXNoU2V0PEFTVDo6VHlwZVJlZmVyZW5jZSo+IG1fdHlwZVJlZmVyZW5jZXM7CiAgICAg
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIG1fY3VycmVudEZ1bmN0aW9uIHsgbnVsbHB0ciB9Owor
ICAgIGJvb2wgbV9pc1Jlc29sdmluZ0NhbGxzIHsgZmFsc2UgfTsKIH07CiAKIGJvb2wgcmVzb2x2
ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7Ci1ib29sIHJlc29sdmVOYW1l
c0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKK2Jvb2wgcmVzb2x2ZVR5cGVO
YW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKK2Jvb2wgcmVzb2x2ZUNh
bGxzSW5GdW5jdGlvbnMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYpOwogCiB9IC8vIG5hbWVzcGFj
ZSBXSExTTAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNSw4ICsxMjUsOSBAQCBzdGF0aWMgT3B0aW9uYWw8UHJvZ3JhbT4gcHJlcGFyZVNoYXJl
ZChTCiAgICAgUlVOX1BBU1Moc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycywgcHJvZ3JhbSk7
CiAgICAgUlVOX1BBU1Moc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLCBwcm9ncmFtKTsK
ICAgICBSVU5fUEFTUyhzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aCwgcHJvZ3JhbSk7Cisg
ICAgUlVOX1BBU1MocmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVz
b2x2ZXIpOwogICAgIFJVTl9QQVNTKHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMsIHByb2dyYW0pOwot
ICAgIFJVTl9QQVNTKHJlc29sdmVOYW1lc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVzb2x2
ZXIpOworICAgIFJVTl9QQVNTKHJlc29sdmVDYWxsc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1l
UmVzb2x2ZXIpOwogICAgIFJVTl9QQVNTKGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zLCBwcm9ncmFt
KTsKIAogICAgIFJVTl9QQVNTKGNoZWNrLCBwcm9ncmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNDcgKzQ1LDgyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIFdITFNMIHsKIAorY2xhc3MgVW5uYW1lZFR5cGVLZXkgeworcHVibGljOgorICAg
IFVubmFtZWRUeXBlS2V5KCkgPSBkZWZhdWx0OworICAgIFVubmFtZWRUeXBlS2V5KFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IGJpdHdpc2Vf
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7CisgICAg
fQorCisgICAgVW5uYW1lZFR5cGVLZXkoQVNUOjpVbm5hbWVkVHlwZSYgdHlwZSkKKyAgICAgICAg
OiBtX3R5cGUoJnR5cGUpCisgICAgeyB9CisKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuICFtX3R5cGU7IH0KKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IGJpdHdpc2VfY2FzdDxBU1Q6OlVubmFtZWRUeXBlKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dCB7IHJldHVybiBtX3R5cGUtPmhhc2goKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBV
bm5hbWVkVHlwZUtleSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICptX3R5cGUgPT0gKm90aGVyLm1f
dHlwZTsgfQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKCkgY29uc3QgeyByZXR1
cm4gKm1fdHlwZTsgfQorCisgICAgc3RydWN0IEhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBVbm5hbWVkVHlwZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFVubmFtZWRUeXBlS2V5JiBhLCBjb25z
dCBVbm5hbWVkVHlwZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIH07CisKKyAg
ICBzdHJ1Y3QgVHJhaXRzIDogcHVibGljIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFVubmFt
ZWRUeXBlS2V5PiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1
bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFVu
bmFtZWRUeXBlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5pc0VtcHR5VmFsdWUoKTsgfQorICAgIH07
CisKK3ByaXZhdGU6CisgICAgQVNUOjpVbm5hbWVkVHlwZSogbV90eXBlIHsgbnVsbHB0ciB9Owor
fTsKKwogY2xhc3MgRmluZEFsbFR5cGVzIDogcHVibGljIFZpc2l0b3IgewogcHVibGljOgogICAg
IH5GaW5kQWxsVHlwZXMoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRl
clR5cGUmIHBvaW50ZXJUeXBlKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV91bm5hbWVkVHlw
ZXMuYXBwZW5kKHBvaW50ZXJUeXBlKTsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYWRkKFVubmFt
ZWRUeXBlS2V5IHsgcG9pbnRlclR5cGUgfSk7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KHBvaW50
ZXJUeXBlKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
JiBhcnJheVJlZmVyZW5jZVR5cGUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX3VubmFtZWRU
eXBlcy5hcHBlbmQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMu
YWRkKFVubmFtZWRUeXBlS2V5IHsgYXJyYXlSZWZlcmVuY2VUeXBlIH0pOwogICAgICAgICBWaXNp
dG9yOjp2aXNpdChhcnJheVJlZmVyZW5jZVR5cGUpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQo
QVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fdW5u
YW1lZFR5cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAgICAgICBtX3VubmFtZWRUeXBlcy5hZGQo
VW5uYW1lZFR5cGVLZXkgeyBhcnJheVR5cGUgfSk7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KGFy
cmF5VHlwZSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9u
YW1lZFR5cGVzLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBhcHBlbmRO
YW1lZFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6dmlzaXQo
ZW51bWVyYXRpb25EZWZpbml0aW9uKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKICAgICB7Ci0g
ICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAg
IGFwcGVuZE5hbWVkVHlwZShzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKICAgICAgICAgVmlzaXRvcjo6
dmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKSBvdmVycmlkZQog
ICAgIHsKLSAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24p
OworICAgICAgICBhcHBlbmROYW1lZFR5cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICAg
ICAgVmlzaXRvcjo6dmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICB9CiAKLSAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gdGFrZVVubmFt
ZWRUeXBlcygpCisgICAgSGFzaFNldDxVbm5hbWVkVHlwZUtleSwgVW5uYW1lZFR5cGVLZXk6Okhh
c2gsIFVubmFtZWRUeXBlS2V5OjpUcmFpdHM+IHRha2VVbm5hbWVkVHlwZXMoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIFdURk1vdmUobV91bm5hbWVkVHlwZXMpOwogICAgIH0KQEAgLTk2LDcgKzEz
MSwxNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiBtX3VubmFtZWRUeXBlczsKKyAgICB2b2lk
IGFwcGVuZE5hbWVkVHlwZShBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkKKyAgICB7CisgICAgICAgIC8v
IFRoZSB3YXkgd2Ugd2FsayB0aGUgQVNUIGVuc3VyZXMgd2Ugc2hvdWxkIG5ldmVyIHZpc2l0IGEg
bmFtZWQgdHlwZSB0d2ljZS4KKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX25hbWVkVHlwZXMpCisgICAgICAgICAgICBBU1NFUlQoJmVudHJ5LmdldCgp
LnVuaWZ5Tm9kZSgpICE9ICZ0eXBlLnVuaWZ5Tm9kZSgpKTsKKyNlbmRpZgorICAgICAgICBtX25h
bWVkVHlwZXMuYXBwZW5kKHR5cGUpOworICAgIH0KKworICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVL
ZXksIFVubmFtZWRUeXBlS2V5OjpIYXNoLCBVbm5hbWVkVHlwZUtleTo6VHJhaXRzPiBtX3VubmFt
ZWRUeXBlczsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4+IG1fbmFtZWRUeXBlczsKIH07CiAKQEAgLTEwOSwxNCArMTU0LDE2IEBAIGJvb2wgc3ludGhl
c2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm8KIAogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRy
dWU7CiAKLSAgICBmb3IgKGF1dG8mIHVubmFtZWRUeXBlIDogdW5uYW1lZFR5cGVzKSB7Ci0gICAg
ICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBB
U1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICBmb3IgKGF1dG8mIHVubmFtZWRUeXBlS2V5
IDogdW5uYW1lZFR5cGVzKSB7CisgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gdW5uYW1lZFR5
cGVLZXkudW5uYW1lZFR5cGUoKTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHVu
bmFtZWRUeXBlLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmNsb25l
KCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5hcHBl
bmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCAib3BlcmF0
b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0
b3IpKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1
Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLm9y
aWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBl
LmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6
bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNv
cHlDb25zdHJ1Y3RvcikpOwogCi0gICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tl
bih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikp
OworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVj
dG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUub3Jp
Z2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUu
Y2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCShyZXZpc2lv
biAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xBcnJheVJlZmVyZW5jZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTUgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gdGhpcy0+QmFzZTo6aGFzaCgpIF4gU3RyaW5nSGFzaGVy
Ojpjb21wdXRlTGl0ZXJhbEhhc2goImFycmF5Iik7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFVubmFtZWRUeXBlJiBvdGhlcikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmICghaXM8QXJyYXlSZWZlcmVuY2VUeXBlPihvdGhlcikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NTcGFjZSgpID09IGRvd25jYXN0PEFy
cmF5UmVmZXJlbmNlVHlwZT4ob3RoZXIpLmFkZHJlc3NTcGFjZSgpCisgICAgICAgICAgICAmJiBl
bGVtZW50VHlwZSgpID09IGRvd25jYXN0PEFycmF5UmVmZXJlbmNlVHlwZT4ob3RoZXIpLmVsZW1l
bnRUeXBlKCk7CisgICAgfQorCiBwcml2YXRlOgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgJ
KHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEFycmF5VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSwxNSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8dW5zaWduZWQ+OjpoYXNoKG1fbnVt
RWxlbWVudHMpIF4gbV9lbGVtZW50VHlwZS0+aGFzaCgpOwogICAgIH0KIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZSYgb3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoIWlzPEFycmF5VHlwZT4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHJldHVybiBudW1FbGVtZW50cygpID09IGRvd25jYXN0PEFycmF5VHlw
ZT4ob3RoZXIpLm51bUVsZW1lbnRzKCkKKyAgICAgICAgICAgICYmIHR5cGUoKSA9PSBkb3duY2Fz
dDxBcnJheVR5cGU+KG90aGVyKS50eXBlKCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFVuaXF1
ZVJlZjxVbm5hbWVkVHlwZT4gbV9lbGVtZW50VHlwZTsKICAgICB1bnNpZ25lZCBtX251bUVsZW1l
bnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
Qm9vbGVhbkxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDY1MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0
ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw5IEBAIHB1YmxpYzoKIAogICAgIEJv
b2xlYW5MaXRlcmFsIGNsb25lKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBCb29sZWFu
TGl0ZXJhbChMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgQm9vbGVh
bkxpdGVyYWwgcmVzdWx0KExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgICAg
ICBjb3B5VHlwZVRvKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiBw
cml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmgJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gRW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhtX2xl
ZnQpLCBTdHJpbmcobV9yaWdodCkpOwogICAgICAgICByZXN1bHQubV9lbnVtZXJhdGlvbk1lbWJl
ciA9IG1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgICAgIGNvcHlUeXBlVG8ocmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgJKHJl
dmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTQgQEAgcHVi
bGljOgogICAgICAgICBtX3R5cGVBbm5vdGF0aW9uID0gV1RGTW92ZSh0eXBlQW5ub3RhdGlvbik7
CiAgICAgfQogCisgICAgdm9pZCBjb3B5VHlwZVRvKEV4cHJlc3Npb24mIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IGNvbnN0X2Nhc3Q8RXhwcmVz
c2lvbio+KHRoaXMpLT5tYXliZVJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAgb3RoZXIuc2V0
VHlwZShyZXNvbHZlZFR5cGUtPmNsb25lKCkpOworICAgICAgICBpZiAoYXV0byogdHlwZUFubm90
YXRpb24gPSBtYXliZVR5cGVBbm5vdGF0aW9uKCkpCisgICAgICAgICAgICBvdGhlci5zZXRUeXBl
QW5ub3RhdGlvbihUeXBlQW5ub3RhdGlvbigqdHlwZUFubm90YXRpb24pKTsKKyAgICB9CisKICAg
ICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQm9vbGVhbkxpdGVyYWwoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oCShyZXZpc2lvbiAyNDY1
MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9h
dExpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsOCArNjIsMTAgQEAgcHVibGljOgogICAg
IEZsb2F0TGl0ZXJhbCBjbG9uZSgpIGNvbnN0CiAgICAgewogICAgICAgICBGbG9hdExpdGVyYWwg
cmVzdWx0KExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgICAgICByZXN1bHQu
bV90eXBlID0gbV90eXBlLmNsb25lKCk7CiAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUg
PSBtX3R5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkKICAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUu
cmVzb2x2ZShyZXNvbHZlZFR5cGUtPmNsb25lKCkpOworICAgICAgICBjb3B5VHlwZVRvKHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmNwcAkocmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyLDYgKzcyLDE2IEBAIHVuc2lnbmVkIEZsb2F0TGl0ZXJhbFR5cGU6OmNv
bnZlcnNpb25Db3MKICAgICByZXR1cm4gMTsKIH0KIAorRmxvYXRMaXRlcmFsVHlwZSBGbG9hdExp
dGVyYWxUeXBlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgRmxvYXRMaXRlcmFsVHlwZSByZXN1bHQo
TGV4ZXI6OlRva2VuKG1fcHJlZmVycmVkVHlwZS0+b3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICBp
ZiAoYXV0byogdHlwZSA9IG1heWJlUmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIHJlc3VsdC5yZXNv
bHZlKHR5cGUtPmNsb25lKCkpOworICAgIHJlc3VsdC5tX3ByZWZlcnJlZFR5cGUgPSBtX3ByZWZl
cnJlZFR5cGUtPmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
KwogfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxU
eXBlLmgJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NiArNjAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25z
dCBvdmVycmlkZTsKICAgICB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlw
ZSYpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgRmxvYXRMaXRlcmFsVHlwZSBjbG9uZSgpIGNvbnN0
OworCiBwcml2YXRlOgogICAgIGZsb2F0IG1fdmFsdWU7CiAgICAgLy8gVGhpcyBpcyBhIHVuaXF1
ZV9wdHIgdG8gcmVzb2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw4ICs2MiwxMCBAQCBwdWJsaWM6CiAgICAgSW50ZWdlckxpdGVyYWwgY2xv
bmUoKSBjb25zdAogICAgIHsKICAgICAgICAgSW50ZWdlckxpdGVyYWwgcmVzdWx0KExleGVyOjpU
b2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgICAgICByZXN1bHQubV90eXBlID0gbV90eXBl
LmNsb25lKCk7CiAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBtX3R5cGUubWF5YmVS
ZXNvbHZlZFR5cGUoKSkKICAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXNvbHZl
ZFR5cGUtPmNsb25lKCkpOworICAgICAgICBjb3B5VHlwZVRvKHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFs
VHlwZS5jcHAJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDYgKzczLDE1IEBAIHVuc2lnbmVkIEludGVnZXJMaXRlcmFsVHlwZTo6Y29udmVyc2lv
bkMKICAgICByZXR1cm4gMTsKIH0KIAorSW50ZWdlckxpdGVyYWxUeXBlIEludGVnZXJMaXRlcmFs
VHlwZTo6Y2xvbmUoKSBjb25zdAoreworICAgIEludGVnZXJMaXRlcmFsVHlwZSByZXN1bHQoTGV4
ZXI6OlRva2VuKG1fcHJlZmVycmVkVHlwZS0+b3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICBpZiAo
YXV0byogdHlwZSA9IG1heWJlUmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIHJlc3VsdC5yZXNvbHZl
KHR5cGUtPmNsb25lKCkpOworICAgIHJlc3VsdC5tX3ByZWZlcnJlZFR5cGUgPSBtX3ByZWZlcnJl
ZFR5cGUtPmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEFTVAogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5
cGUuaAkocmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDYgKzYwLDggQEAgcHVibGljOgogICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5
cGUmKSBjb25zdCBvdmVycmlkZTsKIAorICAgIEludGVnZXJMaXRlcmFsVHlwZSBjbG9uZSgpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIGludCBtX3ZhbHVlOwogICAgIC8vIFRoaXMgaXMgYSB1bmlx
dWVfcHRyIHRvIHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTnVsbExpdGVyYWwuaAkocmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gTnVsbExpdGVy
YWwoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSk7CiAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5
cGUgPSBtX3R5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkKICAgICAgICAgICAgIHJlc3VsdC5tX3R5
cGUucmVzb2x2ZShyZXNvbHZlZFR5cGUtPmNsb25lKCkpOworICAgICAgICBjb3B5VHlwZVRvKHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50
ZXJUeXBlLmgJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYg
KzYzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRoaXMtPkJhc2U6Omhhc2goKSBeIFN0
cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoKCJwb2ludGVyIik7CiAgICAgfQogCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFVubmFtZWRUeXBlJiBvdGhlcikgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmICghaXM8UG9pbnRlclR5cGU+KG90aGVyKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNh
c3Q8UG9pbnRlclR5cGU+KG90aGVyKS5hZGRyZXNzU3BhY2UoKQorICAgICAgICAgICAgJiYgZWxl
bWVudFR5cGUoKSA9PSBkb3duY2FzdDxQb2ludGVyVHlwZT4ob3RoZXIpLmVsZW1lbnRUeXBlKCk7
CisgICAgfQorCiBwcml2YXRlOgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAko
cmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDE1
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxjb25zdCBUeXBlKj46Omhh
c2goJnVuaWZ5Tm9kZSgpKTsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5u
YW1lZFR5cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
cmVzb2x2ZWRUeXBlKTsKKyAgICAgICAgaWYgKCFpczxUeXBlUmVmZXJlbmNlPihvdGhlcikpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuICZ1bmlmeU5vZGUoKSA9
PSAmZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4ob3RoZXIpLnVuaWZ5Tm9kZSgpOworICAgIH0KKwog
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJn
dW1lbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVW5uYW1lZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCShyZXZpc2lvbiAyNDY1MTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFVu
aXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGhhc2goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29u
c3QgVW5uYW1lZFR5cGUmKSBjb25zdCA9IDA7CiAKICAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsOCArNjIsMTAgQEAgcHVibGljOgogICAgIFVuc2ln
bmVkSW50ZWdlckxpdGVyYWwgY2xvbmUoKSBjb25zdAogICAgIHsKICAgICAgICAgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCByZXN1bHQoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgbV92YWx1ZSk7Cisg
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSBtX3R5cGUuY2xvbmUoKTsKICAgICAgICAgaWYgKGF1dG8q
IHJlc29sdmVkVHlwZSA9IG1fdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKQogICAgICAgICAgICAg
cmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJlc29sdmVkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIGNv
cHlUeXBlVG8ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHJl
dmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNiArNzYsMTUgQEAgdW5zaWduZWQgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbgog
ICAgIHJldHVybiAxOwogfQogCitVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSBVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZTo6Y2xvbmUoKSBjb25zdAoreworICAgIFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlIHJlc3VsdChMZXhlcjo6VG9rZW4obV9wcmVmZXJyZWRUeXBlLT5vcmlnaW4oKSks
IG1fdmFsdWUpOworICAgIGlmIChhdXRvKiB0eXBlID0gbWF5YmVSZXNvbHZlZFR5cGUoKSkKKyAg
ICAgICAgcmVzdWx0LnJlc29sdmUodHlwZS0+Y2xvbmUoKSk7CisgICAgcmVzdWx0Lm1fcHJlZmVy
cmVkVHlwZSA9IG1fcHJlZmVycmVkVHlwZS0+Y2xvbmVUeXBlUmVmZXJlbmNlKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaAkocmV2aXNpb24gMjQ2NTE1
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlkZTsK
ICAgICB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0IG92
ZXJyaWRlOwogCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgY2xvbmUoKSBjb25zdDsK
KwogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3ZhbHVlOwogICAgIC8vIFRoaXMgaXMgYSB1bmlx
dWVfcHRyIHRvIHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI0NjUxNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTA2LTE3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gbm90IGdlbmVyYXRlIGR1cGxpY2F0ZSBjb25z
dHJ1Y3RvcnMvY29weSBjb25zdHJ1Y3RvcnMgaW4gc3ludGhlc2l6ZUNvbnN0cnVjdG9ycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVz
LXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbDogQWRkZWQuCisKIDIwMTkt
MDYtMTcgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dITFNM
XSBNYWtlIC5sZW5ndGggd29yawpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxp
Y2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVz
LXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMtZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxk
LW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMiBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMF0gaXMgMgorUEFTUyByZXN1bHRz
RmxvYXQzMkFycmF5WzFdIGlzIDQKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSBpcyA2CitQ
QVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbM10gaXMgOAorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5
WzRdIGlzIDUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs1XSBpcyA2CitQQVNTIHJlc3VsdHNG
bG9hdDMyQXJyYXlbNl0gaXMgNworUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzddIGlzIDgKKwpJ
bmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90
LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRl
LWN0b3JzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1
cGxpY2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3Ry
dWN0IFhZWiB7CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgaW50IHo7Cit9CisKK3R5cGVk
ZWYgWFlaMSA9IFhZWjsKK3R5cGVkZWYgWFlaMiA9IFhZWjsKK3R5cGVkZWYgWFlaMyA9IFhZWjsK
KworW251bXRocmVhZHMoMiwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZp
Y2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rp
c3BhdGNoVGhyZWFkSUQpIHsKKyAgICB0aHJlYWQgaW50KiB4OworICAgIHRocmVhZCBpbnQqIHk7
CisgICAgdGhyZWFkIGZsb2F0KiBmMTsKKyAgICB0aHJlYWQgZmxvYXQqIGYyOworICAgIFhZWjEg
YTsKKyAgICBYWVoyIGI7CisgICAgWFlaMyBjOworICAgIHRocmVhZCBpbnRbXSBpbnRBcnJheVJl
ZjE7CisgICAgdGhyZWFkIGludFtdIGludEFycmF5UmVmMjsKKyAgICBpZiAoKnggPT0gKnkgJiYg
eCA9PSB5ICYmIHggPT0gbnVsbCAmJiBmMSA9PSBudWxsICYmICpmMSA9PSAwKSB7CisgICAgICAg
IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElELngpXSAqIDIu
MDsKKyAgICB9Cit9CitgOworbGV0IHJlc3VsdHNGbG9hdDMyQXJyYXk7Cithc3luYyBmdW5jdGlv
biBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1
ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERl
dmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1v
ZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29t
cHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNo
YWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5n
czogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19
OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlv
dXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
ciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNv
bXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogODsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NS
Q307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlw
dG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAg
ICBidWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9
IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbNF0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxv
YXQzMkFycmF5WzZdID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1
ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZF
Ul9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAg
IGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJp
bmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3Jv
dXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRH
cm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAv
LyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJl
c3VsdHNCdWZmZXIsIDAsIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgpOworICAg
IGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBh
c3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5l
KTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7Cisg
ICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZl
ci5tYXBSZWFkQXN5bmMoKTsKKyAgICByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFy
cmF5WzBdIiwgIjIiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVsxXSIsICI0
Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMl0iLCAiNiIpOworICAgIHNo
b3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzNdIiwgIjgiKTsKKyAgICBzaG91bGRCZSgicmVz
dWx0c0Zsb2F0MzJBcnJheVs0XSIsICI1Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMy
QXJyYXlbNV0iLCAiNiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzZdIiwg
IjciKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs3XSIsICI4Iik7CisgICAg
cmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBmdW5jdGlvbigpIHsKKyAgICBzdGFydCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30pOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372348</attachid>
            <date>2019-06-18 10:36:28 -0700</date>
            <delta_ts>2019-06-18 10:38:43 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>41963</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDE5LTA2LTE4ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gbm90IGdlbmVy
YXRlIGR1cGxpY2F0ZSBjb25zdHJ1Y3RvcnMvY29weSBjb25zdHJ1Y3RvcnMgaW4gc3ludGhlc2l6
ZUNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4NTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAg
ICAgICAgUHJpb3IgdG8gdGhpcyBwYXRjaCwgd2Ugd2VyZSBnZW5lcmF0aW5nIGR1cGxpY2F0ZSBj
b25zdHJ1Y3RvcnMgCisgICAgICAgIGZvciB1bm5hbWVkIHR5cGVzLiBUaGlzIGlzIGJhZCBmb3Ig
dHdvIHJlYXNvbnM6CisgICAgICAgIDEuIEl0J3MgaW5lZmZpY2llbnQsIHNpbmNlIHdlJ2QgZ2Vu
ZXJhdGUgYSBjb25zdHJ1Y3RvciBmb3IgZXZlcnkgcGxhY2UgaW4KKyAgICAgICAgdGhlIEFTVCB3
aGVyZSB3ZSdkIHZpc2l0IHRoaXMgdW5uYW1lZCB0eXBlLgorICAgICAgICAyLiBJdCBtYWRlIGl0
IGltcG9zc2libGUgdG8gcmVzb2x2ZSBmdW5jdGlvbiBvdmVybG9hZHMgdG8gY2FsbAorICAgICAg
ICB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gVGhpcyBtYWRlIGl0IHNvIHRoYXQgdGhlIGF1dG9J
bml0aWFsaXplVmFyaWFibGVzCisgICAgICAgIHBhc3Mgd291bGQgY3Jhc2ggaWYgd2UgZXZlciBn
ZW5lcmF0ZWQgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMKKyAgICAgICAgZm9yIHRo
ZSBzYW1lIHR5cGUuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhpcyBw
YXRjaCBzcGxpdHMgdXAgd2hhdCB1c2VkIHRvIGJlIHRoZSByZXNvbHZlTmFtZXNJbkZ1bmN0aW9u
cworICAgICAgICBwYXNzLiBQcmV2aW91c2x5LCB0aGlzIHBhc3Mgd291bGQgYm90aCByZXNvbHZl
IGNhbGxzIGFuZCByZXNvbHZlIHR5cGUgbmFtZXMuCisgICAgICAgIFN5bnRoZXNpemUgY29uc3Ry
dWN0b3JzIHdvdWxkIHJ1biBiZWZvcmUgdGhpcywgc2luY2UgcmVzb2x2aW5nIGNhbGxzIG1lYW50
IHdlCisgICAgICAgIG1heSByZXNvbHZlIGEgY2FsbCB0byBvbmUgb2YgdGhlc2Ugc3ludGhlc2l6
ZWQgY29uc3RydWN0b3JzLiBIb3dldmVyLCBzeW50aGVzaXplCisgICAgICAgIGNvbnN0cnVjdG9y
cyBub3cgbmVlZHMgdG8gdGVzdCBmb3IgdGhlIGVxdWFsaXR5IHVubmFtZWQgdHlwZXMsIHNvIGl0
IG5vdyByZXF1aXJlcworICAgICAgICBydW5uaW5nIHRoZSB0eXBlIHJlc29sdXRpb24gcGFydCBv
ZiByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyBiZWZvcmUgaXQgcnVucy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgcGF0Y2ggc3BsaXRzIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zIGludG8gdHdvIHBh
cnRzOgorICAgICAgICByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMgYW5kIHJlc29sdmVDYWxs
c0luRnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgU28gd2UgdXNlZCB0byBydW46CisgICAg
ICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlv
bnMKKyAgICAgICAgCisgICAgICAgIEFuZCBub3cgd2UgcnVuOgorICAgICAgICByZXNvbHZlVHlw
ZU5hbWVzSW5GdW5jdGlvbnMgCisgICAgICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAg
ICAgcmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMKKworICAgICAgICBUZXN0OiB3ZWJncHUvd2hsc2wt
ZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJvZHVjZS1kdXBsaWNhdGUtY3RvcnMuaHRtbAor
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBl
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVy
YWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkJvb2xlYW5MaXRlcmFsOjpjbG9u
ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWw6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6QVNUOjpFeHByZXNzaW9uOjpjb3B5VHlwZVRvIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbDo6Y2xvbmUgY29uc3QpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6RmxvYXRMaXRlcmFsVHlwZTo6Y2xvbmUgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaDoK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVyYWw6OmNsb25lIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVy
YWxUeXBlOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6
Ok51bGxMaXRlcmFsOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsOjpjbG9uZSBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGU6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRj
aGVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6dmlzaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OnJlc29sdmVOYW1lc0luRnVuY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6c2V0SXNSZXNvbHZpbmdDYWxscyk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpwcmVwYXJlU2hhcmVkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlVubmFtZWRUeXBlS2V5OjpVbm5hbWVkVHlwZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6VW5uYW1lZFR5cGVLZXk6OmlzRW1wdHlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpVbm5hbWVkVHlwZUtleTo6aGFzaCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5Ojp1bm5hbWVkVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk6Okhhc2g6
Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBlS2V5OjpIYXNoOjpl
cXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk6OlRyYWl0czo6
aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGaW5kQWxsVHlwZXM6OnRh
a2VVbm5hbWVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZpbmRBbGxUeXBlczo6
YXBwZW5kTmFtZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpzeW50aGVzaXplQ29u
c3RydWN0b3JzKToKKwogMjAxOS0wNi0xOCAgVHJ1aXR0IFNhdmVsbCAgPHRzYXZlbGxAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNDY1MjQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVt
cGVyLmgJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQVNURHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsNyBA
QCBNQUtFX1BSSU5UX0FEQVBUT1IoU3RhdGVtZW50RHVtcGVyLCBBU1Q6CiBNQUtFX1BSSU5UX0FE
QVBUT1IoUHJvZ3JhbUR1bXBlciwgUHJvZ3JhbSYsIGR1bXBBU1ROb2RlKTsKIE1BS0VfUFJJTlRf
QURBUFRPUihTdHJ1Y3R1cmVEZWZpbml0aW9uRHVtcGVyLCBBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mLCBkdW1wQVNUTm9kZSk7CiBNQUtFX1BSSU5UX0FEQVBUT1IoRnVuY3Rpb25EZWZpbml0aW9u
RHVtcGVyLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIGR1bXBBU1ROb2RlKTsKK01BS0VfUFJJ
TlRfQURBUFRPUihOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uRHVtcGVyLCBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mLCBkdW1wQVNUTm9kZSk7CiBNQUtFX1BSSU5UX0FEQVBUT1IoVHlw
ZUR1bXBlciwgQVNUOjpVbm5hbWVkVHlwZSYsIGR1bXBBU1ROb2RlKTsKIAogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJU
eXBlcy5jcHAJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDI4ICs2
MSw3IEBAIHN0YXRpYyBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpUeXBlJiB1bmkKICAgICAgICAg
YXV0byYgdW5uYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMp
OwogICAgICAgICBhdXRvJiB1bm5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBl
Pih1bmlmeU90aGVyKTsKICAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVu
bmFtZWRUaGlzKSAmJiAhaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkT3RoZXIpKTsKLSAg
ICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OlBv
aW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwb2ludGVyVGhp
cyA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKTsKLSAgICAgICAgICAg
IGF1dG8mIHBvaW50ZXJPdGhlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRP
dGhlcik7Ci0gICAgICAgICAgICBpZiAocG9pbnRlclRoaXMuYWRkcmVzc1NwYWNlKCkgIT0gcG9p
bnRlck90aGVyLmFkZHJlc3NTcGFjZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKHBvaW50ZXJUaGlzLmVsZW1lbnRUeXBlKCksIHBv
aW50ZXJPdGhlci5lbGVtZW50VHlwZSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXM8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4odW5uYW1lZE90aGVyKSkgewotICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVu
Y2VUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKTsK
LSAgICAgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlT3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZE90aGVyKTsKLSAgICAgICAgICAgIGlmIChhcnJheVJl
ZmVyZW5jZVRoaXMuYWRkcmVzc1NwYWNlKCkgIT0gYXJyYXlSZWZlcmVuY2VPdGhlci5hZGRyZXNz
U3BhY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1
cm4gbWF0Y2hlcyhhcnJheVJlZmVyZW5jZVRoaXMuZWxlbWVudFR5cGUoKSwgYXJyYXlSZWZlcmVu
Y2VPdGhlci5lbGVtZW50VHlwZSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXM8QVNUOjpB
cnJheVR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90aGVy
KSkgewotICAgICAgICAgICAgYXV0byYgYXJyYXlUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5
cGU+KHVubmFtZWRUaGlzKTsKLSAgICAgICAgICAgIGF1dG8mIGFycmF5T3RoZXIgPSBkb3duY2Fz
dDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90aGVyKTsKLSAgICAgICAgICAgIGlmIChhcnJheVRo
aXMubnVtRWxlbWVudHMoKSAhPSBhcnJheU90aGVyLm51bUVsZW1lbnRzKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlUaGlz
LnR5cGUoKSwgYXJyYXlPdGhlci50eXBlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHVubmFtZWRUaGlzID09IHVubmFtZWRPdGhlcjsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAkocmV2aXNpb24g
MjQ2NTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1NiwxOCBAQCBOYW1lUmVzb2x2
ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYgCiB7CiB9CiAKK05hbWVSZXNvbHZlcjo6TmFt
ZVJlc29sdmVyKE5hbWVSZXNvbHZlciYgcGFyZW50UmVzb2x2ZXIsIE5hbWVDb250ZXh0JiBuYW1l
Q29udGV4dCkKKyAgICA6IG1fbmFtZUNvbnRleHQobmFtZUNvbnRleHQpCit7CisgICAgbV9pc1Jl
c29sdmluZ0NhbGxzID0gcGFyZW50UmVzb2x2ZXIubV9pc1Jlc29sdmluZ0NhbGxzOworICAgIHNl
dEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24ocGFyZW50UmVzb2x2ZXIubV9jdXJyZW50RnVuY3Rp
b24pOworfQorCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0
eXBlUmVmZXJlbmNlKQogeworICAgIGlmIChtX2lzUmVzb2x2aW5nQ2FsbHMpCisgICAgICAgIHJl
dHVybjsKKwogICAgIFNjb3BlZFNldEFkZGVyPEFTVDo6VHlwZVJlZmVyZW5jZSo+IGFkZGVyKG1f
dHlwZVJlZmVyZW5jZXMsICZ0eXBlUmVmZXJlbmNlKTsKICAgICBpZiAoIWFkZGVyLmlzTmV3RW50
cnkoKSkgewogICAgICAgICBzZXRFcnJvcigpOwpAQCAtODYsOCArOTYsNyBAQCB2b2lkIE5hbWVS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIHsKICAgICBOYW1l
Q29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7Ci0gICAgTmFtZVJlc29sdmVy
IG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7Ci0gICAgbmV3TmFtZVJlc29sdmVyLnNl
dEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obV9jdXJyZW50RnVuY3Rpb24pOworICAgIE5hbWVS
ZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIoKnRoaXMsIG5ld05hbWVDb250ZXh0KTsKICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CiAgICAgZm9yIChhdXRv
JiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKQogICAgICAgICBu
ZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CkBAIC05Nyw4ICsx
MDYsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlCiB2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCiB7CiAgICAgTmFtZUNvbnRleHQg
bmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwotICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVz
b2x2ZXIobmFtZUNvbnRleHQpOwotICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rp
b25EZWZpbml0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBOYW1lUmVzb2x2ZXIgbmV3TmFt
ZVJlc29sdmVyKCp0aGlzLCBuYW1lQ29udGV4dCk7CiAgICAgbmV3TmFtZVJlc29sdmVyLlZpc2l0
b3I6OnZpc2l0KGJsb2NrKTsKIH0KIApAQCAtMTA2LDEzICsxMTQsMTEgQEAgdm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbgogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChp
ZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgm
bV9uYW1lQ29udGV4dCk7Ci0gICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuYW1lQ29u
dGV4dCk7Ci0gICAgbmV3TmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24o
bV9jdXJyZW50RnVuY3Rpb24pOworICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIoKnRo
aXMsIG5hbWVDb250ZXh0KTsKICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0
KGlmU3RhdGVtZW50LmJvZHkoKSk7CiAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsK
ICAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwotICAgICAg
ICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KTsKLSAgICAgICAgbmV3
TmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obV9jdXJyZW50RnVuY3Rp
b24pOworICAgICAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKCp0aGlzLCBuYW1lQ29u
dGV4dCk7CiAgICAgICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmlmU3Rh
dGVtZW50LmVsc2VCb2R5KCkpOwogICAgIH0KIH0KQEAgLTEyMSwxNiArMTI3LDE0IEBAIHZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYKIHsKICAgICBjaGVja0Vycm9yQW5k
VmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwogICAgIE5hbWVDb250ZXh0IG5hbWVDb250
ZXh0KCZtX25hbWVDb250ZXh0KTsKLSAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5h
bWVDb250ZXh0KTsKLSAgICBuZXdOYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5p
dGlvbihtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZl
cigqdGhpcywgbmFtZUNvbnRleHQpOwogICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CiB9CiAKIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChB
U1Q6OkRvV2hpbGVMb29wJiB3aGlsZUxvb3ApCiB7CiAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRl
eHQoJm1fbmFtZUNvbnRleHQpOwotICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFt
ZUNvbnRleHQpOwotICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0
aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVy
KCp0aGlzLCBuYW1lQ29udGV4dCk7CiAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29w
LmNvbmRpdGlvbmFsKCkpOwogfQpAQCAtMTM4LDggKzE0Miw3IEBAIHZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OkRvV2hpbGVMb28KIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZv
ckxvb3AmIGZvckxvb3ApCiB7CiAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNv
bnRleHQpOwotICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwot
ICAgIG5ld05hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG1fY3VycmVu
dEZ1bmN0aW9uKTsKKyAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKCp0aGlzLCBuYW1l
Q29udGV4dCk7CiAgICAgbmV3TmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KGZvckxvb3ApOwog
fQogCkBAIC0xNzQsMTIgKzE3NywxNCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpS
ZXR1cm4mIHJlCiAKIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQogewotICAgIGlmIChhdXRvKiBn
ZXR0ZXJGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb25OYW1lKCkpKQotICAgICAgICBwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uc2V0UG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKmdldHRlckZ1bmN0aW9ucyk7
Ci0gICAgaWYgKGF1dG8qIHNldHRlckZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rp
b25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbk5hbWUoKSkpCi0gICAg
ICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZVNldHRlck92ZXJsb2Fkcygq
c2V0dGVyRnVuY3Rpb25zKTsKLSAgICBpZiAoYXV0byogYW5kZXJGdW5jdGlvbnMgPSBtX25hbWVD
b250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlv
bk5hbWUoKSkpCi0gICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUFu
ZGVyT3ZlcmxvYWRzKCphbmRlckZ1bmN0aW9ucyk7CisgICAgaWYgKG1faXNSZXNvbHZpbmdDYWxs
cykgeworICAgICAgICBpZiAoYXV0byogZ2V0dGVyRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5n
ZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uTmFtZSgp
KSkKKyAgICAgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUdldHRl
ck92ZXJsb2FkcygqZ2V0dGVyRnVuY3Rpb25zKTsKKyAgICAgICAgaWYgKGF1dG8qIHNldHRlckZ1
bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5zZXR0ZXJGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uc2V0UG9zc2libGVTZXR0ZXJPdmVybG9hZHMoKnNldHRlckZ1bmN0aW9ucyk7Cisg
ICAgICAgIGlmIChhdXRvKiBhbmRlckZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rp
b25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRlckZ1bmN0aW9uTmFtZSgpKSkKKyAgICAg
ICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUFuZGVyT3ZlcmxvYWRz
KCphbmRlckZ1bmN0aW9ucyk7CisgICAgfQogICAgIFZpc2l0b3I6OnZpc2l0KHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbik7CiB9CiAKQEAgLTIxMCwyMyArMjE1LDI1IEBAIHZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3MKIAogdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFT
VDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogewotICAgIGlmICghY2FsbEV4cHJl
c3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1f
bmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCi0gICAgICAg
ICAgICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaWYgKGF1dG8qIHR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBl
cyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVzLT5z
aXplKCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0g
bV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoIm9wZXJhdG9yIGNhc3QiX3N0cikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldENhc3REYXRhKCgqdHlwZXMpWzBd
LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJs
b2FkcygqZnVuY3Rpb25zKTsKKyAgICBpZiAobV9pc1Jlc29sdmluZ0NhbGxzKSB7CisgICAgICAg
IGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgICAgIGlmIChh
dXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lv
bi5uYW1lKCkpKQorICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2Fkcygq
ZnVuY3Rpb25zKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChhdXRv
KiB0eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXMtPnNpemUoKSA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRG
dW5jdGlvbnMoIm9wZXJhdG9yIGNhc3QiX3N0cikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5j
dGlvbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAg
IGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKLSAgICAgICAgc2V0RXJyb3Io
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJs
b2FkcygpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgfQogICAgIFZpc2l0b3I6OnZpc2l0KGNhbGxFeHByZXNzaW9uKTsKIH0K
QEAgLTI3OCw3ICsyODUsNyBAQCBib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJv
Z3JhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMo
UHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCitib29sIHJlc29s
dmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5h
bWVSZXNvbHZlcikKIHsKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dy
YW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJy
ZW50RnVuY3Rpb25EZWZpbml0aW9uKCZmdW5jdGlvbkRlZmluaXRpb24pOwpAQCAtMjk1LDYgKzMw
MiwyMCBAQCBib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgcmVzb2x2ZUNhbGxzSW5GdW5jdGlvbnMoUHJvZ3JhbSYgcHJv
Z3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgbmFtZVJlc29sdmVyLnNl
dElzUmVzb2x2aW5nQ2FsbHModHJ1ZSk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRp
b24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2
ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbigmZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAg
ICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24p
OworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0
aW9uKG51bGxwdHIpOworICAgIG5hbWVSZXNvbHZlci5zZXRJc1Jlc29sdmluZ0NhbGxzKGZhbHNl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV0hMU0wKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCShyZXZpc2lvbiAyNDY1MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIFByb2dyYW07CiBjbGFzcyBO
YW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7CiBwdWJsaWM6CiAgICAgTmFtZVJlc29sdmVy
KE5hbWVDb250ZXh0Jik7CisgICAgTmFtZVJlc29sdmVyKE5hbWVSZXNvbHZlciYsIE5hbWVDb250
ZXh0Jik7CiAKICAgICB2aXJ0dWFsIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CiAKQEAgLTUw
LDYgKzUxLDggQEAgcHVibGljOgogICAgICAgICBtX2N1cnJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9u
RGVmaW5pdGlvbjsKICAgICB9CiAKKyAgICB2b2lkIHNldElzUmVzb2x2aW5nQ2FsbHMoYm9vbCBp
c1Jlc29sdmluZ0NhbGxzKSB7IG1faXNSZXNvbHZpbmdDYWxscyA9IGlzUmVzb2x2aW5nQ2FsbHM7
IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpIG92ZXJy
aWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92ZXJyaWRlOwpAQCAtNjgsMTAgKzcx
LDEyIEBAIHByaXZhdGU6CiAgICAgTmFtZUNvbnRleHQmIG1fbmFtZUNvbnRleHQ7CiAgICAgSGFz
aFNldDxBU1Q6OlR5cGVSZWZlcmVuY2UqPiBtX3R5cGVSZWZlcmVuY2VzOwogICAgIEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uKiBtX2N1cnJlbnRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBib29s
IG1faXNSZXNvbHZpbmdDYWxscyB7IGZhbHNlIH07CiB9OwogCiBib29sIHJlc29sdmVOYW1lc0lu
VHlwZXMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYpOwotYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0
aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7Citib29sIHJlc29sdmVUeXBlTmFtZXNJbkZ1
bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7Citib29sIHJlc29sdmVDYWxsc0luRnVu
Y3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wK
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByZXBhcmUuY3BwCShyZXZpc2lvbiAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
OCArMTI1LDkgQEAgc3RhdGljIE9wdGlvbmFsPFByb2dyYW0+IHByZXBhcmVTaGFyZWQoUwogICAg
IFJVTl9QQVNTKHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMsIHByb2dyYW0pOwogICAgIFJV
Tl9QQVNTKHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucywgcHJvZ3JhbSk7CiAgICAgUlVO
X1BBU1Moc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgsIHByb2dyYW0pOworICAgIFJVTl9Q
QVNTKHJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucywgcHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsK
ICAgICBSVU5fUEFTUyhzeW50aGVzaXplQ29uc3RydWN0b3JzLCBwcm9ncmFtKTsKLSAgICBSVU5f
UEFTUyhyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucywgcHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAg
ICBSVU5fUEFTUyhyZXNvbHZlQ2FsbHNJbkZ1bmN0aW9ucywgcHJvZ3JhbSwgbmFtZVJlc29sdmVy
KTsKICAgICBSVU5fUEFTUyhjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucywgcHJvZ3JhbSk7CiAKICAg
ICBSVU5fUEFTUyhjaGVjaywgcHJvZ3JhbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNv
bnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDQ3ICs0NSw4MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFj
ZSBXSExTTCB7CiAKK2NsYXNzIFVubmFtZWRUeXBlS2V5IHsKK3B1YmxpYzoKKyAgICBVbm5hbWVk
VHlwZUtleSgpID0gZGVmYXVsdDsKKyAgICBVbm5hbWVkVHlwZUtleShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAgICAgICBtX3R5cGUgPSBiaXR3aXNlX2Nhc3Q8QVNU
OjpVbm5hbWVkVHlwZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOworICAgIH0KKworICAg
IFVubmFtZWRUeXBlS2V5KEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUpCisgICAgICAgIDogbV90eXBl
KCZ0eXBlKQorICAgIHsgfQorCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVy
biAhbV90eXBlOyB9CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBiaXR3aXNlX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSo+KHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMSkpOyB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlLT5oYXNoKCk7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1lZFR5
cGVLZXkmIG90aGVyKSBjb25zdCB7IHJldHVybiAqbV90eXBlID09ICpvdGhlci5tX3R5cGU7IH0K
KyAgICBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5
cGU7IH0KKworICAgIHN0cnVjdCBIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgVW5uYW1lZFR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBVbm5hbWVkVHlwZUtleSYgYSwgY29uc3QgVW5uYW1l
ZFR5cGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICB9OworCisgICAgc3RydWN0
IFRyYWl0cyA6IHB1YmxpYyBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxVbm5hbWVkVHlwZUtl
eT4geworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9
IHRydWU7CisgICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBVbm5hbWVkVHlw
ZUtleSYga2V5KSB7IHJldHVybiBrZXkuaXNFbXB0eVZhbHVlKCk7IH0KKyAgICB9OworCitwcml2
YXRlOgorICAgIEFTVDo6VW5uYW1lZFR5cGUqIG1fdHlwZSB7IG51bGxwdHIgfTsKK307CisKIGNs
YXNzIEZpbmRBbGxUeXBlcyA6IHB1YmxpYyBWaXNpdG9yIHsKIHB1YmxpYzoKICAgICB+RmluZEFs
bFR5cGVzKCkgPSBkZWZhdWx0OwogCiAgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBw
b2ludGVyVHlwZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVu
ZChwb2ludGVyVHlwZSk7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFkZChVbm5hbWVkVHlwZUtl
eSB7IHBvaW50ZXJUeXBlIH0pOwogICAgICAgICBWaXNpdG9yOjp2aXNpdChwb2ludGVyVHlwZSk7
CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlS
ZWZlcmVuY2VUeXBlKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBw
ZW5kKGFycmF5UmVmZXJlbmNlVHlwZSk7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFkZChVbm5h
bWVkVHlwZUtleSB7IGFycmF5UmVmZXJlbmNlVHlwZSB9KTsKICAgICAgICAgVmlzaXRvcjo6dmlz
aXQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6QXJy
YXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX3VubmFtZWRUeXBl
cy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYWRkKFVubmFtZWRU
eXBlS2V5IHsgYXJyYXlUeXBlIH0pOwogICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVR5cGUp
OwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fbmFtZWRUeXBl
cy5hcHBlbmQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgYXBwZW5kTmFtZWRUeXBl
KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KGVudW1lcmF0
aW9uRGVmaW5pdGlvbik7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBt
X25hbWVkVHlwZXMuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBhcHBlbmRO
YW1lZFR5cGUoc3RydWN0dXJlRGVmaW5pdGlvbik7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0
cnVjdHVyZURlZmluaXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUKICAgICB7Ci0g
ICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAg
ICAgYXBwZW5kTmFtZWRUeXBlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgIFZpc2l0
b3I6OnZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgfQogCi0gICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+IHRha2VVbm5hbWVkVHlwZXMo
KQorICAgIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXksIFVubmFtZWRUeXBlS2V5OjpIYXNoLCBVbm5h
bWVkVHlwZUtleTo6VHJhaXRzPiB0YWtlVW5uYW1lZFR5cGVzKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKG1fdW5uYW1lZFR5cGVzKTsKICAgICB9CkBAIC05Niw3ICsxMzEsMTcgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gbV91bm5hbWVkVHlwZXM7CisgICAgdm9pZCBhcHBlbmRO
YW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIHR5cGUpCisgICAgeworICAgICAgICAvLyBUaGUgd2F5
IHdlIHdhbGsgdGhlIEFTVCBlbnN1cmVzIHdlIHNob3VsZCBuZXZlciB2aXNpdCBhIG5hbWVkIHR5
cGUgdHdpY2UuCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogbV9uYW1lZFR5cGVzKQorICAgICAgICAgICAgQVNTRVJUKCZlbnRyeS5nZXQoKS51bmlmeU5v
ZGUoKSAhPSAmdHlwZS51bmlmeU5vZGUoKSk7CisjZW5kaWYKKyAgICAgICAgbV9uYW1lZFR5cGVz
LmFwcGVuZCh0eXBlKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PFVubmFtZWRUeXBlS2V5LCBVbm5h
bWVkVHlwZUtleTo6SGFzaCwgVW5uYW1lZFR5cGVLZXk6OlRyYWl0cz4gbV91bm5hbWVkVHlwZXM7
CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiBtX25h
bWVkVHlwZXM7CiB9OwogCkBAIC0xMDksMTQgKzE1NCwxNiBAQCBib29sIHN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvCiAKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogCi0g
ICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IHVubmFtZWRUeXBlcykgewotICAgICAgICBhdXRv
IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CisgICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZUtleSA6IHVubmFt
ZWRUeXBlcykgeworICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IHVubmFtZWRUeXBlS2V5LnVu
bmFtZWRUeXBlKCk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbih1bm5hbWVkVHlw
ZS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5jbG9uZSgpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwogICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCks
IFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3Qi
X3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7Cisg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5vcmlnaW4oKSks
IEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgp
LCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpKTsKICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29uc3Ry
dWN0b3IpKTsKIAotICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVs
dENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1l
ZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9ucygpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKKyAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLm9yaWdpbigpKSwg
QVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmNsb25lKCks
ICJvcGVyYXRvciBjYXN0Il9zdHIsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZShkZWZhdWx0Q29uc3RydWN0b3IpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJh
eVJlZmVyZW5jZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAkocmV2aXNpb24gMjQ2NTE1
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlS
ZWZlcmVuY2VUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHRoaXMtPkJhc2U6Omhhc2goKSBeIFN0cmluZ0hhc2hlcjo6Y29tcHV0
ZUxpdGVyYWxIYXNoKCJhcnJheSIpOwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBVbm5hbWVkVHlwZSYgb3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
IWlzPEFycmF5UmVmZXJlbmNlVHlwZT4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHJldHVybiBhZGRyZXNzU3BhY2UoKSA9PSBkb3duY2FzdDxBcnJheVJlZmVy
ZW5jZVR5cGU+KG90aGVyKS5hZGRyZXNzU3BhY2UoKQorICAgICAgICAgICAgJiYgZWxlbWVudFR5
cGUoKSA9PSBkb3duY2FzdDxBcnJheVJlZmVyZW5jZVR5cGU+KG90aGVyKS5lbGVtZW50VHlwZSgp
OworICAgIH0KKwogcHJpdmF0ZToKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCShyZXZpc2lv
biAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xBcnJheVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTUgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFzaChtX251bUVsZW1lbnRz
KSBeIG1fZWxlbWVudFR5cGUtPmhhc2goKTsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVW5uYW1lZFR5cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKCFpczxBcnJheVR5cGU+KG90aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICByZXR1cm4gbnVtRWxlbWVudHMoKSA9PSBkb3duY2FzdDxBcnJheVR5cGU+KG90aGVy
KS5udW1FbGVtZW50cygpCisgICAgICAgICAgICAmJiB0eXBlKCkgPT0gZG93bmNhc3Q8QXJyYXlU
eXBlPihvdGhlcikudHlwZSgpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8VW5u
YW1lZFR5cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5M
aXRlcmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAkocmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOSBAQCBwdWJsaWM6CiAKICAgICBCb29sZWFuTGl0
ZXJhbCBjbG9uZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gQm9vbGVhbkxpdGVyYWwo
TGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgbV92YWx1ZSk7CisgICAgICAgIEJvb2xlYW5MaXRlcmFs
IHJlc3VsdChMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgY29weVR5
cGVUbyhyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCShyZXZp
c2lvbiAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiAr
NzMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBhdXRvIHJlc3VsdCA9IEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbChMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcobV9sZWZ0KSwgU3Ry
aW5nKG1fcmlnaHQpKTsKICAgICAgICAgcmVzdWx0Lm1fZW51bWVyYXRpb25NZW1iZXIgPSBtX2Vu
dW1lcmF0aW9uTWVtYmVyOworICAgICAgICBjb3B5VHlwZVRvKHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAy
NDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
eHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgbV90eXBlQW5ub3RhdGlvbiA9IFdURk1vdmUodHlwZUFubm90YXRpb24pOwogICAgIH0K
IAorICAgIHZvaWQgY29weVR5cGVUbyhFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBjb25zdF9jYXN0PEV4cHJlc3Npb24qPih0
aGlzKS0+bWF5YmVSZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIG90aGVyLnNldFR5cGUocmVz
b2x2ZWRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgaWYgKGF1dG8qIHR5cGVBbm5vdGF0aW9uID0g
bWF5YmVUeXBlQW5ub3RhdGlvbigpKQorICAgICAgICAgICAgb3RoZXIuc2V0VHlwZUFubm90YXRp
b24oVHlwZUFubm90YXRpb24oKnR5cGVBbm5vdGF0aW9uKSk7CisgICAgfQorCiAgICAgdmlydHVh
bCBib29sIGlzQXNzaWdubWVudEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGbG9hdExpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAkocmV2aXNpb24gMjQ2NTE1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDggKzYyLDEwIEBAIHB1YmxpYzoKICAgICBGbG9hdExp
dGVyYWwgY2xvbmUoKSBjb25zdAogICAgIHsKICAgICAgICAgRmxvYXRMaXRlcmFsIHJlc3VsdChM
ZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fdHlwZSA9
IG1fdHlwZS5jbG9uZSgpOwogICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gbV90eXBl
Lm1heWJlUmVzb2x2ZWRUeXBlKCkpCiAgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUo
cmVzb2x2ZWRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgY29weVR5cGVUbyhyZXN1bHQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRl
cmFsVHlwZS5jcHAJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw2ICs3MiwxNiBAQCB1bnNpZ25lZCBGbG9hdExpdGVyYWxUeXBlOjpjb252ZXJzaW9u
Q29zCiAgICAgcmV0dXJuIDE7CiB9CiAKK0Zsb2F0TGl0ZXJhbFR5cGUgRmxvYXRMaXRlcmFsVHlw
ZTo6Y2xvbmUoKSBjb25zdAoreworICAgIEZsb2F0TGl0ZXJhbFR5cGUgcmVzdWx0KExleGVyOjpU
b2tlbihtX3ByZWZlcnJlZFR5cGUtPm9yaWdpbigpKSwgbV92YWx1ZSk7CisgICAgaWYgKGF1dG8q
IHR5cGUgPSBtYXliZVJlc29sdmVkVHlwZSgpKQorICAgICAgICByZXN1bHQucmVzb2x2ZSh0eXBl
LT5jbG9uZSgpKTsKKyAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBl
LT5jbG9uZVR5cGVSZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKIH0gLy8g
bmFtZXNwYWNlIEFTVAogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCShy
ZXZpc2lvbiAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDgg
QEAgcHVibGljOgogICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25z
dCBvdmVycmlkZTsKIAorICAgIEZsb2F0TGl0ZXJhbFR5cGUgY2xvbmUoKSBjb25zdDsKKwogcHJp
dmF0ZToKICAgICBmbG9hdCBtX3ZhbHVlOwogICAgIC8vIFRoaXMgaXMgYSB1bmlxdWVfcHRyIHRv
IHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50
ZWdlckxpdGVyYWwuaAkocmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtNjIsOCArNjIsMTAgQEAgcHVibGljOgogICAgIEludGVnZXJMaXRlcmFsIGNsb25lKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEludGVnZXJMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4ob3Jp
Z2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IG1fdHlwZS5jbG9uZSgp
OwogICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gbV90eXBlLm1heWJlUmVzb2x2ZWRU
eXBlKCkpCiAgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzb2x2ZWRUeXBlLT5j
bG9uZSgpKTsKKyAgICAgICAgY29weVR5cGVUbyhyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3Bw
CShyZXZpc2lvbiAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2
ICs3MywxNSBAQCB1bnNpZ25lZCBJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25DCiAgICAg
cmV0dXJuIDE7CiB9CiAKK0ludGVnZXJMaXRlcmFsVHlwZSBJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNs
b25lKCkgY29uc3QKK3sKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUgcmVzdWx0KExleGVyOjpUb2tl
bihtX3ByZWZlcnJlZFR5cGUtPm9yaWdpbigpKSwgbV92YWx1ZSk7CisgICAgaWYgKGF1dG8qIHR5
cGUgPSBtYXliZVJlc29sdmVkVHlwZSgpKQorICAgICAgICByZXN1bHQucmVzb2x2ZSh0eXBlLT5j
bG9uZSgpKTsKKyAgICByZXN1bHQubV9wcmVmZXJyZWRUeXBlID0gbV9wcmVmZXJyZWRUeXBlLT5j
bG9uZVR5cGVSZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVz
cGFjZSBBU1QKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgJKHJl
dmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw4
IEBAIHB1YmxpYzoKICAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29u
c3Qgb3ZlcnJpZGU7CiAKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUgY2xvbmUoKSBjb25zdDsKKwog
cHJpdmF0ZToKICAgICBpbnQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0
byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxM
aXRlcmFsLmgJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg
KzYxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRvIHJlc3VsdCA9IE51bGxMaXRlcmFsKExleGVy
OjpUb2tlbihvcmlnaW4oKSkpOwogICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gbV90
eXBlLm1heWJlUmVzb2x2ZWRUeXBlKCkpCiAgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29s
dmUocmVzb2x2ZWRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgY29weVR5cGVUbyhyZXN1bHQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5o
CShyZXZpc2lvbiAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxNSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0aGlzLT5CYXNlOjpoYXNoKCkgXiBTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVMaXRlcmFsSGFzaCgicG9pbnRlciIpOwogICAgIH0KIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZSYgb3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoIWlzPFBvaW50ZXJUeXBlPihvdGhlcikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NTcGFjZSgpID09IGRvd25jYXN0PFBvaW50
ZXJUeXBlPihvdGhlcikuYWRkcmVzc1NwYWNlKCkKKyAgICAgICAgICAgICYmIGVsZW1lbnRUeXBl
KCkgPT0gZG93bmNhc3Q8UG9pbnRlclR5cGU+KG90aGVyKS5lbGVtZW50VHlwZSgpOworICAgIH0K
KwogcHJpdmF0ZToKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgJKHJldmlzaW9u
IDI0NjUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFR5cGVSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNywxNSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8Y29uc3QgVHlwZSo+OjpoYXNoKCZ1bmlm
eU5vZGUoKSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVubmFtZWRUeXBl
JiBvdGhlcikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVk
VHlwZSk7CisgICAgICAgIGlmICghaXM8VHlwZVJlZmVyZW5jZT4ob3RoZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAmdW5pZnlOb2RlKCkgPT0gJmRvd25j
YXN0PFR5cGVSZWZlcmVuY2U+KG90aGVyKS51bmlmeU5vZGUoKTsKKyAgICB9CisKIHByaXZhdGU6
CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBUeXBlQXJndW1lbnRzIG1fdHlwZUFyZ3VtZW50czsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFt
ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAkocmV2aXNpb24gMjQ2NTE1KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBVbmlxdWVSZWY8
VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVubmFt
ZWRUeXBlJikgY29uc3QgPSAwOwogCiAgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDggKzYyLDEwIEBAIHB1YmxpYzoKICAgICBVbnNpZ25lZEludGVn
ZXJMaXRlcmFsIGNsb25lKCkgY29uc3QKICAgICB7CiAgICAgICAgIFVuc2lnbmVkSW50ZWdlckxp
dGVyYWwgcmVzdWx0KExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgICAgICBy
ZXN1bHQubV90eXBlID0gbV90eXBlLmNsb25lKCk7CiAgICAgICAgIGlmIChhdXRvKiByZXNvbHZl
ZFR5cGUgPSBtX3R5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkKICAgICAgICAgICAgIHJlc3VsdC5t
X3R5cGUucmVzb2x2ZShyZXNvbHZlZFR5cGUtPmNsb25lKCkpOworICAgICAgICBjb3B5VHlwZVRv
KHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCShyZXZpc2lvbiAy
NDY1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xV
bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2
LDE1IEBAIHVuc2lnbmVkIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjb24KICAgICByZXR1
cm4gMTsKIH0KIAorVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGU6OmNsb25lKCkgY29uc3QKK3sKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZSByZXN1bHQoTGV4ZXI6OlRva2VuKG1fcHJlZmVycmVkVHlwZS0+b3JpZ2luKCkpLCBtX3ZhbHVl
KTsKKyAgICBpZiAoYXV0byogdHlwZSA9IG1heWJlUmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIHJl
c3VsdC5yZXNvbHZlKHR5cGUtPmNsb25lKCkpOworICAgIHJlc3VsdC5tX3ByZWZlcnJlZFR5cGUg
PSBtX3ByZWZlcnJlZFR5cGUtPmNsb25lVHlwZVJlZmVyZW5jZSgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEFTVAogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgJKHJldmlzaW9uIDI0NjUxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDggQEAgcHVibGljOgog
ICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdW5z
aWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsK
IAorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlIGNsb25lKCkgY29uc3Q7CisKIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0
byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNDY1MTUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxOS0wNi0xOCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBbV0hMU0xdIERvIG5vdCBnZW5lcmF0ZSBkdXBsaWNhdGUgY29uc3RydWN0b3Jz
L2NvcHkgY29uc3RydWN0b3JzIGluIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODU4MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IFJvYmluIE1vcmlzc2V0LgorCisgICAgICAgICogd2ViZ3B1L3dobHNsLWR1cGxp
Y2F0ZS10eXBlcy1zaG91bGQtbm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQt
bm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA2LTE3ICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSExTTF0gTWFrZSAu
bGVuZ3RoIHdvcmsKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlw
ZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWR1cGxpY2F0ZS10eXBlcy1zaG91bGQt
bm90LXByb2R1Y2UtZHVwbGljYXRlLWN0b3JzLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZHVwbGljYXRlLXR5cGVzLXNob3VsZC1ub3QtcHJv
ZHVjZS1kdXBsaWNhdGUtY3RvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTIgQEAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzBdIGlzIDIKK1BBU1MgcmVzdWx0c0Zsb2F0MzJB
cnJheVsxXSBpcyA0CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMl0gaXMgNgorUEFTUyByZXN1
bHRzRmxvYXQzMkFycmF5WzNdIGlzIDgKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs0XSBpcyA1
CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gaXMgNgorUEFTUyByZXN1bHRzRmxvYXQzMkFy
cmF5WzZdIGlzIDcKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs3XSBpcyA4CisKSW5kZXg6IExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNl
LWR1cGxpY2F0ZS1jdG9ycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1kdXBsaWNhdGUtdHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kdXBsaWNhdGUt
dHlwZXMtc2hvdWxkLW5vdC1wcm9kdWNlLWR1cGxpY2F0ZS1jdG9ycy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTExIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBYWVog
eworICAgIGludCB4OworICAgIGludCB5OworICAgIGludCB6OworfQorCit0eXBlZGVmIFhZWjEg
PSBYWVo7Cit0eXBlZGVmIFhZWjIgPSBYWVo7Cit0eXBlZGVmIFhZWjMgPSBYWVo7CisKK1tudW10
aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0
W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRo
cmVhZElEKSB7CisgICAgdGhyZWFkIGludCogeDsKKyAgICB0aHJlYWQgaW50KiB5OworICAgIHRo
cmVhZCBmbG9hdCogZjE7CisgICAgdGhyZWFkIGZsb2F0KiBmMjsKKyAgICBYWVoxIGE7CisgICAg
WFlaMiBiOworICAgIFhZWjMgYzsKKyAgICB0aHJlYWQgaW50W10gaW50QXJyYXlSZWYxOworICAg
IHRocmVhZCBpbnRbXSBpbnRBcnJheVJlZjI7CisgICAgaWYgKCp4ID09ICp5ICYmIHggPT0geSAm
JiB4ID09IG51bGwgJiYgZjEgPT0gbnVsbCAmJiAqZjEgPT0gMCkgeworICAgICAgICBidWZmZXJb
dWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7CisgICAg
fQorfQorYDsKK2xldCByZXN1bHRzRmxvYXQzMkFycmF5OworYXN5bmMgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0
ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsK
KworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2Nv
ZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFn
ZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsK
KworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7Ymlu
ZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRH
cm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29t
cHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlw
ZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVO
VCAqIDg7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAg
IGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygp
OworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVy
QXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVmZmVy
RmxvYXQzMkFycmF5WzFdID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOworICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0g
NTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVs2XSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIudW5t
YXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1
ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBi
aW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0
LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAg
ICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVm
ZmVyLCAwLCBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4KTsKKyAgICBjb25zdCBj
b21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7Cisg
ICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAg
Y29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1
dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIu
ZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5p
c2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKwor
ICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVh
ZEFzeW5jKCk7CisgICAgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVz
dWx0c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVswXSIs
ICIyIik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMV0iLCAiNCIpOworICAg
IHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzJdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgi
cmVzdWx0c0Zsb2F0MzJBcnJheVszXSIsICI4Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9h
dDMyQXJyYXlbNF0iLCAiNSIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzVd
IiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs2XSIsICI3Iik7Cisg
ICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbN10iLCAiOCIpOworICAgIHJlc3VsdHNC
dWZmZXIudW5tYXAoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rp
b24oKSB7CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>
<flag name="commit-queue"
          id="388133"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>