<?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>188415</bug_id>
          
          <creation_ts>2018-08-08 13:46:03 -0700</creation_ts>
          <short_desc>Yarr JIT should include annotations with dumpDisassembly=true</short_desc>
          <delta_ts>2018-08-08 15:42:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1448825</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-08-08 13:46:03 -0700</bug_when>
    <thetext>All of the other JSC related JITs intermingle the byte code / IR in the disassembler output.  The Yarr regular expression JIT should also annotate its output with the compiled pattern info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448838</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-08-08 14:15:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/43063283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448839</commentid>
    <comment_count>2</comment_count>
      <attachid>346794</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-08-08 14:16:16 -0700</bug_when>
    <thetext>Created attachment 346794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448841</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-08 14:18:43 -0700</bug_when>
    <thetext>Attachment 346794 did not pass style-queue:


ERROR: Source/JavaScriptCore/yarr/YarrDisassembler.h:96:  The parameter name &quot;vectorOrder&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/yarr/YarrDisassembler.h:98:  The parameter name &quot;vectorOrder&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448864</commentid>
    <comment_count>4</comment_count>
      <attachid>346794</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-08 15:07:03 -0700</bug_when>
    <thetext>Comment on attachment 346794
Patch

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

r=me

&gt; Source/JavaScriptCore/yarr/YarrDisassembler.h:77
&gt; +    enum VectorOrder {

enum class?

&gt; Source/JavaScriptCore/yarr/YarrDisassembler.h:109
&gt; +    unsigned m_indentLevel;

Making `m_identLevel { 0 };` looks nice to me instead of initializing it in a constructor.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:45
&gt; +//    friend void jitCompile(VM*, YarrCodeBlock&amp;, const String&amp; pattern, unsigned&amp; numSubpatterns, const char*&amp; error, bool ignoreCase, bool multiline);

Let&apos;s remove this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448871</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-08-08 15:35:01 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #4)
&gt; Comment on attachment 346794 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=346794&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/yarr/YarrDisassembler.h:77
&gt; &gt; +    enum VectorOrder {
&gt; 
&gt; enum class?

Done.

&gt; &gt; Source/JavaScriptCore/yarr/YarrDisassembler.h:109
&gt; &gt; +    unsigned m_indentLevel;
&gt; 
&gt; Making `m_identLevel { 0 };` looks nice to me instead of initializing it in
&gt; a constructor.

Done.
 
&gt; &gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:45
&gt; &gt; +//    friend void jitCompile(VM*, YarrCodeBlock&amp;, const String&amp; pattern, unsigned&amp; numSubpatterns, const char*&amp; error, bool ignoreCase, bool multiline);
&gt; 
&gt; Let&apos;s remove this.

Removed.  This was a holdover when I was checking if this was dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448873</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-08-08 15:42:32 -0700</bug_when>
    <thetext>Committed r234713: &lt;https://trac.webkit.org/changeset/234713&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346794</attachid>
            <date>2018-08-08 14:16:16 -0700</date>
            <delta_ts>2018-08-08 15:07:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>188415.patch</filename>
            <type>text/plain</type>
            <size>37669</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM0NzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBA
QAorMjAxOC0wOC0wOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBZYXJyIEpJVCBzaG91bGQgaW5jbHVkZSBhbm5vdGF0aW9ucyB3aXRoIGR1bXBEaXNhc3Nl
bWJseT10cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODg0MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDcmVhdGVkIGEgWWFyckRpc2Fzc2VtYmxlciBjbGFzcyB0aGF0IGhhbmRsZXMgYW5ub3RhdGlv
bnMgc2ltaWxhciB0byB0aGUgYmFzZWxpbmUgSklULgorICAgICAgICBHaXZlbiB0aGF0IHRoZSBZ
YXJyIGNyZWF0ZXMgbWF0Y2hpbmcgY29kZSBidSBnb2luZyB0aHJvdWdoIHRoZSBZYXJyUGF0dGVy
biBvcHMgZm9yd2FyZCBhbmQKKyAgICAgICAgdGhlbiB0aGUgYmFja3RyYWNraW5nIGNvZGUgdGhy
b3VnaCB0aGUgWWFyclBhdHRlcm4gb3BzIGluIHJldmVyc2Ugb3JkZXIsIHRoZSBkaXNhc3NlbWJs
ZXIKKyAgICAgICAgbmVlZHMgdG8gZG8gdGhlIHNhbWUgdGhpbmsuCisKKyAgICAgICAgUmVzdHJ1
Y3R1cmVkIHNvbWUgb2YgdGhlIGxvZ2dpbmcgY29kZSBpbiBZYXJyUGF0dGVybiB0byBlbGltaW5h
dGUgcmVkdW5kZW50IGNvZGUgYW5kIGZhY3RvcgorICAgICAgICBvdXQgc2ltcGxlIG1ldGhvZHMg
Zm9yIHdoYXQgd2FzIG5lZWRlZCBieSB0aGUgWWFyckRpc2Fzc2VtYmxlci4KKworICAgICAgICBI
ZXJlIGlzIGFiYnJldmlhdGVkIHNhbXBsZSBvdXRwdXQgYWZ0ZXIgdGhpcyBjaGFuZ2UuCisKKyAg
ICAgICAgR2VuZXJhdGVkIEpJVCBjb2RlIGZvciA4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24gL2Fi
KmMvOgorICAgICAgICAgICAgQ29kZSBhdCBbMHg0Njk1NjFjMDM3MjAsIDB4NDY5NTYxYzAzODQw
KToKKyAgICAgICAgICAgICAgICAweDQ2OTU2MWMwMzcyMDogcHVzaCAlcmJwCisgICAgICAgICAg
ICAgICAgMHg0Njk1NjFjMDM3MjE6IG1vdiAlcnNwLCAlcmJwCisgICAgICAgICAgICAgICAgLi4u
CisgICAgICAgICAgICAgICAgMHg0Njk1NjFjMDM3NjI6IHN1YiAkMHg0MCwgJXJzcAorICAgICAg
ICAgICAgID09IE1hdGNoaW5nID09CisgICAgICAgICAgIDA6T3BCb2R5QWx0ZXJuYXRpdmVCZWdp
biBtaW5pbXVtIHNpemUgMgorICAgICAgICAgICAgICAgIDB4NDY5NTYxYzAzNzY2OiBhZGQgJDB4
MiwgJWVzaQorICAgICAgICAgICAgICAgIDB4NDY5NTYxYzAzNzY5OiBjbXAgJWVkeCwgJWVzaQor
ICAgICAgICAgICAgICAgIDB4NDY5NTYxYzAzNzZiOiBqYSAweDQ2OTU2MWMwMzdmYQorICAgICAg
ICAgICAxOk9wVGVybSBUeXBlUGF0dGVybkNoYXJhY3RlciAnYScKKyAgICAgICAgICAgICAgICAw
eDQ2OTU2MWMwMzc3MTogbW92enggLTB4MiglcmRpLCVyc2kpLCAlZWF4CisgICAgICAgICAgICAg
ICAgMHg0Njk1NjFjMDM3NzY6IGNtcCAkMHg2MSwgJWVheAorICAgICAgICAgICAgICAgIDB4NDY5
NTYxYzAzNzc5OiBqbnogMHg0Njk1NjFjMDM3ZTkKKyAgICAgICAgICAgMjpPcFRlcm0gVHlwZVBh
dHRlcm5DaGFyYWN0ZXIgJ2InIHswLC4uLn0gZ3JlZWR5CisgICAgICAgICAgICAgICAgMHg0Njk1
NjFjMDM3N2Y6IHhvciAlcjlkLCAlcjlkCisgICAgICAgICAgICAgICAgMHg0Njk1NjFjMDM3ODI6
IGNtcCAlZWR4LCAlZXNpCisgICAgICAgICAgICAgICAgMHg0Njk1NjFjMDM3ODQ6IGp6IDB4NDY5
NTYxYzAzN2EyCisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgMHg0Njk1NjFj
MDM3OWQ6IGptcCAweDQ2OTU2MWMwMzc4MgorICAgICAgICAgICAgICAgIDB4NDY5NTYxYzAzN2Ey
OiBtb3YgJXI5LCAweDgoJXJzcCkKKyAgICAgICAgICAgMzpPcFRlcm0gVHlwZVBhdHRlcm5DaGFy
YWN0ZXIgJ2MnCisgICAgICAgICAgICAgICAgMHg0Njk1NjFjMDM3YTc6IG1vdnp4IC0weDEoJXJk
aSwlcnNpKSwgJWVheAorICAgICAgICAgICAgICAgIDB4NDY5NTYxYzAzN2FjOiBjbXAgJDB4NjMs
ICVlYXgKKyAgICAgICAgICAgICAgICAweDQ2OTU2MWMwMzdhZjogam56IDB4NDY5NTYxYzAzN2Qx
CisgICAgICAgICAgIDQ6T3BCb2R5QWx0ZXJuYXRpdmVFbmQKKyAgICAgICAgICAgICAgICAweDQ2
OTU2MWMwMzdiNTogYWRkICQweDQwLCAlcnNwCisgICAgICAgICAgICAgICAgLi4uCisgICAgICAg
ICAgICAgICAgMHg0Njk1NjFjMDM3Y2Y6IHBvcCAlcmJwCisgICAgICAgICAgICAgICAgMHg0Njk1
NjFjMDM3ZDA6IHJldAorICAgICAgICAgICAgID09IEJhY2t0cmFja2luZyA9PQorICAgICAgICAg
ICA0Ok9wQm9keUFsdGVybmF0aXZlRW5kCisgICAgICAgICAgIDM6T3BUZXJtIFR5cGVQYXR0ZXJu
Q2hhcmFjdGVyICdjJworICAgICAgICAgICAyOk9wVGVybSBUeXBlUGF0dGVybkNoYXJhY3RlciAn
YicgezAsLi4ufSBncmVlZHkKKyAgICAgICAgICAgICAgICAweDQ2OTU2MWMwMzdkMTogbW92IDB4
OCglcnNwKSwgJXI5CisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgMHg0Njk1
NjFjMDM3ZTQ6IGptcCAweDQ2OTU2MWMwMzdhMgorICAgICAgICAgICAxOk9wVGVybSBUeXBlUGF0
dGVybkNoYXJhY3RlciAnYScKKyAgICAgICAgICAgMDpPcEJvZHlBbHRlcm5hdGl2ZUJlZ2luIG1p
bmltdW0gc2l6ZSAyCisgICAgICAgICAgICAgICAgMHg0Njk1NjFjMDM3ZTk6IG1vdiAlcnNpLCAl
cmF4CisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgMHg0Njk1NjFjMDM4MmY6
IHBvcCAlcmJwCisgICAgICAgICAgICAgICAgMHg0Njk1NjFjMDM4MzA6IHJldAorCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBT
b3VyY2VzLnR4dDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6
OlJlZ0V4cDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZU1hdGNoT25s
eSk6CisgICAgICAgICogeWFyci9ZYXJyRGlzYXNzZW1ibGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OllhcnI6OllhcnJEaXNhc3NlbWJsZXI6OmluZGVudFN0cmluZyk6CisgICAgICAgIChK
U0M6OllhcnI6OllhcnJEaXNhc3NlbWJsZXI6OllhcnJEaXNhc3NlbWJsZXIpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyRGlzYXNzZW1ibGVyOjp+WWFyckRpc2Fzc2VtYmxlcik6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJEaXNhc3NlbWJsZXI6OmR1bXApOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyRGlzYXNzZW1ibGVyOjpkdW1wSGVhZGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFy
ckRpc2Fzc2VtYmxlcjo6ZHVtcFZlY3RvckZvckluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6
OllhcnI6OllhcnJEaXNhc3NlbWJsZXI6OmR1bXBGb3JJbnN0cnVjdGlvbnMpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyRGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkpOgorICAgICAgICAq
IHlhcnIvWWFyckRpc2Fzc2VtYmxlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6WWFycjo6WWFy
ckpJVEluZm86On5ZYXJySklUSW5mbyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJEaXNhc3Nl
bWJsZXI6OnNldFN0YXJ0T2ZDb2RlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckRpc2Fzc2Vt
Ymxlcjo6c2V0Rm9yR2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyRGlzYXNzZW1i
bGVyOjpzZXRGb3JCYWNrdHJhY2spOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyRGlzYXNzZW1i
bGVyOjpzZXRFbmRPZkdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckRpc2Fzc2Vt
Ymxlcjo6c2V0RW5kT2ZCYWNrdHJhY2spOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyRGlzYXNz
ZW1ibGVyOjpzZXRFbmRPZkNvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyRGlzYXNzZW1i
bGVyOjppbmRlbnRTdHJpbmcpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNrKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdl
bmVyYXRvcjo6WWFyckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpqaXRDb21waWxlKToKKyAgICAgICAg
KiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKiB5YXJyL1lhcnJQYXR0ZXJuLmNwcDoKKyAgICAg
ICAgKEpTQzo6WWFycjo6ZHVtcENoYXJhY3RlckNsYXNzKToKKyAgICAgICAgKEpTQzo6WWFycjo6
UGF0dGVyblRlcm06OmR1bXApOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybjo6ZHVt
cFBhdHRlcm5TdHJpbmcpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybjo6ZHVtcFBh
dHRlcm4pOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDoKKwogMjAxOC0wOC0wNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBNb3JlIHR3ZWFr
cyBhbmQgcmVmYWN0b3JpbmcgdG8gcHJlcGFyZSBmb3IgQVJDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzQ3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMzYsNiArMTAzNiw3IEBAIHdhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCiAKIHlhcnIvUmVndWxhckV4cHJlc3Npb24u
Y3BwCiB5YXJyL1lhcnJDYW5vbmljYWxpemVVQ1MyLmNwcAoreWFyci9ZYXJyRGlzYXNzZW1ibGVy
LmNwcAogeWFyci9ZYXJyRXJyb3JDb2RlLmNwcAogeWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiB5
YXJyL1lhcnJKSVQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjM0NzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1ODYsNiArMzU4Niw4IEBA
CiAJCTY1QjgzOTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2NUI4MzkyRDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3Zl
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVjb3Zl
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUMwMkZCQjA2Mzc0NjJBMDAz
RTdFRTYgLyogUHJvdGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm90ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgfTsKKwkJNjVDNkJFREYyMTEyOEMzQjAwNjg0OUMzIC8qIFlhcnJEaXNhc3NlbWJsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWWFyckRpc2Fzc2VtYmxl
ci5jcHA7IHBhdGggPSB5YXJyL1lhcnJEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2NUM2QkVFMDIxMTI4QzNCMDA2ODQ5QzMgLyogWWFyckRpc2Fzc2VtYmxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyRGlzYXNzZW1ibGVyLmg7
IHBhdGggPSB5YXJyL1lhcnJEaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjVDN0ExNzEwQThFQUFDQjAwRkEzN0VBIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXcmFwcGVyT2JqZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVDN0ExNzIwQThFQUFDQjAwRkEzN0VBIC8q
IEpTV3JhcHBlck9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
cmFwcGVyT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1REE5MDQ2MUY4
NzA1MkEwMDlCQzU0NiAvKiBnZW5lcmF0ZVlhcnJVbmljb2RlUHJvcGVydHlUYWJsZXMucHkgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZVlhcnJVbmljb2RlUHJv
cGVydHlUYWJsZXMucHk7IHBhdGggPSBTY3JpcHRzL2dlbmVyYXRlWWFyclVuaWNvZGVQcm9wZXJ0
eVRhYmxlcy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMTksNiArNzEyMSw4
IEBACiAJCQkJODYzQzZEOTkxNTIxMTExMjAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemUuaCAq
LywKIAkJCQk4NjNDNkQ5ODE1MjExMTEyMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIu
Y3BwICovLAogCQkJCTg2M0M2RDlBMTUyMTExMTIwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXpl
VUNTMi5qcyAqLywKKwkJCQk2NUM2QkVERjIxMTI4QzNCMDA2ODQ5QzMgLyogWWFyckRpc2Fzc2Vt
Ymxlci5jcHAgKi8sCisJCQkJNjVDNkJFRTAyMTEyOEMzQjAwNjg0OUMzIC8qIFlhcnJEaXNhc3Nl
bWJsZXIuaCAqLywKIAkJCQlFMzI4MkJCOTFGRTkzMEEzMDBFREFGNzEgLyogWWFyckVycm9yQ29k
ZS5jcHAgKi8sCiAJCQkJRTMyODJCQkExRkU5MzBBNDAwRURBRjcxIC8qIFlhcnJFcnJvckNvZGUu
aCAqLywKIAkJCQk4NjcwNEI3RDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmNw
cCAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkocmV2
aXNpb24gMjM0NzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxl
KFZNKiB2bSwgWWFycjo6WWFyckMKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKICAgICBpZiAoIXBh
dHRlcm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzICYmICFwYXR0ZXJuLmNvbnRhaW5zVW5zaWdu
ZWRMZW5ndGhQYXR0ZXJuKCkgJiYgVk06OmNhblVzZVJlZ0V4cEpJVCgpKSB7Ci0gICAgICAgIFlh
cnI6OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUsIHZtLCBtX3JlZ0V4cEpJVENvZGUpOwor
ICAgICAgICBZYXJyOjpqaXRDb21waWxlKHBhdHRlcm4sIG1fcGF0dGVyblN0cmluZywgY2hhclNp
emUsIHZtLCBtX3JlZ0V4cEpJVENvZGUpOwogICAgICAgICBpZiAoIW1fcmVnRXhwSklUQ29kZS5m
YWlsdXJlUmVhc29uKCkpIHsKICAgICAgICAgICAgIG1fc3RhdGUgPSBKSVRDb2RlOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0
Y2hPbmx5KFZNKiB2bSwgWWEKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKICAgICBpZiAoIXBhdHRl
cm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzICYmICFwYXR0ZXJuLmNvbnRhaW5zVW5zaWduZWRM
ZW5ndGhQYXR0ZXJuKCkgJiYgVk06OmNhblVzZVJlZ0V4cEpJVCgpKSB7Ci0gICAgICAgIFlhcnI6
OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUsIHZtLCBtX3JlZ0V4cEpJVENvZGUsIFlhcnI6
Ok1hdGNoT25seSk7CisgICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVybiwgbV9wYXR0ZXJu
U3RyaW5nLCBjaGFyU2l6ZSwgdm0sIG1fcmVnRXhwSklUQ29kZSwgWWFycjo6TWF0Y2hPbmx5KTsK
ICAgICAgICAgaWYgKCFtX3JlZ0V4cEpJVENvZGUuZmFpbHVyZVJlYXNvbigpKSB7CiAgICAgICAg
ICAgICBtX3N0YXRlID0gSklUQ29kZTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJEaXNhc3NlbWJsZXIuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJEaXNhc3NlbWJsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJZ
YXJyRGlzYXNzZW1ibGVyLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiRGlzYXNz
ZW1ibGVyLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFlhcnIgeworCitzdGF0
aWMgY29uc3RleHByIGNoYXIgc19zcGFjZXNbXSA9ICIgICAgICAgICAgICAgICAgICAgICAgICAi
Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX21heEluZGVudCA9IHNpemVvZihzX3NwYWNl
cykgLSAxOworCitjb25zdCBjaGFyKiBZYXJyRGlzYXNzZW1ibGVyOjppbmRlbnRTdHJpbmcodW5z
aWduZWQgbGV2ZWwpCit7CisgICAgdW5zaWduZWQgaW5kZW50ID0gNiArIGxldmVsICogMjsKKyAg
ICBpbmRlbnQgPSBzdGQ6Om1pbihpbmRlbnQsIHNfbWF4SW5kZW50KTsKKworICAgIHJldHVybiBz
X3NwYWNlcyArIHNfbWF4SW5kZW50IC0gaW5kZW50OworfQorCitZYXJyRGlzYXNzZW1ibGVyOjpZ
YXJyRGlzYXNzZW1ibGVyKFlhcnJKSVRJbmZvKiB5YXJySklUSW5mbykKKyAgICA6IG1faml0SW5m
byh5YXJySklUSW5mbykKKyAgICAsIG1fbGFiZWxGb3JHZW5lcmF0ZVlhcnJPcCh5YXJySklUSW5m
by0+b3BDb3VudCgpKQorICAgICwgbV9sYWJlbEZvckJhY2t0cmFja1lhcnJPcCh5YXJySklUSW5m
by0+b3BDb3VudCgpKQorICAgICwgbV9pbmRlbnRMZXZlbCgwKQoreworfQorCitZYXJyRGlzYXNz
ZW1ibGVyOjp+WWFyckRpc2Fzc2VtYmxlcigpCit7Cit9CisKK3ZvaWQgWWFyckRpc2Fzc2VtYmxl
cjo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAg
IGR1bXBIZWFkZXIob3V0LCBsaW5rQnVmZmVyKTsKKyAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBp
bmRlbnRTdHJpbmcoKSwgbGlua0J1ZmZlciwgbV9zdGFydE9mQ29kZSwgbV9sYWJlbEZvckdlbmVy
YXRlWWFyck9wWzBdKTsKKworICAgIG91dC5wcmludCgiICAgICA9PSBNYXRjaGluZyA9PVxuIik7
CisgICAgZHVtcEZvckluc3RydWN0aW9ucyhvdXQsIGxpbmtCdWZmZXIsIG1fbGFiZWxGb3JHZW5l
cmF0ZVlhcnJPcCwgbV9lbmRPZkdlbmVyYXRlKTsKKyAgICBvdXQucHJpbnQoIiAgICAgPT0gQmFj
a3RyYWNraW5nID09XG4iKTsKKyAgICBkdW1wRm9ySW5zdHJ1Y3Rpb25zKG91dCwgbGlua0J1ZmZl
ciwgbV9sYWJlbEZvckJhY2t0cmFja1lhcnJPcCwgbV9lbmRPZkJhY2t0cmFjaywgSXRlcmF0ZVJl
dmVyc2UpOworCisgICAgaWYgKCEobV9lbmRPZkJhY2t0cmFjayA9PSBtX2VuZE9mQ29kZSkpIHsK
KyAgICAgICAgb3V0LnByaW50KCIgICAgID09IEhlbHBlcnMgPT1cbiIpOworCisgICAgICAgIGR1
bXBEaXNhc3NlbWJseShvdXQsIGluZGVudFN0cmluZygpLCBsaW5rQnVmZmVyLCBtX2VuZE9mQmFj
a3RyYWNrLCBtX2VuZE9mQ29kZSk7CisgICAgfQorCisgICAgbGlua0J1ZmZlci5kaWRBbHJlYWR5
RGlzYXNzZW1ibGUoKTsKK30KKwordm9pZCBZYXJyRGlzYXNzZW1ibGVyOjpkdW1wKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpCit7CisgICAgZHVtcChXVEY6OmRhdGFGaWxlKCksIGxpbmtCdWZmZXIp
OworfQorCit2b2lkIFlhcnJEaXNhc3NlbWJsZXI6OmR1bXBIZWFkZXIoUHJpbnRTdHJlYW0mIG91
dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBvdXQucHJpbnQoIkdlbmVyYXRlZCBK
SVQgY29kZSBmb3IgIiwgbV9qaXRJbmZvLT52YXJpYW50KCksICIgIik7CisgICAgbV9qaXRJbmZv
LT5kdW1wUGF0dGVyblN0cmluZyhvdXQpOworICAgIG91dC5wcmludCgiOlxuIik7CisgICAgb3V0
LnByaW50KCIgICAgQ29kZSBhdCBbIiwgUmF3UG9pbnRlcihsaW5rQnVmZmVyLmRlYnVnQWRkcmVz
cygpKSwgIiwgIiwgUmF3UG9pbnRlcihzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1
Z0FkZHJlc3MoKSkgKyBsaW5rQnVmZmVyLnNpemUoKSksICIpOlxuIik7Cit9CisKK1ZlY3RvcjxZ
YXJyRGlzYXNzZW1ibGVyOjpEdW1wZWRPcD4gWWFyckRpc2Fzc2VtYmxlcjo6ZHVtcFZlY3RvckZv
ckluc3RydWN0aW9ucyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsPiYgbGFiZWxzLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZW5kTGFiZWwsIFlhcnJE
aXNhc3NlbWJsZXI6OlZlY3Rvck9yZGVyIHZlY3Rvck9yZGVyKQoreworICAgIFN0cmluZ1ByaW50
U3RyZWFtIG91dDsKKyAgICBWZWN0b3I8RHVtcGVkT3A+IHJlc3VsdDsKKworICAgIHVuc2lnbmVk
IGRpcmVjdGlvbkJpYXMgPSAodmVjdG9yT3JkZXIgPT0gSXRlcmF0ZUZvcndhcmQpID8gMCA6IGxh
YmVscy5zaXplKCkgLSAxOworCisgICAgYXV0byByZWFsSW5kZXggPSBbJl0odW5zaWduZWQgcmF3
SW5kZXgpIHsKKyAgICAgICAgaWYgKGRpcmVjdGlvbkJpYXMpCisgICAgICAgICAgICByZXR1cm4g
ZGlyZWN0aW9uQmlhcyAtIHJhd0luZGV4OworICAgICAgICByZXR1cm4gcmF3SW5kZXg7CisgICAg
fTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOykgeworICAg
ICAgICBpZiAoIWxhYmVsc1tyZWFsSW5kZXgoaSldLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGkr
KzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIG91dC5yZXNldCgp
OworICAgICAgICByZXN1bHQuYXBwZW5kKER1bXBlZE9wKCkpOworICAgICAgICByZXN1bHQubGFz
dCgpLmluZGV4ID0gcmVhbEluZGV4KGkpOworCisgICAgICAgIGludCBkZWx0YSA9IG1faml0SW5m
by0+ZHVtcEZvcihvdXQsIHJlYWxJbmRleChpKSk7CisgICAgICAgIG1faW5kZW50TGV2ZWwgKz0g
KHZlY3Rvck9yZGVyID09IEl0ZXJhdGVGb3J3YXJkKSA/IGRlbHRhIDogLWRlbHRhOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgbmV4dEluZGV4ID0gaSArIDE7IDsgbmV4dEluZGV4KyspIHsKKyAg
ICAgICAgICAgIGlmIChuZXh0SW5kZXggPj0gbGFiZWxzLnNpemUoKSkgeworICAgICAgICAgICAg
ICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGluZGVudFN0cmluZygpLCBsaW5rQnVmZmVyLCBsYWJl
bHNbcmVhbEluZGV4KGkpXSwgZW5kTGFiZWwpOworICAgICAgICAgICAgICAgIHJlc3VsdC5sYXN0
KCkuZGlzYXNzZW1ibHkgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsYWJlbHNbcmVhbEluZGV4
KG5leHRJbmRleCldLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHko
b3V0LCBpbmRlbnRTdHJpbmcoKSwgbGlua0J1ZmZlciwgbGFiZWxzW3JlYWxJbmRleChpKV0sIGxh
YmVsc1tyZWFsSW5kZXgobmV4dEluZGV4KV0pOworICAgICAgICAgICAgICAgIHJlc3VsdC5sYXN0
KCkuZGlzYXNzZW1ibHkgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaSA9IG5l
eHRJbmRleDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgWWFyckRpc2Fzc2VtYmxl
cjo6ZHVtcEZvckluc3RydWN0aW9ucyhQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiYgbGFiZWxzLCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZW5kTGFiZWwsIFlhcnJEaXNhc3NlbWJsZXI6OlZlY3Rvck9yZGVyIHZlY3Rv
ck9yZGVyKQoreworICAgIFZlY3RvcjxEdW1wZWRPcD4gZHVtcGVkT3BzID0gZHVtcFZlY3RvckZv
ckluc3RydWN0aW9ucyhsaW5rQnVmZmVyLCBsYWJlbHMsIGVuZExhYmVsLCB2ZWN0b3JPcmRlcik7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZHVtcGVkT3BzLnNpemUoKTsgKytpKQor
ICAgICAgICBvdXQucHJpbnQoZHVtcGVkT3BzW2ldLmRpc2Fzc2VtYmx5KTsKK30KKwordm9pZCBZ
YXJyRGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
Y2hhciogcHJlZml4LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgZnJvbSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHRvKQoreworICAgIENvZGVMb2NhdGlvbkxh
YmVsPERpc2Fzc2VtYmx5UHRyVGFnPiBmcm9tTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8RGlzYXNzZW1ibHlQdHJUYWc+KGZyb20pOworICAgIENvZGVMb2NhdGlvbkxhYmVsPERpc2Fz
c2VtYmx5UHRyVGFnPiB0b0xvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERpc2Fzc2Vt
Ymx5UHRyVGFnPih0byk7CisgICAgZGlzYXNzZW1ibGUoZnJvbUxvY2F0aW9uLCB0b0xvY2F0aW9u
LmRhdGFMb2NhdGlvbjx1aW50cHRyX3Q+KCkgLSBmcm9tTG9jYXRpb24uZGF0YUxvY2F0aW9uPHVp
bnRwdHJfdD4oKSwgcHJlZml4LCBvdXQpOworfQorCit9fSAvLyBuYW1lc3BhY2UgWWFyciBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJyRGlzYXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckRpc2Fzc2VtYmxlci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJEaXNhc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIExpbmtCdWZmZXI7
CisKK25hbWVzcGFjZSBZYXJyIHsKKworY2xhc3MgWWFyckNvZGVCbG9jazsKKworY2xhc3MgWWFy
ckpJVEluZm8geworcHVibGljOgorICAgIHZpcnR1YWwgfllhcnJKSVRJbmZvKCkgeyB9OworICAg
IHZpcnR1YWwgY29uc3QgY2hhciogdmFyaWFudCgpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IG9wQ291bnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1bXBQYXR0ZXJuU3RyaW5nKFByaW50
U3RyZWFtJikgPSAwOworICAgIHZpcnR1YWwgaW50IGR1bXBGb3IoUHJpbnRTdHJlYW0mLCB1bnNp
Z25lZCkgPSAwOworfTsKKworY2xhc3MgWWFyckRpc2Fzc2VtYmxlciB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgWWFyckRpc2Fzc2VtYmxlcihZYXJySklUSW5m
byopOworICAgIH5ZYXJyRGlzYXNzZW1ibGVyKCk7CisKKyAgICB2b2lkIHNldFN0YXJ0T2ZDb2Rl
KE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkgeyBtX3N0YXJ0T2ZDb2RlID0gbGFiZWw7IH0K
KyAgICB2b2lkIHNldEZvckdlbmVyYXRlKHVuc2lnbmVkIG9wSW5kZXgsIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBsYWJlbCkKKyAgICB7CisgICAgICAgIG1fbGFiZWxGb3JHZW5lcmF0ZVlhcnJPcFtv
cEluZGV4XSA9IGxhYmVsOworICAgIH0KKworICAgIHZvaWQgc2V0Rm9yQmFja3RyYWNrKHVuc2ln
bmVkIG9wSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKKyAgICB7CisgICAgICAg
IG1fbGFiZWxGb3JCYWNrdHJhY2tZYXJyT3Bbb3BJbmRleF0gPSBsYWJlbDsKKyAgICB9CisKKyAg
ICB2b2lkIHNldEVuZE9mR2VuZXJhdGUoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsKSB7IG1f
ZW5kT2ZHZW5lcmF0ZSA9IGxhYmVsOyB9CisgICAgdm9pZCBzZXRFbmRPZkJhY2t0cmFjayhNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpIHsgbV9lbmRPZkJhY2t0cmFjayA9IGxhYmVsOyB9Cisg
ICAgdm9pZCBzZXRFbmRPZkNvZGUoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsKSB7IG1fZW5k
T2ZDb2RlID0gbGFiZWw7IH0KKworICAgIHZvaWQgZHVtcChMaW5rQnVmZmVyJik7CisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiwgTGlua0J1ZmZlciYpOworCitwcml2YXRlOgorICAgIGVudW0g
VmVjdG9yT3JkZXIgeworICAgICAgICBJdGVyYXRlRm9yd2FyZCwKKyAgICAgICAgSXRlcmF0ZVJl
dmVyc2UKKyAgICB9OworCisgICAgdm9pZCBkdW1wSGVhZGVyKFByaW50U3RyZWFtJiwgTGlua0J1
ZmZlciYpOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaXJzdFNsb3dMYWJlbCgpOworCisg
ICAgc3RydWN0IER1bXBlZE9wIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgICAgIENT
dHJpbmcgZGlzYXNzZW1ibHk7CisgICAgfTsKKworICAgIGNvbnN0IGNoYXIqIGluZGVudFN0cmlu
Zyh1bnNpZ25lZCk7CisgICAgY29uc3QgY2hhciogaW5kZW50U3RyaW5nKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbmRlbnRTdHJpbmcobV9pbmRlbnRMZXZlbCk7CisgICAgfQorCisgICAgVmVj
dG9yPER1bXBlZE9wPiBkdW1wVmVjdG9yRm9ySW5zdHJ1Y3Rpb25zKExpbmtCdWZmZXImLCBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiYgbGFiZWxzLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
ZW5kTGFiZWwsIFlhcnJEaXNhc3NlbWJsZXI6OlZlY3Rvck9yZGVyIHZlY3Rvck9yZGVyID0gSXRl
cmF0ZUZvcndhcmQpOworCisgICAgdm9pZCBkdW1wRm9ySW5zdHJ1Y3Rpb25zKFByaW50U3RyZWFt
JiwgTGlua0J1ZmZlciYsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+JiBsYWJlbHMsIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBlbmRMYWJlbCwgWWFyckRpc2Fzc2VtYmxlcjo6VmVjdG9yT3Jk
ZXIgdmVjdG9yT3JkZXIgPSBJdGVyYXRlRm9yd2FyZCk7CisKKyAgICB2b2lkIGR1bXBEaXNhc3Nl
bWJseShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTGlua0J1ZmZlciYsIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBmcm9tLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdG8pOworCisgICAg
WWFyckpJVEluZm8qIG1faml0SW5mbzsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFy
dE9mQ29kZTsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiBtX2xhYmVsRm9yR2Vu
ZXJhdGVZYXJyT3A7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9sYWJlbEZv
ckJhY2t0cmFja1lhcnJPcDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9lbmRPZkdlbmVy
YXRlOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2VuZE9mQmFja3RyYWNrOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX2VuZE9mQ29kZTsKKyAgICB1bnNpZ25lZCBtX2luZGVudExl
dmVsOworfTsKKworfX0gLy8gbmFtZXNwYWNlIFlhcnIgbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3Bw
CShyZXZpc2lvbiAyMzQ3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgIllhcnJDYW5vbmljYWxpemUuaCIKKyNpbmNsdWRl
ICJZYXJyRGlzYXNzZW1ibGVyLmgiCiAKICNpZiBFTkFCTEUoWUFSUl9KSVQpCiAKQEAgLTQwLDgg
KzQxLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
WWFyciB7CiAKIHRlbXBsYXRlPFlhcnJKSVRDb21waWxlTW9kZSBjb21waWxlTW9kZT4KLWNsYXNz
IFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKLSAgICBmcmllbmQgdm9p
ZCBqaXRDb21waWxlKFZNKiwgWWFyckNvZGVCbG9jayYsIGNvbnN0IFN0cmluZyYgcGF0dGVybiwg
dW5zaWduZWQmIG51bVN1YnBhdHRlcm5zLCBjb25zdCBjaGFyKiYgZXJyb3IsIGJvb2wgaWdub3Jl
Q2FzZSwgYm9vbCBtdWx0aWxpbmUpOworY2xhc3MgWWFyckdlbmVyYXRvciA6IHB1YmxpYyBZYXJy
SklUSW5mbywgcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CisvLyAgICBmcmllbmQgdm9pZCBqaXRD
b21waWxlKFZNKiwgWWFyckNvZGVCbG9jayYsIGNvbnN0IFN0cmluZyYgcGF0dGVybiwgdW5zaWdu
ZWQmIG51bVN1YnBhdHRlcm5zLCBjb25zdCBjaGFyKiYgZXJyb3IsIGJvb2wgaWdub3JlQ2FzZSwg
Ym9vbCBtdWx0aWxpbmUpOwogCiAjaWYgQ1BVKEFSTSkKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCBpbnB1dCA9IEFSTVJlZ2lzdGVyczo6cjA7CkBAIC0xODU2LDYgKzE4NTcsOSBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIHNpemVfdCBvcElu
ZGV4ID0gMDsKIAogICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIp
CisgICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckdlbmVyYXRlKG9wSW5kZXgs
IGxhYmVsKCkpOworCiAgICAgICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAg
ICAgICAgICAgICBzd2l0Y2ggKG9wLm1fb3ApIHsKIApAQCAtMjM3Miw2ICsyMzc2LDEwIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KIAogICAgICAgICBkbyB7CiAg
ICAgICAgICAgICAtLW9wSW5kZXg7CisKKyAgICAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikK
KyAgICAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQmFja3RyYWNrKG9wSW5kZXgs
IGxhYmVsKCkpOworCiAgICAgICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAg
ICAgICAgICAgICBzd2l0Y2ggKG9wLm1fb3ApIHsKIApAQCAtMzQyNCw5ICszNDMyLDEwIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICB9CiAKIHB1YmxpYzoK
LSAgICBZYXJyR2VuZXJhdG9yKFZNKiB2bSwgWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDb2Rl
QmxvY2smIGNvZGVCbG9jaywgWWFyckNoYXJTaXplIGNoYXJTaXplKQorICAgIFlhcnJHZW5lcmF0
b3IoVk0qIHZtLCBZYXJyUGF0dGVybiYgcGF0dGVybiwgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBZ
YXJyQ29kZUJsb2NrJiBjb2RlQmxvY2ssIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKICAgICAgICAg
OiBtX3ZtKHZtKQogICAgICAgICAsIG1fcGF0dGVybihwYXR0ZXJuKQorICAgICAgICAsIG1fcGF0
dGVyblN0cmluZyhwYXR0ZXJuU3RyaW5nKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9j
aykKICAgICAgICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQogICAgICAgICAsIG1fZGVjb2RlU3Vy
cm9nYXRlUGFpcnMobV9jaGFyU2l6ZSA9PSBDaGFyMTYgJiYgbV9wYXR0ZXJuLnVuaWNvZGUoKSkK
QEAgLTM0NjMsNyArMzQ3MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb2RlQmxvY2suc2V0
RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbigqbV9mYWlsdXJlUmVhc29uKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFlhcnJEaXNhc3NlbWJsZXI+KHRoaXMpOworCisgICAgICAgIGlmICht
X2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29k
ZShsYWJlbCgpKTsKKwogICAgICAgICBnZW5lcmF0ZUVudGVyKCk7CiAKICAgICAgICAgSnVtcCBo
YXNJbnB1dCA9IGNoZWNrSW5wdXQoKTsKQEAgLTM0OTksMTIgKzM1MTQsMTkgQEAgcHVibGljOgog
ICAgICAgICB9CiAKICAgICAgICAgZ2VuZXJhdGUoKTsKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1i
bGVyKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mR2VuZXJhdGUobGFiZWwo
KSk7CiAgICAgICAgIGJhY2t0cmFjaygpOworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZCYWNrdHJhY2sobGFiZWwoKSk7CiAK
ICAgICAgICAgZ2VuZXJhdGVUcnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlcigpOwogCiAgICAg
ICAgIGdlbmVyYXRlSklURmFpbFJldHVybigpOwogCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxl
cikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CisK
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkgewogICAgICAgICAgICAgY29kZUJsb2NrLnNldEZhbGxCYWNrV2l0aEZhaWx1cmVS
ZWFzb24oSklURmFpbHVyZVJlYXNvbjo6RXhlY3V0YWJsZU1lbW9yeUFsbG9jYXRpb25GYWlsdXJl
KTsKQEAgLTM1MjAsNiArMzU0Miw5IEBAIHB1YmxpYzoKIAogICAgICAgICBtX2JhY2t0cmFja2lu
Z1N0YXRlLmxpbmtEYXRhTGFiZWxzKGxpbmtCdWZmZXIpOwogCisgICAgICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtCdWZmZXIpOwor
CiAgICAgICAgIGlmIChjb21waWxlTW9kZSA9PSBNYXRjaE9ubHkpIHsKICAgICAgICAgICAgIGlm
IChtX2NoYXJTaXplID09IENoYXI4KQogICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0
Q29kZU1hdGNoT25seShGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFlhcnJNYXRjaE9ubHk4Qml0
UHRyVGFnLCAiTWF0Y2gtb25seSA4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CkBAIC0zNTM1
LDExICszNTYwLDE5NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb2RlQmxvY2suc2V0RmFsbEJh
Y2tXaXRoRmFpbHVyZVJlYXNvbigqbV9mYWlsdXJlUmVhc29uKTsKICAgICB9CiAKKyAgICBjb25z
dCBjaGFyKiB2YXJpYW50KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChjb21waWxlTW9k
ZSA9PSBNYXRjaE9ubHkpIHsKKyAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQor
ICAgICAgICAgICAgICAgIHJldHVybiAiTWF0Y2gtb25seSA4LWJpdCByZWd1bGFyIGV4cHJlc3Np
b24iOworCisgICAgICAgICAgICByZXR1cm4gIk1hdGNoLW9ubHkgMTYtYml0IHJlZ3VsYXIgZXhw
cmVzc2lvbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkK
KyAgICAgICAgICAgIHJldHVybiAiOC1iaXQgcmVndWxhciBleHByZXNzaW9uIjsKKworICAgICAg
ICByZXR1cm4gIjE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iOworICAgIH0KKworICAgIHVuc2ln
bmVkIG9wQ291bnQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3BzLnNpemUo
KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBQYXR0ZXJuU3RyaW5nKFByaW50U3RyZWFtJiBvdXQp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3BhdHRlcm4uZHVtcFBhdHRlcm5TdHJpbmcob3V0
LCBtX3BhdHRlcm5TdHJpbmcpOworICAgIH0KKworICAgIGludCBkdW1wRm9yKFByaW50U3RyZWFt
JiBvdXQsIHVuc2lnbmVkIG9wSW5kZXgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAob3BJ
bmRleCA+PSBvcENvdW50KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBvdXQu
cHJpbnRmKCIlNGQ6Iiwgb3BJbmRleCk7CisKKyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29w
SW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKKyAgICAgICAg
c3dpdGNoIChvcC5tX29wKSB7CisgICAgICAgIGNhc2UgT3BUZXJtOiB7CisgICAgICAgICAgICBv
dXQucHJpbnQoIk9wVGVybSAiKTsKKyAgICAgICAgICAgIHN3aXRjaCAodGVybS0+dHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbkJPTDoKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIkFzc2VydCBCT0wiKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbkVPTDoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIkFzc2VydCBFT0wiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFyYWN0ZXI6
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJUeXBlUGF0dGVybkNoYXJhY3RlciAiKTsKKyAg
ICAgICAgICAgICAgICBkdW1wVUNoYXIzMihvdXQsIHRlcm0tPnBhdHRlcm5DaGFyYWN0ZXIpOwor
ICAgICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4uaWdub3JlQ2FzZSgpKQorICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiBpZ25vcmUgY2FzZSIpOworCisgICAgICAgICAgICAgICAgdGVy
bS0+ZHVtcFF1YW50aWZpZXIob3V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUNoYXJhY3RlckNsYXNzOgorICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiVHlwZVBhdHRlcm5DaGFyYWN0ZXJDbGFzcyAiKTsKKyAgICAgICAgICAg
ICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgi
bm90ICIpOworICAgICAgICAgICAgICAgIGR1bXBDaGFyYWN0ZXJDbGFzcyhvdXQsICZtX3BhdHRl
cm4sIHRlcm0tPmNoYXJhY3RlckNsYXNzKTsKKyAgICAgICAgICAgICAgICB0ZXJtLT5kdW1wUXVh
bnRpZmllcihvdXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5OgorICAgICAgICAgICAgICAg
IG91dC5wcmludGYoIiVzd29yZCBib3VuZGFyeSIsIHRlcm0tPmludmVydCgpID8gIm5vbi0iIDog
IiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFBhdHRlcm5U
ZXJtOjpUeXBlRG90U3RhckVuY2xvc3VyZToKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIi4q
IGVuY2xvc3VyZSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFBhdHRlcm5UZXJtOjpUeXBlRm9yd2FyZFJlZmVyZW5jZToKKyAgICAgICAgICAgIGNhc2UgUGF0
dGVyblRlcm06OlR5cGVCYWNrUmVmZXJlbmNlOgorICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVy
bTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRl
cm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChvcC5tX2lzRGVhZENvZGUpCisgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIgYWxyZWFkeSBoYW5kbGVkIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIlxu
Iik7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE9w
Qm9keUFsdGVybmF0aXZlQmVnaW46CisgICAgICAgICAgICBvdXQucHJpbnRmKCJPcEJvZHlBbHRl
cm5hdGl2ZUJlZ2luIG1pbmltdW0gc2l6ZSAldVxuIiwgb3AubV9hbHRlcm5hdGl2ZS0+bV9taW5p
bXVtU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgICAgY2FzZSBPcEJvZHlB
bHRlcm5hdGl2ZU5leHQ6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJPcEJvZHlBbHRlcm5hdGl2
ZU5leHQgbWluaW11bSBzaXplICV1XG4iLCBvcC5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
KTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKworICAgICAgICBjYXNlIE9wQm9keUFsdGVybmF0
aXZlRW5kOgorICAgICAgICAgICAgb3V0LnByaW50KCJPcEJvZHlBbHRlcm5hdGl2ZUVuZFxuIik7
CisgICAgICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgICAgY2FzZSBPcFNpbXBsZU5lc3RlZEFs
dGVybmF0aXZlQmVnaW46CisgICAgICAgICAgICBvdXQucHJpbnRmKCJPcFNpbXBsZU5lc3RlZEFs
dGVybmF0aXZlQmVnaW4gbWluaW11bSBzaXplICV1XG4iLCBvcC5tX2FsdGVybmF0aXZlLT5tX21p
bmltdW1TaXplKTsKKyAgICAgICAgICAgIHJldHVybigxKTsKKworICAgICAgICBjYXNlIE9wTmVz
dGVkQWx0ZXJuYXRpdmVCZWdpbjoKKyAgICAgICAgICAgIG91dC5wcmludGYoIk9wTmVzdGVkQWx0
ZXJuYXRpdmVCZWdpbiBtaW5pbXVtIHNpemUgJXVcbiIsIG9wLm1fYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpOworICAgICAgICAgICAgcmV0dXJuKDEpOworCisgICAgICAgIGNhc2UgT3BTaW1w
bGVOZXN0ZWRBbHRlcm5hdGl2ZU5leHQ6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJPcFNpbXBs
ZU5lc3RlZEFsdGVybmF0aXZlTmV4dCBtaW5pbXVtIHNpemUgJXVcbiIsIG9wLm1fYWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemUpOworICAgICAgICAgICAgcmV0dXJuKDApOworCisgICAgICAgIGNh
c2UgT3BOZXN0ZWRBbHRlcm5hdGl2ZU5leHQ6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJPcE5l
c3RlZEFsdGVybmF0aXZlTmV4dCBtaW5pbXVtIHNpemUgJXVcbiIsIG9wLm1fYWx0ZXJuYXRpdmUt
Pm1fbWluaW11bVNpemUpOworICAgICAgICAgICAgcmV0dXJuKDApOworCisgICAgICAgIGNhc2Ug
T3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUVuZDoKKyAgICAgICAgICAgIG91dC5wcmludCgiT3BT
aW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUVuZCIpOworICAgICAgICAgICAgdGVybS0+ZHVtcFF1YW50
aWZpZXIob3V0KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIHJl
dHVybigtMSk7CisKKyAgICAgICAgY2FzZSBPcE5lc3RlZEFsdGVybmF0aXZlRW5kOgorICAgICAg
ICAgICAgb3V0LnByaW50KCJPcE5lc3RlZEFsdGVybmF0aXZlRW5kIik7CisgICAgICAgICAgICB0
ZXJtLT5kdW1wUXVhbnRpZmllcihvdXQpOworICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOwor
ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKworICAgICAgICBjYXNlIE9wUGFyZW50aGVzZXNTdWJw
YXR0ZXJuT25jZUJlZ2luOgorICAgICAgICAgICAgb3V0LnByaW50KCJPcFBhcmVudGhlc2VzU3Vi
cGF0dGVybk9uY2VCZWdpbiAiKTsKKyAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJlKCkpCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiY2FwdHVyaW5nIHBhdHRlcm4gIyV1XG4iLCBvcC5t
X3Rlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJub24tY2FwdHVyaW5nXG4iKTsKKyAgICAgICAgICAgIHJl
dHVybigwKTsKKworICAgICAgICBjYXNlIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUVuZDoK
KyAgICAgICAgICAgIG91dC5wcmludCgiT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlRW5kXG4i
KTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKworICAgICAgICBjYXNlIE9wUGFyZW50aGVzZXNT
dWJwYXR0ZXJuVGVybWluYWxCZWdpbjoKKyAgICAgICAgICAgIG91dC5wcmludCgiT3BQYXJlbnRo
ZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJlZ2luICIpOworICAgICAgICAgICAgaWYgKHRlcm0tPmNh
cHR1cmUoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJjYXB0dXJpbmcgcGF0dGVybiAj
JXVcbiIsIG9wLm1fdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIm5vbi1jYXB0dXJpbmdcbiIpOworICAg
ICAgICAgICAgcmV0dXJuKDApOworCisgICAgICAgIGNhc2UgT3BQYXJlbnRoZXNlc1N1YnBhdHRl
cm5UZXJtaW5hbEVuZDoKKyAgICAgICAgICAgIG91dC5wcmludCgiT3BQYXJlbnRoZXNlc1N1YnBh
dHRlcm5UZXJtaW5hbEVuZCAiKTsKKyAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJlKCkpCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiY2FwdHVyaW5nIHBhdHRlcm4gIyV1XG4iLCBvcC5t
X3Rlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJub24tY2FwdHVyaW5nXG4iKTsKKyAgICAgICAgICAgIHJl
dHVybigwKTsKKworICAgICAgICBjYXNlIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuQmVnaW46Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIk9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuQmVnaW4gIik7Cisg
ICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpKQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoImNhcHR1cmluZyBwYXR0ZXJuICMldVxuIiwgb3AubV90ZXJtLT5wYXJlbnRoZXNlcy5zdWJw
YXR0ZXJuSWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgi
bm9uLWNhcHR1cmluZ1xuIik7CisgICAgICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgICAgY2Fz
ZSBPcFBhcmVudGhlc2VzU3VicGF0dGVybkVuZDoKKyAgICAgICAgICAgIG91dC5wcmludCgiT3BQ
YXJlbnRoZXNlc1N1YnBhdHRlcm5FbmQgIik7CisgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVy
ZSgpKQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoImNhcHR1cmluZyBwYXR0ZXJuICMldVxu
Iiwgb3AubV90ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgibm9uLWNhcHR1cmluZ1xuIik7CisgICAgICAg
ICAgICByZXR1cm4oMCk7CisKKyAgICAgICAgY2FzZSBPcFBhcmVudGhldGljYWxBc3NlcnRpb25C
ZWdpbjoKKyAgICAgICAgICAgIG91dC5wcmludGYoIk9wUGFyZW50aGV0aWNhbEFzc2VydGlvbkJl
Z2luJXNcbiIsIG9wLm1fdGVybS0+aW52ZXJ0KCkgPyAiIGludmVydGVkIiA6ICIiKTsKKyAgICAg
ICAgICAgIHJldHVybigwKTsKKworICAgICAgICBjYXNlIE9wUGFyZW50aGV0aWNhbEFzc2VydGlv
bkVuZDoKKyAgICAgICAgICAgIG91dC5wcmludCgiT3BQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uRW5k
JXNcbiIsIG9wLm1fdGVybS0+aW52ZXJ0KCkgPyAiIGludmVydGVkIiA6ICIiKTsKKyAgICAgICAg
ICAgIHJldHVybigwKTsKKworICAgICAgICBjYXNlIE9wTWF0Y2hGYWlsZWQ6CisgICAgICAgICAg
ICBvdXQucHJpbnQoIk9wTWF0Y2hGYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKDApOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKwogcHJpdmF0ZToKICAgICBW
TSogbV92bTsKIAogICAgIFlhcnJQYXR0ZXJuJiBtX3BhdHRlcm47Ci0KKyAgICBTdHJpbmcmIG1f
cGF0dGVyblN0cmluZzsKICAgICBZYXJyQ29kZUJsb2NrJiBtX2NvZGVCbG9jazsKICAgICBZYXJy
Q2hhclNpemUgbV9jaGFyU2l6ZTsKIApAQCAtMzU3Niw2ICszNzg2LDggQEAgcHJpdmF0ZToKIAog
ICAgIC8vIFRoaXMgY2xhc3MgcmVjb3JkcyBzdGF0ZSB3aGlsc3QgZ2VuZXJhdGluZyB0aGUgYmFj
a3RyYWNraW5nIHBhdGggb2YgY29kZS4KICAgICBCYWNrdHJhY2tpbmdTdGF0ZSBtX2JhY2t0cmFj
a2luZ1N0YXRlOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxZYXJyRGlzYXNzZW1ibGVyPiBt
X2Rpc2Fzc2VtYmxlcjsKIH07CiAKIHN0YXRpYyB2b2lkIGR1bXBDb21waWxlRmFpbHVyZShKSVRG
YWlsdXJlUmVhc29uIGZhaWx1cmUpCkBAIC0zNjAyLDEyICszODE0LDEyIEBAIHN0YXRpYyB2b2lk
IGR1bXBDb21waWxlRmFpbHVyZShKSVRGYWlsdXIKICAgICB9CiB9CiAKLXZvaWQgaml0Q29tcGls
ZShZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplLCBWTSogdm0sIFlh
cnJDb2RlQmxvY2smIGNvZGVCbG9jaywgWWFyckpJVENvbXBpbGVNb2RlIG1vZGUpCit2b2lkIGpp
dENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFN0cmluZyYgcGF0dGVyblN0cmluZywgWWFy
ckNoYXJTaXplIGNoYXJTaXplLCBWTSogdm0sIFlhcnJDb2RlQmxvY2smIGNvZGVCbG9jaywgWWFy
ckpJVENvbXBpbGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gTWF0Y2hPbmx5KQotICAg
ICAgICBZYXJyR2VuZXJhdG9yPE1hdGNoT25seT4odm0sIHBhdHRlcm4sIGNvZGVCbG9jaywgY2hh
clNpemUpLmNvbXBpbGUoKTsKKyAgICAgICAgWWFyckdlbmVyYXRvcjxNYXRjaE9ubHk+KHZtLCBw
YXR0ZXJuLCBwYXR0ZXJuU3RyaW5nLCBjb2RlQmxvY2ssIGNoYXJTaXplKS5jb21waWxlKCk7CiAg
ICAgZWxzZQotICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVTdWJwYXR0ZXJucz4odm0sIHBh
dHRlcm4sIGNvZGVCbG9jaywgY2hhclNpemUpLmNvbXBpbGUoKTsKKyAgICAgICAgWWFyckdlbmVy
YXRvcjxJbmNsdWRlU3VicGF0dGVybnM+KHZtLCBwYXR0ZXJuLCBwYXR0ZXJuU3RyaW5nLCBjb2Rl
QmxvY2ssIGNoYXJTaXplKS5jb21waWxlKCk7CiAKICAgICBpZiAoYXV0byBmYWlsdXJlUmVhc29u
ID0gY29kZUJsb2NrLmZhaWx1cmVSZWFzb24oKSkgewogICAgICAgICBpZiAoT3B0aW9uczo6ZHVt
cENvbXBpbGVkUmVnRXhwUGF0dGVybnMoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmgJKHJldmlzaW9uIDIzNDcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIGVudW0gWWFyckpJ
VENvbXBpbGVNb2RlIHsKICAgICBNYXRjaE9ubHksCiAgICAgSW5jbHVkZVN1YnBhdHRlcm5zCiB9
Owotdm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiwgWWFyckNoYXJTaXplLCBWTSosIFlhcnJD
b2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2RlID0gSW5jbHVkZVN1YnBhdHRl
cm5zKTsKK3ZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYsIFN0cmluZyYgcGF0dGVyblN0cmlu
ZywgWWFyckNoYXJTaXplLCBWTSosIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENv
bXBpbGVNb2RlID0gSW5jbHVkZVN1YnBhdHRlcm5zKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OllhcnIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNw
cAkocmV2aXNpb24gMjM0NzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBh
dHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTY5LDcgKzExNjksNyBAQCB2b2lkIGR1bXBD
aGFyYWN0ZXJDbGFzcyhQcmludFN0cmVhbSYgb3V0CiAgICAgZWxzZSBpZiAoY2hhcmFjdGVyQ2xh
c3MgPT0gcGF0dGVybi0+d29yZGNoYXJDaGFyYWN0ZXJDbGFzcygpKQogICAgICAgICBvdXQucHJp
bnQoIjx3b3JkPiIpOwogICAgIGVsc2UgaWYgKGNoYXJhY3RlckNsYXNzID09IHBhdHRlcm4tPndv
cmRVbmljb2RlSWdub3JlQ2FzZUNoYXJDaGFyYWN0ZXJDbGFzcygpKQotICAgICAgICBvdXQucHJp
bnQoIjx1bmljb2RlIGlnbm9yZSBjYXNlPiIpOworICAgICAgICBvdXQucHJpbnQoIjx1bmljb2Rl
IHdvcmQgaWdub3JlIGNhc2U+Iik7CiAgICAgZWxzZSBpZiAoY2hhcmFjdGVyQ2xhc3MgPT0gcGF0
dGVybi0+bm9uZGlnaXRzQ2hhcmFjdGVyQ2xhc3MoKSkKICAgICAgICAgb3V0LnByaW50KCI8bm9u
LWRpZ2l0cz4iKTsKICAgICBlbHNlIGlmIChjaGFyYWN0ZXJDbGFzcyA9PSBwYXR0ZXJuLT5ub25z
cGFjZXNDaGFyYWN0ZXJDbGFzcygpKQpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgdm9pZCBkdW1wQ2hh
cmFjdGVyQ2xhc3MoUHJpbnRTdHJlYW0mIG91dAogICAgIGVsc2UgaWYgKGNoYXJhY3RlckNsYXNz
ID09IHBhdHRlcm4tPm5vbndvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MoKSkKICAgICAgICAgb3V0LnBy
aW50KCI8bm9uLXdvcmQ+Iik7CiAgICAgZWxzZSBpZiAoY2hhcmFjdGVyQ2xhc3MgPT0gcGF0dGVy
bi0+bm9ud29yZFVuaWNvZGVJZ25vcmVDYXNlQ2hhckNoYXJhY3RlckNsYXNzKCkpCi0gICAgICAg
IG91dC5wcmludCgiPHVuaWNvZGUgbm9uLWlnbm9yZSBjYXNlPiIpOworICAgICAgICBvdXQucHJp
bnQoIjx1bmljb2RlIG5vbi13b3JkIGlnbm9yZSBjYXNlPiIpOwogICAgIGVsc2UgewogICAgICAg
ICBib29sIG5lZWRNYXRjaGVzUmFuZ2VzU2VwZXJhdG9yID0gZmFsc2U7CiAKQEAgLTEyOTksNzUg
KzEyOTksNyBAQCB2b2lkIFBhdHRlcm5UZXJtOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsCiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgVHlwZUNoYXJhY3RlckNsYXNzOgogICAgICAgICBvdXQucHJp
bnQoImNoYXJhY3RlciBjbGFzcyAiKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlckNsYXNzLT5tX2Fu
eUNoYXJhY3RlcikKLSAgICAgICAgICAgIG91dC5wcmludCgiPGFueSBjaGFyYWN0ZXI+Iik7Ci0g
ICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlckNsYXNzID09IHRoaXNQYXR0ZXJuLT5uZXdsaW5lQ2hh
cmFjdGVyQ2xhc3MoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgiPG5ld2xpbmU+Iik7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoYXJhY3RlckNsYXNzID09IHRoaXNQYXR0ZXJuLT5kaWdpdHNDaGFyYWN0
ZXJDbGFzcygpKQotICAgICAgICAgICAgb3V0LnByaW50KCI8ZGlnaXRzPiIpOwotICAgICAgICBl
bHNlIGlmIChjaGFyYWN0ZXJDbGFzcyA9PSB0aGlzUGF0dGVybi0+c3BhY2VzQ2hhcmFjdGVyQ2xh
c3MoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgiPHdoaXRlc3BhY2U+Iik7Ci0gICAgICAgIGVs
c2UgaWYgKGNoYXJhY3RlckNsYXNzID09IHRoaXNQYXR0ZXJuLT53b3JkY2hhckNoYXJhY3RlckNs
YXNzKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIjx3b3JkPiIpOwotICAgICAgICBlbHNlIGlm
IChjaGFyYWN0ZXJDbGFzcyA9PSB0aGlzUGF0dGVybi0+d29yZFVuaWNvZGVJZ25vcmVDYXNlQ2hh
ckNoYXJhY3RlckNsYXNzKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIjx1bmljb2RlIGlnbm9y
ZSBjYXNlPiIpOwotICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXJDbGFzcyA9PSB0aGlzUGF0dGVy
bi0+bm9uZGlnaXRzQ2hhcmFjdGVyQ2xhc3MoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgiPG5v
bi1kaWdpdHM+Iik7Ci0gICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlckNsYXNzID09IHRoaXNQYXR0
ZXJuLT5ub25zcGFjZXNDaGFyYWN0ZXJDbGFzcygpKQotICAgICAgICAgICAgb3V0LnByaW50KCI8
bm9uLXdoaXRlc3BhY2U+Iik7Ci0gICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlckNsYXNzID09IHRo
aXNQYXR0ZXJuLT5ub253b3JkY2hhckNoYXJhY3RlckNsYXNzKCkpCi0gICAgICAgICAgICBvdXQu
cHJpbnQoIjxub24td29yZD4iKTsKLSAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyQ2xhc3MgPT0g
dGhpc1BhdHRlcm4tPm5vbndvcmRVbmljb2RlSWdub3JlQ2FzZUNoYXJDaGFyYWN0ZXJDbGFzcygp
KQotICAgICAgICAgICAgb3V0LnByaW50KCI8dW5pY29kZSBub24taWdub3JlIGNhc2U+Iik7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgYm9vbCBuZWVkTWF0Y2hlc1Jhbmdlc1NlcGVyYXRv
ciA9IGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIGR1bXBNYXRjaGVzID0gWyZdIChjb25zdCBj
aGFyKiBwcmVmaXgsIFZlY3RvcjxVQ2hhcjMyPiBtYXRjaGVzKSB7Ci0gICAgICAgICAgICAgICAg
c2l6ZV90IG1hdGNoZXNTaXplID0gbWF0Y2hlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KG1hdGNoZXNTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZWVkTWF0Y2hlc1Jhbmdl
c1NlcGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCIpOwotICAg
ICAgICAgICAgICAgICAgICBuZWVkTWF0Y2hlc1Jhbmdlc1NlcGVyYXRvciA9IHRydWU7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIjooIik7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF0Y2hlc1NpemU7ICsraSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIsIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wVUNoYXIzMihvdXQsIG1h
dGNoZXNbaV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiKSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIGF1dG8gZHVtcFJhbmdlcyA9IFsmXSAoY29uc3QgY2hhciogcHJlZml4LCBWZWN0b3I8
Q2hhcmFjdGVyUmFuZ2U+IHJhbmdlcykgewotICAgICAgICAgICAgICAgIHNpemVfdCByYW5nZVNp
emUgPSByYW5nZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChyYW5nZVNpemUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG5lZWRNYXRjaGVzUmFuZ2VzU2VwZXJhdG9yKQotICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIik7Ci0gICAgICAgICAgICAgICAgICAgIG5l
ZWRNYXRjaGVzUmFuZ2VzU2VwZXJhdG9yID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQocHJlZml4LCAiIHJhbmdlczooIik7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmFuZ2VTaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UgPSByYW5nZXNbaV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIigiKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGR1bXBVQ2hhcjMyKG91dCwgcmFuZ2UuYmVnaW4pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIuLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFVD
aGFyMzIob3V0LCByYW5nZS5lbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIpIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgb3V0LnByaW50KCJbIik7Ci0gICAgICAgICAgICBkdW1wTWF0Y2hlcygiQVNDSUkiLCBjaGFy
YWN0ZXJDbGFzcy0+bV9tYXRjaGVzKTsKLSAgICAgICAgICAgIGR1bXBSYW5nZXMoIkFTQ0lJIiwg
Y2hhcmFjdGVyQ2xhc3MtPm1fcmFuZ2VzKTsKLSAgICAgICAgICAgIGR1bXBNYXRjaGVzKCJVbmlj
b2RlIiwgY2hhcmFjdGVyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUpOwotICAgICAgICAgICAgZHVt
cFJhbmdlcygiVW5pY29kZSIsIGNoYXJhY3RlckNsYXNzLT5tX3Jhbmdlc1VuaWNvZGUpOwotICAg
ICAgICAgICAgb3V0LnByaW50KCJdIik7Ci0gICAgICAgIH0KKyAgICAgICAgZHVtcENoYXJhY3Rl
ckNsYXNzKG91dCwgdGhpc1BhdHRlcm4sIGNoYXJhY3RlckNsYXNzKTsKICAgICAgICAgZHVtcFF1
YW50aWZpZXIob3V0KTsKICAgICAgICAgaWYgKHF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4
ZWRDb3VudCB8fCB0aGlzUGF0dGVybi0+dW5pY29kZSgpKQogICAgICAgICAgICAgb3V0LnByaW50
KCIsZnJhbWUgbG9jYXRpb24gIiwgZnJhbWVMb2NhdGlvbik7CkBAIC0xNDQwLDE2ICsxMzcyLDEw
IEBAIHZvaWQgUGF0dGVybkRpc2p1bmN0aW9uOjpkdW1wKFByaW50U3RyZWEKICAgICB9CiB9CiAK
LXZvaWQgWWFyclBhdHRlcm46OmR1bXBQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmlu
ZykKK3ZvaWQgWWFyclBhdHRlcm46OmR1bXBQYXR0ZXJuU3RyaW5nKFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZykKIHsKLSAgICBkdW1wUGF0dGVybihXVEY6OmRh
dGFGaWxlKCksIHBhdHRlcm5TdHJpbmcpOwotfQorICAgIG91dC5wcmludCgiLyIsIHBhdHRlcm5T
dHJpbmcsICIvIik7CiAKLXZvaWQgWWFyclBhdHRlcm46OmR1bXBQYXR0ZXJuKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZykKLXsKLSAgICBvdXQucHJpbnQoIlJl
Z0V4cCBwYXR0ZXJuIGZvciAvIik7Ci0gICAgb3V0LnByaW50KHBhdHRlcm5TdHJpbmcpOwotICAg
IG91dC5wcmludCgiLyIpOwogICAgIGlmIChnbG9iYWwoKSkKICAgICAgICAgb3V0LnByaW50KCJn
Iik7CiAgICAgaWYgKGlnbm9yZUNhc2UoKSkKQEAgLTE0NjAsNiArMTM4NiwxOCBAQCB2b2lkIFlh
cnJQYXR0ZXJuOjpkdW1wUGF0dGVybihQcmludFN0cmVhCiAgICAgICAgIG91dC5wcmludCgidSIp
OwogICAgIGlmIChzdGlja3koKSkKICAgICAgICAgb3V0LnByaW50KCJ5Iik7Cit9CisKK3ZvaWQg
WWFyclBhdHRlcm46OmR1bXBQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZykKK3sK
KyAgICBkdW1wUGF0dGVybihXVEY6OmRhdGFGaWxlKCksIHBhdHRlcm5TdHJpbmcpOworfQorCit2
b2lkIFlhcnJQYXR0ZXJuOjpkdW1wUGF0dGVybihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJp
bmcmIHBhdHRlcm5TdHJpbmcpCit7CisgICAgb3V0LnByaW50KCJSZWdFeHAgcGF0dGVybiBmb3Ig
Iik7CisgICAgZHVtcFBhdHRlcm5TdHJpbmcob3V0LCBwYXR0ZXJuU3RyaW5nKTsKKwogICAgIGlm
IChtX2ZsYWdzICE9IE5vRmxhZ3MpIHsKICAgICAgICAgYm9vbCBwcmludFNlcGVyYXRvciA9IGZh
bHNlOwogICAgICAgICBvdXQucHJpbnQoIiAoIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJyUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJQYXR0ZXJuLmgJKHJldmlzaW9uIDIzNDcwOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw2ICs0ODks
NyBAQCBzdHJ1Y3QgWWFyclBhdHRlcm4gewogICAgICAgICByZXR1cm4gdW5pY29kZVByb3BlcnRp
ZXNDYWNoZWQuZ2V0KGNsYXNzSUQpOwogICAgIH0KIAorICAgIHZvaWQgZHVtcFBhdHRlcm5TdHJp
bmcoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nKTsKICAgICB2
b2lkIGR1bXBQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybik7CiAgICAgdm9pZCBkdW1wUGF0
dGVybihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4pOwogCg==
</data>
<flag name="review"
          id="364621"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>