<?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>200471</bug_id>
          
          <creation_ts>2019-08-06 10:37:42 -0700</creation_ts>
          <short_desc>[WHLSL] Metal code generation unnecessarily does string copies by passing partial results as Strings</short_desc>
          <delta_ts>2022-02-28 03:30:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200474</see_also>
          <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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1558820</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-06 10:37:42 -0700</bug_when>
    <thetext>WHLSL Metal code generation unnecessarily does string copies by passing partial results as Strings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558828</commentid>
    <comment_count>1</comment_count>
      <attachid>375632</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-06 10:47:42 -0700</bug_when>
    <thetext>Created attachment 375632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558837</commentid>
    <comment_count>2</comment_count>
      <attachid>375632</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-06 10:58:57 -0700</bug_when>
    <thetext>Comment on attachment 375632
Patch

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

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:93
&gt; +        // FIXME: Add direct StringBuilder -&gt; NSString conversion to void extra copy into a WTF::String

void =&gt; avoid

Maybe also worth filing a bug?

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:405
&gt; +        // FIXME: Add direct StringBuilder -&gt; NSString conversion to void extra copy into a WTF::String

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558854</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-06 11:47:00 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #2)
&gt; Comment on attachment 375632 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=375632&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:93
&gt; &gt; +        // FIXME: Add direct StringBuilder -&gt; NSString conversion to void extra copy into a WTF::String
&gt; 
&gt; void =&gt; avoid
&gt; 
&gt; Maybe also worth filing a bug?

https://bugs.webkit.org/show_bug.cgi?id=200474</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558864</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-06 12:04:02 -0700</bug_when>
    <thetext>Committed r248307: &lt;https://trac.webkit.org/changeset/248307&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558865</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-06 12:04:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/53997291&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375632</attachid>
            <date>2019-08-06 10:47:42 -0700</date>
            <delta_ts>2022-02-28 03:30:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200471-20190806104742.patch</filename>
            <type>text/plain</type>
            <size>70393</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODMwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNSBAQAorMjAxOS0wOC0wNiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV0hMU0wgTWV0YWwgY29kZSBnZW5l
cmF0aW9uIHVubmVjZXNzYXJpbHkgZG9lcyBzdHJpbmcgY29waWVzIGJ5IHBhc3NpbmcgcGFydGlh
bCByZXN1bHRzIGFzIFN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDQ3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEF2b2lkIHN0cmluZyBjb3BpZXMgYnkgcGFzc2luZyBhIHNpbmdsZSBTdHJp
bmdCdWlsZGVyIGFsbCB0aGUgd2F5IHRocm91Z2ggTWV0YWwgY29kZQorICAgICAgICBnZW5lcmF0
aW9uIGFuZCBvbmx5IGNvbnZlcnRpbmcgdG8gYSBTdHJpbmcgd2hlbiBwYXNzaW5nIHRoZSBjb25z
dHJ1Y3RlZCBzaGFkZXIgdG8gTWV0YWwKKyAgICAgICAgQVBJLgorICAgICAgICAKKyAgICAgICAg
V2hlcmUgcG9zc2libGUsIHVzZSBTdHJpbmdWaWV3IGluIGxpZXUgb2YgU3RyaW5nIGZvciB0ZW1w
b3Jhcnkgc3RyaW5ncyBiZWluZyBwYXNzZWQgdG8KKyAgICAgICAgdGhlIFN0cmluZ0J1aWxkZXIg
dG8gYXZvaWQgdGhlIGFsbG9jYXRpb24gb3ZlcmhlYWQgb2YgU3RyaW5nSW1wbC4gCisKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OnRvU3RyaW5nKToKKyAgICAgICAgU3dpdGNoIHRvIFN0
cmluZ1ZpZXcuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWls
dEluU2VtYW50aWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkJ1aWx0SW5TZW1h
bnRpYzo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICBTd2l0Y2ggdG8gU3RyaW5nVmlldy4KKwor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5UG9pbnRUeXBlLmg6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjp0b1N0cmluZyk6CisgICAgICAgIFN3aXRj
aCB0byBTdHJpbmdWaWV3LgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUG9pbnRlclR5cGUuaDoKKyAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5ICJwcml2YXRlOiIu
CisgICAgCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VT
ZW1hbnRpYy5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVzb3VyY2VTZW1hbnRp
Yzo6dG9TdHJpbmcpOgorICAgICAgICBTd2l0Y2ggdG8gU3RyaW5nVmlldy4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5n
OjplbWl0UmVzb3VyY2VIZWxwZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6ZW1pdFJlc291cmNlU2lnbmF0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjplbWl0QnVp
bHRJbnNTaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OmVtaXRNYW5nbGVkSW5wdXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjplbWl0TWFuZ2xlZE91dHB1dFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRp
bmc6OmVtaXRVbnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjplbWl0SGVscGVy
VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50
U2NhZmZvbGRpbmc6OmVtaXRTaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmVtaXRVbnBhY2spOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmVtaXRQ
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50
U2NhZmZvbGRpbmc6OmVtaXRIZWxwZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjplbWl0U2lnbmF0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRp
bmc6OmVtaXRVbnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVu
dEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6ZW1pdFBhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjplbWl0SGVscGVyVHlwZXMp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRW50cnlQb2ludFNjYWZm
b2xkaW5nOjplbWl0U2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6ZW1pdFVucGFjayk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmVtaXRQYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5n
OjpyZXNvdXJjZUhlbHBlclR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpyZXNvdXJjZVNpZ25hdHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6YnVpbHRJbnNTaWduYXR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hbmdsZWRJbnB1dFBhdGgpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6
Om1hbmdsZWRPdXRwdXRQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0
SW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50
cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQ
b2ludFNjYWZmb2xkaW5nOjp1bnBhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2spOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6aGVscGVyVHlwZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OnVucGFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVs
cGVyVHlwZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21w
dXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBh
Y2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRW50
cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oOgorICAgICAgICBS
YXRoZXIgdGhhbiBoYXZlIHNjYWZmb2xkaW5nIHJldHVybiBzdHJpbmdzLCBwYXNzIGluIFN0cmlu
Z0J1aWxkZXJzIGV2ZXJ5d2hlcmUuIAorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6ZW1pdENvbnN0YW50RXhwcmVzc2lvblN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OmdlbmVyYXRlTWV0YWxGdW5jdGlvbnNNYXBwaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6ZW1pdFNoYXJlZE1ldGFsRnVuY3Rpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6ZW1pdE1ldGFsRnVuY3Rpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6
RnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnRvU3RyaW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVuZGVyRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjpDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6c2hhcmVkTWV0YWxGdW5jdGlvbnMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjptZXRhbEZ1bmN0aW9ucyk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldy
aXRlci5oOgorICAgICAgICBSYXRoZXIgdGhhbiByZXR1cm5pbmcgU3RyaW5ncyBmcm9tIGZ1bmN0
aW9uIGdlbmVyYXRpb24gZnVuY3Rpb25zLCBwYXNzIGluIFN0cmluZ0J1aWxkZXJzIGV2ZXJ5d2hl
cmUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6Om1ldGFsQ29k
ZVByb2xvZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmR1bXBNZXRhbENvZGVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmdlbmVyYXRlTWV0YWxD
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Z2VuZXJhdGVNZXRhbENvZGVT
aGFyZWQpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMTWV0YWxDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIFN3aXRjaCBSZW5kZXJNZXRhbENvZGUg
YW5kIENvbXB1dGVNZXRhbENvZGUgdG8gY29udGFpbiBTdHJpbmdCdWlsZGVycyB0byBhbGxvdwor
ICAgICAgICBkZWxheWluZyBjb252ZXJzaW9uIHRvIFN0cmluZyB0byB0aGUgbGF0ZXN0IHBvaW50
IHBvc3NpYmxlLgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTFR5cGVOYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5
cGVOYW1lcjo6ZW1pdE1ldGFsVHlwZURlY2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6ZW1pdE5hbWVkVHlwZURlZmlu
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXRB
bGxVbm5hbWVkVHlwZURlZmluaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6VHlwZU5hbWVyOjplbWl0TWV0YWxUeXBlRGVmaW5pdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXRNZXRhbFR5cGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpNZXRhbDo6TWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXI6Ok1ldGFsVHlw
ZURlY2xhcmF0aW9uV3JpdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6TWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXI6OnRvU3RyaW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXI6
OnZpc2l0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5h
bWVyOjptZXRhbFR5cGVEZWNsYXJhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1ldGFsVHlwZURlZmluaXRpb25zKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptZXRhbFR5cGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVO
YW1lci5oOgorICAgICAgICBSYXRoZXIgdGhhbiByZXR1cm5pbmcgU3RyaW5ncyBmcm9tIGZ1bmN0
aW9uIGdlbmVyYXRpb24gZnVuY3Rpb25zLCBwYXNzIGluIFN0cmluZ0J1aWxkZXJzIGV2ZXJ5d2hl
cmUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVJlc291cmNlU2VtYW50aWMpOgor
ICAgICAgICBSZW1vdmUgdXNlIG9mIF9zdHIsIHdoaWNoIGFsbG9jYXRlcyBhIFN0cmluZywgYW5k
IGp1c3QgdXNlIGEgU3RyaW5nVmlldyBkaXJlY3RseS4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJlcGFyZS5oOgorICAgICAgICBTd2l0Y2ggUmVuZGVyUHJlcGFyZVJl
c3VsdCBhbmQgQ29tcHV0ZVByZXBhcmVSZXN1bHQgdG8gY29udGFpbiBTdHJpbmdCdWlsZGVycyB0
byBhbGxvdworICAgICAgICBkZWxheWluZyBjb252ZXJzaW9uIHRvIFN0cmluZyB0byB0aGUgbGF0
ZXN0IHBvaW50IHBvc3NpYmxlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6dHJ5U2V0
RnVuY3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVu
ZGVyUGlwZWxpbmVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6
CisgICAgICAgIENvbnZlcnQgU3RyaW5nQnVpbGRlcnMgdG8gU3RyaW5nIGF0IHRoZSBsYXN0IG1v
bWVudCBuZWNlc3NhcnkuIEFkZHMgYSBGSVhNRSB0byBpbXByb3ZlCisgICAgICAgIGluIHRoZSBm
dXR1cmUgYnkgYWRkaW5nIGRpcmVjdCBjb252ZXJzaW9uIGZyb20gU3RyaW5nQnVpbGRlciB0byBO
U1N0cmluZyB0byBhdm9pZCBhbm90aGVyCisgICAgICAgIGNvcHkuCisKIDIwMTktMDgtMDYgIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dITFNMXSBSZWR1Y2Ug
dGhlIG51bWJlciBvZiB2YXJpYWJsZXMgdGhhdCBtYWtlIGl0IGludG8gdGhlIGdsb2JhbCBzdHJ1
Y3QgYnkgc2tpcHBpbmcgc3RkbGliIGZ1bmN0aW9ucyBhbmQgaW50ZXJuYWwgdXNlcyBvZiBNYWtl
UG9pbnRlckV4cHJlc3Npb24vTWFrZUFycmF5UmVmZXJlbmNlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCShyZXZpc2lv
biAyNDgyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5NSw4ICs2OTUsOCBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VSZXNvdXJjZVNlbWFudGljKCkgLT4gCiAgICAgaWYgKHRyeVR5cGUoVG9rZW46OlR5cGU6
OkNvbW1hKSkgewogICAgICAgICBDT05TVU1FX1RZUEUoc3BhY2VUb2tlbiwgSWRlbnRpZmllcik7
CiAgICAgICAgIGF1dG8gc3BhY2VUb2tlblN0cmluZ1ZpZXcgPSBzcGFjZVRva2VuLT5zdHJpbmdW
aWV3KG1fbGV4ZXIpOwotICAgICAgICBhdXRvIHByZWZpeCA9ICJzcGFjZSJfc3RyOwotICAgICAg
ICBpZiAoIXNwYWNlVG9rZW5TdHJpbmdWaWV3LnN0YXJ0c1dpdGgoU3RyaW5nVmlldyhwcmVmaXgp
KSkKKyAgICAgICAgU3RyaW5nVmlldyBwcmVmaXggeyAic3BhY2UiIH07CisgICAgICAgIGlmICgh
c3BhY2VUb2tlblN0cmluZ1ZpZXcuc3RhcnRzV2l0aChwcmVmaXgpKQogICAgICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VTdHJpbmcoIlNlY29uZCBhcmd1bWVudCB0
byByZXNvdXJjZSBzZW1hbnRpYyAiLCBzcGFjZVRva2VuU3RyaW5nVmlldywgIiBuZWVkcyBiZSBv
ZiB0aGUgZm9ybSAnc3BhY2UwJyIpKSk7CiAgICAgICAgIGlmIChzcGFjZVRva2VuU3RyaW5nVmll
dy5sZW5ndGgoKSA8PSBwcmVmaXgubGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oRXJyb3IobWFrZVN0cmluZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNl
IHNlbWFudGljICIsIHNwYWNlVG9rZW5TdHJpbmdWaWV3LCAiIG5lZWRzIGJlIG9mIHRoZSBmb3Jt
ICdzcGFjZTAnIikpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJlcGFyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJlcGFyZS5oCShyZXZpc2lvbiAyNDgyOTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKICNpbmNsdWRlICJXSExT
TE1hbmdsZWROYW1lcy5oIgogI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSw3ICs0MCw3IEBAIG5hbWVz
cGFjZSBXSExTTCB7CiBjb25zdGV4cHIgYm9vbCBkdW1wTWV0YWxDb21waWxlVGltZXMgPSBmYWxz
ZTsKIAogc3RydWN0IFJlbmRlclByZXBhcmVSZXN1bHQgewotICAgIFN0cmluZyBtZXRhbFNvdXJj
ZTsKKyAgICBTdHJpbmdCdWlsZGVyIG1ldGFsU291cmNlOwogICAgIE1ldGFsOjpNYW5nbGVkRnVu
Y3Rpb25OYW1lIG1hbmdsZWRWZXJ0ZXhFbnRyeVBvaW50TmFtZTsKICAgICBNZXRhbDo6TWFuZ2xl
ZEZ1bmN0aW9uTmFtZSBtYW5nbGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZTsKIH07CkBAIC01Miw3
ICs1Myw3IEBAIHN0cnVjdCBDb21wdXRlRGltZW5zaW9ucyB7CiB9OwogCiBzdHJ1Y3QgQ29tcHV0
ZVByZXBhcmVSZXN1bHQgewotICAgIFN0cmluZyBtZXRhbFNvdXJjZTsKKyAgICBTdHJpbmdCdWls
ZGVyIG1ldGFsU291cmNlOwogICAgIE1ldGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRF
bnRyeVBvaW50TmFtZTsKICAgICBDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9uczsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xB
ZGRyZXNzU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaAkocmV2aXNpb24gMjQ4MjkwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDE4ICs0NCwxOCBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFj
ZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAogfTsKIAotQUxXQVlTX0lOTElORSBTdHJpbmcgdG9T
dHJpbmcoQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKK0FMV0FZU19JTkxJTkUgU3RyaW5nVmll
dyB0b1N0cmluZyhBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQogewogICAgIHN3aXRjaCAoYWRk
cmVzc1NwYWNlKSB7CiAgICAgY2FzZSBBZGRyZXNzU3BhY2U6OkNvbnN0YW50OgotICAgICAgICBy
ZXR1cm4gImNvbnN0YW50Il9zdHI7CisgICAgICAgIHJldHVybiAiY29uc3RhbnQiOwogICAgIGNh
c2UgQWRkcmVzc1NwYWNlOjpEZXZpY2U6Ci0gICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7Cisg
ICAgICAgIHJldHVybiAiZGV2aWNlIjsKICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6VGhyZWFkZ3Jv
dXA6Ci0gICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0cjsKKyAgICAgICAgcmV0dXJuICJ0
aHJlYWRncm91cCI7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGFkZHJlc3NTcGFjZSA9
PSBBZGRyZXNzU3BhY2U6OlRocmVhZCk7Ci0gICAgICAgIHJldHVybiAidGhyZWFkIl9zdHI7Cisg
ICAgICAgIHJldHVybiAidGhyZWFkIjsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0
SW5TZW1hbnRpYy5oCShyZXZpc2lvbiAyNDgyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpA
QCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKICAgICB9CiAKLSAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdAorICAgIFN0cmluZ1ZpZXcg
dG9TdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhcmlhYmxlKSB7CiAg
ICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5zdGFuY2VJRDoKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5UG9pbnRUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW50cnlQ
b2ludFR5cGUuaAkocmV2aXNpb24gMjQ4MjkwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMRW50cnlQb2ludFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBlbnVtIGNsYXNzIEVudHJ5UG9pbnRUeXBlIDogdWludDhfdCB7CiAgICAg
Q29tcHV0ZSwKIH07CiAKLUFMV0FZU19JTkxJTkUgU3RyaW5nIHRvU3RyaW5nKEVudHJ5UG9pbnRU
eXBlIHR5cGUpCitBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXcgdG9TdHJpbmcoRW50cnlQb2ludFR5
cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEVudHJ5UG9pbnRUeXBl
OjpWZXJ0ZXg6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xQb2ludGVyVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgJKHJldmlzaW9uIDI0ODI5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgY2xhc3MgUG9pbnRlclR5cGUgZmlu
YWwgOiBwdWJsaWMgUmVmZXJlbgogICAgICAgICA6IEJhc2UobG9jYXRpb24sIGFkZHJlc3NTcGFj
ZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KLXB1YmxpYzoKIAorcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8UG9pbnRlclR5cGU+IGNyZWF0ZShDb2RlTG9jYXRpb24gbG9jYXRp
b24sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIFJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5
cGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQb2ludGVyVHlwZShsb2Nh
dGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKGVsZW1lbnRUeXBlKSkpOwpAQCAtNzgsOCArNzgs
NiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhlbGVtZW50VHlw
ZSgpLnRvU3RyaW5nKCksICcqJyk7CiAgICAgfQotCi1wcml2YXRlOgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgQVNUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xSZXNvdXJjZVNlbWFudGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCShyZXZpc2lvbiAy
NDgyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xS
ZXNvdXJjZVNlbWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIFJlc291cmNlU2VtYW50aWMoY29uc3QgUmVzb3VyY2VTZW1hbnRpYyYpID0gZGVsZXRl
OwogICAgIFJlc291cmNlU2VtYW50aWMoUmVzb3VyY2VTZW1hbnRpYyYmKSA9IGRlZmF1bHQ7CiAK
LSAgICBTdHJpbmcgdG9TdHJpbmcoKQorICAgIFN0cmluZ1ZpZXcgdG9TdHJpbmcoKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKICAgICAgICAgY2FzZSBNb2RlOjpVbm9yZGVyZWRB
Y2Nlc3NWaWV3OgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xk
aW5nLmNwcAkocmV2aXNpb24gMjQ4MjkwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzksOSArMTM5LDggQEAgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpFbnRyeVBvaW50
U2NhZmZvbAogICAgICAgICBtX3BhcmFtZXRlclZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobV9n
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKSk7CiB9CiAKLVN0cmluZyBFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OnJlc291cmNlSGVscGVyVHlwZXMoKQordm9pZCBFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OmVtaXRSZXNvdXJjZUhlbHBlclR5cGVzKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7
Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9sYXlvdXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgic3RydWN0ICIsIG1fbmFtZWRCaW5kR3JvdXBzW2ldLnN0cnVjdE5hbWUsICIg
e1xuIik7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIFN0cmluZz4+IHN0cnVj
dEl0ZW1zOwpAQCAtMTc0LDIyICsxNzMsMjMgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6cmVzb3VyY2VIZQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
ICAgICIsIHN0cnVjdEl0ZW0uc2Vjb25kLCAnXG4nKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIn07XG5cbiIpOwogICAgIH0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOwogfQogCi1PcHRpb25hbDxTdHJpbmc+IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cmVzb3Vy
Y2VTaWduYXR1cmUoKQorYm9vbCBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmVtaXRSZXNvdXJjZVNp
Z25hdHVyZShTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBJbmNsdWRlUHJlY2VkaW5nQ29t
bWEgaW5jbHVkZVByZWNlZGluZ0NvbW1hKQogewogICAgIGlmICghbV9sYXlvdXQuc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoaW5jbHVkZVByZWNlZGluZ0NvbW1hID09IEluY2x1ZGVQcmVjZWRpbmdDb21tYTo6WWVz
KQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKIAotICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGF5b3V0LnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiwgIik7CiAgICAgICAgIGF1dG8mIG5hbWVkQmluZEdyb3VwID0gbV9uYW1lZEJpbmRH
cm91cHNbaV07CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoImRldmljZSAi
LCBuYW1lZEJpbmRHcm91cC5zdHJ1Y3ROYW1lLCAiJiAiLCBuYW1lZEJpbmRHcm91cC52YXJpYWJs
ZU5hbWUsICIgW1tidWZmZXIoIiwgbmFtZWRCaW5kR3JvdXAuYXJndW1lbnRCdWZmZXJJbmRleCwg
IildXSIpOwogICAgIH0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAg
IHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgU3RyaW5nVmlldyBpbnRlcm5hbFR5cGVGb3JTZW1h
bnRpYyhjb25zdCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKQpAQCAtMjI3
LDEyICsyMjcsMTQgQEAgc3RhdGljIFN0cmluZ1ZpZXcgaW50ZXJuYWxUeXBlRm9yU2VtYW50aQog
ICAgIH0KIH0KIAotT3B0aW9uYWw8U3RyaW5nPiBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0
SW5zU2lnbmF0dXJlKCkKK2Jvb2wgRW50cnlQb2ludFNjYWZmb2xkaW5nOjplbWl0QnVpbHRJbnNT
aWduYXR1cmUoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgSW5jbHVkZVByZWNlZGluZ0Nv
bW1hIGluY2x1ZGVQcmVjZWRpbmdDb21tYSkKIHsKICAgICBpZiAoIW1fbmFtZWRCdWlsdElucy5z
aXplKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChpbmNsdWRlUHJlY2VkaW5nQ29tbWEgPT0gSW5jbHVkZVByZWNlZGluZ0Nv
bW1hOjpZZXMpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOwogCi0gICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9u
YW1lZEJ1aWx0SW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CkBAIC0yNDYsMTMgKzI0OCwxMiBAQCBPcHRpb25h
bDxTdHJpbmc+IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6CiAgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaXRlbS51
bm5hbWVkVHlwZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCcgJywg
bmFtZWRCdWlsdEluLnZhcmlhYmxlTmFtZSwgJyAnLCBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhidWls
dEluU2VtYW50aWMpKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6
bWFuZ2xlZElucHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aCkKK3ZvaWQgRW50cnlQb2ludFNj
YWZmb2xkaW5nOjplbWl0TWFuZ2xlZElucHV0UGF0aChTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWls
ZGVyLCBWZWN0b3I8U3RyaW5nPiYgcGF0aCkKIHsKICAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgp
KTsKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwogICAgIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiogc3RydWN0dXJlRGVmaW5pdGlvbiA9
IG51bGxwdHI7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKQEAgLTI4MiwxNCArMjgzLDEwIEBAIFN0cmlu
ZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hbmdsZWRJbnAKICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmVEZWZpbml0aW9uID0gJmRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFt
ZWRUeXBlKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCk7CiB9CiAKLVN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hbmdsZWRPdXRw
dXRQYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRoKQordm9pZCBFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OmVtaXRNYW5nbGVkT3V0cHV0UGF0aChTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBWZWN0
b3I8U3RyaW5nPiYgcGF0aCkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0K
ICAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRpb24gPSBudWxs
cHRyOwogICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKS51
bmlmeU5vZGUoKTsKICAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gJmRvd25jYXN0PEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbj4oZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOwpA
QCAtMzA2LDEzICszMDMsMTAgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6bWFuZ2xl
ZE91dAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZURlZmluaXRpb24gPSAmZG93bmNhc3Q8QVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOwogICAgICAgICB9CiAgICAgfQotCi0g
ICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIEVudHJ5UG9p
bnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpCit2b2lkIEVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6ZW1pdFVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVpbHRJbnMo
U3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2Z1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSksICcgJywgbV9wYXJhbWV0ZXJWYXJpYWJsZXNb
aV0sICI7XG4iKTsKIApAQCAtMzM2LDEzICszMzAsMTkgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6dW5wYWNrUmVzbwogICAgICAgICAgICAgICAgICAgICBsZW5ndGhUZW1wb3JhcnlO
YW1lLCAiID0gIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiA8PCAzMjtcbiIsCiAgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aFRlbXBvcmFyeU5hbWUsICIgPSAiLCBsZW5ndGhUZW1wb3JhcnlOYW1l
LCAiIHwgIiwgdmFyaWFibGVOYW1lLCAnLicsIGxlbmd0aEVsZW1lbnROYW1lLCAiLng7XG4iLAog
ICAgICAgICAgICAgICAgICAgICBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0gIiwgbGVuZ3RoVGVt
cG9yYXJ5TmFtZSwgIiAvIHNpemVvZigiLCBtYW5nbGVkVHlwZU5hbWUsICIpO1xuIiwKLSAgICAg
ICAgICAgICAgICAgICAgImlmICgiLCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID4gMHhGRkZGRkZG
RikgIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiA9IDB4RkZGRkZGRkY7XG4iLAotICAgICAgICAg
ICAgICAgICAgICBtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0geyAiLCB2YXJpYWJsZU5hbWUs
ICcuJywgZWxlbWVudE5hbWUsICIsIHN0YXRpY19jYXN0PHVpbnQzMl90PigiLCBsZW5ndGhUZW1w
b3JhcnlOYW1lLCAiKSB9O1xuIgorICAgICAgICAgICAgICAgICAgICAiaWYgKCIsIGxlbmd0aFRl
bXBvcmFyeU5hbWUsICIgPiAweEZGRkZGRkZGKSAiLCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0g
MHhGRkZGRkZGRjtcbiIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBlbWl0TWFuZ2xlZElucHV0UGF0aChzdHJpbmdCdWlsZGVyLCBwYXRo
KTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAg
ICAgICAgICAgICAgICAiID0geyAiLCB2YXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICIs
IHN0YXRpY19jYXN0PHVpbnQzMl90PigiLCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiKSB9O1xuIgog
ICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZhbHVlXS5w
YXRoOwogICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX25hbWVkQmluZEdyb3Vw
c1tpXS5uYW1lZEJpbmRpbmdzW2pdLmVsZW1lbnROYW1lOwotICAgICAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWFuZ2xlZElucHV0UGF0aChwYXRoKSwgIiA9ICIsIHZh
cmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGVtaXRNYW5nbGVkSW5wdXRQYXRoKHN0cmluZ0J1aWxkZXIsIHBhdGgp
OworICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiA9ICIsIHZh
cmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMzUyLDkgKzM1MiwxMCBAQCBTdHJpbmcgRW50cnlQb2ludFNjYWZm
b2xkaW5nOjp1bnBhY2tSZXNvCiAgICAgICAgIGF1dG8mIHBhdGggPSBpdGVtLnBhdGg7CiAgICAg
ICAgIGF1dG8mIHZhcmlhYmxlTmFtZSA9IG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWU7CiAgICAg
ICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCppdGVtLnVubmFtZWRUeXBlKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZChtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0gIiwgbWFuZ2xlZFR5cGVOYW1lLCAnKCcsIHZh
cmlhYmxlTmFtZSwgIik7XG4iKTsKKworICAgICAgICBlbWl0TWFuZ2xlZElucHV0UGF0aChzdHJp
bmdCdWlsZGVyLCBwYXRoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
ID0gIiwgbWFuZ2xlZFR5cGVOYW1lLCAnKCcsIHZhcmlhYmxlTmFtZSwgIik7XG4iKTsKICAgICB9
Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogVmVydGV4RW50cnlQ
b2ludFNjYWZmb2xkaW5nOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2ljcywg
VHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0ZW1zLCBI
YXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0
ZDo6ZnVuY3Rpb248TWFuZ2xlZFZhcmlhYmxlTmFtZSgpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSwgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtYXRjaGVkVmVydGV4QXR0
cmlidXRlcykKQEAgLTM4OSwxMCArMzkwLDggQEAgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5n
OjpWZXJ0ZXhFbnRyeQogICAgIH0KIH0KIAotU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6aGVscGVyVHlwZXMoKQordm9pZCBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmVt
aXRIZWxwZXJUeXBlcyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLQogICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoInN0cnVjdCAiLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lLCAiIHtcbiIpOwogICAgIGZvciAoYXV0
byYgbmFtZWRTdGFnZUluIDogbV9uYW1lZFN0YWdlSW5zKSB7CiAgICAgICAgIGF1dG8gbWFuZ2xl
ZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2VudHJ5UG9pbnRJ
dGVtcy5pbnB1dHNbbmFtZWRTdGFnZUluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdLnVubmFtZWRU
eXBlKTsKQEAgLTQxMSw2MCArNDEwLDQ5IEBAIFN0cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OmhlbHAKICAgICAgICAgYXV0byBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVGb3JTZW1hbnRp
Yygqb3V0cHV0SXRlbS5zZW1hbnRpYyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoIiAgICAiLCBpbnRlcm5hbFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAnICcsIGF0
dHJpYnV0ZSwgIjtcbiIpOwogICAgIH0KLSAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KAotICAgICAgICAifTtcblxuIiwKLSAgICAgICAgcmVzb3VyY2VIZWxwZXJUeXBlcygpCisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoCisgICAgICAgICJ9O1xuXG4iCiAgICAgKTsKLQotICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgCisgICAgZW1pdFJlc291cmNlSGVs
cGVyVHlwZXMoc3RyaW5nQnVpbGRlcik7CiB9CiAKLVN0cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc6OnNpZ25hdHVyZShNYW5nbGVkRnVuY3Rpb25OYW1lIGZ1bmN0aW9uTmFtZSkKK3Zv
aWQgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjplbWl0U2lnbmF0dXJlKFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIsIE1hbmdsZWRGdW5jdGlvbk5hbWUgZnVuY3Rpb25OYW1lKQogewot
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLQogICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoInZlcnRleCAiLCBtX3JldHVyblN0cnVjdE5hbWUsICcgJywgZnVuY3Rpb25O
YW1lLCAnKCcsIG1fc3RhZ2VJblN0cnVjdE5hbWUsICcgJywgbV9zdGFnZUluUGFyYW1ldGVyTmFt
ZSwgIiBbW3N0YWdlX2luXV0iKTsKLSAgICBpZiAoYXV0byByZXNvdXJjZVNpZ25hdHVyZSA9IHRo
aXMtPnJlc291cmNlU2lnbmF0dXJlKCkpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoIiwgIiwgKnJlc291cmNlU2lnbmF0dXJlKTsKLSAgICBpZiAoYXV0byBidWlsdEluc1Np
Z25hdHVyZSA9IHRoaXMtPmJ1aWx0SW5zU2lnbmF0dXJlKCkpCi0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgKmJ1aWx0SW5zU2lnbmF0dXJlKTsKKyAgICBlbWl0UmVz
b3VyY2VTaWduYXR1cmUoc3RyaW5nQnVpbGRlciwgSW5jbHVkZVByZWNlZGluZ0NvbW1hOjpZZXMp
OworICAgIGVtaXRCdWlsdEluc1NpZ25hdHVyZShzdHJpbmdCdWlsZGVyLCBJbmNsdWRlUHJlY2Vk
aW5nQ29tbWE6Olllcyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyknKTsKLQotICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBWZXJ0ZXhFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnVucGFjaygpCit2b2lkIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6ZW1pdFVucGFjayhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVucGFj
a1Jlc291cmNlc0FuZE5hbWVkQnVpbHRJbnMoKSk7CisgICAgZW1pdFVucGFja1Jlc291cmNlc0Fu
ZE5hbWVkQnVpbHRJbnMoc3RyaW5nQnVpbGRlcik7CiAKICAgICBmb3IgKGF1dG8mIG5hbWVkU3Rh
Z2VJbiA6IG1fbmFtZWRTdGFnZUlucykgewogICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBv
aW50SXRlbXMuaW5wdXRzW25hbWVkU3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXS5wYXRo
OwogICAgICAgICBhdXRvJiBlbGVtZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFtZTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtYW5nbGVkSW5wdXRQYXRoKHBh
dGgpLCAiID0gIiwgbV9zdGFnZUluUGFyYW1ldGVyTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtc
biIpOworICAgICAgICBlbWl0TWFuZ2xlZElucHV0UGF0aChzdHJpbmdCdWlsZGVyLCBwYXRoKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiID0gIiwgbV9zdGFnZUluUGFy
YW1ldGVyTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpOwogICAgIH0KLQotICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBWZXJ0ZXhFbnRyeVBvaW50
U2NhZmZvbGRpbmc6OnBhY2soTWFuZ2xlZFZhcmlhYmxlTmFtZSBpbnB1dFZhcmlhYmxlTmFtZSwg
TWFuZ2xlZFZhcmlhYmxlTmFtZSBvdXRwdXRWYXJpYWJsZU5hbWUpCit2b2lkIFZlcnRleEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6ZW1pdFBhY2soU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwg
TWFuZ2xlZFZhcmlhYmxlTmFtZSBpbnB1dFZhcmlhYmxlTmFtZSwgTWFuZ2xlZFZhcmlhYmxlTmFt
ZSBvdXRwdXRWYXJpYWJsZU5hbWUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwotCiAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtX3JldHVyblN0cnVjdE5hbWUs
ICcgJywgb3V0cHV0VmFyaWFibGVOYW1lLCAiO1xuIik7CiAgICAgaWYgKG1fZW50cnlQb2ludEl0
ZW1zLm91dHB1dHMuc2l6ZSgpID09IDEgJiYgIW1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHNbMF0u
cGF0aC5zaXplKCkpIHsKICAgICAgICAgYXV0byYgZWxlbWVudE5hbWUgPSBtX25hbWVkT3V0cHV0
c1swXS5lbGVtZW50TmFtZTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChv
dXRwdXRWYXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICIgPSAiLCBpbnB1dFZhcmlhYmxl
TmFtZSwgIjtcbiIpOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRy
eVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiBlbGVtZW50
TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1lOwogICAgICAgICBhdXRvJiBpbnRl
cm5hbFR5cGVOYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uaW50ZXJuYWxUeXBlTmFtZTsKICAgICAg
ICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHNbaV0ucGF0aDsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChvdXRwdXRWYXJpYWJsZU5hbWUsICcuJywg
ZWxlbWVudE5hbWUsICIgPSAiLCBpbnRlcm5hbFR5cGVOYW1lLCAnKCcsIGlucHV0VmFyaWFibGVO
YW1lLCBtYW5nbGVkT3V0cHV0UGF0aChwYXRoKSwgIik7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZChvdXRwdXRWYXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUs
ICIgPSAiLCBpbnRlcm5hbFR5cGVOYW1lLCAnKCcsIGlucHV0VmFyaWFibGVOYW1lKTsKKyAgICAg
ICAgZW1pdE1hbmdsZWRPdXRwdXRQYXRoKHN0cmluZ0J1aWxkZXIsIHBhdGgpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIpO1xuIik7CiAgICAgfQotICAgIHJldHVybiBz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xk
aW5nOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXIm
IHR5cGVOYW1lciwgRW50cnlQb2ludEl0ZW1zJiBlbnRyeVBvaW50SXRlbXMsIEhhc2hNYXA8Qmlu
ZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmIGxheW91dCwgc3RkOjpmdW5jdGlv
bjxNYW5nbGVkVmFyaWFibGVOYW1lKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNo
TWFwPEF0dGFjaG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PiYpCkBAIC01MDEsMTAgKzQ4OSw4IEBA
IEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpGcmFnbWVudEUKICAgICB9CiB9CiAKLVN0
cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMoKQordm9pZCBG
cmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6ZW1pdEhlbHBlclR5cGVzKFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwot
CiAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgic3RydWN0ICIsIG1fc3RhZ2VJblN0
cnVjdE5hbWUsICIge1xuIik7CiAgICAgZm9yIChhdXRvJiBuYW1lZFN0YWdlSW4gOiBtX25hbWVk
U3RhZ2VJbnMpIHsKICAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZFN0YWdlSW4u
aW5kZXhJbkVudHJ5UG9pbnRJdGVtc10udW5uYW1lZFR5cGUpOwpAQCAtNTIzLDYwICs1MDksNDkg
QEAgU3RyaW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZQogICAgICAgICBhdXRv
IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUZvclNlbWFudGljKCpvdXRwdXRJdGVtLnNlbWFudGljKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgICIsIGludGVybmFsVHlw
ZU5hbWUsICcgJywgZWxlbWVudE5hbWUsICcgJywgYXR0cmlidXRlLCAiO1xuIik7CiAgICAgfQot
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICJ9O1xuXG4iLAotICAg
ICAgICByZXNvdXJjZUhlbHBlclR5cGVzKCkKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAg
ICAgICAgIn07XG5cbiIKICAgICApOwogCi0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICBlbWl0UmVzb3VyY2VIZWxwZXJUeXBlcyhzdHJpbmdCdWlsZGVyKTsKIH0KIAot
U3RyaW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoTWFuZ2xlZEZ1
bmN0aW9uTmFtZSBmdW5jdGlvbk5hbWUpCit2b2lkIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xk
aW5nOjplbWl0U2lnbmF0dXJlKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIE1hbmdsZWRG
dW5jdGlvbk5hbWUgZnVuY3Rpb25OYW1lKQogewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKLQogICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoImZyYWdtZW50ICIsIG1f
cmV0dXJuU3RydWN0TmFtZSwgJyAnLCBmdW5jdGlvbk5hbWUsICcoJywgbV9zdGFnZUluU3RydWN0
TmFtZSwgJyAnLCBtX3N0YWdlSW5QYXJhbWV0ZXJOYW1lLCAiIFtbc3RhZ2VfaW5dXSIpOwotICAg
IGlmIChhdXRvIHJlc291cmNlU2lnbmF0dXJlID0gdGhpcy0+cmVzb3VyY2VTaWduYXR1cmUoKSkK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCAqcmVzb3VyY2VTaWdu
YXR1cmUpOwotICAgIGlmIChhdXRvIGJ1aWx0SW5zU2lnbmF0dXJlID0gdGhpcy0+YnVpbHRJbnNT
aWduYXR1cmUoKSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCAq
YnVpbHRJbnNTaWduYXR1cmUpOworICAgIGVtaXRSZXNvdXJjZVNpZ25hdHVyZShzdHJpbmdCdWls
ZGVyLCBJbmNsdWRlUHJlY2VkaW5nQ29tbWE6Olllcyk7CisgICAgZW1pdEJ1aWx0SW5zU2lnbmF0
dXJlKHN0cmluZ0J1aWxkZXIsIEluY2x1ZGVQcmVjZWRpbmdDb21tYTo6WWVzKTsKICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnKScpOwotCi0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIAotU3RyaW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2so
KQordm9pZCBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6ZW1pdFVucGFjayhTdHJpbmdC
dWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKLQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVp
bHRJbnMoKSk7CisgICAgZW1pdFVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVpbHRJbnMoc3RyaW5n
QnVpbGRlcik7CiAKICAgICBmb3IgKGF1dG8mIG5hbWVkU3RhZ2VJbiA6IG1fbmFtZWRTdGFnZUlu
cykgewogICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVk
U3RhZ2VJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXS5wYXRoOwogICAgICAgICBhdXRvJiBlbGVt
ZW50TmFtZSA9IG5hbWVkU3RhZ2VJbi5lbGVtZW50TmFtZTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZChtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0gIiwgbV9zdGFnZUlu
UGFyYW1ldGVyTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIjtcbiIpOworICAgICAgICBlbWl0TWFu
Z2xlZElucHV0UGF0aChzdHJpbmdCdWlsZGVyLCBwYXRoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgiID0gIiwgbV9zdGFnZUluUGFyYW1ldGVyTmFtZSwgJy4nLCBlbGVt
ZW50TmFtZSwgIjtcbiIpOwogICAgIH0KLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7CiB9CiAKLVN0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhN
YW5nbGVkVmFyaWFibGVOYW1lIGlucHV0VmFyaWFibGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1l
IG91dHB1dFZhcmlhYmxlTmFtZSkKK3ZvaWQgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OmVtaXRQYWNrKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIE1hbmdsZWRWYXJpYWJsZU5h
bWUgaW5wdXRWYXJpYWJsZU5hbWUsIE1hbmdsZWRWYXJpYWJsZU5hbWUgb3V0cHV0VmFyaWFibGVO
YW1lKQogewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLQogICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQobV9yZXR1cm5TdHJ1Y3ROYW1lLCAnICcsIG91dHB1dFZhcmlh
YmxlTmFtZSwgIjtcbiIpOwogICAgIGlmIChtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUo
KSA9PSAxICYmICFtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzWzBdLnBhdGguc2l6ZSgpKSB7CiAg
ICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1dHNbMF0uZWxlbWVudE5hbWU7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQob3V0cHV0VmFyaWFibGVOYW1l
LCAnLicsIGVsZW1lbnROYW1lLCAiID0gIiwgaW5wdXRWYXJpYWJsZU5hbWUsICI7XG4iKTsKLSAg
ICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1
dHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgZWxlbWVudE5hbWUgPSBtX25hbWVkT3V0
cHV0c1tpXS5lbGVtZW50TmFtZTsKICAgICAgICAgYXV0byYgaW50ZXJuYWxUeXBlTmFtZSA9IG1f
bmFtZWRPdXRwdXRzW2ldLmludGVybmFsVHlwZU5hbWU7CiAgICAgICAgIGF1dG8mIHBhdGggPSBt
X2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldLnBhdGg7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQob3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiID0g
IiwgaW50ZXJuYWxUeXBlTmFtZSwgJygnLCBpbnB1dFZhcmlhYmxlTmFtZSwgbWFuZ2xlZE91dHB1
dFBhdGgocGF0aCksICIpO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQob3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiID0gIiwgaW50ZXJuYWxU
eXBlTmFtZSwgJygnLCBpbnB1dFZhcmlhYmxlTmFtZSk7CisgICAgICAgIGVtaXRNYW5nbGVkT3V0
cHV0UGF0aChzdHJpbmdCdWlsZGVyLCBwYXRoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgiKTtcbiIpOwogICAgIH0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpOwogfQogCiBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpDb21wdXRlRW50cnlQ
b2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRp
b24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBv
aW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVz
b3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPE1hbmdsZWRWYXJpYWJsZU5h
bWUoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpCkBAIC01ODQsNDAgKzU1OSwyNyBAQCBD
b21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpDb21wdXRlRW50CiB7CiB9CiAKLVN0cmluZyBD
b21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCit2b2lkIENvbXB1dGVF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OmVtaXRIZWxwZXJUeXBlcyhTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQogewotICAgIHJldHVybiByZXNvdXJjZUhlbHBlclR5cGVzKCk7CisgICAgZW1p
dFJlc291cmNlSGVscGVyVHlwZXMoc3RyaW5nQnVpbGRlcik7CiB9CiAKLVN0cmluZyBDb21wdXRl
RW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoTWFuZ2xlZEZ1bmN0aW9uTmFtZSBmdW5j
dGlvbk5hbWUpCit2b2lkIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmVtaXRTaWduYXR1
cmUoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBmdW5j
dGlvbk5hbWUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotCiAgICAgc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgia2VybmVsIHZvaWQgIiwgZnVuY3Rpb25OYW1lLCAn
KCcpOwotICAgIGJvb2wgZW1wdHkgPSB0cnVlOwotICAgIGlmIChhdXRvIHJlc291cmNlU2lnbmF0
dXJlID0gdGhpcy0+cmVzb3VyY2VTaWduYXR1cmUoKSkgewotICAgICAgICBlbXB0eSA9IGZhbHNl
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgqcmVzb3VyY2VTaWduYXR1cmUpOwotICAg
IH0KLSAgICBpZiAoYXV0byBidWlsdEluc1NpZ25hdHVyZSA9IHRoaXMtPmJ1aWx0SW5zU2lnbmF0
dXJlKCkpIHsKLSAgICAgICAgaWYgKCFlbXB0eSkKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIsICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgqYnVpbHRJbnNTaWdu
YXR1cmUpOwotICAgIH0KKyAgICBib29sIGFkZGVkVG9TaWduYXR1cmUgPSBlbWl0UmVzb3VyY2VT
aWduYXR1cmUoc3RyaW5nQnVpbGRlciwgSW5jbHVkZVByZWNlZGluZ0NvbW1hOjpObyk7CisgICAg
ZW1pdEJ1aWx0SW5zU2lnbmF0dXJlKHN0cmluZ0J1aWxkZXIsIGFkZGVkVG9TaWduYXR1cmUgPyBJ
bmNsdWRlUHJlY2VkaW5nQ29tbWE6OlllcyA6IEluY2x1ZGVQcmVjZWRpbmdDb21tYTo6Tm8pOwog
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcpJyk7Ci0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOwogfQogCi1TdHJpbmcgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6
dW5wYWNrKCkKK3ZvaWQgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6ZW1pdFVucGFjayhT
dHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIHJldHVybiB1bnBhY2tSZXNvdXJj
ZXNBbmROYW1lZEJ1aWx0SW5zKCk7CisgICAgZW1pdFVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVp
bHRJbnMoc3RyaW5nQnVpbGRlcik7CiB9CiAKLVN0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZm
b2xkaW5nOjpwYWNrKE1hbmdsZWRWYXJpYWJsZU5hbWUsIE1hbmdsZWRWYXJpYWJsZU5hbWUpCit2
b2lkIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmVtaXRQYWNrKFN0cmluZ0J1aWxkZXIm
LCBNYW5nbGVkVmFyaWFibGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1lKQogewogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2Nh
ZmZvbGRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCShyZXZpc2lvbiAyNDgyOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5
UG9pbnRTY2FmZm9sZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywyMyArNTMsMjggQEAgY2xh
c3MgRW50cnlQb2ludFNjYWZmb2xkaW5nIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FbnRyeVBv
aW50U2NhZmZvbGRpbmcoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBoZWxwZXJU
eXBlcygpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBzaWduYXR1cmUoTWFuZ2xlZEZ1bmN0aW9u
TmFtZSkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHVucGFjaygpID0gMDsKLSAgICB2aXJ0dWFs
IFN0cmluZyBwYWNrKE1hbmdsZWRWYXJpYWJsZU5hbWUgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIE1h
bmdsZWRWYXJpYWJsZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEhlbHBlclR5cGVz
KFN0cmluZ0J1aWxkZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVtaXRTaWduYXR1cmUoU3Ry
aW5nQnVpbGRlciYsIE1hbmdsZWRGdW5jdGlvbk5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW1pdFVucGFjayhTdHJpbmdCdWlsZGVyJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0UGFj
ayhTdHJpbmdCdWlsZGVyJiwgTWFuZ2xlZFZhcmlhYmxlTmFtZSBleGlzdGluZ1ZhcmlhYmxlTmFt
ZSwgTWFuZ2xlZFZhcmlhYmxlTmFtZSkgPSAwOwogCiAgICAgVmVjdG9yPE1hbmdsZWRWYXJpYWJs
ZU5hbWU+JiBwYXJhbWV0ZXJWYXJpYWJsZXMoKSB7IHJldHVybiBtX3BhcmFtZXRlclZhcmlhYmxl
czsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIEVudHJ5UG9pbnRJdGVtcyYs
IEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1
bmN0aW9uPE1hbmdsZWRWYXJpYWJsZU5hbWUoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUp
OwogCi0gICAgU3RyaW5nIHJlc291cmNlSGVscGVyVHlwZXMoKTsKLSAgICBPcHRpb25hbDxTdHJp
bmc+IHJlc291cmNlU2lnbmF0dXJlKCk7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBidWlsdEluc1Np
Z25hdHVyZSgpOwotCi0gICAgU3RyaW5nIG1hbmdsZWRJbnB1dFBhdGgoVmVjdG9yPFN0cmluZz4m
IHBhdGgpOwotICAgIFN0cmluZyBtYW5nbGVkT3V0cHV0UGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0
aCk7Ci0gICAgU3RyaW5nIHVucGFja1Jlc291cmNlc0FuZE5hbWVkQnVpbHRJbnMoKTsKKyAgICB2
b2lkIGVtaXRSZXNvdXJjZUhlbHBlclR5cGVzKFN0cmluZ0J1aWxkZXImKTsKKworICAgIGVudW0g
Y2xhc3MgSW5jbHVkZVByZWNlZGluZ0NvbW1hIHsKKyAgICAgICAgWWVzLAorICAgICAgICBObwor
ICAgIH07CisgICAgYm9vbCBlbWl0UmVzb3VyY2VTaWduYXR1cmUoU3RyaW5nQnVpbGRlciYsIElu
Y2x1ZGVQcmVjZWRpbmdDb21tYSk7CisgICAgYm9vbCBlbWl0QnVpbHRJbnNTaWduYXR1cmUoU3Ry
aW5nQnVpbGRlciYsIEluY2x1ZGVQcmVjZWRpbmdDb21tYSk7CisKKyAgICB2b2lkIGVtaXRNYW5n
bGVkSW5wdXRQYXRoKFN0cmluZ0J1aWxkZXImLCBWZWN0b3I8U3RyaW5nPiYgcGF0aCk7CisgICAg
dm9pZCBlbWl0TWFuZ2xlZE91dHB1dFBhdGgoU3RyaW5nQnVpbGRlciYsIFZlY3RvcjxTdHJpbmc+
JiBwYXRoKTsKKyAgICB2b2lkIGVtaXRVbnBhY2tSZXNvdXJjZXNBbmROYW1lZEJ1aWx0SW5zKFN0
cmluZ0J1aWxkZXImKTsKIAogICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBtX2Z1bmN0aW9u
RGVmaW5pdGlvbjsKICAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CkBAIC0xMDYsMTcgKzEx
MSwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgVmVjdG9yPE1hbmdsZWRWYXJpYWJsZU5hbWU+IG1fcGFy
YW1ldGVyVmFyaWFibGVzOwogfTsKIAotY2xhc3MgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5n
IDogcHVibGljIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CitjbGFzcyBWZXJ0ZXhFbnRyeVBvaW50
U2NhZmZvbGRpbmcgZmluYWwgOiBwdWJsaWMgRW50cnlQb2ludFNjYWZmb2xkaW5nIHsKIHB1Ymxp
YzoKICAgICBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJiwgRW50cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxC
aW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYsIHN0ZDo6ZnVuY3Rpb248TWFu
Z2xlZFZhcmlhYmxlTmFtZSgpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSwgSGFzaE1hcDxW
ZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtYXRjaGVkVmVydGV4QXR0cmlidXRlcyk7CiAgICAg
dmlydHVhbCB+VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nKCkgPSBkZWZhdWx0OwogCi0gICAg
U3RyaW5nIGhlbHBlclR5cGVzKCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHNpZ25hdHVyZShNYW5n
bGVkRnVuY3Rpb25OYW1lKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgdW5wYWNrKCkgb3ZlcnJpZGU7
Ci0gICAgU3RyaW5nIHBhY2soTWFuZ2xlZFZhcmlhYmxlTmFtZSBleGlzdGluZ1ZhcmlhYmxlTmFt
ZSwgTWFuZ2xlZFZhcmlhYmxlTmFtZSkgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6CisgICAgdm9pZCBl
bWl0SGVscGVyVHlwZXMoU3RyaW5nQnVpbGRlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZW1pdFNp
Z25hdHVyZShTdHJpbmdCdWlsZGVyJiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBlbWl0VW5wYWNrKFN0cmluZ0J1aWxkZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGVt
aXRQYWNrKFN0cmluZ0J1aWxkZXImLCBNYW5nbGVkVmFyaWFibGVOYW1lIGV4aXN0aW5nVmFyaWFi
bGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1lKSBvdmVycmlkZTsKKwogICAgIEhhc2hNYXA8VmVy
dGV4QXR0cmlidXRlKiwgc2l6ZV90PiYgbV9tYXRjaGVkVmVydGV4QXR0cmlidXRlczsKICAgICBN
YW5nbGVkVHlwZU5hbWUgbV9zdGFnZUluU3RydWN0TmFtZTsKICAgICBNYW5nbGVkVHlwZU5hbWUg
bV9yZXR1cm5TdHJ1Y3ROYW1lOwpAQCAtMTM2LDE3ICsxNDEsMTcgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8TmFtZWRPdXRwdXQ+IG1fbmFtZWRPdXRwdXRzOwogfTsKIAotY2xhc3MgRnJhZ21lbnRF
bnRyeVBvaW50U2NhZmZvbGRpbmcgOiBwdWJsaWMgRW50cnlQb2ludFNjYWZmb2xkaW5nIHsKK2Ns
YXNzIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nIGZpbmFsIDogcHVibGljIEVudHJ5UG9p
bnRTY2FmZm9sZGluZyB7CiBwdWJsaWM6CiAgICAgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRp
bmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJiwgRW50
cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExh
eW91dCYsIHN0ZDo6ZnVuY3Rpb248TWFuZ2xlZFZhcmlhYmxlTmFtZSgpPiYmIGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSwgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4mIG1h
dGNoZWRDb2xvckF0dGFjaG1lbnRzKTsKICAgICB2aXJ0dWFsIH5GcmFnbWVudEVudHJ5UG9pbnRT
Y2FmZm9sZGluZygpID0gZGVmYXVsdDsKIAotICAgIFN0cmluZyBoZWxwZXJUeXBlcygpIG92ZXJy
aWRlOwotICAgIFN0cmluZyBzaWduYXR1cmUoTWFuZ2xlZEZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7
Ci0gICAgU3RyaW5nIHVucGFjaygpIG92ZXJyaWRlOwotICAgIFN0cmluZyBwYWNrKE1hbmdsZWRW
YXJpYWJsZU5hbWUgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIE1hbmdsZWRWYXJpYWJsZU5hbWUpIG92
ZXJyaWRlOwotCiBwcml2YXRlOgorICAgIHZvaWQgZW1pdEhlbHBlclR5cGVzKFN0cmluZ0J1aWxk
ZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGVtaXRTaWduYXR1cmUoU3RyaW5nQnVpbGRlciYsIE1h
bmdsZWRGdW5jdGlvbk5hbWUpIG92ZXJyaWRlOworICAgIHZvaWQgZW1pdFVucGFjayhTdHJpbmdC
dWlsZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBlbWl0UGFjayhTdHJpbmdCdWlsZGVyJiwgTWFu
Z2xlZFZhcmlhYmxlTmFtZSBleGlzdGluZ1ZhcmlhYmxlTmFtZSwgTWFuZ2xlZFZhcmlhYmxlTmFt
ZSkgb3ZlcnJpZGU7CisKICAgICBNYW5nbGVkVHlwZU5hbWUgbV9zdGFnZUluU3RydWN0TmFtZTsK
ICAgICBNYW5nbGVkVHlwZU5hbWUgbV9yZXR1cm5TdHJ1Y3ROYW1lOwogICAgIE1hbmdsZWRWYXJp
YWJsZU5hbWUgbV9zdGFnZUluUGFyYW1ldGVyTmFtZTsKQEAgLTE2NSwxNSArMTcwLDE2IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPE5hbWVkT3V0cHV0PiBtX25hbWVkT3V0cHV0czsKIH07CiAKLWNs
YXNzIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmcgOiBwdWJsaWMgRW50cnlQb2ludFNjYWZm
b2xkaW5nIHsKK2NsYXNzIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmcgZmluYWwgOiBwdWJs
aWMgRW50cnlQb2ludFNjYWZmb2xkaW5nIHsKIHB1YmxpYzoKICAgICBDb21wdXRlRW50cnlQb2lu
dFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVO
YW1lciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291
cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPE1hbmdsZWRWYXJpYWJsZU5hbWUoKT4mJiBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpOwogICAgIHZpcnR1YWwgfkNvbXB1dGVFbnRyeVBvaW50
U2NhZmZvbGRpbmcoKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJpbmcgaGVscGVyVHlwZXMoKSBvdmVy
cmlkZTsKLSAgICBTdHJpbmcgc2lnbmF0dXJlKE1hbmdsZWRGdW5jdGlvbk5hbWUpIG92ZXJyaWRl
OwotICAgIFN0cmluZyB1bnBhY2soKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgcGFjayhNYW5nbGVk
VmFyaWFibGVOYW1lIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1lKSBv
dmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBlbWl0SGVscGVyVHlwZXMoU3RyaW5nQnVpbGRl
ciYpIG92ZXJyaWRlOworICAgIHZvaWQgZW1pdFNpZ25hdHVyZShTdHJpbmdCdWlsZGVyJiwgTWFu
Z2xlZEZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbWl0VW5wYWNrKFN0cmluZ0J1
aWxkZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGVtaXRQYWNrKFN0cmluZ0J1aWxkZXImLCBNYW5n
bGVkVmFyaWFibGVOYW1lIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1l
KSBvdmVycmlkZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIu
Y3BwCShyZXZpc2lvbiAyNDgyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MjQgKzQ3LDIzIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBNZXRhbCB7CiAKLWNs
YXNzIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitjbGFzcyBG
dW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyIGZpbmFsIDogcHVibGljIFZpc2l0b3IgewogcHVibGlj
OgotICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIoVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhh
c2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZT4mIGZ1
bmN0aW9uTWFwcGluZykKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBmdW5jdGlvbk1hcHBpbmcp
CiAgICAgICAgIDogbV90eXBlTmFtZXIodHlwZU5hbWVyKQogICAgICAgICAsIG1fZnVuY3Rpb25N
YXBwaW5nKGZ1bmN0aW9uTWFwcGluZykKKyAgICAgICAgLCBtX3N0cmluZ0J1aWxkZXIoc3RyaW5n
QnVpbGRlcikKICAgICB7CiAgICAgfQogCiAgICAgdmlydHVhbCB+RnVuY3Rpb25EZWNsYXJhdGlv
bldyaXRlcigpID0gZGVmYXVsdDsKIAotICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1f
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOyB9Ci0KICAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFR5cGVOYW1lciYgbV90
eXBlTmFtZXI7CiAgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBNYW5nbGVk
RnVuY3Rpb25OYW1lPiYgbV9mdW5jdGlvbk1hcHBpbmc7Ci0gICAgU3RyaW5nQnVpbGRlciBtX3N0
cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciYgbV9zdHJpbmdCdWlsZGVyOwogfTsKIAog
dm9pZCBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCkBAIC04NSw4ICs4NCw5IEBAIHZvaWQgRnVuY3Rp
b25EZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQoQVMKIAogY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyIDogcHVibGljIFZpc2l0b3IgewogcHVibGljOgotICAgIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcihJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFz
aE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBNYW5nbGVkRnVuY3Rpb25OYW1lPiYgZnVu
Y3Rpb25NYXBwaW5nLCBMYXlvdXQmIGxheW91dCkKLSAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50
cmluc2ljcykKKyAgICBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlciwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIs
IEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZT4m
IGZ1bmN0aW9uTWFwcGluZywgTGF5b3V0JiBsYXlvdXQpCisgICAgICAgIDogbV9zdHJpbmdCdWls
ZGVyKHN0cmluZ0J1aWxkZXIpCisgICAgICAgICwgbV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCiAg
ICAgICAgICwgbV90eXBlTmFtZXIodHlwZU5hbWVyKQogICAgICAgICAsIG1fZnVuY3Rpb25NYXBw
aW5nKGZ1bmN0aW9uTWFwcGluZykKICAgICAgICAgLCBtX2xheW91dChsYXlvdXQpCkBAIC05NSw4
ICs5NSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cigpID0gZGVmYXVsdDsKIAotICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOyB9Ci0KICAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mKSBvdmVycmlkZTsKIApAQCAtMTQ4LDcgKzE0Niw3IEBAIHByb3RlY3RlZDoKICAg
ICB9OwogICAgIHZvaWQgZW1pdExvb3AoTG9vcENvbmRpdGlvbkxvY2F0aW9uLCBBU1Q6OkV4cHJl
c3Npb24qIGNvbmRpdGlvbkV4cHJlc3Npb24sIEFTVDo6RXhwcmVzc2lvbiogaW5jcmVtZW50LCBB
U1Q6OlN0YXRlbWVudCYgYm9keSk7CiAKLSAgICBTdHJpbmcgY29uc3RhbnRFeHByZXNzaW9uU3Ry
aW5nKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJik7CisgICAgdm9pZCBlbWl0Q29uc3RhbnRFeHBy
ZXNzaW9uU3RyaW5nKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJik7CiAKICAgICBNYW5nbGVkVmFy
aWFibGVOYW1lIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpIHsgcmV0dXJuIHsgbV92YXJpYWJs
ZUNvdW50KysgfTsgfQogCkBAIC0yMTUsMTEgKzIxMywxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBP
cHRpb25hbDxCcmVha0NvbnRleHQ+IG1fY3VycmVudEJyZWFrQ29udGV4dDsKIAorICAgIFN0cmlu
Z0J1aWxkZXImIG1fc3RyaW5nQnVpbGRlcjsKICAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7
CiAgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKICAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBtX2Z1bmN0aW9uTWFwcGluZzsKICAg
ICBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiosIE1hbmdsZWRWYXJpYWJsZU5hbWU+
IG1fdmFyaWFibGVNYXBwaW5nOwotICAgIFN0cmluZ0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOwog
CiAgICAgVmVjdG9yPFN0YWNrSXRlbT4gbV9zdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50
cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZzsKQEAgLTI0MiwxMSAr
MjQwLDEyIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAg
ICAgaWYgKCFlbnRyeVBvaW50U2NhZmZvbGRpbmcpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nID0gV1RGTW92ZShlbnRyeVBvaW50U2NhZmZvbGRp
bmcpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAg
ICBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+aGVscGVyVHlwZXMoKSwgJ1xuJywKLSAgICAgICAg
ICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5zaWduYXR1cmUoaXRlcmF0b3ItPnZhbHVlKSwg
IiB7XG4iLAotICAgICAgICAgICAgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnVucGFjaygpCi0g
ICAgICAgICk7CisgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5lbWl0SGVscGVyVHlw
ZXMobV9zdHJpbmdCdWlsZGVyKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4n
KTsKKyAgICAgICAgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPmVtaXRTaWduYXR1cmUobV9zdHJp
bmdCdWlsZGVyLCBpdGVyYXRvci0+dmFsdWUpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIge1xuIik7CisgICAgICAgIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5lbWl0VW5wYWNr
KG1fc3RyaW5nQnVpbGRlcik7CisgICAgCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlTWFwcGluZy5hZGQoJmZ1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbaV0sIG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5wYXJhbWV0ZXJW
YXJpYWJsZXMoKVtpXSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtNDA2LDEwICs0MDUsOCBAQCB2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0
dXJuU3RhdGVtZW50LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9lbnRyeVBvaW50U2NhZmZvbGRp
bmcpIHsKICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0g
ICAgICAgICAgICAgICAgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnBhY2sodGFrZUxhc3RWYWx1
ZSgpLCB2YXJpYWJsZU5hbWUpLAotICAgICAgICAgICAgICAgICJyZXR1cm4gIiwgdmFyaWFibGVO
YW1lLCAiO1xuIgotICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZm
b2xkaW5nLT5lbWl0UGFjayhtX3N0cmluZ0J1aWxkZXIsIHRha2VMYXN0VmFsdWUoKSwgdmFyaWFi
bGVOYW1lKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgicmV0
dXJuICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgicmV0dXJuICIsIHRha2VMYXN0VmFsdWUo
KSwgIjtcbiIpOwogICAgIH0gZWxzZQpAQCAtNDI4LDkgKzQyNSwxMSBAQCB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3aXRjaENhc2UpCiB7Ci0gICAgaWYgKHN3aXRj
aENhc2UudmFsdWUoKSkKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJj
YXNlICIsIGNvbnN0YW50RXhwcmVzc2lvblN0cmluZygqc3dpdGNoQ2FzZS52YWx1ZSgpKSwgIjpc
biIpOwotICAgIGVsc2UKKyAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKSB7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiY2FzZSAiKTsKKyAgICAgICAgZW1pdENvbnN0
YW50RXhwcmVzc2lvblN0cmluZygqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCI6XG4iKTsKKyAgICB9IGVsc2UKICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgiZGVmYXVsdDpcbiIpOwogICAgIFNldEZvclNjb3BlPE9wdGlv
bmFsPEJyZWFrQ29udGV4dD4+IGJyZWFrQ29udGV4dChtX2N1cnJlbnRCcmVha0NvbnRleHQsIEJy
ZWFrQ29udGV4dDo6U3dpdGNoKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5i
bG9jaygpKTsKQEAgLTczNSwyOSArNzM0LDM5IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1QKICAgICBhcHBlbmRMZWZ0VmFsdWUodmFyaWFibGVSZWZlcmVuY2UsIGl0
ZXJhdG9yLT52YWx1ZSwgcG9pbnRlck5hbWUsIE51bGxhYmlsaXR5OjpOb3ROdWxsKTsKIH0KIAot
U3RyaW5nIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHByZXNzaW9uU3RyaW5n
KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCit2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6ZW1pdENvbnN0YW50RXhwcmVzc2lvblN0cmluZyhBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQogewotICAgIHJldHVybiBjb25z
dGFudEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0
ZXJhbCYgaW50ZWdlckxpdGVyYWwpIC0+IFN0cmluZyB7Ci0gICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCIiLCBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKLSAgICB9LCBbJl0oQVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSAtPiBTdHJpbmcgewotICAg
ICAgICByZXR1cm4gbWFrZVN0cmluZygiIiwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgp
KTsKLSAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgLT4gU3RyaW5n
IHsKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIiIsIGZsb2F0TGl0ZXJhbC52YWx1ZSgpKTsK
LSAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIC0+IFN0cmluZyB7Ci0gICAgICAgIHJldHVy
biAibnVsbHB0ciJfc3RyOwotICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFu
TGl0ZXJhbCkgLT4gU3RyaW5nIHsKLSAgICAgICAgcmV0dXJuIGJvb2xlYW5MaXRlcmFsLnZhbHVl
KCkgPyAidHJ1ZSJfc3RyIDogImZhbHNlIl9zdHI7Ci0gICAgfSwgWyZdKEFTVDo6RW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIC0+IFN0cmluZyB7Ci0g
ICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0
aW9uKCkpOwotICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0
aW9uRGVmaW5pdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcobV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25E
ZWZpbml0aW9uKCkpLCAiOjoiLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9u
TWVtYmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSkpOwot
ICAgIH0pKTsKKyAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcigK
KyAgICAgICAgWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoaW50ZWdlckxpdGVyYWwudmFs
dWUoKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVy
YWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAg
ICB9LAorICAgICAgICBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAg
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGZsb2F0TGl0ZXJhbC52YWx1
ZSgpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIm51bGxwdHIiKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7
CisgICAgICAgICAgICBpZiAoYm9vbGVhbkxpdGVyYWwudmFsdWUoKSkKKyAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInRydWUiKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoImZhbHNl
Iik7CisgICAgICAgIH0sCisgICAgICAgIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgICAg
IEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkp
OworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1fdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9u
RGVmaW5pdGlvbigpKSwgIjo6IiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlv
bk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpKTsK
KyAgICAgICAgfQorICAgICkpOwogfQogCi1jbGFzcyBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXIgOiBwdWJsaWMgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIHsKK2NsYXNzIFJlbmRlckZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlciBmaW5hbCA6IHB1YmxpYyBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXIgewogcHVibGljOgotICAgIFJlbmRlckZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qLCBNYW5nbGVkRnVuY3Rpb25OYW1lPiYgZnVuY3Rpb25NYXBwaW5n
LCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlv
dXQpCi0gICAgICAgIDogRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKGludHJpbnNpY3MsIHR5cGVO
YW1lciwgZnVuY3Rpb25NYXBwaW5nLCBsYXlvdXQpCisgICAgUmVuZGVyRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEludHJpbnNpY3MmIGludHJp
bnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBmdW5jdGlvbk1hcHBpbmcsIE1hdGNoZWRSZW5k
ZXJTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKKyAgICAgICAg
OiBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoc3RyaW5nQnVpbGRlciwgaW50cmluc2ljcywgdHlw
ZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcsIGxheW91dCkKICAgICAgICAgLCBtX21hdGNoZWRTZW1h
bnRpY3MoV1RGTW92ZShtYXRjaGVkU2VtYW50aWNzKSkKICAgICB7CiAgICAgfQpAQCAtNzgwLDEw
ICs3ODksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gUgogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1jbGFzcyBDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyIDogcHVibGljIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciB7CitjbGFzcyBDb21wdXRlRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlciB7CiBwdWJsaWM6Ci0gICAgQ29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qLCBNYW5nbGVkRnVuY3Rpb25OYW1lPiYgZnVuY3Rpb25NYXBwaW5n
LCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYgbGF5
b3V0KQotICAgICAgICA6IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihpbnRyaW5zaWNzLCB0eXBl
TmFtZXIsIGZ1bmN0aW9uTWFwcGluZywgbGF5b3V0KQorICAgIENvbXB1dGVGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXIoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgSW50cmluc2ljcyYgaW50
cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZT4mIGZ1bmN0aW9uTWFwcGluZywgTWF0Y2hlZENv
bXB1dGVTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKKyAgICAg
ICAgOiBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoc3RyaW5nQnVpbGRlciwgaW50cmluc2ljcywg
dHlwZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcsIGxheW91dCkKICAgICAgICAgLCBtX21hdGNoZWRT
ZW1hbnRpY3MoV1RGTW92ZShtYXRjaGVkU2VtYW50aWNzKSkKICAgICB7CiAgICAgfQpAQCAtODA0
LDE0ICs4MTMsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBDCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0cnVjdCBTaGFyZWRNZXRhbEZ1bmN0aW9uc1Jlc3Vs
dCB7Ci0gICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBNYW5nbGVkRnVuY3Rp
b25OYW1lPiBmdW5jdGlvbk1hcHBpbmc7Ci0gICAgU3RyaW5nIG1ldGFsRnVuY3Rpb25zOwotfTsK
LXN0YXRpYyBTaGFyZWRNZXRhbEZ1bmN0aW9uc1Jlc3VsdCBzaGFyZWRNZXRhbEZ1bmN0aW9ucyhQ
cm9ncmFtJiBwcm9ncmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgY29uc3QgSGFzaFNldDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24qPiYgcmVhY2hhYmxlRnVuY3Rpb25zKQorc3RhdGljIEhhc2hN
YXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZT4gZ2VuZXJh
dGVNZXRhbEZ1bmN0aW9uc01hcHBpbmcoUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKLSAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0KICAgICB1bnNpZ25lZCBudW1GdW5jdGlvbnMgPSAwOwog
ICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgTWFuZ2xlZEZ1bmN0aW9uTmFt
ZT4gZnVuY3Rpb25NYXBwaW5nOwogICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDog
cHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKQEAgLTgxOSwyMCArODIyLDIxIEBAIHN0
YXRpYyBTaGFyZWRNZXRhbEZ1bmN0aW9uc1Jlc3VsdCBzaGFyZWQKICAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9CiAKLSAgICB7Ci0g
ICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRl
cih0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZyk7Ci0gICAgICAgIGZvciAoYXV0byYgZnVuY3Rp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKLSAgICAgICAg
ICAgIGlmICghZnVuY3Rpb25EZWZpbml0aW9uLT5lbnRyeVBvaW50VHlwZSgpICYmIHJlYWNoYWJs
ZUZ1bmN0aW9ucy5jb250YWlucygmZnVuY3Rpb25EZWZpbml0aW9uKSkKLSAgICAgICAgICAgICAg
ICBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Ci0g
ICAgICAgIH0KLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZnVuY3Rpb25EZWNsYXJhdGlv
bldyaXRlci50b1N0cmluZygpKTsKKyAgICByZXR1cm4gZnVuY3Rpb25NYXBwaW5nOworfQorCitz
dGF0aWMgdm9pZCBlbWl0U2hhcmVkTWV0YWxGdW5jdGlvbnMoU3RyaW5nQnVpbGRlciYgc3RyaW5n
QnVpbGRlciwgUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIGNvbnN0IEhh
c2hTZXQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKj4mIHJlYWNoYWJsZUZ1bmN0aW9ucywgSGFz
aE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBNYW5nbGVkRnVuY3Rpb25OYW1lPiYgZnVu
Y3Rpb25NYXBwaW5nKQoreworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIgZnVuY3Rpb25E
ZWNsYXJhdGlvbldyaXRlcihzdHJpbmdCdWlsZGVyLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGlu
Zyk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9u
RGVmaW5pdGlvbnMoKSkgeworICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbi0+ZW50cnlQ
b2ludFR5cGUoKSAmJiByZWFjaGFibGVGdW5jdGlvbnMuY29udGFpbnMoJmZ1bmN0aW9uRGVmaW5p
dGlvbikpCisgICAgICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyLnZpc2l0KGZ1bmN0
aW9uRGVmaW5pdGlvbik7CiAgICAgfQogCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgcmV0dXJuIHsgV1RGTW92ZShmdW5jdGlvbk1hcHBpbmcpLCBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkgfTsKIH0KIAotY2xhc3MgUmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVyZXIgOiBwdWJs
aWMgVmlzaXRvciB7CitjbGFzcyBSZWFjaGFibGVGdW5jdGlvbnNHYXRoZXJlciBmaW5hbCA6IHB1
YmxpYyBWaXNpdG9yIHsKIHB1YmxpYzoKICAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikgb3ZlcnJpZGUKICAgICB7CkBAIC04NTUsNyAr
ODU5LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbio+
IG1fcmVhY2hhYmxlRnVuY3Rpb25zOwogfTsKIAotUmVuZGVyTWV0YWxGdW5jdGlvbnMgbWV0YWxG
dW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIE1hdGNoZWRS
ZW5kZXJTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKK1JlbmRl
ck1ldGFsRnVuY3Rpb25FbnRyeVBvaW50cyBlbWl0TWV0YWxGdW5jdGlvbnMoU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlciwgUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIs
IE1hdGNoZWRSZW5kZXJTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91
dCkKIHsKICAgICBhdXRvJiB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50ID0gKm1hdGNoZWRTZW1hbnRp
Y3MudmVydGV4U2hhZGVyOwogICAgIGF1dG8mIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCA9ICpt
YXRjaGVkU2VtYW50aWNzLmZyYWdtZW50U2hhZGVyOwpAQCAtODY1LDI2ICs4NjksMjAgQEAgUmVu
ZGVyTWV0YWxGdW5jdGlvbnMgbWV0YWxGdW5jdGlvbnMoUHJvZwogICAgIHJlYWNoYWJsZUZ1bmN0
aW9uc0dhdGhlcmVyLlZpc2l0b3I6OnZpc2l0KGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCk7CiAg
ICAgYXV0byByZWFjaGFibGVGdW5jdGlvbnMgPSByZWFjaGFibGVGdW5jdGlvbnNHYXRoZXJlci50
YWtlUmVhY2hhYmxlRnVuY3Rpb25zKCk7CiAKLSAgICBhdXRvIHNoYXJlZE1ldGFsRnVuY3Rpb25z
ID0gTWV0YWw6OnNoYXJlZE1ldGFsRnVuY3Rpb25zKHByb2dyYW0sIHR5cGVOYW1lciwgcmVhY2hh
YmxlRnVuY3Rpb25zKTsKKyAgICBhdXRvIGZ1bmN0aW9uTWFwcGluZyA9IGdlbmVyYXRlTWV0YWxG
dW5jdGlvbnNNYXBwaW5nKHByb2dyYW0pOworICAgIAorICAgIGVtaXRTaGFyZWRNZXRhbEZ1bmN0
aW9ucyhzdHJpbmdCdWlsZGVyLCBwcm9ncmFtLCB0eXBlTmFtZXIsIHJlYWNoYWJsZUZ1bmN0aW9u
cywgZnVuY3Rpb25NYXBwaW5nKTsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzaGFyZWRNZXRhbEZ1bmN0aW9ucy5tZXRhbEZ1bmN0
aW9ucyk7Ci0KLSAgICBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyKHByb2dyYW0uaW50cmluc2ljcygpLCB0eXBlTmFtZXIsIHNoYXJlZE1ldGFs
RnVuY3Rpb25zLmZ1bmN0aW9uTWFwcGluZywgV1RGTW92ZShtYXRjaGVkU2VtYW50aWNzKSwgbGF5
b3V0KTsKKyAgICBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyKHN0cmluZ0J1aWxkZXIsIHByb2dyYW0uaW50cmluc2ljcygpLCB0eXBlTmFtZXIs
IGZ1bmN0aW9uTWFwcGluZywgV1RGTW92ZShtYXRjaGVkU2VtYW50aWNzKSwgbGF5b3V0KTsKICAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0
aW9ucygpKSB7CiAgICAgICAgIGlmIChyZWFjaGFibGVGdW5jdGlvbnMuY29udGFpbnMoJmZ1bmN0
aW9uRGVmaW5pdGlvbikpCiAgICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlz
aXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKICAgICB9Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
ZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnRvU3RyaW5nKCkpOwogCi0gICAgUmVuZGVyTWV0YWxG
dW5jdGlvbnMgcmVzdWx0OwotICAgIHJlc3VsdC5tZXRhbFNvdXJjZSA9IHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKLSAgICByZXN1bHQubWFuZ2xlZFZlcnRleEVudHJ5UG9pbnROYW1lID0gc2hh
cmVkTWV0YWxGdW5jdGlvbnMuZnVuY3Rpb25NYXBwaW5nLmdldCgmdmVydGV4U2hhZGVyRW50cnlQ
b2ludCk7Ci0gICAgcmVzdWx0Lm1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lID0gc2hhcmVk
TWV0YWxGdW5jdGlvbnMuZnVuY3Rpb25NYXBwaW5nLmdldCgmZnJhZ21lbnRTaGFkZXJFbnRyeVBv
aW50KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB7IGZ1bmN0aW9uTWFwcGluZy5n
ZXQoJnZlcnRleFNoYWRlckVudHJ5UG9pbnQpLCBmdW5jdGlvbk1hcHBpbmcuZ2V0KCZmcmFnbWVu
dFNoYWRlckVudHJ5UG9pbnQpIH07CiB9CiAKLUNvbXB1dGVNZXRhbEZ1bmN0aW9ucyBtZXRhbEZ1
bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgTWF0Y2hlZENv
bXB1dGVTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKK0NvbXB1
dGVNZXRhbEZ1bmN0aW9uRW50cnlQb2ludHMgZW1pdE1ldGFsRnVuY3Rpb25zKFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIsIFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVy
LCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYgbGF5
b3V0KQogewogICAgIGF1dG8mIGVudHJ5UG9pbnQgPSAqbWF0Y2hlZFNlbWFudGljcy5zaGFkZXI7
CiAKQEAgLTg5MiwyMiArODkwLDE2IEBAIENvbXB1dGVNZXRhbEZ1bmN0aW9ucyBtZXRhbEZ1bmN0
aW9ucyhQcm8KICAgICByZWFjaGFibGVGdW5jdGlvbnNHYXRoZXJlci5WaXNpdG9yOjp2aXNpdChl
bnRyeVBvaW50KTsKICAgICBhdXRvIHJlYWNoYWJsZUZ1bmN0aW9ucyA9IHJlYWNoYWJsZUZ1bmN0
aW9uc0dhdGhlcmVyLnRha2VSZWFjaGFibGVGdW5jdGlvbnMoKTsKIAotICAgIGF1dG8gc2hhcmVk
TWV0YWxGdW5jdGlvbnMgPSBNZXRhbDo6c2hhcmVkTWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlw
ZU5hbWVyLCByZWFjaGFibGVGdW5jdGlvbnMpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNoYXJlZE1ldGFsRnVuY3Rpb25zLm1l
dGFsRnVuY3Rpb25zKTsKKyAgICBhdXRvIGZ1bmN0aW9uTWFwcGluZyA9IGdlbmVyYXRlTWV0YWxG
dW5jdGlvbnNNYXBwaW5nKHByb2dyYW0pOworICAgIGVtaXRTaGFyZWRNZXRhbEZ1bmN0aW9ucyhz
dHJpbmdCdWlsZGVyLCBwcm9ncmFtLCB0eXBlTmFtZXIsIHJlYWNoYWJsZUZ1bmN0aW9ucywgZnVu
Y3Rpb25NYXBwaW5nKTsKIAotICAgIENvbXB1dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyKHByb2dyYW0uaW50cmluc2ljcygpLCB0eXBlTmFtZXIsIHNo
YXJlZE1ldGFsRnVuY3Rpb25zLmZ1bmN0aW9uTWFwcGluZywgV1RGTW92ZShtYXRjaGVkU2VtYW50
aWNzKSwgbGF5b3V0KTsKKyAgICBDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIGZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcihzdHJpbmdCdWlsZGVyLCBwcm9ncmFtLmludHJpbnNpY3MoKSwg
dHlwZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcsIFdURk1vdmUobWF0Y2hlZFNlbWFudGljcyksIGxh
eW91dCk7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0
aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBpZiAocmVhY2hhYmxlRnVuY3Rpb25zLmNvbnRh
aW5zKCZmdW5jdGlvbkRlZmluaXRpb24pKQogICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CiAgICAgfQotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci50b1N0cmluZygpKTsKIAotICAgIENv
bXB1dGVNZXRhbEZ1bmN0aW9ucyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1ldGFsU291cmNlID0gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOwotICAgIHJlc3VsdC5tYW5nbGVkRW50cnlQb2ludE5hbWUg
PSBzaGFyZWRNZXRhbEZ1bmN0aW9ucy5mdW5jdGlvbk1hcHBpbmcuZ2V0KCZlbnRyeVBvaW50KTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB7IGZ1bmN0aW9uTWFwcGluZy5nZXQoJmVu
dHJ5UG9pbnQpIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIE1ldGFsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xGdW5jdGlvbldyaXRlci5oCShyZXZpc2lvbiAyNDgyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDE4ICs0MCwxNiBAQCBuYW1lc3BhY2UgTWV0YWwgewogCiBjbGFzcyBUeXBl
TmFtZXI7CiAKLXN0cnVjdCBSZW5kZXJNZXRhbEZ1bmN0aW9ucyB7Ci0gICAgU3RyaW5nIG1ldGFs
U291cmNlOworc3RydWN0IFJlbmRlck1ldGFsRnVuY3Rpb25FbnRyeVBvaW50cyB7CiAgICAgTWFu
Z2xlZEZ1bmN0aW9uTmFtZSBtYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWU7CiAgICAgTWFuZ2xl
ZEZ1bmN0aW9uTmFtZSBtYW5nbGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZTsKIH07Ci1SZW5kZXJN
ZXRhbEZ1bmN0aW9ucyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiwgVHlwZU5hbWVyJiwgTWF0Y2hl
ZFJlbmRlclNlbWFudGljcyYmLCBMYXlvdXQmKTsKK1JlbmRlck1ldGFsRnVuY3Rpb25FbnRyeVBv
aW50cyBlbWl0TWV0YWxGdW5jdGlvbnMoU3RyaW5nQnVpbGRlciYsIFByb2dyYW0mLCBUeXBlTmFt
ZXImLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYsIExheW91dCYpOwogCi1zdHJ1Y3QgQ29tcHV0
ZU1ldGFsRnVuY3Rpb25zIHsKLSAgICBTdHJpbmcgbWV0YWxTb3VyY2U7CitzdHJ1Y3QgQ29tcHV0
ZU1ldGFsRnVuY3Rpb25FbnRyeVBvaW50cyB7CiAgICAgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5n
bGVkRW50cnlQb2ludE5hbWU7CiB9OwotQ29tcHV0ZU1ldGFsRnVuY3Rpb25zIG1ldGFsRnVuY3Rp
b25zKFByb2dyYW0mLCBUeXBlTmFtZXImLCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyYmLCBMYXlv
dXQmKTsKK0NvbXB1dGVNZXRhbEZ1bmN0aW9uRW50cnlQb2ludHMgZW1pdE1ldGFsRnVuY3Rpb25z
KFN0cmluZ0J1aWxkZXImLCBQcm9ncmFtJiwgVHlwZU5hbWVyJiwgTWF0Y2hlZENvbXB1dGVTZW1h
bnRpY3MmJiwgTGF5b3V0Jik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxD
b2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQ4MjkwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw5ICs0MSw5IEBAIG5hbWVzcGFjZSBNZXRhbCB7CiAKIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBkdW1wTWV0YWxDb2RlID0gZmFsc2U7CiAKLXN0YXRpYyBTdHJpbmcgZ2Vu
ZXJhdGVNZXRhbENvZGVTaGFyZWQoU3RyaW5nJiYgbWV0YWxUeXBlcywgU3RyaW5nJiYgbWV0YWxG
dW5jdGlvbnMpCitzdGF0aWMgU3RyaW5nVmlldyBtZXRhbENvZGVQcm9sb2coKQogewotICAgIGF1
dG8gZ2VuZXJhdGVkTWV0YWxDb2RlID0gbWFrZVN0cmluZygKKyAgICByZXR1cm4gU3RyaW5nVmll
dyB7CiAgICAgICAgICIjaW5jbHVkZSA8bWV0YWxfc3RkbGliPlxuIgogICAgICAgICAiI2luY2x1
ZGUgPG1ldGFsX2F0b21pYz5cbiIKICAgICAgICAgIiNpbmNsdWRlIDxtZXRhbF9tYXRoPlxuIgpA
QCAtNTIsMzYgKzUyLDQ2IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGVTaGFyZWQo
U3QKICAgICAgICAgIiNpbmNsdWRlIDxtZXRhbF90ZXh0dXJlPlxuIgogICAgICAgICAiXG4iCiAg
ICAgICAgICJ1c2luZyBuYW1lc3BhY2UgbWV0YWw7XG4iCi0gICAgICAgICJcbiIsCi0KLSAgICAg
ICAgV1RGTW92ZShtZXRhbFR5cGVzKSwKLSAgICAgICAgV1RGTW92ZShtZXRhbEZ1bmN0aW9ucykK
LSAgICApOworICAgICAgICAiXG4iCisgICAgfTsKK30KIAorc3RhdGljIHZvaWQgZHVtcE1ldGFs
Q29kZUlmTmVlZGVkKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCit7CiAgICAgaWYgKGR1
bXBNZXRhbENvZGUpIHsKICAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgTWV0YWwgY29kZTog
Iik7Ci0gICAgICAgIGRhdGFMb2dMbihnZW5lcmF0ZWRNZXRhbENvZGUpOworICAgICAgICBkYXRh
TG9nTG4oc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9Ci0KLSAgICByZXR1cm4gZ2Vu
ZXJhdGVkTWV0YWxDb2RlOwogfQogCiBSZW5kZXJNZXRhbENvZGUgZ2VuZXJhdGVNZXRhbENvZGUo
UHJvZ3JhbSYgcHJvZ3JhbSwgTWF0Y2hlZFJlbmRlclNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRp
Y3MsIExheW91dCYgbGF5b3V0KQogeworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtZXRhbENvZGVQcm9sb2coKSk7CisKICAgICBUeXBl
TmFtZXIgdHlwZU5hbWVyKHByb2dyYW0pOwotICAgIGF1dG8gbWV0YWxUeXBlcyA9IHR5cGVOYW1l
ci5tZXRhbFR5cGVzKCk7Ci0gICAgYXV0byBtZXRhbEZ1bmN0aW9ucyA9IE1ldGFsOjptZXRhbEZ1
bmN0aW9ucyhwcm9ncmFtLCB0eXBlTmFtZXIsIFdURk1vdmUobWF0Y2hlZFNlbWFudGljcyksIGxh
eW91dCk7Ci0gICAgYXV0byBtZXRhbENvZGUgPSBnZW5lcmF0ZU1ldGFsQ29kZVNoYXJlZChXVEZN
b3ZlKG1ldGFsVHlwZXMpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25zLm1ldGFsU291cmNlKSk7Ci0g
ICAgcmV0dXJuIHsgV1RGTW92ZShtZXRhbENvZGUpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25zLm1h
bmdsZWRWZXJ0ZXhFbnRyeVBvaW50TmFtZSksIFdURk1vdmUobWV0YWxGdW5jdGlvbnMubWFuZ2xl
ZEZyYWdtZW50RW50cnlQb2ludE5hbWUpIH07CisgICAgdHlwZU5hbWVyLmVtaXRNZXRhbFR5cGVz
KHN0cmluZ0J1aWxkZXIpOworICAgIAorICAgIGF1dG8gbWV0YWxGdW5jdGlvbkVudHJ5UG9pbnRz
ID0gTWV0YWw6OmVtaXRNZXRhbEZ1bmN0aW9ucyhzdHJpbmdCdWlsZGVyLCBwcm9ncmFtLCB0eXBl
TmFtZXIsIFdURk1vdmUobWF0Y2hlZFNlbWFudGljcyksIGxheW91dCk7CisKKyAgICBkdW1wTWV0
YWxDb2RlSWZOZWVkZWQoc3RyaW5nQnVpbGRlcik7CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKHN0
cmluZ0J1aWxkZXIpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25FbnRyeVBvaW50cy5tYW5nbGVkVmVy
dGV4RW50cnlQb2ludE5hbWUpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25FbnRyeVBvaW50cy5tYW5n
bGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZSkgfTsKIH0KIAogQ29tcHV0ZU1ldGFsQ29kZSBnZW5l
cmF0ZU1ldGFsQ29kZShQcm9ncmFtJiBwcm9ncmFtLCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyYm
IG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYgbGF5b3V0KQogeworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtZXRhbENvZGVQcm9sb2co
KSk7CisKICAgICBUeXBlTmFtZXIgdHlwZU5hbWVyKHByb2dyYW0pOwotICAgIGF1dG8gbWV0YWxU
eXBlcyA9IHR5cGVOYW1lci5tZXRhbFR5cGVzKCk7Ci0gICAgYXV0byBtZXRhbEZ1bmN0aW9ucyA9
IE1ldGFsOjptZXRhbEZ1bmN0aW9ucyhwcm9ncmFtLCB0eXBlTmFtZXIsIFdURk1vdmUobWF0Y2hl
ZFNlbWFudGljcyksIGxheW91dCk7Ci0gICAgYXV0byBtZXRhbENvZGUgPSBnZW5lcmF0ZU1ldGFs
Q29kZVNoYXJlZChXVEZNb3ZlKG1ldGFsVHlwZXMpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25zLm1l
dGFsU291cmNlKSk7Ci0gICAgcmV0dXJuIHsgV1RGTW92ZShtZXRhbENvZGUpLCBXVEZNb3ZlKG1l
dGFsRnVuY3Rpb25zLm1hbmdsZWRFbnRyeVBvaW50TmFtZSkgfTsKKyAgICB0eXBlTmFtZXIuZW1p
dE1ldGFsVHlwZXMoc3RyaW5nQnVpbGRlcik7CisKKyAgICBhdXRvIG1ldGFsRnVuY3Rpb25FbnRy
eVBvaW50cyA9IE1ldGFsOjplbWl0TWV0YWxGdW5jdGlvbnMoc3RyaW5nQnVpbGRlciwgcHJvZ3Jh
bSwgdHlwZU5hbWVyLCBXVEZNb3ZlKG1hdGNoZWRTZW1hbnRpY3MpLCBsYXlvdXQpOworCisgICAg
ZHVtcE1ldGFsQ29kZUlmTmVlZGVkKHN0cmluZ0J1aWxkZXIpOworCisgICAgcmV0dXJuIHsgV1RG
TW92ZShzdHJpbmdCdWlsZGVyKSwgV1RGTW92ZShtZXRhbEZ1bmN0aW9uRW50cnlQb2ludHMubWFu
Z2xlZEVudHJ5UG9pbnROYW1lKSB9OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0
YWxDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI0ODI5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTE1hbmdsZWROYW1lcy5o
IgogI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiV0hMU0xT
ZW1hbnRpY01hdGNoZXIuaCIKLSNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw3ICs0MSw3IEBAIGNsYXNzIFByb2dyYW07
CiBuYW1lc3BhY2UgTWV0YWwgewogCiBzdHJ1Y3QgUmVuZGVyTWV0YWxDb2RlIHsKLSAgICBTdHJp
bmcgbWV0YWxTb3VyY2U7CisgICAgU3RyaW5nQnVpbGRlciBtZXRhbFNvdXJjZTsKICAgICBNYW5n
bGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRWZXJ0ZXhFbnRyeVBvaW50TmFtZTsKICAgICBNYW5nbGVk
RnVuY3Rpb25OYW1lIG1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lOwogfTsKQEAgLTUwLDcg
KzQ5LDcgQEAgc3RydWN0IFJlbmRlck1ldGFsQ29kZSB7CiBSZW5kZXJNZXRhbENvZGUgZ2VuZXJh
dGVNZXRhbENvZGUoUHJvZ3JhbSYsIE1hdGNoZWRSZW5kZXJTZW1hbnRpY3MmJiBtYXRjaGVkU2Vt
YW50aWNzLCBMYXlvdXQmKTsKIAogc3RydWN0IENvbXB1dGVNZXRhbENvZGUgewotICAgIFN0cmlu
ZyBtZXRhbFNvdXJjZTsKKyAgICBTdHJpbmdCdWlsZGVyIG1ldGFsU291cmNlOwogICAgIE1hbmds
ZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZEVudHJ5UG9pbnROYW1lOwogfTsKIC8vIENhbid0IGZhaWwu
IEFueSBmYWlsdXJlIGNoZWNrcyBuZWVkIHRvIGJlIGRvbmUgZWFybGllciwgaW4gdGhlIGJhY2tl
bmQtYWdub3N0aWMgcGFydCBvZiB0aGUgY29tcGlsZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFt
ZXIuY3BwCShyZXZpc2lvbiAyNDgyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw0
NCArMzUxLDQyIEBAIEJhc2VUeXBlTmFtZU5vZGUqIFR5cGVOYW1lcjo6aW5zZXJ0KEFTVDoKICAg
ICByZXR1cm4gJippdGVyYXRvcjsKIH0KIAotY2xhc3MgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0
ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitjbGFzcyBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlciBm
aW5hbCA6IHB1YmxpYyBWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcihzdGQ6OmZ1bmN0aW9uPE1hbmds
ZWRPck5hdGl2ZVR5cGVOYW1lKEFTVDo6TmFtZWRUeXBlJik+JiYgbWFuZ2xlZE5hbWVGb3JOYW1l
ZFR5cGUpCisgICAgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIoU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlciwgc3RkOjpmdW5jdGlvbjxNYW5nbGVkT3JOYXRpdmVUeXBlTmFtZShBU1Q6Ok5h
bWVkVHlwZSYpPiYmIG1hbmdsZWROYW1lRm9yTmFtZWRUeXBlKQogICAgICAgICA6IG1fbWFuZ2xl
ZE5hbWVGb3JOYW1lZFR5cGUoV1RGTW92ZShtYW5nbGVkTmFtZUZvck5hbWVkVHlwZSkpCisgICAg
ICAgICwgbV9zdHJpbmdCdWlsZGVyKHN0cmluZ0J1aWxkZXIpCiAgICAgewogICAgIH0KIAotICAg
IFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOyB9
Ci0KIHByaXZhdGU6Ci0gICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0
cnVjdHVyZURlZmluaXRpb24pCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCiAgICAgewogICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInN0cnVjdCAiLCBtX21hbmdsZWROYW1lRm9yTmFtZWRU
eXBlKHN0cnVjdHVyZURlZmluaXRpb24pLCAiO1xuIik7CiAgICAgfQogCiAgICAgc3RkOjpmdW5j
dGlvbjxNYW5nbGVkT3JOYXRpdmVUeXBlTmFtZShBU1Q6Ok5hbWVkVHlwZSYpPiBtX21hbmdsZWRO
YW1lRm9yTmFtZWRUeXBlOwotICAgIFN0cmluZ0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOworICAg
IFN0cmluZ0J1aWxkZXImIG1fc3RyaW5nQnVpbGRlcjsKIH07CiAKLVN0cmluZyBUeXBlTmFtZXI6
Om1ldGFsVHlwZURlY2xhcmF0aW9ucygpCit2b2lkIFR5cGVOYW1lcjo6ZW1pdE1ldGFsVHlwZURl
Y2xhcmF0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIE1ldGFsVHlw
ZURlY2xhcmF0aW9uV3JpdGVyIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyKFsmXShBU1Q6Ok5h
bWVkVHlwZSYgbmFtZWRUeXBlKSAtPiBNYW5nbGVkT3JOYXRpdmVUeXBlTmFtZSB7CisgICAgTWV0
YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIgbWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIoc3RyaW5n
QnVpbGRlciwgWyZdKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpIC0+IE1hbmdsZWRPck5hdGl2
ZVR5cGVOYW1lIHsKICAgICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yVHlwZShuYW1lZFR5cGUp
OwogICAgIH0pOwogICAgIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLlZpc2l0b3I6OnZpc2l0
KG1fcHJvZ3JhbSk7Ci0gICAgcmV0dXJuIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLnRvU3Ry
aW5nKCk7CiB9CiAKLXZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKEJh
c2VUeXBlTmFtZU5vZGUmIGJhc2VUeXBlTmFtZU5vZGUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUq
PiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVk
VW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQordm9pZCBUeXBlTmFt
ZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
ciwgQmFzZVR5cGVOYW1lTm9kZSYgYmFzZVR5cGVOYW1lTm9kZSwgSGFzaFNldDxBU1Q6Ok5hbWVk
VHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVt
aXR0ZWRVbm5hbWVkVHlwZXMpCiB7CiAgICAgaWYgKGVtaXR0ZWRVbm5hbWVkVHlwZXMuY29udGFp
bnMoJmJhc2VUeXBlTmFtZU5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGJhc2VUeXBl
TmFtZU5vZGUucGFyZW50KCkpCi0gICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oKmJh
c2VUeXBlTmFtZU5vZGUucGFyZW50KCksIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1l
ZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlv
bihzdHJpbmdCdWlsZGVyLCAqYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSwgZW1pdHRlZE5hbWVk
VHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOwogICAgIGlmIChpczxSZWZlcmVuY2VUeXBlTmFt
ZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7CiAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRv
d25jYXN0PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkubmFtZWRUeXBl
KCk7Ci0gICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKG5hbWVkVHlwZSwgZW1pdHRlZE5h
bWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0cmluZ0J1aWxkZXIpOworICAgICAgICBl
bWl0TmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCBuYW1lZFR5cGUsIGVtaXR0ZWRO
YW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5m
bGV4aWJsZUFwcGVuZCgidHlwZWRlZiAiLCBtYW5nbGVkTmFtZUZvclR5cGUobmFtZWRUeXBlKSwg
JyAnLCBiYXNlVHlwZU5hbWVOb2RlLm1hbmdsZWROYW1lKCksICI7XG4iKTsKICAgICB9IGVsc2Ug
aWYgKGlzPFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7CiAgICAgICAg
IGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSk7CkBAIC00MTEsMTQgKzQwOSwxNCBAQCB2b2lkIFR5cGVOYW1lcjo6ZW1pdFVu
bmFtZWRUeXBlRGVmaW5pdGlvCiAgICAgZW1pdHRlZFVubmFtZWRUeXBlcy5hZGQoJmJhc2VUeXBl
TmFtZU5vZGUpOwogfQogCi12b2lkIFR5cGVOYW1lcjo6ZW1pdE5hbWVkVHlwZURlZmluaXRpb24o
QVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0
dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVk
VHlwZXMsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCit2b2lkIFR5cGVOYW1lcjo6ZW1p
dE5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgQVNUOjpO
YW1lZFR5cGUmIG5hbWVkVHlwZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFt
ZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMp
CiB7CiAgICAgaWYgKGVtaXR0ZWROYW1lZFR5cGVzLmNvbnRhaW5zKCZuYW1lZFR5cGUpKQogICAg
ICAgICByZXR1cm47CiAgICAgYXV0byBpdGVyYXRvciA9IG1fZGVwZW5kZW5jeUdyYXBoLmZpbmQo
Jm5hbWVkVHlwZSk7CiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZGVwZW5kZW5jeUdyYXBoLmVu
ZCgpKTsKICAgICBmb3IgKGF1dG8mIGJhc2VUeXBlTmFtZU5vZGUgOiBpdGVyYXRvci0+dmFsdWUp
Ci0gICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oYmFzZVR5cGVOYW1lTm9kZSwgZW1p
dHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0cmluZ0J1aWxkZXIpOworICAg
ICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsIGJhc2VUeXBlTmFt
ZU5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKICAgICBpZiAo
aXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKICAgICAgICAgYXV0
byYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KG5hbWVkVHlwZSk7CiAgICAgICAgIGF1dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25E
ZWZpbml0aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKQEAgLTQ0MSwyMyArNDM5LDIxIEBAIHZvaWQg
VHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5pdGlvbigKICAgICBlbWl0dGVkTmFtZWRUeXBl
cy5hZGQoJm5hbWVkVHlwZSk7CiB9CiAKLXZvaWQgVHlwZU5hbWVyOjplbWl0QWxsVW5uYW1lZFR5
cGVEZWZpbml0aW9ucyhWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgbm9kZXMs
IEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFz
ZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQordm9pZCBUeXBlTmFtZXI6OmVtaXRBbGxVbm5hbWVkVHlwZURlZmluaXRpb25z
KFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVO
YW1lTm9kZT4+JiBub2RlcywgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRU
eXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMpCiB7
CiAgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKLSAgICAgICAgZW1pdFVubmFtZWRUeXBl
RGVmaW5pdGlvbihub2RlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcywg
c3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIGVtaXRBbGxVbm5hbWVkVHlwZURlZmluaXRpb25zKG5v
ZGUtPmNoaWxkcmVuKCksIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBz
dHJpbmdCdWlsZGVyKTsKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdC
dWlsZGVyLCBub2RlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7Cisg
ICAgICAgIGVtaXRBbGxVbm5hbWVkVHlwZURlZmluaXRpb25zKHN0cmluZ0J1aWxkZXIsIG5vZGUt
PmNoaWxkcmVuKCksIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKICAg
ICB9CiB9CiAKLVN0cmluZyBUeXBlTmFtZXI6Om1ldGFsVHlwZURlZmluaXRpb25zKCkKK3ZvaWQg
VHlwZU5hbWVyOjplbWl0TWV0YWxUeXBlRGVmaW5pdGlvbnMoU3RyaW5nQnVpbGRlciYgc3RyaW5n
QnVpbGRlcikKIHsKICAgICBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4gZW1pdHRlZE5hbWVkVHlw
ZXM7CiAgICAgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4gZW1pdHRlZFVubmFtZWRUeXBlczsK
LSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgZm9yIChhdXRvJiBrZXlWYWx1
ZVBhaXIgOiBtX2RlcGVuZGVuY3lHcmFwaCkKLSAgICAgICAgZW1pdE5hbWVkVHlwZURlZmluaXRp
b24oKmtleVZhbHVlUGFpci5rZXksIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5
cGVzLCBzdHJpbmdCdWlsZGVyKTsKLSAgICBlbWl0QWxsVW5uYW1lZFR5cGVEZWZpbml0aW9ucyht
X3RyaWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdCdWls
ZGVyKTsKLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICBlbWl0
TmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCAqa2V5VmFsdWVQYWlyLmtleSwgZW1p
dHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOworICAgIGVtaXRBbGxVbm5hbWVk
VHlwZURlZmluaXRpb25zKHN0cmluZ0J1aWxkZXIsIG1fdHJpZSwgZW1pdHRlZE5hbWVkVHlwZXMs
IGVtaXR0ZWRVbm5hbWVkVHlwZXMpOwogfQogCiBNYW5nbGVkVHlwZU5hbWUgVHlwZU5hbWVyOjpt
YW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCkBAIC00ODks
MTAgKzQ4NSwxMyBAQCBNYW5nbGVkU3RydWN0dXJlRWxlbWVudE5hbWUgVHlwZU5hbWVyOjptCiAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKIH0KIAotU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxU
eXBlcygpCit2b2lkIFR5cGVOYW1lcjo6ZW1pdE1ldGFsVHlwZXMoU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlcikKIHsKICAgICBWaXNpdG9yOjp2aXNpdChtX3Byb2dyYW0pOwotICAgIHJldHVy
biBtYWtlU3RyaW5nKG1ldGFsVHlwZURlY2xhcmF0aW9ucygpLCAnXG4nLCBtZXRhbFR5cGVEZWZp
bml0aW9ucygpKTsKKworICAgIGVtaXRNZXRhbFR5cGVEZWNsYXJhdGlvbnMoc3RyaW5nQnVpbGRl
cik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgZW1pdE1ldGFsVHlwZURl
ZmluaXRpb25zKHN0cmluZ0J1aWxkZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBNZXRhbApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFt
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTFR5cGVOYW1lci5oCShyZXZpc2lvbiAyNDgyOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBUeXBlTmFtZXIoUHJvZ3JhbSYpOwog
ICAgIHZpcnR1YWwgflR5cGVOYW1lcigpOwogCi0gICAgU3RyaW5nIG1ldGFsVHlwZXMoKTsKKyAg
ICB2b2lkIGVtaXRNZXRhbFR5cGVzKFN0cmluZ0J1aWxkZXImKTsKIAogICAgIC8vIE11c3QgYmUg
Y2FsbGVkIGFmdGVyIGNhbGxpbmcgbWV0YWxUeXBlcygpLgogICAgIFN0cmluZyBtYW5nbGVkTmFt
ZUZvclR5cGUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKQEAgLTgyLDExICs4MiwxMSBA
QCBwcml2YXRlOgogCiAgICAgTWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZSBnZW5lcmF0ZU5l
eHRFbnVtZXJhdGlvbk1lbWJlck5hbWUoKSB7IHJldHVybiB7IG1fZW51bWVyYXRpb25NZW1iZXJD
b3VudCsrIH07IH0KIAotICAgIHZvaWQgZW1pdE5hbWVkVHlwZURlZmluaXRpb24oQVNUOjpOYW1l
ZFR5cGUmLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNo
U2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRl
ciYpOwotICAgIHZvaWQgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihCYXNlVHlwZU5hbWVOb2Rl
JiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxC
YXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIFN0cmluZ0J1aWxkZXImKTsK
LSAgICB2b2lkIGVtaXRBbGxVbm5hbWVkVHlwZURlZmluaXRpb25zKFZlY3RvcjxVbmlxdWVSZWY8
QmFzZVR5cGVOYW1lTm9kZT4+JiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFt
ZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMs
IFN0cmluZ0J1aWxkZXImKTsKLSAgICBTdHJpbmcgbWV0YWxUeXBlRGVjbGFyYXRpb25zKCk7Ci0g
ICAgU3RyaW5nIG1ldGFsVHlwZURlZmluaXRpb25zKCk7CisgICAgdm9pZCBlbWl0TmFtZWRUeXBl
RGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiwgQVNUOjpOYW1lZFR5cGUmLCBIYXNoU2V0PEFTVDo6
TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUq
PiYgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisgICAgdm9pZCBlbWl0VW5uYW1lZFR5cGVEZWZpbml0
aW9uKFN0cmluZ0J1aWxkZXImLCBCYXNlVHlwZU5hbWVOb2RlJiwgSGFzaFNldDxBU1Q6Ok5hbWVk
VHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVt
aXR0ZWRVbm5hbWVkVHlwZXMpOworICAgIHZvaWQgZW1pdEFsbFVubmFtZWRUeXBlRGVmaW5pdGlv
bnMoU3RyaW5nQnVpbGRlciYsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+Jiwg
SGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNl
VHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOworICAgIHZvaWQgZW1pdE1ldGFs
VHlwZURlY2xhcmF0aW9ucyhTdHJpbmdCdWlsZGVyJik7CisgICAgdm9pZCBlbWl0TWV0YWxUeXBl
RGVmaW5pdGlvbnMoU3RyaW5nQnVpbGRlciYpOwogCiAgICAgVW5pcXVlUmVmPEJhc2VUeXBlTmFt
ZU5vZGU+IGNyZWF0ZU5hbWVOb2RlKEFTVDo6VW5uYW1lZFR5cGUmLCBCYXNlVHlwZU5hbWVOb2Rl
KiBwYXJlbnQpOwogICAgIEJhc2VUeXBlTmFtZU5vZGUqIGluc2VydChBU1Q6OlVubmFtZWRUeXBl
JiwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRh
bC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0JKHJldmlzaW9uIDI0ODI5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxp
bmVNZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQCBzdGF0aWMgT3B0aW9u
YWw8V0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zCiAgICAgICAgIE1vbm90b25pY1RpbWUgc3RhcnRU
aW1lOwogICAgICAgICBpZiAoV0hMU0w6OmR1bXBNZXRhbENvbXBpbGVUaW1lcykKICAgICAgICAg
ICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgICAgICBjb21wdXRlTGli
cmFyeSA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0xpYnJhcnlXaXRoU291
cmNlOndobHNsQ29tcGlsZVJlc3VsdC0+bWV0YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6JmVy
cm9yXSk7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgZGlyZWN0IFN0cmluZ0J1aWxkZXIgLT4gTlNT
dHJpbmcgY29udmVyc2lvbiB0byB2b2lkIGV4dHJhIGNvcHkgaW50byBhIFdURjo6U3RyaW5nCisg
ICAgICAgIGNvbXB1dGVMaWJyYXJ5ID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkg
bmV3TGlicmFyeVdpdGhTb3VyY2U6d2hsc2xDb21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZS50b1N0
cmluZygpIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOwogICAgICAgICBpZiAoV0hMU0w6OmR1
bXBNZXRhbENvbXBpbGVUaW1lcykKICAgICAgICAgICAgIGRhdGFMb2dMbigiTWV0YWwgY29tcGls
ZSB0aW1lczogIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWxsaXNlY29u
ZHMoKSwgIiBtcyIpOwogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVs
aW5lTWV0YWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0JKHJldmlzaW9uIDI0ODI5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQ
aXBlbGluZU1ldGFsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDggQEAgc3RhdGlj
IGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcAogICAgICAgICBNb25vdG9uaWNUaW1l
IHN0YXJ0VGltZTsKICAgICAgICAgaWYgKFdITFNMOjpkdW1wTWV0YWxDb21waWxlVGltZXMpCiAg
ICAgICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgdmVy
dGV4TGlicmFyeSA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0xpYnJhcnlX
aXRoU291cmNlOndobHNsQ29tcGlsZVJlc3VsdC0+bWV0YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJy
b3I6JmVycm9yXSk7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgZGlyZWN0IFN0cmluZ0J1aWxkZXIg
LT4gTlNTdHJpbmcgY29udmVyc2lvbiB0byB2b2lkIGV4dHJhIGNvcHkgaW50byBhIFdURjo6U3Ry
aW5nCisgICAgICAgIHZlcnRleExpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZp
Y2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTp3aGxzbENvbXBpbGVSZXN1bHQtPm1ldGFsU291cmNl
LnRvU3RyaW5nKCkgb3B0aW9uczpuaWwgZXJyb3I6JmVycm9yXSk7CiAgICAgICAgIGlmIChXSExT
TDo6ZHVtcE1ldGFsQ29tcGlsZVRpbWVzKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNZXRhbCBj
b21waWxlIHRpbWVzOiAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxp
c2Vjb25kcygpLCAiIG1zIik7CiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cg==
</data>
<flag name="review"
          id="391421"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>