<?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>70107</bug_id>
          
          <creation_ts>2011-10-14 06:35:56 -0700</creation_ts>
          <short_desc>Custom written CSS lexer</short_desc>
          <delta_ts>2012-05-10 22:35:40 -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>CSS</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69083</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoltan Herczeg">zherczeg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>hausmann</cc>
    
    <cc>kennyluck</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>mathias</cc>
    
    <cc>ojan</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>peter</cc>
    
    <cc>psolanki</cc>
    
    <cc>rakuco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>483956</commentid>
    <comment_count>0</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-14 06:35:56 -0700</bug_when>
    <thetext>In the current state it is far from ready, I am just curious about EWS.

On methanol it is more than twice (~2.18x) as fast as the original.

The result of 3x2 runs in CPU cycles
Original:  1354030040 1377989672 1345539012
Optimized:  622771368  614838444  635476680</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483957</commentid>
    <comment_count>1</comment_count>
      <attachid>111009</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-14 06:36:37 -0700</bug_when>
    <thetext>Created attachment 111009
draft patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483958</commentid>
    <comment_count>2</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-14 06:38:20 -0700</bug_when>
    <thetext>&gt; On methanol it is more than twice (~2.18x) as fast as the original.

I mean the sum of CSSParser::lex(...) function calls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483959</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-14 06:38:38 -0700</bug_when>
    <thetext>Attachment 111009 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/css/CSSParser.cpp&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebCore/css/CSSParser.cpp:6993:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSParser.cpp:7686:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/css/CSSParser.cpp:7950:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/css/CSSParser.cpp:7952:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/css/CSSParser.cpp:7953:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/css/CSSParser.cpp:7953:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Total errors found: 6 in 2 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>483988</commentid>
    <comment_count>4</comment_count>
      <attachid>111009</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-14 08:05:18 -0700</bug_when>
    <thetext>Comment on attachment 111009
draft patch

Attachment 111009 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10054557

New failing tests:
inspector/styles/styles-source-offsets.html
inspector/elements/elements-panel-styles.html
inspector/styles/styles-new-API.html
inspector/styles/styles-source-lines.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485043</commentid>
    <comment_count>5</comment_count>
      <attachid>111241</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-17 03:56:46 -0700</bug_when>
    <thetext>Created attachment 111241
next draft</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485045</commentid>
    <comment_count>6</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-17 03:59:40 -0700</bug_when>
    <thetext>Layout and style (except debug) errors are fixed.

The question now: what is the correct token style?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485046</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 03:59:57 -0700</bug_when>
    <thetext>Attachment 111241 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/css/CSSParser.cpp&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebCore/css/CSSParser.cpp:7950:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/css/CSSParser.cpp:7952:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/css/CSSParser.cpp:7953:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/css/CSSParser.cpp:7953:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Total errors found: 4 in 2 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>519060</commentid>
    <comment_count>8</comment_count>
      <attachid>118748</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-12 00:57:53 -0800</bug_when>
    <thetext>Created attachment 118748
core patch

I think the tokens supposedly parsed by CSS are finally covered, and it is time for reviewing the custom written css tokenizer.

The patch is not ready, it has no ChangeLog, and tokenizer.flex is not removed form the trunk. But I would like to hear your opinion since I am sure you have several ideas to improve the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519068</commentid>
    <comment_count>9</comment_count>
      <attachid>118748</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-12 01:32:11 -0800</bug_when>
    <thetext>Comment on attachment 118748
core patch

Attachment 118748 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10841018

New failing tests:
fast/regions/parsing-region-style-rule.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519280</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-12 09:36:44 -0800</bug_when>
    <thetext>Someone who knows about parsers should take a look. Oliver perhaps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519399</commentid>
    <comment_count>11</comment_count>
      <attachid>118748</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-12 13:09:50 -0800</bug_when>
    <thetext>Comment on attachment 118748
core patch

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

There seems to be a lot of code in this that assumes null-termination of all strings passed to the lexer -- is this guaranteed?  For instance if i do var foo = &quot;some big string&quot;; someElement.style=foo.substring(2, 8);  (not sure if this exact statement is valid), we may return a StringImpl that is referencing the middle of another string so null termination won&apos;t be guaranteed.

At the very least i&apos;d like assertions that m_data never exceeds the buffer length.

&gt; Source/WebCore/css/CSSParser.cpp:7388
&gt; +    return chr | 0x20;

Can you add an assertion that chr is in fact an ascii letter?

&gt; Source/WebCore/css/CSSParser.cpp:7394
&gt; +        || (data[0] == &apos;\\&apos; &amp;&amp; isCSSEscape(data[1]));

How do we guarantee data is at least 2 characters long?

&gt; Source/WebCore/css/CSSParser.cpp:7430
&gt; +        } while (isASCIIHexDigit(*data) &amp;&amp; --length);

I&apos;d like assertions that data doesn&apos;t extend beyond the end of the buffer.

&gt; Source/WebCore/css/CSSParser.cpp:7533
&gt; +        if (UNLIKELY(*m_data == quote)) {
&gt; +            // String parsing is done.
&gt; +            ++m_data;
&gt; +            return;
&gt; +        }

What happens if we have an unterminated string? afaict we just walk off the end of the buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519412</commentid>
    <comment_count>12</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-12 13:25:49 -0800</bug_when>
    <thetext>Hey Oliver,

actually the CSS parser working in an internal buffer, which is terminated by two &apos;\0&apos;-s, see the following code:

void CSSParser::setupParser(const char* prefix, const String&amp; string, const char* suffix)
{
    int length = string.length() + strlen(prefix) + strlen(suffix) + 2;

    fastFree(m_data);
    m_data = static_cast&lt;UChar*&gt;(fastMalloc(length * sizeof(UChar)));
    for (unsigned i = 0; i &lt; strlen(prefix); i++)
        m_data[i] = prefix[i];

    memcpy(m_data + strlen(prefix), string.characters(), string.length() * sizeof(UChar));

    unsigned start = strlen(prefix) + string.length();
    unsigned end = start + strlen(suffix);
    for (unsigned i = start; i &lt; end; i++)
        m_data[i] = suffix[i - start];

    m_data[length - 1] = 0;
    m_data[length - 2] = 0;

    yy_hold_char = 0;
    yyleng = 0;
    yytext = yy_c_buf_p = m_data;
    yy_hold_char = *yy_c_buf_p;
    resetRuleBodyMarks();
}

Flex needs this, and I actually liked this approach, since it requires less buffer range checks (you know that any non \0 character must be followed at least two \0-s). CSS actually designed that way that &apos;\0&apos; is not part of any token.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519414</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-12 13:28:17 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Hey Oliver,
&gt; 
&gt; actually the CSS parser working in an internal buffer, which is terminated by two &apos;\0&apos;-s, see the following code:
&gt; 
&gt; void CSSParser::setupParser(const char* prefix, const String&amp; string, const char* suffix)
&gt; {
&gt;     int length = string.length() + strlen(prefix) + strlen(suffix) + 2;
&gt; 
&gt;     fastFree(m_data);
&gt;     m_data = static_cast&lt;UChar*&gt;(fastMalloc(length * sizeof(UChar)));
&gt;     for (unsigned i = 0; i &lt; strlen(prefix); i++)
&gt;         m_data[i] = prefix[i];
&gt; 
&gt;     memcpy(m_data + strlen(prefix), string.characters(), string.length() * sizeof(UChar));
&gt; 
&gt;     unsigned start = strlen(prefix) + string.length();
&gt;     unsigned end = start + strlen(suffix);
&gt;     for (unsigned i = start; i &lt; end; i++)
&gt;         m_data[i] = suffix[i - start];
&gt; 
&gt;     m_data[length - 1] = 0;
&gt;     m_data[length - 2] = 0;
&gt; 
&gt;     yy_hold_char = 0;
&gt;     yyleng = 0;
&gt;     yytext = yy_c_buf_p = m_data;
&gt;     yy_hold_char = *yy_c_buf_p;
&gt;     resetRuleBodyMarks();
&gt; }
&gt; 
&gt; Flex needs this, and I actually liked this approach, since it requires less buffer range checks (you know that any non \0 character must be followed at least two \0-s). CSS actually designed that way that &apos;\0&apos; is not part of any token.

On the downside it requires a copy of the css source -- is a well predicted branch really more expensive than a copy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519420</commentid>
    <comment_count>14</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-12 13:33:55 -0800</bug_when>
    <thetext>Oh, and i still don&apos;t see how the null termination will stop the string parsing from running over the end of the buffer

(In reply to comment #12)
&gt; Hey Oliver,
&gt; 
&gt; actually the CSS parser working in an internal buffer, which is terminated by two &apos;\0&apos;-s, see the following code:
&gt; 
&gt; void CSSParser::setupParser(const char* prefix, const String&amp; string, const char* suffix)
&gt; {
&gt;     int length = string.length() + strlen(prefix) + strlen(suffix) + 2;
&gt; 
&gt;     fastFree(m_data);
&gt;     m_data = static_cast&lt;UChar*&gt;(fastMalloc(length * sizeof(UChar)));
&gt;     for (unsigned i = 0; i &lt; strlen(prefix); i++)
&gt;         m_data[i] = prefix[i];
&gt; 
&gt;     memcpy(m_data + strlen(prefix), string.characters(), string.length() * sizeof(UChar));
&gt; 
&gt;     unsigned start = strlen(prefix) + string.length();
&gt;     unsigned end = start + strlen(suffix);
&gt;     for (unsigned i = start; i &lt; end; i++)
&gt;         m_data[i] = suffix[i - start];
&gt; 
&gt;     m_data[length - 1] = 0;
&gt;     m_data[length - 2] = 0;
&gt; 
&gt;     yy_hold_char = 0;
&gt;     yyleng = 0;
&gt;     yytext = yy_c_buf_p = m_data;
&gt;     yy_hold_char = *yy_c_buf_p;
&gt;     resetRuleBodyMarks();
&gt; }
&gt; 
&gt; Flex needs this, and I actually liked this approach, since it requires less buffer range checks (you know that any non \0 character must be followed at least two \0-s). CSS actually designed that way that &apos;\0&apos; is not part of any token.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519508</commentid>
    <comment_count>15</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-12-12 14:49:58 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; In the current state it is far from ready, I am just curious about EWS.
&gt; 
&gt; On methanol it is more than twice (~2.18x) as fast as the original.
&gt; 
&gt; The result of 3x2 runs in CPU cycles
&gt; Original:  1354030040 1377989672 1345539012
&gt; Optimized:  622771368  614838444  635476680

Are these callgrind CPU cycle counts, or measured using a hardware CPU profiler? What&apos;s the improvement in wall-time? I&apos;m curious because I&apos;ve seen some rather unbelievable improvement numbers in association with the &quot;methanol&quot; benchmark more than once before and I&apos;m not convinced it can be trusted. (Examples: bug 66851, bug 64262, bug 63909)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519532</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-12 14:58:51 -0800</bug_when>
    <thetext>&gt; On methanol it is more than twice (~2.18x) as fast as the original.

I have seen multiple false or totally erroneous claims based on this &quot;methanol&quot; benchmark.

Could you please provide a cross-platform stress test (a webpage or just C++ calling the lexer) so others can verify the results?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519552</commentid>
    <comment_count>17</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-12 15:12:33 -0800</bug_when>
    <thetext>By the way, I think you should announce the intent of changing the CSS lexer on WebKit-dev. Given the scope of the change, it would be polite to give visibility for every port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519889</commentid>
    <comment_count>18</comment_count>
      <attachid>118964</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-12 23:32:21 -0800</bug_when>
    <thetext>Created attachment 118964
CPU cycle measure

The attached patch works with Qt, gcc and x86, but it can be extended to other ports / CPUs if anyone needs it.

I measured the values on an Intel Xeon server, since the cycle counters of all cores are synchronized there. Therefore you don&apos;t need to worry about CPU affinity. On other machines you may experince &quot;jumpings&quot; as the kernel migrates the process, that is why I like the Xeon. I saw speedup between 2x - 2.5x on any pages, so you can use any page to measure it.

The reason of using cycle counters is based on that observation that the tokenizer called thousands of times, but a single run itself takes little time. Thus statistic based measurements are useless in our case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519893</commentid>
    <comment_count>19</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-12 23:42:38 -0800</bug_when>
    <thetext>Based on other patches i&apos;ve seen go through it might be worth checking against html5 spec load time (although i suspect that&apos;s mostly style calc/resolution rather than rule parsing).  Antti can probably give some info on how he&apos;s measuring.

Can you explain to me how the quoted string lexing doesn&apos;t run off the end of the buffer though?  I still can&apos;t see it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519896</commentid>
    <comment_count>20</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-12 23:49:47 -0800</bug_when>
    <thetext>&gt; Can you explain to me how the quoted string lexing doesn&apos;t run off the end of the buffer though?  I still can&apos;t see it.

I am on #webkit now, we can discuss there if you have a little time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519900</commentid>
    <comment_count>21</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-13 00:04:36 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/css/CSSParser.cpp:7388
&gt; &gt; +    return chr | 0x20;
&gt; 
&gt; Can you add an assertion that chr is in fact an ascii letter?

It doesn&apos;t need to be one. I saw this trick in JavaScriptCore/wtf/ASCIICType.h

(chr | 0x20) == &apos;a&apos; if and only if chr is &apos;A&apos; or &apos;a&apos;. Nothing else can satisfy this expression, and I use it for character comparison many times.

The only exception is the second isCaselessEqual, where I describe the rules applies to that function in the comment, and assertions were added to check the rules. Basically if constantString contains minus sign &apos;-&apos;, the cssString must contains only cssLetter-s.

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:7394
&gt; &gt; +        || (data[0] == &apos;\\&apos; &amp;&amp; isCSSEscape(data[1]));
&gt; 
&gt; How do we guarantee data is at least 2 characters long?

C++ has a short circuit expression evaluation method, so data[0] == &apos;\\&apos; must be true before it checks data[1].

&gt; Can you explain to me how the quoted string lexing doesn&apos;t run off the end of the buffer though?  I still can&apos;t see it.

You are right here, checkString must return with fail if it encounters a \0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519901</commentid>
    <comment_count>22</comment_count>
      <attachid>118748</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-13 00:05:18 -0800</bug_when>
    <thetext>Comment on attachment 118748
core patch

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

&gt; Source/WebCore/css/CSSParser.cpp:7460
&gt; +        if (UNLIKELY(*data == quote)) {

We don&apos;t take this path if we&apos;ve reached the end of the buffer as *data == 0

&gt; Source/WebCore/css/CSSParser.cpp:7464
&gt; +        if (UNLIKELY(*data &lt; 14 &amp;&amp; *data &gt; 9 &amp;&amp; *data != 11)) {

This is checking for *data == 10, 12 or 13 so we don&apos;t match 0 here.

&gt; Source/WebCore/css/CSSParser.cpp:7469
&gt; +        if (LIKELY(data[0] != &apos;\\&apos;))

data[0] is 0 (because we&apos;re at the end of the buffer) so we take this path, increment data, and go back to the head of the loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519904</commentid>
    <comment_count>23</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-13 00:08:24 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 118748 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118748&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:7460
&gt; &gt; +        if (UNLIKELY(*data == quote)) {
&gt; 
&gt; We don&apos;t take this path if we&apos;ve reached the end of the buffer as *data == 0
&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:7464
&gt; &gt; +        if (UNLIKELY(*data &lt; 14 &amp;&amp; *data &gt; 9 &amp;&amp; *data != 11)) {
&gt; 
&gt; This is checking for *data == 10, 12 or 13 so we don&apos;t match 0 here.
&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:7469
&gt; &gt; +        if (LIKELY(data[0] != &apos;\\&apos;))
&gt; 
&gt; data[0] is 0 (because we&apos;re at the end of the buffer) so we take this path, increment data, and go back to the head of the loop

I totally agree this one as I said above :) I fix it of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519907</commentid>
    <comment_count>24</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-13 00:14:01 -0800</bug_when>
    <thetext>
&gt; &gt; &gt; Source/WebCore/css/CSSParser.cpp:7394
&gt; &gt; &gt; +        || (data[0] == &apos;\\&apos; &amp;&amp; isCSSEscape(data[1]));
&gt; &gt; 
&gt; &gt; How do we guarantee data is at least 2 characters long?
&gt; 
&gt; C++ has a short circuit expression evaluation method, so data[0] == &apos;\\&apos; must be true before it checks data[1].
Oh right, and we guarantee null termination so even if i have a \ at the end of input this will work.

I don&apos;t really like all these dependencies on having 1+ null terminations on the input as it will make it harder to safely move to a non-copying lexer in future, but i recognize this is essentially existing behavior so you don&apos;t need to change it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519915</commentid>
    <comment_count>25</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-13 00:24:38 -0800</bug_when>
    <thetext>&gt; On the downside it requires a copy of the css source -- is a well predicted branch really more expensive than a copy?

This cannot be avoided, since the CSS tokenizer overwrites escape sequences to real characters: Identifier &quot;x\61y&quot; is changed to &quot;xay&quot; before further processing. So we can only avoid buffer dumplication if the input does not contain any escape sequences. We need to take care of prefix and postfix strings as well somehow. And the worst thing is we don&apos;t get the ownership of the input string (not even a RefPtr), so it can be freed during tokenizing. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519958</commentid>
    <comment_count>26</comment_count>
      <attachid>118978</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-13 01:35:17 -0800</bug_when>
    <thetext>Created attachment 118978
core patch2

Fixed the string parsing bug and added new comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519974</commentid>
    <comment_count>27</comment_count>
      <attachid>118978</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 02:25:20 -0800</bug_when>
    <thetext>Comment on attachment 118978
core patch2

Attachment 118978 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10844274

New failing tests:
fast/regions/parsing-region-style-rule.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520096</commentid>
    <comment_count>28</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-13 08:40:17 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; &gt; On the downside it requires a copy of the css source -- is a well predicted branch really more expensive than a copy?
&gt; 
&gt; This cannot be avoided, since the CSS tokenizer overwrites escape sequences to real characters: Identifier &quot;x\61y&quot; is changed to &quot;xay&quot; before further processing. So we can only avoid buffer dumplication if the input does not contain any escape sequences. We need to take care of prefix and postfix strings as well somehow. And the worst thing is we don&apos;t get the ownership of the input string (not even a RefPtr), so it can be freed during tokenizing. What do you think?

The same problem exists when parsing JS -- but copying all strings is a pessimisation, you should only need to copy when there are escape sequences, and they are very rare.  Once again: a change to make it non-copying doesn&apos;t need to be in this patch :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520353</commentid>
    <comment_count>29</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-13 13:50:07 -0800</bug_when>
    <thetext>Thanks for the review Oliver. Is there anything else I should do with the core part?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524510</commentid>
    <comment_count>30</comment_count>
      <attachid>120002</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-20 03:20:05 -0800</bug_when>
    <thetext>Created attachment 120002
full patch, build testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524850</commentid>
    <comment_count>31</comment_count>
      <attachid>120002</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-20 15:00:02 -0800</bug_when>
    <thetext>Comment on attachment 120002
full patch, build testing

Attachment 120002 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10992332

New failing tests:
fast/regions/parsing-region-style-rule.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527324</commentid>
    <comment_count>32</comment_count>
      <attachid>120002</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-27 03:39:49 -0800</bug_when>
    <thetext>Comment on attachment 120002
full patch, build testing

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

I just quickly skimmed over the path. Some comments bellow.
A general concern is lot of code have the assumption the input is ASCII. Is there no need to handle unicode (identifiers, space, digits, etc?).

&gt; Source/WebCore/css/CSSParser.cpp:7446
&gt; +    while (UNLIKELY(*data &lt;= &apos; &apos; &amp;&amp; (typesOfASCIICharacters[*data] == CharacterWhiteSpace)))

I am not sure the UNLIKELY() is a good idea here. A bunch of spaces grouped together seems very likely :)

&gt; Source/WebCore/css/CSSParser.cpp:8032
&gt; +    // This is not a real loop, just allows us to avoid gotos.
&gt; +    while (true) {

Where would the Goto be? I only see one break at the end. The body is a switch().

&gt; Source/WebCore/css/CSSParser.cpp:8098
&gt; +            if (!isASCIIDigit(m_data[0]))
&gt; +                break;

Isn&apos;t this redundant with the following code?
The code of CharacterNumber also handle the dot case.

&gt; Source/WebCore/css/CSSParser.cpp:8102
&gt; +            bool dotSeen = (m_token == &apos;.&apos;);

I haven&apos;t read the purpose of this yet but that but I have only seen m_token used with named contants everywhere else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528449</commentid>
    <comment_count>33</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-02 02:19:36 -0800</bug_when>
    <thetext>Hey Benjamin,

thank you for the review and Happy New Year!

&gt; A general concern is lot of code have the assumption the input is ASCII. Is there no need to handle unicode (identifiers, space, digits, etc?).

Yes. In CSS everything &gt; 127 is called &quot;nonascii&quot; and treated as part of an identifier.

&gt; &gt; Source/WebCore/css/CSSParser.cpp:8032
&gt; &gt; +    // This is not a real loop, just allows us to avoid gotos.
&gt; &gt; +    while (true) {
&gt; 
&gt; Where would the Goto be? I only see one break at the end. The body is a switch().

It is for /* */ comments. See &quot;case CharacterSlash&quot;. Although that is the only place, so we could change that to a goto if you prefer that.

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:8098
&gt; &gt; +            if (!isASCIIDigit(m_data[0]))
&gt; &gt; +                break;
&gt; 
&gt; Isn&apos;t this redundant with the following code?
&gt; The code of CharacterNumber also handle the dot case.

A little more difficult. A single &apos;.&apos; is a dot token, while &apos;.0&apos; is a number (zero in this example).

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:8102
&gt; &gt; +            bool dotSeen = (m_token == &apos;.&apos;);
&gt; 
&gt; I haven&apos;t read the purpose of this yet but that but I have only seen m_token used with named contants everywhere else.

All m_token &lt; 256 are single character tokens. CSSGrammar.y does not define named constant for dot but I can define one if you think it is better.

I&apos;ll fix the unlikely issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528456</commentid>
    <comment_count>34</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-02 03:32:16 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; &gt; &gt; Source/WebCore/css/CSSParser.cpp:8032
&gt; &gt; &gt; +    // This is not a real loop, just allows us to avoid gotos.
&gt; &gt; &gt; +    while (true) {
&gt; &gt; 
&gt; &gt; Where would the Goto be? I only see one break at the end. The body is a switch().
&gt; 
&gt; It is for /* */ comments. See &quot;case CharacterSlash&quot;. Although that is the only place, so we could change that to a goto if you prefer that.

I don&apos;t think WebKit has any sort of strict anti-goto policy. If goto is the most natural way to write this then you should just use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528734</commentid>
    <comment_count>35</comment_count>
      <attachid>120935</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-03 05:20:44 -0800</bug_when>
    <thetext>Created attachment 120935
updated draft patch

All requestes are fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528737</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 05:22:40 -0800</bug_when>
    <thetext>Attachment 120935 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/css/CSSParser.cpp:1424:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/css/CSSParser.cpp:5185:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 2 in 2 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>528746</commentid>
    <comment_count>37</comment_count>
      <attachid>120935</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 06:10:48 -0800</bug_when>
    <thetext>Comment on attachment 120935
updated draft patch

Attachment 120935 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11074262

New failing tests:
fast/regions/parsing-region-style-rule.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529480</commentid>
    <comment_count>38</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-04 05:47:12 -0800</bug_when>
    <thetext>&gt; New failing tests:
&gt; fast/regions/parsing-region-style-rule.html

The bot always complain about this, but I couldn&apos;t find it in its output (and it works with Qt). Can I check this difference somehow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529524</commentid>
    <comment_count>39</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-04 07:42:59 -0800</bug_when>
    <thetext>&gt; The bot always complain about this, but I couldn&apos;t find it in its output (and it works with Qt). Can I check this difference somehow?

There&apos;s no way to read this information back from the bot currently.  (That&apos;s our number 1 feature request.)  If you like, you can try building the Chromium port locally and try running the test:

$ ./Tools/Scripts/update-webkit --chromium
$ ./Tools/Scripts/build-webkit --chromium

Otherwise, you can move forward with your patch, but it would be nice to keep an eye on build.webkit.org when landing to see if this problem manifests itself on the buildbots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530092</commentid>
    <comment_count>40</comment_count>
      <attachid>121239</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-05 01:27:36 -0800</bug_when>
    <thetext>Created attachment 121239
release patch

I think I fixed everything. Changelog added. Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530094</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-05 01:29:02 -0800</bug_when>
    <thetext>Attachment 121239 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/CMakeLists.tx...&quot; exit_code: 1

Source/WebCore/css/CSSParser.cpp:1424:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 1 in 4 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>530954</commentid>
    <comment_count>42</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-05 23:51:31 -0800</bug_when>
    <thetext>The patch now passes all tests, and I think it is ready for a review. Oliver, Benjamin what do you think of this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531341</commentid>
    <comment_count>43</comment_count>
      <attachid>121239</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-01-06 13:36:21 -0800</bug_when>
    <thetext>Comment on attachment 121239
release patch

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

Okay, i&apos;m doing a preliminary r- due to the large number of unnecessary formatting changes sorry.  A patch of this scale and complexity shouldn&apos;t have unnecessary no-op changes in it :-/

I&apos;ll continue with actual content review, but this should let you start working on the formatting stuff without waiting for me to finish this review

&gt; Source/WebCore/css/CSSParser.cpp:263
&gt; -    int length = string.length() + strlen(prefix) + strlen(suffix) + 2;
&gt; +    int length = string.length() + strlen(prefix) + strlen(suffix) + 1;

Why have we dropped to only a single extra null terminator?  I recall (though haven&apos;t got that far in the patch) that we rely on two nulls at the end of the string

&gt; Source/WebCore/css/CSSParser.cpp:925
&gt; -        if (id == CSSValueStatic ||
&gt; -             id == CSSValueRelative ||
&gt; -             id == CSSValueAbsolute ||
&gt; -             id == CSSValueFixed)
&gt; +        if (id == CSSValueStatic
&gt; +            || id == CSSValueRelative
&gt; +            || id == CSSValueAbsolute
&gt; +            || id == CSSValueFixed)

This change seems unnecessary formatting which i&apos;d rather avoid in a patch of this size and complexity

&gt; Source/WebCore/css/CSSParser.cpp:939
&gt; -        if (id == CSSValueAuto ||
&gt; -             id == CSSValueAlways ||
&gt; -             id == CSSValueAvoid ||
&gt; -             id == CSSValueLeft ||
&gt; -             id == CSSValueRight)
&gt; +        if (id == CSSValueAuto
&gt; +            || id == CSSValueAlways
&gt; +            || id == CSSValueAvoid
&gt; +            || id == CSSValueLeft
&gt; +            || id == CSSValueRight)

ditto

&gt; Source/WebCore/css/CSSParser.cpp:952
&gt; -        if (id == CSSValueShow ||
&gt; -             id == CSSValueHide)
&gt; +        if (id == CSSValueShow
&gt; +            || id == CSSValueHide)

ditto

&gt; Source/WebCore/css/CSSParser.cpp:965
&gt; -        if (id == CSSValueNormal ||
&gt; -            id == CSSValuePre ||
&gt; -            id == CSSValuePreWrap ||
&gt; -            id == CSSValuePreLine ||
&gt; -            id == CSSValueNowrap)
&gt; +        if (id == CSSValueNormal
&gt; +            || id == CSSValuePre
&gt; +            || id == CSSValuePreWrap
&gt; +            || id == CSSValuePreLine
&gt; +            || id == CSSValueNowrap)

ditto

&gt;&gt; Source/WebCore/css/CSSParser.cpp:1424
&gt;&gt; -     case CSSPropertyCounterReset:        // [ &lt;identifier&gt; &lt;integer&gt;? ]+ | none | inherit
&gt;&gt; +    case CSSPropertyCounterReset:        // [ &lt;identifier&gt; &lt;integer&gt;? ]+ | none | inherit
&gt; 
&gt; One space before end of line comments  [whitespace/comments] [5]

ditto

&gt; Source/WebCore/css/CSSParser.cpp:2025
&gt; -             validPrimitive = true;
&gt; +            validPrimitive = true;

ditto

&gt; Source/WebCore/css/CSSParser.cpp:2894
&gt; -       return cssValuePool()-&gt;createIdentifierValue(id);
&gt; +        return cssValuePool()-&gt;createIdentifierValue(id);

ditto

&gt; Source/WebCore/css/CSSParser.cpp:5186
&gt; -                              // it is a color, but a color isn&apos;t allowed at this point.
&gt; +                          // it is a color, but a color isn&apos;t allowed at this point.

ditto

&gt; Source/WebCore/css/CSSParser.cpp:5474
&gt; -     return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound;
&gt; +    return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound;

ditto

&gt; Source/WebCore/css/CSSParser.cpp:5559
&gt; -             m_left = m_cssValuePool-&gt;createValue(m_right-&gt;getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_right-&gt;primitiveType());
&gt; +            m_left = m_cssValuePool-&gt;createValue(m_right-&gt;getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_right-&gt;primitiveType());

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531360</commentid>
    <comment_count>44</comment_count>
      <attachid>121239</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-01-06 13:50:17 -0800</bug_when>
    <thetext>Comment on attachment 121239
release patch

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

&gt; Source/WebCore/css/CSSParser.cpp:7494
&gt; +        if (UNLIKELY(*data &lt; 14 &amp;&amp; (!*data || *data == 10 || (*data | 0x1) == 13))) {
&gt; +            // String parsing is failed for character 0, 10, 12 or 13.
&gt; +            return 0;
&gt; +        }

yucky constants -- could you use &apos;\n&apos; etc? e.g. *data &lt;= &apos;\r&apos; (i think?), etc

&gt; Source/WebCore/css/CSSParser.cpp:7561
&gt; +        ASSERT(*m_data &gt;= 14 || (*m_data &lt;= 9 &amp;&amp; *m_data) || *m_data == 11);

more nasty constants</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533797</commentid>
    <comment_count>45</comment_count>
      <attachid>122006</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-11 04:47:45 -0800</bug_when>
    <thetext>Created attachment 122006
next patch

Style changes are moved to other patches and they are landed. Constants are fixed.

I think it is ready for the next review round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533799</commentid>
    <comment_count>46</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-11 04:50:39 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/css/CSSParser.cpp:263
&gt; &gt; -    int length = string.length() + strlen(prefix) + strlen(suffix) + 2;
&gt; &gt; +    int length = string.length() + strlen(prefix) + strlen(suffix) + 1;
&gt; 
&gt; Why have we dropped to only a single extra null terminator?  I recall (though haven&apos;t got that far in the patch) that we rely on two nulls at the end of the string

The double zero terminator is only required by Flex. The attached code does not depend on the double terminator (thanks to C short circuit evaluation model).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533803</commentid>
    <comment_count>47</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-11 05:05:22 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; The reason of using cycle counters is based on that observation that the tokenizer called thousands of times, but a single run itself takes little time. Thus statistic based measurements are useless in our case.

This is not true. Sampling profiler works just fine in cases like this. If you are not seeing progression in something like Instruments or Shark then you are very likely not improving anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537033</commentid>
    <comment_count>48</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-17 05:15:45 -0800</bug_when>
    <thetext>&gt; This is not true. Sampling profiler works just fine in cases like this. If you are not seeing progression in something like Instruments or Shark then you are very likely not improving anything.

I made some profiling on arm. I collected all CSS lexing contributor functions of &quot;opreport -l libQtWebKit.so.4&quot;

Was:
505       1.7080  WebCore::CSSParser::lex()
131       0.4431  WebCore::CSSParser::text(int*)
54        0.1826  WebCore::CSSParser::lex(void*)

Sum: ~700 sample

New:
190       0.6663  WebCore::CSSParser::lex(void*)
12        0.0421  WebCore::CSSParser::detectAtToken(int, bool)
6         0.0210  WebCore::CSSParser::detectNumberToken(unsigned short*, int)
6         0.0210  WebCore::CSSParser::detectNumberToken(unsigned short*, int)
6         0.0210  WebCore::CSSParser::parseIdentifier(unsigned short*&amp;)
6         0.0210  WebCore::CSSParser::parseURI(unsigned short*&amp;, unsigned short*&amp;)
1         0.0035  WebCore::CSSParser::detectFunctionToken(int)

Sum: ~240 sample

So you are right, you can see that with any profiling tool.

Oliver could you review the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539040</commentid>
    <comment_count>49</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-19 14:30:27 -0800</bug_when>
    <thetext>Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540736</commentid>
    <comment_count>50</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-23 12:13:13 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; Any thoughts?

There is quite a silence here. Can I interpret that as the patch is ready and no more changes are needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540762</commentid>
    <comment_count>51</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-01-23 12:57:18 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; Any thoughts?
&gt; 
&gt; There is quite a silence here. Can I interpret that as the patch is ready and no more changes are needed?

Erk, sorry, i&apos;ve had plague for the last few days, i&apos;ll have a quick look through again, but given i&apos;ve done the last few rounds of review i&apos;d like at least one other set of eyes to go over it as well -- maybe antti?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540776</commentid>
    <comment_count>52</comment_count>
      <attachid>122006</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-01-23 13:09:11 -0800</bug_when>
    <thetext>Comment on attachment 122006
next patch

Okay I&apos;m convinced this patch is sound, and would give it an r+, I&apos;d like someone else to go through just to double check as I think i&apos;ve been the only reviewer for the last few revs.  Antti art thou up for it?  I&apos;ll r+ tomorrow if no one objects (anyone knowing the area can r+ if they feel confident in it as well, in the knowledge that i think the patch is sane).  Would be nice to know what the raw perf improvement is if you throw a giant pile of css at this though.  eg. collect a few hundred meg of css files, concatenate them, and see what overall parsing time becomes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540844</commentid>
    <comment_count>53</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-23 14:34:59 -0800</bug_when>
    <thetext>Sure, I&apos;ll check it out tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541176</commentid>
    <comment_count>54</comment_count>
      <attachid>123705</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-24 01:21:45 -0800</bug_when>
    <thetext>Created attachment 123705
patch update

The previous patch was quite old so I have updated to the latest revision and tested it on Qt. I also made a better ChangeLog.

No other changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541178</commentid>
    <comment_count>55</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-24 01:22:35 -0800</bug_when>
    <thetext>Hey Oliver, thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541292</commentid>
    <comment_count>56</comment_count>
      <attachid>123705</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-24 06:42:26 -0800</bug_when>
    <thetext>Comment on attachment 123705
patch update

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

Looks good to me. It would have been nice to see a performance test that shows the improvement (CSS parser is currently big enough CPU user that it should be very possible to construct a synthetic test that shows the progression). Setting to r+ based on Oliver&apos;s comment.

&gt; Source/WebCore/css/CSSParser.cpp:7953
&gt; +        if (hasEscape)
&gt; +            return;
&gt; +
&gt; +        switch (length) {
&gt; +        case 12:
&gt; +            if (isCaselessEqual(name + 2, &quot;ottom-left&quot;))
&gt; +                m_token = BOTTOMLEFT_SYM;
&gt; +            return;
&gt; +
&gt; +        case 13:

I would prefer less empty lines, here and other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541593</commentid>
    <comment_count>57</comment_count>
      <attachid>123705</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-24 13:04:10 -0800</bug_when>
    <thetext>Comment on attachment 123705
patch update

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

&gt; Source/WebCore/css/CSSParser.cpp:181
&gt; +static inline UChar lowercaseCharacter(UChar chr)

&quot;chr&quot;? Please don&apos;t abbreviate like this.

I suggest putting this in ASCIICType.h as toASCIILowerUnchecked().

&gt; Source/WebCore/css/CSSParser.cpp:190
&gt; +static inline bool isCaselessEqual(UChar cssCharacter, UChar character)

Ditto.

&gt; Source/WebCore/css/CSSParser.cpp:7489
&gt; +static inline bool isCSSLetter(UChar chr)

Please don&apos;t abbreviate &quot;character&quot;.

&gt; Source/WebCore/css/CSSParser.cpp:7491
&gt; +    return chr &gt;= 128 || typesOfASCIICharacters[chr] &lt;= CharacterDash;

Even U+FFFD and unassigned code points are CSS letters?

&gt; Source/WebCore/css/CSSParser.cpp:7494
&gt; +static inline bool isCSSEscape(UChar chr)

Repeated several more times in the patch.

&gt; Source/WebCore/css/CSSParser.cpp:7510
&gt; +static inline bool isCaselessEqual(UChar* cssString, const char* constantString)

What&apos;s important to say in function name is that it&apos;s ASCII case insensitive comparison (which is different from Unicode one even for ASCII characters!), and that this depends on CSS syntax.

Otherwise, call sites get really confusing.

&gt; Source/WebCore/css/CSSParser.cpp:7527
&gt; +static UChar* checkEscape(UChar* data)

A check function can return false or true. What does this function do?

&gt; Source/WebCore/css/CSSParser.cpp:7543
&gt; +        if (isHTMLSpace(*data))

Are HTML and CSS whitespace definitions the same?

&gt; Source/WebCore/css/CSSParser.cpp:7550
&gt; +static inline UChar* skipWhiteSpaces(UChar* data)

Should be named &quot;skipWhiteSpace&quot; (there is even a CSS keyword skip-white-space, not to mention that this is how the function is named elsewhere in WebCore).

&gt; Source/WebCore/css/CSSParser.cpp:7552
&gt; +    while (*data &lt;= &apos; &apos; &amp;&amp; (typesOfASCIICharacters[*data] == CharacterWhiteSpace))

This is a yet another definition of whitespace, with all lower ASCII code being treated as such. If this is right, please explain in a comment.

&gt; Source/WebCore/css/CSSParser.cpp:7565
&gt; +inline UChar* CSSParser::checkString(UChar* data, UChar quote)

Please use a name that implies returning a UChar*, not a boolean.

&gt; Source/WebCore/css/CSSParser.cpp:7619
&gt; +inline bool CSSParser::parseIdentifier(UChar*&amp; result)

Some added &quot;parse&quot; functions are void, but this returns a boolean. This is super confusing. Is there a way to have uniform interface for these? Or names that explain the difference?

&gt; Source/WebCore/css/CSSParser.cpp:7775
&gt; +inline void CSSParser::detectFunctionToken(int length)

Does this actually detect the token? Looks like this function is called after a function has been detected, not to detect it.

&gt; Source/WebCore/css/CSSParser.h:383
&gt; +    OwnArrayPtr&lt;UChar&gt; m_dataStart;
&gt; +    UChar* m_data;

What is m_data, is it actually m_nextCharacter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542212</commentid>
    <comment_count>58</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-25 05:59:25 -0800</bug_when>
    <thetext>AP ythanks for the in-depth review. I am agree all your name change suggestions.

&gt; &gt; Source/WebCore/css/CSSParser.cpp:7491
&gt; &gt; +    return chr &gt;= 128 || typesOfASCIICharacters[chr] &lt;= CharacterDash;
&gt; 
&gt; Even U+FFFD and unassigned code points are CSS letters?

No they are not letters. Characters &gt; 127 are called non-ASCII in CSS, and they all treated as part of literals regardless what they are.

&gt; &gt; Source/WebCore/css/CSSParser.cpp:7543
&gt; &gt; +        if (isHTMLSpace(*data))
&gt; 
&gt; Are HTML and CSS whitespace definitions the same?

Yes. It is used several other places in the CSS parser.

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:7552
&gt; &gt; +    while (*data &lt;= &apos; &apos; &amp;&amp; (typesOfASCIICharacters[*data] == CharacterWhiteSpace))
&gt; 
&gt; This is a yet another definition of whitespace, with all lower ASCII code being treated as such. If this is right, please explain in a comment.

I changed it to isHTMLSpace.

&gt; &gt; Source/WebCore/css/CSSParser.cpp:7619
&gt; &gt; +inline bool CSSParser::parseIdentifier(UChar*&amp; result)
&gt; 
&gt; Some added &quot;parse&quot; functions are void, but this returns a boolean. This is super confusing. Is there a way to have uniform interface for these? Or names that explain the difference?

The return value is moved to bool&amp; argument

&gt; What is m_data, is it actually m_nextCharacter?

It is the currentCharacter more precisely. I renamed to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542213</commentid>
    <comment_count>59</comment_count>
      <attachid>123928</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-25 06:01:18 -0800</bug_when>
    <thetext>Created attachment 123928
patch with renamings

AP, is this patch ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542215</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-25 06:03:16 -0800</bug_when>
    <thetext>Attachment 123928 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/JavaScriptCore/Change...&quot; exit_code: 1

Source/WebCore/css/CSSParser.cpp:7510:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WebCore/css/CSSParser.cpp:7550:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Total errors found: 2 in 6 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>542242</commentid>
    <comment_count>61</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-25 07:13:59 -0800</bug_when>
    <thetext>(In reply to comment #57)
&gt; &gt; Source/WebCore/css/CSSParser.cpp:181
&gt; &gt; +static inline UChar lowercaseCharacter(UChar chr)
&gt; 
&gt; &quot;chr&quot;? Please don&apos;t abbreviate like this.

I disagree with this comment. In type of code where a few variable names are repeated a lot (like parsers) using shorter names improves readability. We use &apos;i&apos; instead of &apos;index&apos; as the standard loop variable name for the same reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544643</commentid>
    <comment_count>62</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-28 04:55:21 -0800</bug_when>
    <thetext>Alexey, do you have any more comments to the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544748</commentid>
    <comment_count>63</comment_count>
      <attachid>123928</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-01-29 11:17:03 -0800</bug_when>
    <thetext>Comment on attachment 123928
patch with renamings

Fix the style bot complaints and r=me, and apparently antti (from the prior one), and given the absence of response from ap i&apos;ll assume he&apos;s also okay with the current names :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544906</commentid>
    <comment_count>64</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-30 00:03:03 -0800</bug_when>
    <thetext>Thank you for the reviews!

Fixed the style issues and landed as http://trac.webkit.org/changeset/106217</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544931</commentid>
    <comment_count>65</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-01-30 01:22:06 -0800</bug_when>
    <thetext>Are there any pages where we think this is a measurable win, that we could use for perf testing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544932</commentid>
    <comment_count>66</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-30 01:25:00 -0800</bug_when>
    <thetext>Reopen, because it made css2.1/20110323/eof-002.htm flakey. Sometimes pass, sometimes crash, sometimes fail ... You can easily reproduce the bug with the following command:

$ Tools/Scripts/run-webkit-tests css2.1/20110323/eof-002.htm --iterations 100 --run-singly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544979</commentid>
    <comment_count>67</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-30 03:20:10 -0800</bug_when>
    <thetext>(In reply to comment #66)
&gt; Reopen, because it made css2.1/20110323/eof-002.htm flakey. Sometimes pass, sometimes crash, sometimes fail ... You can easily reproduce the bug with the following command:

Thanks Csaba, valgrind also got it. Buildfix landed as http://trac.webkit.org/changeset/106227</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545030</commentid>
    <comment_count>68</comment_count>
      <attachid>124528</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-30 05:12:06 -0800</bug_when>
    <thetext>Created attachment 124528
parsing test

The patch contains the &lt;style&gt; rules from the most popular 25 web-sites (~270k). The test parses it 100 times, and display the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545032</commentid>
    <comment_count>69</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-01-30 05:13:23 -0800</bug_when>
    <thetext>&gt; The patch contains the &lt;style&gt; rules from the most popular 25 web-sites (~270k). The test parses it 100 times, and display the time.

Oh this is not a patch just a simple page in a zipped file.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111009</attachid>
            <date>2011-10-14 06:36:37 -0700</date>
            <delta_ts>2011-10-17 03:56:46 -0700</delta_ts>
            <desc>draft patch</desc>
            <filename>0001-css-tokenizer.patch</filename>
            <type>text/plain</type>
            <size>53659</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAxMTJlODgyMzk5YzBmNzQ3ZmU1NWU5YWM0MjFjY2FlNmI2N2M2NDNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogRnJpLCAxNCBPY3QgMjAxMSAwNToyMTo0MiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGNz
cy10b2tlbml6ZXIKCi0tLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgfCAxNDI2
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmggICB8ICAgNDIgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTIwOCBpbnNlcnRp
b25zKCspLCAyNjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBk
ZTk1NzE4Li41OTgyNDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTg3LDggKzE4
NywxMCBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgLCBt
X3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQogICAgICwgbV9ydWxlUmFuZ2VNYXAo
MCkKICAgICAsIG1fY3VycmVudFJ1bGVEYXRhKDApCisgICAgLCBtX3BhcnNpbmdNb2RlKE5vcm1h
bE1vZGUpCisgICAgLCBtX2RhdGFTdGFydCgwKQogICAgICwgbV9kYXRhKDApCi0gICAgLCB5eV9z
dGFydCgxKQorICAgICwgbV90b2tlbigwKQogICAgICwgbV9saW5lTnVtYmVyKDApCiAgICAgLCBt
X2xhc3RTZWxlY3RvckxpbmVOdW1iZXIoMCkKICAgICAsIG1fYWxsb3dJbXBvcnRSdWxlcyh0cnVl
KQpAQCAtMjA3LDcgKzIwOSw3IEBAIENTU1BhcnNlcjo6fkNTU1BhcnNlcigpCiAKICAgICBkZWxl
dGUgbV92YWx1ZUxpc3Q7CiAKLSAgICBmYXN0RnJlZShtX2RhdGEpOworICAgIGZhc3RGcmVlKG1f
ZGF0YVN0YXJ0KTsKIAogICAgIGZhc3REZWxldGVBbGxWYWx1ZXMobV9mbG9hdGluZ1NlbGVjdG9y
cyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdTZWxlY3RvclZlY3RvcnMpOwpAQCAt
MjM2LDI2ICsyMzgsMjYgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIq
IHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIKIHsKICAgICBpbnQgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aCgpICsgc3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3VmZml4KSAr
IDI7CiAKLSAgICBmYXN0RnJlZShtX2RhdGEpOwotICAgIG1fZGF0YSA9IHN0YXRpY19jYXN0PFVD
aGFyKj4oZmFzdE1hbGxvYyhsZW5ndGggKiBzaXplb2YoVUNoYXIpKSk7CisgICAgZmFzdEZyZWUo
bV9kYXRhU3RhcnQpOworICAgIG1fZGF0YVN0YXJ0ID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0
TWFsbG9jKGxlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RybGVuKHByZWZpeCk7IGkrKykKLSAgICAgICAgbV9kYXRhW2ldID0gcHJlZml4W2ld
OworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHByZWZpeFtpXTsKIAotICAgIG1lbWNweShtX2Rh
dGEgKyBzdHJsZW4ocHJlZml4KSwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KG1fZGF0YVN0YXJ0ICsgc3RybGVuKHByZWZp
eCksIHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikp
OwogCiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdHJsZW4ocHJlZml4KSArIHN0cmluZy5sZW5ndGgo
KTsKICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN0cmxlbihzdWZmaXgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0gICAgICAgIG1fZGF0YVtpXSA9IHN1
ZmZpeFtpIC0gc3RhcnRdOworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHN1ZmZpeFtpIC0gc3Rh
cnRdOwogCi0gICAgbV9kYXRhW2xlbmd0aCAtIDFdID0gMDsKLSAgICBtX2RhdGFbbGVuZ3RoIC0g
Ml0gPSAwOworICAgIG1fZGF0YVN0YXJ0W2xlbmd0aCAtIDFdID0gMDsKKyAgICBtX2RhdGFTdGFy
dFtsZW5ndGggLSAyXSA9IDA7CiAKLSAgICB5eV9ob2xkX2NoYXIgPSAwOwotICAgIHl5bGVuZyA9
IDA7Ci0gICAgeXl0ZXh0ID0geXlfY19idWZfcCA9IG1fZGF0YTsKLSAgICB5eV9ob2xkX2NoYXIg
PSAqeXlfY19idWZfcDsKKyAgICBtX2RhdGEgPSBtX3Rva2VuU3RhcnQgPSBtX2RhdGFTdGFydDsK
ICAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKKyNpZiAwCisvKiBERUJVRyAqLyBwcmludGYoIj09
PT09PT09PT09PT09PT09PT09IHNldHVwUGFyc2VyID09PT09PT09PT09PT09PT09PT09PT1cbiIp
OworI2VuZGlmCiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQq
IHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0TGluZU51bWJlciwgU3R5bGVS
dWxlUmFuZ2VNYXAqIHJ1bGVSYW5nZU1hcCkKQEAgLTY3ODksMjMyICs2NzkxLDExOTEgQEAgc3Rh
dGljIGlubGluZSBpbnQgeXllcnJvcihjb25zdCBjaGFyKikgeyByZXR1cm4gMTsgfQogCiAjaW5j
bHVkZSAiQ1NTR3JhbW1hci5oIgogCi1pbnQgQ1NTUGFyc2VyOjpsZXgodm9pZCogeXlsdmFsV2l0
aG91dFR5cGUpCitlbnVtIENoYXJhY3RlclR5cGUgeworICAgIC8vIFR5cGVzIGZvciB0aGUgbWFp
biBzd2l0Y2guCisKKyAgICAvLyBUaGUgZmlyc3QgNCB0eXBlcyBtdXN0IGJlIGdyb3VwZWQgdG9n
ZXRoZXIsIGFzIHRoZXkKKyAgICAvLyByZXByZXNlbnQgdGhlIGFsbG93ZWQgY2hhcnMgaW4gYW4g
aWRlbnRpZmllci4KKyAgICBDaGFyYWN0ZXJDYXNlbGVzc1UsCisgICAgQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorICAgIENoYXJhY3Rlck51bWJlciwKKyAgICBDaGFyYWN0ZXJEYXNoLAorCisg
ICAgQ2hhcmFjdGVyT3RoZXIsCisgICAgQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKyAgICBDaGFyYWN0
ZXJFbmRNZWRpYVF1ZXJ5LAorICAgIENoYXJhY3RlckVuZE50aENoaWxkLAorICAgIENoYXJhY3Rl
clF1b3RlLAorICAgIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyaywKKyAgICBDaGFyYWN0ZXJIYXNo
bWFyaywKKyAgICBDaGFyYWN0ZXJEb2xsYXIsCisgICAgQ2hhcmFjdGVyQXN0ZXJpc2ssCisgICAg
Q2hhcmFjdGVyUGx1cywKKyAgICBDaGFyYWN0ZXJEb3QsCisgICAgQ2hhcmFjdGVyU2xhc2gsCisg
ICAgQ2hhcmFjdGVyTGVzcywKKyAgICBDaGFyYWN0ZXJBdCwKKyAgICBDaGFyYWN0ZXJCYWNrU2xh
c2gsCisgICAgQ2hhcmFjdGVyWG9yLAorICAgIENoYXJhY3RlclZlcnRpY2FsQmFyLAorICAgIENo
YXJhY3RlclRpbGRlLAorfTsKKworLy8gMTI4IEFTQ0lJIGNvZGVzCitzdGF0aWMgY29uc3QgQ2hh
cmFjdGVyVHlwZSB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWzEyOF0gPSB7CisvKiAgIDAgLSBOdWxs
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDEgLSBTdGFydCBvZiBIZWFk
aW5nICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDIgLSBTdGFydCBvZiBUZXh0ICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgIDMgLSBFbmQgb2YgVGV4dCAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgIDQgLSBFbmQgb2YgVHJhbnNtLiAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgIDUgLSBFbnF1aXJ5ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDYgLSBB
Y2tub3dsZWRnbWVudCAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDcgLSBCZWxsICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDggLSBCYWNrIFNwYWNlICAgICAgICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDkgLSBIb3Jpem9udGFsIFRhYiAgICAgKi8gQ2hhcmFj
dGVyV2hpdGVTcGFjZSwKKy8qICAxMCAtIExpbmUgRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJX
aGl0ZVNwYWNlLAorLyogIDExIC0gVmVydGljYWwgVGFiICAgICAgICovIENoYXJhY3Rlck90aGVy
LAorLyogIDEyIC0gRm9ybSBGZWVkICAgICAgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisv
KiAgMTMgLSBDYXJyaWFnZSBSZXR1cm4gICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAx
NCAtIFNoaWZ0IE91dCAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxNSAtIFNoaWZ0
IEluICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxNiAtIERhdGEgTGluZSBFc2Nh
cGUgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxNyAtIERldmljZSBDb250cm9sIDEgICAqLyBD
aGFyYWN0ZXJPdGhlciwKKy8qICAxOCAtIERldmljZSBDb250cm9sIDIgICAqLyBDaGFyYWN0ZXJP
dGhlciwKKy8qICAxOSAtIERldmljZSBDb250cm9sIDMgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8q
ICAyMCAtIERldmljZSBDb250cm9sIDQgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMSAtIE5l
Z2F0aXZlIEFjay4gICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMiAtIFN5bmNocm9ub3Vz
IElkbGUgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMyAtIEVuZCBvZiBUcmFuc21pdCAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNCAtIENhbmNlbCAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJPdGhlciwKKy8qICAyNSAtIEVuZCBvZiBNZWRpdW0gICAgICAqLyBDaGFyYWN0ZXJPdGhlciwK
Ky8qICAyNiAtIFN1YnN0aXR1dGUgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNyAt
IEVzY2FwZSAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyOCAtIEZpbGUgU2Vw
YXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyOSAtIEdyb3VwIFNlcGFyYXRvciAg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzMCAtIFJlY29yZCBTZXBhcmF0b3IgICAqLyBDaGFy
YWN0ZXJPdGhlciwKKy8qICAzMSAtIFVuaXQgU2VwYXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICAzMiAtIFNwYWNlICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAor
LyogIDMzIC0gISAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyaywK
Ky8qICAzNCAtICIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJRdW90ZSwKKy8qICAzNSAt
ICMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJIYXNobWFyaywKKy8qICAzNiAtICQgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb2xsYXIsCisvKiAgMzcgLSAlICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzggLSAmICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgMzkgLSAnICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
UXVvdGUsCisvKiAgNDAgLSAoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgNDEgLSApICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCisvKiAg
NDIgLSAqICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQXN0ZXJpc2ssCisvKiAgNDMgLSAr
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUGx1cywKKy8qICA0NCAtICwgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA0NSAtIC0gICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJEYXNoLAorLyogIDQ2IC0gLiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ckRvdCwKKy8qICA0NyAtIC8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJTbGFzaCwKKy8q
ICA0OCAtIDAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNDkgLSAx
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDUwIC0gMiAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1MSAtIDMgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTIgLSA0ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyTnVtYmVyLAorLyogIDUzIC0gNSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51
bWJlciwKKy8qICA1NCAtIDYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisv
KiAgNTUgLSA3ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU2IC0g
OCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NyAtIDkgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTggLSA6ICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNTkgLSA7ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyRW5kTWVkaWFRdWVyeSwKKy8qICA2MCAtIDwgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJMZXNzLAorLyogIDYxIC0gPSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVy
LAorLyogIDYyIC0gPiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDYz
IC0gPyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDY0IC0gQCAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlckF0LAorLyogIDY1IC0gQSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2NiAtIEIgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjcgLSBDICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY4IC0gRCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2OSAtIEUgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzAgLSBGICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDcxIC0gRyAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MiAtIEggICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzMgLSBJICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc0IC0gSiAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NSAtIEsgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzYgLSBMICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc3IC0gTSAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3OCAtIE4gICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzkgLSBPICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgwIC0gUCAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MSAtIFEg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODIgLSBS
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgzIC0g
UyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NCAt
IFQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODUg
LSBVICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQ2FzZWxlc3NVLAorLyogIDg2IC0gViAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NyAtIFcg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODggLSBY
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg5IC0g
WSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5MCAt
IFogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTEg
LSBbICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgOTIgLSBcICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQmFja1NsYXNoLAorLyogIDkzIC0gXSAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDk0IC0gXiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlclhvciwKKy8qICA5NSAtIF8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAgOTYgLSBgICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgOTcgLSBhICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogIDk4IC0gYiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qICA5OSAtIGMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAxMDAgLSBkICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogMTAxIC0gZSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qIDEwMiAtIGYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAxMDMgLSBnICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogMTA0IC0gaCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDEwNSAtIGkgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMDYgLSBqICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogMTA3IC0gayAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qIDEwOCAtIGwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDkgLSBtICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogMTEwIC0gbiAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExMSAtIG8gICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTIgLSBwICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTEzIC0gcSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExNCAtIHIgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTUgLSBzICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE2IC0gdCAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExNyAtIHUgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJDYXNlbGVzc1UsCisvKiAxMTggLSB2ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE5IC0gdyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEyMCAtIHggICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMjEgLSB5ICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTIyIC0geiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEyMyAtIHsgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJFbmRNZWRpYVF1ZXJ5LAorLyogMTI0IC0gfCAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlclZlcnRpY2FsQmFyLAorLyogMTI1IC0gfSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogMTI2IC0gfiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclRp
bGRlLAorLyogMTI3IC0gRGVsZXRlICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorfTsK
KworLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBDU1MgdG9rZW5pemVyLgorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNDU1NMZXR0ZXIoVUNoYXIgY2hyKQogewotICAgIFlZU1RZUEUqIHl5bHZh
bCA9IHN0YXRpY19jYXN0PFlZU1RZUEUqPih5eWx2YWxXaXRob3V0VHlwZSk7Ci0gICAgaW50IGxl
bmd0aDsKKyAgICByZXR1cm4gY2hyID49IDEyOCB8fCB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzW2No
cl0gPD0gQ2hhcmFjdGVyRGFzaDsKK30KIAotICAgIGxleCgpOworc3RhdGljIGlubGluZSBib29s
IGlzQ1NTRXNjYXBlKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49ICcgJyAmJiBjaHIg
IT0gMTI3OworfQogCi0gICAgVUNoYXIqIHQgPSB0ZXh0KCZsZW5ndGgpOworc3RhdGljIGlubGlu
ZSBib29sIGlzVVJJTGV0dGVyKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gKGNociA+PSAnKicg
JiYgY2hyICE9IDEyNykgfHwgKGNociA+PSAnIycgJiYgY2hyIDw9ICcmJykgfHwgY2hyID09ICch
JzsKK30KIAotICAgIHN3aXRjaCAodG9rZW4oKSkgewotICAgIGNhc2UgV0hJVEVTUEFDRToKLSAg
ICBjYXNlIFNHTUxfQ0Q6Ci0gICAgY2FzZSBJTkNMVURFUzoKLSAgICBjYXNlIERBU0hNQVRDSDoK
LSAgICAgICAgYnJlYWs7CitzdGF0aWMgaW5saW5lIFVDaGFyIGxvd2VyY2FzZUNoYXJhY3RlcihV
Q2hhciBjaHIpCit7CisgICAgcmV0dXJuIGNociB8IDB4MjA7Cit9CiAKLSAgICBjYXNlIFVSSToK
LSAgICBjYXNlIFNUUklORzoKLSAgICBjYXNlIElERU5UOgotICAgIGNhc2UgTlRIOgotICAgIGNh
c2UgSEVYOgotICAgIGNhc2UgSURTRUw6Ci0gICAgY2FzZSBESU1FTjoKLSAgICBjYXNlIFVOSUNP
REVSQU5HRToKLSAgICBjYXNlIEZVTkNUSU9OOgotICAgIGNhc2UgQU5ZRlVOQ1RJT046Ci0gICAg
Y2FzZSBOT1RGVU5DVElPTjoKLSAgICBjYXNlIENBTENGVU5DVElPTjoKLSAgICBjYXNlIE1JTkZV
TkNUSU9OOgotICAgIGNhc2UgTUFYRlVOQ1RJT046Ci0gICAgICAgIHl5bHZhbC0+c3RyaW5nLmNo
YXJhY3RlcnMgPSB0OwotICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBsZW5ndGg7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJTVBPUlRfU1lNOgotICAgIGNhc2UgUEFHRV9TWU06
Ci0gICAgY2FzZSBNRURJQV9TWU06Ci0gICAgY2FzZSBGT05UX0ZBQ0VfU1lNOgotICAgIGNhc2Ug
Q0hBUlNFVF9TWU06Ci0gICAgY2FzZSBOQU1FU1BBQ0VfU1lNOgotICAgIGNhc2UgV0VCS0lUX0tF
WUZSQU1FU19TWU06Ci0KLSAgICBjYXNlIElNUE9SVEFOVF9TWU06Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBRRU1TOgotICAgICAgICBsZW5ndGgtLTsKLSAgICBjYXNlIEdSQURTOgotICAg
IGNhc2UgVFVSTlM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNhc2UgREVHUzoKLSAgICBjYXNl
IFJBRFM6Ci0gICAgY2FzZSBLSEVSVFo6Ci0gICAgY2FzZSBSRU1TOgotICAgICAgICBsZW5ndGgt
LTsKLSAgICBjYXNlIE1TRUNTOgotICAgIGNhc2UgSEVSVFo6Ci0gICAgY2FzZSBFTVM6Ci0gICAg
Y2FzZSBFWFM6Ci0gICAgY2FzZSBQWFM6Ci0gICAgY2FzZSBDTVM6Ci0gICAgY2FzZSBNTVM6Ci0g
ICAgY2FzZSBJTlM6Ci0gICAgY2FzZSBQVFM6Ci0gICAgY2FzZSBQQ1M6Ci0gICAgICAgIGxlbmd0
aC0tOwotICAgIGNhc2UgU0VDUzoKLSAgICBjYXNlIFBFUkNFTlRBR0U6Ci0gICAgICAgIGxlbmd0
aC0tOwotICAgIGNhc2UgRkxPQVRUT0tFTjoKLSAgICBjYXNlIElOVEVHRVI6Ci0gICAgICAgIHl5
bHZhbC0+bnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKHQsIGxlbmd0aCk7Ci0gICAgICAgIGJy
ZWFrOworc3RhdGljIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKFVDaGFy
KiBkYXRhKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoZGF0YVswXSkgfHwgZGF0YVswXSA9
PSAnXycgfHwgZGF0YVswXSA+PSAxMjggfHwKKyAgICAgICAgKGRhdGFbMF0gPT0gJ1xcJyAmJiBp
c0NTU0VzY2FwZShkYXRhWzFdKSk7Cit9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
K3N0YXRpYyBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciBjc3NDaGFyYWN0ZXIsIFVDaGFyIGNo
YXJhY3RlcikKK3sKKyAgICBBU1NFUlQoY2hhcmFjdGVyID49ICdhJyAmJiBjaGFyYWN0ZXIgPD0g
J3onKTsKKyAgICByZXR1cm4gTElLRUxZKGxvd2VyY2FzZUNoYXJhY3Rlcihjc3NDaGFyYWN0ZXIp
ID09IGNoYXJhY3Rlcik7Cit9CisKK3N0YXRpYyBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciog
Y3NzU3RyaW5nLCBjb25zdCBjaGFyKiBjb25zdGFudFN0cmluZykKK3sKKyAgICAvLyBDb21wYXJl
IGFuIFVDaGFyIG1lbW9yeSBkYXRhIHdpdGggYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLgorICAg
IGRvIHsKKyAgICAgICAgLy8gVGhlIGlucHV0IG11c3QgYmUgcGFydCBvZiBhbiBpZGVudGlmaWVy
IGlmIGNvbnN0YW50Q2hhciBvciBjb25zdFN0cmluZworICAgICAgICAvLyBjb250YWlucyAnLScu
IE90aGVyd2lzZSAnXHInIHwgMHgyMCB3b3VsZCBiZSBlcXVhbCB0byAnLScuCisgICAgICAgIEFT
U0VSVCgoKmNvbnN0YW50U3RyaW5nID49ICdhJyAmJiAqY29uc3RhbnRTdHJpbmcgPD0gJ3onKSB8
fCAqY29uc3RhbnRTdHJpbmcgPT0gJy0nKTsKKyAgICAgICAgQVNTRVJUKCpjb25zdGFudFN0cmlu
ZyAhPSAnLScgfHwgaXNDU1NMZXR0ZXIoKmNzc1N0cmluZykpOworICAgICAgICBpZiAoKCgqY3Nz
U3RyaW5nKyspIHwgMHgyMCkgIT0gKCpjb25zdGFudFN0cmluZysrKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9IHdoaWxlICgqY29uc3RhbnRTdHJpbmcpOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgVUNoYXIqIGNoZWNrRXNjYXBlKFVDaGFyKiBkYXRhKQoreworICAg
IEFTU0VSVCgqZGF0YSA9PSAnXFwnKTsKKworICAgICsrZGF0YTsKKyAgICBpZiAoIWlzQ1NTRXNj
YXBlKCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0
KCpkYXRhKSkgeworICAgICAgICBpbnQgbGVuZ3RoID0gNjsKKworICAgICAgICBkbyB7CisgICAg
ICAgICAgICArK2RhdGE7CisgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqZGF0YSkg
JiYgLS1sZW5ndGgpOworCisgICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBlc2Nh
cGUgc2VxdWVuY2UuCisgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqZGF0YSkpCisgICAgICAgICAg
ICArK2RhdGE7CisgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KKyAgICByZXR1cm4gZGF0YSAr
IDE7Cit9CiAKLSAgICByZXR1cm4gdG9rZW4oKTsKK3N0YXRpYyBpbmxpbmUgVUNoYXIqIHNraXBX
aGl0ZVNwYWNlcyhVQ2hhciogZGF0YSkKK3sKKyAgICB3aGlsZSAoVU5MSUtFTFkoKmRhdGEgPD0g
JyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWypkYXRhXSA9PSBDaGFyYWN0ZXJXaGl0ZVNw
YWNlKSkpCisgICAgICAgICsrZGF0YTsKKyAgICByZXR1cm4gZGF0YTsKIH0KIAotdm9pZCBDU1NQ
YXJzZXI6OnJlY2hlY2tBdEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAg
ICBTdHJpbmcgcnVsZU5hbWUoc3RyLCBsZW4pOwotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShy
dWxlTmFtZSwgIkBpbXBvcnQiKSkKLSAgICAgICAgeXlUb2sgPSBJTVBPUlRfU1lNOwotICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQHBhZ2UiKSkKLSAgICAgICAgeXlU
b2sgPSBQQUdFX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwg
IkBtZWRpYSIpKQotICAgICAgICB5eVRvayA9IE1FRElBX1NZTTsKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBmb250LWZhY2UiKSkKLSAgICAgICAgeXlUb2sgPSBG
T05UX0ZBQ0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAi
QGNoYXJzZXQiKSkKLSAgICAgICAgeXlUb2sgPSBDSEFSU0VUX1NZTTsKLSAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBuYW1lc3BhY2UiKSkKLSAgICAgICAgeXlUb2sg
PSBOQU1FU1BBQ0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1l
LCAiQC13ZWJraXQta2V5ZnJhbWVzIikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX0tFWUZSQU1F
U19TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJALXdlYmtp
dC1tZWRpYXF1ZXJ5IikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX01FRElBUVVFUllfU1lNOwot
fQotCi1VQ2hhciogQ1NTUGFyc2VyOjp0ZXh0KGludCAqbGVuZ3RoKQotewotICAgIFVDaGFyKiBz
dGFydCA9IHl5dGV4dDsKLSAgICBpbnQgbCA9IHl5bGVuZzsKLSAgICBzd2l0Y2ggKHl5VG9rKSB7
Ci0gICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgIGwtLTsKLSAgICAgICAgLyogbm9icmVhayAqLwot
ICAgIGNhc2UgSEVYOgotICAgIGNhc2UgSURTRUw6Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAg
IGwtLTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUkk6Ci0gICAgICAgIC8vICJ1cmwoInt3
fXtzdHJpbmd9e3d9IikiCi0gICAgICAgIC8vICJ1cmwoInt3fXt1cmx9e3d9IikiCi0gICAgICAg
IC8vIHN0cmlwICJ1cmwoIiBhbmQgIikiCi0gICAgICAgIHN0YXJ0ICs9IDQ7Ci0gICAgICAgIGwg
LT0gNTsKLSAgICAgICAgLy8gc3RyaXAge3d9Ci0gICAgICAgIHdoaWxlIChsICYmIGlzSFRNTFNw
YWNlKCpzdGFydCkpIHsKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICAgICAtLWw7Ci0g
ICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGwgJiYgaXNIVE1MU3BhY2Uoc3RhcnRbbCAtIDFdKSkK
LSAgICAgICAgICAgIC0tbDsKLSAgICAgICAgaWYgKGwgJiYgKCpzdGFydCA9PSAnIicgfHwgKnN0
YXJ0ID09ICdcJycpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobCA+PSAyICYmIHN0YXJ0W2wgLSAx
XSA9PSAqc3RhcnQpOwotICAgICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAgIGwgLT0gMjsK
Ky8vIE1haW4gQ1NTIHRva2VuaXplciBmdW5jdGlvbnMuCisKK2lubGluZSBib29sIENTU1BhcnNl
cjo6aXNJZGVudGlmaWVyU3RhcnQoKQoreworICAgIC8vIENoZWNrIHdoZXRoZXIgYW4gaWRlbnRp
ZmllciBpcyBzdGFydGVkLgorICAgIHJldHVybiBpc0lkZW50aWZpZXJTdGFydEFmdGVyRGFzaCgo
Km1fZGF0YSAhPSAnLScpID8gbV9kYXRhIDogbV9kYXRhICsgMSk7Cit9CisKK2lubGluZSBVQ2hh
ciogQ1NTUGFyc2VyOjpjaGVja1N0cmluZyhVQ2hhciogZGF0YSwgVUNoYXIgcXVvdGUpCit7Cisg
ICAgLy8gU2luY2Ugd2UgY2Fubm90IHJldmVydCBlc2NhcGUgc2VxdWVuY2VzLCBzdHJpbmdzCisg
ICAgLy8gbXVzdCBiZSB2YWxpZGF0ZWQgYmVmb3JlIHBhcnNpbmcuCisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCpkYXRhID09IHF1b3RlKSkgeworICAgICAgICAgICAg
Ly8gU3RyaW5nIHBhcnNpbmcgaXMgc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgIHJldHVybiBkYXRh
ICsgMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoVU5MSUtFTFkoKCpkYXRhIDwgJyAnICYmICpk
YXRhICE9ICdcdCcpIHx8ICpkYXRhID09IDEyNykpIHsKKyAgICAgICAgICAgICAvLyBTdHJpbmcg
cGFyc2luZyBpcyBmYWlsZWQuCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoTElLRUxZKGRhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICArK2RhdGE7
CisgICAgICAgIGVsc2UgaWYgKGRhdGFbMV0gPT0gJ1xuJyB8fCBkYXRhWzFdID09ICdcZicpCisg
ICAgICAgICAgICBkYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKGRhdGFbMV0gPT0gJ1xyJykK
KyAgICAgICAgICAgIGRhdGEgKz0gZGF0YVsyXSA9PSAnXG4nID8gMyA6IDI7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgZGF0YSA9IGNoZWNrRXNjYXBlKGRhdGEpOworICAgICAgICAgICAg
aWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwogICAgIH0KK30KIAotICAgIC8v
IHByb2Nlc3MgZXNjYXBlcwotICAgIFVDaGFyKiBvdXQgPSBzdGFydDsKLSAgICBVQ2hhciogZXNj
YXBlID0gMDsKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZUVzY2FwZShVQ2hhciomIHJlc3VsdCkKK3sK
KyAgICBBU1NFUlQoKm1fZGF0YSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKG1fZGF0YVsxXSkpOwog
Ci0gICAgYm9vbCBzYXdFc2NhcGUgPSBmYWxzZTsKKyAgICArK21fZGF0YTsKKyAgICBpZiAoaXNB
U0NJSUhleERpZ2l0KCptX2RhdGEpKSB7CisgICAgICAgIHVuc2lnbmVkIHVuaWNvZGUgPSAwOwor
ICAgICAgICBpbnQgbGVuZ3RoID0gNjsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgIFVDaGFyKiBjdXJyZW50ID0gc3RhcnQgKyBpOwotICAgICAgICBpZiAoZXNj
YXBlID09IGN1cnJlbnQgLSAxKSB7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpj
dXJyZW50KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh5eVRv
ayA9PSBTVFJJTkcgJiYKLSAgICAgICAgICAgICAgICAgKCpjdXJyZW50ID09ICdcbicgfHwgKmN1
cnJlbnQgPT0gJ1xyJyB8fCAqY3VycmVudCA9PSAnXGYnKSkgewotICAgICAgICAgICAgICAgIC8v
ICMjIyBoYW5kbGUgXHJcbiBjYXNlCi0gICAgICAgICAgICAgICAgaWYgKCpjdXJyZW50ICE9ICdc
cicpCi0gICAgICAgICAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpbiBhbGwgb3RoZXIgY2FzZXMg
Y29weSB0aGUgY2hhciB0byBvdXRwdXQKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAg
Km91dCsrID0gKmN1cnJlbnQ7Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHVuaWNvZGUgPSAodW5pY29kZSA8
PCA0KSArIHRvQVNDSUlIZXhWYWx1ZSgqbV9kYXRhKyspOworICAgICAgICB9IHdoaWxlICgtLWxl
bmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQoKm1fZGF0YSkpOworCisgICAgICAgIC8vIENoYXJhY3Rl
cnMgYWJvdmUgMHhmZmZmIGFyZSBub3QgaGFuZGxlZC4KKyAgICAgICAgaWYgKHVuaWNvZGUgPiAw
eGZmZmYpCisgICAgICAgICAgICB1bmljb2RlID0gMHhmZmZkOworCisgICAgICAgIC8vIE9wdGlv
bmFsIHNwYWNlIGFmdGVyIHRoZSBlc2NhcGUgc2VxdWVuY2UuCisgICAgICAgIGlmIChpc0hUTUxT
cGFjZSgqbV9kYXRhKSkKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAqcmVzdWx0ID0g
dW5pY29kZTsKKyAgICB9IGVsc2UKKyAgICAgICAgKnJlc3VsdCA9ICptX2RhdGErKzsKKyAgICAr
K3Jlc3VsdDsKK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUlkZW50aWZpZXIoVUNo
YXIqJiByZXN1bHQpCit7CisgICAgLy8gSWYgYSB2YWxpZCBpZGVudGlmaWVyIHN0YXJ0IGlzIGZv
dW5kLCB3ZSBjYW4gc2FmZWx5CisgICAgLy8gcGFyc2UgdGhlIGlkZW50aWZpZXIgdW50aWwgdGhl
IG5leHQgaW52YWxpZCBjaGFyYWN0ZXIuCisgICAgQVNTRVJUKGlzSWRlbnRpZmllclN0YXJ0KCkp
OworICAgIGJvb2wgaGFzRXNjYXBlID0gZmFsc2U7CisgICAgZG8geworICAgICAgICBpZiAoTElL
RUxZKCptX2RhdGEgIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9kYXRhKys7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaGFzRXNjYXBlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGVzY2FwZSA9
PSBjdXJyZW50IC0gMiAmJiB5eVRvayA9PSBTVFJJTkcgJiYKLSAgICAgICAgICAgICAqKGN1cnJl
bnQtMSkgPT0gJ1xyJyAmJiAqY3VycmVudCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBlc2NhcGUg
PSAwOwotICAgICAgICAgICAgY29udGludWU7CisgICAgfSB3aGlsZSAoaXNDU1NMZXR0ZXIobV9k
YXRhWzBdKSB8fCAobV9kYXRhWzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUobV9kYXRhWzFdKSkp
OworICAgIHJldHVybiBoYXNFc2NhcGU7Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6cGFy
c2VTdHJpbmcoVUNoYXIqJiByZXN1bHQsIFVDaGFyIHF1b3RlKQoreworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09IHF1b3RlKSkgeworICAgICAgICAg
ICAgLy8gU3RyaW5nIHBhcnNpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgICsrbV9kYXRhOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChlc2NhcGUgPiBjdXJyZW50
IC0gNyAmJiBpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgICAgIC8vIGFkZCBlc2NhcGVkIGNoYXIK
LSAgICAgICAgICAgIHVuc2lnbmVkIHVjID0gMDsKLSAgICAgICAgICAgIGVzY2FwZSsrOwotICAg
ICAgICAgICAgd2hpbGUgKGVzY2FwZSA8IGN1cnJlbnQpIHsKLSAgICAgICAgICAgICAgICB1YyAq
PSAxNjsKLSAgICAgICAgICAgICAgICB1YyArPSB0b0FTQ0lJSGV4VmFsdWUoKmVzY2FwZSk7Ci0g
ICAgICAgICAgICAgICAgZXNjYXBlKys7CisgICAgICAgIEFTU0VSVCgoKm1fZGF0YSA+PSAnICcg
fHwgKm1fZGF0YSA9PSAnXHQnKSAmJiAqbV9kYXRhICE9IDEyNyk7CisKKyAgICAgICAgaWYgKExJ
S0VMWShtX2RhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9kYXRh
Kys7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAnXG4nIHx8IG1fZGF0YVsxXSA9PSAn
XGYnKQorICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsx
XSA9PSAnXHInKQorICAgICAgICAgICAgbV9kYXRhICs9IG1fZGF0YVsyXSA9PSAnXG4nID8gMyA6
IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CisgICAg
fQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlVVJJKFVDaGFyKiYgc3RhcnQsIFVD
aGFyKiYgcmVzdWx0KQoreworICAgIFVDaGFyKiB1cmlTdGFydCA9IHNraXBXaGl0ZVNwYWNlcyht
X2RhdGEpOworCisgICAgaWYgKCp1cmlTdGFydCA9PSAnIicgfHwgKnVyaVN0YXJ0ID09ICdcJycp
IHsKKyAgICAgICAgVUNoYXIgcXVvdGUgPSAqdXJpU3RhcnQ7CisgICAgICAgICsrdXJpU3RhcnQ7
CisKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IGNoZWNrU3RyaW5nKHVyaVN0YXJ0LCBxdW90
ZSk7CisgICAgICAgIGlmICghc3RyaW5nRW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBzdHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsKKyAgICAgICAgaWYgKCpz
dHJpbmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0YXJ0ID0g
cmVzdWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHBhcnNlU3RyaW5nKHJlc3VsdCwg
cXVvdGUpOworCisgICAgICAgIG1fZGF0YSA9IHN0cmluZ0VuZCArIDE7CisgICAgICAgIG1fdG9r
ZW4gPSBVUkk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IHVyaVN0
YXJ0OworCisgICAgICAgIHdoaWxlIChpc1VSSUxldHRlcigqc3RyaW5nRW5kKSkgeworICAgICAg
ICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJ1xcJykKKyAgICAgICAgICAgICAgICArK3N0cmluZ0Vu
ZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0cmluZ0VuZCA9IGNoZWNr
RXNjYXBlKHN0cmluZ0VuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmdFbmQpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGNh
bid0IGhhbmRsZSBjaGFycyBvdXRzaWRlIHVjczIKLSAgICAgICAgICAgIGlmICh1YyA+IDB4ZmZm
ZikKLSAgICAgICAgICAgICAgICB1YyA9IDB4ZmZmZDsKLSAgICAgICAgICAgICpvdXQrKyA9IHVj
OwotICAgICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAgICAgICAgIGlmIChpc0hUTUxTcGFjZSgq
Y3VycmVudCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKCFlc2NhcGUgJiYgKmN1cnJlbnQgPT0gJ1xcJykgewotICAgICAgICAgICAgZXNjYXBlID0g
Y3VycmVudDsKLSAgICAgICAgICAgIHNhd0VzY2FwZSA9IHRydWU7Ci0gICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBzdHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsK
KyAgICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHN0YXJ0ID0gcmVzdWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHdoaWxl
IChpc1VSSUxldHRlcigqbV9kYXRhKSkgeworICAgICAgICAgICAgaWYgKExJS0VMWSgqbV9kYXRh
ICE9ICdcXCcpKQorICAgICAgICAgICAgICAgICpyZXN1bHQrKyA9ICptX2RhdGErKzsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJzZUVzY2FwZShyZXN1bHQpOwogICAgICAg
ICB9Ci0gICAgICAgICpvdXQrKyA9ICpjdXJyZW50OworCisgICAgICAgIG1fZGF0YSA9IHN0cmlu
Z0VuZCArIDE7CisgICAgICAgIG1fdG9rZW4gPSBVUkk7CisgICAgfQorfQorCitpbmxpbmUgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVW5pY29kZVJhbmdlKCkKK3sKKyAgICBVQ2hhciogZGF0YSA9IG1f
ZGF0YSArIDE7CisgICAgaW50IGxlbmd0aCA9IDY7CisgICAgQVNTRVJUKCptX2RhdGEgPT0gJysn
KTsKKworICAgIHdoaWxlIChpc0FTQ0lJSGV4RGlnaXQoKmRhdGEpICYmIGxlbmd0aCkgeworICAg
ICAgICArK2RhdGE7CisgICAgICAgIC0tbGVuZ3RoOworICAgIH0KKworICAgIGlmIChsZW5ndGgg
JiYgKmRhdGEgPT0gJz8nKSB7CisgICAgICAgIC8vIEF0IG1vc3QgNSBoZXggZGlnaXQgZm9sbG93
ZWQgYnkgYSBxdWVzdGlvbiBtYXJrLgorICAgICAgICBkbyB7CisgICAgICAgICAgICArK2RhdGE7
CisgICAgICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgfSB3aGlsZSAoKmRhdGEgPT0gJz8nICYm
IGxlbmd0aCk7CisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KLSAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgIC8vIGFkZCBlc2NhcGVkIGNoYXIKLSAg
ICAgICAgdW5zaWduZWQgdWMgPSAwOwotICAgICAgICBlc2NhcGUrKzsKLSAgICAgICAgd2hpbGUg
KGVzY2FwZSA8IHN0YXJ0K2wpIHsKLSAgICAgICAgICAgIHVjICo9IDE2OwotICAgICAgICAgICAg
dWMgKz0gdG9BU0NJSUhleFZhbHVlKCplc2NhcGUpOwotICAgICAgICAgICAgZXNjYXBlKys7CisK
KyAgICBpZiAobGVuZ3RoIDwgNikgeworICAgICAgICAvLyBBdCBsZWFzdCBvbmUgaGV4IGRpZ2l0
LgorICAgICAgICBpZiAoZGF0YVswXSA9PSAnLScgJiYgaXNBU0NJSUhleERpZ2l0KGRhdGFbMV0p
KSB7CisgICAgICAgICAgICAvLyBGb2xsb3dlZCBieSBhIGRhc2ggYW5kIGEgaGV4IGRpZ2l0Lgor
ICAgICAgICAgICAgKytkYXRhOworICAgICAgICAgICAgbGVuZ3RoID0gNjsKKyAgICAgICAgICAg
IGRvIHsKKyAgICAgICAgICAgICAgICArK2RhdGE7CisgICAgICAgICAgICB9IHdoaWxlICgtLWxl
bmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQoKmRhdGEpKTsKICAgICAgICAgfQotICAgICAgICAvLyBj
YW4ndCBoYW5kbGUgY2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgIGlmICh1YyA+IDB4ZmZmZikK
LSAgICAgICAgICAgIHVjID0gMHhmZmZkOwotICAgICAgICAqb3V0KysgPSB1YzsKKyAgICAgICAg
bV9kYXRhID0gZGF0YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENoaWxkKCkKK3sKKyAg
ICBVQ2hhciogZGF0YSA9IG1fZGF0YTsKKworICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQoKmRhdGEp
KQorICAgICAgICArK2RhdGE7CisgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCgqZGF0YSwgJ24nKSkg
eworICAgICAgICBtX2RhdGEgPSBkYXRhICsgMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZU50
aENoaWxkRXh0cmEoKQoreworICAgIFVDaGFyKiBkYXRhID0gc2tpcFdoaXRlU3BhY2VzKG1fZGF0
YSk7CisgICAgaWYgKCpkYXRhICE9ICcrJyAmJiAqZGF0YSAhPSAnLScpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGRhdGEgPSBza2lwV2hpdGVTcGFjZXMoZGF0YSArIDEpOworICAgIGlm
ICghaXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8g
eworICAgICAgICArK2RhdGE7CisgICAgfSB3aGlsZSAoaXNBU0NJSURpZ2l0KCpkYXRhKSk7CisK
KyAgICBtX2RhdGEgPSBkYXRhOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBD
U1NQYXJzZXI6OmRldGVjdEZ1bmN0aW9uVG9rZW4oaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
bGVuZ3RoID4gMCk7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisKKyAgICBzd2l0
Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChu
YW1lWzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQ2FzZWxl
c3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IE5PVEZVTkNUSU9O
OworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3UnKSAmJiBpc0Nh
c2VsZXNzRXF1YWwobmFtZVsxXSwgJ3InKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2wn
KSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBVUkk7CisgICAgICAgIHJldHVybjsKIAotICAgICps
ZW5ndGggPSBvdXQgLSBzdGFydDsKKyAgICBjYXNlIDk6CisgICAgICAgIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZSwgIm50aC1jaGlsZCIpKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50
aENoaWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAxMToKKyAgICAgICAgaWYg
KGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLW9mLXR5cGUiKSkKKyAgICAgICAgICAgIG1fcGFy
c2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKIAotICAgIC8vIElmIHdl
IGhhdmUgYW4gdW5yZWNvZ25pemVkIEAta2V5d29yZCwgYW5kIGlmIHdlIGhhbmRsZWQgYW55IGVz
Y2FwZXMgYXQgYWxsLCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIGF0dGVtcHQgdG8gYWRqdXN0IHl5
VG9rIHRvIHRoZSBjb3JyZWN0IHR5cGUuCi0gICAgaWYgKHl5VG9rID09IEFUS0VZV09SRCAmJiBz
YXdFc2NhcGUpCi0gICAgICAgIHJlY2hlY2tBdEtleXdvcmQoc3RhcnQsICpsZW5ndGgpOworICAg
IGNhc2UgMTQ6CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50aC1sYXN0LWNo
aWxkIikpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAg
ICByZXR1cm47CiAKLSAgICByZXR1cm4gc3RhcnQ7CisgICAgY2FzZSAxNjoKKyAgICAgICAgaWYg
KGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLWxhc3Qtb2YtdHlwZSIpKQorICAgICAgICAgICAg
bV9wYXJzaW5nTW9kZSA9IE50aENoaWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0K
IAotdm9pZCBDU1NQYXJzZXI6OmNvdW50TGluZXMoKQoraW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpk
ZXRlY3RNZWRpYVF1ZXJ5VG9rZW4oaW50IGxlbmd0aCkKIHsKLSAgICBmb3IgKFVDaGFyKiBjdXJy
ZW50ID0geXl0ZXh0OyBjdXJyZW50IDwgeXl0ZXh0ICsgeXlsZW5nOyArK2N1cnJlbnQpIHsKLSAg
ICAgICAgaWYgKCpjdXJyZW50ID09ICdcbicpCi0gICAgICAgICAgICArK21fbGluZU51bWJlcjsK
KyAgICBBU1NFUlQobV9wYXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSk7CisgICAgVUNoYXIq
IG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisKKyAgICBpZiAobGVuZ3RoID09IDMpIHsKKyAgICAgICAg
aWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnYScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1l
WzFdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnZCcpKQorICAgICAgICAgICAg
bV90b2tlbiA9IE1FRElBX0FORDsKKyAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5h
bWVbMF0sICduJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdvJykgJiYgaXNDYXNlbGVz
c0VxdWFsKG5hbWVbMl0sICd0JykpCisgICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfTk9UOwor
ICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDQpIHsKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVh
bChuYW1lWzBdLCAnbycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbicpCisgICAgICAg
ICAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdsJykgJiYgaXNDYXNlbGVzc0Vx
dWFsKG5hbWVbM10sICd5JykpCisgICAgICAgICAgIG1fdG9rZW4gPSBNRURJQV9PTkxZOwogICAg
IH0KIH0KIAoraW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3ROdW1iZXJUb2tlbihVQ2hhciog
dHlwZSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisKKyAgICBzd2l0
Y2ggKGxvd2VyY2FzZUNoYXJhY3Rlcih0eXBlWzBdKSkgeworICAgIGNhc2UgJ2MnOgorICAgICAg
ICBpZiAobGVuZ3RoID09IDIgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCisgICAg
ICAgICAgICBtX3Rva2VuID0gQ01TOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdkJzoK
KyAgICAgICAgaWYgKGxlbmd0aCA9PSAzICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnZScp
ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnZycpKQorICAgICAgICAgICAgbV90b2tlbiA9
IERFR1M7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2UnOgorICAgICAgICBpZiAobGVu
Z3RoID09IDIpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20n
KSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRU1TOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd4JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IEVYUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdnJzoKKyAgICAg
ICAgaWYgKGxlbmd0aCA9PSA0ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAncicpCisgICAg
ICAgICAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdhJykgJiYgaXNDYXNlbGVz
c0VxdWFsKHR5cGVbM10sICdkJykpCisgICAgICAgICAgICBtX3Rva2VuID0gR1JBRFM7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgJ2gnOgorICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYg
aXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd6JykpCisgICAgICAgICAgICBtX3Rva2VuID0gSEVS
VFo7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2knOgorICAgICAgICBpZiAobGVuZ3Ro
ID09IDIgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICduJykpCisgICAgICAgICAgICBtX3Rv
a2VuID0gSU5TOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdrJzoKKyAgICAgICAgaWYg
KGxlbmd0aCA9PSAzICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnaCcpICYmIGlzQ2FzZWxl
c3NFcXVhbCh0eXBlWzJdLCAneicpKQorICAgICAgICAgICAgbV90b2tlbiA9IEtIRVJUWjsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnbSc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMikg
eworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBNTVM7CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNz
RXF1YWwodHlwZVsxXSwgJ3MnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTVNFQ1M7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAncCc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAn
eCcpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQWFM7CisgICAgICAgICAgICBlbHNlIGlm
IChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3QnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gUFRTOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdj
JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFBDUzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlICdyJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAzKSB7CisgICAg
ICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdhJykgJiYgaXNDYXNlbGVzc0Vx
dWFsKHR5cGVbMl0sICdkJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFJBRFM7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2UnKSAmJiBpc0Nhc2Vs
ZXNzRXF1YWwodHlwZVsyXSwgJ20nKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUkVNUzsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdzJzoKKyAgICAgICAgaWYg
KGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgbV90b2tlbiA9IFNFQ1M7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgJ3QnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYgaXNDYXNlbGVz
c0VxdWFsKHR5cGVbMV0sICd1JykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwo
dHlwZVsyXSwgJ3InKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ24nKSkKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBUVVJOUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgaWYgKHR5cGVbMF0gPT0gJ18nICYmIGxlbmd0aCA9PSA1ICYmIHR5cGVbMV0gPT0gJ18n
ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncScpCisgICAgICAgICAgICAgICAgJiYgaXND
YXNlbGVzc0VxdWFsKHR5cGVbM10sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbNF0sICdt
JykpCisgICAgICAgICAgICBtX3Rva2VuID0gUUVNUzsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3REYXNoVG9rZW4oaW50IGxlbmd0aCkK
K3sKKyAgICBVQ2hhciogbmFtZSA9IG1fdG9rZW5TdGFydDsKKworICAgIGlmIChsZW5ndGggPT0g
MTEpIHsKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ3knKSAmJiBpc0Nh
c2VsZXNzRXF1YWwobmFtZSArIDEsICJ3ZWJraXQtYW4iKSkKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBBTllGVU5DVElPTjsKKyAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTBd
LCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMSwgIndlYmtpdC1taSIpKQorICAgICAg
ICAgICAgbV90b2tlbiA9IE1JTkZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZVsxMF0sICd4JykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0
LW1hIikpCisgICAgICAgICAgICBtX3Rva2VuID0gTUFYRlVOQ1RJT047CisgICAgfSBlbHNlIGlm
IChsZW5ndGggPT0gMTIgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0LWNhbGMi
KSkKKyAgICAgICAgbV90b2tlbiA9IENBTENGVU5DVElPTjsKK30KKworaW5saW5lIHZvaWQgQ1NT
UGFyc2VyOjpkZXRlY3RBdFRva2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQoreworICAg
IFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworICAgIEFTU0VSVChuYW1lWzBdID09ICdAJyAm
JiBsZW5ndGggPj0gMik7CisKKyAgICAvLyBjaGFyc2V0LCBmb250LWZhY2UsIGltcG9ydCwgbWVk
aWEsIG5hbWVzcGFjZSwgcGFnZSwKKyAgICAvLyAtd2Via2l0LWtleWZyYW1lcywgYW5kIC13ZWJr
aXQtbWVkaWFxdWVyeSBhcmUgbm90IGFmZmVjdGVkIGJ5IGhhc0VzY2FwZS4KKyAgICBzd2l0Y2gg
KGxvd2VyY2FzZUNoYXJhY3RlcihuYW1lWzFdKSkgeworICAgIGNhc2UgJ2InOgorICAgICAgICBp
ZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAobGVu
Z3RoKSB7CisgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFs
KG5hbWUgKyAyLCAib3R0b20tbGVmdCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RU
T01MRUZUX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDEzOgorICAg
ICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm90dG9tLXJpZ2h0IikpCisg
ICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTVJJR0hUX1NZTTsKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVh
bChuYW1lICsgMiwgIm90dG9tLWNlbnRlciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBC
T1RUT01DRU5URVJfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTk6
CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0b20tbGVmdC1j
b3JuZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NTEVGVENPUk5FUl9TWU07
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1yaWdodC1jb3JuZXIiKSkKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NUklHSFRDT1JORVJfU1lNOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2MnOgorICAg
ICAgICBpZiAobGVuZ3RoID09IDggJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaGFyc2V0
IikpCisgICAgICAgICAgICBtX3Rva2VuID0gQ0hBUlNFVF9TWU07CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgJ2YnOgorICAgICAgICBpZiAobGVuZ3RoID09IDEwICYmIGlzQ2FzZWxlc3NF
cXVhbChuYW1lICsgMiwgIm9udC1mYWNlIikpCisgICAgICAgICAgICBtX3Rva2VuID0gRk9OVF9G
QUNFX1NZTTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaSc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gNyAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJtcG9ydCIpKSB7CisgICAg
ICAgICAgICBtX3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CisgICAgICAgICAgICBtX3Rv
a2VuID0gSU1QT1JUX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
ICdsJzoKKyAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAobGVuZ3RoID09IDkpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwo
bmFtZSArIDIsICJlZnQtdG9wIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IExFRlRUT1Bf
U1lNOworICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMikgeworICAgICAgICAgICAgLy8g
Q2hlY2tpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRo
ZSBwb3NzaWJpbGUgY2FzZXMuCisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVb
MTFdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC1taWRkbCIpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUTUlERExFX1NZTTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzExXSwgJ20nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFt
ZSArIDIsICJlZnQtYm90dG8iKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTEVGVEJPVFRP
TV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnbSc6CisgICAg
ICAgIGlmIChsZW5ndGggPT0gNiAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJlZGlhIikp
IHsKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBNRURJQV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSAnbic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNDYXNlbGVzc0VxdWFs
KG5hbWUgKyAyLCAiYW1lc3BhY2UiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBOQU1FU1BBQ0Vf
U1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAgICAgaWYgKGxlbmd0
aCA9PSA1ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImFnZSIpKQorICAgICAgICAgICAg
bV90b2tlbiA9IFBBR0VfU1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdyJzoKKyAg
ICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
bGVuZ3RoID09IDEwKSB7CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAiaWdodC10b3AiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRUT1BfU1lNOwor
ICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMykgeworICAgICAgICAgICAgLy8gQ2hlY2tp
bmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3Nz
aWJpbGUgY2FzZXMuCisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAn
ZScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImlnaHQtbWlkZGwiKSkKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gUklHSFRNSURETEVfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAnbScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsg
MiwgImlnaHQtYm90dG8iKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRCT1RUT01f
U1lNOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3QnOgorICAgICAg
ICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAo
bGVuZ3RoKSB7CisgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJvcC1sZWZ0IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUExF
RlRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTA6CisgICAgICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3AtcmlnaHQiKSkKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gVE9QUklHSFRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAib3AtY2VudGVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUENFTlRFUl9TWU07
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1sZWZ0LWNvcm5lciIpKQorICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBUT1BMRUZUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1l
ICsgMiwgIm9wLXJpZ2h0LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BS
SUdIVENPUk5FUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSAnLSc6CisgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7CisgICAg
ICAgIGNhc2UgMTM6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJ3ZWJraXQtcnVsZSIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBX
RUJLSVRfUlVMRV9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNDoK
KyAgICAgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVy
dGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwobmFtZVsxM10sICdzJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Vi
a2l0LWRlY2wiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX0RFQ0xTX1NZTTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ2UnKSAmJiBp
c0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtdmFsdSIpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBXRUJLSVRfVkFMVUVfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgMTc6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJ3ZWJraXQtc2VsZWN0b3IiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gV0VCS0lUX1NFTEVDVE9SX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
YXNlIDE4OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtp
dC1rZXlmcmFtZXMiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX0tFWUZSQU1F
U19TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxOToKKyAgICAgICAg
ICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtbWVkaWFxdWVyeSIpKSB7
CisgICAgICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOworICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAyMjoKKyAgICAgICAgICAgIGlm
ICghaGFzRXNjYXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1rZXlmcmFt
ZS1ydWxlIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlGUkFNRV9SVUxF
X1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworaW50IENT
U1BhcnNlcjo6bGV4KHZvaWQqIHl5bHZhbFdpdGhvdXRUeXBlKQoreworICAgIFlZU1RZUEUqIHl5
bHZhbCA9IHN0YXRpY19jYXN0PFlZU1RZUEUqPih5eWx2YWxXaXRob3V0VHlwZSk7CisgICAgLy8g
V3JpdGUgcG9pbnRlciBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLgorICAgIFVDaGFyKiByZXN1bHQ7
CisgICAgYm9vbCBoYXNFc2NhcGU7CisKKyAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGlzIHRlcm1p
bmF0ZWQgYnkgdHdvIFwwLCBzbworICAgIC8vIGl0IGlzIHNhZmUgdG8gcmVhZCB0d28gY2hhcmFj
dGVycyBhaGVhZCBhbnl0aW1lLgorCisjaWZuZGVmIE5ERUJVRworICAgIC8vIEluIGRlYnVnIHdl
IGNoZWNrIHdpdGggYW4gQVNTRVJUIHRoYXQgdGhlIGxlbmd0aCBpcyA+IDAgZm9yIHN0cmluZyB0
eXBlcy4KKyAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gMDsKKyAgICB5eWx2YWwtPnN0
cmluZy5sZW5ndGggPSAwOworI2VuZGlmCisKKyAgICAvLyBUaGlzIGlzIG5vdCBhIHJlYWwgbG9v
cCwganVzdCBhbGxvd3MgdXMgdG8gYXZvaWQgZ290b3MuCisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgbV90b2tlblN0YXJ0ID0gcmVzdWx0ID0gbV9kYXRhOworICAgICAgICBtX3Rva2VuID0g
Km1fZGF0YTsKKyAgICAgICAgKyttX2RhdGE7CisKKyAgICAgICAgc3dpdGNoICgobV90b2tlbiA8
PSAxMjcpID8gdHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1ttX3Rva2VuXSA6IENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCkgeworICAgICAgICBjYXNlIENoYXJhY3RlckNhc2VsZXNzVToKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09ICcrJykpCisgICAgICAgICAgICAgICAgaWYgKHBh
cnNlVW5pY29kZVJhbmdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IFVOSUNP
REVSQU5HRTsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9
IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
ID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LgorCisgICAgICAgIGNhc2UgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
OgorICAgICAgICAgICAgLS1tX2RhdGE7CisgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlk
ZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJREVOVDsKKworICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAg
ICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAtIG1fdG9rZW5TdGFydDsKKworICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCptX2RhdGEgPT0gJygnKSkgeworICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBGVU5DVElPTjsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKKyAg
ICAgICAgICAgICAgICAgICAgZGV0ZWN0RnVuY3Rpb25Ub2tlbihyZXN1bHQgLSBtX3Rva2VuU3Rh
cnQpOworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgICsrcmVzdWx0
OworICAgICAgICAgICAgICAgICsreXlsdmFsLT5zdHJpbmcubGVuZ3RoOworCisgICAgICAgICAg
ICAgICAgaWYgKHRva2VuKCkgPT0gVVJJKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBGVU5DVElPTjsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyBy
ZWFsbHkgYW4gVVJJLgorICAgICAgICAgICAgICAgICAgICBwYXJzZVVSSSh5eWx2YWwtPnN0cmlu
Zy5jaGFyYWN0ZXJzLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5sZW5ndGggPSByZXN1bHQgLSB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSAh
PSBOb3JtYWxNb2RlKSAmJiAhaGFzRXNjYXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcGFy
c2luZ01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpCisgICAgICAgICAgICAgICAgICAgIGRldGVjdE1l
ZGlhUXVlcnlUb2tlbihyZXN1bHQgLSBtX3Rva2VuU3RhcnQpOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlICYmIHJlc3VsdCAtIG1fdG9rZW5T
dGFydCA9PSAxICYmIGlzQ2FzZWxlc3NFcXVhbCgqbV90b2tlblN0YXJ0LCAnbicpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIERpZmZpY3VsdCBjYXNlOiAibiIgaXMgSURFTlQgYnV0ICJuICsg
MSIgaXMgTlRILgorICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAg
ICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlckRvdDoKKyAgICAg
ICAgICAgIGlmICghaXNBU0NJSURpZ2l0KG1fZGF0YVswXSkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gQ2hhcmFjdGVyTnVtYmVyLgorCisg
ICAgICAgIGNhc2UgQ2hhcmFjdGVyTnVtYmVyOiB7CisgICAgICAgICAgICBib29sIGRvdFNlZW4g
PSAobV90b2tlbiA9PSAnLicpOworCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KG1fZGF0YVswXSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gT25seSBvbmUgZG90IGlzIGFsbG93ZWQgZm9yIGEgbnVtYmVyLAorICAgICAgICAg
ICAgICAgICAgICAvLyBhbmQgaXQgbXVzdCBiZSBmb2xsb3dlZCBieSBhIG51bWJlci4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZGF0YVswXSAhPSAnLicgfHwgZG90U2VlbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FT
Q0lJRGlnaXQobV9kYXRhWzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdFNlZW4gPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50
aENoaWxkTW9kZSkgJiYgIWRvdFNlZW4gJiYgaXNDYXNlbGVzc0VxdWFsKCptX2RhdGEsICduJykp
IHsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBwYXJzZU50aENo
aWxkRXh0cmEoKTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAg
ICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB5eWx2YWwt
Pm51bWJlciA9IGNoYXJhY3RlcnNUb0RvdWJsZShtX3Rva2VuU3RhcnQsIG1fZGF0YSAtIG1fdG9r
ZW5TdGFydCk7CisKKyAgICAgICAgICAgIC8vIFR5cGUgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAg
ICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBVQ2hhciog
dHlwZSA9IG1fZGF0YTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2RhdGE7CisKKyAgICAg
ICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICBpZiAoKm1fZGF0YSA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQW55
IGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYSAnKycgc2lnbiBpcyBhbiBpbnZhbGlkIGRpbWVuc2lv
bi4KKyAgICAgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBJTlZBTElERElNRU47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IERJTUVOOworICAgICAgICAgICAgICAgICAgICBpZiAoIWhh
c0VzY2FwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdE51bWJlclRva2VuKHR5cGUs
IG1fZGF0YSAtIHR5cGUpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtX3Rva2VuID09IERJ
TUVOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZGVjb2RlZCBudW1iZXIgaXMg
b3ZlcndyaXR0ZW4sIGJ1dCB0aGlzIGlzIGludGVudGlvbmFsLgorICAgICAgICAgICAgICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5T
dGFydDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoKm1fZGF0YSA9PSAnJScpIHsKKyAgICAgICAgICAgICAgICAvLyBBbHRo
b3VnaCB0aGUgQ1NTIGdyYW1tYXIgc2F5cyB7bnVtfSUgd2UgZm9sbG93CisgICAgICAgICAgICAg
ICAgLy8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hpY2ggdXNlcyB7bnVtfSUrLgorICAgICAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAg
ICAgfSB3aGlsZSAoKm1fZGF0YSA9PSAnJScpOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQ
RVJDRU5UQUdFOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IGRvdFNlZW4gPyBGTE9BVFRPS0VOIDogSU5URUdFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJEYXNoOgorICAgICAgICAgICAgaWYgKGlz
SWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKG1fZGF0YSkpIHsKKyAgICAgICAgICAgICAgICAtLW1f
ZGF0YTsKKyAgICAgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50aWZpZXIocmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisKKyAgICAgICAgICAgICAgICBp
ZiAoKm1fZGF0YSA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IEZVTkNU
SU9OOworICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRldGVjdERhc2hUb2tlbihyZXN1bHQgLSBtX3Rva2VuU3RhcnQpOworICAgICAg
ICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgKytyZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50aENo
aWxkTW9kZSkgJiYgIWhhc0VzY2FwZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVzdWx0
IC0gbV90b2tlblN0YXJ0ID09IDIgJiYgaXNDYXNlbGVzc0VxdWFsKG1fdG9rZW5TdGFydFsxXSwg
J24nKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBEaWZmaWN1bHQgY2FzZTogIi1uIiBpcyBJ
REVOVCBidXQgIi1uICsgMSIgaXMgTlRILgorICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VO
dGhDaGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2RhdGE7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJp
bmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0
cmluZy5sZW5ndGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fZGF0YVswXSA9PSAnLScgJiYgbV9kYXRhWzFdID09ICc+JykgeworICAgICAgICAgICAg
ICAgIG1fZGF0YSArPSAyOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBTR01MX0NEOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9k
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYSgpOworICAgICAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJz
ID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJPdGhlcjoK
KyAgICAgICAgICAgIC8vIG1fdG9rZW4gaXMgc2ltcGx5IHRoZSBjdXJyZW50IGNoYXJhY3Rlci4K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyV2hpdGVTcGFjZToK
KyAgICAgICAgICAgIG1fdG9rZW4gPSBXSElURVNQQUNFOworICAgICAgICAgICAgLy8gTWlnaHQg
c3RhcnQgd2l0aCBhICdcbicuCisgICAgICAgICAgICAtLW1fZGF0YTsKKyAgICAgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAnXG4nKQorICAgICAgICAgICAgICAg
ICAgICArK21fbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAg
ICAgIH0gd2hpbGUgKCptX2RhdGEgPD0gJyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWypt
X2RhdGFdID09IENoYXJhY3RlcldoaXRlU3BhY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgQ2hhcmFjdGVyRW5kTWVkaWFRdWVyeToKKyAgICAgICAgICAgIGlmIChtX3Bh
cnNpbmdNb2RlID09IE1lZGlhUXVlcnlNb2RlKQorICAgICAgICAgICAgICAgIG1fcGFyc2luZ01v
ZGUgPSBOb3JtYWxNb2RlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFy
YWN0ZXJFbmROdGhDaGlsZDoKKyAgICAgICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE50aENo
aWxkTW9kZSkKKyAgICAgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyUXVvdGU6CisgICAgICAg
ICAgICBpZiAoY2hlY2tTdHJpbmcobV9kYXRhLCBtX3Rva2VuKSkgeworICAgICAgICAgICAgICAg
IHBhcnNlU3RyaW5nKHJlc3VsdCwgbV90b2tlbik7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IFNUUklORzsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90
b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3Vs
dCAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrOiB7CisgICAgICAgICAgICBVQ2hh
ciogc3RhcnQgPSBza2lwV2hpdGVTcGFjZXMobV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChpc0Nh
c2VsZXNzRXF1YWwoc3RhcnQsICJpbXBvcnRhbnQiKSkgeworICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBJTVBPUlRBTlRfU1lNOworICAgICAgICAgICAgICAgIG1fZGF0YSA9IHN0YXJ0ICsgOTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBDaGFyYWN0ZXJIYXNobWFyazogeworICAgICAgICAgICAgVUNoYXIqIHN0YXJ0ID0gbV9k
YXRhOworICAgICAgICAgICAgcmVzdWx0ID0gbV9kYXRhOworCisgICAgICAgICAgICBpZiAoaXNB
U0NJSURpZ2l0KCptX2RhdGEpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEg
dmFsaWQgaGV4IG51bWJlciB0b2tlbi4KKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhE
aWdpdCgqbV9kYXRhKSk7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEhFWDsKKyAgICAgICAg
ICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gc3RhcnQ7CisgICAgICAgICAgICAg
ICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gc3RhcnQ7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gSURTRUw7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUlkZW50aWZpZXIocmVzdWx0KSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlz
IGFsc28gYSB2YWxpZCBoZXggbnVtYmVyLgorICAgICAgICAgICAgICAgICAgICBVQ2hhciogY3Vy
cmVudCA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gSEVYOworICAgICAg
ICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlI
ZXhEaWdpdCgqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gSURTRUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAg
ICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQgPCByZXN1bHQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gc3RhcnQ7
CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gc3RhcnQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgQ2hhcmFjdGVyU2xhc2g6CisgICAgICAgICAgICAvLyBJZ25vcmUgY29tbWVudHMuIFRo
ZXkgYXJlIG5vdCBldmVuIGNvbnNpZGVyZWQgYXMgd2hpdGUgc3BhY2VzLgorICAgICAgICAgICAg
aWYgKCptX2RhdGEgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKG1fZGF0YVswXSAhPSAnKicgfHwgbV9kYXRhWzFdICE9ICcvJykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9kYXRhWzBdID09ICdcbicpCisgICAgICAgICAgICAg
ICAgICAgICAgICArK21fbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZGF0
YVswXSA9PSAnXDAnICYmIG1fZGF0YVsxXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVbnRlcm1pbmF0ZWQgY29tbWVudHMgYXJlIHNpbXBseSBpZ25vcmVkLgorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kYXRhIC09IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK21fZGF0
YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIENoYXJhY3RlckRvbGxhcjoKKyAgICAgICAgICAgIGlmICgqbV9kYXRh
ID09ICc9JykgeworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBFTkRTV0lUSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgQ2hhcmFjdGVyQXN0ZXJpc2s6CisgICAgICAgICAgICBpZiAoKm1fZGF0YSA9
PSAnPScpIHsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gQ09OVEFJTlM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIENoYXJhY3RlclBsdXM6CisgICAgICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9
PSBOdGhDaGlsZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYSgpOworICAgICAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICB5eWx2YWwt
PnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFy
YWN0ZXJMZXNzOgorICAgICAgICAgICAgaWYgKG1fZGF0YVswXSA9PSAnIScgJiYgbV9kYXRhWzFd
ID09ICctJyAmJiBtX2RhdGFbMl0gPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgbV9kYXRhICs9
IDM7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlckF0OgorICAgICAgICAg
ICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0g
QVRLRVlXT1JEOworICAgICAgICAgICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAgICAgIGhh
c0VzY2FwZSA9IHBhcnNlSWRlbnRpZmllcihyZXN1bHQpOworICAgICAgICAgICAgICAgIGRldGVj
dEF0VG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0LCBoYXNFc2NhcGUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJCYWNrU2xhc2g6
CisgICAgICAgICAgICBpZiAoaXNDU1NFc2NhcGUoKm1fZGF0YSkpIHsKKyAgICAgICAgICAgICAg
ICAtLW1fZGF0YTsKKyAgICAgICAgICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5z
dHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB5eWx2YWwt
PnN0cmluZy5sZW5ndGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlclhvcjoKKyAgICAgICAg
ICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBCRUdJTlNXSVRIOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJWZXJ0aWNhbEJhcjoKKyAgICAg
ICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgICAgICsrbV9kYXRhOwor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBEQVNITUFUQ0g7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlclRpbGRlOgorICAgICAgICAg
ICAgaWYgKCptX2RhdGEgPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IElOQ0xVREVTOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisjaWYgMAorLyogREVCVUcgKi8gVUNoYXIqIHN0YXJ0ID0gKHRva2VuKCkgPT0gVVJJ
IHx8IHRva2VuKCkgPT0gU1RSSU5HIHx8IHRva2VuKCkgPT0gSEVYIHx8IHRva2VuKCkgPT0gSURT
RUwpID8geXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA6IG1fdG9rZW5TdGFydDsKKy8qIERFQlVH
ICovIGlmICh0b2tlbigpID09IElOVkFMSURESU1FTikgKytyZXN1bHQ7CisvKiBERUJVRyAqLyBw
cmludGYoIkNTUyB0b2tlbjogWyVkXSBsaW5lOiAlZCA8IiwgdG9rZW4oKSwgbV9saW5lTnVtYmVy
KTsKKy8qIERFQlVHICovIGlmICh0b2tlbigpID09IFVOSUNPREVSQU5HRSB8fCB0b2tlbigpID09
IE5USCB8fCB0b2tlbigpID09IEhFWCB8fCB0b2tlbigpID09IEZMT0FUVE9LRU4gfHwgdG9rZW4o
KSA9PSBJTlRFR0VSIHx8IHRva2VuKCkgPT0gUEVSQ0VOVEFHRSB8fCB0b2tlbigpID09IElNUE9S
VEFOVF9TWU0pIHJlc3VsdCA9IG1fZGF0YTsKKy8qIERFQlVHICovIGlmICh0b2tlbigpID09IFdI
SVRFU1BBQ0UpIHByaW50ZigiU1BBQ0UiKTsgZWxzZSBpZiAodG9rZW4oKSA8IDI1NikgcHJpbnRm
KCIlYyIsIChjaGFyKXRva2VuKCkpOyBlbHNlIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0IC0g
c3RhcnQ7ICsraSkgcHJpbnRmKCIlYyIsIHN0YXJ0W2ldKTsKKy8qIERFQlVHICovIHByaW50Zigi
PlxuIik7CisjZW5kaWYKKworI2lmbmRlZiBOREVCVUcKKyAgICBzd2l0Y2ggKHRva2VuKCkpIHsK
KyAgICBjYXNlIFNUUklORzoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3Rl
cnMgPT0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElERU5UOgor
ICAgIGNhc2UgTlRIOgorICAgIGNhc2UgRElNRU46CisgICAgY2FzZSBVTklDT0RFUkFOR0U6Cisg
ICAgY2FzZSBGVU5DVElPTjoKKyAgICBjYXNlIEFOWUZVTkNUSU9OOgorICAgIGNhc2UgTk9URlVO
Q1RJT046CisgICAgY2FzZSBDQUxDRlVOQ1RJT046CisgICAgY2FzZSBNSU5GVU5DVElPTjoKKyAg
ICBjYXNlIE1BWEZVTkNUSU9OOgorICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcuY2hhcmFj
dGVycyA9PSBtX3Rva2VuU3RhcnQpOworICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcubGVu
Z3RoID4gMCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBVUkk6CisgICAgICAgIEFTU0VS
VCh5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzICYmIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMg
IT0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhFWDoKKyAgICBj
YXNlIElEU0VMOgorICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyAmJiB5
eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID09IG1fdG9rZW5TdGFydCArIDEpOworICAgICAgICBB
U1NFUlQoeXlsdmFsLT5zdHJpbmcubGVuZ3RoID4gMCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyNlbmRpZgorCisgICAgcmV0dXJuIHRva2VuKCk7Cit9CisKIENTU1BhcnNlclNlbGVjdG9yKiBD
U1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKQogewogICAgIENTU1BhcnNlclNlbGVj
dG9yKiBzZWxlY3RvciA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKQEAgLTczOTUsMjcgKzgzNTYs
MjcgQEAgdm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigp
CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQogewotICAgIG1fc2Vs
ZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSB5eXRleHQgLSBtX2RhdGE7CisgICAgbV9zZWxlY3Rvckxp
c3RSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0OwogfQogCiB2b2lkIENT
U1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdEVuZCgpCiB7CiAgICAgaWYgKCFtX2N1cnJlbnRSdWxl
RGF0YSkKICAgICAgICAgcmV0dXJuOwotICAgIFVDaGFyKiBsaXN0RW5kID0geXl0ZXh0OwotICAg
IHdoaWxlIChsaXN0RW5kID4gbV9kYXRhICsgMSkgeworICAgIFVDaGFyKiBsaXN0RW5kID0gbV90
b2tlblN0YXJ0OworICAgIHdoaWxlIChsaXN0RW5kID4gbV9kYXRhU3RhcnQgKyAxKSB7CiAgICAg
ICAgIGlmIChpc0hUTUxTcGFjZSgqKGxpc3RFbmQgLSAxKSkpCiAgICAgICAgICAgICAtLWxpc3RF
bmQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX3NlbGVj
dG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGE7CisgICAgbV9zZWxlY3Rvckxpc3RS
YW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhU3RhcnQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpt
YXJrUnVsZUJvZHlTdGFydCgpCiB7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9k
YXRhOwotICAgIGlmICgqeXl0ZXh0ID09ICd7JykKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Rv
a2VuU3RhcnQgLSBtX2RhdGFTdGFydDsKKyAgICBpZiAoKm1fdG9rZW5TdGFydCA9PSAneycpCiAg
ICAgICAgICsrb2Zmc2V0OyAvLyBTa2lwIHRoZSBydWxlIGJvZHkgb3BlbmluZyBicmFjZS4KICAg
ICBpZiAob2Zmc2V0ID4gbV9ydWxlQm9keVJhbmdlLnN0YXJ0KQogICAgICAgICBtX3J1bGVCb2R5
UmFuZ2Uuc3RhcnQgPSBvZmZzZXQ7CkBAIC03NDI0LDcgKzgzODUsNyBAQCB2b2lkIENTU1BhcnNl
cjo6bWFya1J1bGVCb2R5U3RhcnQoKQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5k
KCkKIHsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CisgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQ7CiAgICAgaWYgKG9mZnNldCA+
IG1fcnVsZUJvZHlSYW5nZS5lbmQpCiAgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5lbmQgPSBvZmZz
ZXQ7CiB9CkBAIC03NDMzLDE1ICs4Mzk0LDE1IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVy
dHlTdGFydCgpCiB7CiAgICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IHl5dGV4dCAtIG1fZGF0YTsK
KyAgICBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydDsK
IH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91
bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkKIHsKICAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRl
Y2xhcmF0aW9uKQogICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0
IC0gbV9kYXRhOwotICAgIGlmICgqeXl0ZXh0ID09ICc7JykgLy8gSW5jbHVkZSBzZW1pY29sb24g
aW50byB0aGUgcHJvcGVydHkgdGV4dC4KKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Rva2VuU3Rh
cnQgLSBtX2RhdGFTdGFydDsKKyAgICBpZiAoKm1fdG9rZW5TdGFydCA9PSAnOycpIC8vIEluY2x1
ZGUgc2VtaWNvbG9uIGludG8gdGhlIHByb3BlcnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0Owog
ICAgIG1fcHJvcGVydHlSYW5nZS5lbmQgPSBvZmZzZXQ7CiAgICAgaWYgKG1fcHJvcGVydHlSYW5n
ZS5zdGFydCAhPSBVSU5UX01BWCAmJiBtX2N1cnJlbnRSdWxlRGF0YSkgewpAQCAtNzQ0OSw3ICs4
NDEwLDcgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50
Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkKICAgICAgICAgY29uc3QgdW5zaWduZWQgc3Rh
cnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGVuZCA9
IG1fcHJvcGVydHlSYW5nZS5lbmQ7CiAgICAgICAgIEFTU0VSVChzdGFydCA8IGVuZCk7Ci0gICAg
ICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyhtX2RhdGEgKyBzdGFydCwgZW5kIC0g
c3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBTdHJpbmcgcHJvcGVydHlTdHJpbmcg
PSBTdHJpbmcobV9kYXRhU3RhcnQgKyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFj
ZSgpOwogICAgICAgICBpZiAocHJvcGVydHlTdHJpbmcuZW5kc1dpdGgoIjsiLCB0cnVlKSkKICAg
ICAgICAgICAgIHByb3BlcnR5U3RyaW5nID0gcHJvcGVydHlTdHJpbmcubGVmdChwcm9wZXJ0eVN0
cmluZy5sZW5ndGgoKSAtIDEpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBwcm9wZXJ0eUNvbXBv
bmVudHM7CkBAIC03NjY2LDMzICs4NjI3LDQgQEAgYm9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3Qg
Q1NTUGFyc2VyU3RyaW5nJiB0b2tlbikKICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodG9r
ZW4sICJvZGQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh0b2tlbiwgImV2ZW4iKSB8fCBlcXVhbEln
bm9yaW5nQ2FzZSh0b2tlbiwgIm4iKTsKIH0KIAotI2RlZmluZSBZWV9ERUNMIGludCBDU1NQYXJz
ZXI6OmxleCgpCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5
cGU7Ci10eXBlZGVmIHVuc2lnbmVkIFlZX0NIQVI7Ci0vLyBUaGUgZm9sbG93aW5nIGxpbmUgbWFr
ZXMgc3VyZSB3ZSB0cmVhdCBub24tTGF0aW4tMSBVbmljb2RlIGNoYXJhY3RlcnMgY29ycmVjdGx5
LgotI2RlZmluZSBZWV9TQ19UT19VSShjKSAoYyA+IDB4ZmYgPyAweGZmIDogYykKLSNkZWZpbmUg
WVlfRE9fQkVGT1JFX0FDVElPTiBcCi0gICAgICAgIHl5dGV4dCA9IHl5X2JwOyBcCi0gICAgICAg
IHl5bGVuZyA9IChpbnQpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgICAgICB5eV9ob2xkX2NoYXIg
PSAqeXlfY3A7IFwKLSAgICAgICAgKnl5X2NwID0gMDsgXAotICAgICAgICB5eV9jX2J1Zl9wID0g
eXlfY3A7Ci0jZGVmaW5lIFlZX0JSRUFLIGJyZWFrOwotI2RlZmluZSBFQ0hPCi0jZGVmaW5lIFlZ
X1JVTEVfU0VUVVAKLSNkZWZpbmUgSU5JVElBTCAwCi0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0
ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCi0jZGVmaW5lIHl5dGVybWluYXRlKCkg
eXlUb2sgPSBFTkRfVE9LRU47IHJldHVybiB5eVRvawotI2RlZmluZSBZWV9GQVRBTF9FUlJPUihh
KQotLy8gVGhlIGZvbGxvd2luZyBsaW5lIGlzIG5lZWRlZCB0byBidWlsZCB0aGUgdG9rZW5pemVy
IHdpdGggYSBjb25kaXRpb24gc3RhY2suCi0vLyBUaGUgbWFjcm8gaXMgdXNlZCBpbiB0aGUgdG9r
ZW5pemVyIGdyYW1tYXIgd2l0aCBsaW5lcyBjb250YWluaW5nCi0vLyBCRUdJTihtZWRpYXF1ZXJp
ZXMpIGFuZCBCRUdJTihpbml0aWFsKS4geXlfc3RhcnQgYWN0cyBhcyBpbmRleCB0bwotLy8gdG9r
ZW5pemVyIHRyYW5zaXRpb24gdGFibGUsIGFuZCAnbWVkaWFxdWVyaWVzJyBhbmQgJ2luaXRpYWwn
IGFyZQotLy8gb2Zmc2V0IG11bHRpcGxpZXJzIHRoYXQgc3BlY2lmeSB3aGljaCB0cmFuc2l0aW9u
cyBhcmUgYWN0aXZlCi0vLyBpbiB0aGUgdG9rZW5pemVyIGR1cmluZyBpbiBlYWNoIGNvbmRpdGlv
biAodG9rZW5pemVyIHN0YXRlKS4KLSNkZWZpbmUgQkVHSU4geXlfc3RhcnQgPSAxICsgMiAqCi0K
LSNpbmNsdWRlICJ0b2tlbml6ZXIuY3BwIgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXgg
NGUwZjE1MC4uODE3NTI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjk0LDE0ICsyOTQs
MjggQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRSdWxlQm9keU1hcmtzKCkgeyBtX3J1bGVCb2R5
UmFuZ2Uuc3RhcnQgPSBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gMDsgfQogICAgIHZvaWQgcmVzZXRQ
cm9wZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uu
ZW5kID0gVUlOVF9NQVg7IH0KICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7Ci0gICAgaW50IHRv
a2VuKCkgeyByZXR1cm4geXlUb2s7IH0KLSAgICBVQ2hhciogdGV4dChpbnQqIGxlbmd0aCk7Ci0g
ICAgdm9pZCBjb3VudExpbmVzKCk7Ci0gICAgaW50IGxleCgpOworICAgIGludCB0b2tlbigpIHsg
cmV0dXJuIG1fdG9rZW47IH0KIAogcHJpdmF0ZToKKyAgICBpbmxpbmUgYm9vbCBpc0lkZW50aWZp
ZXJTdGFydCgpOworCisgICAgc3RhdGljIGlubGluZSBVQ2hhciogY2hlY2tTdHJpbmcoVUNoYXIq
LCBVQ2hhcik7CisKKyAgICB2b2lkIHBhcnNlRXNjYXBlKFVDaGFyKiYpOworICAgIGlubGluZSBi
b29sIHBhcnNlSWRlbnRpZmllcihVQ2hhciomKTsKKyAgICBpbmxpbmUgdm9pZCBwYXJzZVN0cmlu
ZyhVQ2hhciomLCBVQ2hhcik7CisgICAgaW5saW5lIHZvaWQgcGFyc2VVUkkoVUNoYXIqJiwgVUNo
YXIqJik7CisgICAgaW5saW5lIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoKTsKKyAgICBpbmxpbmUg
Ym9vbCBwYXJzZU50aENoaWxkKCk7CisgICAgaW5saW5lIGJvb2wgcGFyc2VOdGhDaGlsZEV4dHJh
KCk7CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0RnVuY3Rpb25Ub2tlbihpbnQpOworICAgIGlubGlu
ZSB2b2lkIGRldGVjdE1lZGlhUXVlcnlUb2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVj
dE51bWJlclRva2VuKFVDaGFyKiwgaW50KTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3REYXNoVG9r
ZW4oaW50KTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CisKICAg
ICB2b2lkIHNldFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAgIAorCiAgICAgdm9pZCBy
ZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4pOwogCiAgICAgdm9pZCBz
ZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmluZyYsIGNvbnN0IGNoYXIq
IHN1ZmZpeCk7CkBAIC0zMjksMTUgKzM0MywxNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcGFyc2VT
aXplKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKICAgICBTaXplUGFyYW1ldGVyVHlwZSBw
YXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0KiBwYXJzZWRWYWx1ZXMsIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSwgU2l6ZVBhcmFtZXRlclR5cGUgcHJldlBhcmFtVHlwZSk7CiAKKyAgICBlbnVt
IFBhcnNpbmdNb2RlIHsKKyAgICAgICAgTm9ybWFsTW9kZSwKKyAgICAgICAgTWVkaWFRdWVyeU1v
ZGUsCisgICAgICAgIE50aENoaWxkTW9kZQorICAgIH07CisKKyAgICBQYXJzaW5nTW9kZSBtX3Bh
cnNpbmdNb2RlOworICAgIFVDaGFyKiBtX2RhdGFTdGFydDsKICAgICBVQ2hhciogbV9kYXRhOwot
ICAgIFVDaGFyKiB5eXRleHQ7Ci0gICAgVUNoYXIqIHl5X2NfYnVmX3A7Ci0gICAgVUNoYXIgeXlf
aG9sZF9jaGFyOwotICAgIGludCB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBVQ2hhciog
eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICBpbnQgeXlsZW5nOwotICAgIGludCB5eVRvazsK
LSAgICBpbnQgeXlfc3RhcnQ7CisgICAgVUNoYXIqIG1fdG9rZW5TdGFydDsKKyAgICBpbnQgbV90
b2tlbjsKICAgICBpbnQgbV9saW5lTnVtYmVyOwogICAgIGludCBtX2xhc3RTZWxlY3RvckxpbmVO
dW1iZXI7CiAKLS0gCjEuNy4yLjUKCg==
</data>
<flag name="commit-queue"
          id="108701"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111241</attachid>
            <date>2011-10-17 03:56:46 -0700</date>
            <delta_ts>2011-12-12 00:57:53 -0800</delta_ts>
            <desc>next draft</desc>
            <filename>0001-css-tokenizer.patch</filename>
            <type>text/plain</type>
            <size>53706</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA5NzcyMjE5MzQ1NWEwNDI2Y2U5NWE0MjQ2NWM2MmFlZjlmZDQ2YzdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNyBPY3QgMjAxMSAwMDo0ODozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGNz
cy10b2tlbml6ZXIKCi0tLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgfCAxNDI1
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmggICB8ICAgNDIgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTIwNyBpbnNlcnRp
b25zKCspLCAyNjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBm
NmNiNWY3Li4xNWE3ODczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTg2LDggKzE4
NiwxMCBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgLCBt
X3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQogICAgICwgbV9ydWxlUmFuZ2VNYXAo
MCkKICAgICAsIG1fY3VycmVudFJ1bGVEYXRhKDApCisgICAgLCBtX3BhcnNpbmdNb2RlKE5vcm1h
bE1vZGUpCisgICAgLCBtX2RhdGFTdGFydCgwKQogICAgICwgbV9kYXRhKDApCi0gICAgLCB5eV9z
dGFydCgxKQorICAgICwgbV90b2tlbigwKQogICAgICwgbV9saW5lTnVtYmVyKDApCiAgICAgLCBt
X2xhc3RTZWxlY3RvckxpbmVOdW1iZXIoMCkKICAgICAsIG1fYWxsb3dJbXBvcnRSdWxlcyh0cnVl
KQpAQCAtMjA2LDcgKzIwOCw3IEBAIENTU1BhcnNlcjo6fkNTU1BhcnNlcigpCiAKICAgICBkZWxl
dGUgbV92YWx1ZUxpc3Q7CiAKLSAgICBmYXN0RnJlZShtX2RhdGEpOworICAgIGZhc3RGcmVlKG1f
ZGF0YVN0YXJ0KTsKIAogICAgIGZhc3REZWxldGVBbGxWYWx1ZXMobV9mbG9hdGluZ1NlbGVjdG9y
cyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdTZWxlY3RvclZlY3RvcnMpOwpAQCAt
MjM1LDI2ICsyMzcsMjYgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIq
IHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIKIHsKICAgICBpbnQgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aCgpICsgc3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3VmZml4KSAr
IDI7CiAKLSAgICBmYXN0RnJlZShtX2RhdGEpOwotICAgIG1fZGF0YSA9IHN0YXRpY19jYXN0PFVD
aGFyKj4oZmFzdE1hbGxvYyhsZW5ndGggKiBzaXplb2YoVUNoYXIpKSk7CisgICAgZmFzdEZyZWUo
bV9kYXRhU3RhcnQpOworICAgIG1fZGF0YVN0YXJ0ID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0
TWFsbG9jKGxlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RybGVuKHByZWZpeCk7IGkrKykKLSAgICAgICAgbV9kYXRhW2ldID0gcHJlZml4W2ld
OworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHByZWZpeFtpXTsKIAotICAgIG1lbWNweShtX2Rh
dGEgKyBzdHJsZW4ocHJlZml4KSwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KG1fZGF0YVN0YXJ0ICsgc3RybGVuKHByZWZp
eCksIHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikp
OwogCiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdHJsZW4ocHJlZml4KSArIHN0cmluZy5sZW5ndGgo
KTsKICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN0cmxlbihzdWZmaXgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0gICAgICAgIG1fZGF0YVtpXSA9IHN1
ZmZpeFtpIC0gc3RhcnRdOworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHN1ZmZpeFtpIC0gc3Rh
cnRdOwogCi0gICAgbV9kYXRhW2xlbmd0aCAtIDFdID0gMDsKLSAgICBtX2RhdGFbbGVuZ3RoIC0g
Ml0gPSAwOworICAgIG1fZGF0YVN0YXJ0W2xlbmd0aCAtIDFdID0gMDsKKyAgICBtX2RhdGFTdGFy
dFtsZW5ndGggLSAyXSA9IDA7CiAKLSAgICB5eV9ob2xkX2NoYXIgPSAwOwotICAgIHl5bGVuZyA9
IDA7Ci0gICAgeXl0ZXh0ID0geXlfY19idWZfcCA9IG1fZGF0YTsKLSAgICB5eV9ob2xkX2NoYXIg
PSAqeXlfY19idWZfcDsKKyAgICBtX2RhdGEgPSBtX3Rva2VuU3RhcnQgPSBtX2RhdGFTdGFydDsK
ICAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKKyNpZiAwCisvKiBERUJVRyAqLyBwcmludGYoIj09
PT09PT09PT09PT09PT09PT09IHNldHVwUGFyc2VyID09PT09PT09PT09PT09PT09PT09PT1cbiIp
OworI2VuZGlmCiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQq
IHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0TGluZU51bWJlciwgU3R5bGVS
dWxlUmFuZ2VNYXAqIHJ1bGVSYW5nZU1hcCkKQEAgLTY4MDEsMjMyICs2ODAzLDExOTAgQEAgc3Rh
dGljIGlubGluZSBpbnQgeXllcnJvcihjb25zdCBjaGFyKikgeyByZXR1cm4gMTsgfQogCiAjaW5j
bHVkZSAiQ1NTR3JhbW1hci5oIgogCi1pbnQgQ1NTUGFyc2VyOjpsZXgodm9pZCogeXlsdmFsV2l0
aG91dFR5cGUpCitlbnVtIENoYXJhY3RlclR5cGUgeworICAgIC8vIFR5cGVzIGZvciB0aGUgbWFp
biBzd2l0Y2guCisKKyAgICAvLyBUaGUgZmlyc3QgNCB0eXBlcyBtdXN0IGJlIGdyb3VwZWQgdG9n
ZXRoZXIsIGFzIHRoZXkKKyAgICAvLyByZXByZXNlbnQgdGhlIGFsbG93ZWQgY2hhcnMgaW4gYW4g
aWRlbnRpZmllci4KKyAgICBDaGFyYWN0ZXJDYXNlbGVzc1UsCisgICAgQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorICAgIENoYXJhY3Rlck51bWJlciwKKyAgICBDaGFyYWN0ZXJEYXNoLAorCisg
ICAgQ2hhcmFjdGVyT3RoZXIsCisgICAgQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKyAgICBDaGFyYWN0
ZXJFbmRNZWRpYVF1ZXJ5LAorICAgIENoYXJhY3RlckVuZE50aENoaWxkLAorICAgIENoYXJhY3Rl
clF1b3RlLAorICAgIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyaywKKyAgICBDaGFyYWN0ZXJIYXNo
bWFyaywKKyAgICBDaGFyYWN0ZXJEb2xsYXIsCisgICAgQ2hhcmFjdGVyQXN0ZXJpc2ssCisgICAg
Q2hhcmFjdGVyUGx1cywKKyAgICBDaGFyYWN0ZXJEb3QsCisgICAgQ2hhcmFjdGVyU2xhc2gsCisg
ICAgQ2hhcmFjdGVyTGVzcywKKyAgICBDaGFyYWN0ZXJBdCwKKyAgICBDaGFyYWN0ZXJCYWNrU2xh
c2gsCisgICAgQ2hhcmFjdGVyWG9yLAorICAgIENoYXJhY3RlclZlcnRpY2FsQmFyLAorICAgIENo
YXJhY3RlclRpbGRlLAorfTsKKworLy8gMTI4IEFTQ0lJIGNvZGVzCitzdGF0aWMgY29uc3QgQ2hh
cmFjdGVyVHlwZSB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWzEyOF0gPSB7CisvKiAgIDAgLSBOdWxs
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDEgLSBTdGFydCBvZiBIZWFk
aW5nICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDIgLSBTdGFydCBvZiBUZXh0ICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgIDMgLSBFbmQgb2YgVGV4dCAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgIDQgLSBFbmQgb2YgVHJhbnNtLiAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgIDUgLSBFbnF1aXJ5ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDYgLSBB
Y2tub3dsZWRnbWVudCAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDcgLSBCZWxsICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDggLSBCYWNrIFNwYWNlICAgICAgICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDkgLSBIb3Jpem9udGFsIFRhYiAgICAgKi8gQ2hhcmFj
dGVyV2hpdGVTcGFjZSwKKy8qICAxMCAtIExpbmUgRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJX
aGl0ZVNwYWNlLAorLyogIDExIC0gVmVydGljYWwgVGFiICAgICAgICovIENoYXJhY3Rlck90aGVy
LAorLyogIDEyIC0gRm9ybSBGZWVkICAgICAgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisv
KiAgMTMgLSBDYXJyaWFnZSBSZXR1cm4gICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAx
NCAtIFNoaWZ0IE91dCAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxNSAtIFNoaWZ0
IEluICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxNiAtIERhdGEgTGluZSBFc2Nh
cGUgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxNyAtIERldmljZSBDb250cm9sIDEgICAqLyBD
aGFyYWN0ZXJPdGhlciwKKy8qICAxOCAtIERldmljZSBDb250cm9sIDIgICAqLyBDaGFyYWN0ZXJP
dGhlciwKKy8qICAxOSAtIERldmljZSBDb250cm9sIDMgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8q
ICAyMCAtIERldmljZSBDb250cm9sIDQgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMSAtIE5l
Z2F0aXZlIEFjay4gICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMiAtIFN5bmNocm9ub3Vz
IElkbGUgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMyAtIEVuZCBvZiBUcmFuc21pdCAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNCAtIENhbmNlbCAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJPdGhlciwKKy8qICAyNSAtIEVuZCBvZiBNZWRpdW0gICAgICAqLyBDaGFyYWN0ZXJPdGhlciwK
Ky8qICAyNiAtIFN1YnN0aXR1dGUgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNyAt
IEVzY2FwZSAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyOCAtIEZpbGUgU2Vw
YXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyOSAtIEdyb3VwIFNlcGFyYXRvciAg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzMCAtIFJlY29yZCBTZXBhcmF0b3IgICAqLyBDaGFy
YWN0ZXJPdGhlciwKKy8qICAzMSAtIFVuaXQgU2VwYXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICAzMiAtIFNwYWNlICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAor
LyogIDMzIC0gISAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyaywK
Ky8qICAzNCAtICIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJRdW90ZSwKKy8qICAzNSAt
ICMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJIYXNobWFyaywKKy8qICAzNiAtICQgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb2xsYXIsCisvKiAgMzcgLSAlICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzggLSAmICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgMzkgLSAnICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
UXVvdGUsCisvKiAgNDAgLSAoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgNDEgLSApICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCisvKiAg
NDIgLSAqICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQXN0ZXJpc2ssCisvKiAgNDMgLSAr
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUGx1cywKKy8qICA0NCAtICwgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA0NSAtIC0gICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJEYXNoLAorLyogIDQ2IC0gLiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ckRvdCwKKy8qICA0NyAtIC8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJTbGFzaCwKKy8q
ICA0OCAtIDAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNDkgLSAx
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDUwIC0gMiAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1MSAtIDMgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTIgLSA0ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyTnVtYmVyLAorLyogIDUzIC0gNSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51
bWJlciwKKy8qICA1NCAtIDYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisv
KiAgNTUgLSA3ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU2IC0g
OCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NyAtIDkgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTggLSA6ICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNTkgLSA7ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyRW5kTWVkaWFRdWVyeSwKKy8qICA2MCAtIDwgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJMZXNzLAorLyogIDYxIC0gPSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVy
LAorLyogIDYyIC0gPiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDYz
IC0gPyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDY0IC0gQCAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlckF0LAorLyogIDY1IC0gQSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2NiAtIEIgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjcgLSBDICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY4IC0gRCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2OSAtIEUgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzAgLSBGICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDcxIC0gRyAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MiAtIEggICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzMgLSBJICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc0IC0gSiAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NSAtIEsgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzYgLSBMICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc3IC0gTSAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3OCAtIE4gICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzkgLSBPICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgwIC0gUCAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MSAtIFEg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODIgLSBS
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgzIC0g
UyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NCAt
IFQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODUg
LSBVICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQ2FzZWxlc3NVLAorLyogIDg2IC0gViAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NyAtIFcg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODggLSBY
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg5IC0g
WSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5MCAt
IFogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTEg
LSBbICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgOTIgLSBcICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQmFja1NsYXNoLAorLyogIDkzIC0gXSAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDk0IC0gXiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlclhvciwKKy8qICA5NSAtIF8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAgOTYgLSBgICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgOTcgLSBhICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogIDk4IC0gYiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qICA5OSAtIGMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAxMDAgLSBkICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogMTAxIC0gZSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qIDEwMiAtIGYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAxMDMgLSBnICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogMTA0IC0gaCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDEwNSAtIGkgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMDYgLSBqICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogMTA3IC0gayAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qIDEwOCAtIGwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDkgLSBtICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogMTEwIC0gbiAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExMSAtIG8gICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTIgLSBwICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTEzIC0gcSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExNCAtIHIgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTUgLSBzICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE2IC0gdCAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExNyAtIHUgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJDYXNlbGVzc1UsCisvKiAxMTggLSB2ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE5IC0gdyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEyMCAtIHggICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMjEgLSB5ICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTIyIC0geiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEyMyAtIHsgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJFbmRNZWRpYVF1ZXJ5LAorLyogMTI0IC0gfCAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlclZlcnRpY2FsQmFyLAorLyogMTI1IC0gfSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogMTI2IC0gfiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclRp
bGRlLAorLyogMTI3IC0gRGVsZXRlICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorfTsK
KworLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBDU1MgdG9rZW5pemVyLgorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNDU1NMZXR0ZXIoVUNoYXIgY2hyKQogewotICAgIFlZU1RZUEUqIHl5bHZh
bCA9IHN0YXRpY19jYXN0PFlZU1RZUEUqPih5eWx2YWxXaXRob3V0VHlwZSk7Ci0gICAgaW50IGxl
bmd0aDsKKyAgICByZXR1cm4gY2hyID49IDEyOCB8fCB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzW2No
cl0gPD0gQ2hhcmFjdGVyRGFzaDsKK30KIAotICAgIGxleCgpOworc3RhdGljIGlubGluZSBib29s
IGlzQ1NTRXNjYXBlKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49ICcgJyAmJiBjaHIg
IT0gMTI3OworfQogCi0gICAgVUNoYXIqIHQgPSB0ZXh0KCZsZW5ndGgpOworc3RhdGljIGlubGlu
ZSBib29sIGlzVVJJTGV0dGVyKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gKGNociA+PSAnKicg
JiYgY2hyICE9IDEyNykgfHwgKGNociA+PSAnIycgJiYgY2hyIDw9ICcmJykgfHwgY2hyID09ICch
JzsKK30KIAotICAgIHN3aXRjaCAodG9rZW4oKSkgewotICAgIGNhc2UgV0hJVEVTUEFDRToKLSAg
ICBjYXNlIFNHTUxfQ0Q6Ci0gICAgY2FzZSBJTkNMVURFUzoKLSAgICBjYXNlIERBU0hNQVRDSDoK
LSAgICAgICAgYnJlYWs7CitzdGF0aWMgaW5saW5lIFVDaGFyIGxvd2VyY2FzZUNoYXJhY3RlcihV
Q2hhciBjaHIpCit7CisgICAgcmV0dXJuIGNociB8IDB4MjA7Cit9CiAKLSAgICBjYXNlIFVSSToK
LSAgICBjYXNlIFNUUklORzoKLSAgICBjYXNlIElERU5UOgotICAgIGNhc2UgTlRIOgotICAgIGNh
c2UgSEVYOgotICAgIGNhc2UgSURTRUw6Ci0gICAgY2FzZSBESU1FTjoKLSAgICBjYXNlIFVOSUNP
REVSQU5HRToKLSAgICBjYXNlIEZVTkNUSU9OOgotICAgIGNhc2UgQU5ZRlVOQ1RJT046Ci0gICAg
Y2FzZSBOT1RGVU5DVElPTjoKLSAgICBjYXNlIENBTENGVU5DVElPTjoKLSAgICBjYXNlIE1JTkZV
TkNUSU9OOgotICAgIGNhc2UgTUFYRlVOQ1RJT046Ci0gICAgICAgIHl5bHZhbC0+c3RyaW5nLmNo
YXJhY3RlcnMgPSB0OwotICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBsZW5ndGg7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJTVBPUlRfU1lNOgotICAgIGNhc2UgUEFHRV9TWU06
Ci0gICAgY2FzZSBNRURJQV9TWU06Ci0gICAgY2FzZSBGT05UX0ZBQ0VfU1lNOgotICAgIGNhc2Ug
Q0hBUlNFVF9TWU06Ci0gICAgY2FzZSBOQU1FU1BBQ0VfU1lNOgotICAgIGNhc2UgV0VCS0lUX0tF
WUZSQU1FU19TWU06Ci0KLSAgICBjYXNlIElNUE9SVEFOVF9TWU06Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBRRU1TOgotICAgICAgICBsZW5ndGgtLTsKLSAgICBjYXNlIEdSQURTOgotICAg
IGNhc2UgVFVSTlM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNhc2UgREVHUzoKLSAgICBjYXNl
IFJBRFM6Ci0gICAgY2FzZSBLSEVSVFo6Ci0gICAgY2FzZSBSRU1TOgotICAgICAgICBsZW5ndGgt
LTsKLSAgICBjYXNlIE1TRUNTOgotICAgIGNhc2UgSEVSVFo6Ci0gICAgY2FzZSBFTVM6Ci0gICAg
Y2FzZSBFWFM6Ci0gICAgY2FzZSBQWFM6Ci0gICAgY2FzZSBDTVM6Ci0gICAgY2FzZSBNTVM6Ci0g
ICAgY2FzZSBJTlM6Ci0gICAgY2FzZSBQVFM6Ci0gICAgY2FzZSBQQ1M6Ci0gICAgICAgIGxlbmd0
aC0tOwotICAgIGNhc2UgU0VDUzoKLSAgICBjYXNlIFBFUkNFTlRBR0U6Ci0gICAgICAgIGxlbmd0
aC0tOwotICAgIGNhc2UgRkxPQVRUT0tFTjoKLSAgICBjYXNlIElOVEVHRVI6Ci0gICAgICAgIHl5
bHZhbC0+bnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKHQsIGxlbmd0aCk7Ci0gICAgICAgIGJy
ZWFrOworc3RhdGljIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKFVDaGFy
KiBkYXRhKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoZGF0YVswXSkgfHwgZGF0YVswXSA9
PSAnXycgfHwgZGF0YVswXSA+PSAxMjgKKyAgICAgICAgfHwgKGRhdGFbMF0gPT0gJ1xcJyAmJiBp
c0NTU0VzY2FwZShkYXRhWzFdKSk7Cit9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
K3N0YXRpYyBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciBjc3NDaGFyYWN0ZXIsIFVDaGFyIGNo
YXJhY3RlcikKK3sKKyAgICBBU1NFUlQoY2hhcmFjdGVyID49ICdhJyAmJiBjaGFyYWN0ZXIgPD0g
J3onKTsKKyAgICByZXR1cm4gTElLRUxZKGxvd2VyY2FzZUNoYXJhY3Rlcihjc3NDaGFyYWN0ZXIp
ID09IGNoYXJhY3Rlcik7Cit9CisKK3N0YXRpYyBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciog
Y3NzU3RyaW5nLCBjb25zdCBjaGFyKiBjb25zdGFudFN0cmluZykKK3sKKyAgICAvLyBDb21wYXJl
IGFuIFVDaGFyIG1lbW9yeSBkYXRhIHdpdGggYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLgorICAg
IGRvIHsKKyAgICAgICAgLy8gVGhlIGlucHV0IG11c3QgYmUgcGFydCBvZiBhbiBpZGVudGlmaWVy
IGlmIGNvbnN0YW50Q2hhciBvciBjb25zdFN0cmluZworICAgICAgICAvLyBjb250YWlucyAnLScu
IE90aGVyd2lzZSAnXHInIHwgMHgyMCB3b3VsZCBiZSBlcXVhbCB0byAnLScuCisgICAgICAgIEFT
U0VSVCgoKmNvbnN0YW50U3RyaW5nID49ICdhJyAmJiAqY29uc3RhbnRTdHJpbmcgPD0gJ3onKSB8
fCAqY29uc3RhbnRTdHJpbmcgPT0gJy0nKTsKKyAgICAgICAgQVNTRVJUKCpjb25zdGFudFN0cmlu
ZyAhPSAnLScgfHwgaXNDU1NMZXR0ZXIoKmNzc1N0cmluZykpOworICAgICAgICBpZiAoKCgqY3Nz
U3RyaW5nKyspIHwgMHgyMCkgIT0gKCpjb25zdGFudFN0cmluZysrKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9IHdoaWxlICgqY29uc3RhbnRTdHJpbmcpOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgVUNoYXIqIGNoZWNrRXNjYXBlKFVDaGFyKiBkYXRhKQoreworICAg
IEFTU0VSVCgqZGF0YSA9PSAnXFwnKTsKKworICAgICsrZGF0YTsKKyAgICBpZiAoIWlzQ1NTRXNj
YXBlKCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0
KCpkYXRhKSkgeworICAgICAgICBpbnQgbGVuZ3RoID0gNjsKKworICAgICAgICBkbyB7CisgICAg
ICAgICAgICArK2RhdGE7CisgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqZGF0YSkg
JiYgLS1sZW5ndGgpOworCisgICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBlc2Nh
cGUgc2VxdWVuY2UuCisgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqZGF0YSkpCisgICAgICAgICAg
ICArK2RhdGE7CisgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KKyAgICByZXR1cm4gZGF0YSAr
IDE7Cit9CiAKLSAgICByZXR1cm4gdG9rZW4oKTsKK3N0YXRpYyBpbmxpbmUgVUNoYXIqIHNraXBX
aGl0ZVNwYWNlcyhVQ2hhciogZGF0YSkKK3sKKyAgICB3aGlsZSAoVU5MSUtFTFkoKmRhdGEgPD0g
JyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWypkYXRhXSA9PSBDaGFyYWN0ZXJXaGl0ZVNw
YWNlKSkpCisgICAgICAgICsrZGF0YTsKKyAgICByZXR1cm4gZGF0YTsKIH0KIAotdm9pZCBDU1NQ
YXJzZXI6OnJlY2hlY2tBdEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAg
ICBTdHJpbmcgcnVsZU5hbWUoc3RyLCBsZW4pOwotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShy
dWxlTmFtZSwgIkBpbXBvcnQiKSkKLSAgICAgICAgeXlUb2sgPSBJTVBPUlRfU1lNOwotICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQHBhZ2UiKSkKLSAgICAgICAgeXlU
b2sgPSBQQUdFX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwg
IkBtZWRpYSIpKQotICAgICAgICB5eVRvayA9IE1FRElBX1NZTTsKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBmb250LWZhY2UiKSkKLSAgICAgICAgeXlUb2sgPSBG
T05UX0ZBQ0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAi
QGNoYXJzZXQiKSkKLSAgICAgICAgeXlUb2sgPSBDSEFSU0VUX1NZTTsKLSAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBuYW1lc3BhY2UiKSkKLSAgICAgICAgeXlUb2sg
PSBOQU1FU1BBQ0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1l
LCAiQC13ZWJraXQta2V5ZnJhbWVzIikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX0tFWUZSQU1F
U19TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJALXdlYmtp
dC1tZWRpYXF1ZXJ5IikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX01FRElBUVVFUllfU1lNOwot
fQotCi1VQ2hhciogQ1NTUGFyc2VyOjp0ZXh0KGludCAqbGVuZ3RoKQotewotICAgIFVDaGFyKiBz
dGFydCA9IHl5dGV4dDsKLSAgICBpbnQgbCA9IHl5bGVuZzsKLSAgICBzd2l0Y2ggKHl5VG9rKSB7
Ci0gICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgIGwtLTsKLSAgICAgICAgLyogbm9icmVhayAqLwot
ICAgIGNhc2UgSEVYOgotICAgIGNhc2UgSURTRUw6Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAg
IGwtLTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUkk6Ci0gICAgICAgIC8vICJ1cmwoInt3
fXtzdHJpbmd9e3d9IikiCi0gICAgICAgIC8vICJ1cmwoInt3fXt1cmx9e3d9IikiCi0gICAgICAg
IC8vIHN0cmlwICJ1cmwoIiBhbmQgIikiCi0gICAgICAgIHN0YXJ0ICs9IDQ7Ci0gICAgICAgIGwg
LT0gNTsKLSAgICAgICAgLy8gc3RyaXAge3d9Ci0gICAgICAgIHdoaWxlIChsICYmIGlzSFRNTFNw
YWNlKCpzdGFydCkpIHsKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICAgICAtLWw7Ci0g
ICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGwgJiYgaXNIVE1MU3BhY2Uoc3RhcnRbbCAtIDFdKSkK
LSAgICAgICAgICAgIC0tbDsKLSAgICAgICAgaWYgKGwgJiYgKCpzdGFydCA9PSAnIicgfHwgKnN0
YXJ0ID09ICdcJycpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobCA+PSAyICYmIHN0YXJ0W2wgLSAx
XSA9PSAqc3RhcnQpOwotICAgICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAgIGwgLT0gMjsK
Ky8vIE1haW4gQ1NTIHRva2VuaXplciBmdW5jdGlvbnMuCisKK2lubGluZSBib29sIENTU1BhcnNl
cjo6aXNJZGVudGlmaWVyU3RhcnQoKQoreworICAgIC8vIENoZWNrIHdoZXRoZXIgYW4gaWRlbnRp
ZmllciBpcyBzdGFydGVkLgorICAgIHJldHVybiBpc0lkZW50aWZpZXJTdGFydEFmdGVyRGFzaCgo
Km1fZGF0YSAhPSAnLScpID8gbV9kYXRhIDogbV9kYXRhICsgMSk7Cit9CisKK2lubGluZSBVQ2hh
ciogQ1NTUGFyc2VyOjpjaGVja1N0cmluZyhVQ2hhciogZGF0YSwgVUNoYXIgcXVvdGUpCit7Cisg
ICAgLy8gU2luY2Ugd2UgY2Fubm90IHJldmVydCBlc2NhcGUgc2VxdWVuY2VzLCBzdHJpbmdzCisg
ICAgLy8gbXVzdCBiZSB2YWxpZGF0ZWQgYmVmb3JlIHBhcnNpbmcuCisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCpkYXRhID09IHF1b3RlKSkgeworICAgICAgICAgICAg
Ly8gU3RyaW5nIHBhcnNpbmcgaXMgc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgIHJldHVybiBkYXRh
ICsgMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoVU5MSUtFTFkoKCpkYXRhIDwgJyAnICYmICpk
YXRhICE9ICdcdCcpIHx8ICpkYXRhID09IDEyNykpIHsKKyAgICAgICAgICAgICAvLyBTdHJpbmcg
cGFyc2luZyBpcyBmYWlsZWQuCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoTElLRUxZKGRhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICArK2RhdGE7
CisgICAgICAgIGVsc2UgaWYgKGRhdGFbMV0gPT0gJ1xuJyB8fCBkYXRhWzFdID09ICdcZicpCisg
ICAgICAgICAgICBkYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKGRhdGFbMV0gPT0gJ1xyJykK
KyAgICAgICAgICAgIGRhdGEgKz0gZGF0YVsyXSA9PSAnXG4nID8gMyA6IDI7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgZGF0YSA9IGNoZWNrRXNjYXBlKGRhdGEpOworICAgICAgICAgICAg
aWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwogICAgIH0KK30KIAotICAgIC8v
IHByb2Nlc3MgZXNjYXBlcwotICAgIFVDaGFyKiBvdXQgPSBzdGFydDsKLSAgICBVQ2hhciogZXNj
YXBlID0gMDsKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZUVzY2FwZShVQ2hhciomIHJlc3VsdCkKK3sK
KyAgICBBU1NFUlQoKm1fZGF0YSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKG1fZGF0YVsxXSkpOwog
Ci0gICAgYm9vbCBzYXdFc2NhcGUgPSBmYWxzZTsKKyAgICArK21fZGF0YTsKKyAgICBpZiAoaXNB
U0NJSUhleERpZ2l0KCptX2RhdGEpKSB7CisgICAgICAgIHVuc2lnbmVkIHVuaWNvZGUgPSAwOwor
ICAgICAgICBpbnQgbGVuZ3RoID0gNjsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgIFVDaGFyKiBjdXJyZW50ID0gc3RhcnQgKyBpOwotICAgICAgICBpZiAoZXNj
YXBlID09IGN1cnJlbnQgLSAxKSB7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpj
dXJyZW50KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh5eVRv
ayA9PSBTVFJJTkcgJiYKLSAgICAgICAgICAgICAgICAgKCpjdXJyZW50ID09ICdcbicgfHwgKmN1
cnJlbnQgPT0gJ1xyJyB8fCAqY3VycmVudCA9PSAnXGYnKSkgewotICAgICAgICAgICAgICAgIC8v
ICMjIyBoYW5kbGUgXHJcbiBjYXNlCi0gICAgICAgICAgICAgICAgaWYgKCpjdXJyZW50ICE9ICdc
cicpCi0gICAgICAgICAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpbiBhbGwgb3RoZXIgY2FzZXMg
Y29weSB0aGUgY2hhciB0byBvdXRwdXQKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAg
Km91dCsrID0gKmN1cnJlbnQ7Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHVuaWNvZGUgPSAodW5pY29kZSA8
PCA0KSArIHRvQVNDSUlIZXhWYWx1ZSgqbV9kYXRhKyspOworICAgICAgICB9IHdoaWxlICgtLWxl
bmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQoKm1fZGF0YSkpOworCisgICAgICAgIC8vIENoYXJhY3Rl
cnMgYWJvdmUgMHhmZmZmIGFyZSBub3QgaGFuZGxlZC4KKyAgICAgICAgaWYgKHVuaWNvZGUgPiAw
eGZmZmYpCisgICAgICAgICAgICB1bmljb2RlID0gMHhmZmZkOworCisgICAgICAgIC8vIE9wdGlv
bmFsIHNwYWNlIGFmdGVyIHRoZSBlc2NhcGUgc2VxdWVuY2UuCisgICAgICAgIGlmIChpc0hUTUxT
cGFjZSgqbV9kYXRhKSkKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAqcmVzdWx0ID0g
dW5pY29kZTsKKyAgICB9IGVsc2UKKyAgICAgICAgKnJlc3VsdCA9ICptX2RhdGErKzsKKyAgICAr
K3Jlc3VsdDsKK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUlkZW50aWZpZXIoVUNo
YXIqJiByZXN1bHQpCit7CisgICAgLy8gSWYgYSB2YWxpZCBpZGVudGlmaWVyIHN0YXJ0IGlzIGZv
dW5kLCB3ZSBjYW4gc2FmZWx5CisgICAgLy8gcGFyc2UgdGhlIGlkZW50aWZpZXIgdW50aWwgdGhl
IG5leHQgaW52YWxpZCBjaGFyYWN0ZXIuCisgICAgQVNTRVJUKGlzSWRlbnRpZmllclN0YXJ0KCkp
OworICAgIGJvb2wgaGFzRXNjYXBlID0gZmFsc2U7CisgICAgZG8geworICAgICAgICBpZiAoTElL
RUxZKCptX2RhdGEgIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9kYXRhKys7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaGFzRXNjYXBlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGVzY2FwZSA9
PSBjdXJyZW50IC0gMiAmJiB5eVRvayA9PSBTVFJJTkcgJiYKLSAgICAgICAgICAgICAqKGN1cnJl
bnQtMSkgPT0gJ1xyJyAmJiAqY3VycmVudCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBlc2NhcGUg
PSAwOwotICAgICAgICAgICAgY29udGludWU7CisgICAgfSB3aGlsZSAoaXNDU1NMZXR0ZXIobV9k
YXRhWzBdKSB8fCAobV9kYXRhWzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUobV9kYXRhWzFdKSkp
OworICAgIHJldHVybiBoYXNFc2NhcGU7Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6cGFy
c2VTdHJpbmcoVUNoYXIqJiByZXN1bHQsIFVDaGFyIHF1b3RlKQoreworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09IHF1b3RlKSkgeworICAgICAgICAg
ICAgLy8gU3RyaW5nIHBhcnNpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgICsrbV9kYXRhOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChlc2NhcGUgPiBjdXJyZW50
IC0gNyAmJiBpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgICAgIC8vIGFkZCBlc2NhcGVkIGNoYXIK
LSAgICAgICAgICAgIHVuc2lnbmVkIHVjID0gMDsKLSAgICAgICAgICAgIGVzY2FwZSsrOwotICAg
ICAgICAgICAgd2hpbGUgKGVzY2FwZSA8IGN1cnJlbnQpIHsKLSAgICAgICAgICAgICAgICB1YyAq
PSAxNjsKLSAgICAgICAgICAgICAgICB1YyArPSB0b0FTQ0lJSGV4VmFsdWUoKmVzY2FwZSk7Ci0g
ICAgICAgICAgICAgICAgZXNjYXBlKys7CisgICAgICAgIEFTU0VSVCgoKm1fZGF0YSA+PSAnICcg
fHwgKm1fZGF0YSA9PSAnXHQnKSAmJiAqbV9kYXRhICE9IDEyNyk7CisKKyAgICAgICAgaWYgKExJ
S0VMWShtX2RhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9kYXRh
Kys7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAnXG4nIHx8IG1fZGF0YVsxXSA9PSAn
XGYnKQorICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsx
XSA9PSAnXHInKQorICAgICAgICAgICAgbV9kYXRhICs9IG1fZGF0YVsyXSA9PSAnXG4nID8gMyA6
IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CisgICAg
fQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlVVJJKFVDaGFyKiYgc3RhcnQsIFVD
aGFyKiYgcmVzdWx0KQoreworICAgIFVDaGFyKiB1cmlTdGFydCA9IHNraXBXaGl0ZVNwYWNlcyht
X2RhdGEpOworCisgICAgaWYgKCp1cmlTdGFydCA9PSAnIicgfHwgKnVyaVN0YXJ0ID09ICdcJycp
IHsKKyAgICAgICAgVUNoYXIgcXVvdGUgPSAqdXJpU3RhcnQ7CisgICAgICAgICsrdXJpU3RhcnQ7
CisKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IGNoZWNrU3RyaW5nKHVyaVN0YXJ0LCBxdW90
ZSk7CisgICAgICAgIGlmICghc3RyaW5nRW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBzdHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsKKyAgICAgICAgaWYgKCpz
dHJpbmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0YXJ0ID0g
cmVzdWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHBhcnNlU3RyaW5nKHJlc3VsdCwg
cXVvdGUpOworCisgICAgICAgIG1fZGF0YSA9IHN0cmluZ0VuZCArIDE7CisgICAgICAgIG1fdG9r
ZW4gPSBVUkk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IHVyaVN0
YXJ0OworCisgICAgICAgIHdoaWxlIChpc1VSSUxldHRlcigqc3RyaW5nRW5kKSkgeworICAgICAg
ICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJ1xcJykKKyAgICAgICAgICAgICAgICArK3N0cmluZ0Vu
ZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0cmluZ0VuZCA9IGNoZWNr
RXNjYXBlKHN0cmluZ0VuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmdFbmQpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGNh
bid0IGhhbmRsZSBjaGFycyBvdXRzaWRlIHVjczIKLSAgICAgICAgICAgIGlmICh1YyA+IDB4ZmZm
ZikKLSAgICAgICAgICAgICAgICB1YyA9IDB4ZmZmZDsKLSAgICAgICAgICAgICpvdXQrKyA9IHVj
OwotICAgICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAgICAgICAgIGlmIChpc0hUTUxTcGFjZSgq
Y3VycmVudCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKCFlc2NhcGUgJiYgKmN1cnJlbnQgPT0gJ1xcJykgewotICAgICAgICAgICAgZXNjYXBlID0g
Y3VycmVudDsKLSAgICAgICAgICAgIHNhd0VzY2FwZSA9IHRydWU7Ci0gICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBzdHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsK
KyAgICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHN0YXJ0ID0gcmVzdWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHdoaWxl
IChpc1VSSUxldHRlcigqbV9kYXRhKSkgeworICAgICAgICAgICAgaWYgKExJS0VMWSgqbV9kYXRh
ICE9ICdcXCcpKQorICAgICAgICAgICAgICAgICpyZXN1bHQrKyA9ICptX2RhdGErKzsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJzZUVzY2FwZShyZXN1bHQpOwogICAgICAg
ICB9Ci0gICAgICAgICpvdXQrKyA9ICpjdXJyZW50OworCisgICAgICAgIG1fZGF0YSA9IHN0cmlu
Z0VuZCArIDE7CisgICAgICAgIG1fdG9rZW4gPSBVUkk7CisgICAgfQorfQorCitpbmxpbmUgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVW5pY29kZVJhbmdlKCkKK3sKKyAgICBVQ2hhciogZGF0YSA9IG1f
ZGF0YSArIDE7CisgICAgaW50IGxlbmd0aCA9IDY7CisgICAgQVNTRVJUKCptX2RhdGEgPT0gJysn
KTsKKworICAgIHdoaWxlIChpc0FTQ0lJSGV4RGlnaXQoKmRhdGEpICYmIGxlbmd0aCkgeworICAg
ICAgICArK2RhdGE7CisgICAgICAgIC0tbGVuZ3RoOworICAgIH0KKworICAgIGlmIChsZW5ndGgg
JiYgKmRhdGEgPT0gJz8nKSB7CisgICAgICAgIC8vIEF0IG1vc3QgNSBoZXggZGlnaXQgZm9sbG93
ZWQgYnkgYSBxdWVzdGlvbiBtYXJrLgorICAgICAgICBkbyB7CisgICAgICAgICAgICArK2RhdGE7
CisgICAgICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgfSB3aGlsZSAoKmRhdGEgPT0gJz8nICYm
IGxlbmd0aCk7CisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KLSAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgIC8vIGFkZCBlc2NhcGVkIGNoYXIKLSAg
ICAgICAgdW5zaWduZWQgdWMgPSAwOwotICAgICAgICBlc2NhcGUrKzsKLSAgICAgICAgd2hpbGUg
KGVzY2FwZSA8IHN0YXJ0K2wpIHsKLSAgICAgICAgICAgIHVjICo9IDE2OwotICAgICAgICAgICAg
dWMgKz0gdG9BU0NJSUhleFZhbHVlKCplc2NhcGUpOwotICAgICAgICAgICAgZXNjYXBlKys7CisK
KyAgICBpZiAobGVuZ3RoIDwgNikgeworICAgICAgICAvLyBBdCBsZWFzdCBvbmUgaGV4IGRpZ2l0
LgorICAgICAgICBpZiAoZGF0YVswXSA9PSAnLScgJiYgaXNBU0NJSUhleERpZ2l0KGRhdGFbMV0p
KSB7CisgICAgICAgICAgICAvLyBGb2xsb3dlZCBieSBhIGRhc2ggYW5kIGEgaGV4IGRpZ2l0Lgor
ICAgICAgICAgICAgKytkYXRhOworICAgICAgICAgICAgbGVuZ3RoID0gNjsKKyAgICAgICAgICAg
IGRvIHsKKyAgICAgICAgICAgICAgICArK2RhdGE7CisgICAgICAgICAgICB9IHdoaWxlICgtLWxl
bmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQoKmRhdGEpKTsKICAgICAgICAgfQotICAgICAgICAvLyBj
YW4ndCBoYW5kbGUgY2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgIGlmICh1YyA+IDB4ZmZmZikK
LSAgICAgICAgICAgIHVjID0gMHhmZmZkOwotICAgICAgICAqb3V0KysgPSB1YzsKKyAgICAgICAg
bV9kYXRhID0gZGF0YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENoaWxkKCkKK3sKKyAg
ICBVQ2hhciogZGF0YSA9IG1fZGF0YTsKKworICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQoKmRhdGEp
KQorICAgICAgICArK2RhdGE7CisgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCgqZGF0YSwgJ24nKSkg
eworICAgICAgICBtX2RhdGEgPSBkYXRhICsgMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZU50
aENoaWxkRXh0cmEoKQoreworICAgIFVDaGFyKiBkYXRhID0gc2tpcFdoaXRlU3BhY2VzKG1fZGF0
YSk7CisgICAgaWYgKCpkYXRhICE9ICcrJyAmJiAqZGF0YSAhPSAnLScpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGRhdGEgPSBza2lwV2hpdGVTcGFjZXMoZGF0YSArIDEpOworICAgIGlm
ICghaXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8g
eworICAgICAgICArK2RhdGE7CisgICAgfSB3aGlsZSAoaXNBU0NJSURpZ2l0KCpkYXRhKSk7CisK
KyAgICBtX2RhdGEgPSBkYXRhOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBD
U1NQYXJzZXI6OmRldGVjdEZ1bmN0aW9uVG9rZW4oaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
bGVuZ3RoID4gMCk7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisKKyAgICBzd2l0
Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChu
YW1lWzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQ2FzZWxl
c3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IE5PVEZVTkNUSU9O
OworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3UnKSAmJiBpc0Nh
c2VsZXNzRXF1YWwobmFtZVsxXSwgJ3InKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2wn
KSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBVUkk7CisgICAgICAgIHJldHVybjsKIAotICAgICps
ZW5ndGggPSBvdXQgLSBzdGFydDsKKyAgICBjYXNlIDk6CisgICAgICAgIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZSwgIm50aC1jaGlsZCIpKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50
aENoaWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAxMToKKyAgICAgICAgaWYg
KGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLW9mLXR5cGUiKSkKKyAgICAgICAgICAgIG1fcGFy
c2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKIAotICAgIC8vIElmIHdl
IGhhdmUgYW4gdW5yZWNvZ25pemVkIEAta2V5d29yZCwgYW5kIGlmIHdlIGhhbmRsZWQgYW55IGVz
Y2FwZXMgYXQgYWxsLCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIGF0dGVtcHQgdG8gYWRqdXN0IHl5
VG9rIHRvIHRoZSBjb3JyZWN0IHR5cGUuCi0gICAgaWYgKHl5VG9rID09IEFUS0VZV09SRCAmJiBz
YXdFc2NhcGUpCi0gICAgICAgIHJlY2hlY2tBdEtleXdvcmQoc3RhcnQsICpsZW5ndGgpOworICAg
IGNhc2UgMTQ6CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50aC1sYXN0LWNo
aWxkIikpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAg
ICByZXR1cm47CiAKLSAgICByZXR1cm4gc3RhcnQ7CisgICAgY2FzZSAxNjoKKyAgICAgICAgaWYg
KGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLWxhc3Qtb2YtdHlwZSIpKQorICAgICAgICAgICAg
bV9wYXJzaW5nTW9kZSA9IE50aENoaWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0K
IAotdm9pZCBDU1NQYXJzZXI6OmNvdW50TGluZXMoKQoraW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpk
ZXRlY3RNZWRpYVF1ZXJ5VG9rZW4oaW50IGxlbmd0aCkKIHsKLSAgICBmb3IgKFVDaGFyKiBjdXJy
ZW50ID0geXl0ZXh0OyBjdXJyZW50IDwgeXl0ZXh0ICsgeXlsZW5nOyArK2N1cnJlbnQpIHsKLSAg
ICAgICAgaWYgKCpjdXJyZW50ID09ICdcbicpCi0gICAgICAgICAgICArK21fbGluZU51bWJlcjsK
KyAgICBBU1NFUlQobV9wYXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSk7CisgICAgVUNoYXIq
IG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisKKyAgICBpZiAobGVuZ3RoID09IDMpIHsKKyAgICAgICAg
aWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnYScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1l
WzFdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnZCcpKQorICAgICAgICAgICAg
bV90b2tlbiA9IE1FRElBX0FORDsKKyAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5h
bWVbMF0sICduJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdvJykgJiYgaXNDYXNlbGVz
c0VxdWFsKG5hbWVbMl0sICd0JykpCisgICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfTk9UOwor
ICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDQpIHsKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVh
bChuYW1lWzBdLCAnbycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbicpCisgICAgICAg
ICAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdsJykgJiYgaXNDYXNlbGVzc0Vx
dWFsKG5hbWVbM10sICd5JykpCisgICAgICAgICAgIG1fdG9rZW4gPSBNRURJQV9PTkxZOwogICAg
IH0KIH0KIAoraW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3ROdW1iZXJUb2tlbihVQ2hhciog
dHlwZSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisKKyAgICBzd2l0
Y2ggKGxvd2VyY2FzZUNoYXJhY3Rlcih0eXBlWzBdKSkgeworICAgIGNhc2UgJ2MnOgorICAgICAg
ICBpZiAobGVuZ3RoID09IDIgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCisgICAg
ICAgICAgICBtX3Rva2VuID0gQ01TOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdkJzoK
KyAgICAgICAgaWYgKGxlbmd0aCA9PSAzICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnZScp
ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnZycpKQorICAgICAgICAgICAgbV90b2tlbiA9
IERFR1M7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2UnOgorICAgICAgICBpZiAobGVu
Z3RoID09IDIpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20n
KSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRU1TOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd4JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IEVYUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdnJzoKKyAgICAg
ICAgaWYgKGxlbmd0aCA9PSA0ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAncicpCisgICAg
ICAgICAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdhJykgJiYgaXNDYXNlbGVz
c0VxdWFsKHR5cGVbM10sICdkJykpCisgICAgICAgICAgICBtX3Rva2VuID0gR1JBRFM7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgJ2gnOgorICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYg
aXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd6JykpCisgICAgICAgICAgICBtX3Rva2VuID0gSEVS
VFo7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2knOgorICAgICAgICBpZiAobGVuZ3Ro
ID09IDIgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICduJykpCisgICAgICAgICAgICBtX3Rv
a2VuID0gSU5TOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdrJzoKKyAgICAgICAgaWYg
KGxlbmd0aCA9PSAzICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnaCcpICYmIGlzQ2FzZWxl
c3NFcXVhbCh0eXBlWzJdLCAneicpKQorICAgICAgICAgICAgbV90b2tlbiA9IEtIRVJUWjsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnbSc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMikg
eworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBNTVM7CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNz
RXF1YWwodHlwZVsxXSwgJ3MnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTVNFQ1M7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAncCc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAn
eCcpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQWFM7CisgICAgICAgICAgICBlbHNlIGlm
IChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3QnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gUFRTOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdj
JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFBDUzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlICdyJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAzKSB7CisgICAg
ICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdhJykgJiYgaXNDYXNlbGVzc0Vx
dWFsKHR5cGVbMl0sICdkJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFJBRFM7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2UnKSAmJiBpc0Nhc2Vs
ZXNzRXF1YWwodHlwZVsyXSwgJ20nKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUkVNUzsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdzJzoKKyAgICAgICAgaWYg
KGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgbV90b2tlbiA9IFNFQ1M7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgJ3QnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYgaXNDYXNlbGVz
c0VxdWFsKHR5cGVbMV0sICd1JykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwo
dHlwZVsyXSwgJ3InKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ24nKSkKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBUVVJOUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgaWYgKHR5cGVbMF0gPT0gJ18nICYmIGxlbmd0aCA9PSA1ICYmIHR5cGVbMV0gPT0gJ18n
ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncScpCisgICAgICAgICAgICAgICAgJiYgaXND
YXNlbGVzc0VxdWFsKHR5cGVbM10sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbNF0sICdt
JykpCisgICAgICAgICAgICBtX3Rva2VuID0gUUVNUzsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3REYXNoVG9rZW4oaW50IGxlbmd0aCkK
K3sKKyAgICBVQ2hhciogbmFtZSA9IG1fdG9rZW5TdGFydDsKKworICAgIGlmIChsZW5ndGggPT0g
MTEpIHsKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ3knKSAmJiBpc0Nh
c2VsZXNzRXF1YWwobmFtZSArIDEsICJ3ZWJraXQtYW4iKSkKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBBTllGVU5DVElPTjsKKyAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTBd
LCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMSwgIndlYmtpdC1taSIpKQorICAgICAg
ICAgICAgbV90b2tlbiA9IE1JTkZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZVsxMF0sICd4JykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0
LW1hIikpCisgICAgICAgICAgICBtX3Rva2VuID0gTUFYRlVOQ1RJT047CisgICAgfSBlbHNlIGlm
IChsZW5ndGggPT0gMTIgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0LWNhbGMi
KSkKKyAgICAgICAgbV90b2tlbiA9IENBTENGVU5DVElPTjsKK30KKworaW5saW5lIHZvaWQgQ1NT
UGFyc2VyOjpkZXRlY3RBdFRva2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQoreworICAg
IFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworICAgIEFTU0VSVChuYW1lWzBdID09ICdAJyAm
JiBsZW5ndGggPj0gMik7CisKKyAgICAvLyBjaGFyc2V0LCBmb250LWZhY2UsIGltcG9ydCwgbWVk
aWEsIG5hbWVzcGFjZSwgcGFnZSwKKyAgICAvLyAtd2Via2l0LWtleWZyYW1lcywgYW5kIC13ZWJr
aXQtbWVkaWFxdWVyeSBhcmUgbm90IGFmZmVjdGVkIGJ5IGhhc0VzY2FwZS4KKyAgICBzd2l0Y2gg
KGxvd2VyY2FzZUNoYXJhY3RlcihuYW1lWzFdKSkgeworICAgIGNhc2UgJ2InOgorICAgICAgICBp
ZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAobGVu
Z3RoKSB7CisgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFs
KG5hbWUgKyAyLCAib3R0b20tbGVmdCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RU
T01MRUZUX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDEzOgorICAg
ICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm90dG9tLXJpZ2h0IikpCisg
ICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTVJJR0hUX1NZTTsKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVh
bChuYW1lICsgMiwgIm90dG9tLWNlbnRlciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBC
T1RUT01DRU5URVJfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTk6
CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0b20tbGVmdC1j
b3JuZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NTEVGVENPUk5FUl9TWU07
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1yaWdodC1jb3JuZXIiKSkKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NUklHSFRDT1JORVJfU1lNOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2MnOgorICAg
ICAgICBpZiAobGVuZ3RoID09IDggJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaGFyc2V0
IikpCisgICAgICAgICAgICBtX3Rva2VuID0gQ0hBUlNFVF9TWU07CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgJ2YnOgorICAgICAgICBpZiAobGVuZ3RoID09IDEwICYmIGlzQ2FzZWxlc3NF
cXVhbChuYW1lICsgMiwgIm9udC1mYWNlIikpCisgICAgICAgICAgICBtX3Rva2VuID0gRk9OVF9G
QUNFX1NZTTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaSc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gNyAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJtcG9ydCIpKSB7CisgICAg
ICAgICAgICBtX3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CisgICAgICAgICAgICBtX3Rv
a2VuID0gSU1QT1JUX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
ICdsJzoKKyAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAobGVuZ3RoID09IDkpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwo
bmFtZSArIDIsICJlZnQtdG9wIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IExFRlRUT1Bf
U1lNOworICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMikgeworICAgICAgICAgICAgLy8g
Q2hlY2tpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRo
ZSBwb3NzaWJpbGUgY2FzZXMuCisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVb
MTFdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC1taWRkbCIpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUTUlERExFX1NZTTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzExXSwgJ20nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFt
ZSArIDIsICJlZnQtYm90dG8iKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTEVGVEJPVFRP
TV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnbSc6CisgICAg
ICAgIGlmIChsZW5ndGggPT0gNiAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJlZGlhIikp
IHsKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBNRURJQV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSAnbic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNDYXNlbGVzc0VxdWFs
KG5hbWUgKyAyLCAiYW1lc3BhY2UiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBOQU1FU1BBQ0Vf
U1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAgICAgaWYgKGxlbmd0
aCA9PSA1ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImFnZSIpKQorICAgICAgICAgICAg
bV90b2tlbiA9IFBBR0VfU1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdyJzoKKyAg
ICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
bGVuZ3RoID09IDEwKSB7CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAiaWdodC10b3AiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRUT1BfU1lNOwor
ICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMykgeworICAgICAgICAgICAgLy8gQ2hlY2tp
bmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3Nz
aWJpbGUgY2FzZXMuCisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAn
ZScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImlnaHQtbWlkZGwiKSkKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gUklHSFRNSURETEVfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAnbScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsg
MiwgImlnaHQtYm90dG8iKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRCT1RUT01f
U1lNOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3QnOgorICAgICAg
ICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAo
bGVuZ3RoKSB7CisgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJvcC1sZWZ0IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUExF
RlRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTA6CisgICAgICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3AtcmlnaHQiKSkKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gVE9QUklHSFRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAib3AtY2VudGVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUENFTlRFUl9TWU07
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1sZWZ0LWNvcm5lciIpKQorICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBUT1BMRUZUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1l
ICsgMiwgIm9wLXJpZ2h0LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BS
SUdIVENPUk5FUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSAnLSc6CisgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7CisgICAg
ICAgIGNhc2UgMTM6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJ3ZWJraXQtcnVsZSIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBX
RUJLSVRfUlVMRV9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNDoK
KyAgICAgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVy
dGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwobmFtZVsxM10sICdzJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Vi
a2l0LWRlY2wiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX0RFQ0xTX1NZTTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ2UnKSAmJiBp
c0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtdmFsdSIpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBXRUJLSVRfVkFMVUVfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgMTc6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJ3ZWJraXQtc2VsZWN0b3IiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gV0VCS0lUX1NFTEVDVE9SX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
YXNlIDE4OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtp
dC1rZXlmcmFtZXMiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX0tFWUZSQU1F
U19TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxOToKKyAgICAgICAg
ICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtbWVkaWFxdWVyeSIpKSB7
CisgICAgICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOworICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAyMjoKKyAgICAgICAgICAgIGlm
ICghaGFzRXNjYXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1rZXlmcmFt
ZS1ydWxlIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlGUkFNRV9SVUxF
X1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworaW50IENT
U1BhcnNlcjo6bGV4KHZvaWQqIHl5bHZhbFdpdGhvdXRUeXBlKQoreworICAgIFlZU1RZUEUqIHl5
bHZhbCA9IHN0YXRpY19jYXN0PFlZU1RZUEUqPih5eWx2YWxXaXRob3V0VHlwZSk7CisgICAgLy8g
V3JpdGUgcG9pbnRlciBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLgorICAgIFVDaGFyKiByZXN1bHQ7
CisgICAgYm9vbCBoYXNFc2NhcGU7CisKKyAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGlzIHRlcm1p
bmF0ZWQgYnkgdHdvIFwwLCBzbworICAgIC8vIGl0IGlzIHNhZmUgdG8gcmVhZCB0d28gY2hhcmFj
dGVycyBhaGVhZCBhbnl0aW1lLgorCisjaWZuZGVmIE5ERUJVRworICAgIC8vIEluIGRlYnVnIHdl
IGNoZWNrIHdpdGggYW4gQVNTRVJUIHRoYXQgdGhlIGxlbmd0aCBpcyA+IDAgZm9yIHN0cmluZyB0
eXBlcy4KKyAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gMDsKKyAgICB5eWx2YWwtPnN0
cmluZy5sZW5ndGggPSAwOworI2VuZGlmCisKKyAgICAvLyBUaGlzIGlzIG5vdCBhIHJlYWwgbG9v
cCwganVzdCBhbGxvd3MgdXMgdG8gYXZvaWQgZ290b3MuCisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgbV90b2tlblN0YXJ0ID0gcmVzdWx0ID0gbV9kYXRhOworICAgICAgICBtX3Rva2VuID0g
Km1fZGF0YTsKKyAgICAgICAgKyttX2RhdGE7CisKKyAgICAgICAgc3dpdGNoICgobV90b2tlbiA8
PSAxMjcpID8gdHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1ttX3Rva2VuXSA6IENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCkgeworICAgICAgICBjYXNlIENoYXJhY3RlckNhc2VsZXNzVToKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09ICcrJykpCisgICAgICAgICAgICAgICAgaWYgKHBh
cnNlVW5pY29kZVJhbmdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IFVOSUNP
REVSQU5HRTsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9
IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
ID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LgorCisgICAgICAgIGNhc2UgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
OgorICAgICAgICAgICAgLS1tX2RhdGE7CisgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlk
ZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJREVOVDsKKworICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAg
ICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAtIG1fdG9rZW5TdGFydDsKKworICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCptX2RhdGEgPT0gJygnKSkgeworICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBGVU5DVElPTjsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKKyAg
ICAgICAgICAgICAgICAgICAgZGV0ZWN0RnVuY3Rpb25Ub2tlbihyZXN1bHQgLSBtX3Rva2VuU3Rh
cnQpOworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgICsrcmVzdWx0
OworICAgICAgICAgICAgICAgICsreXlsdmFsLT5zdHJpbmcubGVuZ3RoOworCisgICAgICAgICAg
ICAgICAgaWYgKHRva2VuKCkgPT0gVVJJKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBGVU5DVElPTjsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyBy
ZWFsbHkgYW4gVVJJLgorICAgICAgICAgICAgICAgICAgICBwYXJzZVVSSSh5eWx2YWwtPnN0cmlu
Zy5jaGFyYWN0ZXJzLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5sZW5ndGggPSByZXN1bHQgLSB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSAh
PSBOb3JtYWxNb2RlKSAmJiAhaGFzRXNjYXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcGFy
c2luZ01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpCisgICAgICAgICAgICAgICAgICAgIGRldGVjdE1l
ZGlhUXVlcnlUb2tlbihyZXN1bHQgLSBtX3Rva2VuU3RhcnQpOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlICYmIHJlc3VsdCAtIG1fdG9rZW5T
dGFydCA9PSAxICYmIGlzQ2FzZWxlc3NFcXVhbCgqbV90b2tlblN0YXJ0LCAnbicpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFN0cmluZyAibiIgaXMgSURFTlQgYnV0ICJuICsgMSIgaXMgTlRI
LgorICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgICAgICAg
ICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlckRvdDoKKyAgICAgICAgICAgIGlm
ICghaXNBU0NJSURpZ2l0KG1fZGF0YVswXSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gQ2hhcmFjdGVyTnVtYmVyLgorCisgICAgICAgIGNh
c2UgQ2hhcmFjdGVyTnVtYmVyOiB7CisgICAgICAgICAgICBib29sIGRvdFNlZW4gPSAobV90b2tl
biA9PSAnLicpOworCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAg
IGlmICghaXNBU0NJSURpZ2l0KG1fZGF0YVswXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
T25seSBvbmUgZG90IGlzIGFsbG93ZWQgZm9yIGEgbnVtYmVyLAorICAgICAgICAgICAgICAgICAg
ICAvLyBhbmQgaXQgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRpZ2l0LgorICAgICAgICAgICAgICAg
ICAgICBpZiAobV9kYXRhWzBdICE9ICcuJyB8fCBkb3RTZWVuIHx8ICFpc0FTQ0lJRGlnaXQobV9k
YXRhWzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBkb3RTZWVuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
KyttX2RhdGE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3Bh
cnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkgJiYgIWRvdFNlZW4gJiYgaXNDYXNlbGVzc0VxdWFs
KCptX2RhdGEsICduJykpIHsKKyAgICAgICAgICAgICAgICAvLyAiWzAtOV0rbiIgaXMgYWx3YXlz
IGFuIE50aENoaWxkLgorICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAg
IHBhcnNlTnRoQ2hpbGRFeHRyYSgpOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Cisg
ICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsK
KyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2Vu
U3RhcnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHl5bHZhbC0+bnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKG1fdG9rZW5TdGFydCwgbV9k
YXRhIC0gbV90b2tlblN0YXJ0KTsKKworICAgICAgICAgICAgLy8gVHlwZSBvZiB0aGUgZnVuY3Rp
b24uCisgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoKSkgeworICAgICAgICAgICAg
ICAgIFVDaGFyKiB0eXBlID0gbV9kYXRhOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fZGF0
YTsKKworICAgICAgICAgICAgICAgIGhhc0VzY2FwZSA9IHBhcnNlSWRlbnRpZmllcihyZXN1bHQp
OworICAgICAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICcrJykgeworICAgICAgICAgICAgICAg
ICAgICAvLyBBbnkgaWRlbnRpZmllciBmb2xsb3dlZCBieSBhICcrJyBzaWduIGlzIGFuIGludmFs
aWQgZGltZW5zaW9uLgorICAgICAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IElOVkFMSURESU1FTjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gRElNRU47CisgICAgICAgICAgICAgICAg
ICAgIGlmICghaGFzRXNjYXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0TnVtYmVy
VG9rZW4odHlwZSwgbV9kYXRhIC0gdHlwZSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
dG9rZW4gPT0gRElNRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVk
IG51bWJlciBpcyBvdmVyd3JpdHRlbiwgYnV0IHRoaXMgaXMgaW50ZW50aW9uYWwuCisgICAgICAg
ICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0
OworICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRh
IC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmICgqbV9kYXRhID09ICclJykgeworICAgICAgICAgICAg
ICAgIC8vIEFsdGhvdWdoIHRoZSBDU1MgZ3JhbW1hciBzYXlzIHtudW19JSB3ZSBmb2xsb3cKKyAg
ICAgICAgICAgICAgICAvLyB3ZWJraXQgYXQgdGhlIG1vbWVudCB3aGljaCB1c2VzIHtudW19JSsu
CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAg
ICAgICAgICAgICAgICB9IHdoaWxlICgqbV9kYXRhID09ICclJyk7CisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IFBFUkNFTlRBR0U7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gZG90U2VlbiA/IEZMT0FUVE9LRU4gOiBJTlRFR0VSOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENoYXJhY3RlckRhc2g6CisgICAgICAg
ICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2gobV9kYXRhKSkgeworICAgICAgICAg
ICAgICAgIC0tbV9kYXRhOworICAgICAgICAgICAgICAgIGhhc0VzY2FwZSA9IHBhcnNlSWRlbnRp
ZmllcihyZXN1bHQpOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBJREVOVDsKKworICAgICAg
ICAgICAgICAgIGlmICgqbV9kYXRhID09ICcoJykgeworICAgICAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gRlVOQ1RJT047CisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0RGFzaFRva2VuKHJlc3VsdCAtIG1fdG9rZW5TdGFy
dCk7CisgICAgICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgICAgICAr
K3Jlc3VsdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01v
ZGUgPT0gTnRoQ2hpbGRNb2RlKSAmJiAhaGFzRXNjYXBlCisgICAgICAgICAgICAgICAgICAgICAg
ICAmJiByZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwobV90b2tl
blN0YXJ0WzFdLCAnbicpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4iIGlz
IElERU5UIGJ1dCAiLW4gKyAxIiBpcyBOVEguCisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJz
ZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5U
SDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fZGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0
cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9kYXRhWzBdID09ICctJyAmJiBtX2RhdGFbMV0gPT0gJz4nKSB7CisgICAgICAgICAg
ICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRN
b2RlKSkgeworICAgICAgICAgICAgICAgIC8vICItWzAtOV0rbiIgaXMgYWx3YXlzIGFuIE50aENo
aWxkLgorICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMg
PSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0
aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3Rlck90aGVyOgor
ICAgICAgICAgICAgLy8gbV90b2tlbiBpcyBzaW1wbHkgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJXaGl0ZVNwYWNlOgor
ICAgICAgICAgICAgbV90b2tlbiA9IFdISVRFU1BBQ0U7CisgICAgICAgICAgICAvLyBNaWdodCBz
dGFydCB3aXRoIGEgJ1xuJy4KKyAgICAgICAgICAgIC0tbV9kYXRhOworICAgICAgICAgICAgZG8g
eworICAgICAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICdcbicpCisgICAgICAgICAgICAgICAg
ICAgICsrbV9saW5lTnVtYmVyOworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAg
ICAgfSB3aGlsZSAoKm1fZGF0YSA8PSAnICcgJiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKm1f
ZGF0YV0gPT0gQ2hhcmFjdGVyV2hpdGVTcGFjZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBDaGFyYWN0ZXJFbmRNZWRpYVF1ZXJ5OgorICAgICAgICAgICAgaWYgKG1fcGFy
c2luZ01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpCisgICAgICAgICAgICAgICAgbV9wYXJzaW5nTW9k
ZSA9IE5vcm1hbE1vZGU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJh
Y3RlckVuZE50aENoaWxkOgorICAgICAgICAgICAgaWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hp
bGRNb2RlKQorICAgICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2RlOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJRdW90ZToKKyAgICAgICAg
ICAgIGlmIChjaGVja1N0cmluZyhtX2RhdGEsIG1fdG9rZW4pKSB7CisgICAgICAgICAgICAgICAg
KytyZXN1bHQ7CisgICAgICAgICAgICAgICAgcGFyc2VTdHJpbmcocmVzdWx0LCBtX3Rva2VuKTsK
KyAgICAgICAgICAgICAgICBtX3Rva2VuID0gU1RSSU5HOworICAgICAgICAgICAgICAgIHl5bHZh
bC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQgKyAxOworICAgICAgICAgICAgICAg
IHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAtIChtX3Rva2VuU3RhcnQgKyAxKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVy
RXhjbGFtYXRpb25NYXJrOiB7CisgICAgICAgICAgICBVQ2hhciogc3RhcnQgPSBza2lwV2hpdGVT
cGFjZXMobV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwoc3RhcnQsICJp
bXBvcnRhbnQiKSkgeworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBJTVBPUlRBTlRfU1lNOwor
ICAgICAgICAgICAgICAgIG1fZGF0YSA9IHN0YXJ0ICsgOTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJIYXNobWFy
azogeworICAgICAgICAgICAgVUNoYXIqIHN0YXJ0ID0gbV9kYXRhOworICAgICAgICAgICAgcmVz
dWx0ID0gbV9kYXRhOworCisgICAgICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KCptX2RhdGEpKSB7
CisgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgdmFsaWQgaGV4IG51bWJlciB0b2tl
bi4KKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICsrbV9kYXRhOwor
ICAgICAgICAgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqbV9kYXRhKSk7CisgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IEhFWDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5jaGFyYWN0ZXJzID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVu
Z3RoID0gbV9kYXRhIC0gc3RhcnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmll
clN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gSURTRUw7CisgICAgICAgICAg
ICAgICAgaWYgKCFwYXJzZUlkZW50aWZpZXIocmVzdWx0KSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBDaGVjayB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVt
YmVyLgorICAgICAgICAgICAgICAgICAgICBVQ2hhciogY3VycmVudCA9IHN0YXJ0OworICAgICAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gSEVYOworICAgICAgICAgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqY3VycmVudCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gSURTRUw7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIH0gd2hp
bGUgKGN1cnJlbnQgPCByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgeXls
dmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gc3RhcnQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyU2xhc2g6
CisgICAgICAgICAgICAvLyBJZ25vcmUgY29tbWVudHMuIFRoZXkgYXJlIG5vdCBldmVuIGNvbnNp
ZGVyZWQgYXMgd2hpdGUgc3BhY2VzLgorICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJyonKSB7
CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAgd2hpbGUgKG1fZGF0
YVswXSAhPSAnKicgfHwgbV9kYXRhWzFdICE9ICcvJykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV9kYXRhWzBdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICArK21fbGluZU51
bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZGF0YVswXSA9PSAnXDAnICYmIG1fZGF0
YVsxXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnRlcm1pbmF0ZWQg
Y29tbWVudHMgYXJlIHNpbXBseSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgbV9k
YXRhIC09IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJh
Y3RlckRvbGxhcjoKKyAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAg
ICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBFTkRTV0lUSDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVy
QXN0ZXJpc2s6CisgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAnPScpIHsKKyAgICAgICAgICAg
ICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQ09OVEFJTlM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlclBs
dXM6CisgICAgICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpIHsKKyAg
ICAgICAgICAgICAgICAvLyBTaW1wbGVzdCBjYXNlLiAiK1swLTldKm4iIGlzIGFsd2F5cyBOdGhD
aGlsZC4KKyAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYSgpOworICAgICAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJz
ID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJMZXNzOgor
ICAgICAgICAgICAgaWYgKG1fZGF0YVswXSA9PSAnIScgJiYgbV9kYXRhWzFdID09ICctJyAmJiBt
X2RhdGFbMl0gPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgbV9kYXRhICs9IDM7CisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlckF0OgorICAgICAgICAgICAgaWYgKGlzSWRl
bnRpZmllclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQVRLRVlXT1JEOwor
ICAgICAgICAgICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAgICAgIGhhc0VzY2FwZSA9IHBh
cnNlSWRlbnRpZmllcihyZXN1bHQpOworICAgICAgICAgICAgICAgIGRldGVjdEF0VG9rZW4ocmVz
dWx0IC0gbV90b2tlblN0YXJ0LCBoYXNFc2NhcGUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJCYWNrU2xhc2g6CisgICAgICAgICAg
ICBpZiAoaXNDU1NFc2NhcGUoKm1fZGF0YSkpIHsKKyAgICAgICAgICAgICAgICAtLW1fZGF0YTsK
KyAgICAgICAgICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gSURFTlQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFj
dGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlclhvcjoKKyAgICAgICAgICAgIGlmICgqbV9k
YXRhID09ICc9JykgeworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBCRUdJTlNXSVRIOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJWZXJ0aWNhbEJhcjoKKyAgICAgICAgICAgIGlmICgq
bV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBEQVNITUFUQ0g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIENoYXJhY3RlclRpbGRlOgorICAgICAgICAgICAgaWYgKCptX2Rh
dGEgPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IElOQ0xVREVTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisjaWYg
MAorLyogREVCVUcgKi8gVUNoYXIqIHN0YXJ0ID0gKHRva2VuKCkgPT0gVVJJIHx8IHRva2VuKCkg
PT0gU1RSSU5HIHx8IHRva2VuKCkgPT0gSEVYIHx8IHRva2VuKCkgPT0gSURTRUwpID8geXlsdmFs
LT5zdHJpbmcuY2hhcmFjdGVycyA6IG1fdG9rZW5TdGFydDsKKy8qIERFQlVHICovIGlmICh0b2tl
bigpID09IElOVkFMSURESU1FTikgKytyZXN1bHQ7CisvKiBERUJVRyAqLyBwcmludGYoIkNTUyB0
b2tlbjogWyVkXSBsaW5lOiAlZCA8IiwgdG9rZW4oKSwgbV9saW5lTnVtYmVyKTsKKy8qIERFQlVH
ICovIGlmICh0b2tlbigpID09IFVOSUNPREVSQU5HRSB8fCB0b2tlbigpID09IE5USCB8fCB0b2tl
bigpID09IEhFWCB8fCB0b2tlbigpID09IEZMT0FUVE9LRU4gfHwgdG9rZW4oKSA9PSBJTlRFR0VS
IHx8IHRva2VuKCkgPT0gUEVSQ0VOVEFHRSB8fCB0b2tlbigpID09IElNUE9SVEFOVF9TWU0pIHJl
c3VsdCA9IG1fZGF0YTsKKy8qIERFQlVHICovIGlmICh0b2tlbigpID09IFdISVRFU1BBQ0UpIHBy
aW50ZigiU1BBQ0UiKTsgZWxzZSBpZiAodG9rZW4oKSA8IDI1NikgcHJpbnRmKCIlYyIsIChjaGFy
KXRva2VuKCkpOyBlbHNlIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0IC0gc3RhcnQ7ICsraSkg
cHJpbnRmKCIlYyIsIHN0YXJ0W2ldKTsKKy8qIERFQlVHICovIHByaW50ZigiPlxuIik7CisjZW5k
aWYKKworI2lmbmRlZiBOREVCVUcKKyAgICBzd2l0Y2ggKHRva2VuKCkpIHsKKyAgICBjYXNlIFNU
UklORzoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tl
blN0YXJ0ICsgMSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJREVOVDoKKyAgICBjYXNl
IE5USDoKKyAgICBjYXNlIERJTUVOOgorICAgIGNhc2UgVU5JQ09ERVJBTkdFOgorICAgIGNhc2Ug
RlVOQ1RJT046CisgICAgY2FzZSBBTllGVU5DVElPTjoKKyAgICBjYXNlIE5PVEZVTkNUSU9OOgor
ICAgIGNhc2UgQ0FMQ0ZVTkNUSU9OOgorICAgIGNhc2UgTUlORlVOQ1RJT046CisgICAgY2FzZSBN
QVhGVU5DVElPTjoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0g
bV90b2tlblN0YXJ0ICYmIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA+IDApOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgVVJJOgorICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcuY2hhcmFj
dGVycyAmJiB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzICE9IG1fdG9rZW5TdGFydCk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBIRVg6CisgICAgY2FzZSBJRFNFTDoKKyAgICAgICAgQVNT
RVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICsgMSAmJiB5eWx2
YWwtPnN0cmluZy5sZW5ndGggPiAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gdG9rZW4oKTsKK30KKwogQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlcjo6
Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpCiB7CiAgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIHNlbGVj
dG9yID0gbmV3IENTU1BhcnNlclNlbGVjdG9yOwpAQCAtNzQwNywyNyArODM2NywyNyBAQCB2b2lk
IENTU1BhcnNlcjo6dXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCkKIAogdm9pZCBD
U1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RTdGFydCgpCiB7Ci0gICAgbV9zZWxlY3Rvckxpc3RS
YW5nZS5zdGFydCA9IHl5dGV4dCAtIG1fZGF0YTsKKyAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0
YXJ0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpt
YXJrU2VsZWN0b3JMaXN0RW5kKCkKIHsKICAgICBpZiAoIW1fY3VycmVudFJ1bGVEYXRhKQogICAg
ICAgICByZXR1cm47Ci0gICAgVUNoYXIqIGxpc3RFbmQgPSB5eXRleHQ7Ci0gICAgd2hpbGUgKGxp
c3RFbmQgPiBtX2RhdGEgKyAxKSB7CisgICAgVUNoYXIqIGxpc3RFbmQgPSBtX3Rva2VuU3RhcnQ7
CisgICAgd2hpbGUgKGxpc3RFbmQgPiBtX2RhdGFTdGFydCArIDEpIHsKICAgICAgICAgaWYgKGlz
SFRNTFNwYWNlKCoobGlzdEVuZCAtIDEpKSkKICAgICAgICAgICAgIC0tbGlzdEVuZDsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIG1fc2VsZWN0b3JMaXN0UmFu
Z2UuZW5kID0gbGlzdEVuZCAtIG1fZGF0YTsKKyAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9
IGxpc3RFbmQgLSBtX2RhdGFTdGFydDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9k
eVN0YXJ0KCkKIHsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7Ci0gICAg
aWYgKCp5eXRleHQgPT0gJ3snKQorICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAt
IG1fZGF0YVN0YXJ0OworICAgIGlmICgqbV90b2tlblN0YXJ0ID09ICd7JykKICAgICAgICAgKytv
ZmZzZXQ7IC8vIFNraXAgdGhlIHJ1bGUgYm9keSBvcGVuaW5nIGJyYWNlLgogICAgIGlmIChvZmZz
ZXQgPiBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpCiAgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5zdGFy
dCA9IG9mZnNldDsKQEAgLTc0MzYsNyArODM5Niw3IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVs
ZUJvZHlTdGFydCgpCiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQogewotICAg
IHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKKyAgICB1bnNpZ25lZCBvZmZzZXQg
PSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydDsKICAgICBpZiAob2Zmc2V0ID4gbV9ydWxlQm9k
eVJhbmdlLmVuZCkKICAgICAgICAgbV9ydWxlQm9keVJhbmdlLmVuZCA9IG9mZnNldDsKIH0KQEAg
LTc0NDUsMTUgKzg0MDUsMTUgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eVN0YXJ0KCkK
IHsKICAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uKQogICAgICAgICByZXR1cm47
Ci0gICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0geXl0ZXh0IC0gbV9kYXRhOworICAgIG1fcHJv
cGVydHlSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0OwogfQogCiB2b2lk
IENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBp
c1Byb3BlcnR5UGFyc2VkKQogewogICAgIGlmICghbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24p
CiAgICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7
Ci0gICAgaWYgKCp5eXRleHQgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xvbiBpbnRvIHRoZSBw
cm9wZXJ0eSB0ZXh0LgorICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0
YVN0YXJ0OworICAgIGlmICgqbV90b2tlblN0YXJ0ID09ICc7JykgLy8gSW5jbHVkZSBzZW1pY29s
b24gaW50byB0aGUgcHJvcGVydHkgdGV4dC4KICAgICAgICAgKytvZmZzZXQ7CiAgICAgbV9wcm9w
ZXJ0eVJhbmdlLmVuZCA9IG9mZnNldDsKICAgICBpZiAobV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ICE9
IFVJTlRfTUFYICYmIG1fY3VycmVudFJ1bGVEYXRhKSB7CkBAIC03NDYxLDcgKzg0MjEsNyBAQCB2
b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9v
bCBpc1Byb3BlcnR5UGFyc2VkKQogICAgICAgICBjb25zdCB1bnNpZ25lZCBzdGFydCA9IG1fcHJv
cGVydHlSYW5nZS5zdGFydDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kID0gbV9wcm9wZXJ0
eVJhbmdlLmVuZDsKICAgICAgICAgQVNTRVJUKHN0YXJ0IDwgZW5kKTsKLSAgICAgICAgU3RyaW5n
IHByb3BlcnR5U3RyaW5nID0gU3RyaW5nKG1fZGF0YSArIHN0YXJ0LCBlbmQgLSBzdGFydCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyht
X2RhdGFTdGFydCArIHN0YXJ0LCBlbmQgLSBzdGFydCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAg
ICAgIGlmIChwcm9wZXJ0eVN0cmluZy5lbmRzV2l0aCgiOyIsIHRydWUpKQogICAgICAgICAgICAg
cHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KHByb3BlcnR5U3RyaW5nLmxlbmd0
aCgpIC0gMSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHByb3BlcnR5Q29tcG9uZW50czsKQEAg
LTc2NzgsMzMgKzg2MzgsNCBAQCBib29sIGlzVmFsaWROdGhUb2tlbihjb25zdCBDU1NQYXJzZXJT
dHJpbmcmIHRva2VuKQogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZSh0b2tlbiwgIm9kZCIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKHRva2VuLCAiZXZlbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KHRva2VuLCAibiIpOwogfQogCi0jZGVmaW5lIFlZX0RFQ0wgaW50IENTU1BhcnNlcjo6bGV4KCkK
LSNkZWZpbmUgeXljb25zdCBjb25zdAotdHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKLXR5cGVk
ZWYgdW5zaWduZWQgWVlfQ0hBUjsKLS8vIFRoZSBmb2xsb3dpbmcgbGluZSBtYWtlcyBzdXJlIHdl
IHRyZWF0IG5vbi1MYXRpbi0xIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZWN0bHkuCi0jZGVmaW5l
IFlZX1NDX1RPX1VJKGMpIChjID4gMHhmZiA/IDB4ZmYgOiBjKQotI2RlZmluZSBZWV9ET19CRUZP
UkVfQUNUSU9OIFwKLSAgICAgICAgeXl0ZXh0ID0geXlfYnA7IFwKLSAgICAgICAgeXlsZW5nID0g
KGludCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgICAgIHl5X2hvbGRfY2hhciA9ICp5eV9jcDsg
XAotICAgICAgICAqeXlfY3AgPSAwOyBcCi0gICAgICAgIHl5X2NfYnVmX3AgPSB5eV9jcDsKLSNk
ZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZGVmaW5lIEVDSE8KLSNkZWZpbmUgWVlfUlVMRV9TRVRV
UAotI2RlZmluZSBJTklUSUFMIDAKLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5E
X09GX0JVRkZFUiArIHN0YXRlICsgMSkKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSB5eVRvayA9IEVO
RF9UT0tFTjsgcmV0dXJuIHl5VG9rCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKGEpCi0vLyBUaGUg
Zm9sbG93aW5nIGxpbmUgaXMgbmVlZGVkIHRvIGJ1aWxkIHRoZSB0b2tlbml6ZXIgd2l0aCBhIGNv
bmRpdGlvbiBzdGFjay4KLS8vIFRoZSBtYWNybyBpcyB1c2VkIGluIHRoZSB0b2tlbml6ZXIgZ3Jh
bW1hciB3aXRoIGxpbmVzIGNvbnRhaW5pbmcKLS8vIEJFR0lOKG1lZGlhcXVlcmllcykgYW5kIEJF
R0lOKGluaXRpYWwpLiB5eV9zdGFydCBhY3RzIGFzIGluZGV4IHRvCi0vLyB0b2tlbml6ZXIgdHJh
bnNpdGlvbiB0YWJsZSwgYW5kICdtZWRpYXF1ZXJpZXMnIGFuZCAnaW5pdGlhbCcgYXJlCi0vLyBv
ZmZzZXQgbXVsdGlwbGllcnMgdGhhdCBzcGVjaWZ5IHdoaWNoIHRyYW5zaXRpb25zIGFyZSBhY3Rp
dmUKLS8vIGluIHRoZSB0b2tlbml6ZXIgZHVyaW5nIGluIGVhY2ggY29uZGl0aW9uICh0b2tlbml6
ZXIgc3RhdGUpLgotI2RlZmluZSBCRUdJTiB5eV9zdGFydCA9IDEgKyAyICoKLQotI2luY2x1ZGUg
InRva2VuaXplci5jcHAiCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBlMDViNGNmLi4x
Yjg0NDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0yOTMsMTQgKzI5MywyOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlSYW5nZS5zdGFy
dCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CiAgICAgdm9pZCByZXNldFByb3BlcnR5TWFy
a3MoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBVSU5U
X01BWDsgfQogICAgIGludCBsZXgodm9pZCogeXlsdmFsKTsKLSAgICBpbnQgdG9rZW4oKSB7IHJl
dHVybiB5eVRvazsgfQotICAgIFVDaGFyKiB0ZXh0KGludCogbGVuZ3RoKTsKLSAgICB2b2lkIGNv
dW50TGluZXMoKTsKLSAgICBpbnQgbGV4KCk7CisgICAgaW50IHRva2VuKCkgeyByZXR1cm4gbV90
b2tlbjsgfQogCiBwcml2YXRlOgorICAgIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0YXJ0KCk7
CisKKyAgICBzdGF0aWMgaW5saW5lIFVDaGFyKiBjaGVja1N0cmluZyhVQ2hhciosIFVDaGFyKTsK
KworICAgIHZvaWQgcGFyc2VFc2NhcGUoVUNoYXIqJik7CisgICAgaW5saW5lIGJvb2wgcGFyc2VJ
ZGVudGlmaWVyKFVDaGFyKiYpOworICAgIGlubGluZSB2b2lkIHBhcnNlU3RyaW5nKFVDaGFyKiYs
IFVDaGFyKTsKKyAgICBpbmxpbmUgdm9pZCBwYXJzZVVSSShVQ2hhciomLCBVQ2hhciomKTsKKyAg
ICBpbmxpbmUgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZSgpOworICAgIGlubGluZSBib29sIHBhcnNl
TnRoQ2hpbGQoKTsKKyAgICBpbmxpbmUgYm9vbCBwYXJzZU50aENoaWxkRXh0cmEoKTsKKyAgICBp
bmxpbmUgdm9pZCBkZXRlY3RGdW5jdGlvblRva2VuKGludCk7CisgICAgaW5saW5lIHZvaWQgZGV0
ZWN0TWVkaWFRdWVyeVRva2VuKGludCk7CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0TnVtYmVyVG9r
ZW4oVUNoYXIqLCBpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdERhc2hUb2tlbihpbnQpOwor
ICAgIGlubGluZSB2b2lkIGRldGVjdEF0VG9rZW4oaW50LCBib29sKTsKKwogICAgIHZvaWQgc2V0
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7Ci0gICAgCisKICAgICB2b2lkIHJlY2hlY2tBdEtl
eXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbik7CiAKICAgICB2b2lkIHNldHVwUGFyc2Vy
KGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciogc3VmZml4KTsK
QEAgLTMyOCwxNSArMzQyLDE3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwYXJzZVNpemUoaW50IHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpOwogICAgIFNpemVQYXJhbWV0ZXJUeXBlIHBhcnNlU2l6ZVBh
cmFtZXRlcihDU1NWYWx1ZUxpc3QqIHBhcnNlZFZhbHVlcywgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
LCBTaXplUGFyYW1ldGVyVHlwZSBwcmV2UGFyYW1UeXBlKTsKIAorICAgIGVudW0gUGFyc2luZ01v
ZGUgeworICAgICAgICBOb3JtYWxNb2RlLAorICAgICAgICBNZWRpYVF1ZXJ5TW9kZSwKKyAgICAg
ICAgTnRoQ2hpbGRNb2RlCisgICAgfTsKKworICAgIFBhcnNpbmdNb2RlIG1fcGFyc2luZ01vZGU7
CisgICAgVUNoYXIqIG1fZGF0YVN0YXJ0OwogICAgIFVDaGFyKiBtX2RhdGE7Ci0gICAgVUNoYXIq
IHl5dGV4dDsKLSAgICBVQ2hhciogeXlfY19idWZfcDsKLSAgICBVQ2hhciB5eV9ob2xkX2NoYXI7
Ci0gICAgaW50IHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIFVDaGFyKiB5eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zOwotICAgIGludCB5eWxlbmc7Ci0gICAgaW50IHl5VG9rOwotICAgIGludCB5
eV9zdGFydDsKKyAgICBVQ2hhciogbV90b2tlblN0YXJ0OworICAgIGludCBtX3Rva2VuOwogICAg
IGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1fbGFzdFNlbGVjdG9yTGluZU51bWJlcjsKIAot
LSAKMS43LjIuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118748</attachid>
            <date>2011-12-12 00:57:53 -0800</date>
            <delta_ts>2011-12-13 01:35:17 -0800</delta_ts>
            <desc>core patch</desc>
            <filename>0001-css-tokenizer.patch</filename>
            <type>text/plain</type>
            <size>53986</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBiNzkxMzA3NzZhMzI1YzcyYTkzMjFkMzIwNDRiYzhiZWY4NzI3ZTQxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxMiBEZWMgMjAxMSAwMDo1MToxMiAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGNz
cy10b2tlbml6ZXIKCi0tLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgfCAxNDQy
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmggICB8ICAgNDAgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTIyMCBpbnNlcnRp
b25zKCspLCAyNjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAz
ZTE4ZGE4Li45ZmY0OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTkzLDggKzE5
MywxMCBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgLCBt
X3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQogICAgICwgbV9ydWxlUmFuZ2VNYXAo
MCkKICAgICAsIG1fY3VycmVudFJ1bGVEYXRhKDApCisgICAgLCBtX3BhcnNpbmdNb2RlKE5vcm1h
bE1vZGUpCisgICAgLCBtX2RhdGFTdGFydCgwKQogICAgICwgbV9kYXRhKDApCi0gICAgLCB5eV9z
dGFydCgxKQorICAgICwgbV90b2tlbigwKQogICAgICwgbV9saW5lTnVtYmVyKDApCiAgICAgLCBt
X2xhc3RTZWxlY3RvckxpbmVOdW1iZXIoMCkKICAgICAsIG1fYWxsb3dJbXBvcnRSdWxlcyh0cnVl
KQpAQCAtMjEzLDcgKzIxNSw3IEBAIENTU1BhcnNlcjo6fkNTU1BhcnNlcigpCiAKICAgICBkZWxl
dGUgbV92YWx1ZUxpc3Q7CiAKLSAgICBmYXN0RnJlZShtX2RhdGEpOworICAgIGZhc3RGcmVlKG1f
ZGF0YVN0YXJ0KTsKIAogICAgIGZhc3REZWxldGVBbGxWYWx1ZXMobV9mbG9hdGluZ1NlbGVjdG9y
cyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdTZWxlY3RvclZlY3RvcnMpOwpAQCAt
MjQyLDI1ICsyNDQsMjIgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIq
IHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIKIHsKICAgICBpbnQgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aCgpICsgc3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3VmZml4KSAr
IDI7CiAKLSAgICBmYXN0RnJlZShtX2RhdGEpOwotICAgIG1fZGF0YSA9IHN0YXRpY19jYXN0PFVD
aGFyKj4oZmFzdE1hbGxvYyhsZW5ndGggKiBzaXplb2YoVUNoYXIpKSk7CisgICAgZmFzdEZyZWUo
bV9kYXRhU3RhcnQpOworICAgIG1fZGF0YVN0YXJ0ID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0
TWFsbG9jKGxlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RybGVuKHByZWZpeCk7IGkrKykKLSAgICAgICAgbV9kYXRhW2ldID0gcHJlZml4W2ld
OworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHByZWZpeFtpXTsKIAotICAgIG1lbWNweShtX2Rh
dGEgKyBzdHJsZW4ocHJlZml4KSwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KG1fZGF0YVN0YXJ0ICsgc3RybGVuKHByZWZp
eCksIHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikp
OwogCiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdHJsZW4ocHJlZml4KSArIHN0cmluZy5sZW5ndGgo
KTsKICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN0cmxlbihzdWZmaXgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0gICAgICAgIG1fZGF0YVtpXSA9IHN1
ZmZpeFtpIC0gc3RhcnRdOworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHN1ZmZpeFtpIC0gc3Rh
cnRdOwogCi0gICAgbV9kYXRhW2xlbmd0aCAtIDFdID0gMDsKLSAgICBtX2RhdGFbbGVuZ3RoIC0g
Ml0gPSAwOworICAgIG1fZGF0YVN0YXJ0W2xlbmd0aCAtIDFdID0gMDsKKyAgICBtX2RhdGFTdGFy
dFtsZW5ndGggLSAyXSA9IDA7CiAKLSAgICB5eV9ob2xkX2NoYXIgPSAwOwotICAgIHl5bGVuZyA9
IDA7Ci0gICAgeXl0ZXh0ID0geXlfY19idWZfcCA9IG1fZGF0YTsKLSAgICB5eV9ob2xkX2NoYXIg
PSAqeXlfY19idWZfcDsKKyAgICBtX2RhdGEgPSBtX3Rva2VuU3RhcnQgPSBtX2RhdGFTdGFydDsK
ICAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKIH0KIApAQCAtNzIwMSwyMzYgKzcyMDAsMTIwOCBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmVhdHVyZVNldHRpbmdzKGJvb2wgaW1wb3J0YW50
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgeXllcnJvcihjb25z
dCBjaGFyKikgeyByZXR1cm4gMTsgfQotCiAjZGVmaW5lIEVORF9UT0tFTiAwCiAKICNpbmNsdWRl
ICJDU1NHcmFtbWFyLmgiCiAKLWludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxXaXRob3V0
VHlwZSkKK2VudW0gQ2hhcmFjdGVyVHlwZSB7CisgICAgLy8gVHlwZXMgZm9yIHRoZSBtYWluIHN3
aXRjaC4KKworICAgIC8vIFRoZSBmaXJzdCA0IHR5cGVzIG11c3QgYmUgZ3JvdXBlZCB0b2dldGhl
ciwgYXMgdGhleQorICAgIC8vIHJlcHJlc2VudCB0aGUgYWxsb3dlZCBjaGFycyBpbiBhbiBpZGVu
dGlmaWVyLgorICAgIENoYXJhY3RlckNhc2VsZXNzVSwKKyAgICBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisgICAgQ2hhcmFjdGVyTnVtYmVyLAorICAgIENoYXJhY3RlckRhc2gsCisKKyAgICBD
aGFyYWN0ZXJPdGhlciwKKyAgICBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorICAgIENoYXJhY3RlckVu
ZE1lZGlhUXVlcnksCisgICAgQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCisgICAgQ2hhcmFjdGVyUXVv
dGUsCisgICAgQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrLAorICAgIENoYXJhY3Rlckhhc2htYXJr
LAorICAgIENoYXJhY3RlckRvbGxhciwKKyAgICBDaGFyYWN0ZXJBc3RlcmlzaywKKyAgICBDaGFy
YWN0ZXJQbHVzLAorICAgIENoYXJhY3RlckRvdCwKKyAgICBDaGFyYWN0ZXJTbGFzaCwKKyAgICBD
aGFyYWN0ZXJMZXNzLAorICAgIENoYXJhY3RlckF0LAorICAgIENoYXJhY3RlckJhY2tTbGFzaCwK
KyAgICBDaGFyYWN0ZXJYb3IsCisgICAgQ2hhcmFjdGVyVmVydGljYWxCYXIsCisgICAgQ2hhcmFj
dGVyVGlsZGUsCit9OworCisvLyAxMjggQVNDSUkgY29kZXMKK3N0YXRpYyBjb25zdCBDaGFyYWN0
ZXJUeXBlIHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbMTI4XSA9IHsKKy8qICAgMCAtIE51bGwgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgMSAtIFN0YXJ0IG9mIEhlYWRpbmcg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgMiAtIFN0YXJ0IG9mIFRleHQgICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKKy8qICAgMyAtIEVuZCBvZiBUZXh0ICAgICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICAgNCAtIEVuZCBvZiBUcmFuc20uICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAg
NSAtIEVucXVpcnkgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgNiAtIEFja25v
d2xlZGdtZW50ICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgNyAtIEJlbGwgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgOCAtIEJhY2sgU3BhY2UgICAgICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKKy8qICAgOSAtIEhvcml6b250YWwgVGFiICAgICAqLyBDaGFyYWN0ZXJX
aGl0ZVNwYWNlLAorLyogIDEwIC0gTGluZSBGZWVkICAgICAgICAgICovIENoYXJhY3RlcldoaXRl
U3BhY2UsCisvKiAgMTEgLSBWZXJ0aWNhbCBUYWIgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgMTIgLSBGb3JtIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAx
MyAtIENhcnJpYWdlIFJldHVybiAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDE0IC0g
U2hpZnQgT3V0ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDE1IC0gU2hpZnQgSW4g
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDE2IC0gRGF0YSBMaW5lIEVzY2FwZSAg
ICovIENoYXJhY3Rlck90aGVyLAorLyogIDE3IC0gRGV2aWNlIENvbnRyb2wgMSAgICovIENoYXJh
Y3Rlck90aGVyLAorLyogIDE4IC0gRGV2aWNlIENvbnRyb2wgMiAgICovIENoYXJhY3Rlck90aGVy
LAorLyogIDE5IC0gRGV2aWNlIENvbnRyb2wgMyAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDIw
IC0gRGV2aWNlIENvbnRyb2wgNCAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDIxIC0gTmVnYXRp
dmUgQWNrLiAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDIyIC0gU3luY2hyb25vdXMgSWRs
ZSAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDIzIC0gRW5kIG9mIFRyYW5zbWl0ICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogIDI0IC0gQ2FuY2VsICAgICAgICAgICAgICovIENoYXJhY3Rlck90
aGVyLAorLyogIDI1IC0gRW5kIG9mIE1lZGl1bSAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyog
IDI2IC0gU3Vic3RpdHV0ZSAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDI3IC0gRXNj
YXBlICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDI4IC0gRmlsZSBTZXBhcmF0
b3IgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDI5IC0gR3JvdXAgU2VwYXJhdG9yICAgICov
IENoYXJhY3Rlck90aGVyLAorLyogIDMwIC0gUmVjb3JkIFNlcGFyYXRvciAgICovIENoYXJhY3Rl
ck90aGVyLAorLyogIDMxIC0gVW5pdCBTZXBhcmF0b3IgICAgICovIENoYXJhY3Rlck90aGVyLAor
LyogIDMyIC0gU3BhY2UgICAgICAgICAgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAg
MzMgLSAhICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrLAorLyog
IDM0IC0gIiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclF1b3RlLAorLyogIDM1IC0gIyAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3Rlckhhc2htYXJrLAorLyogIDM2IC0gJCAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlckRvbGxhciwKKy8qICAzNyAtICUgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzOCAtICYgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKKy8qICAzOSAtICcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJRdW90
ZSwKKy8qICA0MCAtICggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA0
MSAtICkgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJFbmROdGhDaGlsZCwKKy8qICA0MiAt
ICogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJBc3RlcmlzaywKKy8qICA0MyAtICsgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJQbHVzLAorLyogIDQ0IC0gLCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDQ1IC0gLSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlckRhc2gsCisvKiAgNDYgLSAuICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRG90
LAorLyogIDQ3IC0gLyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclNsYXNoLAorLyogIDQ4
IC0gMCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA0OSAtIDEgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTAgLSAyICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDUxIC0gMyAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck51bWJlciwKKy8qICA1MiAtIDQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJOdW1iZXIsCisvKiAgNTMgLSA1ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVy
LAorLyogIDU0IC0gNiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1
NSAtIDcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTYgLSA4ICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU3IC0gOSAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1OCAtIDogICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKKy8qICA1OSAtIDsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJFbmRNZWRpYVF1ZXJ5LAorLyogIDYwIC0gPCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ckxlc3MsCisvKiAgNjEgLSA9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgNjIgLSA+ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNjMgLSA/
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNjQgLSBAICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyQXQsCisvKiAgNjUgLSBBICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY2IC0gQiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2NyAtIEMgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjggLSBEICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY5IC0gRSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MCAtIEYgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzEgLSBHICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDcyIC0gSCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MyAtIEkgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzQgLSBKICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc1IC0gSyAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NiAtIEwgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzcgLSBNICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc4IC0gTiAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3OSAtIE8gICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODAgLSBQICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgxIC0gUSAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MiAtIFIgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODMgLSBTICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg0IC0gVCAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NSAtIFUg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJDYXNlbGVzc1UsCisvKiAgODYgLSBWICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg3IC0gVyAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4OCAtIFggICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODkgLSBZICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDkwIC0gWiAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5MSAtIFsg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA5MiAtIFwgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJCYWNrU2xhc2gsCisvKiAgOTMgLSBdICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgOTQgLSBeICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyWG9yLAorLyogIDk1IC0gXyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qICA5NiAtIGAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICA5NyAtIGEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCisvKiAgOTggLSBiICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogIDk5IC0gYyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qIDEwMCAtIGQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAxMDEgLSBlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogMTAyIC0gZiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qIDEwMyAtIGcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAxMDQgLSBoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogMTA1IC0gaSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qIDEwNiAtIGogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAxMDcgLSBrICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogMTA4IC0gbCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDEwOSAtIG0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMTAgLSBuICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogMTExIC0gbyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qIDExMiAtIHAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTMgLSBxICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE0IC0gciAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExNSAtIHMgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTYgLSB0ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE3IC0gdSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlckNhc2VsZXNzVSwKKy8qIDExOCAtIHYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTkgLSB3ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogMTIwIC0geCAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEyMSAtIHkgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMjIgLSB6ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTIzIC0geyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlckVuZE1lZGlhUXVlcnksCisvKiAxMjQgLSB8ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyVmVydGljYWxCYXIsCisvKiAxMjUgLSB9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAxMjYgLSB+ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyVGlsZGUs
CisvKiAxMjcgLSBEZWxldGUgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCit9OworCisv
LyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIENTUyB0b2tlbml6ZXIuCisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc0NTU0xldHRlcihVQ2hhciBjaHIpCiB7Ci0gICAgWVlTVFlQRSogeXlsdmFsID0g
c3RhdGljX2Nhc3Q8WVlTVFlQRSo+KHl5bHZhbFdpdGhvdXRUeXBlKTsKLSAgICBpbnQgbGVuZ3Ro
OworICAgIHJldHVybiBjaHIgPj0gMTI4IHx8IHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbY2hyXSA8
PSBDaGFyYWN0ZXJEYXNoOworfQogCi0gICAgbGV4KCk7CitzdGF0aWMgaW5saW5lIGJvb2wgaXND
U1NFc2NhcGUoVUNoYXIgY2hyKQoreworICAgIHJldHVybiBjaHIgPj0gJyAnICYmIGNociAhPSAx
Mjc7Cit9CiAKLSAgICBVQ2hhciogdCA9IHRleHQoJmxlbmd0aCk7CitzdGF0aWMgaW5saW5lIGJv
b2wgaXNVUklMZXR0ZXIoVUNoYXIgY2hyKQoreworICAgIHJldHVybiAoY2hyID49ICcqJyAmJiBj
aHIgIT0gMTI3KSB8fCAoY2hyID49ICcjJyAmJiBjaHIgPD0gJyYnKSB8fCBjaHIgPT0gJyEnOwor
fQogCi0gICAgc3dpdGNoICh0b2tlbigpKSB7Ci0gICAgY2FzZSBXSElURVNQQUNFOgotICAgIGNh
c2UgU0dNTF9DRDoKLSAgICBjYXNlIElOQ0xVREVTOgotICAgIGNhc2UgREFTSE1BVENIOgotICAg
ICAgICBicmVhazsKK3N0YXRpYyBpbmxpbmUgVUNoYXIgbG93ZXJjYXNlQ2hhcmFjdGVyKFVDaGFy
IGNocikKK3sKKyAgICByZXR1cm4gY2hyIHwgMHgyMDsKK30KIAotICAgIGNhc2UgVVJJOgotICAg
IGNhc2UgU1RSSU5HOgotICAgIGNhc2UgSURFTlQ6Ci0gICAgY2FzZSBOVEg6Ci0gICAgY2FzZSBI
RVg6Ci0gICAgY2FzZSBJRFNFTDoKLSAgICBjYXNlIERJTUVOOgotICAgIGNhc2UgVU5JQ09ERVJB
TkdFOgotICAgIGNhc2UgRlVOQ1RJT046Ci0gICAgY2FzZSBBTllGVU5DVElPTjoKLSAgICBjYXNl
IE5PVEZVTkNUSU9OOgotICAgIGNhc2UgQ0FMQ0ZVTkNUSU9OOgotICAgIGNhc2UgTUlORlVOQ1RJ
T046Ci0gICAgY2FzZSBNQVhGVU5DVElPTjoKLSAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFj
dGVycyA9IHQ7Ci0gICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IGxlbmd0aDsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIElNUE9SVF9TWU06Ci0gICAgY2FzZSBQQUdFX1NZTToKLSAg
ICBjYXNlIE1FRElBX1NZTToKLSAgICBjYXNlIEZPTlRfRkFDRV9TWU06Ci0gICAgY2FzZSBDSEFS
U0VUX1NZTToKLSAgICBjYXNlIE5BTUVTUEFDRV9TWU06Ci0gICAgY2FzZSBXRUJLSVRfS0VZRlJB
TUVTX1NZTToKLQotICAgIGNhc2UgSU1QT1JUQU5UX1NZTToKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIFFFTVM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNhc2UgR1JBRFM6Ci0gICAgY2Fz
ZSBUVVJOUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBERUdTOgotICAgIGNhc2UgUkFE
UzoKLSAgICBjYXNlIEtIRVJUWjoKLSAgICBjYXNlIFJFTVM6Ci0gICAgICAgIGxlbmd0aC0tOwot
ICAgIGNhc2UgTVNFQ1M6Ci0gICAgY2FzZSBIRVJUWjoKLSAgICBjYXNlIEVNUzoKLSAgICBjYXNl
IEVYUzoKLSAgICBjYXNlIFBYUzoKLSAgICBjYXNlIENNUzoKLSAgICBjYXNlIE1NUzoKLSAgICBj
YXNlIElOUzoKLSAgICBjYXNlIFBUUzoKLSAgICBjYXNlIFBDUzoKLSAgICAgICAgbGVuZ3RoLS07
Ci0gICAgY2FzZSBTRUNTOgotICAgIGNhc2UgUEVSQ0VOVEFHRToKLSAgICAgICAgbGVuZ3RoLS07
Ci0gICAgY2FzZSBGTE9BVFRPS0VOOgotICAgIGNhc2UgSU5URUdFUjoKLSAgICAgICAgeXlsdmFs
LT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUodCwgbGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2goVUNoYXIqIGRh
dGEpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYShkYXRhWzBdKSB8fCBkYXRhWzBdID09ICdf
JyB8fCBkYXRhWzBdID49IDEyOAorICAgICAgICB8fCAoZGF0YVswXSA9PSAnXFwnICYmIGlzQ1NT
RXNjYXBlKGRhdGFbMV0pKTsKK30KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworc3Rh
dGljIGJvb2wgaXNDYXNlbGVzc0VxdWFsKFVDaGFyIGNzc0NoYXJhY3RlciwgVUNoYXIgY2hhcmFj
dGVyKQoreworICAgIEFTU0VSVChjaGFyYWN0ZXIgPj0gJ2EnICYmIGNoYXJhY3RlciA8PSAneicp
OworICAgIHJldHVybiBMSUtFTFkobG93ZXJjYXNlQ2hhcmFjdGVyKGNzc0NoYXJhY3RlcikgPT0g
Y2hhcmFjdGVyKTsKK30KKworc3RhdGljIGJvb2wgaXNDYXNlbGVzc0VxdWFsKFVDaGFyKiBjc3NT
dHJpbmcsIGNvbnN0IGNoYXIqIGNvbnN0YW50U3RyaW5nKQoreworICAgIC8vIENvbXBhcmUgYW4g
VUNoYXIgbWVtb3J5IGRhdGEgd2l0aCBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcuCisgICAgZG8g
eworICAgICAgICAvLyBUaGUgaW5wdXQgbXVzdCBiZSBwYXJ0IG9mIGFuIGlkZW50aWZpZXIgaWYg
Y29uc3RhbnRDaGFyIG9yIGNvbnN0U3RyaW5nCisgICAgICAgIC8vIGNvbnRhaW5zICctJy4gT3Ro
ZXJ3aXNlICdccicgfCAweDIwIHdvdWxkIGJlIGVxdWFsIHRvICctJy4KKyAgICAgICAgQVNTRVJU
KCgqY29uc3RhbnRTdHJpbmcgPj0gJ2EnICYmICpjb25zdGFudFN0cmluZyA8PSAneicpIHx8ICpj
b25zdGFudFN0cmluZyA9PSAnLScpOworICAgICAgICBBU1NFUlQoKmNvbnN0YW50U3RyaW5nICE9
ICctJyB8fCBpc0NTU0xldHRlcigqY3NzU3RyaW5nKSk7CisgICAgICAgIGlmICgoKCpjc3NTdHJp
bmcrKykgfCAweDIwKSAhPSAoKmNvbnN0YW50U3RyaW5nKyspKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0gd2hpbGUgKCpjb25zdGFudFN0cmluZyk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBVQ2hhciogY2hlY2tFc2NhcGUoVUNoYXIqIGRhdGEpCit7CisgICAgQVNT
RVJUKCpkYXRhID09ICdcXCcpOworCisgICAgKytkYXRhOworICAgIGlmICghaXNDU1NFc2NhcGUo
KmRhdGEpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQoKmRh
dGEpKSB7CisgICAgICAgIGludCBsZW5ndGggPSA2OworCisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICsrZGF0YTsKKyAgICAgICAgfSB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpkYXRhKSAmJiAt
LWxlbmd0aCk7CisKKyAgICAgICAgLy8gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdGhlIGVzY2FwZSBz
ZXF1ZW5jZS4KKyAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCpkYXRhKSkKKyAgICAgICAgICAgICsr
ZGF0YTsKKyAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgfQorICAgIHJldHVybiBkYXRhICsgMTsK
K30KIAotICAgIHJldHVybiB0b2tlbigpOworc3RhdGljIGlubGluZSBVQ2hhciogc2tpcFdoaXRl
U3BhY2VzKFVDaGFyKiBkYXRhKQoreworICAgIHdoaWxlIChVTkxJS0VMWSgqZGF0YSA8PSAnICcg
JiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKmRhdGFdID09IENoYXJhY3RlcldoaXRlU3BhY2Up
KSkKKyAgICAgICAgKytkYXRhOworICAgIHJldHVybiBkYXRhOwogfQogCi12b2lkIENTU1BhcnNl
cjo6cmVjaGVja0F0S2V5d29yZChjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIFN0
cmluZyBydWxlTmFtZShzdHIsIGxlbik7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVO
YW1lLCAiQGltcG9ydCIpKQotICAgICAgICB5eVRvayA9IElNUE9SVF9TWU07Ci0gICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAcGFnZSIpKQotICAgICAgICB5eVRvayA9
IFBBR0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQG1l
ZGlhIikpCi0gICAgICAgIHl5VG9rID0gTUVESUFfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHJ1bGVOYW1lLCAiQGZvbnQtZmFjZSIpKQotICAgICAgICB5eVRvayA9IEZPTlRf
RkFDRV9TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAY2hh
cnNldCIpKQotICAgICAgICB5eVRvayA9IENIQVJTRVRfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQG5hbWVzcGFjZSIpKQotICAgICAgICB5eVRvayA9IE5B
TUVTUEFDRV9TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJA
LXdlYmtpdC1rZXlmcmFtZXMiKSkKLSAgICAgICAgeXlUb2sgPSBXRUJLSVRfS0VZRlJBTUVTX1NZ
TTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkAtd2Via2l0LW1l
ZGlhcXVlcnkiKSkKLSAgICAgICAgeXlUb2sgPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07Ci19Ci0K
LVVDaGFyKiBDU1NQYXJzZXI6OnRleHQoaW50ICpsZW5ndGgpCi17Ci0gICAgVUNoYXIqIHN0YXJ0
ID0geXl0ZXh0OwotICAgIGludCBsID0geXlsZW5nOwotICAgIHN3aXRjaCAoeXlUb2spIHsKLSAg
ICBjYXNlIFNUUklORzoKLSAgICAgICAgbC0tOwotICAgICAgICAvKiBub2JyZWFrICovCi0gICAg
Y2FzZSBIRVg6Ci0gICAgY2FzZSBJRFNFTDoKLSAgICAgICAgc3RhcnQrKzsKLSAgICAgICAgbC0t
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVSSToKLSAgICAgICAgLy8gInVybCgie3d9e3N0
cmluZ317d30iKSIKLSAgICAgICAgLy8gInVybCgie3d9e3VybH17d30iKSIKLSAgICAgICAgLy8g
c3RyaXAgInVybCgiIGFuZCAiKSIKLSAgICAgICAgc3RhcnQgKz0gNDsKLSAgICAgICAgbCAtPSA1
OwotICAgICAgICAvLyBzdHJpcCB7d30KLSAgICAgICAgd2hpbGUgKGwgJiYgaXNIVE1MU3BhY2Uo
KnN0YXJ0KSkgewotICAgICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAgIC0tbDsKLSAgICAg
ICAgfQotICAgICAgICB3aGlsZSAobCAmJiBpc0hUTUxTcGFjZShzdGFydFtsIC0gMV0pKQotICAg
ICAgICAgICAgLS1sOwotICAgICAgICBpZiAobCAmJiAoKnN0YXJ0ID09ICciJyB8fCAqc3RhcnQg
PT0gJ1wnJykpIHsKLSAgICAgICAgICAgIEFTU0VSVChsID49IDIgJiYgc3RhcnRbbCAtIDFdID09
ICpzdGFydCk7Ci0gICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAgbCAtPSAyOworLy8g
TWFpbiBDU1MgdG9rZW5pemVyIGZ1bmN0aW9ucy4KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpp
c0lkZW50aWZpZXJTdGFydCgpCit7CisgICAgLy8gQ2hlY2sgd2hldGhlciBhbiBpZGVudGlmaWVy
IGlzIHN0YXJ0ZWQuCisgICAgcmV0dXJuIGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKCgqbV9k
YXRhICE9ICctJykgPyBtX2RhdGEgOiBtX2RhdGEgKyAxKTsKK30KKworaW5saW5lIFVDaGFyKiBD
U1NQYXJzZXI6OmNoZWNrU3RyaW5nKFVDaGFyKiBkYXRhLCBVQ2hhciBxdW90ZSkKK3sKKyAgICAv
LyBTaW5jZSB3ZSBjYW5ub3QgcmV2ZXJ0IGVzY2FwZSBzZXF1ZW5jZXMsIHN0cmluZ3MKKyAgICAv
LyBtdXN0IGJlIHZhbGlkYXRlZCBiZWZvcmUgcGFyc2luZy4KKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICBpZiAoVU5MSUtFTFkoKmRhdGEgPT0gcXVvdGUpKSB7CisgICAgICAgICAgICAvLyBT
dHJpbmcgcGFyc2luZyBpcyBzdWNjZXNzZnVsLgorICAgICAgICAgICAgcmV0dXJuIGRhdGEgKyAx
OworICAgICAgICB9CisgICAgICAgIGlmIChVTkxJS0VMWSgqZGF0YSA8IDE0ICYmICpkYXRhID4g
OSAmJiAqZGF0YSAhPSAxMSkpIHsKKyAgICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBm
YWlsZWQuCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
TElLRUxZKGRhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICArK2RhdGE7CisgICAgICAgIGVs
c2UgaWYgKGRhdGFbMV0gPT0gJ1xuJyB8fCBkYXRhWzFdID09ICdcZicpCisgICAgICAgICAgICBk
YXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKGRhdGFbMV0gPT0gJ1xyJykKKyAgICAgICAgICAg
IGRhdGEgKz0gZGF0YVsyXSA9PSAnXG4nID8gMyA6IDI7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgZGF0YSA9IGNoZWNrRXNjYXBlKGRhdGEpOworICAgICAgICAgICAgaWYgKCFkYXRhKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwogICAgIH0KK30KIAotICAgIC8vIHByb2Nlc3MgZXNj
YXBlcwotICAgIFVDaGFyKiBvdXQgPSBzdGFydDsKLSAgICBVQ2hhciogZXNjYXBlID0gMDsKK3Zv
aWQgQ1NTUGFyc2VyOjpwYXJzZUVzY2FwZShVQ2hhciomIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQo
Km1fZGF0YSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKG1fZGF0YVsxXSkpOwogCi0gICAgYm9vbCBz
YXdFc2NhcGUgPSBmYWxzZTsKKyAgICArK21fZGF0YTsKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0
KCptX2RhdGEpKSB7CisgICAgICAgIHVuc2lnbmVkIHVuaWNvZGUgPSAwOworICAgICAgICBpbnQg
bGVuZ3RoID0gNjsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAg
IFVDaGFyKiBjdXJyZW50ID0gc3RhcnQgKyBpOwotICAgICAgICBpZiAoZXNjYXBlID09IGN1cnJl
bnQgLSAxKSB7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50KSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh5eVRvayA9PSBTVFJJTkcg
JiYKLSAgICAgICAgICAgICAgICAgKCpjdXJyZW50ID09ICdcbicgfHwgKmN1cnJlbnQgPT0gJ1xy
JyB8fCAqY3VycmVudCA9PSAnXGYnKSkgewotICAgICAgICAgICAgICAgIC8vICMjIyBoYW5kbGUg
XHJcbiBjYXNlCi0gICAgICAgICAgICAgICAgaWYgKCpjdXJyZW50ICE9ICdccicpCi0gICAgICAg
ICAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpbiBhbGwgb3RoZXIgY2FzZXMgY29weSB0aGUgY2hh
ciB0byBvdXRwdXQKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgKm91dCsrID0gKmN1
cnJlbnQ7Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGVzY2FwZSA9PSBjdXJyZW50IC0gMiAmJiB5eVRvayA9PSBT
VFJJTkcgJiYKLSAgICAgICAgICAgICAqKGN1cnJlbnQtMSkgPT0gJ1xyJyAmJiAqY3VycmVudCA9
PSAnXG4nKSB7Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHVuaWNvZGUgPSAodW5pY29kZSA8PCA0KSArIHRv
QVNDSUlIZXhWYWx1ZSgqbV9kYXRhKyspOworICAgICAgICB9IHdoaWxlICgtLWxlbmd0aCAmJiBp
c0FTQ0lJSGV4RGlnaXQoKm1fZGF0YSkpOworCisgICAgICAgIC8vIENoYXJhY3RlcnMgYWJvdmUg
MHhmZmZmIGFyZSBub3QgaGFuZGxlZC4KKyAgICAgICAgaWYgKHVuaWNvZGUgPiAweGZmZmYpCisg
ICAgICAgICAgICB1bmljb2RlID0gMHhmZmZkOworCisgICAgICAgIC8vIE9wdGlvbmFsIHNwYWNl
IGFmdGVyIHRoZSBlc2NhcGUgc2VxdWVuY2UuCisgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqbV9k
YXRhKSkKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAqcmVzdWx0ID0gdW5pY29kZTsK
KyAgICB9IGVsc2UKKyAgICAgICAgKnJlc3VsdCA9ICptX2RhdGErKzsKKyAgICArK3Jlc3VsdDsK
K30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUlkZW50aWZpZXIoVUNoYXIqJiByZXN1
bHQpCit7CisgICAgLy8gSWYgYSB2YWxpZCBpZGVudGlmaWVyIHN0YXJ0IGlzIGZvdW5kLCB3ZSBj
YW4gc2FmZWx5CisgICAgLy8gcGFyc2UgdGhlIGlkZW50aWZpZXIgdW50aWwgdGhlIG5leHQgaW52
YWxpZCBjaGFyYWN0ZXIuCisgICAgQVNTRVJUKGlzSWRlbnRpZmllclN0YXJ0KCkpOworICAgIGJv
b2wgaGFzRXNjYXBlID0gZmFsc2U7CisgICAgZG8geworICAgICAgICBpZiAoTElLRUxZKCptX2Rh
dGEgIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9kYXRhKys7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgaGFzRXNjYXBlID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhcnNl
RXNjYXBlKHJlc3VsdCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGVzY2FwZSA+IGN1cnJlbnQg
LSA3ICYmIGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKGVzY2FwZSkgewotICAgICAgICAgICAgLy8gYWRkIGVzY2FwZWQgY2hhcgot
ICAgICAgICAgICAgdW5zaWduZWQgdWMgPSAwOwotICAgICAgICAgICAgZXNjYXBlKys7Ci0gICAg
ICAgICAgICB3aGlsZSAoZXNjYXBlIDwgY3VycmVudCkgewotICAgICAgICAgICAgICAgIHVjICo9
IDE2OwotICAgICAgICAgICAgICAgIHVjICs9IHRvQVNDSUlIZXhWYWx1ZSgqZXNjYXBlKTsKLSAg
ICAgICAgICAgICAgICBlc2NhcGUrKzsKKyAgICB9IHdoaWxlIChpc0NTU0xldHRlcihtX2RhdGFb
MF0pIHx8IChtX2RhdGFbMF0gPT0gJ1xcJyAmJiBpc0NTU0VzY2FwZShtX2RhdGFbMV0pKSk7Cisg
ICAgcmV0dXJuIGhhc0VzY2FwZTsKK30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVN0
cmluZyhVQ2hhciomIHJlc3VsdCwgVUNoYXIgcXVvdGUpCit7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCptX2RhdGEgPT0gcXVvdGUpKSB7CisgICAgICAgICAgICAv
LyBTdHJpbmcgcGFyc2luZyBpcyBkb25lLgorICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKCptX2RhdGEgPj0gMTQgfHwg
Km1fZGF0YSA8PSA5IHx8ICptX2RhdGEgPT0gMTEpOworCisgICAgICAgIGlmIChMSUtFTFkobV9k
YXRhWzBdICE9ICdcXCcpKQorICAgICAgICAgICAgKnJlc3VsdCsrID0gKm1fZGF0YSsrOworICAg
ICAgICBlbHNlIGlmIChtX2RhdGFbMV0gPT0gJ1xuJyB8fCBtX2RhdGFbMV0gPT0gJ1xmJykKKyAg
ICAgICAgICAgIG1fZGF0YSArPSAyOworICAgICAgICBlbHNlIGlmIChtX2RhdGFbMV0gPT0gJ1xy
JykKKyAgICAgICAgICAgIG1fZGF0YSArPSBtX2RhdGFbMl0gPT0gJ1xuJyA/IDMgOiAyOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwYXJzZUVzY2FwZShyZXN1bHQpOworICAgIH0KK30KKwor
aW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVVSSShVQ2hhciomIHN0YXJ0LCBVQ2hhciomIHJl
c3VsdCkKK3sKKyAgICBVQ2hhciogdXJpU3RhcnQgPSBza2lwV2hpdGVTcGFjZXMobV9kYXRhKTsK
KworICAgIGlmICgqdXJpU3RhcnQgPT0gJyInIHx8ICp1cmlTdGFydCA9PSAnXCcnKSB7CisgICAg
ICAgIFVDaGFyIHF1b3RlID0gKnVyaVN0YXJ0OworICAgICAgICArK3VyaVN0YXJ0OworCisgICAg
ICAgIFVDaGFyKiBzdHJpbmdFbmQgPSBjaGVja1N0cmluZyh1cmlTdGFydCwgcXVvdGUpOworICAg
ICAgICBpZiAoIXN0cmluZ0VuZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RyaW5n
RW5kID0gc2tpcFdoaXRlU3BhY2VzKHN0cmluZ0VuZCk7CisgICAgICAgIGlmICgqc3RyaW5nRW5k
ICE9ICcpJykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdGFydCA9IHJlc3VsdCA9
IG1fZGF0YSA9IHVyaVN0YXJ0OworICAgICAgICBwYXJzZVN0cmluZyhyZXN1bHQsIHF1b3RlKTsK
KworICAgICAgICBtX2RhdGEgPSBzdHJpbmdFbmQgKyAxOworICAgICAgICBtX3Rva2VuID0gVVJJ
OworICAgIH0gZWxzZSB7CisgICAgICAgIFVDaGFyKiBzdHJpbmdFbmQgPSB1cmlTdGFydDsKKwor
ICAgICAgICB3aGlsZSAoaXNVUklMZXR0ZXIoKnN0cmluZ0VuZCkpIHsKKyAgICAgICAgICAgIGlm
ICgqc3RyaW5nRW5kICE9ICdcXCcpCisgICAgICAgICAgICAgICAgKytzdHJpbmdFbmQ7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHJpbmdFbmQgPSBjaGVja0VzY2FwZShz
dHJpbmdFbmQpOworICAgICAgICAgICAgICAgIGlmICghc3RyaW5nRW5kKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjYW4ndCBoYW5k
bGUgY2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgICAgICBpZiAodWMgPiAweGZmZmYpCi0gICAg
ICAgICAgICAgICAgdWMgPSAweGZmZmQ7Ci0gICAgICAgICAgICAqb3V0KysgPSB1YzsKLSAgICAg
ICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKmN1cnJlbnQp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZXNj
YXBlICYmICpjdXJyZW50ID09ICdcXCcpIHsKLSAgICAgICAgICAgIGVzY2FwZSA9IGN1cnJlbnQ7
Ci0gICAgICAgICAgICBzYXdFc2NhcGUgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgc3RyaW5nRW5kID0gc2tpcFdoaXRlU3BhY2VzKHN0cmluZ0VuZCk7CisgICAgICAg
IGlmICgqc3RyaW5nRW5kICE9ICcpJykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBz
dGFydCA9IHJlc3VsdCA9IG1fZGF0YSA9IHVyaVN0YXJ0OworICAgICAgICB3aGlsZSAoaXNVUklM
ZXR0ZXIoKm1fZGF0YSkpIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoKm1fZGF0YSAhPSAnXFwn
KSkKKyAgICAgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9kYXRhKys7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcGFyc2VFc2NhcGUocmVzdWx0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fZGF0YSA9IHN0cmluZ0VuZCArIDE7CisgICAgICAgIG1fdG9rZW4gPSBVUkk7Cisg
ICAgfQorfQorCitpbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVW5pY29kZVJhbmdlKCkKK3sK
KyAgICBVQ2hhciogZGF0YSA9IG1fZGF0YSArIDE7CisgICAgaW50IGxlbmd0aCA9IDY7CisgICAg
QVNTRVJUKCptX2RhdGEgPT0gJysnKTsKKworICAgIHdoaWxlIChpc0FTQ0lJSGV4RGlnaXQoKmRh
dGEpICYmIGxlbmd0aCkgeworICAgICAgICArK2RhdGE7CisgICAgICAgIC0tbGVuZ3RoOworICAg
IH0KKworICAgIGlmIChsZW5ndGggJiYgKmRhdGEgPT0gJz8nKSB7CisgICAgICAgIC8vIEF0IG1v
c3QgNSBoZXggZGlnaXQgZm9sbG93ZWQgYnkgYSBxdWVzdGlvbiBtYXJrLgorICAgICAgICBkbyB7
CisgICAgICAgICAgICArK2RhdGE7CisgICAgICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgfSB3
aGlsZSAoKmRhdGEgPT0gJz8nICYmIGxlbmd0aCk7CisgICAgICAgIG1fZGF0YSA9IGRhdGE7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChsZW5ndGggPCA2KSB7CisgICAg
ICAgIC8vIEF0IGxlYXN0IG9uZSBoZXggZGlnaXQuCisgICAgICAgIGlmIChkYXRhWzBdID09ICct
JyAmJiBpc0FTQ0lJSGV4RGlnaXQoZGF0YVsxXSkpIHsKKyAgICAgICAgICAgIC8vIEZvbGxvd2Vk
IGJ5IGEgZGFzaCBhbmQgYSBoZXggZGlnaXQuCisgICAgICAgICAgICArK2RhdGE7CisgICAgICAg
ICAgICBsZW5ndGggPSA2OworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICsrZGF0
YTsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuZ3RoICYmIGlzQVNDSUlIZXhEaWdpdCgqZGF0
YSkpOwogICAgICAgICB9Ci0gICAgICAgICpvdXQrKyA9ICpjdXJyZW50OworICAgICAgICBtX2Rh
dGEgPSBkYXRhOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGVzY2FwZSkg
ewotICAgICAgICAvLyBhZGQgZXNjYXBlZCBjaGFyCi0gICAgICAgIHVuc2lnbmVkIHVjID0gMDsK
LSAgICAgICAgZXNjYXBlKys7Ci0gICAgICAgIHdoaWxlIChlc2NhcGUgPCBzdGFydCtsKSB7Ci0g
ICAgICAgICAgICB1YyAqPSAxNjsKLSAgICAgICAgICAgIHVjICs9IHRvQVNDSUlIZXhWYWx1ZSgq
ZXNjYXBlKTsKLSAgICAgICAgICAgIGVzY2FwZSsrOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlTnRoQ2hpbGQoKQoreworICAgIFVDaGFyKiBkYXRhID0gbV9k
YXRhOworCisgICAgd2hpbGUgKGlzQVNDSUlEaWdpdCgqZGF0YSkpCisgICAgICAgICsrZGF0YTsK
KyAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKCpkYXRhLCAnbicpKSB7CisgICAgICAgIG1fZGF0YSA9
IGRhdGEgKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VOdGhDaGlsZEV4dHJhKCkKK3sKKyAgICBVQ2hh
ciogZGF0YSA9IHNraXBXaGl0ZVNwYWNlcyhtX2RhdGEpOworICAgIGlmICgqZGF0YSAhPSAnKycg
JiYgKmRhdGEgIT0gJy0nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkYXRhID0gc2tp
cFdoaXRlU3BhY2VzKGRhdGEgKyAxKTsKKyAgICBpZiAoIWlzQVNDSUlEaWdpdCgqZGF0YSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvIHsKKyAgICAgICAgKytkYXRhOworICAgIH0g
d2hpbGUgKGlzQVNDSUlEaWdpdCgqZGF0YSkpOworCisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3RGdW5jdGlvblRv
a2VuKGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0aCA+IDApOworICAgIFVDaGFyKiBu
YW1lID0gbV90b2tlblN0YXJ0OworCisgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICBjYXNlIDM6
CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ24nKSAmJiBpc0Nhc2VsZXNz
RXF1YWwobmFtZVsxXSwgJ28nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkKKyAg
ICAgICAgICAgIG1fdG9rZW4gPSBOT1RGVU5DVElPTjsKKyAgICAgICAgZWxzZSBpZiAoaXNDYXNl
bGVzc0VxdWFsKG5hbWVbMF0sICd1JykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdyJykg
JiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdsJykpCisgICAgICAgICAgICBtX3Rva2VuID0g
VVJJOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIDk6CisgICAgICAgIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwobmFtZSwgIm50aC1jaGlsZCIpKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9
IE50aENoaWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAxMToKKyAgICAgICAg
aWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLW9mLXR5cGUiKSkKKyAgICAgICAgICAgIG1f
cGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
MTQ6CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50aC1sYXN0LWNoaWxkIikp
CisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIDE2OgorICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUsICJu
dGgtbGFzdC1vZi10eXBlIikpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRN
b2RlOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6
OmRldGVjdE1lZGlhUXVlcnlUb2tlbihpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChtX3BhcnNp
bmdNb2RlID09IE1lZGlhUXVlcnlNb2RlKTsKKyAgICBVQ2hhciogbmFtZSA9IG1fdG9rZW5TdGFy
dDsKKworICAgIGlmIChsZW5ndGggPT0gMykgeworICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFs
KG5hbWVbMF0sICdhJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICduJykgJiYgaXNDYXNl
bGVzc0VxdWFsKG5hbWVbMl0sICdkJykpCisgICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfQU5E
OworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ24nKSAmJiBpc0Nh
c2VsZXNzRXF1YWwobmFtZVsxXSwgJ28nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3Qn
KSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJQV9OT1Q7CisgICAgfSBlbHNlIGlmIChsZW5n
dGggPT0gNCkgeworICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICdvJykgJiYg
aXNDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICduJykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2Vs
ZXNzRXF1YWwobmFtZVsyXSwgJ2wnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVszXSwgJ3knKSkK
KyAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX09OTFk7CisgICAgfQorfQorCitpbmxpbmUgdm9p
ZCBDU1NQYXJzZXI6OmRldGVjdE51bWJlclRva2VuKFVDaGFyKiB0eXBlLCBpbnQgbGVuZ3RoKQor
eworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKworICAgIHN3aXRjaCAobG93ZXJjYXNlQ2hhcmFj
dGVyKHR5cGVbMF0pKSB7CisgICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAm
JiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBD
TVM7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2QnOgorICAgICAgICBpZiAobGVuZ3Ro
ID09IDMgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFs
KHR5cGVbMl0sICdnJykpCisgICAgICAgICAgICBtX3Rva2VuID0gREVHUzsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSAnZSc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMikgeworICAgICAg
ICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBFTVM7CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlw
ZVsxXSwgJ3gnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRVhTOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2cnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQg
JiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdyJykKKyAgICAgICAgICAgICAgICAmJiBpc0Nh
c2VsZXNzRXF1YWwodHlwZVsyXSwgJ2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ2Qn
KSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBHUkFEUzsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSAnaCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlw
ZVsxXSwgJ3onKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBIRVJUWjsKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSAnaSc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNz
RXF1YWwodHlwZVsxXSwgJ24nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJTlM7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgJ2snOgorICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXND
YXNlbGVzc0VxdWFsKHR5cGVbMV0sICdoJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICd6
JykpCisgICAgICAgICAgICBtX3Rva2VuID0gS0hFUlRaOworICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlICdtJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICBpZiAo
aXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IE1NUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAncycp
KQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBNU0VDUzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7CisgICAg
ICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd4JykpCisgICAgICAgICAgICAg
ICAgbV90b2tlbiA9IFBYUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0
eXBlWzFdLCAndCcpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQVFM7CisgICAgICAgICAg
ICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2MnKSkKKyAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gUENTOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
J3InOgorICAgICAgICBpZiAobGVuZ3RoID09IDMpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwodHlwZVsxXSwgJ2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2QnKSkK
KyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUkFEUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
Q2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAn
bScpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSRU1TOwogICAgICAgICB9Ci0gICAgICAg
IC8vIGNhbid0IGhhbmRsZSBjaGFycyBvdXRzaWRlIHVjczIKLSAgICAgICAgaWYgKHVjID4gMHhm
ZmZmKQotICAgICAgICAgICAgdWMgPSAweGZmZmQ7Ci0gICAgICAgICpvdXQrKyA9IHVjOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlICdzJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQor
ICAgICAgICAgICAgbV90b2tlbiA9IFNFQ1M7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
J3QnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICd1JykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ3InKSAm
JiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ24nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBU
VVJOUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKHR5cGVb
MF0gPT0gJ18nICYmIGxlbmd0aCA9PSA1ICYmIHR5cGVbMV0gPT0gJ18nICYmIGlzQ2FzZWxlc3NF
cXVhbCh0eXBlWzJdLCAncScpCisgICAgICAgICAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKHR5
cGVbM10sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbNF0sICdtJykpCisgICAgICAgICAg
ICBtX3Rva2VuID0gUUVNUzsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KK30KKworaW5saW5lIHZv
aWQgQ1NTUGFyc2VyOjpkZXRlY3REYXNoVG9rZW4oaW50IGxlbmd0aCkKK3sKKyAgICBVQ2hhciog
bmFtZSA9IG1fdG9rZW5TdGFydDsKKworICAgIGlmIChsZW5ndGggPT0gMTEpIHsKKyAgICAgICAg
aWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ3knKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFt
ZSArIDEsICJ3ZWJraXQtYW4iKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBBTllGVU5DVElPTjsK
KyAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAnbicpICYmIGlzQ2Fz
ZWxlc3NFcXVhbChuYW1lICsgMSwgIndlYmtpdC1taSIpKQorICAgICAgICAgICAgbV90b2tlbiA9
IE1JTkZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMF0s
ICd4JykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0LW1hIikpCisgICAgICAg
ICAgICBtX3Rva2VuID0gTUFYRlVOQ1RJT047CisgICAgfSBlbHNlIGlmIChsZW5ndGggPT0gMTIg
JiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0LWNhbGMiKSkKKyAgICAgICAgbV90
b2tlbiA9IENBTENGVU5DVElPTjsKK30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3RB
dFRva2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQoreworICAgIFVDaGFyKiBuYW1lID0g
bV90b2tlblN0YXJ0OworICAgIEFTU0VSVChuYW1lWzBdID09ICdAJyAmJiBsZW5ndGggPj0gMik7
CisKKyAgICAvLyBjaGFyc2V0LCBmb250LWZhY2UsIGltcG9ydCwgbWVkaWEsIG5hbWVzcGFjZSwg
cGFnZSwKKyAgICAvLyAtd2Via2l0LWtleWZyYW1lcywgYW5kIC13ZWJraXQtbWVkaWFxdWVyeSBh
cmUgbm90IGFmZmVjdGVkIGJ5IGhhc0VzY2FwZS4KKyAgICBzd2l0Y2ggKGxvd2VyY2FzZUNoYXJh
Y3RlcihuYW1lWzFdKSkgeworICAgIGNhc2UgJ2InOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7CisgICAgICAg
IGNhc2UgMTI6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0
b20tbGVmdCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUX1NZTTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAgaWYgKGlz
Q2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm90dG9tLXJpZ2h0IikpCisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IEJPVFRPTVJJR0hUX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBjYXNlIDE0OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm90
dG9tLWNlbnRlciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01DRU5URVJfU1lN
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTk6CisgICAgICAgICAgICBp
ZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0b20tbGVmdC1jb3JuZXIiKSkKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NTEVGVENPUk5FUl9TWU07CisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJvdHRvbS1yaWdodC1jb3JuZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gQk9UVE9NUklHSFRDT1JORVJfU1lNOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2MnOgorICAgICAgICBpZiAobGVuZ3Ro
ID09IDggJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaGFyc2V0IikpCisgICAgICAgICAg
ICBtX3Rva2VuID0gQ0hBUlNFVF9TWU07CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2Yn
OgorICAgICAgICBpZiAobGVuZ3RoID09IDEwICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwg
Im9udC1mYWNlIikpCisgICAgICAgICAgICBtX3Rva2VuID0gRk9OVF9GQUNFX1NZTTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSAnaSc6CisgICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBp
c0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJtcG9ydCIpKSB7CisgICAgICAgICAgICBtX3BhcnNp
bmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CisgICAgICAgICAgICBtX3Rva2VuID0gSU1QT1JUX1NZ
TTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdsJzoKKyAgICAgICAg
aWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobGVuZ3Ro
ID09IDkpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJlZnQt
dG9wIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IExFRlRUT1BfU1lNOworICAgICAgICB9
IGVsc2UgaWYgKGxlbmd0aCA9PSAxMikgeworICAgICAgICAgICAgLy8gQ2hlY2tpbmcgdGhlIGxh
c3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3NzaWJpbGUgY2Fz
ZXMuCisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTFdLCAnZScpICYmIGlz
Q2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC1taWRkbCIpKQorICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBMRUZUTUlERExFX1NZTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NF
cXVhbChuYW1lWzExXSwgJ20nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJlZnQtYm90
dG8iKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTEVGVEJPVFRPTV9TWU07CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnbSc6CisgICAgICAgIGlmIChsZW5ndGgg
PT0gNiAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJlZGlhIikpIHsKKyAgICAgICAgICAg
IG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBN
RURJQV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnbic6Cisg
ICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiYW1l
c3BhY2UiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBOQU1FU1BBQ0VfU1lNOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzQ2Fz
ZWxlc3NFcXVhbChuYW1lICsgMiwgImFnZSIpKQorICAgICAgICAgICAgbV90b2tlbiA9IFBBR0Vf
U1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdyJzoKKyAgICAgICAgaWYgKGhhc0Vz
Y2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobGVuZ3RoID09IDEwKSB7
CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC10b3AiKSkK
KyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRUT1BfU1lNOworICAgICAgICB9IGVsc2Ug
aWYgKGxlbmd0aCA9PSAxMykgeworICAgICAgICAgICAgLy8gQ2hlY2tpbmcgdGhlIGxhc3QgY2hh
cmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3NzaWJpbGUgY2FzZXMuCisg
ICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAnZScpICYmIGlzQ2FzZWxl
c3NFcXVhbChuYW1lICsgMiwgImlnaHQtbWlkZGwiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gUklHSFRNSURETEVfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFs
KG5hbWVbMTJdLCAnbScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImlnaHQtYm90dG8i
KSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRCT1RUT01fU1lNOworICAgICAgICB9
CisgICAgICAgIHJldHVybjsKIAotICAgICpsZW5ndGggPSBvdXQgLSBzdGFydDsKKyAgICBjYXNl
ICd0JzoKKyAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAg
IC8vIElmIHdlIGhhdmUgYW4gdW5yZWNvZ25pemVkIEAta2V5d29yZCwgYW5kIGlmIHdlIGhhbmRs
ZWQgYW55IGVzY2FwZXMgYXQgYWxsLCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIGF0dGVtcHQgdG8g
YWRqdXN0IHl5VG9rIHRvIHRoZSBjb3JyZWN0IHR5cGUuCi0gICAgaWYgKHl5VG9rID09IEFUS0VZ
V09SRCAmJiBzYXdFc2NhcGUpCi0gICAgICAgIHJlY2hlY2tBdEtleXdvcmQoc3RhcnQsICpsZW5n
dGgpOworICAgICAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgICAgICBjYXNlIDk6CisgICAgICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3AtbGVmdCIpKQorICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBUT1BMRUZUX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKIAotICAg
IHJldHVybiBzdGFydDsKKyAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwobmFtZSArIDIsICJvcC1yaWdodCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBUT1BSSUdIVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxMToK
KyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1jZW50ZXIiKSkK
KyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QQ0VOVEVSX1NZTTsKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVh
bChuYW1lICsgMiwgIm9wLWxlZnQtY29ybmVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IFRPUExFRlRDT1JORVJfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2Ug
MTc6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3AtcmlnaHQt
Y29ybmVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUFJJR0hUQ09STkVSX1NZTTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlICctJzoKKyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMzoKKyAg
ICAgICAgICAgIGlmICghaGFzRXNjYXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndl
YmtpdC1ydWxlIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9SVUxFX1NZTTsK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgaWYg
KGhhc0VzY2FwZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIENo
ZWNraW5nIHRoZSBsYXN0IGNoYXJhY3RlciBmaXJzdCBjb3VsZCBmdXJ0aGVyIHJlZHVjZSB0aGUg
cG9zc2liaWxlIGNhc2VzLgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEz
XSwgJ3MnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtZGVjbCIpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfREVDTFNfU1lNOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTNdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbChu
YW1lICsgMiwgIndlYmtpdC12YWx1IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJ
VF9WQUxVRV9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNzoKKyAg
ICAgICAgICAgIGlmICghaGFzRXNjYXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndl
YmtpdC1zZWxlY3RvciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfU0VMRUNU
T1JfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTg6CisgICAgICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Via2l0LWtleWZyYW1lcyIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfS0VZRlJBTUVTX1NZTTsKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE5OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxl
c3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1tZWRpYXF1ZXJ5IikpIHsKKyAgICAgICAgICAgICAg
ICBtX3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CisgICAgICAgICAgICAgICAgbV90b2tl
biA9IFdFQktJVF9NRURJQVFVRVJZX1NZTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBjYXNlIDIyOgorICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYg
aXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Via2l0LWtleWZyYW1lLXJ1bGUiKSkKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX0tFWUZSQU1FX1JVTEVfU1lNOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogfQogCi12b2lkIENTU1BhcnNlcjo6Y291bnRM
aW5lcygpCitpbnQgQ1NTUGFyc2VyOjpsZXgodm9pZCogeXlsdmFsV2l0aG91dFR5cGUpCiB7Ci0g
ICAgZm9yIChVQ2hhciogY3VycmVudCA9IHl5dGV4dDsgY3VycmVudCA8IHl5dGV4dCArIHl5bGVu
ZzsgKytjdXJyZW50KSB7Ci0gICAgICAgIGlmICgqY3VycmVudCA9PSAnXG4nKQotICAgICAgICAg
ICAgKyttX2xpbmVOdW1iZXI7CisgICAgWVlTVFlQRSogeXlsdmFsID0gc3RhdGljX2Nhc3Q8WVlT
VFlQRSo+KHl5bHZhbFdpdGhvdXRUeXBlKTsKKyAgICAvLyBXcml0ZSBwb2ludGVyIGZvciB0aGUg
bmV4dCBjaGFyYWN0ZXIuCisgICAgVUNoYXIqIHJlc3VsdDsKKyAgICBib29sIGhhc0VzY2FwZTsK
KworICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgdGVybWluYXRlZCBieSB0d28gXDAsIHNvCisg
ICAgLy8gaXQgaXMgc2FmZSB0byByZWFkIHR3byBjaGFyYWN0ZXJzIGFoZWFkIGFueXRpbWUuCisK
KyNpZm5kZWYgTkRFQlVHCisgICAgLy8gSW4gZGVidWcgd2UgY2hlY2sgd2l0aCBhbiBBU1NFUlQg
dGhhdCB0aGUgbGVuZ3RoIGlzID4gMCBmb3Igc3RyaW5nIHR5cGVzLgorICAgIHl5bHZhbC0+c3Ry
aW5nLmNoYXJhY3RlcnMgPSAwOworICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IDA7CisjZW5k
aWYKKworICAgIC8vIFRoaXMgaXMgbm90IGEgcmVhbCBsb29wLCBqdXN0IGFsbG93cyB1cyB0byBh
dm9pZCBnb3Rvcy4KKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBtX3Rva2VuU3RhcnQgPSBy
ZXN1bHQgPSBtX2RhdGE7CisgICAgICAgIG1fdG9rZW4gPSAqbV9kYXRhOworICAgICAgICArK21f
ZGF0YTsKKworICAgICAgICBzd2l0Y2ggKChtX3Rva2VuIDw9IDEyNykgPyB0eXBlc09mQVNDSUlD
aGFyYWN0ZXJzW21fdG9rZW5dIDogQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0KSB7CisgICAgICAg
IGNhc2UgQ2hhcmFjdGVyQ2FzZWxlc3NVOgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCptX2Rh
dGEgPT0gJysnKSkKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2UoKSkgewor
ICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gVU5JQ09ERVJBTkdFOworICAgICAgICAgICAg
ICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAg
ICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3Rh
cnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQuCisKKyAg
ICAgICAgY2FzZSBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQ6CisgICAgICAgICAgICAtLW1fZGF0
YTsKKyAgICAgICAgICAgIGhhc0VzY2FwZSA9IHBhcnNlSWRlbnRpZmllcihyZXN1bHQpOworICAg
ICAgICAgICAgbV90b2tlbiA9IElERU5UOworCisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5j
aGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVu
Z3RoID0gcmVzdWx0IC0gbV90b2tlblN0YXJ0OworCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
Km1fZGF0YSA9PSAnKCcpKSB7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEZVTkNUSU9OOwor
ICAgICAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQorICAgICAgICAgICAgICAgICAgICBkZXRl
Y3RGdW5jdGlvblRva2VuKHJlc3VsdCAtIG1fdG9rZW5TdGFydCk7CisgICAgICAgICAgICAgICAg
KyttX2RhdGE7CisgICAgICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgICAgICAgICAgICAgKyt5
eWx2YWwtPnN0cmluZy5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4oKSA9PSBV
UkkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IEZVTkNUSU9OOworICAgICAgICAg
ICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGl0IGlzIHJlYWxseSBhbiBVUkkuCisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlVVJJKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAtIHl5
bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlICE9IE5vcm1hbE1vZGUpICYmICFoYXNF
c2NhcGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5
TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgZGV0ZWN0TWVkaWFRdWVyeVRva2VuKHJlc3VsdCAt
IG1fdG9rZW5TdGFydCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobV9wYXJzaW5nTW9kZSA9
PSBOdGhDaGlsZE1vZGUgJiYgaXNDYXNlbGVzc0VxdWFsKG1fdG9rZW5TdGFydFswXSwgJ24nKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IC0gbV90b2tlblN0YXJ0ID09IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAibiIgaXMgSURFTlQgYnV0ICJuKzEi
IGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmEo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90
b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHJlc3VsdCAtIG1fdG9rZW5TdGFydCA9PSAyICYmIG1fdG9rZW5TdGFydFsx
XSA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAibi0iIGlzIElE
RU5UIGJ1dCAibi0xIiBpcyBOVEguCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjdWxh
dGl2ZWx5IGRlY3JlYXNlIG1fZGF0YSB0byBkZXRlY3QgYW4gbnRoLWNoaWxkIHRva2VuLgorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLS07CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyc2VOdGhDaGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5n
Lmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFu
Z2UgdG8gbV9kYXRhIGlmIHVuc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RhdGErKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyRG90OgorICAgICAgICAgICAgaWYgKCFpc0FTQ0lJ
RGlnaXQobV9kYXRhWzBdKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8v
IEZhbGwgdGhyb3VnaCB0byBDaGFyYWN0ZXJOdW1iZXIuCisKKyAgICAgICAgY2FzZSBDaGFyYWN0
ZXJOdW1iZXI6IHsKKyAgICAgICAgICAgIGJvb2wgZG90U2VlbiA9IChtX3Rva2VuID09ICcuJyk7
CisKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJRGlnaXQobV9kYXRhWzBdKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IG9uZSBk
b3QgaXMgYWxsb3dlZCBmb3IgYSBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBp
dCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgZGlnaXQuCisgICAgICAgICAgICAgICAgICAgIGlmICht
X2RhdGFbMF0gIT0gJy4nIHx8IGRvdFNlZW4gfHwgIWlzQVNDSUlEaWdpdChtX2RhdGFbMV0pKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRvdFNl
ZW4gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK21fZGF0YTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUg
PT0gTnRoQ2hpbGRNb2RlKSAmJiAhZG90U2VlbiAmJiBpc0Nhc2VsZXNzRXF1YWwoKm1fZGF0YSwg
J24nKSkgeworICAgICAgICAgICAgICAgIC8vICJbMC05XStuIiBpcyBhbHdheXMgYW4gTnRoQ2hp
bGQuCisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAgcGFyc2VOdGhD
aGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAg
ICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAg
ICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeXlsdmFs
LT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUobV90b2tlblN0YXJ0LCBtX2RhdGEgLSBtX3Rv
a2VuU3RhcnQpOworCisgICAgICAgICAgICAvLyBUeXBlIG9mIHRoZSBmdW5jdGlvbi4KKyAgICAg
ICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydCgpKSB7CisgICAgICAgICAgICAgICAgVUNoYXIq
IHR5cGUgPSBtX2RhdGE7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9kYXRhOworCisgICAg
ICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVudGlmaWVyKHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgaWYgKCptX2RhdGEgPT0gJysnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFu
eSBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IGEgJysnIHNpZ24gaXMgYW4gaW52YWxpZCBkaW1lbnNp
b24uCisgICAgICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgICAgICBt
X3Rva2VuID0gSU5WQUxJRERJTUVOOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBESU1FTjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFo
YXNFc2NhcGUpCisgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3ROdW1iZXJUb2tlbih0eXBl
LCBtX2RhdGEgLSB0eXBlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAobV90b2tlbiA9PSBE
SU1FTikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRlY29kZWQgbnVtYmVyIGlz
IG92ZXJ3cml0dGVuLCBidXQgdGhpcyBpcyBpbnRlbnRpb25hbC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2Vu
U3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCptX2RhdGEgPT0gJyUnKSB7CisgICAgICAgICAgICAgICAgLy8gQWx0
aG91Z2ggdGhlIENTUyBncmFtbWFyIHNheXMge251bX0lIHdlIGZvbGxvdworICAgICAgICAgICAg
ICAgIC8vIHdlYmtpdCBhdCB0aGUgbW9tZW50IHdoaWNoIHVzZXMge251bX0lKy4KKyAgICAgICAg
ICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKCptX2RhdGEgPT0gJyUnKTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0g
UEVSQ0VOVEFHRTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBkb3RTZWVuID8gRkxPQVRUT0tFTiA6IElOVEVHRVI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyRGFzaDoKKyAgICAgICAgICAgIGlmIChp
c0lkZW50aWZpZXJTdGFydEFmdGVyRGFzaChtX2RhdGEpKSB7CisgICAgICAgICAgICAgICAgLS1t
X2RhdGE7CisgICAgICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVudGlmaWVyKHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IElERU5UOworCisgICAgICAgICAgICAgICAg
aWYgKCptX2RhdGEgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBGVU5D
VElPTjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXRlY3REYXNoVG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAg
ICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAgICAgICsrcmVzdWx0Owor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9PSBOdGhD
aGlsZE1vZGUpICYmICFoYXNFc2NhcGUgJiYgaXNDYXNlbGVzc0VxdWFsKG1fdG9rZW5TdGFydFsx
XSwgJ24nKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IC0gbV90b2tlblN0YXJ0
ID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4iIGlzIElERU5U
IGJ1dCAiLW4rMSIgaXMgTlRILgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRo
Q2hpbGRFeHRyYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5U
SDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2RhdGE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0
IC0gbV90b2tlblN0YXJ0ID09IDMgJiYgbV90b2tlblN0YXJ0WzJdID09ICctJykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICItbi0iIGlzIElERU5UIGJ1dCAiLW4tMSIgaXMg
TlRILgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSBkZWNyZWFzZSBt
X2RhdGEgdG8gZGV0ZWN0IGFuIG50aC1jaGlsZCB0b2tlbi4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGF0YS0tOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRF
eHRyYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEg
LSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlIHRvIG1fZGF0YSBpZiB1
bnN1Y2Nlc3NmdWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhKys7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9r
ZW5TdGFydDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSByZXN1bHQg
LSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZGF0YVswXSA9PSAnLScg
JiYgbV9kYXRhWzFdID09ICc+JykgeworICAgICAgICAgICAgICAgIG1fZGF0YSArPSAyOworICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBTR01MX0NEOworICAgICAgICAgICAgfSBlbHNlIGlmIChV
TkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkpIHsKKyAgICAgICAgICAgICAg
ICAvLyAiLVswLTldK24iIGlzIGFsd2F5cyBhbiBOdGhDaGlsZC4KKyAgICAgICAgICAgICAgICBp
ZiAocGFyc2VOdGhDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRF
eHRyYSgpOworICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAg
ICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAg
ICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3Rh
cnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJPdGhlcjoKKyAgICAgICAgICAgIC8vIG1fdG9rZW4g
aXMgc2ltcGx5IHRoZSBjdXJyZW50IGNoYXJhY3Rlci4KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgQ2hhcmFjdGVyV2hpdGVTcGFjZToKKyAgICAgICAgICAgIG1fdG9rZW4gPSBX
SElURVNQQUNFOworICAgICAgICAgICAgLy8gTWlnaHQgc3RhcnQgd2l0aCBhICdcbicuCisgICAg
ICAgICAgICAtLW1fZGF0YTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAo
Km1fZGF0YSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICArK21fbGluZU51bWJlcjsKKyAg
ICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgIH0gd2hpbGUgKCptX2RhdGEgPD0g
JyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWyptX2RhdGFdID09IENoYXJhY3RlcldoaXRl
U3BhY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyRW5k
TWVkaWFRdWVyeToKKyAgICAgICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE1lZGlhUXVlcnlN
b2RlKQorICAgICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2RlOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJFbmROdGhDaGlsZDoKKyAgICAg
ICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkKKyAgICAgICAgICAgICAg
ICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgQ2hhcmFjdGVyUXVvdGU6CisgICAgICAgICAgICBpZiAoY2hlY2tTdHJpbmcobV9k
YXRhLCBtX3Rva2VuKSkgeworICAgICAgICAgICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAg
ICAgIHBhcnNlU3RyaW5nKHJlc3VsdCwgbV90b2tlbik7CisgICAgICAgICAgICAgICAgbV90b2tl
biA9IFNUUklORzsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0g
bV90b2tlblN0YXJ0ICsgMTsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGgg
PSByZXN1bHQgLSAobV90b2tlblN0YXJ0ICsgMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyazogeworICAg
ICAgICAgICAgVUNoYXIqIHN0YXJ0ID0gc2tpcFdoaXRlU3BhY2VzKG1fZGF0YSk7CisgICAgICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHN0YXJ0LCAiaW1wb3J0YW50IikpIHsKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gSU1QT1JUQU5UX1NZTTsKKyAgICAgICAgICAgICAgICBtX2RhdGEg
PSBzdGFydCArIDk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2UgQ2hhcmFjdGVySGFzaG1hcms6IHsKKyAgICAgICAgICAgIFVDaGFy
KiBzdGFydCA9IG1fZGF0YTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fZGF0YTsKKworICAgICAg
ICAgICAgaWYgKGlzQVNDSUlEaWdpdCgqbV9kYXRhKSkgeworICAgICAgICAgICAgICAgIC8vIFRo
aXMgbXVzdCBiZSBhIHZhbGlkIGhleCBudW1iZXIgdG9rZW4uCisgICAgICAgICAgICAgICAgZG8g
eworICAgICAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICB9IHdoaWxl
IChpc0FTQ0lJSGV4RGlnaXQoKm1fZGF0YSkpOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBI
RVg7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IHN0YXJ0Owor
ICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIHN0YXJ0Owor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc0lkZW50aWZpZXJTdGFydCgpKSB7CisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IElEU0VMOworICAgICAgICAgICAgICAgIGlmICghcGFyc2VJZGVudGlm
aWVyKHJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUg
aWRlbnRpZmllciBpcyBhbHNvIGEgdmFsaWQgaGV4IG51bWJlci4KKyAgICAgICAgICAgICAgICAg
ICAgVUNoYXIqIGN1cnJlbnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9
IEhFWDsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IElEU0VMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChjdXJyZW50IDwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFj
dGVycyA9IHN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJl
c3VsdCAtIHN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIENoYXJhY3RlclNsYXNoOgorICAgICAgICAgICAgLy8gSWdub3Jl
IGNvbW1lbnRzLiBUaGV5IGFyZSBub3QgZXZlbiBjb25zaWRlcmVkIGFzIHdoaXRlIHNwYWNlcy4K
KyAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICcqJykgeworICAgICAgICAgICAgICAgICsrbV9k
YXRhOworICAgICAgICAgICAgICAgIHdoaWxlIChtX2RhdGFbMF0gIT0gJyonIHx8IG1fZGF0YVsx
XSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZGF0YVswXSA9PSAnXG4nKQor
ICAgICAgICAgICAgICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2RhdGFbMF0gPT0gJ1wwJyAmJiBtX2RhdGFbMV0gPT0gJ1wwJykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIGNvbW1lbnRzIGFyZSBzaW1wbHkgaWdu
b3JlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YSAtPSAyOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZGF0
YSArPSAyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJEb2xsYXI6CisgICAgICAgICAg
ICBpZiAoKm1fZGF0YSA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gRU5EU1dJVEg7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlckFzdGVyaXNrOgorICAgICAgICAgICAg
aWYgKCptX2RhdGEgPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IENPTlRBSU5TOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJQbHVzOgorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSkgeworICAgICAgICAgICAgICAg
IC8vIFNpbXBsZXN0IGNhc2UuICIrWzAtOV0qbiIgaXMgYWx3YXlzIE50aENoaWxkLgorICAgICAg
ICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFy
c2VOdGhDaGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Cisg
ICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3Rh
cnQ7CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAt
IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3Rlckxlc3M6CisgICAgICAgICAgICBp
ZiAobV9kYXRhWzBdID09ICchJyAmJiBtX2RhdGFbMV0gPT0gJy0nICYmIG1fZGF0YVsyXSA9PSAn
LScpIHsKKyAgICAgICAgICAgICAgICBtX2RhdGEgKz0gMzsKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gU0dNTF9DRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgQ2hhcmFjdGVyQXQ6CisgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQo
KSkgeworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBBVEtFWVdPUkQ7CisgICAgICAgICAgICAg
ICAgKytyZXN1bHQ7CisgICAgICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVudGlmaWVy
KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgZGV0ZWN0QXRUb2tlbihyZXN1bHQgLSBtX3Rva2Vu
U3RhcnQsIGhhc0VzY2FwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIENoYXJhY3RlckJhY2tTbGFzaDoKKyAgICAgICAgICAgIGlmIChpc0NTU0Vz
Y2FwZSgqbV9kYXRhKSkgeworICAgICAgICAgICAgICAgIC0tbV9kYXRhOworICAgICAgICAgICAg
ICAgIHBhcnNlSWRlbnRpZmllcihyZXN1bHQpOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBJ
REVOVDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tl
blN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAt
IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgQ2hhcmFjdGVyWG9yOgorICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJz0nKSB7
CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEJF
R0lOU1dJVEg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIENoYXJhY3RlclZlcnRpY2FsQmFyOgorICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJz0n
KSB7CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IERBU0hNQVRDSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgQ2hhcmFjdGVyVGlsZGU6CisgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAnPScpIHsK
KyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gSU5D
TFVERVM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgc3dpdGNoICh0b2tlbigpKSB7CisgICAgY2FzZSBTVFJJTkc6CisgICAgICAgIEFTU0VSVCh5
eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID09IG1fdG9rZW5TdGFydCArIDEpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgSURFTlQ6CisgICAgY2FzZSBOVEg6CisgICAgY2FzZSBESU1FTjoK
KyAgICBjYXNlIFVOSUNPREVSQU5HRToKKyAgICBjYXNlIEZVTkNUSU9OOgorICAgIGNhc2UgQU5Z
RlVOQ1RJT046CisgICAgY2FzZSBOT1RGVU5DVElPTjoKKyAgICBjYXNlIENBTENGVU5DVElPTjoK
KyAgICBjYXNlIE1JTkZVTkNUSU9OOgorICAgIGNhc2UgTUFYRlVOQ1RJT046CisgICAgICAgIEFT
U0VSVCh5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID09IG1fdG9rZW5TdGFydCAmJiB5eWx2YWwt
PnN0cmluZy5sZW5ndGggPiAwKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFVSSToKKyAg
ICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgJiYgeXlsdmFsLT5zdHJpbmcu
Y2hhcmFjdGVycyAhPSBtX3Rva2VuU3RhcnQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
SEVYOgorICAgIGNhc2UgSURTRUw6CisgICAgICAgIEFTU0VSVCh5eWx2YWwtPnN0cmluZy5jaGFy
YWN0ZXJzID09IG1fdG9rZW5TdGFydCArIDEgJiYgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID4gMCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHRva2VuKCk7CiB9
CiAKIENTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3Io
KQpAQCAtNzgzNiwyNyArODgwNywyNyBAQCB2b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdE1lZGlh
TGluZShNZWRpYUxpc3QqIG1lZGlhKQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlz
dFN0YXJ0KCkKIHsKLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0geXl0ZXh0IC0gbV9k
YXRhOworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2Rh
dGFTdGFydDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RFbmQoKQogewog
ICAgIGlmICghbV9jdXJyZW50UnVsZURhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICBVQ2hhciog
bGlzdEVuZCA9IHl5dGV4dDsKLSAgICB3aGlsZSAobGlzdEVuZCA+IG1fZGF0YSArIDEpIHsKKyAg
ICBVQ2hhciogbGlzdEVuZCA9IG1fdG9rZW5TdGFydDsKKyAgICB3aGlsZSAobGlzdEVuZCA+IG1f
ZGF0YVN0YXJ0ICsgMSkgewogICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKihsaXN0RW5kIC0gMSkp
KQogICAgICAgICAgICAgLS1saXN0RW5kOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRh
OworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gbGlzdEVuZCAtIG1fZGF0YVN0YXJ0Owog
fQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5U3RhcnQoKQogewotICAgIHVuc2lnbmVk
IG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKLSAgICBpZiAoKnl5dGV4dCA9PSAneycpCisgICAg
dW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQ7CisgICAgaWYgKCpt
X3Rva2VuU3RhcnQgPT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBi
b2R5IG9wZW5pbmcgYnJhY2UuCiAgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5zdGFy
dCkKICAgICAgICAgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gb2Zmc2V0OwpAQCAtNzg2NSw3ICs4
ODM2LDcgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKIAogdm9pZCBDU1NQ
YXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0
IC0gbV9kYXRhOworICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0
YXJ0OwogICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2UuZW5kKQogICAgICAgICBtX3J1
bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0OwogfQpAQCAtNzg3NCwxNSArODg0NSwxNSBAQCB2b2lk
IENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQogewogICAgIGlmICghbV9pblN0eWxlUnVs
ZU9yRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb3BlcnR5UmFuZ2Uuc3Rh
cnQgPSB5eXRleHQgLSBtX2RhdGE7CisgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV90b2tl
blN0YXJ0IC0gbV9kYXRhU3RhcnQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlF
bmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiB7CiAgICAg
aWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIHVu
c2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKLSAgICBpZiAoKnl5dGV4dCA9PSAnOycp
IC8vIEluY2x1ZGUgc2VtaWNvbG9uIGludG8gdGhlIHByb3BlcnR5IHRleHQuCisgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQ7CisgICAgaWYgKCptX3Rva2Vu
U3RhcnQgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xvbiBpbnRvIHRoZSBwcm9wZXJ0eSB0ZXh0
LgogICAgICAgICArK29mZnNldDsKICAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gb2Zmc2V0Owog
ICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYgbV9jdXJyZW50UnVs
ZURhdGEpIHsKQEAgLTc4OTAsNyArODg2MSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVy
dHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAg
ICBjb25zdCB1bnNpZ25lZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwogICAgICAgICBBU1NF
UlQoc3RhcnQgPCBlbmQpOwotICAgICAgICBTdHJpbmcgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmco
bV9kYXRhICsgc3RhcnQsIGVuZCAtIHN0YXJ0KS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAg
U3RyaW5nIHByb3BlcnR5U3RyaW5nID0gU3RyaW5nKG1fZGF0YVN0YXJ0ICsgc3RhcnQsIGVuZCAt
IHN0YXJ0KS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKHByb3BlcnR5U3RyaW5nLmVu
ZHNXaXRoKCI7IiwgdHJ1ZSkpCiAgICAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5
U3RyaW5nLmxlZnQocHJvcGVydHlTdHJpbmcubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgc2l6ZV90
IGNvbG9uSW5kZXggPSBwcm9wZXJ0eVN0cmluZy5maW5kKCI6Iik7CkBAIC04MTA5LDMzICs5MDgw
LDQgQEAgYm9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiB0b2tlbikK
ICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodG9rZW4sICJuIikgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UodG9rZW4sICItbiIpOwogfQogCi0jZGVmaW5lIFlZX0RFQ0wgaW50IENTU1BhcnNlcjo6
bGV4KCkKLSNkZWZpbmUgeXljb25zdCBjb25zdAotdHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsK
LXR5cGVkZWYgdW5zaWduZWQgWVlfQ0hBUjsKLS8vIFRoZSBmb2xsb3dpbmcgbGluZSBtYWtlcyBz
dXJlIHdlIHRyZWF0IG5vbi1MYXRpbi0xIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZWN0bHkuCi0j
ZGVmaW5lIFlZX1NDX1RPX1VJKGMpIChjID4gMHhmZiA/IDB4ZmYgOiBjKQotI2RlZmluZSBZWV9E
T19CRUZPUkVfQUNUSU9OIFwKLSAgICAgICAgeXl0ZXh0ID0geXlfYnA7IFwKLSAgICAgICAgeXls
ZW5nID0gKGludCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgICAgIHl5X2hvbGRfY2hhciA9ICp5
eV9jcDsgXAotICAgICAgICAqeXlfY3AgPSAwOyBcCi0gICAgICAgIHl5X2NfYnVmX3AgPSB5eV9j
cDsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZGVmaW5lIEVDSE8KLSNkZWZpbmUgWVlfUlVM
RV9TRVRVUAotI2RlZmluZSBJTklUSUFMIDAKLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAo
WVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSB5eVRv
ayA9IEVORF9UT0tFTjsgcmV0dXJuIHl5VG9rCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKGEpCi0v
LyBUaGUgZm9sbG93aW5nIGxpbmUgaXMgbmVlZGVkIHRvIGJ1aWxkIHRoZSB0b2tlbml6ZXIgd2l0
aCBhIGNvbmRpdGlvbiBzdGFjay4KLS8vIFRoZSBtYWNybyBpcyB1c2VkIGluIHRoZSB0b2tlbml6
ZXIgZ3JhbW1hciB3aXRoIGxpbmVzIGNvbnRhaW5pbmcKLS8vIEJFR0lOKG1lZGlhcXVlcmllcykg
YW5kIEJFR0lOKGluaXRpYWwpLiB5eV9zdGFydCBhY3RzIGFzIGluZGV4IHRvCi0vLyB0b2tlbml6
ZXIgdHJhbnNpdGlvbiB0YWJsZSwgYW5kICdtZWRpYXF1ZXJpZXMnIGFuZCAnaW5pdGlhbCcgYXJl
Ci0vLyBvZmZzZXQgbXVsdGlwbGllcnMgdGhhdCBzcGVjaWZ5IHdoaWNoIHRyYW5zaXRpb25zIGFy
ZSBhY3RpdmUKLS8vIGluIHRoZSB0b2tlbml6ZXIgZHVyaW5nIGluIGVhY2ggY29uZGl0aW9uICh0
b2tlbml6ZXIgc3RhdGUpLgotI2RlZmluZSBCRUdJTiB5eV9zdGFydCA9IDEgKyAyICoKLQotI2lu
Y2x1ZGUgInRva2VuaXplci5jcHAiCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCAxNmM4
NDEzLi4yM2VkMGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0zMTAsMTIgKzMxMCwyNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlSYW5n
ZS5zdGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CiAgICAgdm9pZCByZXNldFByb3Bl
cnR5TWFya3MoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQg
PSBVSU5UX01BWDsgfQogICAgIGludCBsZXgodm9pZCogeXlsdmFsKTsKLSAgICBpbnQgdG9rZW4o
KSB7IHJldHVybiB5eVRvazsgfQotICAgIFVDaGFyKiB0ZXh0KGludCogbGVuZ3RoKTsKLSAgICB2
b2lkIGNvdW50TGluZXMoKTsKLSAgICBpbnQgbGV4KCk7CisgICAgaW50IHRva2VuKCkgeyByZXR1
cm4gbV90b2tlbjsgfQogCiBwcml2YXRlOgorICAgIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0
YXJ0KCk7CisKKyAgICBzdGF0aWMgaW5saW5lIFVDaGFyKiBjaGVja1N0cmluZyhVQ2hhciosIFVD
aGFyKTsKKworICAgIHZvaWQgcGFyc2VFc2NhcGUoVUNoYXIqJik7CisgICAgaW5saW5lIGJvb2wg
cGFyc2VJZGVudGlmaWVyKFVDaGFyKiYpOworICAgIGlubGluZSB2b2lkIHBhcnNlU3RyaW5nKFVD
aGFyKiYsIFVDaGFyKTsKKyAgICBpbmxpbmUgdm9pZCBwYXJzZVVSSShVQ2hhciomLCBVQ2hhciom
KTsKKyAgICBpbmxpbmUgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZSgpOworICAgIGJvb2wgcGFyc2VO
dGhDaGlsZCgpOworICAgIGJvb2wgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgaW5saW5lIHZv
aWQgZGV0ZWN0RnVuY3Rpb25Ub2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdE1lZGlh
UXVlcnlUb2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdE51bWJlclRva2VuKFVDaGFy
KiwgaW50KTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3REYXNoVG9rZW4oaW50KTsKKyAgICBpbmxp
bmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CisKICAgICB2b2lkIHNldFN0eWxlU2hl
ZXQoQ1NTU3R5bGVTaGVldCopOwogCiAgICAgdm9pZCByZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVD
aGFyKiBzdHIsIGludCBsZW4pOwpAQCAtMzQ4LDE1ICszNjIsMTcgQEAgcHJpdmF0ZToKICAgICBi
b29sIHBhcnNlRm9udEZhY2VTcmNVUkkoQ1NTVmFsdWVMaXN0Kik7CiAgICAgYm9vbCBwYXJzZUZv
bnRGYWNlU3JjTG9jYWwoQ1NTVmFsdWVMaXN0Kik7CiAKKyAgICBlbnVtIFBhcnNpbmdNb2RlIHsK
KyAgICAgICAgTm9ybWFsTW9kZSwKKyAgICAgICAgTWVkaWFRdWVyeU1vZGUsCisgICAgICAgIE50
aENoaWxkTW9kZQorICAgIH07CisKKyAgICBQYXJzaW5nTW9kZSBtX3BhcnNpbmdNb2RlOworICAg
IFVDaGFyKiBtX2RhdGFTdGFydDsKICAgICBVQ2hhciogbV9kYXRhOwotICAgIFVDaGFyKiB5eXRl
eHQ7Ci0gICAgVUNoYXIqIHl5X2NfYnVmX3A7Ci0gICAgVUNoYXIgeXlfaG9sZF9jaGFyOwotICAg
IGludCB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBVQ2hhciogeXlfbGFzdF9hY2NlcHRp
bmdfY3BvczsKLSAgICBpbnQgeXlsZW5nOwotICAgIGludCB5eVRvazsKLSAgICBpbnQgeXlfc3Rh
cnQ7CisgICAgVUNoYXIqIG1fdG9rZW5TdGFydDsKKyAgICBpbnQgbV90b2tlbjsKICAgICBpbnQg
bV9saW5lTnVtYmVyOwogICAgIGludCBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXI7CiAKLS0gCjEu
Ny4yLjUKCg==
</data>
<flag name="review"
          id="118587"
          type_id="1"
          status="-"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="118589"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118964</attachid>
            <date>2011-12-12 23:32:21 -0800</date>
            <delta_ts>2011-12-12 23:32:21 -0800</delta_ts>
            <desc>CPU cycle measure</desc>
            <filename>0001-lexer-cycles.patch</filename>
            <type>text/plain</type>
            <size>2703</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAwMTA4MGJlM2VmNTdhY2RjOWJhMzUzNzg5MDQ4MWJkZWFkMDM5ODMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogRnJpLCAxNCBPY3QgMjAxMSAwNTo1ODoyMSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGxl
eGVyLWN5Y2xlcwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCAgfCAgIDI3
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5oICAgIHwgICAgMSArCiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAgfCAgICAy
ICsrCiAzIGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBkZTk1NzE4Li42YzIzM2VmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcApAQCAtNjc4NSwxMiArNjc4NSwzNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VGb250RmVhdHVyZVNldHRpbmdzKGJvb2wgaW1wb3J0YW50KQogCiBzdGF0aWMgaW5saW5l
IGludCB5eWVycm9yKGNvbnN0IGNoYXIqKSB7IHJldHVybiAxOyB9CiAKKyNkZWZpbmUgREVGX0NZ
Q0xFUyBcCisgICAgdW5pb24geyBcCisgICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZTMyeDJbMl07
IFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlNjQ7IFwKKyAgICB9IGN5Y2xlcwor
CisjZGVmaW5lIEdFVF9DWUNMRVMgXAorICAgIGFzbSAoIFwKKyAgICAgICAgInJkdHNjXG4iIFwK
KyAgICAgICAgIm1vdmwgJSVlYXgsICUwXG4iIFwKKyAgICAgICAgIm1vdmwgJSVlZHgsICUxXG4i
IFwKKyAgICAgICAgOiAiPXIiKGN5Y2xlcy52YWx1ZTMyeDJbMF0pLCAiPXIiKGN5Y2xlcy52YWx1
ZTMyeDJbMV0pIFwKKyAgICAgICAgOiBcCisgICAgICAgIDogIiVlYXgiLCAiJWVkeCIpCisKK3N0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfdGltZSA9IDA7CisKK3ZvaWQgQ1NTUGFyc2Vy
OjpwcmludFN0YXQoKQoreworICAgIHByaW50ZigiVG90YWwgbGV4IHRpbWU6ICVsbGRcbiIsIHRv
dGFsX3RpbWUpOworfQorCiAjZGVmaW5lIEVORF9UT0tFTiAwCiAKICNpbmNsdWRlICJDU1NHcmFt
bWFyLmgiCiAKIGludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxXaXRob3V0VHlwZSkKIHsK
KyAgICBERUZfQ1lDTEVTOworICAgIEdFVF9DWUNMRVM7CisgICAgdW5zaWduZWQgbG9uZyBsb25n
IHN0YXJ0ID0gY3ljbGVzLnZhbHVlNjQ7CiAgICAgWVlTVFlQRSogeXlsdmFsID0gc3RhdGljX2Nh
c3Q8WVlTVFlQRSo+KHl5bHZhbFdpdGhvdXRUeXBlKTsKICAgICBpbnQgbGVuZ3RoOwogCkBAIC02
ODY3LDYgKzY4OTIsOCBAQCBpbnQgQ1NTUGFyc2VyOjpsZXgodm9pZCogeXlsdmFsV2l0aG91dFR5
cGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIEdFVF9DWUNMRVM7CisgICAgdG90YWxf
dGltZSArPSBjeWNsZXMudmFsdWU2NCAtIHN0YXJ0OwogICAgIHJldHVybiB0b2tlbigpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggNGUwZjE1MC4uYWViZDFkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaApAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgQ1NTUGFyc2VyKGJvb2wg
c3RyaWN0UGFyc2luZyA9IHRydWUpOwogICAgIH5DU1NQYXJzZXIoKTsKIAorICAgIHN0YXRpYyB2
b2lkIHByaW50U3RhdCgpOwogICAgIHZvaWQgcGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiwgY29u
c3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxlUnVsZVJhbmdlTWFwKiBy
dWxlUmFuZ2VNYXAgPSAwKTsKICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlUnVsZShDU1NT
dHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBwYXJz
ZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Vidmlldy5jcHAKaW5kZXggNTY4MjBkMi4uZDI3NmQxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJ2aWV3LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgInFwcmludGVyLmgiCiAjaW5j
bHVkZSAicWRpci5oIgogI2luY2x1ZGUgInFmaWxlLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgi
CiAKIGNsYXNzIFFXZWJWaWV3UHJpdmF0ZSB7CiBwdWJsaWM6CkBAIC0zMjUsNiArMzI2LDcgQEAg
UVdlYlZpZXc6OlFXZWJWaWV3KFFXaWRnZXQgKnBhcmVudCkKIFFXZWJWaWV3Ojp+UVdlYlZpZXco
KQogewogICAgIGRlbGV0ZSBkOworICAgIFdlYkNvcmU6OkNTU1BhcnNlcjo6cHJpbnRTdGF0KCk7
CiB9CiAKIC8qIQotLSAKMS43LjIuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118978</attachid>
            <date>2011-12-13 01:35:17 -0800</date>
            <delta_ts>2011-12-20 03:20:05 -0800</delta_ts>
            <desc>core patch2</desc>
            <filename>0001-css-tokenizer.patch</filename>
            <type>text/plain</type>
            <size>56613</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA2YjU2MzZhMmE3YzU4OGZiZWU3MmRjMWQyNTZlNzc1NjZjYTU2N2QwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogVHVlLCAxMyBEZWMgMjAxMSAwMTozMjoyNyAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGNz
cy10b2tlbml6ZXIKCi0tLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgfCAxNDY3
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmggICB8ICAgNDAgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTIzNiBpbnNlcnRp
b25zKCspLCAyNzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAz
ZTE4ZGE4Li5hZmM3YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTcxLDYgKzE3
MSwyMiBAQCBzdGF0aWMgYm9vbCBoYXNQcmVmaXgoY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IGNoYXIqIHByZWZpeCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0
YXRpYyBpbmxpbmUgVUNoYXIgbG93ZXJjYXNlQ2hhcmFjdGVyKFVDaGFyIGNocikKK3sKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciBjb21wYXJpbmcgYW55IGlucHV0IGNoYXJh
Y3RlcgorICAgIC8vIHRvIGEgbG93ZXJjYXNlIEVuZ2xpc2ggY2hhcmFjdGVyLiBUaGUgaXNDYXNl
bGVzc0VxdWFsIGJlbG93CisgICAgLy8gc2hvdWxkIGJlIHVzZWQgZm9yIHJlZ3VsYXIgY29tcGFy
aXNvbiwgYnV0IHN3aXRjaCBzdGF0ZW1lbnRzCisgICAgLy8gcmVxdWlyZSBkaXJlY3QgdXNlIG9m
IHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGNociB8IDB4MjA7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc0Nhc2VsZXNzRXF1YWwoVUNoYXIgY3NzQ2hhcmFjdGVyLCBVQ2hhciBjaGFyYWN0
ZXIpCit7CisgICAgLy8gVGhpcyBpcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uLCB0aGlzIGluc3Rh
bmNlIGNoZWNrcyBjaGFyYWN0ZXJzLgorICAgIEFTU0VSVChjaGFyYWN0ZXIgPj0gJ2EnICYmIGNo
YXJhY3RlciA8PSAneicpOworICAgIHJldHVybiBMSUtFTFkobG93ZXJjYXNlQ2hhcmFjdGVyKGNz
c0NoYXJhY3RlcikgPT0gY2hhcmFjdGVyKTsKK30KKwogQ1NTUGFyc2VyOjpDU1NQYXJzZXIoYm9v
bCBzdHJpY3RQYXJzaW5nKQogICAgIDogbV9zdHJpY3Qoc3RyaWN0UGFyc2luZykKICAgICAsIG1f
aW1wb3J0YW50KGZhbHNlKQpAQCAtMTkzLDggKzIwOSwxMCBAQCBDU1NQYXJzZXI6OkNTU1BhcnNl
cihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJ
TlRfTUFYKQogICAgICwgbV9ydWxlUmFuZ2VNYXAoMCkKICAgICAsIG1fY3VycmVudFJ1bGVEYXRh
KDApCisgICAgLCBtX3BhcnNpbmdNb2RlKE5vcm1hbE1vZGUpCisgICAgLCBtX2RhdGFTdGFydCgw
KQogICAgICwgbV9kYXRhKDApCi0gICAgLCB5eV9zdGFydCgxKQorICAgICwgbV90b2tlbigwKQog
ICAgICwgbV9saW5lTnVtYmVyKDApCiAgICAgLCBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIoMCkK
ICAgICAsIG1fYWxsb3dJbXBvcnRSdWxlcyh0cnVlKQpAQCAtMjEzLDcgKzIzMSw3IEBAIENTU1Bh
cnNlcjo6fkNTU1BhcnNlcigpCiAKICAgICBkZWxldGUgbV92YWx1ZUxpc3Q7CiAKLSAgICBmYXN0
RnJlZShtX2RhdGEpOworICAgIGZhc3RGcmVlKG1fZGF0YVN0YXJ0KTsKIAogICAgIGZhc3REZWxl
dGVBbGxWYWx1ZXMobV9mbG9hdGluZ1NlbGVjdG9ycyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1f
ZmxvYXRpbmdTZWxlY3RvclZlY3RvcnMpOwpAQCAtMjQwLDI3ICsyNTgsMjMgQEAgdm9pZCBDU1NQ
YXJzZXJTdHJpbmc6Omxvd2VyKCkKIAogdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0
IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIqIHN1ZmZpeCkK
IHsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpICsgc3RybGVuKHByZWZpeCkgKyBz
dHJsZW4oc3VmZml4KSArIDI7CisgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSArIHN0
cmxlbihwcmVmaXgpICsgc3RybGVuKHN1ZmZpeCkgKyAxOwogCi0gICAgZmFzdEZyZWUobV9kYXRh
KTsKLSAgICBtX2RhdGEgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2MobGVuZ3RoICog
c2l6ZW9mKFVDaGFyKSkpOworICAgIGZhc3RGcmVlKG1fZGF0YVN0YXJ0KTsKKyAgICBtX2RhdGFT
dGFydCA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhsZW5ndGggKiBzaXplb2YoVUNo
YXIpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0cmxlbihwcmVmaXgpOyBpKysp
Ci0gICAgICAgIG1fZGF0YVtpXSA9IHByZWZpeFtpXTsKKyAgICAgICAgbV9kYXRhU3RhcnRbaV0g
PSBwcmVmaXhbaV07CiAKLSAgICBtZW1jcHkobV9kYXRhICsgc3RybGVuKHByZWZpeCksIHN0cmlu
Zy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgIG1l
bWNweShtX2RhdGFTdGFydCArIHN0cmxlbihwcmVmaXgpLCBzdHJpbmcuY2hhcmFjdGVycygpLCBz
dHJpbmcubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0ID0g
c3RybGVuKHByZWZpeCkgKyBzdHJpbmcubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgZW5kID0gc3Rh
cnQgKyBzdHJsZW4oc3VmZml4KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVu
ZDsgaSsrKQotICAgICAgICBtX2RhdGFbaV0gPSBzdWZmaXhbaSAtIHN0YXJ0XTsKKyAgICAgICAg
bV9kYXRhU3RhcnRbaV0gPSBzdWZmaXhbaSAtIHN0YXJ0XTsKIAotICAgIG1fZGF0YVtsZW5ndGgg
LSAxXSA9IDA7Ci0gICAgbV9kYXRhW2xlbmd0aCAtIDJdID0gMDsKKyAgICBtX2RhdGFTdGFydFts
ZW5ndGggLSAxXSA9IDA7CiAKLSAgICB5eV9ob2xkX2NoYXIgPSAwOwotICAgIHl5bGVuZyA9IDA7
Ci0gICAgeXl0ZXh0ID0geXlfY19idWZfcCA9IG1fZGF0YTsKLSAgICB5eV9ob2xkX2NoYXIgPSAq
eXlfY19idWZfcDsKKyAgICBtX2RhdGEgPSBtX3Rva2VuU3RhcnQgPSBtX2RhdGFTdGFydDsKICAg
ICByZXNldFJ1bGVCb2R5TWFya3MoKTsKIH0KIApAQCAtNDIwLDcgKzQzNCw3IEBAIHN0YXRpYyBi
b29sIHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRl
Y2xhcmF0aW9uLCBpbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ1NTUHJpbWl0aXZl
VmFsdWU6OlVuaXRUeXBlcyB1bml0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7Ci0g
ICAgaWYgKGxlbmd0aCA+IDIgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMl0gfCAweDIwKSA9PSAn
cCcgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMV0gfCAweDIwKSA9PSAneCcpIHsKKyAgICBpZiAo
bGVuZ3RoID4gMiAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1tsZW5ndGggLSAyXSwgJ3An
KSAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1tsZW5ndGggLSAxXSwgJ3gnKSkgewogICAg
ICAgICBsZW5ndGggLT0gMjsKICAgICAgICAgdW5pdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFg7CiAgICAgfSBlbHNlIGlmIChsZW5ndGggPiAxICYmIGNoYXJhY3RlcnNbbGVuZ3RoIC0gMV0g
PT0gJyUnKSB7CkBAIC00NzU3LDEwICs0NzcxLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdo
dEJlUkdCQShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIGlm
IChsZW5ndGggPCA1KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGNoYXJhY3Rl
cnNbNF0gPT0gJygnCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzBdIHwgMHgyMCkgPT0gJ3InCi0g
ICAgICAgICYmIChjaGFyYWN0ZXJzWzFdIHwgMHgyMCkgPT0gJ2cnCi0gICAgICAgICYmIChjaGFy
YWN0ZXJzWzJdIHwgMHgyMCkgPT0gJ2InCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzNdIHwgMHgy
MCkgPT0gJ2EnOworICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1swXSwgJ3In
KQorICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwgJ2cnKQorICAgICAg
ICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1syXSwgJ2InKQorICAgICAgICAmJiBpc0Nh
c2VsZXNzRXF1YWwoY2hhcmFjdGVyc1szXSwgJ2EnKTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IG1pZ2h0QmVSR0IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKQEAg
LTQ3NjgsOSArNDc4Miw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgaWYgKGxlbmd0aCA8IDQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gY2hhcmFjdGVyc1szXSA9PSAnKCcKLSAg
ICAgICAgJiYgKGNoYXJhY3RlcnNbMF0gfCAweDIwKSA9PSAncicKLSAgICAgICAgJiYgKGNoYXJh
Y3RlcnNbMV0gfCAweDIwKSA9PSAnZycKLSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMl0gfCAweDIw
KSA9PSAnYic7CisgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAncicp
CisgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzFdLCAnZycpCisgICAgICAg
ICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzJdLCAnYicpOwogfQogCiBib29sIENTU1Bh
cnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0
cmljdCkKQEAgLTcyMDEsMjM2ICs3MjE1LDEyMDAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9u
dEZlYXR1cmVTZXR0aW5ncyhib29sIGltcG9ydGFudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgaW50IHl5ZXJyb3IoY29uc3QgY2hhciopIHsgcmV0dXJuIDE7IH0KLQog
I2RlZmluZSBFTkRfVE9LRU4gMAogCiAjaW5jbHVkZSAiQ1NTR3JhbW1hci5oIgogCi1pbnQgQ1NT
UGFyc2VyOjpsZXgodm9pZCogeXlsdmFsV2l0aG91dFR5cGUpCitlbnVtIENoYXJhY3RlclR5cGUg
eworICAgIC8vIFR5cGVzIGZvciB0aGUgbWFpbiBzd2l0Y2guCisKKyAgICAvLyBUaGUgZmlyc3Qg
NCB0eXBlcyBtdXN0IGJlIGdyb3VwZWQgdG9nZXRoZXIsIGFzIHRoZXkKKyAgICAvLyByZXByZXNl
bnQgdGhlIGFsbG93ZWQgY2hhcnMgaW4gYW4gaWRlbnRpZmllci4KKyAgICBDaGFyYWN0ZXJDYXNl
bGVzc1UsCisgICAgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorICAgIENoYXJhY3Rlck51bWJl
ciwKKyAgICBDaGFyYWN0ZXJEYXNoLAorCisgICAgQ2hhcmFjdGVyT3RoZXIsCisgICAgQ2hhcmFj
dGVyV2hpdGVTcGFjZSwKKyAgICBDaGFyYWN0ZXJFbmRNZWRpYVF1ZXJ5LAorICAgIENoYXJhY3Rl
ckVuZE50aENoaWxkLAorICAgIENoYXJhY3RlclF1b3RlLAorICAgIENoYXJhY3RlckV4Y2xhbWF0
aW9uTWFyaywKKyAgICBDaGFyYWN0ZXJIYXNobWFyaywKKyAgICBDaGFyYWN0ZXJEb2xsYXIsCisg
ICAgQ2hhcmFjdGVyQXN0ZXJpc2ssCisgICAgQ2hhcmFjdGVyUGx1cywKKyAgICBDaGFyYWN0ZXJE
b3QsCisgICAgQ2hhcmFjdGVyU2xhc2gsCisgICAgQ2hhcmFjdGVyTGVzcywKKyAgICBDaGFyYWN0
ZXJBdCwKKyAgICBDaGFyYWN0ZXJCYWNrU2xhc2gsCisgICAgQ2hhcmFjdGVyWG9yLAorICAgIENo
YXJhY3RlclZlcnRpY2FsQmFyLAorICAgIENoYXJhY3RlclRpbGRlLAorfTsKKworLy8gMTI4IEFT
Q0lJIGNvZGVzCitzdGF0aWMgY29uc3QgQ2hhcmFjdGVyVHlwZSB0eXBlc09mQVNDSUlDaGFyYWN0
ZXJzWzEyOF0gPSB7CisvKiAgIDAgLSBOdWxsICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCisvKiAgIDEgLSBTdGFydCBvZiBIZWFkaW5nICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAg
IDIgLSBTdGFydCBvZiBUZXh0ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDMgLSBFbmQg
b2YgVGV4dCAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDQgLSBFbmQgb2YgVHJhbnNt
LiAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDUgLSBFbnF1aXJ5ICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgIDYgLSBBY2tub3dsZWRnbWVudCAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgIDcgLSBCZWxsICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgIDggLSBCYWNrIFNwYWNlICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDkgLSBI
b3Jpem9udGFsIFRhYiAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAxMCAtIExpbmUg
RmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDExIC0gVmVydGljYWwg
VGFiICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDEyIC0gRm9ybSBGZWVkICAgICAgICAg
ICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAgMTMgLSBDYXJyaWFnZSBSZXR1cm4gICAgKi8g
Q2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAxNCAtIFNoaWZ0IE91dCAgICAgICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKKy8qICAxNSAtIFNoaWZ0IEluICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICAxNiAtIERhdGEgTGluZSBFc2NhcGUgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAx
NyAtIERldmljZSBDb250cm9sIDEgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxOCAtIERldmlj
ZSBDb250cm9sIDIgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxOSAtIERldmljZSBDb250cm9s
IDMgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMCAtIERldmljZSBDb250cm9sIDQgICAqLyBD
aGFyYWN0ZXJPdGhlciwKKy8qICAyMSAtIE5lZ2F0aXZlIEFjay4gICAgICAqLyBDaGFyYWN0ZXJP
dGhlciwKKy8qICAyMiAtIFN5bmNocm9ub3VzIElkbGUgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8q
ICAyMyAtIEVuZCBvZiBUcmFuc21pdCAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNCAtIENh
bmNlbCAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNSAtIEVuZCBvZiBNZWRp
dW0gICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNiAtIFN1YnN0aXR1dGUgICAgICAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNyAtIEVzY2FwZSAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJPdGhlciwKKy8qICAyOCAtIEZpbGUgU2VwYXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhlciwK
Ky8qICAyOSAtIEdyb3VwIFNlcGFyYXRvciAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzMCAt
IFJlY29yZCBTZXBhcmF0b3IgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzMSAtIFVuaXQgU2Vw
YXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzMiAtIFNwYWNlICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDMzIC0gISAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyaywKKy8qICAzNCAtICIgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJRdW90ZSwKKy8qICAzNSAtICMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJIYXNobWFyaywKKy8qICAzNiAtICQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb2xs
YXIsCisvKiAgMzcgLSAlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAg
MzggLSAmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzkgLSAnICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCisvKiAgNDAgLSAoICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNDEgLSApICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyRW5kTnRoQ2hpbGQsCisvKiAgNDIgLSAqICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyQXN0ZXJpc2ssCisvKiAgNDMgLSArICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
UGx1cywKKy8qICA0NCAtICwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8q
ICA0NSAtIC0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEYXNoLAorLyogIDQ2IC0gLiAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlckRvdCwKKy8qICA0NyAtIC8gICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJTbGFzaCwKKy8qICA0OCAtIDAgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJOdW1iZXIsCisvKiAgNDkgLSAxICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
TnVtYmVyLAorLyogIDUwIC0gMiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwK
Ky8qICA1MSAtIDMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTIg
LSA0ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDUzIC0gNSAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NCAtIDYgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTUgLSA3ICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyTnVtYmVyLAorLyogIDU2IC0gOCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ck51bWJlciwKKy8qICA1NyAtIDkgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIs
CisvKiAgNTggLSA6ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNTkg
LSA7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kTWVkaWFRdWVyeSwKKy8qICA2MCAt
IDwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJMZXNzLAorLyogIDYxIC0gPSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDYyIC0gPiAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3Rlck90aGVyLAorLyogIDYzIC0gPyAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3Rlck90aGVyLAorLyogIDY0IC0gQCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckF0LAor
LyogIDY1IC0gQSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
Ky8qICA2NiAtIEIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
CisvKiAgNjcgLSBDICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAorLyogIDY4IC0gRCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKKy8qICA2OSAtIEUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCisvKiAgNzAgLSBGICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogIDcxIC0gRyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qICA3MiAtIEggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAgNzMgLSBJICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogIDc0IC0gSiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qICA3NSAtIEsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAgNzYgLSBMICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogIDc3IC0gTSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qICA3OCAtIE4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAgNzkgLSBPICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogIDgwIC0gUCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qICA4MSAtIFEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAgODIgLSBSICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogIDgzIC0gUyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qICA4NCAtIFQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODUgLSBVICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyQ2FzZWxlc3NVLAorLyogIDg2IC0gViAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qICA4NyAtIFcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAgODggLSBYICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogIDg5IC0gWSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qICA5MCAtIFogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTEgLSBbICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAgOTIgLSBcICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQmFja1Ns
YXNoLAorLyogIDkzIC0gXSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyog
IDk0IC0gXiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclhvciwKKy8qICA5NSAtIF8gICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTYgLSBgICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgOTcgLSBhICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDk4IC0gYiAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5OSAtIGMgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDAgLSBkICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTAxIC0gZSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwMiAtIGYgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDMgLSBnICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTA0IC0gaCAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwNSAtIGkgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDYgLSBqICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTA3IC0gayAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwOCAtIGwg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDkgLSBt
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTEwIC0g
biAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExMSAt
IG8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTIg
LSBwICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTEz
IC0gcSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEx
NCAtIHIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAx
MTUgLSBzICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyog
MTE2IC0gdCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8q
IDExNyAtIHUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJDYXNlbGVzc1UsCisvKiAxMTgg
LSB2ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE5
IC0gdyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEy
MCAtIHggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAx
MjEgLSB5ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyog
MTIyIC0geiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8q
IDEyMyAtIHsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJFbmRNZWRpYVF1ZXJ5LAorLyog
MTI0IC0gfCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclZlcnRpY2FsQmFyLAorLyogMTI1
IC0gfSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogMTI2IC0gfiAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlclRpbGRlLAorLyogMTI3IC0gRGVsZXRlICAgICAgICAg
ICAgICovIENoYXJhY3Rlck90aGVyLAorfTsKKworLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRo
ZSBDU1MgdG9rZW5pemVyLgorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NMZXR0ZXIoVUNoYXIg
Y2hyKQogewotICAgIFlZU1RZUEUqIHl5bHZhbCA9IHN0YXRpY19jYXN0PFlZU1RZUEUqPih5eWx2
YWxXaXRob3V0VHlwZSk7Ci0gICAgaW50IGxlbmd0aDsKKyAgICByZXR1cm4gY2hyID49IDEyOCB8
fCB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzW2Nocl0gPD0gQ2hhcmFjdGVyRGFzaDsKK30KIAotICAg
IGxleCgpOworc3RhdGljIGlubGluZSBib29sIGlzQ1NTRXNjYXBlKFVDaGFyIGNocikKK3sKKyAg
ICByZXR1cm4gY2hyID49ICcgJyAmJiBjaHIgIT0gMTI3OworfQogCi0gICAgVUNoYXIqIHQgPSB0
ZXh0KCZsZW5ndGgpOworc3RhdGljIGlubGluZSBib29sIGlzVVJJTGV0dGVyKFVDaGFyIGNocikK
K3sKKyAgICByZXR1cm4gKGNociA+PSAnKicgJiYgY2hyICE9IDEyNykgfHwgKGNociA+PSAnIycg
JiYgY2hyIDw9ICcmJykgfHwgY2hyID09ICchJzsKK30KIAotICAgIHN3aXRjaCAodG9rZW4oKSkg
ewotICAgIGNhc2UgV0hJVEVTUEFDRToKLSAgICBjYXNlIFNHTUxfQ0Q6Ci0gICAgY2FzZSBJTkNM
VURFUzoKLSAgICBjYXNlIERBU0hNQVRDSDoKLSAgICAgICAgYnJlYWs7CitzdGF0aWMgaW5saW5l
IGJvb2wgaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2goVUNoYXIqIGRhdGEpCit7CisgICAgcmV0
dXJuIGlzQVNDSUlBbHBoYShkYXRhWzBdKSB8fCBkYXRhWzBdID09ICdfJyB8fCBkYXRhWzBdID49
IDEyOAorICAgICAgICB8fCAoZGF0YVswXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKGRhdGFbMV0p
KTsKK30KIAotICAgIGNhc2UgVVJJOgotICAgIGNhc2UgU1RSSU5HOgotICAgIGNhc2UgSURFTlQ6
Ci0gICAgY2FzZSBOVEg6Ci0gICAgY2FzZSBIRVg6Ci0gICAgY2FzZSBJRFNFTDoKLSAgICBjYXNl
IERJTUVOOgotICAgIGNhc2UgVU5JQ09ERVJBTkdFOgotICAgIGNhc2UgRlVOQ1RJT046Ci0gICAg
Y2FzZSBBTllGVU5DVElPTjoKLSAgICBjYXNlIE5PVEZVTkNUSU9OOgotICAgIGNhc2UgQ0FMQ0ZV
TkNUSU9OOgotICAgIGNhc2UgTUlORlVOQ1RJT046Ci0gICAgY2FzZSBNQVhGVU5DVElPTjoKLSAg
ICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IHQ7Ci0gICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmxlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIElNUE9SVF9T
WU06Ci0gICAgY2FzZSBQQUdFX1NZTToKLSAgICBjYXNlIE1FRElBX1NZTToKLSAgICBjYXNlIEZP
TlRfRkFDRV9TWU06Ci0gICAgY2FzZSBDSEFSU0VUX1NZTToKLSAgICBjYXNlIE5BTUVTUEFDRV9T
WU06Ci0gICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1NZTToKLQotICAgIGNhc2UgSU1QT1JUQU5U
X1NZTToKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFFFTVM6Ci0gICAgICAgIGxlbmd0aC0t
OwotICAgIGNhc2UgR1JBRFM6Ci0gICAgY2FzZSBUVVJOUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0g
ICAgY2FzZSBERUdTOgotICAgIGNhc2UgUkFEUzoKLSAgICBjYXNlIEtIRVJUWjoKLSAgICBjYXNl
IFJFTVM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNhc2UgTVNFQ1M6Ci0gICAgY2FzZSBIRVJU
WjoKLSAgICBjYXNlIEVNUzoKLSAgICBjYXNlIEVYUzoKLSAgICBjYXNlIFBYUzoKLSAgICBjYXNl
IENNUzoKLSAgICBjYXNlIE1NUzoKLSAgICBjYXNlIElOUzoKLSAgICBjYXNlIFBUUzoKLSAgICBj
YXNlIFBDUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBTRUNTOgotICAgIGNhc2UgUEVS
Q0VOVEFHRToKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBGTE9BVFRPS0VOOgotICAgIGNh
c2UgSU5URUdFUjoKLSAgICAgICAgeXlsdmFsLT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUo
dCwgbGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7CitzdGF0aWMgaW5saW5lIGJvb2wgaXNDYXNlbGVz
c0VxdWFsKFVDaGFyKiBjc3NTdHJpbmcsIGNvbnN0IGNoYXIqIGNvbnN0YW50U3RyaW5nKQorewor
ICAgIC8vIENvbXBhcmUgYW4gVUNoYXIgbWVtb3J5IGRhdGEgd2l0aCBhIHplcm8gdGVybWluYXRl
ZCBzdHJpbmcuCisgICAgLy8gVGhpcyBpcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uLCB0aGlzIGlu
c3RhbmNlIGNoZWNrcyBzdHJpbmdzLgorICAgIC8vIFRoZSB0d28gZnVuY3Rpb25zIGNhbm5vdCBi
ZSBncm91cGVkIHRvZ2V0aGVyLCBzaW5jZSB0aGlzIG9uZSBkZXBlbmRzCisgICAgLy8gb24gaXND
U1NMZXR0ZXIsIHdoaWxlIHRoZSBvdGhlciBpcyB1c2VkIGluIG90aGVyIHBsYWNlcy4KKyAgICBk
byB7CisgICAgICAgIC8vIFRoZSBpbnB1dCBtdXN0IGJlIHBhcnQgb2YgYW4gaWRlbnRpZmllciBp
ZiBjb25zdGFudENoYXIgb3IgY29uc3RTdHJpbmcKKyAgICAgICAgLy8gY29udGFpbnMgJy0nLiBP
dGhlcndpc2UgbG93ZXJjYXNlQ2hhcmFjdGVyKCdccicpIHdvdWxkIGJlIGVxdWFsIHRvICctJy4K
KyAgICAgICAgQVNTRVJUKCgqY29uc3RhbnRTdHJpbmcgPj0gJ2EnICYmICpjb25zdGFudFN0cmlu
ZyA8PSAneicpIHx8ICpjb25zdGFudFN0cmluZyA9PSAnLScpOworICAgICAgICBBU1NFUlQoKmNv
bnN0YW50U3RyaW5nICE9ICctJyB8fCBpc0NTU0xldHRlcigqY3NzU3RyaW5nKSk7CisgICAgICAg
IGlmIChsb3dlcmNhc2VDaGFyYWN0ZXIoKmNzc1N0cmluZysrKSAhPSAoKmNvbnN0YW50U3RyaW5n
KyspKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gd2hpbGUgKCpjb25zdGFudFN0
cmluZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKK3N0YXRpYyBVQ2hhciogY2hlY2tFc2NhcGUoVUNoYXIqIGRhdGEpCit7CisgICAgQVNTRVJU
KCpkYXRhID09ICdcXCcpOworCisgICAgKytkYXRhOworICAgIGlmICghaXNDU1NFc2NhcGUoKmRh
dGEpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQoKmRhdGEp
KSB7CisgICAgICAgIGludCBsZW5ndGggPSA2OworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICsrZGF0YTsKKyAgICAgICAgfSB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpkYXRhKSAmJiAtLWxl
bmd0aCk7CisKKyAgICAgICAgLy8gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdGhlIGVzY2FwZSBzZXF1
ZW5jZS4KKyAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCpkYXRhKSkKKyAgICAgICAgICAgICsrZGF0
YTsKKyAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgfQorICAgIHJldHVybiBkYXRhICsgMTsKK30K
IAotICAgIHJldHVybiB0b2tlbigpOworc3RhdGljIGlubGluZSBVQ2hhciogc2tpcFdoaXRlU3Bh
Y2VzKFVDaGFyKiBkYXRhKQoreworICAgIHdoaWxlIChVTkxJS0VMWSgqZGF0YSA8PSAnICcgJiYg
KHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKmRhdGFdID09IENoYXJhY3RlcldoaXRlU3BhY2UpKSkK
KyAgICAgICAgKytkYXRhOworICAgIHJldHVybiBkYXRhOwogfQogCi12b2lkIENTU1BhcnNlcjo6
cmVjaGVja0F0S2V5d29yZChjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIFN0cmlu
ZyBydWxlTmFtZShzdHIsIGxlbik7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1l
LCAiQGltcG9ydCIpKQotICAgICAgICB5eVRvayA9IElNUE9SVF9TWU07Ci0gICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAcGFnZSIpKQotICAgICAgICB5eVRvayA9IFBB
R0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQG1lZGlh
IikpCi0gICAgICAgIHl5VG9rID0gTUVESUFfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHJ1bGVOYW1lLCAiQGZvbnQtZmFjZSIpKQotICAgICAgICB5eVRvayA9IEZPTlRfRkFD
RV9TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAY2hhcnNl
dCIpKQotICAgICAgICB5eVRvayA9IENIQVJTRVRfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHJ1bGVOYW1lLCAiQG5hbWVzcGFjZSIpKQotICAgICAgICB5eVRvayA9IE5BTUVT
UEFDRV9TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJALXdl
YmtpdC1rZXlmcmFtZXMiKSkKLSAgICAgICAgeXlUb2sgPSBXRUJLSVRfS0VZRlJBTUVTX1NZTTsK
LSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkAtd2Via2l0LW1lZGlh
cXVlcnkiKSkKLSAgICAgICAgeXlUb2sgPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07Ci19Ci0KLVVD
aGFyKiBDU1NQYXJzZXI6OnRleHQoaW50ICpsZW5ndGgpCi17Ci0gICAgVUNoYXIqIHN0YXJ0ID0g
eXl0ZXh0OwotICAgIGludCBsID0geXlsZW5nOwotICAgIHN3aXRjaCAoeXlUb2spIHsKLSAgICBj
YXNlIFNUUklORzoKLSAgICAgICAgbC0tOwotICAgICAgICAvKiBub2JyZWFrICovCi0gICAgY2Fz
ZSBIRVg6Ci0gICAgY2FzZSBJRFNFTDoKLSAgICAgICAgc3RhcnQrKzsKLSAgICAgICAgbC0tOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFVSSToKLSAgICAgICAgLy8gInVybCgie3d9e3N0cmlu
Z317d30iKSIKLSAgICAgICAgLy8gInVybCgie3d9e3VybH17d30iKSIKLSAgICAgICAgLy8gc3Ry
aXAgInVybCgiIGFuZCAiKSIKLSAgICAgICAgc3RhcnQgKz0gNDsKLSAgICAgICAgbCAtPSA1Owot
ICAgICAgICAvLyBzdHJpcCB7d30KLSAgICAgICAgd2hpbGUgKGwgJiYgaXNIVE1MU3BhY2UoKnN0
YXJ0KSkgewotICAgICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAgIC0tbDsKLSAgICAgICAg
fQotICAgICAgICB3aGlsZSAobCAmJiBpc0hUTUxTcGFjZShzdGFydFtsIC0gMV0pKQotICAgICAg
ICAgICAgLS1sOwotICAgICAgICBpZiAobCAmJiAoKnN0YXJ0ID09ICciJyB8fCAqc3RhcnQgPT0g
J1wnJykpIHsKLSAgICAgICAgICAgIEFTU0VSVChsID49IDIgJiYgc3RhcnRbbCAtIDFdID09ICpz
dGFydCk7Ci0gICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAgbCAtPSAyOworLy8gTWFp
biBDU1MgdG9rZW5pemVyIGZ1bmN0aW9ucy4KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjppc0lk
ZW50aWZpZXJTdGFydCgpCit7CisgICAgLy8gQ2hlY2sgd2hldGhlciBhbiBpZGVudGlmaWVyIGlz
IHN0YXJ0ZWQuCisgICAgcmV0dXJuIGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKCgqbV9kYXRh
ICE9ICctJykgPyBtX2RhdGEgOiBtX2RhdGEgKyAxKTsKK30KKworaW5saW5lIFVDaGFyKiBDU1NQ
YXJzZXI6OmNoZWNrU3RyaW5nKFVDaGFyKiBkYXRhLCBVQ2hhciBxdW90ZSkKK3sKKyAgICAvLyBT
aW5jZSB3ZSBjYW5ub3QgcmV2ZXJ0IGVzY2FwZSBzZXF1ZW5jZXMsIHN0cmluZ3MKKyAgICAvLyBt
dXN0IGJlIHZhbGlkYXRlZCBiZWZvcmUgcGFyc2luZy4KKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBpZiAoVU5MSUtFTFkoKmRhdGEgPT0gcXVvdGUpKSB7CisgICAgICAgICAgICAvLyBTdHJp
bmcgcGFyc2luZyBpcyBzdWNjZXNzZnVsLgorICAgICAgICAgICAgcmV0dXJuIGRhdGEgKyAxOwor
ICAgICAgICB9CisgICAgICAgIGlmIChVTkxJS0VMWSgqZGF0YSA8IDE0ICYmICghKmRhdGEgfHwg
KmRhdGEgPT0gMTAgfHwgKCpkYXRhIHwgMHgxKSA9PSAxMykpKSB7CisgICAgICAgICAgICAgLy8g
U3RyaW5nIHBhcnNpbmcgaXMgZmFpbGVkIGZvciBjaGFyYWN0ZXIgMCwgMTAsIDEyIG9yIDEzLgor
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKExJS0VMWShk
YXRhWzBdICE9ICdcXCcpKQorICAgICAgICAgICAgKytkYXRhOworICAgICAgICBlbHNlIGlmIChk
YXRhWzFdID09ICdcbicgfHwgZGF0YVsxXSA9PSAnXGYnKQorICAgICAgICAgICAgZGF0YSArPSAy
OworICAgICAgICBlbHNlIGlmIChkYXRhWzFdID09ICdccicpCisgICAgICAgICAgICBkYXRhICs9
IGRhdGFbMl0gPT0gJ1xuJyA/IDMgOiAyOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRh
dGEgPSBjaGVja0VzY2FwZShkYXRhKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKICAgICB9Cit9CiAKLSAgICAvLyBwcm9jZXNzIGVzY2FwZXMKLSAg
ICBVQ2hhciogb3V0ID0gc3RhcnQ7Ci0gICAgVUNoYXIqIGVzY2FwZSA9IDA7Cit2b2lkIENTU1Bh
cnNlcjo6cGFyc2VFc2NhcGUoVUNoYXIqJiByZXN1bHQpCit7CisgICAgQVNTRVJUKCptX2RhdGEg
PT0gJ1xcJyAmJiBpc0NTU0VzY2FwZShtX2RhdGFbMV0pKTsKIAotICAgIGJvb2wgc2F3RXNjYXBl
ID0gZmFsc2U7CisgICAgKyttX2RhdGE7CisgICAgaWYgKGlzQVNDSUlIZXhEaWdpdCgqbV9kYXRh
KSkgeworICAgICAgICB1bnNpZ25lZCB1bmljb2RlID0gMDsKKyAgICAgICAgaW50IGxlbmd0aCA9
IDY7CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAgICBVQ2hhciog
Y3VycmVudCA9IHN0YXJ0ICsgaTsKLSAgICAgICAgaWYgKGVzY2FwZSA9PSBjdXJyZW50IC0gMSkg
ewotICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoeXlUb2sgPT0gU1RSSU5HICYmCi0gICAg
ICAgICAgICAgICAgICgqY3VycmVudCA9PSAnXG4nIHx8ICpjdXJyZW50ID09ICdccicgfHwgKmN1
cnJlbnQgPT0gJ1xmJykpIHsKLSAgICAgICAgICAgICAgICAvLyAjIyMgaGFuZGxlIFxyXG4gY2Fz
ZQotICAgICAgICAgICAgICAgIGlmICgqY3VycmVudCAhPSAnXHInKQotICAgICAgICAgICAgICAg
ICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgLy8gaW4gYWxsIG90aGVyIGNhc2VzIGNvcHkgdGhlIGNoYXIgdG8gb3V0
cHV0Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAgICAgICAgICpvdXQrKyA9ICpjdXJyZW50Owot
ICAgICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChlc2NhcGUgPT0gY3VycmVudCAtIDIgJiYgeXlUb2sgPT0gU1RSSU5HICYm
Ci0gICAgICAgICAgICAgKihjdXJyZW50LTEpID09ICdccicgJiYgKmN1cnJlbnQgPT0gJ1xuJykg
ewotICAgICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICB1bmljb2RlID0gKHVuaWNvZGUgPDwgNCkgKyB0b0FTQ0lJSGV4
VmFsdWUoKm1fZGF0YSsrKTsKKyAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJSUhl
eERpZ2l0KCptX2RhdGEpKTsKKworICAgICAgICAvLyBDaGFyYWN0ZXJzIGFib3ZlIDB4ZmZmZiBh
cmUgbm90IGhhbmRsZWQuCisgICAgICAgIGlmICh1bmljb2RlID4gMHhmZmZmKQorICAgICAgICAg
ICAgdW5pY29kZSA9IDB4ZmZmZDsKKworICAgICAgICAvLyBPcHRpb25hbCBzcGFjZSBhZnRlciB0
aGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKm1fZGF0YSkpCisg
ICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgKnJlc3VsdCA9IHVuaWNvZGU7CisgICAgfSBl
bHNlCisgICAgICAgICpyZXN1bHQgPSAqbV9kYXRhKys7CisgICAgKytyZXN1bHQ7Cit9CisKK2lu
bGluZSBib29sIENTU1BhcnNlcjo6cGFyc2VJZGVudGlmaWVyKFVDaGFyKiYgcmVzdWx0KQorewor
ICAgIC8vIElmIGEgdmFsaWQgaWRlbnRpZmllciBzdGFydCBpcyBmb3VuZCwgd2UgY2FuIHNhZmVs
eQorICAgIC8vIHBhcnNlIHRoZSBpZGVudGlmaWVyIHVudGlsIHRoZSBuZXh0IGludmFsaWQgY2hh
cmFjdGVyLgorICAgIEFTU0VSVChpc0lkZW50aWZpZXJTdGFydCgpKTsKKyAgICBib29sIGhhc0Vz
Y2FwZSA9IGZhbHNlOworICAgIGRvIHsKKyAgICAgICAgaWYgKExJS0VMWSgqbV9kYXRhICE9ICdc
XCcpKQorICAgICAgICAgICAgKnJlc3VsdCsrID0gKm1fZGF0YSsrOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGhhc0VzY2FwZSA9IHRydWU7CisgICAgICAgICAgICBwYXJzZUVzY2FwZShy
ZXN1bHQpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChlc2NhcGUgPiBjdXJyZW50IC0gNyAmJiBp
c0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChlc2NhcGUpIHsKLSAgICAgICAgICAgIC8vIGFkZCBlc2NhcGVkIGNoYXIKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHVjID0gMDsKLSAgICAgICAgICAgIGVzY2FwZSsrOwotICAgICAgICAgICAg
d2hpbGUgKGVzY2FwZSA8IGN1cnJlbnQpIHsKLSAgICAgICAgICAgICAgICB1YyAqPSAxNjsKLSAg
ICAgICAgICAgICAgICB1YyArPSB0b0FTQ0lJSGV4VmFsdWUoKmVzY2FwZSk7Ci0gICAgICAgICAg
ICAgICAgZXNjYXBlKys7CisgICAgfSB3aGlsZSAoaXNDU1NMZXR0ZXIobV9kYXRhWzBdKSB8fCAo
bV9kYXRhWzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUobV9kYXRhWzFdKSkpOworICAgIHJldHVy
biBoYXNFc2NhcGU7Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6cGFyc2VTdHJpbmcoVUNo
YXIqJiByZXN1bHQsIFVDaGFyIHF1b3RlKQoreworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
IGlmIChVTkxJS0VMWSgqbV9kYXRhID09IHF1b3RlKSkgeworICAgICAgICAgICAgLy8gU3RyaW5n
IHBhcnNpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgqbV9kYXRhID49IDE0IHx8ICgqbV9kYXRh
IDw9IDkgJiYgKm1fZGF0YSkgfHwgKm1fZGF0YSA9PSAxMSk7CisKKyAgICAgICAgaWYgKExJS0VM
WShtX2RhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9kYXRhKys7
CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAnXG4nIHx8IG1fZGF0YVsxXSA9PSAnXGYn
KQorICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9
PSAnXHInKQorICAgICAgICAgICAgbV9kYXRhICs9IG1fZGF0YVsyXSA9PSAnXG4nID8gMyA6IDI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CisgICAgfQor
fQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlVVJJKFVDaGFyKiYgc3RhcnQsIFVDaGFy
KiYgcmVzdWx0KQoreworICAgIFVDaGFyKiB1cmlTdGFydCA9IHNraXBXaGl0ZVNwYWNlcyhtX2Rh
dGEpOworCisgICAgaWYgKCp1cmlTdGFydCA9PSAnIicgfHwgKnVyaVN0YXJ0ID09ICdcJycpIHsK
KyAgICAgICAgVUNoYXIgcXVvdGUgPSAqdXJpU3RhcnQ7CisgICAgICAgICsrdXJpU3RhcnQ7CisK
KyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IGNoZWNrU3RyaW5nKHVyaVN0YXJ0LCBxdW90ZSk7
CisgICAgICAgIGlmICghc3RyaW5nRW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBz
dHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsKKyAgICAgICAgaWYgKCpzdHJp
bmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0YXJ0ID0gcmVz
dWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHBhcnNlU3RyaW5nKHJlc3VsdCwgcXVv
dGUpOworCisgICAgICAgIG1fZGF0YSA9IHN0cmluZ0VuZCArIDE7CisgICAgICAgIG1fdG9rZW4g
PSBVUkk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IHVyaVN0YXJ0
OworCisgICAgICAgIHdoaWxlIChpc1VSSUxldHRlcigqc3RyaW5nRW5kKSkgeworICAgICAgICAg
ICAgaWYgKCpzdHJpbmdFbmQgIT0gJ1xcJykKKyAgICAgICAgICAgICAgICArK3N0cmluZ0VuZDsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0cmluZ0VuZCA9IGNoZWNrRXNj
YXBlKHN0cmluZ0VuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmdFbmQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGNhbid0
IGhhbmRsZSBjaGFycyBvdXRzaWRlIHVjczIKLSAgICAgICAgICAgIGlmICh1YyA+IDB4ZmZmZikK
LSAgICAgICAgICAgICAgICB1YyA9IDB4ZmZmZDsKLSAgICAgICAgICAgICpvdXQrKyA9IHVjOwot
ICAgICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqY3Vy
cmVudCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KCFlc2NhcGUgJiYgKmN1cnJlbnQgPT0gJ1xcJykgewotICAgICAgICAgICAgZXNjYXBlID0gY3Vy
cmVudDsKLSAgICAgICAgICAgIHNhd0VzY2FwZSA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBzdHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsKKyAg
ICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHN0YXJ0ID0gcmVzdWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHdoaWxlIChp
c1VSSUxldHRlcigqbV9kYXRhKSkgeworICAgICAgICAgICAgaWYgKExJS0VMWSgqbV9kYXRhICE9
ICdcXCcpKQorICAgICAgICAgICAgICAgICpyZXN1bHQrKyA9ICptX2RhdGErKzsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJzZUVzY2FwZShyZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgbV9kYXRhID0gc3RyaW5nRW5kICsgMTsKKyAgICAgICAgbV90b2tlbiA9IFVS
STsKKyAgICB9Cit9CisKK2lubGluZSBib29sIENTU1BhcnNlcjo6cGFyc2VVbmljb2RlUmFuZ2Uo
KQoreworICAgIFVDaGFyKiBkYXRhID0gbV9kYXRhICsgMTsKKyAgICBpbnQgbGVuZ3RoID0gNjsK
KyAgICBBU1NFUlQoKm1fZGF0YSA9PSAnKycpOworCisgICAgd2hpbGUgKGlzQVNDSUlIZXhEaWdp
dCgqZGF0YSkgJiYgbGVuZ3RoKSB7CisgICAgICAgICsrZGF0YTsKKyAgICAgICAgLS1sZW5ndGg7
CisgICAgfQorCisgICAgaWYgKGxlbmd0aCAmJiAqZGF0YSA9PSAnPycpIHsKKyAgICAgICAgLy8g
QXQgbW9zdCA1IGhleCBkaWdpdCBmb2xsb3dlZCBieSBhIHF1ZXN0aW9uIG1hcmsuCisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgICsrZGF0YTsKKyAgICAgICAgICAgIC0tbGVuZ3RoOworICAgICAg
ICB9IHdoaWxlICgqZGF0YSA9PSAnPycgJiYgbGVuZ3RoKTsKKyAgICAgICAgbV9kYXRhID0gZGF0
YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCA8IDYpIHsK
KyAgICAgICAgLy8gQXQgbGVhc3Qgb25lIGhleCBkaWdpdC4KKyAgICAgICAgaWYgKGRhdGFbMF0g
PT0gJy0nICYmIGlzQVNDSUlIZXhEaWdpdChkYXRhWzFdKSkgeworICAgICAgICAgICAgLy8gRm9s
bG93ZWQgYnkgYSBkYXNoIGFuZCBhIGhleCBkaWdpdC4KKyAgICAgICAgICAgICsrZGF0YTsKKyAg
ICAgICAgICAgIGxlbmd0aCA9IDY7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAg
KytkYXRhOworICAgICAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJSUhleERpZ2l0
KCpkYXRhKSk7CiAgICAgICAgIH0KLSAgICAgICAgKm91dCsrID0gKmN1cnJlbnQ7CisgICAgICAg
IG1fZGF0YSA9IGRhdGE7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAoZXNj
YXBlKSB7Ci0gICAgICAgIC8vIGFkZCBlc2NhcGVkIGNoYXIKLSAgICAgICAgdW5zaWduZWQgdWMg
PSAwOwotICAgICAgICBlc2NhcGUrKzsKLSAgICAgICAgd2hpbGUgKGVzY2FwZSA8IHN0YXJ0K2wp
IHsKLSAgICAgICAgICAgIHVjICo9IDE2OwotICAgICAgICAgICAgdWMgKz0gdG9BU0NJSUhleFZh
bHVlKCplc2NhcGUpOwotICAgICAgICAgICAgZXNjYXBlKys7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIENTU1BhcnNlcjo6cGFyc2VOdGhDaGlsZCgpCit7CisgICAgVUNoYXIqIGRhdGEg
PSBtX2RhdGE7CisKKyAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgKytk
YXRhOworICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwoKmRhdGEsICduJykpIHsKKyAgICAgICAgbV9k
YXRhID0gZGF0YSArIDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENoaWxkRXh0cmEoKQoreworICAg
IFVDaGFyKiBkYXRhID0gc2tpcFdoaXRlU3BhY2VzKG1fZGF0YSk7CisgICAgaWYgKCpkYXRhICE9
ICcrJyAmJiAqZGF0YSAhPSAnLScpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRhdGEg
PSBza2lwV2hpdGVTcGFjZXMoZGF0YSArIDEpOworICAgIGlmICghaXNBU0NJSURpZ2l0KCpkYXRh
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8geworICAgICAgICArK2RhdGE7Cisg
ICAgfSB3aGlsZSAoaXNBU0NJSURpZ2l0KCpkYXRhKSk7CisKKyAgICBtX2RhdGEgPSBkYXRhOwor
ICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEZ1bmN0
aW9uVG9rZW4oaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgVUNo
YXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNh
c2UgMzoKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbicpICYmIGlzQ2Fz
ZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcp
KQorICAgICAgICAgICAgbV90b2tlbiA9IE5PVEZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChp
c0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3UnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwg
J3InKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2wnKSkKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBVUkk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgOToKKyAgICAgICAgaWYgKGlz
Q2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLWNoaWxkIikpCisgICAgICAgICAgICBtX3BhcnNpbmdN
b2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIDExOgorICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUsICJudGgtb2YtdHlwZSIpKQorICAgICAgICAg
ICAgbV9wYXJzaW5nTW9kZSA9IE50aENoaWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSAxNDoKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLWxhc3QtY2hp
bGQiKSkKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgMTY6CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFt
ZSwgIm50aC1sYXN0LW9mLXR5cGUiKSkKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhD
aGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIENTU1Bh
cnNlcjo6ZGV0ZWN0TWVkaWFRdWVyeVRva2VuKGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1f
cGFyc2luZ01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpOworICAgIFVDaGFyKiBuYW1lID0gbV90b2tl
blN0YXJ0OworCisgICAgaWYgKGxlbmd0aCA9PSAzKSB7CisgICAgICAgIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZVswXSwgJ2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKSAmJiBp
c0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2QnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJ
QV9BTkQ7CisgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbicpICYm
IGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJd
LCAndCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX05PVDsKKyAgICB9IGVsc2UgaWYg
KGxlbmd0aCA9PSA0KSB7CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28n
KSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKQorICAgICAgICAgICAgICAgICYmIGlz
Q2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnbCcpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzNdLCAn
eScpKQorICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfT05MWTsKKyAgICB9Cit9CisKK2lubGlu
ZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0TnVtYmVyVG9rZW4oVUNoYXIqIHR5cGUsIGludCBsZW5n
dGgpCit7CisgICAgQVNTRVJUKGxlbmd0aCA+IDApOworCisgICAgc3dpdGNoIChsb3dlcmNhc2VD
aGFyYWN0ZXIodHlwZVswXSkpIHsKKyAgICBjYXNlICdjJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9
PSAyICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAgICAgICAgICAgbV90b2tl
biA9IENNUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnZCc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gMyAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2UnKSAmJiBpc0Nhc2VsZXNz
RXF1YWwodHlwZVsyXSwgJ2cnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBERUdTOworICAgICAg
ICByZXR1cm47CisKKyAgICBjYXNlICdlJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7Cisg
ICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IEVNUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVh
bCh0eXBlWzFdLCAneCcpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBFWFM7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnZyc6CisgICAgICAgIGlmIChsZW5ndGgg
PT0gNCAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3InKQorICAgICAgICAgICAgICAgICYm
IGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnYScpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzNd
LCAnZCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IEdSQURTOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyICYmIGlzQ2FzZWxlc3NFcXVh
bCh0eXBlWzFdLCAneicpKQorICAgICAgICAgICAgbV90b2tlbiA9IEhFUlRaOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlICdpJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyICYmIGlzQ2Fz
ZWxlc3NFcXVhbCh0eXBlWzFdLCAnbicpKQorICAgICAgICAgICAgbV90b2tlbiA9IElOUzsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnayc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMyAm
JiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2gnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsy
XSwgJ3onKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBLSEVSVFo7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgJ20nOgorICAgICAgICBpZiAobGVuZ3RoID09IDIpIHsKKyAgICAgICAgICAg
IGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20nKSkKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gTU1TOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICdzJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IE1TRUNTOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgJ3AnOgorICAgICAgICBpZiAobGVuZ3RoID09IDIpIHsK
KyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3gnKSkKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gUFhTOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0Vx
dWFsKHR5cGVbMV0sICd0JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFBUUzsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnYycpKQorICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBQQ1M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSAncic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMykgeworICAgICAgICAgICAgaWYgKGlz
Q2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnYScpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAn
ZCcpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSQURTOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVb
Ml0sICdtJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFJFTVM7CiAgICAgICAgIH0KLSAg
ICAgICAgLy8gY2FuJ3QgaGFuZGxlIGNoYXJzIG91dHNpZGUgdWNzMgotICAgICAgICBpZiAodWMg
PiAweGZmZmYpCi0gICAgICAgICAgICB1YyA9IDB4ZmZmZDsKLSAgICAgICAgKm91dCsrID0gdWM7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3MnOgorICAgICAgICBpZiAobGVuZ3RoID09
IDEpCisgICAgICAgICAgICBtX3Rva2VuID0gU0VDUzsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSAndCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gNCAmJiBpc0Nhc2VsZXNzRXF1YWwodHlw
ZVsxXSwgJ3UnKQorICAgICAgICAgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAn
cicpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnbicpKQorICAgICAgICAgICAgbV90b2tl
biA9IFRVUk5TOworICAgICAgICByZXR1cm47CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAo
dHlwZVswXSA9PSAnXycgJiYgbGVuZ3RoID09IDUgJiYgdHlwZVsxXSA9PSAnXycgJiYgaXNDYXNl
bGVzc0VxdWFsKHR5cGVbMl0sICdxJykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1
YWwodHlwZVszXSwgJ2UnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVs0XSwgJ20nKSkKKyAgICAg
ICAgICAgIG1fdG9rZW4gPSBRRU1TOworICAgICAgICByZXR1cm47CiAgICAgfQorfQorCitpbmxp
bmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdERhc2hUb2tlbihpbnQgbGVuZ3RoKQoreworICAgIFVD
aGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworCisgICAgaWYgKGxlbmd0aCA9PSAxMSkgeworICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAneScpICYmIGlzQ2FzZWxlc3NFcXVh
bChuYW1lICsgMSwgIndlYmtpdC1hbiIpKQorICAgICAgICAgICAgbV90b2tlbiA9IEFOWUZVTkNU
SU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMF0sICduJykgJiYg
aXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0LW1pIikpCisgICAgICAgICAgICBtX3Rv
a2VuID0gTUlORlVOQ1RJT047CisgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1l
WzEwXSwgJ3gnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDEsICJ3ZWJraXQtbWEiKSkKKyAg
ICAgICAgICAgIG1fdG9rZW4gPSBNQVhGVU5DVElPTjsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9
PSAxMiAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDEsICJ3ZWJraXQtY2FsYyIpKQorICAgICAg
ICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOworfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRl
dGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9vbCBoYXNFc2NhcGUpCit7CisgICAgVUNoYXIqIG5h
bWUgPSBtX3Rva2VuU3RhcnQ7CisgICAgQVNTRVJUKG5hbWVbMF0gPT0gJ0AnICYmIGxlbmd0aCA+
PSAyKTsKKworICAgIC8vIGNoYXJzZXQsIGZvbnQtZmFjZSwgaW1wb3J0LCBtZWRpYSwgbmFtZXNw
YWNlLCBwYWdlLAorICAgIC8vIC13ZWJraXQta2V5ZnJhbWVzLCBhbmQgLXdlYmtpdC1tZWRpYXF1
ZXJ5IGFyZSBub3QgYWZmZWN0ZWQgYnkgaGFzRXNjYXBlLgorICAgIHN3aXRjaCAobG93ZXJjYXNl
Q2hhcmFjdGVyKG5hbWVbMV0pKSB7CisgICAgY2FzZSAnYic6CisgICAgICAgIGlmIChoYXNFc2Nh
cGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAg
ICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIs
ICJvdHRvbS1sZWZ0IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTUxFRlRfU1lN
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBp
ZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0b20tcmlnaHQiKSkKKyAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gQk9UVE9NUklHSFRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAib3R0b20tY2VudGVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTUNFTlRF
Ul9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxOToKKyAgICAgICAg
ICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1sZWZ0LWNvcm5lciIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUQ09STkVSX1NZTTsKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxl
c3NFcXVhbChuYW1lICsgMiwgIm90dG9tLXJpZ2h0LWNvcm5lciIpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBCT1RUT01SSUdIVENPUk5FUl9TWU07CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gOCAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJoYXJzZXQiKSkKKyAgICAg
ICAgICAgIG1fdG9rZW4gPSBDSEFSU0VUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSAnZic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUg
KyAyLCAib250LWZhY2UiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdpJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA3
ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm1wb3J0IikpIHsKKyAgICAgICAgICAgIG1f
cGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJTVBP
UlRfU1lNOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2wnOgorICAg
ICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChs
ZW5ndGggPT0gOSkgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwg
ImVmdC10b3AiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTEVGVFRPUF9TWU07CisgICAg
ICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEyKSB7CisgICAgICAgICAgICAvLyBDaGVja2luZyB0
aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmls
ZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdlJykg
JiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiZWZ0LW1pZGRsIikpCisgICAgICAgICAgICAg
ICAgbV90b2tlbiA9IExFRlRNSURETEVfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNl
bGVzc0VxdWFsKG5hbWVbMTFdLCAnbScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVm
dC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUQk9UVE9NX1NZTTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdtJzoKKyAgICAgICAgaWYgKGxl
bmd0aCA9PSA2ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVkaWEiKSkgeworICAgICAg
ICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOworICAgICAgICAgICAgbV90b2tl
biA9IE1FRElBX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdu
JzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIs
ICJhbWVzcGFjZSIpKQorICAgICAgICAgICAgbV90b2tlbiA9IE5BTUVTUEFDRV9TWU07CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgJ3AnOgorICAgICAgICBpZiAobGVuZ3RoID09IDUgJiYg
aXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiYWdlIikpCisgICAgICAgICAgICBtX3Rva2VuID0g
UEFHRV9TWU07CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAo
aGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChsZW5ndGggPT0g
MTApIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJpZ2h0LXRv
cCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVFRPUF9TWU07CisgICAgICAgIH0g
ZWxzZSBpZiAobGVuZ3RoID09IDEzKSB7CisgICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFz
dCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNl
cy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMl0sICdlJykgJiYgaXND
YXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC1taWRkbCIpKQorICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBSSUdIVE1JRERMRV9TWU07CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZVsxMl0sICdtJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC1i
b3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVEJPVFRPTV9TWU07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOwogCi0gICAgKmxlbmd0aCA9IG91dCAtIHN0YXJ0OworICAg
IGNhc2UgJ3QnOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gSWYgd2UgaGF2ZSBhbiB1bnJlY29nbml6ZWQgQC1rZXl3b3JkLCBhbmQgaWYgd2Ug
aGFuZGxlZCBhbnkgZXNjYXBlcyBhdCBhbGwsIHRoZW4KLSAgICAvLyB3ZSBzaG91bGQgYXR0ZW1w
dCB0byBhZGp1c3QgeXlUb2sgdG8gdGhlIGNvcnJlY3QgdHlwZS4KLSAgICBpZiAoeXlUb2sgPT0g
QVRLRVlXT1JEICYmIHNhd0VzY2FwZSkKLSAgICAgICAgcmVjaGVja0F0S2V5d29yZChzdGFydCwg
Kmxlbmd0aCk7CisgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7CisgICAgICAgIGNhc2UgOToKKyAg
ICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1sZWZ0IikpCisgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IFRPUExFRlRfU1lNOworICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgcmV0dXJuIHN0YXJ0OworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgaWYgKGlz
Q2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLXJpZ2h0IikpCisgICAgICAgICAgICAgICAgbV90
b2tlbiA9IFRPUFJJR0hUX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IDExOgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLWNlbnRl
ciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BDRU5URVJfU1lNOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVz
c0VxdWFsKG5hbWUgKyAyLCAib3AtbGVmdC1jb3JuZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gVE9QTEVGVENPUk5FUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y2FzZSAxNzoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1y
aWdodC1jb3JuZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QUklHSFRDT1JORVJf
U1lNOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgJy0nOgorICAgICAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgICAgICBjYXNlIDEz
OgorICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAid2Via2l0LXJ1bGUiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX1JVTEVf
U1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAg
ICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
Ly8gQ2hlY2tpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNl
IHRoZSBwb3NzaWJpbGUgY2FzZXMuCisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5h
bWVbMTNdLCAncycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1kZWNsIikp
CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9ERUNMU19TWU07CisgICAgICAgICAg
ICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxM10sICdlJykgJiYgaXNDYXNlbGVzc0Vx
dWFsKG5hbWUgKyAyLCAid2Via2l0LXZhbHUiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0g
V0VCS0lUX1ZBTFVFX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE3
OgorICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAid2Via2l0LXNlbGVjdG9yIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9T
RUxFQ1RPUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxODoKKyAg
ICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWVz
IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOworICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTk6CisgICAgICAgICAgICBpZiAoaXND
YXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Via2l0LW1lZGlhcXVlcnkiKSkgeworICAgICAgICAg
ICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAgICAgICAgICBt
X3Rva2VuID0gV0VCS0lUX01FRElBUVVFUllfU1lNOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2Fw
ZSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWUtcnVsZSIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfS0VZRlJBTUVfUlVMRV9TWU07CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpj
b3VudExpbmVzKCkKK2ludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxXaXRob3V0VHlwZSkK
IHsKLSAgICBmb3IgKFVDaGFyKiBjdXJyZW50ID0geXl0ZXh0OyBjdXJyZW50IDwgeXl0ZXh0ICsg
eXlsZW5nOyArK2N1cnJlbnQpIHsKLSAgICAgICAgaWYgKCpjdXJyZW50ID09ICdcbicpCi0gICAg
ICAgICAgICArK21fbGluZU51bWJlcjsKKyAgICBZWVNUWVBFKiB5eWx2YWwgPSBzdGF0aWNfY2Fz
dDxZWVNUWVBFKj4oeXlsdmFsV2l0aG91dFR5cGUpOworICAgIC8vIFdyaXRlIHBvaW50ZXIgZm9y
IHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICBVQ2hhciogcmVzdWx0OworICAgIGJvb2wgaGFzRXNj
YXBlOworCisgICAgLy8gVGhlIGlucHV0IGJ1ZmZlciBpcyB0ZXJtaW5hdGVkIGJ5IHR3byBcMCwg
c28KKyAgICAvLyBpdCBpcyBzYWZlIHRvIHJlYWQgdHdvIGNoYXJhY3RlcnMgYWhlYWQgYW55dGlt
ZS4KKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBJbiBkZWJ1ZyB3ZSBjaGVjayB3aXRoIGFuIEFT
U0VSVCB0aGF0IHRoZSBsZW5ndGggaXMgPiAwIGZvciBzdHJpbmcgdHlwZXMuCisgICAgeXlsdmFs
LT5zdHJpbmcuY2hhcmFjdGVycyA9IDA7CisgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gMDsK
KyNlbmRpZgorCisgICAgLy8gVGhpcyBpcyBub3QgYSByZWFsIGxvb3AsIGp1c3QgYWxsb3dzIHVz
IHRvIGF2b2lkIGdvdG9zLgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIG1fdG9rZW5TdGFy
dCA9IHJlc3VsdCA9IG1fZGF0YTsKKyAgICAgICAgbV90b2tlbiA9ICptX2RhdGE7CisgICAgICAg
ICsrbV9kYXRhOworCisgICAgICAgIHN3aXRjaCAoKG1fdG9rZW4gPD0gMTI3KSA/IHR5cGVzT2ZB
U0NJSUNoYXJhY3RlcnNbbV90b2tlbl0gOiBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQpIHsKKyAg
ICAgICAgY2FzZSBDaGFyYWN0ZXJDYXNlbGVzc1U6CisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
Km1fZGF0YSA9PSAnKycpKQorICAgICAgICAgICAgICAgIGlmIChwYXJzZVVuaWNvZGVSYW5nZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBVTklDT0RFUkFOR0U7CisgICAgICAg
ICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7Cisg
ICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9r
ZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIENoYXJhY3RlcklkZW50aWZpZXJTdGFydC4K
KworICAgICAgICBjYXNlIENoYXJhY3RlcklkZW50aWZpZXJTdGFydDoKKyAgICAgICAgICAgIC0t
bV9kYXRhOworICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVudGlmaWVyKHJlc3VsdCk7
CisgICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisKKyAgICAgICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5sZW5ndGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSgqbV9kYXRhID09ICcoJykpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJ
T047CisgICAgICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCisgICAgICAgICAgICAgICAgICAg
IGRldGVjdEZ1bmN0aW9uVG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgICAgICAg
ICArK3l5bHZhbC0+c3RyaW5nLmxlbmd0aDsKKworICAgICAgICAgICAgICAgIGlmICh0b2tlbigp
ID09IFVSSSkgeworICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJT047CisgICAg
ICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgaXQgaXMgcmVhbGx5IGFuIFVSSS4KKyAg
ICAgICAgICAgICAgICAgICAgcGFyc2VVUkkoeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycywgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0
IC0geXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVyczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgIT0gTm9ybWFsTW9kZSkgJiYg
IWhhc0VzY2FwZSkgeworICAgICAgICAgICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE1lZGlh
UXVlcnlNb2RlKQorICAgICAgICAgICAgICAgICAgICBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW4ocmVz
dWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtX3BhcnNpbmdN
b2RlID09IE50aENoaWxkTW9kZSAmJiBpc0Nhc2VsZXNzRXF1YWwobV90b2tlblN0YXJ0WzBdLCAn
bicpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0g
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuIiBpcyBJREVOVCBidXQg
Im4rMSIgaXMgTlRILgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRF
eHRyYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEg
LSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAocmVzdWx0IC0gbV90b2tlblN0YXJ0ID09IDIgJiYgbV90b2tlblN0
YXJ0WzFdID09ICctJykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuLSIg
aXMgSURFTlQgYnV0ICJuLTEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNw
ZWN1bGF0aXZlbHkgZGVjcmVhc2UgbV9kYXRhIHRvIGRldGVjdCBhbiBudGgtY2hpbGQgdG9rZW4u
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtLTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5z
dHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhl
IGNoYW5nZSB0byBtX2RhdGEgaWYgdW5zdWNjZXNzZnVsLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGF0YSsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJEb3Q6CisgICAgICAgICAgICBpZiAoIWlz
QVNDSUlEaWdpdChtX2RhdGFbMF0pKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8gRmFsbCB0aHJvdWdoIHRvIENoYXJhY3Rlck51bWJlci4KKworICAgICAgICBjYXNlIENo
YXJhY3Rlck51bWJlcjogeworICAgICAgICAgICAgYm9vbCBkb3RTZWVuID0gKG1fdG9rZW4gPT0g
Jy4nKTsKKworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWlzQVNDSUlEaWdpdChtX2RhdGFbMF0pKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkg
b25lIGRvdCBpcyBhbGxvd2VkIGZvciBhIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgLy8g
YW5kIGl0IG11c3QgYmUgZm9sbG93ZWQgYnkgYSBkaWdpdC4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZGF0YVswXSAhPSAnLicgfHwgZG90U2VlbiB8fCAhaXNBU0NJSURpZ2l0KG1fZGF0YVsx
XSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ZG90U2VlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbV9k
YXRhOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9wYXJzaW5n
TW9kZSA9PSBOdGhDaGlsZE1vZGUpICYmICFkb3RTZWVuICYmIGlzQ2FzZWxlc3NFcXVhbCgqbV9k
YXRhLCAnbicpKSB7CisgICAgICAgICAgICAgICAgLy8gIlswLTldK24iIGlzIGFsd2F5cyBhbiBO
dGhDaGlsZC4KKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBwYXJz
ZU50aENoaWxkRXh0cmEoKTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAg
ICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAg
ICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB5
eWx2YWwtPm51bWJlciA9IGNoYXJhY3RlcnNUb0RvdWJsZShtX3Rva2VuU3RhcnQsIG1fZGF0YSAt
IG1fdG9rZW5TdGFydCk7CisKKyAgICAgICAgICAgIC8vIFR5cGUgb2YgdGhlIGZ1bmN0aW9uLgor
ICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBV
Q2hhciogdHlwZSA9IG1fZGF0YTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2RhdGE7CisK
KyAgICAgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQW55IGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYSAnKycgc2lnbiBpcyBhbiBpbnZhbGlkIGRp
bWVuc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBJTlZBTElERElNRU47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERJTUVOOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWhhc0VzY2FwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdE51bWJlclRva2Vu
KHR5cGUsIG1fZGF0YSAtIHR5cGUpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtX3Rva2Vu
ID09IERJTUVOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZGVjb2RlZCBudW1i
ZXIgaXMgb3ZlcndyaXR0ZW4sIGJ1dCB0aGlzIGlzIGludGVudGlvbmFsLgorICAgICAgICAgICAg
ICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1f
dG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKm1fZGF0YSA9PSAnJScpIHsKKyAgICAgICAgICAgICAgICAv
LyBBbHRob3VnaCB0aGUgQ1NTIGdyYW1tYXIgc2F5cyB7bnVtfSUgd2UgZm9sbG93CisgICAgICAg
ICAgICAgICAgLy8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hpY2ggdXNlcyB7bnVtfSUrLgorICAg
ICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAg
ICAgICAgICAgfSB3aGlsZSAoKm1fZGF0YSA9PSAnJScpOworICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBQRVJDRU5UQUdFOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV90
b2tlbiA9IGRvdFNlZW4gPyBGTE9BVFRPS0VOIDogSU5URUdFUjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJEYXNoOgorICAgICAgICAgICAg
aWYgKGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKG1fZGF0YSkpIHsKKyAgICAgICAgICAgICAg
ICAtLW1fZGF0YTsKKyAgICAgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50aWZpZXIo
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisKKyAgICAgICAgICAg
ICAgICBpZiAoKm1fZGF0YSA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9
IEZVTkNUSU9OOworICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRldGVjdERhc2hUb2tlbihyZXN1bHQgLSBtX3Rva2VuU3RhcnQpOwor
ICAgICAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgKytyZXN1
bHQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09
IE50aENoaWxkTW9kZSkgJiYgIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNzRXF1YWwobV90b2tlblN0
YXJ0WzFdLCAnbicpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgLSBtX3Rva2Vu
U3RhcnQgPT0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICItbiIgaXMg
SURFTlQgYnV0ICItbisxIiBpcyBOVEguCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFy
c2VOdGhDaGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fZGF0YTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChy
ZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMyAmJiBtX3Rva2VuU3RhcnRbMl0gPT0gJy0nKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgIi1uLSIgaXMgSURFTlQgYnV0ICItbi0x
IiBpcyBOVEguCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGl2ZWx5IGRlY3Jl
YXNlIG1fZGF0YSB0byBkZXRlY3QgYW4gbnRoLWNoaWxkIHRva2VuLgorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kYXRhLS07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhD
aGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRI
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1f
ZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2UgdG8gbV9kYXRh
IGlmIHVuc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGErKzsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0g
bV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJl
c3VsdCAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kYXRhWzBdID09
ICctJyAmJiBtX2RhdGFbMV0gPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgbV9kYXRhICs9IDI7
CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSkgeworICAgICAgICAg
ICAgICAgIC8vICItWzAtOV0rbiIgaXMgYWx3YXlzIGFuIE50aENoaWxkLgorICAgICAgICAgICAg
ICAgIGlmIChwYXJzZU50aENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VOdGhD
aGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAg
ICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7Cisg
ICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9r
ZW5TdGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3Rlck90aGVyOgorICAgICAgICAgICAgLy8gbV90
b2tlbiBpcyBzaW1wbHkgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJXaGl0ZVNwYWNlOgorICAgICAgICAgICAgbV90b2tl
biA9IFdISVRFU1BBQ0U7CisgICAgICAgICAgICAvLyBNaWdodCBzdGFydCB3aXRoIGEgJ1xuJy4K
KyAgICAgICAgICAgIC0tbV9kYXRhOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAg
IGlmICgqbV9kYXRhID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgICsrbV9saW5lTnVtYmVy
OworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgfSB3aGlsZSAoKm1fZGF0
YSA8PSAnICcgJiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKm1fZGF0YV0gPT0gQ2hhcmFjdGVy
V2hpdGVTcGFjZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0
ZXJFbmRNZWRpYVF1ZXJ5OgorICAgICAgICAgICAgaWYgKG1fcGFyc2luZ01vZGUgPT0gTWVkaWFR
dWVyeU1vZGUpCisgICAgICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE5vcm1hbE1vZGU7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlckVuZE50aENoaWxkOgor
ICAgICAgICAgICAgaWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKQorICAgICAgICAg
ICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2RlOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBDaGFyYWN0ZXJRdW90ZToKKyAgICAgICAgICAgIGlmIChjaGVja1N0cmlu
ZyhtX2RhdGEsIG1fdG9rZW4pKSB7CisgICAgICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgICAg
ICAgICAgICAgcGFyc2VTdHJpbmcocmVzdWx0LCBtX3Rva2VuKTsKKyAgICAgICAgICAgICAgICBt
X3Rva2VuID0gU1RSSU5HOworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3Rl
cnMgPSBtX3Rva2VuU3RhcnQgKyAxOworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxl
bmd0aCA9IHJlc3VsdCAtIChtX3Rva2VuU3RhcnQgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrOiB7
CisgICAgICAgICAgICBVQ2hhciogc3RhcnQgPSBza2lwV2hpdGVTcGFjZXMobV9kYXRhKTsKKyAg
ICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwoc3RhcnQsICJpbXBvcnRhbnQiKSkgeworICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBJTVBPUlRBTlRfU1lNOworICAgICAgICAgICAgICAgIG1f
ZGF0YSA9IHN0YXJ0ICsgOTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJIYXNobWFyazogeworICAgICAgICAgICAg
VUNoYXIqIHN0YXJ0ID0gbV9kYXRhOworICAgICAgICAgICAgcmVzdWx0ID0gbV9kYXRhOworCisg
ICAgICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KCptX2RhdGEpKSB7CisgICAgICAgICAgICAgICAg
Ly8gVGhpcyBtdXN0IGJlIGEgdmFsaWQgaGV4IG51bWJlciB0b2tlbi4KKyAgICAgICAgICAgICAg
ICBkbyB7CisgICAgICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgIH0g
d2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqbV9kYXRhKSk7CisgICAgICAgICAgICAgICAgbV90b2tl
biA9IEhFWDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gc3Rh
cnQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gc3Rh
cnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gSURTRUw7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUlk
ZW50aWZpZXIocmVzdWx0KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVy
IHRoZSBpZGVudGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVtYmVyLgorICAgICAgICAgICAg
ICAgICAgICBVQ2hhciogY3VycmVudCA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gSEVYOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gSURTRUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQgPCByZXN1
bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5j
aGFyYWN0ZXJzID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
ID0gcmVzdWx0IC0gc3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyU2xhc2g6CisgICAgICAgICAgICAvLyBJ
Z25vcmUgY29tbWVudHMuIFRoZXkgYXJlIG5vdCBldmVuIGNvbnNpZGVyZWQgYXMgd2hpdGUgc3Bh
Y2VzLgorICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJyonKSB7CisgICAgICAgICAgICAgICAg
KyttX2RhdGE7CisgICAgICAgICAgICAgICAgd2hpbGUgKG1fZGF0YVswXSAhPSAnKicgfHwgbV9k
YXRhWzFdICE9ICcvJykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9kYXRhWzBdID09ICdc
bicpCisgICAgICAgICAgICAgICAgICAgICAgICArK21fbGluZU51bWJlcjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZGF0YVswXSA9PSAnXDAnICYmIG1fZGF0YVsxXSA9PSAnXDAnKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnRlcm1pbmF0ZWQgY29tbWVudHMgYXJlIHNpbXBs
eSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhIC09IDI7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bV9kYXRhICs9IDI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlckRvbGxhcjoKKyAgICAg
ICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgICAgICsrbV9kYXRhOwor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBFTkRTV0lUSDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyQXN0ZXJpc2s6CisgICAgICAg
ICAgICBpZiAoKm1fZGF0YSA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gQ09OVEFJTlM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlclBsdXM6CisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpKSB7CisgICAgICAgICAg
ICAgICAgLy8gU2ltcGxlc3QgY2FzZS4gIitbMC05XSpuIiBpcyBhbHdheXMgTnRoQ2hpbGQuCisg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBwYXJzZU50aENoaWxkRXh0cmEoKTsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5U
SDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9r
ZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9k
YXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyTGVzczoKKyAgICAgICAg
ICAgIGlmIChtX2RhdGFbMF0gPT0gJyEnICYmIG1fZGF0YVsxXSA9PSAnLScgJiYgbV9kYXRhWzJd
ID09ICctJykgeworICAgICAgICAgICAgICAgIG1fZGF0YSArPSAzOworICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBTR01MX0NEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBDaGFyYWN0ZXJBdDoKKyAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJT
dGFydCgpKSB7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEFUS0VZV09SRDsKKyAgICAgICAg
ICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50
aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBkZXRlY3RBdFRva2VuKHJlc3VsdCAtIG1f
dG9rZW5TdGFydCwgaGFzRXNjYXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyQmFja1NsYXNoOgorICAgICAgICAgICAgaWYgKGlz
Q1NTRXNjYXBlKCptX2RhdGEpKSB7CisgICAgICAgICAgICAgICAgLS1tX2RhdGE7CisgICAgICAg
ICAgICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgbV90b2tl
biA9IElERU5UOworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBt
X3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVz
dWx0IC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBDaGFyYWN0ZXJYb3I6CisgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAn
PScpIHsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gQkVHSU5TV0lUSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgQ2hhcmFjdGVyVmVydGljYWxCYXI6CisgICAgICAgICAgICBpZiAoKm1fZGF0YSA9
PSAnPScpIHsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gREFTSE1BVENIOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBDaGFyYWN0ZXJUaWxkZToKKyAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICc9
JykgeworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBJTkNMVURFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KKworI2lmbmRlZiBOREVC
VUcKKyAgICBzd2l0Y2ggKHRva2VuKCkpIHsKKyAgICBjYXNlIFNUUklORzoKKyAgICAgICAgQVNT
RVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICsgMSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBJREVOVDoKKyAgICBjYXNlIE5USDoKKyAgICBjYXNlIERJ
TUVOOgorICAgIGNhc2UgVU5JQ09ERVJBTkdFOgorICAgIGNhc2UgRlVOQ1RJT046CisgICAgY2Fz
ZSBBTllGVU5DVElPTjoKKyAgICBjYXNlIE5PVEZVTkNUSU9OOgorICAgIGNhc2UgQ0FMQ0ZVTkNU
SU9OOgorICAgIGNhc2UgTUlORlVOQ1RJT046CisgICAgY2FzZSBNQVhGVU5DVElPTjoKKyAgICAg
ICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICYmIHl5
bHZhbC0+c3RyaW5nLmxlbmd0aCA+IDApOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVVJJ
OgorICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyAmJiB5eWx2YWwtPnN0
cmluZy5jaGFyYWN0ZXJzICE9IG1fdG9rZW5TdGFydCk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBIRVg6CisgICAgY2FzZSBJRFNFTDoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5n
LmNoYXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICsgMSAmJiB5eWx2YWwtPnN0cmluZy5sZW5ndGgg
PiAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gdG9rZW4o
KTsKIH0KIAogQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdTZWxl
Y3RvcigpCkBAIC03ODM2LDI3ICs4ODE0LDI3IEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0
TWVkaWFMaW5lKE1lZGlhTGlzdCogbWVkaWEpCiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0
b3JMaXN0U3RhcnQoKQogewotICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSB5eXRleHQg
LSBtX2RhdGE7CisgICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAt
IG1fZGF0YVN0YXJ0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdEVuZCgp
CiB7CiAgICAgaWYgKCFtX2N1cnJlbnRSdWxlRGF0YSkKICAgICAgICAgcmV0dXJuOwotICAgIFVD
aGFyKiBsaXN0RW5kID0geXl0ZXh0OwotICAgIHdoaWxlIChsaXN0RW5kID4gbV9kYXRhICsgMSkg
eworICAgIFVDaGFyKiBsaXN0RW5kID0gbV90b2tlblN0YXJ0OworICAgIHdoaWxlIChsaXN0RW5k
ID4gbV9kYXRhU3RhcnQgKyAxKSB7CiAgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqKGxpc3RFbmQg
LSAxKSkpCiAgICAgICAgICAgICAtLWxpc3RFbmQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RFbmQgLSBt
X2RhdGE7CisgICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhU3Rh
cnQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCiB7Ci0gICAgdW5z
aWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwotICAgIGlmICgqeXl0ZXh0ID09ICd7JykK
KyAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydDsKKyAgICBp
ZiAoKm1fdG9rZW5TdGFydCA9PSAneycpCiAgICAgICAgICsrb2Zmc2V0OyAvLyBTa2lwIHRoZSBy
dWxlIGJvZHkgb3BlbmluZyBicmFjZS4KICAgICBpZiAob2Zmc2V0ID4gbV9ydWxlQm9keVJhbmdl
LnN0YXJ0KQogICAgICAgICBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBvZmZzZXQ7CkBAIC03ODY1
LDcgKzg4NDMsNyBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5U3RhcnQoKQogCiB2b2lk
IENTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5kKCkKIHsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB5
eXRleHQgLSBtX2RhdGE7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9k
YXRhU3RhcnQ7CiAgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5lbmQpCiAgICAgICAg
IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSBvZmZzZXQ7CiB9CkBAIC03ODc0LDE1ICs4ODUyLDE1IEBA
IHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlTdGFydCgpCiB7CiAgICAgaWYgKCFtX2luU3R5
bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvcGVydHlSYW5n
ZS5zdGFydCA9IHl5dGV4dCAtIG1fZGF0YTsKKyAgICBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBt
X3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9w
ZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkKIHsK
ICAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uKQogICAgICAgICByZXR1cm47Ci0g
ICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwotICAgIGlmICgqeXl0ZXh0ID09
ICc7JykgLy8gSW5jbHVkZSBzZW1pY29sb24gaW50byB0aGUgcHJvcGVydHkgdGV4dC4KKyAgICB1
bnNpZ25lZCBvZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydDsKKyAgICBpZiAoKm1f
dG9rZW5TdGFydCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGludG8gdGhlIHByb3BlcnR5
IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwogICAgIG1fcHJvcGVydHlSYW5nZS5lbmQgPSBvZmZz
ZXQ7CiAgICAgaWYgKG1fcHJvcGVydHlSYW5nZS5zdGFydCAhPSBVSU5UX01BWCAmJiBtX2N1cnJl
bnRSdWxlRGF0YSkgewpAQCAtNzg5MCw3ICs4ODY4LDcgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQ
cm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkK
ICAgICAgICAgY29uc3QgdW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7CiAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGVuZCA9IG1fcHJvcGVydHlSYW5nZS5lbmQ7CiAgICAgICAg
IEFTU0VSVChzdGFydCA8IGVuZCk7Ci0gICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0
cmluZyhtX2RhdGEgKyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOworICAg
ICAgICBTdHJpbmcgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRhU3RhcnQgKyBzdGFydCwg
ZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAocHJvcGVydHlTdHJp
bmcuZW5kc1dpdGgoIjsiLCB0cnVlKSkKICAgICAgICAgICAgIHByb3BlcnR5U3RyaW5nID0gcHJv
cGVydHlTdHJpbmcubGVmdChwcm9wZXJ0eVN0cmluZy5sZW5ndGgoKSAtIDEpOwogICAgICAgICBz
aXplX3QgY29sb25JbmRleCA9IHByb3BlcnR5U3RyaW5nLmZpbmQoIjoiKTsKQEAgLTgxMDksMzMg
KzkwODcsNCBAQCBib29sIGlzVmFsaWROdGhUb2tlbihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHRv
a2VuKQogICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZSh0b2tlbiwgIm4iKSB8fCBlcXVhbEln
bm9yaW5nQ2FzZSh0b2tlbiwgIi1uIik7CiB9CiAKLSNkZWZpbmUgWVlfREVDTCBpbnQgQ1NTUGFy
c2VyOjpsZXgoKQotI2RlZmluZSB5eWNvbnN0IGNvbnN0Ci10eXBlZGVmIGludCB5eV9zdGF0ZV90
eXBlOwotdHlwZWRlZiB1bnNpZ25lZCBZWV9DSEFSOwotLy8gVGhlIGZvbGxvd2luZyBsaW5lIG1h
a2VzIHN1cmUgd2UgdHJlYXQgbm9uLUxhdGluLTEgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlY3Rs
eS4KLSNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKGMgPiAweGZmID8gMHhmZiA6IGMpCi0jZGVmaW5l
IFlZX0RPX0JFRk9SRV9BQ1RJT04gXAotICAgICAgICB5eXRleHQgPSB5eV9icDsgXAotICAgICAg
ICB5eWxlbmcgPSAoaW50KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICAgICAgeXlfaG9sZF9jaGFy
ID0gKnl5X2NwOyBcCi0gICAgICAgICp5eV9jcCA9IDA7IFwKLSAgICAgICAgeXlfY19idWZfcCA9
IHl5X2NwOwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNkZWZpbmUgRUNITwotI2RlZmluZSBZ
WV9SVUxFX1NFVFVQCi0jZGVmaW5lIElOSVRJQUwgMAotI2RlZmluZSBZWV9TVEFURV9FT0Yoc3Rh
dGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotI2RlZmluZSB5eXRlcm1pbmF0ZSgp
IHl5VG9rID0gRU5EX1RPS0VOOyByZXR1cm4geXlUb2sKLSNkZWZpbmUgWVlfRkFUQUxfRVJST1Io
YSkKLS8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBuZWVkZWQgdG8gYnVpbGQgdGhlIHRva2VuaXpl
ciB3aXRoIGEgY29uZGl0aW9uIHN0YWNrLgotLy8gVGhlIG1hY3JvIGlzIHVzZWQgaW4gdGhlIHRv
a2VuaXplciBncmFtbWFyIHdpdGggbGluZXMgY29udGFpbmluZwotLy8gQkVHSU4obWVkaWFxdWVy
aWVzKSBhbmQgQkVHSU4oaW5pdGlhbCkuIHl5X3N0YXJ0IGFjdHMgYXMgaW5kZXggdG8KLS8vIHRv
a2VuaXplciB0cmFuc2l0aW9uIHRhYmxlLCBhbmQgJ21lZGlhcXVlcmllcycgYW5kICdpbml0aWFs
JyBhcmUKLS8vIG9mZnNldCBtdWx0aXBsaWVycyB0aGF0IHNwZWNpZnkgd2hpY2ggdHJhbnNpdGlv
bnMgYXJlIGFjdGl2ZQotLy8gaW4gdGhlIHRva2VuaXplciBkdXJpbmcgaW4gZWFjaCBjb25kaXRp
b24gKHRva2VuaXplciBzdGF0ZSkuCi0jZGVmaW5lIEJFR0lOIHl5X3N0YXJ0ID0gMSArIDIgKgot
Ci0jaW5jbHVkZSAidG9rZW5pemVyLmNwcCIKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4
IDE2Yzg0MTMuLjIzZWQwZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTMxMCwxMiArMzEw
LDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsgbV9ydWxlQm9k
eVJhbmdlLnN0YXJ0ID0gbV9ydWxlQm9keVJhbmdlLmVuZCA9IDA7IH0KICAgICB2b2lkIHJlc2V0
UHJvcGVydHlNYXJrcygpIHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdl
LmVuZCA9IFVJTlRfTUFYOyB9CiAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOwotICAgIGludCB0
b2tlbigpIHsgcmV0dXJuIHl5VG9rOyB9Ci0gICAgVUNoYXIqIHRleHQoaW50KiBsZW5ndGgpOwot
ICAgIHZvaWQgY291bnRMaW5lcygpOwotICAgIGludCBsZXgoKTsKKyAgICBpbnQgdG9rZW4oKSB7
IHJldHVybiBtX3Rva2VuOyB9CiAKIHByaXZhdGU6CisgICAgaW5saW5lIGJvb2wgaXNJZGVudGlm
aWVyU3RhcnQoKTsKKworICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIqIGNoZWNrU3RyaW5nKFVDaGFy
KiwgVUNoYXIpOworCisgICAgdm9pZCBwYXJzZUVzY2FwZShVQ2hhciomKTsKKyAgICBpbmxpbmUg
Ym9vbCBwYXJzZUlkZW50aWZpZXIoVUNoYXIqJik7CisgICAgaW5saW5lIHZvaWQgcGFyc2VTdHJp
bmcoVUNoYXIqJiwgVUNoYXIpOworICAgIGlubGluZSB2b2lkIHBhcnNlVVJJKFVDaGFyKiYsIFVD
aGFyKiYpOworICAgIGlubGluZSBib29sIHBhcnNlVW5pY29kZVJhbmdlKCk7CisgICAgYm9vbCBw
YXJzZU50aENoaWxkKCk7CisgICAgYm9vbCBwYXJzZU50aENoaWxkRXh0cmEoKTsKKyAgICBpbmxp
bmUgdm9pZCBkZXRlY3RGdW5jdGlvblRva2VuKGludCk7CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0
TWVkaWFRdWVyeVRva2VuKGludCk7CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0TnVtYmVyVG9rZW4o
VUNoYXIqLCBpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdERhc2hUb2tlbihpbnQpOworICAg
IGlubGluZSB2b2lkIGRldGVjdEF0VG9rZW4oaW50LCBib29sKTsKKwogICAgIHZvaWQgc2V0U3R5
bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAKICAgICB2b2lkIHJlY2hlY2tBdEtleXdvcmQoY29u
c3QgVUNoYXIqIHN0ciwgaW50IGxlbik7CkBAIC0zNDgsMTUgKzM2MiwxNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgcGFyc2VGb250RmFjZVNyY1VSSShDU1NWYWx1ZUxpc3QqKTsKICAgICBib29sIHBh
cnNlRm9udEZhY2VTcmNMb2NhbChDU1NWYWx1ZUxpc3QqKTsKIAorICAgIGVudW0gUGFyc2luZ01v
ZGUgeworICAgICAgICBOb3JtYWxNb2RlLAorICAgICAgICBNZWRpYVF1ZXJ5TW9kZSwKKyAgICAg
ICAgTnRoQ2hpbGRNb2RlCisgICAgfTsKKworICAgIFBhcnNpbmdNb2RlIG1fcGFyc2luZ01vZGU7
CisgICAgVUNoYXIqIG1fZGF0YVN0YXJ0OwogICAgIFVDaGFyKiBtX2RhdGE7Ci0gICAgVUNoYXIq
IHl5dGV4dDsKLSAgICBVQ2hhciogeXlfY19idWZfcDsKLSAgICBVQ2hhciB5eV9ob2xkX2NoYXI7
Ci0gICAgaW50IHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIFVDaGFyKiB5eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zOwotICAgIGludCB5eWxlbmc7Ci0gICAgaW50IHl5VG9rOwotICAgIGludCB5
eV9zdGFydDsKKyAgICBVQ2hhciogbV90b2tlblN0YXJ0OworICAgIGludCBtX3Rva2VuOwogICAg
IGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1fbGFzdFNlbGVjdG9yTGluZU51bWJlcjsKIAot
LSAKMS43LjIuNQoK
</data>
<flag name="commit-queue"
          id="118871"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120002</attachid>
            <date>2011-12-20 03:20:05 -0800</date>
            <delta_ts>2012-01-05 01:27:36 -0800</delta_ts>
            <desc>full patch, build testing</desc>
            <filename>0001-css-tokenizer.patch</filename>
            <type>text/plain</type>
            <size>78492</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBkMTc3MzA1ZDVlODJjODdjZjE0YWQ0ZmVkMTc1MDg0ZjNkNWMwNmNlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogVHVlLCAyMCBEZWMgMjAxMSAwMDozNjo0MyAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGNz
cy10b2tlbml6ZXIKCi0tLQogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDExIC0KIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2Ug
ICAgICAgICAgICAgICAgIHwgICAgOCAtCiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5w
cmkgICAgICAgICAgICAgICAgICB8ICAgMTEgLQogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0gICAgICAgICAgICAgICAgICAgICAgfCAgICA1IC0KIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgMyAtCiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cCAgICAgICAgICAgICB8ICAgMTcgLQogLi4uL1dlYkNvcmUuZ3lw
L3NjcmlwdHMvYWN0aW9uX21ha2V0b2tlbml6ZXIucHkgICAgfCAgMTAxIC0tCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgLQogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAgfCAgICA0IC0KIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgIHwgICAgNCAt
CiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCAgICAgICAgICAgICAgICAgICB8IDE0
NzIgKysrKysrKysrKysrKysrKy0tLS0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCAg
ICAgICAgICAgICAgICAgICAgIHwgICA0MCArLQogU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXpl
ci5mbGV4ICAgICAgICAgICAgICAgICAgfCAgMTMwIC0tCiB3c2NyaXB0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgLQogMTQgZmlsZXMgY2hhbmdlZCwg
MTI0MSBpbnNlcnRpb25zKCspLCA1NjcgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvc2NyaXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5w
eQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleAoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGVmY2M0NS4uZjNiMDQ0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIzMDUsMTcgKzIzMDUsNiBAQCBBRERfQ1VTVE9NX0NPTU1BTkQoCiBMSVNUKEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0hUTUxF
bnRpdHlUYWJsZS5jcHApCiAKIAotIyBHZW5lcmF0ZSB0b2tlbml6ZXIKLUZJTEUoVE9fTkFUSVZF
X1BBVEggJHtQRVJMX0VYRUNVVEFCTEV9IFBFUkxfRVhFQ1VUQUJMRV9OQVRJVkVfUEFUSCkKLUFE
RF9DVVNUT01fQ09NTUFORCgKLSAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L3Rva2VuaXplci5jcHAKLSAgICBNQUlOX0RFUEVOREVOQ1kgJHtXRUJDT1JFX0RJUn0vY3Nz
L21ha2V0b2tlbml6ZXIKLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2Nzcy90b2tlbml6ZXIu
ZmxleAotICAgIENPTU1BTkQgJHtGTEVYX0VYRUNVVEFCTEV9IC10ICR7V0VCQ09SRV9ESVJ9L2Nz
cy90b2tlbml6ZXIuZmxleCB8ICR7UEVSTF9FWEVDVVRBQkxFX05BVElWRV9QQVRIfSAke1dFQkNP
UkVfRElSfS9jc3MvbWFrZXRva2VuaXplciA+ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS90b2tlbml6ZXIuY3BwCi0gICAgVkVSQkFUSU0pCi1BRERfU09VUkNFX1dFQkNPUkVfREVSSVZF
RF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JFX0RJUn0vY3NzL0NTU1BhcnNlci5jcHAgdG9rZW5pemVy
LmNwcCkKLQotCiAjIFJlcGxhY2UgIjsiIHdpdGggInNwYWNlIiBpbiBvcmRlciB0byByZWNvZ25p
emUgZmVhdHVyZSBkZWZpbml0aW9uIGluIGNzcyBmaWxlcy4KIFNFVChGRUFUVVJFX0RFRklORVNf
V0lUSF9TUEFDRV9TRVBBUkFUT1IgIiIpCiBGT1JFQUNIKF9mZWF0dXJlICR7RkVBVFVSRV9ERUZJ
TkVTfSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9T
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDhmMDc5YTAuLjZmYzc5NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNjA5LDcgKzYwOSw2IEBAIGFsbCA6
IFwKICAgICBNYXRoTUxFbGVtZW50RmFjdG9yeS5jcHAgXAogICAgIE1hdGhNTE5hbWVzLmNwcCBc
CiAgICAgWFBhdGhHcmFtbWFyLmNwcCBcCi0gICAgdG9rZW5pemVyLmNwcCBcCiAjCiAKICMgLS0t
LS0tLS0KQEAgLTcwNiwxMyArNzA1LDYgQEAgQ29sb3JEYXRhLmNwcCA6IHBsYXRmb3JtL0NvbG9y
RGF0YS5ncGVyZiAkKFdlYkNvcmUpL21ha2UtaGFzaC10b29scy5wbAogCiAjIC0tLS0tLS0tCiAK
LSMgQ1NTIHRva2VuaXplcgotCi10b2tlbml6ZXIuY3BwIDogY3NzL3Rva2VuaXplci5mbGV4IGNz
cy9tYWtldG9rZW5pemVyCi0JZmxleCAtdCAkPCB8IHBlcmwgJChXZWJDb3JlKS9jc3MvbWFrZXRv
a2VuaXplciA+ICRACi0KLSMgLS0tLS0tLS0KLQogIyBDU1MgZ3JhbW1hcgogIyBOT1RFOiBPbGRl
ciB2ZXJzaW9ucyBvZiBiaXNvbiBkbyBub3QgaW5qZWN0IGFuIGluY2x1c2lvbiBndWFyZCwgc28g
d2UgYWRkIG9uZS4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
cHJpIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IGM0NDY3MjIuLmRi
NWYxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKQEAgLTI2LDggKzI2LDYgQEAgU1ZH
X05BTUVTID0gJCRQV0Qvc3ZnL3N2Z3RhZ3MuaW4KIAogWExJTktfTkFNRVMgPSAkJFBXRC9zdmcv
eGxpbmthdHRycy5pbgogCi1UT0tFTklaRVIgPSAkJFBXRC9jc3MvdG9rZW5pemVyLmZsZXgKLQog
Q1NTQklTT04gPSAkJFBXRC9jc3MvQ1NTR3JhbW1hci55CiAKIGNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9YU0xUPTEpIHsKQEAgLTczMSwxNSArNzI5LDYgQEAgYXJyYXlCdWZmZXJWaWV3Q3VzdG9t
U2NyaXB0LmNvbW1hbmRzID0gcGVybCAkJFBXRC9pbnNwZWN0b3IveHhkLnBsIFY4QXJyYXlCdWZm
ZXIKIGFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdC5hZGRfb3V0cHV0X3RvX3NvdXJjZXMgPSBm
YWxzZQogR0VORVJBVE9SUyArPSBhcnJheUJ1ZmZlclZpZXdDdXN0b21TY3JpcHQKIAotIyBHRU5F
UkFUT1IgMzogdG9rZW5pemVyIChmbGV4KQotdG9rZW5pemVyLm91dHB1dCA9ICR7UU1BS0VfRklM
RV9CQVNFfS5jcHAKLXRva2VuaXplci5pbnB1dCA9IFRPS0VOSVpFUgotdG9rZW5pemVyLnNjcmlw
dCA9ICQkUFdEL2Nzcy9tYWtldG9rZW5pemVyCi10b2tlbml6ZXIuY29tbWFuZHMgPSBmbGV4IC10
IDwgJHtRTUFLRV9GSUxFX05BTUV9IHwgcGVybCAkJHRva2VuaXplci5zY3JpcHQgPiAke1FNQUtF
X0ZJTEVfT1VUfQotIyB0b2tlbml6ZXIuY3BwIGlzIGluY2x1ZGVkIGludG8gQ1NTUGFyc2VyLmNw
cAotdG9rZW5pemVyLmFkZF9vdXRwdXRfdG9fc291cmNlcyA9IGZhbHNlCi1HRU5FUkFUT1JTICs9
IHRva2VuaXplcgotCiAjIEdFTkVSQVRPUiA0OiBDU1MgZ3JhbW1hcgogY3NzYmlzb24ub3V0cHV0
ID0gJHtRTUFLRV9GSUxFX0JBU0V9LmNwcAogY3NzYmlzb24uaW5wdXQgPSBDU1NCSVNPTgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCA4YzdiNmYzLi5iM2E5YTdjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQpAQCAtNjQyLDEwICs2NDIsNiBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0hUTUxFbnRpdHlU
YWJsZS5jcHA6ICQoV2ViQ29yZSkvaHRtbC9wYXJzZXIvSFRNTEVudGl0eU5hbQogRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9Db2xvckRhdGEuY3BwOiAkKFdlYkNvcmUpL3BsYXRmb3JtL0NvbG9yRGF0
YS5ncGVyZiAkKFdlYkNvcmUpL21ha2UtaGFzaC10b29scy5wbAogCSQoUEVSTCkgJChXZWJDb3Jl
KS9tYWtlLWhhc2gtdG9vbHMucGwgJChHRU5TT1VSQ0VTX1dFQkNPUkUpICQoV2ViQ29yZSkvcGxh
dGZvcm0vQ29sb3JEYXRhLmdwZXJmCiAKLSMgQ1NTIHRva2VuaXplcgotRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS90b2tlbml6ZXIuY3BwIDogJChXZWJDb3JlKS9jc3MvdG9rZW5pemVyLmZsZXggJChX
ZWJDb3JlKS9jc3MvbWFrZXRva2VuaXplcgotCSQoQU1fVl9HRU4pJChGTEVYKSAtdCAkPCB8ICQo
UEVSTCkgJChXZWJDb3JlKS9jc3MvbWFrZXRva2VuaXplciA+ICRACi0KICMgQ1NTIGdyYW1tYXIK
IAogIyBOT1RFOiBvbGRlciB2ZXJzaW9ucyBvZiBiaXNvbiBkbyBub3QgaW5qZWN0IGFuIGluY2x1
c2lvbiBndWFyZCwgc28gd2UgZG8gaXQKQEAgLTkxNyw3ICs5MTMsNiBAQCBFWFRSQV9ESVNUICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mvc3ZnLmNzcyBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NW
R0NTU1Byb3BlcnR5TmFtZXMuaW4gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NWYWx1ZUtl
eXdvcmRzLmluIFwKLQlTb3VyY2UvV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZsZXggXAogCVNvdXJj
ZS9XZWJDb3JlL2Nzcy92aWV3LXNvdXJjZS5jc3MgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRGb250RmFtaWx5TmFtZXMuaW4gXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEZhY3Rvcnku
aW4gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNmE4YjI2Ni4uOTE2NDE3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xLDYgKzEsMyBAQAotd2ViY29yZV9i
dWlsdF9ub3NvdXJjZXMgKz0gXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvdG9rZW5pemVyLmNw
cAotCiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
Q1NTR3JhbW1hci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQ1NTR3JhbW1hci5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggMDA2NjQ2NC4uMWE2ODli
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTg4NywyMyArODg3
LDYgQEAKICAgICAgICAgICBdLAogICAgICAgICB9LAogICAgICAgICB7Ci0gICAgICAgICAgJ2Fj
dGlvbl9uYW1lJzogJ3Rva2VuaXplcicsCi0gICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAg
ICAgICcuLi9jc3MvbWFrZXRva2VuaXplcicsCi0gICAgICAgICAgICAnLi4vY3NzL3Rva2VuaXpl
ci5mbGV4JywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAg
ICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC90b2tlbml6ZXIuY3BwJywKLSAg
ICAgICAgICBdLAotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAncHl0aG9uJywK
LSAgICAgICAgICAgICdzY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5JywKLSAgICAgICAg
ICAgICc8QChfb3V0cHV0cyknLAotICAgICAgICAgICAgJy0tJywKLSAgICAgICAgICAgICc8QChf
aW5wdXRzKScKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7CiAgICAgICAgICAg
J2FjdGlvbl9uYW1lJzogJ2Rlcml2ZWRfc291cmNlc19hbGxfaW5fb25lJywKICAgICAgICAgICAn
aW5wdXRzJzogWwogICAgICAgICAgICAgJ3NjcmlwdHMvYWN0aW9uX2Rlcml2ZWRzb3VyY2VzYWxs
aW5vbmUucHknLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvc2NyaXB0
cy9hY3Rpb25fbWFrZXRva2VuaXplci5weSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL3Nj
cmlwdHMvYWN0aW9uX21ha2V0b2tlbml6ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGY0YTI4ZWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvc2Ny
aXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCww
IEBACi0jIS91c3IvYmluL3B5dGhvbgotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jCi0jIENvcHly
aWdodCAoYykgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIHVzYWdl
OiBhY3Rpb25fbWFrZXRva2VuaXplci5weSBPVVRQVVRTIC0tIElOUFVUUwotIwotIyBNdWx0aXBs
ZSBJTlBVVFMgbWF5IGJlIGxpc3RlZC4gVGhlIHNlY3Rpb25zIGFyZSBzZXBhcmF0ZWQgYnkgLS0g
YXJndW1lbnRzLgotIwotIyBPVVRQVVRTIG11c3QgY29udGFpbiBhIHNpbmdsZSBpdGVtOiBhIHBh
dGggdG8gdG9rZW5pemVyLmNwcC4KLSMKLSMgSU5QVVRTIG11c3QgY29udGFpbiBleGFjdGx5IHR3
byBpdGVtcy4gVGhlIGZpcnN0IGl0ZW0gbXVzdCBiZSB0aGUgcGF0aCB0bwotIyBtYWtldG9rZW5p
emVyLiBUaGUgc2Vjb25kIGl0ZW0gbXVzdCBiZSB0aGUgcGF0aCB0byB0b2tlbml6ZXIuZmxleC4K
LQotCi1pbXBvcnQgb3MKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0KLQotZGVmIFNw
bGl0QXJnc0ludG9TZWN0aW9ucyhhcmdzKToKLSAgICBzZWN0aW9ucyA9IFtdCi0gICAgd2hpbGUg
bGVuKGFyZ3MpID4gMDoKLSAgICAgICAgaWYgbm90ICctLScgaW4gYXJnczoKLSAgICAgICAgICAg
ICMgSWYgdGhlcmUgaXMgbm8gJy0tJyBsZWZ0LCBldmVyeXRoaW5nIHJlbWFpbmluZyBpcyBhbiBl
bnRpcmUgc2VjdGlvbi4KLSAgICAgICAgICAgIGRhc2hlcyA9IGxlbihhcmdzKQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgZGFzaGVzID0gYXJncy5pbmRleCgnLS0nKQotCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChhcmdzWzpkYXNoZXNdKQotCi0gICAgICAgICMgTmV4dCB0aW1lIHRocm91
Z2ggdGhlIGxvb3AsIGxvb2sgYXQgZXZlcnl0aGluZyBhZnRlciB0aGlzICctLScuCi0gICAgICAg
IGlmIGRhc2hlcyArIDEgPT0gbGVuKGFyZ3MpOgotICAgICAgICAgICAgIyBJZiB0aGUgJy0tJyBp
cyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCB3ZSB3b24ndCBjb21lIGJhY2sgdGhyb3VnaCB0aGUK
LSAgICAgICAgICAgICMgbG9vcCBhZ2Fpbi4gQWRkIGFuIGVtcHR5IHNlY3Rpb24gbm93IGNvcnJl
c3BvbmRpbmcgdG8gdGhlIG5vdGhpbmduZXNzCi0gICAgICAgICAgICAjIGZvbGxvd2luZyB0aGUg
ZmluYWwgJy0tJy4KLSAgICAgICAgICAgIGFyZ3MgPSBbXQotICAgICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKGFyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhcmdzID0gYXJnc1tkYXNo
ZXMgKyAxOl0KLQotICAgIHJldHVybiBzZWN0aW9ucwotCi0KLWRlZiBtYWluKGFyZ3MpOgotICAg
IHNlY3Rpb25zID0gU3BsaXRBcmdzSW50b1NlY3Rpb25zKGFyZ3NbMTpdKQotICAgIGFzc2VydCBs
ZW4oc2VjdGlvbnMpID09IDIKLSAgICAob3V0cHV0cywgaW5wdXRzKSA9IHNlY3Rpb25zCi0KLSAg
ICBhc3NlcnQgbGVuKG91dHB1dHMpID09IDEKLSAgICBvdXRwdXQgPSBvdXRwdXRzWzBdCi0KLSAg
ICBhc3NlcnQgbGVuKGlucHV0cykgPT0gMgotICAgIG1ha2V0b2tlbml6ZXIgPSBpbnB1dHNbMF0K
LSAgICBmbGV4SW5wdXQgPSBpbnB1dHNbMV0KLQotICAgICMgRG8gaXQuIGNoZWNrX2NhbGwgaXMg
bmV3IGluIDIuNSwgc28gc2ltdWxhdGUgaXRzIGJlaGF2aW9yIHdpdGggY2FsbCBhbmQKLSAgICAj
IGFzc2VydC4KLSAgICBvdXRmaWxlID0gb3BlbihvdXRwdXQsICd3YicpCi0gICAgcDEgPSBzdWJw
cm9jZXNzLlBvcGVuKFsnZmxleCcsICctdCcsIGZsZXhJbnB1dF0sIHN0ZG91dD1zdWJwcm9jZXNz
LlBJUEUpCi0gICAgcDIgPSBzdWJwcm9jZXNzLlBvcGVuKFsncGVybCcsIG1ha2V0b2tlbml6ZXJd
LCBzdGRpbj1wMS5zdGRvdXQsIHN0ZG91dD1vdXRmaWxlKQotCi0gICAgcjEgPSBwMS53YWl0KCkK
LSAgICByMiA9IHAyLndhaXQoKQotICAgIGFzc2VydCByMSA9PSAwCi0gICAgYXNzZXJ0IHIyID09
IDAKLQotICAgIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBz
eXMuZXhpdChtYWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmY2RmNWI4Li4yMzA4
NGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC04MjYyLDcgKzgyNjIsNiBAQAogICAgICAgICAgICAg
JzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvWE1MVmlld2VySlMuaCcsCiAg
ICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YUGF0aEdy
YW1tYXIuY3BwJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL1hQYXRoR3JhbW1hci5oJywKLSAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJDb3JlL3Rva2VuaXplci5jcHAnLAogICAgICAgICBdLAogICAgICAgICAn
ZXhwb3J0X2ZpbGVfZ2VuZXJhdG9yX2ZpbGVzJzogWwogICAgICAgICAgICAgJzwoUFJPRFVDVF9E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRXhwb3J0RmlsZUdlbmVyYXRvci5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBlMDE5ODAx
Li4zZDZlYTk0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtMzU0MjIsMTAgKzM1NDIyLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXHRva2VuaXplci5mbGV4IgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcV2ViS2l0Q1NTRmlsdGVy
VmFsdWUuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwMDc0OTc5Li4xYTE1MzY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC04OTQyLDcgKzg5NDIsNiBAQAogCQk2NTY1ODE0NDA5RDEzMDQzMDAwRTYxRDcgLyogQ1NTR3Jh
bW1hci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTR3JhbW1h
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MTQ3MDlEMTMwNDMwMDBF
NjFENyAvKiBDU1NWYWx1ZUtleXdvcmRzLmdwZXJmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBD
U1NWYWx1ZUtleXdvcmRzLmdwZXJmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTY1
ODE0ODA5RDEzMDQzMDAwRTYxRDcgLyogQ1NTVmFsdWVLZXl3b3Jkcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTVmFsdWVLZXl3b3Jkcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk2NTY1ODE0QzA5RDEzMDQzMDAwRTYxRDcgLyogdG9rZW5pemVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB0b2tlbml6ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTY1ODFBQzA5RDE0RUU2MDAwRTYxRDcgLyogQ2hh
cnNldERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoYXJz
ZXREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2NTgxQUUwOUQxNEVF
NjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVl
dHNEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyQWdl
bnRTdHlsZVNoZWV0c0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA0
NTEsNyArMTA0NTAsNiBAQAogCQk5M0NBNEM5RDA5REY5M0ZBMDBERjg2NzcgLyogbWFrZXZhbHVl
cy5wbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBtYWtldmFsdWVzLnBsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0NBNEM5RjA5REY5M0ZBMDBERjg2NzcgLyogcXVpcmtzLmNzcyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBxdWlya3MuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0NBNENBMjA5REY5M0ZBMDBERjg2NzcgLyogc3ZnLmNzcyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBzdmcuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0NBNENB
MzA5REY5M0ZBMDBERjg2NzcgLyogdG9rZW5pemVyLmZsZXggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gdG9rZW5pemVyLmZsZXg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0NGMDI2
MEFGNkM1MjkwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRpb25BY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNDQ0YwNUYwQUY2Q0E3NjAwMDE4RTg5IC8qIE5hdmlnYXRpb25BY3Rpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdGlvbkFjdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDNDMTU4MEY5N0E5RDcwMDUzQzAx
MyAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01IVE1MQ2FudmFzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTU0NjMsNyArMTU0NjEsNiBAQAogCQkJCTY1NjU4MUU3MDlEMTUwOEQwMDBFNjFENyAvKiBT
VkdFbGVtZW50RmFjdG9yeS5oICovLAogCQkJCTY1NjU4MUU4MDlEMTUwOEQwMDBFNjFENyAvKiBT
VkdOYW1lcy5jcHAgKi8sCiAJCQkJNjU2NTgxRTkwOUQxNTA4RDAwMEU2MUQ3IC8qIFNWR05hbWVz
LmggKi8sCi0JCQkJNjU2NTgxNEMwOUQxMzA0MzAwMEU2MUQ3IC8qIHRva2VuaXplci5jcHAgKi8s
CiAJCQkJNjU2NTgxQUUwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmgg
Ki8sCiAJCQkJNjU2NTgxQUYwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRz
RGF0YS5jcHAgKi8sCiAJCQkJMUExNDE0QjMxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRG
YW1pbHlOYW1lcy5jcHAgKi8sCkBAIC0yMDk3MSw3ICsyMDk2OCw2IEBACiAJCQkJQjIyMjdCMDIw
RDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1Byb3BlcnR5TmFtZXMuaW4gKi8sCiAJCQkJQjIyMjdC
MDMwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1N0eWxlU2VsZWN0b3IuY3BwICovLAogCQkJCUIy
MjI3QjA0MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NWYWx1ZUtleXdvcmRzLmluICovLAotCQkJ
CTkzQ0E0Q0EzMDlERjkzRkEwMERGODY3NyAvKiB0b2tlbml6ZXIuZmxleCAqLywKIAkJCQlCQzVF
QzE3NjBBNTA3RTNFMDA2MDA3RjUgLyogdmlldy1zb3VyY2UuY3NzICovLAogCQkJCTMxMDYwMzZD
MTQzMjdEMkUwMEFCRjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAgKi8sCiAJCQkJMzEw
NjAzNkQxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmggKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDA4MmE3ZTUuLjYyNzQ5OWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCkBAIC0xNzEsNiArMTcxLDIyIEBAIHN0YXRpYyBib29sIGhhc1ByZWZpeChj
b25zdCBjaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgY2hhciogcHJlZml4KQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGlubGluZSBVQ2hhciBsb3dlcmNhc2VDaGFy
YWN0ZXIoVUNoYXIgY2hyKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9y
IGNvbXBhcmluZyBhbnkgaW5wdXQgY2hhcmFjdGVyCisgICAgLy8gdG8gYSBsb3dlcmNhc2UgRW5n
bGlzaCBjaGFyYWN0ZXIuIFRoZSBpc0Nhc2VsZXNzRXF1YWwgYmVsb3cKKyAgICAvLyBzaG91bGQg
YmUgdXNlZCBmb3IgcmVndWxhciBjb21wYXJpc29uLCBidXQgc3dpdGNoIHN0YXRlbWVudHMKKyAg
ICAvLyByZXF1aXJlIGRpcmVjdCB1c2Ugb2YgdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gY2hy
IHwgMHgyMDsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciBj
c3NDaGFyYWN0ZXIsIFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICAvLyBUaGlzIGlzIGFuIG92ZXJs
b2FkZWQgZnVuY3Rpb24sIHRoaXMgaW5zdGFuY2UgY2hlY2tzIGNoYXJhY3RlcnMuCisgICAgQVNT
RVJUKGNoYXJhY3RlciA+PSAnYScgJiYgY2hhcmFjdGVyIDw9ICd6Jyk7CisgICAgcmV0dXJuIExJ
S0VMWShsb3dlcmNhc2VDaGFyYWN0ZXIoY3NzQ2hhcmFjdGVyKSA9PSBjaGFyYWN0ZXIpOworfQor
CiBDU1NQYXJzZXI6OkNTU1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgOiBtX3N0cmlj
dChzdHJpY3RQYXJzaW5nKQogICAgICwgbV9pbXBvcnRhbnQoZmFsc2UpCkBAIC0xOTMsOCArMjA5
LDEwIEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICAsIG1f
cHJvcGVydHlSYW5nZShVSU5UX01BWCwgVUlOVF9NQVgpCiAgICAgLCBtX3J1bGVSYW5nZU1hcCgw
KQogICAgICwgbV9jdXJyZW50UnVsZURhdGEoMCkKKyAgICAsIG1fcGFyc2luZ01vZGUoTm9ybWFs
TW9kZSkKKyAgICAsIG1fZGF0YVN0YXJ0KDApCiAgICAgLCBtX2RhdGEoMCkKLSAgICAsIHl5X3N0
YXJ0KDEpCisgICAgLCBtX3Rva2VuKDApCiAgICAgLCBtX2xpbmVOdW1iZXIoMCkKICAgICAsIG1f
bGFzdFNlbGVjdG9yTGluZU51bWJlcigwKQogICAgICwgbV9hbGxvd0ltcG9ydFJ1bGVzKHRydWUp
CkBAIC0yMTMsNyArMjMxLDcgQEAgQ1NTUGFyc2VyOjp+Q1NTUGFyc2VyKCkKIAogICAgIGRlbGV0
ZSBtX3ZhbHVlTGlzdDsKIAotICAgIGZhc3RGcmVlKG1fZGF0YSk7CisgICAgZmFzdEZyZWUobV9k
YXRhU3RhcnQpOwogCiAgICAgZmFzdERlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nU2VsZWN0b3Jz
KTsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9mbG9hdGluZ1NlbGVjdG9yVmVjdG9ycyk7CkBAIC0y
NDAsMjcgKzI1OCwyMyBAQCB2b2lkIENTU1BhcnNlclN0cmluZzo6bG93ZXIoKQogCiB2b2lkIENT
U1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgY2hhciogc3VmZml4KQogewotICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCkgKyBzdHJsZW4ocHJlZml4KSArIHN0cmxlbihzdWZmaXgpICsgMjsKKyAgICBpbnQgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aCgpICsgc3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3VmZml4KSAr
IDE7CiAKLSAgICBmYXN0RnJlZShtX2RhdGEpOwotICAgIG1fZGF0YSA9IHN0YXRpY19jYXN0PFVD
aGFyKj4oZmFzdE1hbGxvYyhsZW5ndGggKiBzaXplb2YoVUNoYXIpKSk7CisgICAgZmFzdEZyZWUo
bV9kYXRhU3RhcnQpOworICAgIG1fZGF0YVN0YXJ0ID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0
TWFsbG9jKGxlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RybGVuKHByZWZpeCk7IGkrKykKLSAgICAgICAgbV9kYXRhW2ldID0gcHJlZml4W2ld
OworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHByZWZpeFtpXTsKIAotICAgIG1lbWNweShtX2Rh
dGEgKyBzdHJsZW4ocHJlZml4KSwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KG1fZGF0YVN0YXJ0ICsgc3RybGVuKHByZWZp
eCksIHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikp
OwogCiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdHJsZW4ocHJlZml4KSArIHN0cmluZy5sZW5ndGgo
KTsKICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN0cmxlbihzdWZmaXgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0gICAgICAgIG1fZGF0YVtpXSA9IHN1
ZmZpeFtpIC0gc3RhcnRdOworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHN1ZmZpeFtpIC0gc3Rh
cnRdOwogCi0gICAgbV9kYXRhW2xlbmd0aCAtIDFdID0gMDsKLSAgICBtX2RhdGFbbGVuZ3RoIC0g
Ml0gPSAwOworICAgIG1fZGF0YVN0YXJ0W2xlbmd0aCAtIDFdID0gMDsKIAotICAgIHl5X2hvbGRf
Y2hhciA9IDA7Ci0gICAgeXlsZW5nID0gMDsKLSAgICB5eXRleHQgPSB5eV9jX2J1Zl9wID0gbV9k
YXRhOwotICAgIHl5X2hvbGRfY2hhciA9ICp5eV9jX2J1Zl9wOworICAgIG1fZGF0YSA9IG1fdG9r
ZW5TdGFydCA9IG1fZGF0YVN0YXJ0OwogICAgIHJlc2V0UnVsZUJvZHlNYXJrcygpOwogfQogCkBA
IC00MjAsNyArNDM0LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKLSAgICBpZiAobGVuZ3RoID4gMiAmJiAoY2hhcmFjdGVy
c1tsZW5ndGggLSAyXSB8IDB4MjApID09ICdwJyAmJiAoY2hhcmFjdGVyc1tsZW5ndGggLSAxXSB8
IDB4MjApID09ICd4JykgeworICAgIGlmIChsZW5ndGggPiAyICYmIGlzQ2FzZWxlc3NFcXVhbChj
aGFyYWN0ZXJzW2xlbmd0aCAtIDJdLCAncCcpICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJz
W2xlbmd0aCAtIDFdLCAneCcpKSB7CiAgICAgICAgIGxlbmd0aCAtPSAyOwogICAgICAgICB1bml0
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDsKICAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDEg
JiYgY2hhcmFjdGVyc1tsZW5ndGggLSAxXSA9PSAnJScpIHsKQEAgLTQ3NDksMTAgKzQ3NjMsMTAg
QEAgc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0JBKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgaWYgKGxlbmd0aCA8IDUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gY2hhcmFjdGVyc1s0XSA9PSAnKCcKLSAgICAgICAgJiYgKGNoYXJh
Y3RlcnNbMF0gfCAweDIwKSA9PSAncicKLSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMV0gfCAweDIw
KSA9PSAnZycKLSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMl0gfCAweDIwKSA9PSAnYicKLSAgICAg
ICAgJiYgKGNoYXJhY3RlcnNbM10gfCAweDIwKSA9PSAnYSc7CisgICAgICAgICYmIGlzQ2FzZWxl
c3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAncicpCisgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChj
aGFyYWN0ZXJzWzFdLCAnZycpCisgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJz
WzJdLCAnYicpCisgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzNdLCAnYScp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQihjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQpAQCAtNDc2MCw5ICs0Nzc0LDkgQEAgc3RhdGljIGlubGlu
ZSBib29sIG1pZ2h0QmVSR0IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKICAgICBpZiAobGVuZ3RoIDwgNCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biBjaGFyYWN0ZXJzWzNdID09ICcoJwotICAgICAgICAmJiAoY2hhcmFjdGVyc1swXSB8IDB4MjAp
ID09ICdyJwotICAgICAgICAmJiAoY2hhcmFjdGVyc1sxXSB8IDB4MjApID09ICdnJwotICAgICAg
ICAmJiAoY2hhcmFjdGVyc1syXSB8IDB4MjApID09ICdiJzsKKyAgICAgICAgJiYgaXNDYXNlbGVz
c0VxdWFsKGNoYXJhY3RlcnNbMF0sICdyJykKKyAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKGNo
YXJhY3RlcnNbMV0sICdnJykKKyAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNb
Ml0sICdiJyk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyAm
bmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQpAQCAtNzE5OCwyMzYgKzcyMTIsMTIwNSBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmVhdHVyZVNldHRpbmdzKGJvb2wgaW1wb3J0YW50
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgeXllcnJvcihjb25z
dCBjaGFyKikgeyByZXR1cm4gMTsgfQotCiAjZGVmaW5lIEVORF9UT0tFTiAwCiAKICNpbmNsdWRl
ICJDU1NHcmFtbWFyLmgiCiAKLWludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxXaXRob3V0
VHlwZSkKK2VudW0gQ2hhcmFjdGVyVHlwZSB7CisgICAgLy8gVHlwZXMgZm9yIHRoZSBtYWluIHN3
aXRjaC4KKworICAgIC8vIFRoZSBmaXJzdCA0IHR5cGVzIG11c3QgYmUgZ3JvdXBlZCB0b2dldGhl
ciwgYXMgdGhleQorICAgIC8vIHJlcHJlc2VudCB0aGUgYWxsb3dlZCBjaGFycyBpbiBhbiBpZGVu
dGlmaWVyLgorICAgIENoYXJhY3RlckNhc2VsZXNzVSwKKyAgICBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisgICAgQ2hhcmFjdGVyTnVtYmVyLAorICAgIENoYXJhY3RlckRhc2gsCisKKyAgICBD
aGFyYWN0ZXJPdGhlciwKKyAgICBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorICAgIENoYXJhY3RlckVu
ZE1lZGlhUXVlcnksCisgICAgQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCisgICAgQ2hhcmFjdGVyUXVv
dGUsCisgICAgQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrLAorICAgIENoYXJhY3Rlckhhc2htYXJr
LAorICAgIENoYXJhY3RlckRvbGxhciwKKyAgICBDaGFyYWN0ZXJBc3RlcmlzaywKKyAgICBDaGFy
YWN0ZXJQbHVzLAorICAgIENoYXJhY3RlckRvdCwKKyAgICBDaGFyYWN0ZXJTbGFzaCwKKyAgICBD
aGFyYWN0ZXJMZXNzLAorICAgIENoYXJhY3RlckF0LAorICAgIENoYXJhY3RlckJhY2tTbGFzaCwK
KyAgICBDaGFyYWN0ZXJYb3IsCisgICAgQ2hhcmFjdGVyVmVydGljYWxCYXIsCisgICAgQ2hhcmFj
dGVyVGlsZGUsCit9OworCisvLyAxMjggQVNDSUkgY29kZXMKK3N0YXRpYyBjb25zdCBDaGFyYWN0
ZXJUeXBlIHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbMTI4XSA9IHsKKy8qICAgMCAtIE51bGwgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgMSAtIFN0YXJ0IG9mIEhlYWRpbmcg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgMiAtIFN0YXJ0IG9mIFRleHQgICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKKy8qICAgMyAtIEVuZCBvZiBUZXh0ICAgICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICAgNCAtIEVuZCBvZiBUcmFuc20uICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAg
NSAtIEVucXVpcnkgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgNiAtIEFja25v
d2xlZGdtZW50ICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgNyAtIEJlbGwgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAgOCAtIEJhY2sgU3BhY2UgICAgICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKKy8qICAgOSAtIEhvcml6b250YWwgVGFiICAgICAqLyBDaGFyYWN0ZXJX
aGl0ZVNwYWNlLAorLyogIDEwIC0gTGluZSBGZWVkICAgICAgICAgICovIENoYXJhY3RlcldoaXRl
U3BhY2UsCisvKiAgMTEgLSBWZXJ0aWNhbCBUYWIgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgMTIgLSBGb3JtIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAx
MyAtIENhcnJpYWdlIFJldHVybiAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDE0IC0g
U2hpZnQgT3V0ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDE1IC0gU2hpZnQgSW4g
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDE2IC0gRGF0YSBMaW5lIEVzY2FwZSAg
ICovIENoYXJhY3Rlck90aGVyLAorLyogIDE3IC0gRGV2aWNlIENvbnRyb2wgMSAgICovIENoYXJh
Y3Rlck90aGVyLAorLyogIDE4IC0gRGV2aWNlIENvbnRyb2wgMiAgICovIENoYXJhY3Rlck90aGVy
LAorLyogIDE5IC0gRGV2aWNlIENvbnRyb2wgMyAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDIw
IC0gRGV2aWNlIENvbnRyb2wgNCAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDIxIC0gTmVnYXRp
dmUgQWNrLiAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDIyIC0gU3luY2hyb25vdXMgSWRs
ZSAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDIzIC0gRW5kIG9mIFRyYW5zbWl0ICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogIDI0IC0gQ2FuY2VsICAgICAgICAgICAgICovIENoYXJhY3Rlck90
aGVyLAorLyogIDI1IC0gRW5kIG9mIE1lZGl1bSAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyog
IDI2IC0gU3Vic3RpdHV0ZSAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDI3IC0gRXNj
YXBlICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDI4IC0gRmlsZSBTZXBhcmF0
b3IgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDI5IC0gR3JvdXAgU2VwYXJhdG9yICAgICov
IENoYXJhY3Rlck90aGVyLAorLyogIDMwIC0gUmVjb3JkIFNlcGFyYXRvciAgICovIENoYXJhY3Rl
ck90aGVyLAorLyogIDMxIC0gVW5pdCBTZXBhcmF0b3IgICAgICovIENoYXJhY3Rlck90aGVyLAor
LyogIDMyIC0gU3BhY2UgICAgICAgICAgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAg
MzMgLSAhICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrLAorLyog
IDM0IC0gIiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclF1b3RlLAorLyogIDM1IC0gIyAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3Rlckhhc2htYXJrLAorLyogIDM2IC0gJCAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlckRvbGxhciwKKy8qICAzNyAtICUgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzOCAtICYgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKKy8qICAzOSAtICcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJRdW90
ZSwKKy8qICA0MCAtICggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA0
MSAtICkgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJFbmROdGhDaGlsZCwKKy8qICA0MiAt
ICogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJBc3RlcmlzaywKKy8qICA0MyAtICsgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJQbHVzLAorLyogIDQ0IC0gLCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDQ1IC0gLSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlckRhc2gsCisvKiAgNDYgLSAuICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRG90
LAorLyogIDQ3IC0gLyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclNsYXNoLAorLyogIDQ4
IC0gMCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA0OSAtIDEgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTAgLSAyICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDUxIC0gMyAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck51bWJlciwKKy8qICA1MiAtIDQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJOdW1iZXIsCisvKiAgNTMgLSA1ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVy
LAorLyogIDU0IC0gNiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1
NSAtIDcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTYgLSA4ICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU3IC0gOSAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1OCAtIDogICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKKy8qICA1OSAtIDsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJFbmRNZWRpYVF1ZXJ5LAorLyogIDYwIC0gPCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ckxlc3MsCisvKiAgNjEgLSA9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgNjIgLSA+ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNjMgLSA/
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNjQgLSBAICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyQXQsCisvKiAgNjUgLSBBICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY2IC0gQiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2NyAtIEMgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjggLSBEICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY5IC0gRSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MCAtIEYgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzEgLSBHICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDcyIC0gSCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MyAtIEkgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzQgLSBKICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc1IC0gSyAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NiAtIEwgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzcgLSBNICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc4IC0gTiAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3OSAtIE8gICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODAgLSBQICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgxIC0gUSAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MiAtIFIgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODMgLSBTICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg0IC0gVCAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NSAtIFUg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJDYXNlbGVzc1UsCisvKiAgODYgLSBWICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg3IC0gVyAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4OCAtIFggICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODkgLSBZICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDkwIC0gWiAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5MSAtIFsg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA5MiAtIFwgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJCYWNrU2xhc2gsCisvKiAgOTMgLSBdICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgOTQgLSBeICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyWG9yLAorLyogIDk1IC0gXyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qICA5NiAtIGAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICA5NyAtIGEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCisvKiAgOTggLSBiICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogIDk5IC0gYyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qIDEwMCAtIGQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAxMDEgLSBlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogMTAyIC0gZiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qIDEwMyAtIGcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAxMDQgLSBoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogMTA1IC0gaSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qIDEwNiAtIGogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAxMDcgLSBrICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogMTA4IC0gbCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDEwOSAtIG0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMTAgLSBuICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogMTExIC0gbyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qIDExMiAtIHAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTMgLSBxICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE0IC0gciAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExNSAtIHMgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTYgLSB0ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE3IC0gdSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlckNhc2VsZXNzVSwKKy8qIDExOCAtIHYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTkgLSB3ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogMTIwIC0geCAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEyMSAtIHkgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMjIgLSB6ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTIzIC0geyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlckVuZE1lZGlhUXVlcnksCisvKiAxMjQgLSB8ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyVmVydGljYWxCYXIsCisvKiAxMjUgLSB9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAxMjYgLSB+ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyVGlsZGUs
CisvKiAxMjcgLSBEZWxldGUgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCit9OworCisv
LyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIENTUyB0b2tlbml6ZXIuCisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc0NTU0xldHRlcihVQ2hhciBjaHIpCiB7Ci0gICAgWVlTVFlQRSogeXlsdmFsID0g
c3RhdGljX2Nhc3Q8WVlTVFlQRSo+KHl5bHZhbFdpdGhvdXRUeXBlKTsKLSAgICBpbnQgbGVuZ3Ro
OworICAgIHJldHVybiBjaHIgPj0gMTI4IHx8IHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbY2hyXSA8
PSBDaGFyYWN0ZXJEYXNoOworfQogCi0gICAgbGV4KCk7CitzdGF0aWMgaW5saW5lIGJvb2wgaXND
U1NFc2NhcGUoVUNoYXIgY2hyKQoreworICAgIHJldHVybiBjaHIgPj0gJyAnICYmIGNociAhPSAx
Mjc7Cit9CiAKLSAgICBVQ2hhciogdCA9IHRleHQoJmxlbmd0aCk7CitzdGF0aWMgaW5saW5lIGJv
b2wgaXNVUklMZXR0ZXIoVUNoYXIgY2hyKQoreworICAgIHJldHVybiAoY2hyID49ICcqJyAmJiBj
aHIgIT0gMTI3KSB8fCAoY2hyID49ICcjJyAmJiBjaHIgPD0gJyYnKSB8fCBjaHIgPT0gJyEnOwor
fQogCi0gICAgc3dpdGNoICh0b2tlbigpKSB7Ci0gICAgY2FzZSBXSElURVNQQUNFOgotICAgIGNh
c2UgU0dNTF9DRDoKLSAgICBjYXNlIElOQ0xVREVTOgotICAgIGNhc2UgREFTSE1BVENIOgotICAg
ICAgICBicmVhazsKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0lkZW50aWZpZXJTdGFydEFmdGVyRGFz
aChVQ2hhciogZGF0YSkKK3sKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGRhdGFbMF0pIHx8IGRh
dGFbMF0gPT0gJ18nIHx8IGRhdGFbMF0gPj0gMTI4CisgICAgICAgIHx8IChkYXRhWzBdID09ICdc
XCcgJiYgaXNDU1NFc2NhcGUoZGF0YVsxXSkpOworfQogCi0gICAgY2FzZSBVUkk6Ci0gICAgY2Fz
ZSBTVFJJTkc6Ci0gICAgY2FzZSBJREVOVDoKLSAgICBjYXNlIE5USDoKLSAgICBjYXNlIEhFWDoK
LSAgICBjYXNlIElEU0VMOgotICAgIGNhc2UgRElNRU46Ci0gICAgY2FzZSBVTklDT0RFUkFOR0U6
Ci0gICAgY2FzZSBGVU5DVElPTjoKLSAgICBjYXNlIEFOWUZVTkNUSU9OOgotICAgIGNhc2UgTk9U
RlVOQ1RJT046Ci0gICAgY2FzZSBDQUxDRlVOQ1RJT046Ci0gICAgY2FzZSBNSU5GVU5DVElPTjoK
LSAgICBjYXNlIE1BWEZVTkNUSU9OOgotICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJz
ID0gdDsKLSAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgSU1QT1JUX1NZTToKLSAgICBjYXNlIFBBR0VfU1lNOgotICAgIGNh
c2UgTUVESUFfU1lNOgotICAgIGNhc2UgRk9OVF9GQUNFX1NZTToKLSAgICBjYXNlIENIQVJTRVRf
U1lNOgotICAgIGNhc2UgTkFNRVNQQUNFX1NZTToKLSAgICBjYXNlIFdFQktJVF9LRVlGUkFNRVNf
U1lNOgotCi0gICAgY2FzZSBJTVBPUlRBTlRfU1lNOgotICAgICAgICBicmVhazsKLQotICAgIGNh
c2UgUUVNUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBHUkFEUzoKLSAgICBjYXNlIFRV
Uk5TOgotICAgICAgICBsZW5ndGgtLTsKLSAgICBjYXNlIERFR1M6Ci0gICAgY2FzZSBSQURTOgot
ICAgIGNhc2UgS0hFUlRaOgotICAgIGNhc2UgUkVNUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAg
Y2FzZSBNU0VDUzoKLSAgICBjYXNlIEhFUlRaOgotICAgIGNhc2UgRU1TOgotICAgIGNhc2UgRVhT
OgotICAgIGNhc2UgUFhTOgotICAgIGNhc2UgQ01TOgotICAgIGNhc2UgTU1TOgotICAgIGNhc2Ug
SU5TOgotICAgIGNhc2UgUFRTOgotICAgIGNhc2UgUENTOgotICAgICAgICBsZW5ndGgtLTsKLSAg
ICBjYXNlIFNFQ1M6Ci0gICAgY2FzZSBQRVJDRU5UQUdFOgotICAgICAgICBsZW5ndGgtLTsKLSAg
ICBjYXNlIEZMT0FUVE9LRU46Ci0gICAgY2FzZSBJTlRFR0VSOgotICAgICAgICB5eWx2YWwtPm51
bWJlciA9IGNoYXJhY3RlcnNUb0RvdWJsZSh0LCBsZW5ndGgpOwotICAgICAgICBicmVhazsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0Nhc2VsZXNzRXF1YWwoVUNoYXIqIGNzc1N0cmluZywgY29uc3Qg
Y2hhciogY29uc3RhbnRTdHJpbmcpCit7CisgICAgLy8gQ29tcGFyZSBhbiBVQ2hhciBtZW1vcnkg
ZGF0YSB3aXRoIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAvLyBUaGlzIGlzIGFuIG92
ZXJsb2FkZWQgZnVuY3Rpb24sIHRoaXMgaW5zdGFuY2UgY2hlY2tzIHN0cmluZ3MuCisgICAgLy8g
VGhlIHR3byBmdW5jdGlvbnMgY2Fubm90IGJlIGdyb3VwZWQgdG9nZXRoZXIsIHNpbmNlIHRoaXMg
b25lIGRlcGVuZHMKKyAgICAvLyBvbiBpc0NTU0xldHRlciwgd2hpbGUgdGhlIG90aGVyIGlzIHVz
ZWQgaW4gb3RoZXIgcGxhY2VzLgorICAgIGRvIHsKKyAgICAgICAgLy8gVGhlIGlucHV0IG11c3Qg
YmUgcGFydCBvZiBhbiBpZGVudGlmaWVyIGlmIGNvbnN0YW50Q2hhciBvciBjb25zdFN0cmluZwor
ICAgICAgICAvLyBjb250YWlucyAnLScuIE90aGVyd2lzZSBsb3dlcmNhc2VDaGFyYWN0ZXIoJ1xy
Jykgd291bGQgYmUgZXF1YWwgdG8gJy0nLgorICAgICAgICBBU1NFUlQoKCpjb25zdGFudFN0cmlu
ZyA+PSAnYScgJiYgKmNvbnN0YW50U3RyaW5nIDw9ICd6JykgfHwgKmNvbnN0YW50U3RyaW5nID09
ICctJyk7CisgICAgICAgIEFTU0VSVCgqY29uc3RhbnRTdHJpbmcgIT0gJy0nIHx8IGlzQ1NTTGV0
dGVyKCpjc3NTdHJpbmcpKTsKKyAgICAgICAgaWYgKGxvd2VyY2FzZUNoYXJhY3RlcigqY3NzU3Ry
aW5nKyspICE9ICgqY29uc3RhbnRTdHJpbmcrKykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfSB3aGlsZSAoKmNvbnN0YW50U3RyaW5nKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworc3RhdGljIFVDaGFyKiBjaGVja0VzY2FwZShV
Q2hhciogZGF0YSkKK3sKKyAgICBBU1NFUlQoKmRhdGEgPT0gJ1xcJyk7CisKKyAgICArK2RhdGE7
CisgICAgaWYgKCFpc0NTU0VzY2FwZSgqZGF0YSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKGlzQVNDSUlIZXhEaWdpdCgqZGF0YSkpIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IDY7CisK
KyAgICAgICAgZG8geworICAgICAgICAgICAgKytkYXRhOworICAgICAgICB9IHdoaWxlIChpc0FT
Q0lJSGV4RGlnaXQoKmRhdGEpICYmIC0tbGVuZ3RoKTsKKworICAgICAgICAvLyBPcHRpb25hbCBz
cGFjZSBhZnRlciB0aGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAgICBpZiAoaXNIVE1MU3BhY2Uo
KmRhdGEpKQorICAgICAgICAgICAgKytkYXRhOworICAgICAgICByZXR1cm4gZGF0YTsKICAgICB9
CisgICAgcmV0dXJuIGRhdGEgKyAxOworfQogCi0gICAgcmV0dXJuIHRva2VuKCk7CitzdGF0aWMg
aW5saW5lIFVDaGFyKiBza2lwV2hpdGVTcGFjZXMoVUNoYXIqIGRhdGEpCit7CisgICAgd2hpbGUg
KFVOTElLRUxZKCpkYXRhIDw9ICcgJyAmJiAodHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1sqZGF0YV0g
PT0gQ2hhcmFjdGVyV2hpdGVTcGFjZSkpKQorICAgICAgICArK2RhdGE7CisgICAgcmV0dXJuIGRh
dGE7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpyZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBz
dHIsIGludCBsZW4pCi17Ci0gICAgU3RyaW5nIHJ1bGVOYW1lKHN0ciwgbGVuKTsKLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAaW1wb3J0IikpCi0gICAgICAgIHl5VG9rID0g
SU1QT1JUX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBw
YWdlIikpCi0gICAgICAgIHl5VG9rID0gUEFHRV9TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UocnVsZU5hbWUsICJAbWVkaWEiKSkKLSAgICAgICAgeXlUb2sgPSBNRURJQV9TWU07
Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAZm9udC1mYWNlIikp
Ci0gICAgICAgIHl5VG9rID0gRk9OVF9GQUNFX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShydWxlTmFtZSwgIkBjaGFyc2V0IikpCi0gICAgICAgIHl5VG9rID0gQ0hBUlNFVF9T
WU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAbmFtZXNwYWNl
IikpCi0gICAgICAgIHl5VG9rID0gTkFNRVNQQUNFX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShydWxlTmFtZSwgIkAtd2Via2l0LWtleWZyYW1lcyIpKQotICAgICAgICB5eVRv
ayA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHJ1bGVOYW1lLCAiQC13ZWJraXQtbWVkaWFxdWVyeSIpKQotICAgICAgICB5eVRvayA9IFdFQktJ
VF9NRURJQVFVRVJZX1NZTTsKLX0KLQotVUNoYXIqIENTU1BhcnNlcjo6dGV4dChpbnQgKmxlbmd0
aCkKLXsKLSAgICBVQ2hhciogc3RhcnQgPSB5eXRleHQ7Ci0gICAgaW50IGwgPSB5eWxlbmc7Ci0g
ICAgc3dpdGNoICh5eVRvaykgewotICAgIGNhc2UgU1RSSU5HOgotICAgICAgICBsLS07Ci0gICAg
ICAgIC8qIG5vYnJlYWsgKi8KLSAgICBjYXNlIEhFWDoKLSAgICBjYXNlIElEU0VMOgotICAgICAg
ICBzdGFydCsrOwotICAgICAgICBsLS07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVVJJOgot
ICAgICAgICAvLyAidXJsKCJ7d317c3RyaW5nfXt3fSIpIgotICAgICAgICAvLyAidXJsKCJ7d317
dXJsfXt3fSIpIgotICAgICAgICAvLyBzdHJpcCAidXJsKCIgYW5kICIpIgotICAgICAgICBzdGFy
dCArPSA0OwotICAgICAgICBsIC09IDU7Ci0gICAgICAgIC8vIHN0cmlwIHt3fQotICAgICAgICB3
aGlsZSAobCAmJiBpc0hUTUxTcGFjZSgqc3RhcnQpKSB7Ci0gICAgICAgICAgICArK3N0YXJ0Owot
ICAgICAgICAgICAgLS1sOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChsICYmIGlzSFRNTFNw
YWNlKHN0YXJ0W2wgLSAxXSkpCi0gICAgICAgICAgICAtLWw7Ci0gICAgICAgIGlmIChsICYmICgq
c3RhcnQgPT0gJyInIHx8ICpzdGFydCA9PSAnXCcnKSkgewotICAgICAgICAgICAgQVNTRVJUKGwg
Pj0gMiAmJiBzdGFydFtsIC0gMV0gPT0gKnN0YXJ0KTsKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0g
ICAgICAgICAgICBsIC09IDI7CisvLyBNYWluIENTUyB0b2tlbml6ZXIgZnVuY3Rpb25zLgorCitp
bmxpbmUgYm9vbCBDU1NQYXJzZXI6OmlzSWRlbnRpZmllclN0YXJ0KCkKK3sKKyAgICAvLyBDaGVj
ayB3aGV0aGVyIGFuIGlkZW50aWZpZXIgaXMgc3RhcnRlZC4KKyAgICByZXR1cm4gaXNJZGVudGlm
aWVyU3RhcnRBZnRlckRhc2goKCptX2RhdGEgIT0gJy0nKSA/IG1fZGF0YSA6IG1fZGF0YSArIDEp
OworfQorCitpbmxpbmUgVUNoYXIqIENTU1BhcnNlcjo6Y2hlY2tTdHJpbmcoVUNoYXIqIGRhdGEs
IFVDaGFyIHF1b3RlKQoreworICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXZlcnQgZXNjYXBlIHNl
cXVlbmNlcywgc3RyaW5ncworICAgIC8vIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSBwYXJzaW5n
LgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqZGF0YSA9PSBxdW90
ZSkpIHsKKyAgICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwuCisgICAg
ICAgICAgICByZXR1cm4gZGF0YSArIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZ
KCpkYXRhIDwgMTQgJiYgKCEqZGF0YSB8fCAqZGF0YSA9PSAxMCB8fCAoKmRhdGEgfCAweDEpID09
IDEzKSkpIHsKKyAgICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBmYWlsZWQgZm9yIGNo
YXJhY3RlciAwLCAxMCwgMTIgb3IgMTMuCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoTElLRUxZKGRhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICAr
K2RhdGE7CisgICAgICAgIGVsc2UgaWYgKGRhdGFbMV0gPT0gJ1xuJyB8fCBkYXRhWzFdID09ICdc
ZicpCisgICAgICAgICAgICBkYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKGRhdGFbMV0gPT0g
J1xyJykKKyAgICAgICAgICAgIGRhdGEgKz0gZGF0YVsyXSA9PSAnXG4nID8gMyA6IDI7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgZGF0YSA9IGNoZWNrRXNjYXBlKGRhdGEpOworICAgICAg
ICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwogICAgIH0KK30KIAot
ICAgIC8vIHByb2Nlc3MgZXNjYXBlcwotICAgIFVDaGFyKiBvdXQgPSBzdGFydDsKLSAgICBVQ2hh
ciogZXNjYXBlID0gMDsKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZUVzY2FwZShVQ2hhciomIHJlc3Vs
dCkKK3sKKyAgICBBU1NFUlQoKm1fZGF0YSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKG1fZGF0YVsx
XSkpOwogCi0gICAgYm9vbCBzYXdFc2NhcGUgPSBmYWxzZTsKKyAgICArK21fZGF0YTsKKyAgICBp
ZiAoaXNBU0NJSUhleERpZ2l0KCptX2RhdGEpKSB7CisgICAgICAgIHVuc2lnbmVkIHVuaWNvZGUg
PSAwOworICAgICAgICBpbnQgbGVuZ3RoID0gNjsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bDsgaSsrKSB7Ci0gICAgICAgIFVDaGFyKiBjdXJyZW50ID0gc3RhcnQgKyBpOwotICAgICAgICBp
ZiAoZXNjYXBlID09IGN1cnJlbnQgLSAxKSB7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUhleERp
Z2l0KCpjdXJyZW50KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlm
ICh5eVRvayA9PSBTVFJJTkcgJiYKLSAgICAgICAgICAgICAgICAgKCpjdXJyZW50ID09ICdcbicg
fHwgKmN1cnJlbnQgPT0gJ1xyJyB8fCAqY3VycmVudCA9PSAnXGYnKSkgewotICAgICAgICAgICAg
ICAgIC8vICMjIyBoYW5kbGUgXHJcbiBjYXNlCi0gICAgICAgICAgICAgICAgaWYgKCpjdXJyZW50
ICE9ICdccicpCi0gICAgICAgICAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpbiBhbGwgb3RoZXIg
Y2FzZXMgY29weSB0aGUgY2hhciB0byBvdXRwdXQKLSAgICAgICAgICAgIC8vICMjIwotICAgICAg
ICAgICAgKm91dCsrID0gKmN1cnJlbnQ7Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVzY2FwZSA9PSBjdXJyZW50
IC0gMiAmJiB5eVRvayA9PSBTVFJJTkcgJiYKLSAgICAgICAgICAgICAqKGN1cnJlbnQtMSkgPT0g
J1xyJyAmJiAqY3VycmVudCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHVuaWNvZGUgPSAo
dW5pY29kZSA8PCA0KSArIHRvQVNDSUlIZXhWYWx1ZSgqbV9kYXRhKyspOworICAgICAgICB9IHdo
aWxlICgtLWxlbmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQoKm1fZGF0YSkpOworCisgICAgICAgIC8v
IENoYXJhY3RlcnMgYWJvdmUgMHhmZmZmIGFyZSBub3QgaGFuZGxlZC4KKyAgICAgICAgaWYgKHVu
aWNvZGUgPiAweGZmZmYpCisgICAgICAgICAgICB1bmljb2RlID0gMHhmZmZkOworCisgICAgICAg
IC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBlc2NhcGUgc2VxdWVuY2UuCisgICAgICAgIGlm
IChpc0hUTUxTcGFjZSgqbV9kYXRhKSkKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAq
cmVzdWx0ID0gdW5pY29kZTsKKyAgICB9IGVsc2UKKyAgICAgICAgKnJlc3VsdCA9ICptX2RhdGEr
KzsKKyAgICArK3Jlc3VsdDsKK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUlkZW50
aWZpZXIoVUNoYXIqJiByZXN1bHQpCit7CisgICAgLy8gSWYgYSB2YWxpZCBpZGVudGlmaWVyIHN0
YXJ0IGlzIGZvdW5kLCB3ZSBjYW4gc2FmZWx5CisgICAgLy8gcGFyc2UgdGhlIGlkZW50aWZpZXIg
dW50aWwgdGhlIG5leHQgaW52YWxpZCBjaGFyYWN0ZXIuCisgICAgQVNTRVJUKGlzSWRlbnRpZmll
clN0YXJ0KCkpOworICAgIGJvb2wgaGFzRXNjYXBlID0gZmFsc2U7CisgICAgZG8geworICAgICAg
ICBpZiAoTElLRUxZKCptX2RhdGEgIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAq
bV9kYXRhKys7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaGFzRXNjYXBlID0gdHJ1ZTsK
KyAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KGVzY2FwZSA+IGN1cnJlbnQgLSA3ICYmIGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVzY2FwZSkgewotICAgICAgICAgICAgLy8g
YWRkIGVzY2FwZWQgY2hhcgotICAgICAgICAgICAgdW5zaWduZWQgdWMgPSAwOwotICAgICAgICAg
ICAgZXNjYXBlKys7Ci0gICAgICAgICAgICB3aGlsZSAoZXNjYXBlIDwgY3VycmVudCkgewotICAg
ICAgICAgICAgICAgIHVjICo9IDE2OwotICAgICAgICAgICAgICAgIHVjICs9IHRvQVNDSUlIZXhW
YWx1ZSgqZXNjYXBlKTsKLSAgICAgICAgICAgICAgICBlc2NhcGUrKzsKKyAgICB9IHdoaWxlIChp
c0NTU0xldHRlcihtX2RhdGFbMF0pIHx8IChtX2RhdGFbMF0gPT0gJ1xcJyAmJiBpc0NTU0VzY2Fw
ZShtX2RhdGFbMV0pKSk7CisgICAgcmV0dXJuIGhhc0VzY2FwZTsKK30KKworaW5saW5lIHZvaWQg
Q1NTUGFyc2VyOjpwYXJzZVN0cmluZyhVQ2hhciomIHJlc3VsdCwgVUNoYXIgcXVvdGUpCit7Cisg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCptX2RhdGEgPT0gcXVvdGUp
KSB7CisgICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBkb25lLgorICAgICAgICAgICAg
KyttX2RhdGE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KCptX2RhdGEgPj0gMTQgfHwgKCptX2RhdGEgPD0gOSAmJiAqbV9kYXRhKSB8fCAqbV9kYXRhID09
IDExKTsKKworICAgICAgICBpZiAoTElLRUxZKG1fZGF0YVswXSAhPSAnXFwnKSkKKyAgICAgICAg
ICAgICpyZXN1bHQrKyA9ICptX2RhdGErKzsKKyAgICAgICAgZWxzZSBpZiAobV9kYXRhWzFdID09
ICdcbicgfHwgbV9kYXRhWzFdID09ICdcZicpCisgICAgICAgICAgICBtX2RhdGEgKz0gMjsKKyAg
ICAgICAgZWxzZSBpZiAobV9kYXRhWzFdID09ICdccicpCisgICAgICAgICAgICBtX2RhdGEgKz0g
bV9kYXRhWzJdID09ICdcbicgPyAzIDogMjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFy
c2VFc2NhcGUocmVzdWx0KTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6cGFy
c2VVUkkoVUNoYXIqJiBzdGFydCwgVUNoYXIqJiByZXN1bHQpCit7CisgICAgVUNoYXIqIHVyaVN0
YXJ0ID0gc2tpcFdoaXRlU3BhY2VzKG1fZGF0YSk7CisKKyAgICBpZiAoKnVyaVN0YXJ0ID09ICci
JyB8fCAqdXJpU3RhcnQgPT0gJ1wnJykgeworICAgICAgICBVQ2hhciBxdW90ZSA9ICp1cmlTdGFy
dDsKKyAgICAgICAgKyt1cmlTdGFydDsKKworICAgICAgICBVQ2hhciogc3RyaW5nRW5kID0gY2hl
Y2tTdHJpbmcodXJpU3RhcnQsIHF1b3RlKTsKKyAgICAgICAgaWYgKCFzdHJpbmdFbmQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIHN0cmluZ0VuZCA9IHNraXBXaGl0ZVNwYWNlcyhzdHJp
bmdFbmQpOworICAgICAgICBpZiAoKnN0cmluZ0VuZCAhPSAnKScpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgc3RhcnQgPSByZXN1bHQgPSBtX2RhdGEgPSB1cmlTdGFydDsKKyAgICAg
ICAgcGFyc2VTdHJpbmcocmVzdWx0LCBxdW90ZSk7CisKKyAgICAgICAgbV9kYXRhID0gc3RyaW5n
RW5kICsgMTsKKyAgICAgICAgbV90b2tlbiA9IFVSSTsKKyAgICB9IGVsc2UgeworICAgICAgICBV
Q2hhciogc3RyaW5nRW5kID0gdXJpU3RhcnQ7CisKKyAgICAgICAgd2hpbGUgKGlzVVJJTGV0dGVy
KCpzdHJpbmdFbmQpKSB7CisgICAgICAgICAgICBpZiAoKnN0cmluZ0VuZCAhPSAnXFwnKQorICAg
ICAgICAgICAgICAgICsrc3RyaW5nRW5kOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgc3RyaW5nRW5kID0gY2hlY2tFc2NhcGUoc3RyaW5nRW5kKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXN0cmluZ0VuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gY2FuJ3QgaGFuZGxlIGNoYXJzIG91dHNpZGUgdWNzMgotICAg
ICAgICAgICAgaWYgKHVjID4gMHhmZmZmKQotICAgICAgICAgICAgICAgIHVjID0gMHhmZmZkOwot
ICAgICAgICAgICAgKm91dCsrID0gdWM7Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAg
ICAgICAgaWYgKGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWVzY2FwZSAmJiAqY3VycmVudCA9PSAnXFwnKSB7
Ci0gICAgICAgICAgICBlc2NhcGUgPSBjdXJyZW50OwotICAgICAgICAgICAgc2F3RXNjYXBlID0g
dHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHN0cmluZ0VuZCA9IHNraXBX
aGl0ZVNwYWNlcyhzdHJpbmdFbmQpOworICAgICAgICBpZiAoKnN0cmluZ0VuZCAhPSAnKScpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3RhcnQgPSByZXN1bHQgPSBtX2RhdGEgPSB1
cmlTdGFydDsKKyAgICAgICAgd2hpbGUgKGlzVVJJTGV0dGVyKCptX2RhdGEpKSB7CisgICAgICAg
ICAgICBpZiAoTElLRUxZKCptX2RhdGEgIT0gJ1xcJykpCisgICAgICAgICAgICAgICAgKnJlc3Vs
dCsrID0gKm1fZGF0YSsrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhcnNl
RXNjYXBlKHJlc3VsdCk7CiAgICAgICAgIH0KLSAgICAgICAgKm91dCsrID0gKmN1cnJlbnQ7CisK
KyAgICAgICAgbV9kYXRhID0gc3RyaW5nRW5kICsgMTsKKyAgICAgICAgbV90b2tlbiA9IFVSSTsK
KyAgICB9Cit9CisKK2lubGluZSBib29sIENTU1BhcnNlcjo6cGFyc2VVbmljb2RlUmFuZ2UoKQor
eworICAgIFVDaGFyKiBkYXRhID0gbV9kYXRhICsgMTsKKyAgICBpbnQgbGVuZ3RoID0gNjsKKyAg
ICBBU1NFUlQoKm1fZGF0YSA9PSAnKycpOworCisgICAgd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgq
ZGF0YSkgJiYgbGVuZ3RoKSB7CisgICAgICAgICsrZGF0YTsKKyAgICAgICAgLS1sZW5ndGg7Cisg
ICAgfQorCisgICAgaWYgKGxlbmd0aCAmJiAqZGF0YSA9PSAnPycpIHsKKyAgICAgICAgLy8gQXQg
bW9zdCA1IGhleCBkaWdpdCBmb2xsb3dlZCBieSBhIHF1ZXN0aW9uIG1hcmsuCisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICsrZGF0YTsKKyAgICAgICAgICAgIC0tbGVuZ3RoOworICAgICAgICB9
IHdoaWxlICgqZGF0YSA9PSAnPycgJiYgbGVuZ3RoKTsKKyAgICAgICAgbV9kYXRhID0gZGF0YTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCA8IDYpIHsKKyAg
ICAgICAgLy8gQXQgbGVhc3Qgb25lIGhleCBkaWdpdC4KKyAgICAgICAgaWYgKGRhdGFbMF0gPT0g
Jy0nICYmIGlzQVNDSUlIZXhEaWdpdChkYXRhWzFdKSkgeworICAgICAgICAgICAgLy8gRm9sbG93
ZWQgYnkgYSBkYXNoIGFuZCBhIGhleCBkaWdpdC4KKyAgICAgICAgICAgICsrZGF0YTsKKyAgICAg
ICAgICAgIGxlbmd0aCA9IDY7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKytk
YXRhOworICAgICAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJSUhleERpZ2l0KCpk
YXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBh
cnNlTnRoQ2hpbGQoKQoreworICAgIFVDaGFyKiBkYXRhID0gbV9kYXRhOworCisgICAgd2hpbGUg
KGlzQVNDSUlEaWdpdCgqZGF0YSkpCisgICAgICAgICsrZGF0YTsKKyAgICBpZiAoaXNDYXNlbGVz
c0VxdWFsKCpkYXRhLCAnbicpKSB7CisgICAgICAgIG1fZGF0YSA9IGRhdGEgKyAxOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENTU1Bh
cnNlcjo6cGFyc2VOdGhDaGlsZEV4dHJhKCkKK3sKKyAgICBVQ2hhciogZGF0YSA9IHNraXBXaGl0
ZVNwYWNlcyhtX2RhdGEpOworICAgIGlmICgqZGF0YSAhPSAnKycgJiYgKmRhdGEgIT0gJy0nKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkYXRhID0gc2tpcFdoaXRlU3BhY2VzKGRhdGEg
KyAxKTsKKyAgICBpZiAoIWlzQVNDSUlEaWdpdCgqZGF0YSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGRvIHsKKyAgICAgICAgKytkYXRhOworICAgIH0gd2hpbGUgKGlzQVNDSUlEaWdp
dCgqZGF0YSkpOworCisgICAgbV9kYXRhID0gZGF0YTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
aW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3RGdW5jdGlvblRva2VuKGludCBsZW5ndGgpCit7
CisgICAgQVNTRVJUKGxlbmd0aCA+IDApOworICAgIFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0
OworCisgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICBjYXNlIDM6CisgICAgICAgIGlmIChpc0Nh
c2VsZXNzRXF1YWwobmFtZVswXSwgJ24nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ28n
KSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBOT1RGVU5DVElPTjsKKyAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMF0s
ICd1JykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdyJykgJiYgaXNDYXNlbGVzc0VxdWFs
KG5hbWVbMl0sICdsJykpCisgICAgICAgICAgICBtX3Rva2VuID0gVVJJOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIDk6CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50
aC1jaGlsZCIpKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50aENoaWxkTW9kZTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSAxMToKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVh
bChuYW1lLCAibnRoLW9mLXR5cGUiKSkKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhD
aGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgMTQ6CisgICAgICAgIGlmIChp
c0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50aC1sYXN0LWNoaWxkIikpCisgICAgICAgICAgICBtX3Bh
cnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIDE2
OgorICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUsICJudGgtbGFzdC1vZi10eXBlIikp
CisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAgICByZXR1
cm47CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdE1lZGlhUXVlcnlU
b2tlbihpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChtX3BhcnNpbmdNb2RlID09IE1lZGlhUXVl
cnlNb2RlKTsKKyAgICBVQ2hhciogbmFtZSA9IG1fdG9rZW5TdGFydDsKKworICAgIGlmIChsZW5n
dGggPT0gMykgeworICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICdhJykgJiYg
aXNDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICduJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWVbMl0s
ICdkJykpCisgICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfQU5EOworICAgICAgICBlbHNlIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ24nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsx
XSwgJ28nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkKKyAgICAgICAgICAgIG1f
dG9rZW4gPSBNRURJQV9OT1Q7CisgICAgfSBlbHNlIGlmIChsZW5ndGggPT0gNCkgeworICAgICAg
ICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICdvJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5h
bWVbMV0sICduJykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwg
J2wnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVszXSwgJ3knKSkKKyAgICAgICAgICAgbV90b2tl
biA9IE1FRElBX09OTFk7CiAgICAgfQotICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgLy8gYWRk
IGVzY2FwZWQgY2hhcgotICAgICAgICB1bnNpZ25lZCB1YyA9IDA7Ci0gICAgICAgIGVzY2FwZSsr
OwotICAgICAgICB3aGlsZSAoZXNjYXBlIDwgc3RhcnQrbCkgewotICAgICAgICAgICAgdWMgKj0g
MTY7Ci0gICAgICAgICAgICB1YyArPSB0b0FTQ0lJSGV4VmFsdWUoKmVzY2FwZSk7Ci0gICAgICAg
ICAgICBlc2NhcGUrKzsKK30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3ROdW1iZXJU
b2tlbihVQ2hhciogdHlwZSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7
CisKKyAgICBzd2l0Y2ggKGxvd2VyY2FzZUNoYXJhY3Rlcih0eXBlWzBdKSkgeworICAgIGNhc2Ug
J2MnOgorICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICdtJykpCisgICAgICAgICAgICBtX3Rva2VuID0gQ01TOworICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlICdkJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAzICYmIGlzQ2FzZWxlc3NFcXVhbCh0
eXBlWzFdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnZycpKQorICAgICAgICAg
ICAgbV90b2tlbiA9IERFR1M7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2UnOgorICAg
ICAgICBpZiAobGVuZ3RoID09IDIpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwo
dHlwZVsxXSwgJ20nKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRU1TOworICAgICAgICAg
ICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd4JykpCisgICAgICAgICAgICAg
ICAgbV90b2tlbiA9IEVYUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
ICdnJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA0ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFd
LCAncicpCisgICAgICAgICAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdhJykg
JiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbM10sICdkJykpCisgICAgICAgICAgICBtX3Rva2VuID0g
R1JBRFM7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2gnOgorICAgICAgICBpZiAobGVu
Z3RoID09IDIgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd6JykpCisgICAgICAgICAgICBt
X3Rva2VuID0gSEVSVFo7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2knOgorICAgICAg
ICBpZiAobGVuZ3RoID09IDIgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICduJykpCisgICAg
ICAgICAgICBtX3Rva2VuID0gSU5TOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdrJzoK
KyAgICAgICAgaWYgKGxlbmd0aCA9PSAzICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnaCcp
ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAneicpKQorICAgICAgICAgICAgbV90b2tlbiA9
IEtIRVJUWjsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnbSc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAn
bScpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBNTVM7CisgICAgICAgICAgICBlbHNlIGlm
IChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3MnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gTVNFQ1M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAncCc6Cisg
ICAgICAgIGlmIChsZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVh
bCh0eXBlWzFdLCAneCcpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQWFM7CisgICAgICAg
ICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3QnKSkKKyAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gUFRTOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFs
KHR5cGVbMV0sICdjJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFBDUzsKICAgICAgICAg
fQotICAgICAgICAvLyBjYW4ndCBoYW5kbGUgY2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgIGlm
ICh1YyA+IDB4ZmZmZikKLSAgICAgICAgICAgIHVjID0gMHhmZmZkOwotICAgICAgICAqb3V0Kysg
PSB1YzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAncic6CisgICAgICAgIGlmIChsZW5n
dGggPT0gMykgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnYScp
ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnZCcpKQorICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBSQURTOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdtJykpCisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IFJFTVM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAn
cyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBTRUNT
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICd0JzoKKyAgICAgICAgaWYgKGxlbmd0aCA9
PSA0ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAndScpCisgICAgICAgICAgICAgICAgJiYg
aXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdyJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbM10s
ICduJykpCisgICAgICAgICAgICBtX3Rva2VuID0gVFVSTlM7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICh0eXBlWzBdID09ICdfJyAmJiBsZW5ndGggPT0gNSAm
JiB0eXBlWzFdID09ICdfJyAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ3EnKQorICAgICAg
ICAgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnZScpICYmIGlzQ2FzZWxlc3NF
cXVhbCh0eXBlWzRdLCAnbScpKQorICAgICAgICAgICAgbV90b2tlbiA9IFFFTVM7CisgICAgICAg
IHJldHVybjsKICAgICB9Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0RGFzaFRv
a2VuKGludCBsZW5ndGgpCit7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisKKyAg
ICBpZiAobGVuZ3RoID09IDExKSB7CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsx
MF0sICd5JykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0LWFuIikpCisgICAg
ICAgICAgICBtX3Rva2VuID0gQU5ZRlVOQ1RJT047CisgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxl
c3NFcXVhbChuYW1lWzEwXSwgJ24nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDEsICJ3ZWJr
aXQtbWkiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNSU5GVU5DVElPTjsKKyAgICAgICAgZWxz
ZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAneCcpICYmIGlzQ2FzZWxlc3NFcXVhbChu
YW1lICsgMSwgIndlYmtpdC1tYSIpKQorICAgICAgICAgICAgbV90b2tlbiA9IE1BWEZVTkNUSU9O
OworICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEyICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsg
MSwgIndlYmtpdC1jYWxjIikpCisgICAgICAgIG1fdG9rZW4gPSBDQUxDRlVOQ1RJT047Cit9CisK
K2lubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVuZ3RoLCBib29sIGhh
c0VzY2FwZSkKK3sKKyAgICBVQ2hhciogbmFtZSA9IG1fdG9rZW5TdGFydDsKKyAgICBBU1NFUlQo
bmFtZVswXSA9PSAnQCcgJiYgbGVuZ3RoID49IDIpOworCisgICAgLy8gY2hhcnNldCwgZm9udC1m
YWNlLCBpbXBvcnQsIG1lZGlhLCBuYW1lc3BhY2UsIHBhZ2UsCisgICAgLy8gLXdlYmtpdC1rZXlm
cmFtZXMsIGFuZCAtd2Via2l0LW1lZGlhcXVlcnkgYXJlIG5vdCBhZmZlY3RlZCBieSBoYXNFc2Nh
cGUuCisgICAgc3dpdGNoIChsb3dlcmNhc2VDaGFyYWN0ZXIobmFtZVsxXSkpIHsKKyAgICBjYXNl
ICdiJzoKKyAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAgaWYg
KGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm90dG9tLWxlZnQiKSkKKyAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gQk9UVE9NTEVGVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgY2FzZSAxMzoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJv
dHRvbS1yaWdodCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01SSUdIVF9TWU07
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1jZW50ZXIiKSkKKyAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gQk9UVE9NQ0VOVEVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjYXNlIDE5OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsg
MiwgIm90dG9tLWxlZnQtY29ybmVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRP
TUxFRlRDT1JORVJfU1lNOworICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgKmxlbmd0aCA9IG91
dCAtIHN0YXJ0OworICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NF
cXVhbChuYW1lICsgMiwgIm90dG9tLXJpZ2h0LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBCT1RUT01SSUdIVENPUk5FUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChsZW5n
dGggPT0gOCAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJoYXJzZXQiKSkKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBDSEFSU0VUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAn
Zic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAib250LWZhY2UiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOworICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBJZiB3ZSBoYXZlIGFuIHVucmVjb2duaXplZCBALWtleXdv
cmQsIGFuZCBpZiB3ZSBoYW5kbGVkIGFueSBlc2NhcGVzIGF0IGFsbCwgdGhlbgotICAgIC8vIHdl
IHNob3VsZCBhdHRlbXB0IHRvIGFkanVzdCB5eVRvayB0byB0aGUgY29ycmVjdCB0eXBlLgotICAg
IGlmICh5eVRvayA9PSBBVEtFWVdPUkQgJiYgc2F3RXNjYXBlKQotICAgICAgICByZWNoZWNrQXRL
ZXl3b3JkKHN0YXJ0LCAqbGVuZ3RoKTsKKyAgICBjYXNlICdpJzoKKyAgICAgICAgaWYgKGxlbmd0
aCA9PSA3ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm1wb3J0IikpIHsKKyAgICAgICAg
ICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBJTVBPUlRfU1lNOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2wn
OgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChsZW5ndGggPT0gOSkgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1l
ICsgMiwgImVmdC10b3AiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTEVGVFRPUF9TWU07
CisgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEyKSB7CisgICAgICAgICAgICAvLyBDaGVj
a2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBv
c3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMV0s
ICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiZWZ0LW1pZGRsIikpCisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IExFRlRNSURETEVfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNDYXNlbGVzc0VxdWFsKG5hbWVbMTFdLCAnbScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsg
MiwgImVmdC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUQk9UVE9NX1NZ
TTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdtJzoKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSA2ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVkaWEiKSkgewor
ICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOworICAgICAgICAgICAg
bV90b2tlbiA9IE1FRElBX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlICduJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0Nhc2VsZXNzRXF1YWwobmFt
ZSArIDIsICJhbWVzcGFjZSIpKQorICAgICAgICAgICAgbV90b2tlbiA9IE5BTUVTUEFDRV9TWU07
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3AnOgorICAgICAgICBpZiAobGVuZ3RoID09
IDUgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiYWdlIikpCisgICAgICAgICAgICBtX3Rv
a2VuID0gUEFHRV9TWU07CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3InOgorICAgICAg
ICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChsZW5n
dGggPT0gMTApIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJp
Z2h0LXRvcCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVFRPUF9TWU07CisgICAg
ICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEzKSB7CisgICAgICAgICAgICAvLyBDaGVja2luZyB0
aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmls
ZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMl0sICdlJykg
JiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC1taWRkbCIpKQorICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBSSUdIVE1JRERMRV9TWU07CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nh
c2VsZXNzRXF1YWwobmFtZVsxMl0sICdtJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAi
aWdodC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVEJPVFRPTV9TWU07
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIHN0YXJ0OworICAgIGNh
c2UgJ3QnOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7CisgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1sZWZ0IikpCisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IFRPUExFRlRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNh
c2UgMTA6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3Atcmln
aHQiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QUklHSFRfU1lNOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVz
c0VxdWFsKG5hbWUgKyAyLCAib3AtY2VudGVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IFRPUENFTlRFUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNjoK
KyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1sZWZ0LWNvcm5l
ciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BMRUZUQ09STkVSX1NZTTsKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAgaWYgKGlzQ2Fz
ZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLXJpZ2h0LWNvcm5lciIpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBUT1BSSUdIVENPUk5FUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnLSc6CisgICAgICAgIHN3aXRjaCAo
bGVuZ3RoKSB7CisgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAm
JiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtcnVsZSIpKQorICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBXRUJLSVRfUlVMRV9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIg
Zmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAg
ICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxM10sICdzJykgJiYgaXNDYXNlbGVzc0VxdWFs
KG5hbWUgKyAyLCAid2Via2l0LWRlY2wiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VC
S0lUX0RFQ0xTX1NZTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1l
WzEzXSwgJ2UnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtdmFsdSIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfVkFMVUVfU1lNOworICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAm
JiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtcmVnaW9uIikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9SVUxFX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNDYXNlbGVz
c0VxdWFsKG5hbWUgKyAyLCAid2Via2l0LXNlbGVjdG9yIikpCisgICAgICAgICAgICAgICAgbV90
b2tlbiA9IFdFQktJVF9TRUxFQ1RPUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgY2FzZSAxODoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3
ZWJraXQta2V5ZnJhbWVzIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlG
UkFNRVNfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTk6CisgICAg
ICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Via2l0LW1lZGlhcXVlcnki
KSkgeworICAgICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX01FRElBUVVFUllfU1lNOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAg
ICBpZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQta2V5
ZnJhbWUtcnVsZSIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfS0VZRlJBTUVf
UlVMRV9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiB9CiAKLXZv
aWQgQ1NTUGFyc2VyOjpjb3VudExpbmVzKCkKK2ludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2
YWxXaXRob3V0VHlwZSkKIHsKLSAgICBmb3IgKFVDaGFyKiBjdXJyZW50ID0geXl0ZXh0OyBjdXJy
ZW50IDwgeXl0ZXh0ICsgeXlsZW5nOyArK2N1cnJlbnQpIHsKLSAgICAgICAgaWYgKCpjdXJyZW50
ID09ICdcbicpCi0gICAgICAgICAgICArK21fbGluZU51bWJlcjsKKyAgICBZWVNUWVBFKiB5eWx2
YWwgPSBzdGF0aWNfY2FzdDxZWVNUWVBFKj4oeXlsdmFsV2l0aG91dFR5cGUpOworICAgIC8vIFdy
aXRlIHBvaW50ZXIgZm9yIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICBVQ2hhciogcmVzdWx0Owor
ICAgIGJvb2wgaGFzRXNjYXBlOworCisgICAgLy8gVGhlIGlucHV0IGJ1ZmZlciBpcyB0ZXJtaW5h
dGVkIGJ5IHR3byBcMCwgc28KKyAgICAvLyBpdCBpcyBzYWZlIHRvIHJlYWQgdHdvIGNoYXJhY3Rl
cnMgYWhlYWQgYW55dGltZS4KKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBJbiBkZWJ1ZyB3ZSBj
aGVjayB3aXRoIGFuIEFTU0VSVCB0aGF0IHRoZSBsZW5ndGggaXMgPiAwIGZvciBzdHJpbmcgdHlw
ZXMuCisgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IDA7CisgICAgeXlsdmFsLT5zdHJp
bmcubGVuZ3RoID0gMDsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBpcyBub3QgYSByZWFsIGxvb3As
IGp1c3QgYWxsb3dzIHVzIHRvIGF2b2lkIGdvdG9zLgorICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIG1fdG9rZW5TdGFydCA9IHJlc3VsdCA9IG1fZGF0YTsKKyAgICAgICAgbV90b2tlbiA9ICpt
X2RhdGE7CisgICAgICAgICsrbV9kYXRhOworCisgICAgICAgIHN3aXRjaCAoKG1fdG9rZW4gPD0g
MTI3KSA/IHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbbV90b2tlbl0gOiBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQpIHsKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJDYXNlbGVzc1U6CisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoKm1fZGF0YSA9PSAnKycpKQorICAgICAgICAgICAgICAgIGlmIChwYXJz
ZVVuaWNvZGVSYW5nZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBVTklDT0RF
UkFOR0U7CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBt
X3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9
IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydC4KKworICAgICAgICBjYXNlIENoYXJhY3RlcklkZW50aWZpZXJTdGFydDoK
KyAgICAgICAgICAgIC0tbV9kYXRhOworICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVu
dGlmaWVyKHJlc3VsdCk7CisgICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisKKyAgICAgICAg
ICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAg
ICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisKKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09ICcoJykpIHsKKyAgICAgICAgICAgICAgICBt
X3Rva2VuID0gRlVOQ1RJT047CisgICAgICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCisgICAg
ICAgICAgICAgICAgICAgIGRldGVjdEZ1bmN0aW9uVG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0
KTsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICArK3Jlc3VsdDsK
KyAgICAgICAgICAgICAgICArK3l5bHZhbC0+c3RyaW5nLmxlbmd0aDsKKworICAgICAgICAgICAg
ICAgIGlmICh0b2tlbigpID09IFVSSSkgeworICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0g
RlVOQ1RJT047CisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgaXQgaXMgcmVh
bGx5IGFuIFVSSS4KKyAgICAgICAgICAgICAgICAgICAgcGFyc2VVUkkoeXlsdmFsLT5zdHJpbmcu
Y2hhcmFjdGVycywgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcu
bGVuZ3RoID0gcmVzdWx0IC0geXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVyczsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgIT0g
Tm9ybWFsTW9kZSkgJiYgIWhhc0VzY2FwZSkgeworICAgICAgICAgICAgICAgIGlmIChtX3BhcnNp
bmdNb2RlID09IE1lZGlhUXVlcnlNb2RlKQorICAgICAgICAgICAgICAgICAgICBkZXRlY3RNZWRp
YVF1ZXJ5VG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSAmJiBpc0Nhc2VsZXNzRXF1YWwobV90
b2tlblN0YXJ0WzBdLCAnbicpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgLSBt
X3Rva2VuU3RhcnQgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJu
IiBpcyBJREVOVCBidXQgIm4rMSIgaXMgTlRILgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcnNlTnRoQ2hpbGRFeHRyYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90
b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5s
ZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0IC0gbV90b2tlblN0YXJ0ID09
IDIgJiYgbV90b2tlblN0YXJ0WzFdID09ICctJykgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU3RyaW5nICJuLSIgaXMgSURFTlQgYnV0ICJuLTEiIGlzIE5USC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFNwZWN1bGF0aXZlbHkgZGVjcmVhc2UgbV9kYXRhIHRvIGRldGVjdCBhbiBu
dGgtY2hpbGQgdG9rZW4uCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtLTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZXZlcnQgdGhlIGNoYW5nZSB0byBtX2RhdGEgaWYgdW5zdWNjZXNzZnVsLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YSsrOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJEb3Q6CisgICAg
ICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChtX2RhdGFbMF0pKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIENoYXJhY3Rlck51bWJlci4KKwor
ICAgICAgICBjYXNlIENoYXJhY3Rlck51bWJlcjogeworICAgICAgICAgICAgYm9vbCBkb3RTZWVu
ID0gKG1fdG9rZW4gPT0gJy4nKTsKKworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChtX2RhdGFbMF0pKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIE9ubHkgb25lIGRvdCBpcyBhbGxvd2VkIGZvciBhIG51bWJlciwKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYW5kIGl0IG11c3QgYmUgZm9sbG93ZWQgYnkgYSBkaWdpdC4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZGF0YVswXSAhPSAnLicgfHwgZG90U2VlbiB8fCAhaXNBU0NJ
SURpZ2l0KG1fZGF0YVsxXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgZG90U2VlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpICYmICFkb3RTZWVuICYmIGlzQ2Fz
ZWxlc3NFcXVhbCgqbV9kYXRhLCAnbicpKSB7CisgICAgICAgICAgICAgICAgLy8gIlswLTldK24i
IGlzIGFsd2F5cyBhbiBOdGhDaGlsZC4KKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAg
ICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmEoKTsKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gTlRIOworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rv
a2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRh
IC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB5eWx2YWwtPm51bWJlciA9IGNoYXJhY3RlcnNUb0RvdWJsZShtX3Rva2Vu
U3RhcnQsIG1fZGF0YSAtIG1fdG9rZW5TdGFydCk7CisKKyAgICAgICAgICAgIC8vIFR5cGUgb2Yg
dGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAg
ICAgICAgICAgICAgICBVQ2hhciogdHlwZSA9IG1fZGF0YTsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX2RhdGE7CisKKyAgICAgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50aWZp
ZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAnKycpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQW55IGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYSAnKycgc2lnbiBp
cyBhbiBpbnZhbGlkIGRpbWVuc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgKyttX2RhdGE7Cisg
ICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBJTlZBTElERElNRU47CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERJTUVOOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
dGVjdE51bWJlclRva2VuKHR5cGUsIG1fZGF0YSAtIHR5cGUpOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX3Rva2VuID09IERJTUVOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGUgZGVjb2RlZCBudW1iZXIgaXMgb3ZlcndyaXR0ZW4sIGJ1dCB0aGlzIGlzIGludGVudGlvbmFs
LgorICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1f
dG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0
aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKm1fZGF0YSA9PSAnJScpIHsKKyAg
ICAgICAgICAgICAgICAvLyBBbHRob3VnaCB0aGUgQ1NTIGdyYW1tYXIgc2F5cyB7bnVtfSUgd2Ug
Zm9sbG93CisgICAgICAgICAgICAgICAgLy8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hpY2ggdXNl
cyB7bnVtfSUrLgorICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKytt
X2RhdGE7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoKm1fZGF0YSA9PSAnJScpOworICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBQRVJDRU5UQUdFOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IGRvdFNlZW4gPyBGTE9BVFRPS0VOIDogSU5URUdFUjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJEYXNo
OgorICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKG1fZGF0YSkpIHsK
KyAgICAgICAgICAgICAgICAtLW1fZGF0YTsKKyAgICAgICAgICAgICAgICBoYXNFc2NhcGUgPSBw
YXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7
CisKKyAgICAgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAnKCcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IEZVTkNUSU9OOworICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0Vz
Y2FwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdERhc2hUb2tlbihyZXN1bHQgLSBt
X3Rva2VuU3RhcnQpOworICAgICAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgKytyZXN1bHQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWSht
X3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkgJiYgIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNz
RXF1YWwobV90b2tlblN0YXJ0WzFdLCAnbicpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3RyaW5nICItbiIgaXMgSURFTlQgYnV0ICItbisxIiBpcyBOVEguCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1fZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChyZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMyAmJiBtX3Rva2VuU3RhcnRb
Ml0gPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgIi1uLSIgaXMg
SURFTlQgYnV0ICItbi0xIiBpcyBOVEguCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVj
dWxhdGl2ZWx5IGRlY3JlYXNlIG1fZGF0YSB0byBkZXRlY3QgYW4gbnRoLWNoaWxkIHRva2VuLgor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLS07CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBj
aGFuZ2UgdG8gbV9kYXRhIGlmIHVuc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2RhdGErKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmxlbmd0aCA9IHJlc3VsdCAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9kYXRhWzBdID09ICctJyAmJiBtX2RhdGFbMV0gPT0gJz4nKSB7CisgICAgICAgICAgICAg
ICAgbV9kYXRhICs9IDI7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2Rl
KSkgeworICAgICAgICAgICAgICAgIC8vICItWzAtOV0rbiIgaXMgYWx3YXlzIGFuIE50aENoaWxk
LgorICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBOVEg7CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBt
X3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9
IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3Rlck90aGVyOgorICAg
ICAgICAgICAgLy8gbV90b2tlbiBpcyBzaW1wbHkgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJXaGl0ZVNwYWNlOgorICAg
ICAgICAgICAgbV90b2tlbiA9IFdISVRFU1BBQ0U7CisgICAgICAgICAgICAvLyBNaWdodCBzdGFy
dCB3aXRoIGEgJ1xuJy4KKyAgICAgICAgICAgIC0tbV9kYXRhOworICAgICAgICAgICAgZG8gewor
ICAgICAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICdcbicpCisgICAgICAgICAgICAgICAgICAg
ICsrbV9saW5lTnVtYmVyOworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAg
fSB3aGlsZSAoKm1fZGF0YSA8PSAnICcgJiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKm1fZGF0
YV0gPT0gQ2hhcmFjdGVyV2hpdGVTcGFjZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBDaGFyYWN0ZXJFbmRNZWRpYVF1ZXJ5OgorICAgICAgICAgICAgaWYgKG1fcGFyc2lu
Z01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpCisgICAgICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9
IE5vcm1hbE1vZGU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3Rl
ckVuZE50aENoaWxkOgorICAgICAgICAgICAgaWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRN
b2RlKQorICAgICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2RlOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJRdW90ZToKKyAgICAgICAgICAg
IGlmIChjaGVja1N0cmluZyhtX2RhdGEsIG1fdG9rZW4pKSB7CisgICAgICAgICAgICAgICAgKyty
ZXN1bHQ7CisgICAgICAgICAgICAgICAgcGFyc2VTdHJpbmcocmVzdWx0LCBtX3Rva2VuKTsKKyAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gU1RSSU5HOworICAgICAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQgKyAxOworICAgICAgICAgICAgICAgIHl5
bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAtIChtX3Rva2VuU3RhcnQgKyAxKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyRXhj
bGFtYXRpb25NYXJrOiB7CisgICAgICAgICAgICBVQ2hhciogc3RhcnQgPSBza2lwV2hpdGVTcGFj
ZXMobV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwoc3RhcnQsICJpbXBv
cnRhbnQiKSkgeworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBJTVBPUlRBTlRfU1lNOworICAg
ICAgICAgICAgICAgIG1fZGF0YSA9IHN0YXJ0ICsgOTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJIYXNobWFyazog
eworICAgICAgICAgICAgVUNoYXIqIHN0YXJ0ID0gbV9kYXRhOworICAgICAgICAgICAgcmVzdWx0
ID0gbV9kYXRhOworCisgICAgICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KCptX2RhdGEpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgdmFsaWQgaGV4IG51bWJlciB0b2tlbi4K
KyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAg
ICAgICAgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqbV9kYXRhKSk7CisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IEhFWDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5j
aGFyYWN0ZXJzID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
ID0gbV9kYXRhIC0gc3RhcnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0
YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gSURTRUw7CisgICAgICAgICAgICAg
ICAgaWYgKCFwYXJzZUlkZW50aWZpZXIocmVzdWx0KSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBDaGVjayB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVtYmVy
LgorICAgICAgICAgICAgICAgICAgICBVQ2hhciogY3VycmVudCA9IHN0YXJ0OworICAgICAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gSEVYOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqY3VycmVudCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gSURTRUw7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUg
KGN1cnJlbnQgPCByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5
eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgeXlsdmFs
LT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gc3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyU2xhc2g6Cisg
ICAgICAgICAgICAvLyBJZ25vcmUgY29tbWVudHMuIFRoZXkgYXJlIG5vdCBldmVuIGNvbnNpZGVy
ZWQgYXMgd2hpdGUgc3BhY2VzLgorICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJyonKSB7Cisg
ICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICAgICAgd2hpbGUgKG1fZGF0YVsw
XSAhPSAnKicgfHwgbV9kYXRhWzFdICE9ICcvJykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bV9kYXRhWzBdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICArK21fbGluZU51bWJl
cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZGF0YVswXSA9PSAnXDAnICYmIG1fZGF0YVsx
XSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnRlcm1pbmF0ZWQgY29t
bWVudHMgYXJlIHNpbXBseSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRh
IC09IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3Rl
ckRvbGxhcjoKKyAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAg
ICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBFTkRTV0lUSDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyQXN0
ZXJpc2s6CisgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAnPScpIHsKKyAgICAgICAgICAgICAg
ICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQ09OVEFJTlM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoYXJhY3RlclBsdXM6
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUp
KSB7CisgICAgICAgICAgICAgICAgLy8gU2ltcGxlc3QgY2FzZS4gIitbMC05XSpuIiBpcyBhbHdh
eXMgTnRoQ2hpbGQuCisgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmEoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hh
cmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJp
bmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVy
TGVzczoKKyAgICAgICAgICAgIGlmIChtX2RhdGFbMF0gPT0gJyEnICYmIG1fZGF0YVsxXSA9PSAn
LScgJiYgbV9kYXRhWzJdID09ICctJykgeworICAgICAgICAgICAgICAgIG1fZGF0YSArPSAzOwor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBTR01MX0NEOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJBdDoKKyAgICAgICAgICAgIGlm
IChpc0lkZW50aWZpZXJTdGFydCgpKSB7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEFUS0VZ
V09SRDsKKyAgICAgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgICAgICAgICBoYXNFc2Nh
cGUgPSBwYXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBkZXRlY3RBdFRv
a2VuKHJlc3VsdCAtIG1fdG9rZW5TdGFydCwgaGFzRXNjYXBlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyQmFja1NsYXNoOgorICAg
ICAgICAgICAgaWYgKGlzQ1NTRXNjYXBlKCptX2RhdGEpKSB7CisgICAgICAgICAgICAgICAgLS1t
X2RhdGE7CisgICAgICAgICAgICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IElERU5UOworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5n
LmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJp
bmcubGVuZ3RoID0gcmVzdWx0IC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJYb3I6CisgICAgICAgICAgICBp
ZiAoKm1fZGF0YSA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gQkVHSU5TV0lUSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgQ2hhcmFjdGVyVmVydGljYWxCYXI6CisgICAgICAgICAg
ICBpZiAoKm1fZGF0YSA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gREFTSE1BVENIOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGFyYWN0ZXJUaWxkZToKKyAgICAgICAgICAgIGlm
ICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBJTkNMVURFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0K
KworI2lmbmRlZiBOREVCVUcKKyAgICBzd2l0Y2ggKHRva2VuKCkpIHsKKyAgICBjYXNlIFNUUklO
RzoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tlblN0
YXJ0ICsgMSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJREVOVDoKKyAgICBjYXNlIE5U
SDoKKyAgICBjYXNlIERJTUVOOgorICAgIGNhc2UgVU5JQ09ERVJBTkdFOgorICAgIGNhc2UgRlVO
Q1RJT046CisgICAgY2FzZSBBTllGVU5DVElPTjoKKyAgICBjYXNlIE5PVEZVTkNUSU9OOgorICAg
IGNhc2UgQ0FMQ0ZVTkNUSU9OOgorICAgIGNhc2UgTUlORlVOQ1RJT046CisgICAgY2FzZSBNQVhG
VU5DVElPTjoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90
b2tlblN0YXJ0ICYmIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA+IDApOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgVVJJOgorICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVy
cyAmJiB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzICE9IG1fdG9rZW5TdGFydCk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBIRVg6CisgICAgY2FzZSBJRFNFTDoKKyAgICAgICAgQVNTRVJU
KHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICsgMSAmJiB5eWx2YWwt
PnN0cmluZy5sZW5ndGggPiAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAg
ICByZXR1cm4gdG9rZW4oKTsKIH0KIAogQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlcjo6Y3Jl
YXRlRmxvYXRpbmdTZWxlY3RvcigpCkBAIC03ODMzLDI3ICs4ODE2LDI3IEBAIHZvaWQgQ1NTUGFy
c2VyOjp1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhTGlzdCogbWVkaWEpCiAKIHZvaWQgQ1NTUGFy
c2VyOjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQogewotICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uu
c3RhcnQgPSB5eXRleHQgLSBtX2RhdGE7CisgICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCA9
IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Nl
bGVjdG9yTGlzdEVuZCgpCiB7CiAgICAgaWYgKCFtX2N1cnJlbnRSdWxlRGF0YSkKICAgICAgICAg
cmV0dXJuOwotICAgIFVDaGFyKiBsaXN0RW5kID0geXl0ZXh0OwotICAgIHdoaWxlIChsaXN0RW5k
ID4gbV9kYXRhICsgMSkgeworICAgIFVDaGFyKiBsaXN0RW5kID0gbV90b2tlblN0YXJ0OworICAg
IHdoaWxlIChsaXN0RW5kID4gbV9kYXRhU3RhcnQgKyAxKSB7CiAgICAgICAgIGlmIChpc0hUTUxT
cGFjZSgqKGxpc3RFbmQgLSAxKSkpCiAgICAgICAgICAgICAtLWxpc3RFbmQ7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVu
ZCA9IGxpc3RFbmQgLSBtX2RhdGE7CisgICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5lbmQgPSBsaXN0
RW5kIC0gbV9kYXRhU3RhcnQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFy
dCgpCiB7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwotICAgIGlmICgq
eXl0ZXh0ID09ICd7JykKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2Rh
dGFTdGFydDsKKyAgICBpZiAoKm1fdG9rZW5TdGFydCA9PSAneycpCiAgICAgICAgICsrb2Zmc2V0
OyAvLyBTa2lwIHRoZSBydWxlIGJvZHkgb3BlbmluZyBicmFjZS4KICAgICBpZiAob2Zmc2V0ID4g
bV9ydWxlQm9keVJhbmdlLnN0YXJ0KQogICAgICAgICBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBv
ZmZzZXQ7CkBAIC03ODYyLDcgKzg4NDUsNyBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5
U3RhcnQoKQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5kKCkKIHsKLSAgICB1bnNp
Z25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90
b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQ7CiAgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5n
ZS5lbmQpCiAgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5lbmQgPSBvZmZzZXQ7CiB9CkBAIC03ODcx
LDE1ICs4ODU0LDE1IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlTdGFydCgpCiB7CiAg
ICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuOwotICAg
IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IHl5dGV4dCAtIG1fZGF0YTsKKyAgICBtX3Byb3BlcnR5
UmFuZ2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydDsKIH0KIAogdm9pZCBDU1NQ
YXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9w
ZXJ0eVBhcnNlZCkKIHsKICAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uKQogICAg
ICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwotICAg
IGlmICgqeXl0ZXh0ID09ICc7JykgLy8gSW5jbHVkZSBzZW1pY29sb24gaW50byB0aGUgcHJvcGVy
dHkgdGV4dC4KKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFy
dDsKKyAgICBpZiAoKm1fdG9rZW5TdGFydCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGlu
dG8gdGhlIHByb3BlcnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwogICAgIG1fcHJvcGVydHlS
YW5nZS5lbmQgPSBvZmZzZXQ7CiAgICAgaWYgKG1fcHJvcGVydHlSYW5nZS5zdGFydCAhPSBVSU5U
X01BWCAmJiBtX2N1cnJlbnRSdWxlRGF0YSkgewpAQCAtNzg4Nyw3ICs4ODcwLDcgQEAgdm9pZCBD
U1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQ
cm9wZXJ0eVBhcnNlZCkKICAgICAgICAgY29uc3QgdW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5
UmFuZ2Uuc3RhcnQ7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGVuZCA9IG1fcHJvcGVydHlSYW5n
ZS5lbmQ7CiAgICAgICAgIEFTU0VSVChzdGFydCA8IGVuZCk7Ci0gICAgICAgIFN0cmluZyBwcm9w
ZXJ0eVN0cmluZyA9IFN0cmluZyhtX2RhdGEgKyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hp
dGVTcGFjZSgpOworICAgICAgICBTdHJpbmcgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRh
U3RhcnQgKyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBp
ZiAocHJvcGVydHlTdHJpbmcuZW5kc1dpdGgoIjsiLCB0cnVlKSkKICAgICAgICAgICAgIHByb3Bl
cnR5U3RyaW5nID0gcHJvcGVydHlTdHJpbmcubGVmdChwcm9wZXJ0eVN0cmluZy5sZW5ndGgoKSAt
IDEpOwogICAgICAgICBzaXplX3QgY29sb25JbmRleCA9IHByb3BlcnR5U3RyaW5nLmZpbmQoIjoi
KTsKQEAgLTgxMDYsMzMgKzkwODksNCBAQCBib29sIGlzVmFsaWROdGhUb2tlbihjb25zdCBDU1NQ
YXJzZXJTdHJpbmcmIHRva2VuKQogICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZSh0b2tlbiwg
Im4iKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh0b2tlbiwgIi1uIik7CiB9CiAKLSNkZWZpbmUgWVlf
REVDTCBpbnQgQ1NTUGFyc2VyOjpsZXgoKQotI2RlZmluZSB5eWNvbnN0IGNvbnN0Ci10eXBlZGVm
IGludCB5eV9zdGF0ZV90eXBlOwotdHlwZWRlZiB1bnNpZ25lZCBZWV9DSEFSOwotLy8gVGhlIGZv
bGxvd2luZyBsaW5lIG1ha2VzIHN1cmUgd2UgdHJlYXQgbm9uLUxhdGluLTEgVW5pY29kZSBjaGFy
YWN0ZXJzIGNvcnJlY3RseS4KLSNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKGMgPiAweGZmID8gMHhm
ZiA6IGMpCi0jZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAotICAgICAgICB5eXRleHQgPSB5
eV9icDsgXAotICAgICAgICB5eWxlbmcgPSAoaW50KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICAg
ICAgeXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0gICAgICAgICp5eV9jcCA9IDA7IFwKLSAgICAg
ICAgeXlfY19idWZfcCA9IHl5X2NwOwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNkZWZpbmUg
RUNITwotI2RlZmluZSBZWV9SVUxFX1NFVFVQCi0jZGVmaW5lIElOSVRJQUwgMAotI2RlZmluZSBZ
WV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotI2RlZmlu
ZSB5eXRlcm1pbmF0ZSgpIHl5VG9rID0gRU5EX1RPS0VOOyByZXR1cm4geXlUb2sKLSNkZWZpbmUg
WVlfRkFUQUxfRVJST1IoYSkKLS8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBuZWVkZWQgdG8gYnVp
bGQgdGhlIHRva2VuaXplciB3aXRoIGEgY29uZGl0aW9uIHN0YWNrLgotLy8gVGhlIG1hY3JvIGlz
IHVzZWQgaW4gdGhlIHRva2VuaXplciBncmFtbWFyIHdpdGggbGluZXMgY29udGFpbmluZwotLy8g
QkVHSU4obWVkaWFxdWVyaWVzKSBhbmQgQkVHSU4oaW5pdGlhbCkuIHl5X3N0YXJ0IGFjdHMgYXMg
aW5kZXggdG8KLS8vIHRva2VuaXplciB0cmFuc2l0aW9uIHRhYmxlLCBhbmQgJ21lZGlhcXVlcmll
cycgYW5kICdpbml0aWFsJyBhcmUKLS8vIG9mZnNldCBtdWx0aXBsaWVycyB0aGF0IHNwZWNpZnkg
d2hpY2ggdHJhbnNpdGlvbnMgYXJlIGFjdGl2ZQotLy8gaW4gdGhlIHRva2VuaXplciBkdXJpbmcg
aW4gZWFjaCBjb25kaXRpb24gKHRva2VuaXplciBzdGF0ZSkuCi0jZGVmaW5lIEJFR0lOIHl5X3N0
YXJ0ID0gMSArIDIgKgotCi0jaW5jbHVkZSAidG9rZW5pemVyLmNwcCIKLQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5oCmluZGV4IDQ3YzVlZjcuLjYxMjRkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgK
QEAgLTMxMCwxMiArMzEwLDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJr
cygpIHsgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gbV9ydWxlQm9keVJhbmdlLmVuZCA9IDA7IH0K
ICAgICB2b2lkIHJlc2V0UHJvcGVydHlNYXJrcygpIHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0g
bV9wcm9wZXJ0eVJhbmdlLmVuZCA9IFVJTlRfTUFYOyB9CiAgICAgaW50IGxleCh2b2lkKiB5eWx2
YWwpOwotICAgIGludCB0b2tlbigpIHsgcmV0dXJuIHl5VG9rOyB9Ci0gICAgVUNoYXIqIHRleHQo
aW50KiBsZW5ndGgpOwotICAgIHZvaWQgY291bnRMaW5lcygpOwotICAgIGludCBsZXgoKTsKKyAg
ICBpbnQgdG9rZW4oKSB7IHJldHVybiBtX3Rva2VuOyB9CiAKIHByaXZhdGU6CisgICAgaW5saW5l
IGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoKTsKKworICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIqIGNo
ZWNrU3RyaW5nKFVDaGFyKiwgVUNoYXIpOworCisgICAgdm9pZCBwYXJzZUVzY2FwZShVQ2hhciom
KTsKKyAgICBpbmxpbmUgYm9vbCBwYXJzZUlkZW50aWZpZXIoVUNoYXIqJik7CisgICAgaW5saW5l
IHZvaWQgcGFyc2VTdHJpbmcoVUNoYXIqJiwgVUNoYXIpOworICAgIGlubGluZSB2b2lkIHBhcnNl
VVJJKFVDaGFyKiYsIFVDaGFyKiYpOworICAgIGlubGluZSBib29sIHBhcnNlVW5pY29kZVJhbmdl
KCk7CisgICAgYm9vbCBwYXJzZU50aENoaWxkKCk7CisgICAgYm9vbCBwYXJzZU50aENoaWxkRXh0
cmEoKTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3RGdW5jdGlvblRva2VuKGludCk7CisgICAgaW5s
aW5lIHZvaWQgZGV0ZWN0TWVkaWFRdWVyeVRva2VuKGludCk7CisgICAgaW5saW5lIHZvaWQgZGV0
ZWN0TnVtYmVyVG9rZW4oVUNoYXIqLCBpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdERhc2hU
b2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdEF0VG9rZW4oaW50LCBib29sKTsKKwog
ICAgIHZvaWQgc2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAKICAgICB2b2lkIHJlY2hl
Y2tBdEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbik7CkBAIC0zNDgsMTUgKzM2Miwx
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgcGFyc2VGb250RmFjZVNyY1VSSShDU1NWYWx1ZUxpc3Qq
KTsKICAgICBib29sIHBhcnNlRm9udEZhY2VTcmNMb2NhbChDU1NWYWx1ZUxpc3QqKTsKIAorICAg
IGVudW0gUGFyc2luZ01vZGUgeworICAgICAgICBOb3JtYWxNb2RlLAorICAgICAgICBNZWRpYVF1
ZXJ5TW9kZSwKKyAgICAgICAgTnRoQ2hpbGRNb2RlCisgICAgfTsKKworICAgIFBhcnNpbmdNb2Rl
IG1fcGFyc2luZ01vZGU7CisgICAgVUNoYXIqIG1fZGF0YVN0YXJ0OwogICAgIFVDaGFyKiBtX2Rh
dGE7Ci0gICAgVUNoYXIqIHl5dGV4dDsKLSAgICBVQ2hhciogeXlfY19idWZfcDsKLSAgICBVQ2hh
ciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIFVD
aGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgIGludCB5eWxlbmc7Ci0gICAgaW50IHl5
VG9rOwotICAgIGludCB5eV9zdGFydDsKKyAgICBVQ2hhciogbV90b2tlblN0YXJ0OworICAgIGlu
dCBtX3Rva2VuOwogICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1fbGFzdFNlbGVjdG9y
TGluZU51bWJlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5m
bGV4IGIvU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjMjhkYmNhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy90
b2tlbml6ZXIuZmxleAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0lb3B0aW9uIGNh
c2UtaW5zZW5zaXRpdmUKLSVvcHRpb24gbm95eXdyYXAKLSVvcHRpb24gOGJpdAotJW9wdGlvbiBz
dGFjawotJXMgbWVkaWFxdWVyeQotJXMgZm9ya2V5d29yZAotJXMgbnRoY2hpbGQKLQotaCAgICAg
ICAgICAgICAgIFswLTlhLWZBLUZdCi1ub25hc2NpaSAgICAgICAgW1wyMDAtXDM3N10KLXVuaWNv
ZGUgICAgICAgICBcXHtofXsxLDZ9WyBcdFxyXG5cZl0/Ci1lc2NhcGUgICAgICAgICAge3VuaWNv
ZGV9fFxcWyAtflwyMDAtXDM3N10KLW5tc3RhcnQgICAgICAgICBbX2EtekEtWl18e25vbmFzY2lp
fXx7ZXNjYXBlfQotbm1jaGFyICAgICAgICAgIFtfYS16QS1aMC05LV18e25vbmFzY2lpfXx7ZXNj
YXBlfQotc3RyaW5nMSAgICAgICAgIFwiKFteXG5cclxmXFwiXXxcXHtubH18e2VzY2FwZX0pKlwi
Ci1zdHJpbmcyICAgICAgICAgXCcoW15cblxyXGZcXCddfFxce25sfXx7ZXNjYXBlfSkqXCcKLQot
aWRlbnQgICAgICAgICAgIC0/e25tc3RhcnR9e25tY2hhcn0qCi1udW0gICAgICAgICAgICAgWzAt
OV0rfFswLTldKiIuIlswLTldKwotaW50bnVtICAgICAgICAgIFswLTldKwotc3RyaW5nICAgICAg
ICAgIHtzdHJpbmcxfXx7c3RyaW5nMn0KLXVybCAgICAgICAgICAgICAoWyEjJCUmKi1+XXx7bm9u
YXNjaWl9fHtlc2NhcGV9KSoKLXcgICAgICAgICAgICAgICBbIFx0XHJcblxmXSoKLW5sICAgICAg
ICAgICAgICBcbnxcclxufFxyfFxmCi1yYW5nZSAgICAgICAgICAgXD97MSw2fXx7aH0oXD97MCw1
fXx7aH0oXD97MCw0fXx7aH0oXD97MCwzfXx7aH0oXD97MCwyfXx7aH0oXD8/fHtofSkpKSkpCi1u
dGggICAgICAgICAgICAgW1wrLV0/e2ludG51bX0qbihbXHRcclxuIF0qW1wrLV1bXHRcclxuIF0q
e2ludG51bX0pPwotbnRoZnVuYyAgICAgICAgICJudGgtIigiY2hpbGQifCJvZi10eXBlInwibGFz
dC1jaGlsZCJ8Imxhc3Qtb2YtdHlwZSIpCi0KLSUlCi0KLVwvXCpbXipdKlwqKyhbXi8qXVteKl0q
XCorKSpcLyB7Y291bnRMaW5lcygpOyAvKiBpZ25vcmUgY29tbWVudHMgKi8gfQotCi1bIFx0XHJc
blxmXSsgICAgICAgICAgICB7Y291bnRMaW5lcygpOyB5eVRvayA9IFdISVRFU1BBQ0U7IHJldHVy
biB5eVRvazt9Ci0KLSI8IS0tIiAgICAgICAgICAgICAgICAgIHt5eVRvayA9IFNHTUxfQ0Q7IHJl
dHVybiB5eVRvazt9Ci0iLS0+IiAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBTR01MX0NEOyBy
ZXR1cm4geXlUb2s7fQotIn49IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0gSU5DTFVERVM7
IHJldHVybiB5eVRvazt9Ci0ifD0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBEQVNITUFU
Q0g7IHJldHVybiB5eVRvazt9Ci0iXj0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBCRUdJ
TlNXSVRIOyByZXR1cm4geXlUb2s7fQotIiQ9IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0g
RU5EU1dJVEg7IHJldHVybiB5eVRvazt9Ci0iKj0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sg
PSBDT05UQUlOUzsgcmV0dXJuIHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJub3QiICAgICAgIHt5eVRv
ayA9IE1FRElBX05PVDsgcmV0dXJuIHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJvbmx5IiAgICAgIHt5
eVRvayA9IE1FRElBX09OTFk7IHJldHVybiB5eVRvazt9Ci08bWVkaWFxdWVyeT4iYW5kIiAgICAg
ICB7eXlUb2sgPSBNRURJQV9BTkQ7IHJldHVybiB5eVRvazt9Ci0KLXtzdHJpbmd9ICAgICAgICAg
ICAgICAgIHt5eVRvayA9IFNUUklORzsgcmV0dXJuIHl5VG9rO30KLXtpZGVudH0gICAgICAgICAg
ICAgICAgIHt5eVRvayA9IElERU5UOyByZXR1cm4geXlUb2s7fQotPG50aGNoaWxkPntudGh9ICAg
ICAgICAge3l5VG9rID0gTlRIOyByZXR1cm4geXlUb2s7fQotPG50aGNoaWxkPiIpIiAgICAgICAg
ICAge0JFR0lOKElOSVRJQUwpOyB5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazt9Ci0KLSIj
IntofSsgICAgICAgICAgICAgICAgIHt5eVRvayA9IEhFWDsgcmV0dXJuIHl5VG9rO30KLSIjIntp
ZGVudH0gICAgICAgICAgICAgIHt5eVRvayA9IElEU0VMOyByZXR1cm4geXlUb2s7fQotCi0iQGlt
cG9ydCIgICAgICAgICAgICAgICB7QkVHSU4obWVkaWFxdWVyeSk7IHl5VG9rID0gSU1QT1JUX1NZ
TTsgcmV0dXJuIHl5VG9rO30KLSJAcGFnZSIgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBBR0Vf
U1lNOyByZXR1cm4geXlUb2s7fQotIkB0b3AtbGVmdC1jb3JuZXIiICAgICAge3l5VG9rID0gVE9Q
TEVGVENPUk5FUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1sZWZ0IiAgICAgICAgICAgICB7
eXlUb2sgPSBUT1BMRUZUX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAdG9wLWNlbnRlciIgICAgICAg
ICAgIHt5eVRvayA9IFRPUENFTlRFUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1yaWdodCIg
ICAgICAgICAgICB7eXlUb2sgPSBUT1BSSUdIVF9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1y
aWdodC1jb3JuZXIiICAgICB7eXlUb2sgPSBUT1BSSUdIVENPUk5FUl9TWU07IHJldHVybiB5eVRv
azt9Ci0iQGJvdHRvbS1sZWZ0LWNvcm5lciIgICB7eXlUb2sgPSBCT1RUT01MRUZUQ09STkVSX1NZ
TTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLWxlZnQiICAgICAgICAgIHt5eVRvayA9IEJPVFRP
TUxFRlRfU1lNOyByZXR1cm4geXlUb2s7fQotIkBib3R0b20tY2VudGVyIiAgICAgICAge3l5VG9r
ID0gQk9UVE9NQ0VOVEVSX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLXJpZ2h0IiAgICAg
ICAgIHt5eVRvayA9IEJPVFRPTVJJR0hUX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLXJp
Z2h0LWNvcm5lciIgIHt5eVRvayA9IEJPVFRPTVJJR0hUQ09STkVSX1NZTTsgcmV0dXJuIHl5VG9r
O30KLSJAbGVmdC10b3AiICAgICAgICAgICAgIHt5eVRvayA9IExFRlRUT1BfU1lNOyByZXR1cm4g
eXlUb2s7fQotIkBsZWZ0LW1pZGRsZSIgICAgICAgICAge3l5VG9rID0gTEVGVE1JRERMRV9TWU07
IHJldHVybiB5eVRvazt9Ci0iQGxlZnQtYm90dG9tIiAgICAgICAgICB7eXlUb2sgPSBMRUZUQk9U
VE9NX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtdG9wIiAgICAgICAgICAgIHt5eVRvayA9
IFJJR0hUVE9QX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtbWlkZGxlIiAgICAgICAgIHt5
eVRvayA9IFJJR0hUTUlERExFX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtYm90dG9tIiAg
ICAgICAgIHt5eVRvayA9IFJJR0hUQk9UVE9NX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAbWVkaWEi
ICAgICAgICAgICAgICAgIHtCRUdJTihtZWRpYXF1ZXJ5KTsgeXlUb2sgPSBNRURJQV9TWU07IHJl
dHVybiB5eVRvazt9Ci0iQGZvbnQtZmFjZSIgICAgICAgICAgICB7eXlUb2sgPSBGT05UX0ZBQ0Vf
U1lNOyByZXR1cm4geXlUb2s7fQotIkBjaGFyc2V0IiAgICAgICAgICAgICAge3l5VG9rID0gQ0hB
UlNFVF9TWU07IHJldHVybiB5eVRvazt9Ci0iQG5hbWVzcGFjZSIgICAgICAgICAgICB7eXlUb2sg
PSBOQU1FU1BBQ0VfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1ydWxlIiAgICAgICAg
IHt5eVRvayA9IFdFQktJVF9SVUxFX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQtZGVj
bHMiICAgICAgICB7eXlUb2sgPSBXRUJLSVRfREVDTFNfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJA
LXdlYmtpdC12YWx1ZSIgICAgICAgIHt5eVRvayA9IFdFQktJVF9WQUxVRV9TWU07IHJldHVybiB5
eVRvazsgfQotIkAtd2Via2l0LW1lZGlhcXVlcnkiICAge0JFR0lOKG1lZGlhcXVlcnkpOyB5eVRv
ayA9IFdFQktJVF9NRURJQVFVRVJZX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQtc2Vs
ZWN0b3IiICAgICB7eXlUb2sgPSBXRUJLSVRfU0VMRUNUT1JfU1lNOyByZXR1cm4geXlUb2s7IH0K
LSJALXdlYmtpdC1rZXlmcmFtZXMiICAgIHt5eVRvayA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOyBy
ZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1rZXlmcmFtZS1ydWxlIiB7eXlUb2sgPSBXRUJLSVRf
S0VZRlJBTUVfUlVMRV9TWU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LXJlZ2lvbiIgICAg
ICAge3l5VG9rID0gV0VCS0lUX1JFR0lPTl9SVUxFX1NZTTsgcmV0dXJuIHl5VG9rO30KLQotIkAi
e2lkZW50fSAgICAgICAgICAgICAge3l5VG9rID0gQVRLRVlXT1JEOyByZXR1cm4geXlUb2s7IH0K
LQotIiEie3d9ImltcG9ydGFudCIgICAgICAge3l5VG9rID0gSU1QT1JUQU5UX1NZTTsgcmV0dXJu
IHl5VG9rO30KLQote251bX1lbSAgICAgICAgICAgICAgICAge3l5VG9rID0gRU1TOyByZXR1cm4g
eXlUb2s7fQote251bX1yZW0gICAgICAgICAgICAgICAge3l5VG9rID0gUkVNUzsgcmV0dXJuIHl5
VG9rO30KLXtudW19X19xZW0gICAgICAgICAgICAgIHt5eVRvayA9IFFFTVM7IHJldHVybiB5eVRv
azt9IC8qIHF1aXJreSBlbXMgKi8KLXtudW19ZXggICAgICAgICAgICAgICAgIHt5eVRvayA9IEVY
UzsgcmV0dXJuIHl5VG9rO30KLXtudW19cHggICAgICAgICAgICAgICAgIHt5eVRvayA9IFBYUzsg
cmV0dXJuIHl5VG9rO30KLXtudW19Y20gICAgICAgICAgICAgICAgIHt5eVRvayA9IENNUzsgcmV0
dXJuIHl5VG9rO30KLXtudW19bW0gICAgICAgICAgICAgICAgIHt5eVRvayA9IE1NUzsgcmV0dXJu
IHl5VG9rO30KLXtudW19aW4gICAgICAgICAgICAgICAgIHt5eVRvayA9IElOUzsgcmV0dXJuIHl5
VG9rO30KLXtudW19cHQgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBUUzsgcmV0dXJuIHl5VG9r
O30KLXtudW19cGMgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBDUzsgcmV0dXJuIHl5VG9rO30K
LXtudW19ZGVnICAgICAgICAgICAgICAgIHt5eVRvayA9IERFR1M7IHJldHVybiB5eVRvazt9Ci17
bnVtfXJhZCAgICAgICAgICAgICAgICB7eXlUb2sgPSBSQURTOyByZXR1cm4geXlUb2s7fQote251
bX1ncmFkICAgICAgICAgICAgICAge3l5VG9rID0gR1JBRFM7IHJldHVybiB5eVRvazt9Ci17bnVt
fXR1cm4gICAgICAgICAgICAgICB7eXlUb2sgPSBUVVJOUzsgcmV0dXJuIHl5VG9rO30KLXtudW19
bXMgICAgICAgICAgICAgICAgIHt5eVRvayA9IE1TRUNTOyByZXR1cm4geXlUb2s7fQote251bX1z
ICAgICAgICAgICAgICAgICAge3l5VG9rID0gU0VDUzsgcmV0dXJuIHl5VG9rO30KLXtudW19SHog
ICAgICAgICAgICAgICAgIHt5eVRvayA9IEhFUlRaOyByZXR1cm4geXlUb2s7fQote251bX1rSHog
ICAgICAgICAgICAgICAge3l5VG9rID0gS0hFUlRaOyByZXR1cm4geXlUb2s7fQote251bX17aWRl
bnR9ICAgICAgICAgICAge3l5VG9rID0gRElNRU47IHJldHVybiB5eVRvazt9Ci17bnVtfXtpZGVu
dH1cKyAgICAgICAgICB7eXlUb2sgPSBJTlZBTElERElNRU47IHJldHVybiB5eVRvazt9Ci17bnVt
fSUrICAgICAgICAgICAgICAgICB7eXlUb2sgPSBQRVJDRU5UQUdFOyByZXR1cm4geXlUb2s7fQot
e2ludG51bX0gICAgICAgICAgICAgICAge3l5VG9rID0gSU5URUdFUjsgcmV0dXJuIHl5VG9rO30K
LXtudW19ICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IEZMT0FUVE9LRU47IHJldHVybiB5eVRv
azt9Ci0KLSItd2Via2l0LWFueSgiICAgICAgICAgIHt5eVRvayA9IEFOWUZVTkNUSU9OOyByZXR1
cm4geXlUb2s7fQotIm5vdCgiICAgICAgICAgICAgICAgICAge3l5VG9rID0gTk9URlVOQ1RJT047
IHJldHVybiB5eVRvazt9Ci0idXJsKCJ7d317c3RyaW5nfXt3fSIpIiB7eXlUb2sgPSBVUkk7IHJl
dHVybiB5eVRvazt9Ci0idXJsKCJ7d317dXJsfXt3fSIpIiAgICB7eXlUb2sgPSBVUkk7IHJldHVy
biB5eVRvazt9Ci0iLXdlYmtpdC1jYWxjKCIgICAgICAgICB7eXlUb2sgPSBDQUxDRlVOQ1RJT047
IHJldHVybiB5eVRvazt9Ci0iLXdlYmtpdC1taW4oIiAgICAgICAgICB7eXlUb2sgPSBNSU5GVU5D
VElPTjsgcmV0dXJuIHl5VG9rO30KLSItd2Via2l0LW1heCgiICAgICAgICAgIHt5eVRvayA9IE1B
WEZVTkNUSU9OOyByZXR1cm4geXlUb2s7fQote250aGZ1bmN9IigiICAgICAgICAgICAge0JFR0lO
KG50aGNoaWxkKTsgeXlUb2sgPSBGVU5DVElPTjsgcmV0dXJuIHl5VG9rO30KLXtpZGVudH0iKCIg
ICAgICAgICAgICAgIHt5eVRvayA9IEZVTkNUSU9OOyByZXR1cm4geXlUb2s7fQotCi1VXCt7cmFu
Z2V9ICAgICAgICAgICAgICB7eXlUb2sgPSBVTklDT0RFUkFOR0U7IHJldHVybiB5eVRvazt9Ci1V
XCt7aH17MSw2fS17aH17MSw2fSAgICB7eXlUb2sgPSBVTklDT0RFUkFOR0U7IHJldHVybiB5eVRv
azt9Ci0KLTxtZWRpYXF1ZXJ5PiJ7IiAgICAgICAgIHwKLTxtZWRpYXF1ZXJ5PiI7IiAgICAgICAg
IHtCRUdJTihJTklUSUFMKTsgeXlUb2sgPSAqeXl0ZXh0OyByZXR1cm4geXlUb2s7IH0KLS4gICAg
ICAgICAgICAgICAgICAgICAgIHt5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazt9Ci0KLSUl
CmRpZmYgLS1naXQgYS93c2NyaXB0IGIvd3NjcmlwdAppbmRleCBhOTg5OWI2Li5hZGZlNjM3IDEw
MDY0NAotLS0gYS93c2NyaXB0CisrKyBiL3dzY3JpcHQKQEAgLTI3OCw3ICsyNzgsNiBAQCBkZWYg
YnVpbGQoYmxkKToKICAgICAgICAgIyBpbnRlcm1lZGlhdGUgc291cmNlcwogICAgICAgICBleGNs
dWRlcy5hcHBlbmQoJ0RvY1R5cGVTdHJpbmdzLmNwcCcpCiAgICAgICAgIGV4Y2x1ZGVzLmFwcGVu
ZCgnSFRNTEVudGl0eU5hbWVzLmNwcCcpCi0gICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgndG9rZW5p
emVyLmNwcCcpCiAKICAgICAgICAgIyBRdCBzcGVjaWZpYyBmaWxlIGluIGNvbW1vbiBzb3VyY2Vz
CiAgICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgnQ29udGV4dFNoYWRvdy5jcHAnKQotLSAKMS43LjIu
NQoK
</data>
<flag name="commit-queue"
          id="120265"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120935</attachid>
            <date>2012-01-03 05:20:44 -0800</date>
            <delta_ts>2012-01-05 01:27:36 -0800</delta_ts>
            <desc>updated draft patch</desc>
            <filename>0001-css-tokenizer.patch</filename>
            <type>text/plain</type>
            <size>83153</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAwNzg0YjA2NmRjZjQ0MmQ0NjhmZWE3MWZiMmM4YmJiYTAzNTFhZGM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogVHVlLCAzIEphbiAyMDEyIDA1OjE4OjIwIC0wODAwClN1YmplY3Q6IFtQQVRDSF0gY3Nz
LXRva2VuaXplcgoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMTEgLQogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSAg
ICAgICAgICAgICAgICAgfCAgICA4IC0KIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnBy
aSAgICAgICAgICAgICAgICAgIHwgICAxMSAtCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgLQogU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICAzIC0KIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwICAgICAgICAgICAgIHwgICAxNyAtCiAuLi4vV2ViQ29yZS5neXAv
c2NyaXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5weSAgICB8ICAxMDEgLS0KIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiAgICAgICB8ICAgIDQgLQogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgfCAgICA0IC0K
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwICAgICAgICAgICAgICAgICAgIHwgMTUw
OCArKysrKysrKysrKysrKysrLS0tLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oICAg
ICAgICAgICAgICAgICAgICAgfCAgIDQyICstCiBTb3VyY2UvV2ViQ29yZS9jc3MvdG9rZW5pemVy
LmZsZXggICAgICAgICAgICAgICAgICB8ICAxMzAgLS0KIHdzY3JpcHQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCiAxNCBmaWxlcyBjaGFuZ2VkLCAx
MjU4IGluc2VydGlvbnMoKyksIDU4OCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9zY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4Cgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2ODhlMGYxLi4xYjJjZmIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMjMxMiwxNyArMjMxMiw2IEBAIEFERF9DVVNUT01fQ09NTUFORCgKIExJU1QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSFRNTEVu
dGl0eVRhYmxlLmNwcCkKIAogCi0jIEdlbmVyYXRlIHRva2VuaXplcgotRklMRShUT19OQVRJVkVf
UEFUSCAke1BFUkxfRVhFQ1VUQUJMRX0gUEVSTF9FWEVDVVRBQkxFX05BVElWRV9QQVRIKQotQURE
X0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vdG9rZW5pemVyLmNwcAotICAgIE1BSU5fREVQRU5ERU5DWSAke1dFQkNPUkVfRElSfS9jc3Mv
bWFrZXRva2VuaXplcgotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vY3NzL3Rva2VuaXplci5m
bGV4Ci0gICAgQ09NTUFORCAke0ZMRVhfRVhFQ1VUQUJMRX0gLXQgJHtXRUJDT1JFX0RJUn0vY3Nz
L3Rva2VuaXplci5mbGV4IHwgJHtQRVJMX0VYRUNVVEFCTEVfTkFUSVZFX1BBVEh9ICR7V0VCQ09S
RV9ESVJ9L2Nzcy9tYWtldG9rZW5pemVyID4gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L3Rva2VuaXplci5jcHAKLSAgICBWRVJCQVRJTSkKLUFERF9TT1VSQ0VfV0VCQ09SRV9ERVJJVkVE
X0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9jc3MvQ1NTUGFyc2VyLmNwcCB0b2tlbml6ZXIu
Y3BwKQotCi0KICMgUmVwbGFjZSAiOyIgd2l0aCAic3BhY2UiIGluIG9yZGVyIHRvIHJlY29nbml6
ZSBmZWF0dXJlIGRlZmluaXRpb24gaW4gY3NzIGZpbGVzLgogU0VUKEZFQVRVUkVfREVGSU5FU19X
SVRIX1NQQUNFX1NFUEFSQVRPUiAiIikKIEZPUkVBQ0goX2ZlYXR1cmUgJHtGRUFUVVJFX0RFRklO
RVN9KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggYWY3NjZkNy4uZTI0Y2UwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC02MTIsNyArNjEyLDYgQEAgYWxsIDog
XAogICAgIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmNwcCBcCiAgICAgTWF0aE1MTmFtZXMuY3BwIFwK
ICAgICBYUGF0aEdyYW1tYXIuY3BwIFwKLSAgICB0b2tlbml6ZXIuY3BwIFwKICMKIAogIyAtLS0t
LS0tLQpAQCAtNzA5LDEzICs3MDgsNiBAQCBDb2xvckRhdGEuY3BwIDogcGxhdGZvcm0vQ29sb3JE
YXRhLmdwZXJmICQoV2ViQ29yZSkvbWFrZS1oYXNoLXRvb2xzLnBsCiAKICMgLS0tLS0tLS0KIAot
IyBDU1MgdG9rZW5pemVyCi0KLXRva2VuaXplci5jcHAgOiBjc3MvdG9rZW5pemVyLmZsZXggY3Nz
L21ha2V0b2tlbml6ZXIKLQlmbGV4IC10ICQ8IHwgcGVybCAkKFdlYkNvcmUpL2Nzcy9tYWtldG9r
ZW5pemVyID4gJEAKLQotIyAtLS0tLS0tLQotCiAjIENTUyBncmFtbWFyCiAjIE5PVEU6IE9sZGVy
IHZlcnNpb25zIG9mIGJpc29uIGRvIG5vdCBpbmplY3QgYW4gaW5jbHVzaW9uIGd1YXJkLCBzbyB3
ZSBhZGQgb25lLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5w
cmkgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKaW5kZXggZDllNGNjOC4uZmQ3
ZjdiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQpAQCAtMjYsOCArMjYsNiBAQCBTVkdf
TkFNRVMgPSAkJFBXRC9zdmcvc3ZndGFncy5pbgogCiBYTElOS19OQU1FUyA9ICQkUFdEL3N2Zy94
bGlua2F0dHJzLmluCiAKLVRPS0VOSVpFUiA9ICQkUFdEL2Nzcy90b2tlbml6ZXIuZmxleAotCiBD
U1NCSVNPTiA9ICQkUFdEL2Nzcy9DU1NHcmFtbWFyLnkKIAogY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1hTTFQ9MSkgewpAQCAtNzU1LDE1ICs3NTMsNiBAQCBhcnJheUJ1ZmZlclZpZXdDdXN0b21T
Y3JpcHQuY29tbWFuZHMgPSBwZXJsICQkUFdEL2luc3BlY3Rvci94eGQucGwgVjhBcnJheUJ1ZmZl
cgogYXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2NyaXB0LmFkZF9vdXRwdXRfdG9fc291cmNlcyA9IGZh
bHNlCiBHRU5FUkFUT1JTICs9IGFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdAogCi0jIEdFTkVS
QVRPUiAzOiB0b2tlbml6ZXIgKGZsZXgpCi10b2tlbml6ZXIub3V0cHV0ID0gJHtRTUFLRV9GSUxF
X0JBU0V9LmNwcAotdG9rZW5pemVyLmlucHV0ID0gVE9LRU5JWkVSCi10b2tlbml6ZXIuc2NyaXB0
ID0gJCRQV0QvY3NzL21ha2V0b2tlbml6ZXIKLXRva2VuaXplci5jb21tYW5kcyA9IGZsZXggLXQg
PCAke1FNQUtFX0ZJTEVfTkFNRX0gfCBwZXJsICQkdG9rZW5pemVyLnNjcmlwdCA+ICR7UU1BS0Vf
RklMRV9PVVR9Ci0jIHRva2VuaXplci5jcHAgaXMgaW5jbHVkZWQgaW50byBDU1NQYXJzZXIuY3Bw
Ci10b2tlbml6ZXIuYWRkX291dHB1dF90b19zb3VyY2VzID0gZmFsc2UKLUdFTkVSQVRPUlMgKz0g
dG9rZW5pemVyCi0KICMgR0VORVJBVE9SIDQ6IENTUyBncmFtbWFyCiBjc3NiaXNvbi5vdXRwdXQg
PSAke1FNQUtFX0ZJTEVfQkFTRX0uY3BwCiBjc3NiaXNvbi5pbnB1dCA9IENTU0JJU09OCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IGViYjhjZGYuLmYxMzZhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC02MzMsMTAgKzYzMyw2IEBAIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSFRNTEVudGl0eVRh
YmxlLmNwcDogJChXZWJDb3JlKS9odG1sL3BhcnNlci9IVE1MRW50aXR5TmFtCiBEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0NvbG9yRGF0YS5jcHA6ICQoV2ViQ29yZSkvcGxhdGZvcm0vQ29sb3JEYXRh
LmdwZXJmICQoV2ViQ29yZSkvbWFrZS1oYXNoLXRvb2xzLnBsCiAJJChQRVJMKSAkKFdlYkNvcmUp
L21ha2UtaGFzaC10b29scy5wbCAkKEdFTlNPVVJDRVNfV0VCQ09SRSkgJChXZWJDb3JlKS9wbGF0
Zm9ybS9Db2xvckRhdGEuZ3BlcmYKIAotIyBDU1MgdG9rZW5pemVyCi1EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL3Rva2VuaXplci5jcHAgOiAkKFdlYkNvcmUpL2Nzcy90b2tlbml6ZXIuZmxleCAkKFdl
YkNvcmUpL2Nzcy9tYWtldG9rZW5pemVyCi0JJChBTV9WX0dFTikkKEZMRVgpIC10ICQ8IHwgJChQ
RVJMKSAkKFdlYkNvcmUpL2Nzcy9tYWtldG9rZW5pemVyID4gJEAKLQogIyBDU1MgZ3JhbW1hcgog
CiAjIE5PVEU6IG9sZGVyIHZlcnNpb25zIG9mIGJpc29uIGRvIG5vdCBpbmplY3QgYW4gaW5jbHVz
aW9uIGd1YXJkLCBzbyB3ZSBkbyBpdApAQCAtOTIyLDcgKzkxOCw2IEBAIEVYVFJBX0RJU1QgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9zdmcuY3NzIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU1ZH
Q1NTUHJvcGVydHlOYW1lcy5pbiBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1ZhbHVlS2V5
d29yZHMuaW4gXAotCVNvdXJjZS9XZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleCBcCiAJU291cmNl
L1dlYkNvcmUvY3NzL3ZpZXctc291cmNlLmNzcyBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1dlYktp
dEZvbnRGYW1pbHlOYW1lcy5pbiBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RmFjdG9yeS5p
biBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBlYWQ2ZGFkLi45NjUxOTIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTEsNiArMSwzIEBACi13ZWJjb3JlX2J1
aWx0X25vc291cmNlcyArPSBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS90b2tlbml6ZXIuY3Bw
Ci0KIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9D
U1NHcmFtbWFyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9DU1NHcmFtbWFyLmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBlNzljNzk4Li4xY2QxYWRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtOTA4LDIzICs5MDgs
NiBAQAogICAgICAgICAgIF0sCiAgICAgICAgIH0sCiAgICAgICAgIHsKLSAgICAgICAgICAnYWN0
aW9uX25hbWUnOiAndG9rZW5pemVyJywKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAg
ICAgJy4uL2Nzcy9tYWtldG9rZW5pemVyJywKLSAgICAgICAgICAgICcuLi9jc3MvdG9rZW5pemVy
LmZsZXgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAg
ICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L3Rva2VuaXplci5jcHAnLAotICAg
ICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24nLAot
ICAgICAgICAgICAgJ3NjcmlwdHMvYWN0aW9uX21ha2V0b2tlbml6ZXIucHknLAotICAgICAgICAg
ICAgJzxAKF9vdXRwdXRzKScsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAgICAgJzxAKF9p
bnB1dHMpJwotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKICAgICAgICAgICAn
YWN0aW9uX25hbWUnOiAnZGVyaXZlZF9zb3VyY2VzX2FsbF9pbl9vbmUnLAogICAgICAgICAgICdp
bnB1dHMnOiBbCiAgICAgICAgICAgICAnc2NyaXB0cy9hY3Rpb25fZGVyaXZlZHNvdXJjZXNhbGxp
bm9uZS5weScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9zY3JpcHRz
L2FjdGlvbl9tYWtldG9rZW5pemVyLnB5IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvc2Ny
aXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjRhMjhlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9zY3Jp
cHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAg
QEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyAKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0j
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSMKLSMgQ29weXJp
Z2h0IChjKSAyMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgdXNhZ2U6
IGFjdGlvbl9tYWtldG9rZW5pemVyLnB5IE9VVFBVVFMgLS0gSU5QVVRTCi0jCi0jIE11bHRpcGxl
IElOUFVUUyBtYXkgYmUgbGlzdGVkLiBUaGUgc2VjdGlvbnMgYXJlIHNlcGFyYXRlZCBieSAtLSBh
cmd1bWVudHMuCi0jCi0jIE9VVFBVVFMgbXVzdCBjb250YWluIGEgc2luZ2xlIGl0ZW06IGEgcGF0
aCB0byB0b2tlbml6ZXIuY3BwLgotIwotIyBJTlBVVFMgbXVzdCBjb250YWluIGV4YWN0bHkgdHdv
IGl0ZW1zLiBUaGUgZmlyc3QgaXRlbSBtdXN0IGJlIHRoZSBwYXRoIHRvCi0jIG1ha2V0b2tlbml6
ZXIuIFRoZSBzZWNvbmQgaXRlbSBtdXN0IGJlIHRoZSBwYXRoIHRvIHRva2VuaXplci5mbGV4Lgot
Ci0KLWltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLQotCi1kZWYgU3Bs
aXRBcmdzSW50b1NlY3Rpb25zKGFyZ3MpOgotICAgIHNlY3Rpb25zID0gW10KLSAgICB3aGlsZSBs
ZW4oYXJncykgPiAwOgotICAgICAgICBpZiBub3QgJy0tJyBpbiBhcmdzOgotICAgICAgICAgICAg
IyBJZiB0aGVyZSBpcyBubyAnLS0nIGxlZnQsIGV2ZXJ5dGhpbmcgcmVtYWluaW5nIGlzIGFuIGVu
dGlyZSBzZWN0aW9uLgotICAgICAgICAgICAgZGFzaGVzID0gbGVuKGFyZ3MpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBkYXNoZXMgPSBhcmdzLmluZGV4KCctLScpCi0KLSAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKGFyZ3NbOmRhc2hlc10pCi0KLSAgICAgICAgIyBOZXh0IHRpbWUgdGhyb3Vn
aCB0aGUgbG9vcCwgbG9vayBhdCBldmVyeXRoaW5nIGFmdGVyIHRoaXMgJy0tJy4KLSAgICAgICAg
aWYgZGFzaGVzICsgMSA9PSBsZW4oYXJncyk6Ci0gICAgICAgICAgICAjIElmIHRoZSAnLS0nIGlz
IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QsIHdlIHdvbid0IGNvbWUgYmFjayB0aHJvdWdoIHRoZQot
ICAgICAgICAgICAgIyBsb29wIGFnYWluLiBBZGQgYW4gZW1wdHkgc2VjdGlvbiBub3cgY29ycmVz
cG9uZGluZyB0byB0aGUgbm90aGluZ25lc3MKLSAgICAgICAgICAgICMgZm9sbG93aW5nIHRoZSBm
aW5hbCAnLS0nLgotICAgICAgICAgICAgYXJncyA9IFtdCi0gICAgICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFyZ3MgPSBhcmdzW2Rhc2hl
cyArIDE6XQotCi0gICAgcmV0dXJuIHNlY3Rpb25zCi0KLQotZGVmIG1haW4oYXJncyk6Ci0gICAg
c2VjdGlvbnMgPSBTcGxpdEFyZ3NJbnRvU2VjdGlvbnMoYXJnc1sxOl0pCi0gICAgYXNzZXJ0IGxl
bihzZWN0aW9ucykgPT0gMgotICAgIChvdXRwdXRzLCBpbnB1dHMpID0gc2VjdGlvbnMKLQotICAg
IGFzc2VydCBsZW4ob3V0cHV0cykgPT0gMQotICAgIG91dHB1dCA9IG91dHB1dHNbMF0KLQotICAg
IGFzc2VydCBsZW4oaW5wdXRzKSA9PSAyCi0gICAgbWFrZXRva2VuaXplciA9IGlucHV0c1swXQot
ICAgIGZsZXhJbnB1dCA9IGlucHV0c1sxXQotCi0gICAgIyBEbyBpdC4gY2hlY2tfY2FsbCBpcyBu
ZXcgaW4gMi41LCBzbyBzaW11bGF0ZSBpdHMgYmVoYXZpb3Igd2l0aCBjYWxsIGFuZAotICAgICMg
YXNzZXJ0LgotICAgIG91dGZpbGUgPSBvcGVuKG91dHB1dCwgJ3diJykKLSAgICBwMSA9IHN1YnBy
b2Nlc3MuUG9wZW4oWydmbGV4JywgJy10JywgZmxleElucHV0XSwgc3Rkb3V0PXN1YnByb2Nlc3Mu
UElQRSkKLSAgICBwMiA9IHN1YnByb2Nlc3MuUG9wZW4oWydwZXJsJywgbWFrZXRva2VuaXplcl0s
IHN0ZGluPXAxLnN0ZG91dCwgc3Rkb3V0PW91dGZpbGUpCi0KLSAgICByMSA9IHAxLndhaXQoKQot
ICAgIHIyID0gcDIud2FpdCgpCi0gICAgYXNzZXJ0IHIxID09IDAKLSAgICBhc3NlcnQgcjIgPT0g
MAotCi0gICAgcmV0dXJuIDAKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHN5
cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDgzMDVmY2UuLjYxNDA3
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTgyNjMsNyArODI2Myw2IEBACiAgICAgICAgICAgICAn
PChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YTUxWaWV3ZXJKUy5oJywKICAg
ICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL1hQYXRoR3Jh
bW1hci5jcHAnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvWFBhdGhHcmFtbWFyLmgnLAotICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvdG9rZW5pemVyLmNwcCcsCiAgICAgICAgIF0sCiAgICAgICAgICdl
eHBvcnRfZmlsZV9nZW5lcmF0b3JfZmlsZXMnOiBbCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FeHBvcnRGaWxlR2VuZXJhdG9yLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGQwY2YzOTUu
LmY4OTdmYWIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC0zNTQyMiwxMCArMzU0MjIsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcdG9rZW5pemVyLmZsZXgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xXZWJLaXRDU1NGaWx0ZXJW
YWx1ZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhkZjg0ZDMuLmNhMjQ1MTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTg5NDYsNyArODk0Niw2IEBACiAJCTY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFt
bWFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NHcmFtbWFy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2NTgxNDcwOUQxMzA0MzAwMEU2
MUQ3IC8qIENTU1ZhbHVlS2V5d29yZHMuZ3BlcmYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENT
U1ZhbHVlS2V5d29yZHMuZ3BlcmY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4
MTQ4MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NWYWx1ZUtleXdvcmRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTY1NjU4MTRDMDlEMTMwNDMwMDBFNjFENyAvKiB0b2tlbml6ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRva2VuaXplci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAvKiBDaGFy
c2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hhcnNl
dERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTY1ODFBRTA5RDE0RUU2
MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVzZXJBZ2VudFN0eWxlU2hlZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTY1NjU4MUFGMDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJBZ2Vu
dFN0eWxlU2hlZXRzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQ1
Myw3ICsxMDQ1Miw2IEBACiAJCTkzQ0E0QzlEMDlERjkzRkEwMERGODY3NyAvKiBtYWtldmFsdWVz
LnBsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IG1ha2V2YWx1ZXMucGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzQ0E0QzlGMDlERjkzRkEwMERGODY3NyAvKiBxdWlya3MuY3NzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IHF1aXJrcy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQ0E0Q0EyMDlERjkzRkEwMERGODY3NyAvKiBzdmcuY3NzICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IHN2Zy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQ0E0Q0Ez
MDlERjkzRkEwMERGODY3NyAvKiB0b2tlbml6ZXIuZmxleCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSB0b2tlbml6ZXIuZmxleDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDQ0YwMjYw
QUY2QzUyOTAwMDE4RTg5IC8qIE5hdmlnYXRpb25BY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTmF2aWdhdGlvbkFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0NDRjA1RjBBRjZDQTc2MDAwMThFODkgLyogTmF2aWdhdGlvbkFjdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXZpZ2F0aW9uQWN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEM0MxNTgwRjk3QTlENzAwNTNDMDEz
IC8qIERPTUhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUhUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNTQ3MSw3ICsxNTQ2OSw2IEBACiAJCQkJNjU2NTgxRTcwOUQxNTA4RDAwMEU2MUQ3IC8qIFNW
R0VsZW1lbnRGYWN0b3J5LmggKi8sCiAJCQkJNjU2NTgxRTgwOUQxNTA4RDAwMEU2MUQ3IC8qIFNW
R05hbWVzLmNwcCAqLywKIAkJCQk2NTY1ODFFOTA5RDE1MDhEMDAwRTYxRDcgLyogU1ZHTmFtZXMu
aCAqLywKLQkJCQk2NTY1ODE0QzA5RDEzMDQzMDAwRTYxRDcgLyogdG9rZW5pemVyLmNwcCAqLywK
IAkJCQk2NTY1ODFBRTA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHMuaCAq
LywKIAkJCQk2NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNE
YXRhLmNwcCAqLywKIAkJCQkxQTE0MTRCMzEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZh
bWlseU5hbWVzLmNwcCAqLywKQEAgLTIwOTc4LDcgKzIwOTc1LDYgQEAKIAkJCQlCMjIyN0IwMjBE
MDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTUHJvcGVydHlOYW1lcy5pbiAqLywKIAkJCQlCMjIyN0Iw
MzBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi8sCiAJCQkJQjIy
MjdCMDQwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1ZhbHVlS2V5d29yZHMuaW4gKi8sCi0JCQkJ
OTNDQTRDQTMwOURGOTNGQTAwREY4Njc3IC8qIHRva2VuaXplci5mbGV4ICovLAogCQkJCUJDNUVD
MTc2MEE1MDdFM0UwMDYwMDdGNSAvKiB2aWV3LXNvdXJjZS5jc3MgKi8sCiAJCQkJMzEwNjAzNkMx
NDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmNwcCAqLywKIAkJCQkzMTA2
MDM2RDE0MzI3RDJFMDBBQkY0QkEgLyogV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAKaW5kZXggNzk0MGIyNy4uNTdhMTAxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKQEAgLTE3Nyw4ICsxNzcsMjQgQEAgaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpl
bnN1cmVDU1NWYWx1ZVBvb2woKQogICAgICAgICBtX2Nzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9v
bDo6Y3JlYXRlKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgVUNoYXIgbG93ZXJjYXNlQ2hhcmFjdGVy
KFVDaGFyIGNocikKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciBjb21w
YXJpbmcgYW55IGlucHV0IGNoYXJhY3RlcgorICAgIC8vIHRvIGEgbG93ZXJjYXNlIEVuZ2xpc2gg
Y2hhcmFjdGVyLiBUaGUgaXNDYXNlbGVzc0VxdWFsIGJlbG93CisgICAgLy8gc2hvdWxkIGJlIHVz
ZWQgZm9yIHJlZ3VsYXIgY29tcGFyaXNvbiwgYnV0IHN3aXRjaCBzdGF0ZW1lbnRzCisgICAgLy8g
cmVxdWlyZSBkaXJlY3QgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGNociB8IDB4
MjA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Nhc2VsZXNzRXF1YWwoVUNoYXIgY3NzQ2hh
cmFjdGVyLCBVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgLy8gVGhpcyBpcyBhbiBvdmVybG9hZGVk
IGZ1bmN0aW9uLCB0aGlzIGluc3RhbmNlIGNoZWNrcyBjaGFyYWN0ZXJzLgorICAgIEFTU0VSVChj
aGFyYWN0ZXIgPj0gJ2EnICYmIGNoYXJhY3RlciA8PSAneicpOworICAgIHJldHVybiBMSUtFTFko
bG93ZXJjYXNlQ2hhcmFjdGVyKGNzc0NoYXJhY3RlcikgPT0gY2hhcmFjdGVyKTsKK30KKwogLy8g
RklYTUU6IENhbiBtX3BhcnNlZFByb3BlcnRpZXMganVzdCBiZSBhIFZlY3Rvcj8KLSAgICAKKwog
Q1NTUGFyc2VyOjpDU1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5nKQogICAgIDogbV9zdHJpY3Qo
c3RyaWN0UGFyc2luZykKICAgICAsIG1faW1wb3J0YW50KGZhbHNlKQpAQCAtMjAwLDcgKzIxNiw5
IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICAsIG1fcHJv
cGVydHlSYW5nZShVSU5UX01BWCwgVUlOVF9NQVgpCiAgICAgLCBtX3J1bGVSYW5nZU1hcCgwKQog
ICAgICwgbV9jdXJyZW50UnVsZURhdGEoMCkKLSAgICAsIHl5X3N0YXJ0KDEpCisgICAgLCBtX3Bh
cnNpbmdNb2RlKE5vcm1hbE1vZGUpCisgICAgLCBtX2RhdGEoMCkKKyAgICAsIG1fdG9rZW4oMCkK
ICAgICAsIG1fbGluZU51bWJlcigwKQogICAgICwgbV9sYXN0U2VsZWN0b3JMaW5lTnVtYmVyKDAp
CiAgICAgLCBtX2FsbG93SW1wb3J0UnVsZXModHJ1ZSkKQEAgLTI0MiwyNyArMjYwLDIyIEBAIHZv
aWQgQ1NTUGFyc2VyU3RyaW5nOjpsb3dlcigpCiAKIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNl
cihjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyKiBz
dWZmaXgpCiB7Ci0gICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSArIHN0cmxlbihwcmVm
aXgpICsgc3RybGVuKHN1ZmZpeCkgKyAyOworICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3Ro
KCkgKyBzdHJsZW4ocHJlZml4KSArIHN0cmxlbihzdWZmaXgpICsgMTsKIAotICAgIG1fZGF0YSA9
IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW2xlbmd0aF0pOworICAgIG1fZGF0YVN0YXJ0ID0gYWRv
cHRBcnJheVB0cihuZXcgVUNoYXJbbGVuZ3RoXSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0cmxlbihwcmVmaXgpOyBpKyspCi0gICAgICAgIG1fZGF0YVtpXSA9IHByZWZpeFtpXTsK
KyAgICAgICAgbV9kYXRhU3RhcnRbaV0gPSBwcmVmaXhbaV07CiAKLSAgICBtZW1jcHkobV9kYXRh
LmdldCgpICsgc3RybGVuKHByZWZpeCksIHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5n
dGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgIG1lbWNweShtX2RhdGFTdGFydC5nZXQoKSArIHN0
cmxlbihwcmVmaXgpLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RybGVuKHByZWZpeCkgKyBzdHJp
bmcubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgZW5kID0gc3RhcnQgKyBzdHJsZW4oc3VmZml4KTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQotICAgICAgICBtX2Rh
dGFbaV0gPSBzdWZmaXhbaSAtIHN0YXJ0XTsKKyAgICAgICAgbV9kYXRhU3RhcnRbaV0gPSBzdWZm
aXhbaSAtIHN0YXJ0XTsKIAotICAgIG1fZGF0YVtsZW5ndGggLSAxXSA9IDA7Ci0gICAgbV9kYXRh
W2xlbmd0aCAtIDJdID0gMDsKKyAgICBtX2RhdGFTdGFydFtsZW5ndGggLSAxXSA9IDA7CiAKLSAg
ICB5eV9ob2xkX2NoYXIgPSAwOwotICAgIHl5bGVuZyA9IDA7Ci0gICAgeXl0ZXh0ID0gbV9kYXRh
LmdldCgpOwotICAgIHl5X2NfYnVmX3AgPSB5eXRleHQ7Ci0gICAgeXlfaG9sZF9jaGFyID0gKnl5
X2NfYnVmX3A7CisgICAgbV9kYXRhID0gbV90b2tlblN0YXJ0ID0gbV9kYXRhU3RhcnQuZ2V0KCk7
CiAgICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CiB9CiAKQEAgLTQyMiw3ICs0MzUsNyBAQCBzdGF0
aWMgYm9vbCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBkZWNsYXJhdGlvbiwgaW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
OwotICAgIGlmIChsZW5ndGggPiAyICYmIChjaGFyYWN0ZXJzW2xlbmd0aCAtIDJdIHwgMHgyMCkg
PT0gJ3AnICYmIChjaGFyYWN0ZXJzW2xlbmd0aCAtIDFdIHwgMHgyMCkgPT0gJ3gnKSB7CisgICAg
aWYgKGxlbmd0aCA+IDIgJiYgaXNDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMl0s
ICdwJykgJiYgaXNDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMV0sICd4JykpIHsK
ICAgICAgICAgbGVuZ3RoIC09IDI7CiAgICAgICAgIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYOwogICAgIH0gZWxzZSBpZiAobGVuZ3RoID4gMSAmJiBjaGFyYWN0ZXJzW2xlbmd0aCAt
IDFdID09ICclJykgewpAQCAtOTA2LDEwICs5MTksMTAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOiAgICAgICAgICAgICAvLyBzdGF0aWMgfCByZWxhdGl2
ZSB8IGFic29sdXRlIHwgZml4ZWQgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZVN0YXRpYyB8fAotICAgICAgICAgICAgIGlkID09IENTU1ZhbHVlUmVsYXRpdmUgfHwKLSAgICAg
ICAgICAgICBpZCA9PSBDU1NWYWx1ZUFic29sdXRlIHx8Ci0gICAgICAgICAgICAgaWQgPT0gQ1NT
VmFsdWVGaXhlZCkKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlU3RhdGljCisgICAgICAgICAg
ICB8fCBpZCA9PSBDU1NWYWx1ZVJlbGF0aXZlCisgICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1
ZUFic29sdXRlCisgICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUZpeGVkKQogICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIApAQCAtOTE5LDExICs5
MzIsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlOgogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRSZWdpb25CcmVha0JlZm9yZToKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVl
QXV0byB8fAotICAgICAgICAgICAgIGlkID09IENTU1ZhbHVlQWx3YXlzIHx8Ci0gICAgICAgICAg
ICAgaWQgPT0gQ1NTVmFsdWVBdm9pZCB8fAotICAgICAgICAgICAgIGlkID09IENTU1ZhbHVlTGVm
dCB8fAotICAgICAgICAgICAgIGlkID09IENTU1ZhbHVlUmlnaHQpCisgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUF1dG8KKyAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlQWx3YXlzCisgICAg
ICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUF2b2lkCisgICAgICAgICAgICB8fCBpZCA9PSBDU1NW
YWx1ZUxlZnQKKyAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlUmlnaHQpCiAgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCkBAIC05MzUsOCArOTQ4
LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6ICAg
ICAgICAgIC8vIHNob3cgfCBoaWRlIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVTaG93IHx8Ci0gICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVIaWRlKQorICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVTaG93CisgICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUhpZGUpCiAg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCkBAIC05
NDUsMTEgKzk1OCwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgcmV0dXJuIHBhcnNlQ29udGVudChwcm9wSWQsIGltcG9y
dGFudCk7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2hpdGVTcGFjZTogICAgICAgICAgLy8gbm9y
bWFsIHwgcHJlIHwgbm93cmFwIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b3JtYWwgfHwKLSAgICAgICAgICAgIGlkID09IENTU1ZhbHVlUHJlIHx8Ci0gICAgICAgICAgICBp
ZCA9PSBDU1NWYWx1ZVByZVdyYXAgfHwKLSAgICAgICAgICAgIGlkID09IENTU1ZhbHVlUHJlTGlu
ZSB8fAotICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVOb3dyYXApCisgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZU5vcm1hbAorICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVQcmUKKyAgICAg
ICAgICAgIHx8IGlkID09IENTU1ZhbHVlUHJlV3JhcAorICAgICAgICAgICAgfHwgaWQgPT0gQ1NT
VmFsdWVQcmVMaW5lCisgICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZU5vd3JhcCkKICAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTE0MDgs
NyArMTQyMSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ291bnRlcihwcm9wSWQsIDEsIGlt
cG9ydGFudCk7CiAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
Ci0gICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVyUmVzZXQ6ICAgICAgICAvLyBbIDxpZGVudGlm
aWVyPiA8aW50ZWdlcj4/IF0rIHwgbm9uZSB8IGluaGVyaXQKKyAgICBjYXNlIENTU1Byb3BlcnR5
Q291bnRlclJlc2V0OiAgICAgICAgLy8gWyA8aWRlbnRpZmllcj4gPGludGVnZXI+PyBdKyB8IG5v
bmUgfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VDb3VudGVyKHByb3BJZCwgMCwgaW1wb3J0YW50KTsKICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB0cnVlOwpAQCAtMjAwOSw3ICsyMDIyLDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOgogICAgICAgICBpZiAoKGlkID49IENTU1ZhbHVl
QXF1YSAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8IGlkID09IENTU1ZhbHVlTWVudQog
ICAgICAgICAgICAgfHwgKGlkID49IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IgJiYgaWQg
PCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgIW1fc3RyaWN0KSkgewotICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb2xvcigpOwog
ICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQpAQCAtMjg3OCw3ICsyODkxLDcgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRDb2xvcigpCiAgICAgaW50
IGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVl
V2Via2l0VGV4dCB8fCAoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlkIDw9IENTU1ZhbHVlV2luZG93
dGV4dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9y
IHx8CiAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUdyZXkgJiYgaWQgPCBDU1NWYWx1ZVdlYmtpdFRl
eHQgJiYgIW1fc3RyaWN0KSkKLSAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShpZCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKGlkKTsKICAgICByZXR1cm4gcGFyc2VDb2xvcigpOwogfQogCkBAIC00
NzY5LDEwICs0NzgyLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCQShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIGlmIChsZW5ndGggPCA1KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGNoYXJhY3RlcnNbNF0gPT0gJygnCi0g
ICAgICAgICYmIChjaGFyYWN0ZXJzWzBdIHwgMHgyMCkgPT0gJ3InCi0gICAgICAgICYmIChjaGFy
YWN0ZXJzWzFdIHwgMHgyMCkgPT0gJ2cnCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzJdIHwgMHgy
MCkgPT0gJ2InCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzNdIHwgMHgyMCkgPT0gJ2EnOworICAg
ICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1swXSwgJ3InKQorICAgICAgICAmJiBp
c0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwgJ2cnKQorICAgICAgICAmJiBpc0Nhc2VsZXNz
RXF1YWwoY2hhcmFjdGVyc1syXSwgJ2InKQorICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hh
cmFjdGVyc1szXSwgJ2EnKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0IoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTQ3ODAsOSArNDc5Myw5
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgaWYgKGxlbmd0aCA8IDQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gY2hhcmFjdGVyc1szXSA9PSAnKCcKLSAgICAgICAgJiYgKGNoYXJh
Y3RlcnNbMF0gfCAweDIwKSA9PSAncicKLSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMV0gfCAweDIw
KSA9PSAnZycKLSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMl0gfCAweDIwKSA9PSAnYic7CisgICAg
ICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAncicpCisgICAgICAgICYmIGlz
Q2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzFdLCAnZycpCisgICAgICAgICYmIGlzQ2FzZWxlc3NF
cXVhbChjaGFyYWN0ZXJzWzJdLCAnYicpOwogfQogCiBib29sIENTU1BhcnNlcjo6ZmFzdFBhcnNl
Q29sb3IoUkdCQTMyJiByZ2IsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzdHJpY3QpCkBAIC01
MTY5LDggKzUxODIsOCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJz
ZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgaQogICAgICAgICAgICAgICAg
IHBhcnNlZENvbG9yID0gcGFyc2VDb2xvcih2YWwpOwogCiAgICAgICAgICAgICBpZiAoIXBhcnNl
ZENvbG9yIHx8ICFjb250ZXh0LmFsbG93Q29sb3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
IC8vIFRoaXMgdmFsdWUgaXMgbm90IGEgY29sb3Igb3IgbGVuZ3RoIGFuZCBpcyBpbnZhbGlkIG9y
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBhIGNvbG9yLCBidXQgYSBj
b2xvciBpc24ndCBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7ICAgLy8gVGhpcyB2YWx1ZSBpcyBub3QgYSBjb2xvciBvciBsZW5ndGggYW5kIGlzIGludmFs
aWQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBhIGNvbG9yLCBidXQg
YSBjb2xvciBpc24ndCBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCiAKICAgICAgICAgICAgIGNvbnRl
eHQuY29tbWl0Q29sb3IocGFyc2VkQ29sb3IucmVsZWFzZSgpKTsKICAgICAgICAgfQpAQCAtNTQ1
OCw3ICs1NDcxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UoaW50IHByb3BJ
ZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0KQogCiBzdGF0aWMgYm9vbCBpc0JvcmRlckltYWdl
UmVwZWF0S2V5d29yZChpbnQgaWQpCiB7Ci0gICAgIHJldHVybiBpZCA9PSBDU1NWYWx1ZVN0cmV0
Y2ggfHwgaWQgPT0gQ1NTVmFsdWVSZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSB8fCBpZCA9
PSBDU1NWYWx1ZVJvdW5kOworICAgIHJldHVybiBpZCA9PSBDU1NWYWx1ZVN0cmV0Y2ggfHwgaWQg
PT0gQ1NTVmFsdWVSZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSB8fCBpZCA9PSBDU1NWYWx1
ZVJvdW5kOwogfQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVJlcGVhdChSZWZQ
dHI8Q1NTVmFsdWU+JiByZXN1bHQpCkBAIC01NTQzLDcgKzU1NTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBtX2xlZnQgPSBtX2Nzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobV9yaWdodC0+Z2V0
RG91YmxlVmFsdWUoKSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpbV9yaWdodC0+cHJp
bWl0aXZlVHlwZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1fbGVmdCkKLSAgICAgICAg
ICAgICBtX2xlZnQgPSBtX2Nzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobV9yaWdodC0+Z2V0RG91
YmxlVmFsdWUoKSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpbV9yaWdodC0+cHJpbWl0
aXZlVHlwZSgpKTsKKyAgICAgICAgICAgIG1fbGVmdCA9IG1fY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShtX3JpZ2h0LT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyltX3JpZ2h0LT5wcmltaXRpdmVUeXBlKCkpOwogCiAgICAgICAgIC8vIE5vdyBidWlsZCBh
IHJlY3QgdmFsdWUgdG8gaG9sZCBhbGwgZm91ciBvZiBvdXIgcHJpbWl0aXZlIHZhbHVlcy4KICAg
ICAgICAgUmVmUHRyPFF1YWQ+IHF1YWQgPSBRdWFkOjpjcmVhdGUoKTsKQEAgLTU2NTksNyArNTY3
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fbGVmdCA9IG1fY3NzVmFsdWVQb29sLT5jcmVh
dGVWYWx1ZShtX3JpZ2h0LT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcyltX3JpZ2h0LT5wcmltaXRpdmVUeXBlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlm
ICghbV9sZWZ0KQotICAgICAgICAgICAgIG1fbGVmdCA9IG1fY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShtX3JpZ2h0LT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyltX3JpZ2h0LT5wcmltaXRpdmVUeXBlKCkpOworICAgICAgICAgICAgbV9sZWZ0ID0gbV9j
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKG1fcmlnaHQtPmdldERvdWJsZVZhbHVlKCksIChDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fcmlnaHQtPnByaW1pdGl2ZVR5cGUoKSk7CiAKICAg
ICAgICAgLy8gTm93IGJ1aWxkIGEgcXVhZCB2YWx1ZSB0byBob2xkIGFsbCBmb3VyIG9mIG91ciBw
cmltaXRpdmUgdmFsdWVzLgogICAgICAgICBSZWZQdHI8UXVhZD4gcXVhZCA9IFF1YWQ6OmNyZWF0
ZSgpOwpAQCAtNjYxOSw3ICs2NjMyLDcgQEAgc3RhdGljIHZvaWQgZmlsdGVySW5mb0Zvck5hbWUo
Y29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBuYW1lLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZToKICAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2VwaWEoIikpCiAgICAgICAgIGZpbHRl
clR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb247CiAgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNhdHVyYXRlKCIpKQotICAgICAgIGZp
bHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb247
CisgICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0
ZXJPcGVyYXRpb247CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImh1ZS1y
b3RhdGUoIikpCiAgICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVl
Um90YXRlRmlsdGVyT3BlcmF0aW9uOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJpbnZlcnQoIikpCkBAIC03MjIyLDIzNiArNzIzNSwxMjAyIEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB5eWVycm9yKGNvbnN0IGNoYXIqKSB7IHJldHVy
biAxOyB9Ci0KICNkZWZpbmUgRU5EX1RPS0VOIDAKIAogI2luY2x1ZGUgIkNTU0dyYW1tYXIuaCIK
IAorZW51bSBDaGFyYWN0ZXJUeXBlIHsKKyAgICAvLyBUeXBlcyBmb3IgdGhlIG1haW4gc3dpdGNo
LgorCisgICAgLy8gVGhlIGZpcnN0IDQgdHlwZXMgbXVzdCBiZSBncm91cGVkIHRvZ2V0aGVyLCBh
cyB0aGV5CisgICAgLy8gcmVwcmVzZW50IHRoZSBhbGxvd2VkIGNoYXJzIGluIGFuIGlkZW50aWZp
ZXIuCisgICAgQ2hhcmFjdGVyQ2FzZWxlc3NVLAorICAgIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKKyAgICBDaGFyYWN0ZXJOdW1iZXIsCisgICAgQ2hhcmFjdGVyRGFzaCwKKworICAgIENoYXJh
Y3Rlck90aGVyLAorICAgIENoYXJhY3RlcldoaXRlU3BhY2UsCisgICAgQ2hhcmFjdGVyRW5kTWVk
aWFRdWVyeSwKKyAgICBDaGFyYWN0ZXJFbmROdGhDaGlsZCwKKyAgICBDaGFyYWN0ZXJRdW90ZSwK
KyAgICBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCisgICAgQ2hhcmFjdGVySGFzaG1hcmssCisg
ICAgQ2hhcmFjdGVyRG9sbGFyLAorICAgIENoYXJhY3RlckFzdGVyaXNrLAorICAgIENoYXJhY3Rl
clBsdXMsCisgICAgQ2hhcmFjdGVyRG90LAorICAgIENoYXJhY3RlclNsYXNoLAorICAgIENoYXJh
Y3Rlckxlc3MsCisgICAgQ2hhcmFjdGVyQXQsCisgICAgQ2hhcmFjdGVyQmFja1NsYXNoLAorICAg
IENoYXJhY3RlclhvciwKKyAgICBDaGFyYWN0ZXJWZXJ0aWNhbEJhciwKKyAgICBDaGFyYWN0ZXJU
aWxkZSwKK307CisKKy8vIDEyOCBBU0NJSSBjb2Rlcworc3RhdGljIGNvbnN0IENoYXJhY3RlclR5
cGUgdHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1sxMjhdID0geworLyogICAwIC0gTnVsbCAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICAxIC0gU3RhcnQgb2YgSGVhZGluZyAgICov
IENoYXJhY3Rlck90aGVyLAorLyogICAyIC0gU3RhcnQgb2YgVGV4dCAgICAgICovIENoYXJhY3Rl
ck90aGVyLAorLyogICAzIC0gRW5kIG9mIFRleHQgICAgICAgICovIENoYXJhY3Rlck90aGVyLAor
LyogICA0IC0gRW5kIG9mIFRyYW5zbS4gICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA1IC0g
RW5xdWlyeSAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA2IC0gQWNrbm93bGVk
Z21lbnQgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA3IC0gQmVsbCAgICAgICAgICAgICAg
ICovIENoYXJhY3Rlck90aGVyLAorLyogICA4IC0gQmFjayBTcGFjZSAgICAgICAgICovIENoYXJh
Y3Rlck90aGVyLAorLyogICA5IC0gSG9yaXpvbnRhbCBUYWIgICAgICovIENoYXJhY3RlcldoaXRl
U3BhY2UsCisvKiAgMTAgLSBMaW5lIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFj
ZSwKKy8qICAxMSAtIFZlcnRpY2FsIFRhYiAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAx
MiAtIEZvcm0gRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDEzIC0g
Q2FycmlhZ2UgUmV0dXJuICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAgMTQgLSBTaGlm
dCBPdXQgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTUgLSBTaGlmdCBJbiAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTYgLSBEYXRhIExpbmUgRXNjYXBlICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgMTcgLSBEZXZpY2UgQ29udHJvbCAxICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgMTggLSBEZXZpY2UgQ29udHJvbCAyICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgMTkgLSBEZXZpY2UgQ29udHJvbCAzICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjAgLSBE
ZXZpY2UgQ29udHJvbCA0ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjEgLSBOZWdhdGl2ZSBB
Y2suICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjIgLSBTeW5jaHJvbm91cyBJZGxlICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjMgLSBFbmQgb2YgVHJhbnNtaXQgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAgMjQgLSBDYW5jZWwgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgMjUgLSBFbmQgb2YgTWVkaXVtICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjYg
LSBTdWJzdGl0dXRlICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjcgLSBFc2NhcGUg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjggLSBGaWxlIFNlcGFyYXRvciAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjkgLSBHcm91cCBTZXBhcmF0b3IgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCisvKiAgMzAgLSBSZWNvcmQgU2VwYXJhdG9yICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCisvKiAgMzEgLSBVbml0IFNlcGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAg
MzIgLSBTcGFjZSAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAzMyAt
ICEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCisvKiAgMzQg
LSAiICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCisvKiAgMzUgLSAjICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySGFzaG1hcmssCisvKiAgMzYgLSAkICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyRG9sbGFyLAorLyogIDM3IC0gJSAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck90aGVyLAorLyogIDM4IC0gJiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ck90aGVyLAorLyogIDM5IC0gJyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclF1b3RlLAor
LyogIDQwIC0gKCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDQxIC0g
KSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVuZE50aENoaWxkLAorLyogIDQyIC0gKiAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlckFzdGVyaXNrLAorLyogIDQzIC0gKyAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlclBsdXMsCisvKiAgNDQgLSAsICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNDUgLSAtICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyRGFzaCwKKy8qICA0NiAtIC4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb3QsCisv
KiAgNDcgLSAvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyU2xhc2gsCisvKiAgNDggLSAw
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDQ5IC0gMSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1MCAtIDIgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTEgLSAzICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyTnVtYmVyLAorLyogIDUyIC0gNCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51
bWJlciwKKy8qICA1MyAtIDUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisv
KiAgNTQgLSA2ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU1IC0g
NyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NiAtIDggICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTcgLSA5ICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU4IC0gOiAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogIDU5IC0gOyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVu
ZE1lZGlhUXVlcnksCisvKiAgNjAgLSA8ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTGVz
cywKKy8qICA2MSAtID0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2
MiAtID4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2MyAtID8gICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2NCAtIEAgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJBdCwKKy8qICA2NSAtIEEgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjYgLSBCICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY3IC0gQyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2OCAtIEQgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjkgLSBFICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDcwIC0gRiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MSAtIEcgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzIgLSBIICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDczIC0gSSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NCAtIEogICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzUgLSBLICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc2IC0gTCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NyAtIE0gICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzggLSBOICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc5IC0gTyAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MCAtIFAgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODEgLSBRICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgyIC0gUiAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MyAtIFMgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODQgLSBUICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg1IC0gVSAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlckNhc2VsZXNzVSwKKy8qICA4NiAtIFYgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODcgLSBXICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg4IC0gWCAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4OSAtIFkgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTAgLSBaICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDkxIC0gWyAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDkyIC0gXCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlckJhY2tTbGFzaCwKKy8qICA5MyAtIF0gICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKKy8qICA5NCAtIF4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJYb3IsCisvKiAgOTUgLSBfICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogIDk2IC0gYCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAor
LyogIDk3IC0gYSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
Ky8qICA5OCAtIGIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
CisvKiAgOTkgLSBjICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAorLyogMTAwIC0gZCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKKy8qIDEwMSAtIGUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCisvKiAxMDIgLSBmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogMTAzIC0gZyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qIDEwNCAtIGggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAxMDUgLSBpICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogMTA2IC0gaiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qIDEwNyAtIGsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAxMDggLSBsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogMTA5IC0gbSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qIDExMCAtIG4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAxMTEgLSBvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogMTEyIC0gcCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDExMyAtIHEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMTQgLSByICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogMTE1IC0gcyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qIDExNiAtIHQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTcgLSB1ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyQ2FzZWxlc3NVLAorLyogMTE4IC0gdiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDExOSAtIHcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMjAgLSB4ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogMTIxIC0geSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qIDEyMiAtIHogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMjMgLSB7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyRW5kTWVkaWFRdWVyeSwKKy8qIDEyNCAtIHwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJWZXJ0aWNhbEJhciwKKy8qIDEyNSAtIH0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJP
dGhlciwKKy8qIDEyNiAtIH4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJUaWxkZSwKKy8q
IDEyNyAtIERlbGV0ZSAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKK307CisKKy8vIFV0
aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgQ1NTIHRva2VuaXplci4KKworc3RhdGljIGlubGluZSBi
b29sIGlzQ1NTTGV0dGVyKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49IDEyOCB8fCB0
eXBlc09mQVNDSUlDaGFyYWN0ZXJzW2Nocl0gPD0gQ2hhcmFjdGVyRGFzaDsKK30KKworc3RhdGlj
IGlubGluZSBib29sIGlzQ1NTRXNjYXBlKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49
ICcgJyAmJiBjaHIgIT0gMTI3OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNVUklMZXR0ZXIo
VUNoYXIgY2hyKQoreworICAgIHJldHVybiAoY2hyID49ICcqJyAmJiBjaHIgIT0gMTI3KSB8fCAo
Y2hyID49ICcjJyAmJiBjaHIgPD0gJyYnKSB8fCBjaHIgPT0gJyEnOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2goVUNoYXIqIGRhdGEpCit7CisgICAg
cmV0dXJuIGlzQVNDSUlBbHBoYShkYXRhWzBdKSB8fCBkYXRhWzBdID09ICdfJyB8fCBkYXRhWzBd
ID49IDEyOAorICAgICAgICB8fCAoZGF0YVswXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKGRhdGFb
MV0pKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciogY3Nz
U3RyaW5nLCBjb25zdCBjaGFyKiBjb25zdGFudFN0cmluZykKK3sKKyAgICAvLyBDb21wYXJlIGFu
IFVDaGFyIG1lbW9yeSBkYXRhIHdpdGggYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLgorICAgIC8v
IFRoaXMgaXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbiwgdGhpcyBpbnN0YW5jZSBjaGVja3Mgc3Ry
aW5ncy4KKyAgICAvLyBUaGUgdHdvIGZ1bmN0aW9ucyBjYW5ub3QgYmUgZ3JvdXBlZCB0b2dldGhl
ciwgc2luY2UgdGhpcyBvbmUgZGVwZW5kcworICAgIC8vIG9uIGlzQ1NTTGV0dGVyLCB3aGlsZSB0
aGUgb3RoZXIgaXMgdXNlZCBpbiBvdGhlciBwbGFjZXMuCisgICAgZG8geworICAgICAgICAvLyBU
aGUgaW5wdXQgbXVzdCBiZSBwYXJ0IG9mIGFuIGlkZW50aWZpZXIgaWYgY29uc3RhbnRDaGFyIG9y
IGNvbnN0U3RyaW5nCisgICAgICAgIC8vIGNvbnRhaW5zICctJy4gT3RoZXJ3aXNlIGxvd2VyY2Fz
ZUNoYXJhY3RlcignXHInKSB3b3VsZCBiZSBlcXVhbCB0byAnLScuCisgICAgICAgIEFTU0VSVCgo
KmNvbnN0YW50U3RyaW5nID49ICdhJyAmJiAqY29uc3RhbnRTdHJpbmcgPD0gJ3onKSB8fCAqY29u
c3RhbnRTdHJpbmcgPT0gJy0nKTsKKyAgICAgICAgQVNTRVJUKCpjb25zdGFudFN0cmluZyAhPSAn
LScgfHwgaXNDU1NMZXR0ZXIoKmNzc1N0cmluZykpOworICAgICAgICBpZiAobG93ZXJjYXNlQ2hh
cmFjdGVyKCpjc3NTdHJpbmcrKykgIT0gKCpjb25zdGFudFN0cmluZysrKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9IHdoaWxlICgqY29uc3RhbnRTdHJpbmcpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgVUNoYXIqIGNoZWNrRXNjYXBlKFVDaGFyKiBkYXRhKQorewor
ICAgIEFTU0VSVCgqZGF0YSA9PSAnXFwnKTsKKworICAgICsrZGF0YTsKKyAgICBpZiAoIWlzQ1NT
RXNjYXBlKCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaXNBU0NJSUhleERp
Z2l0KCpkYXRhKSkgeworICAgICAgICBpbnQgbGVuZ3RoID0gNjsKKworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICArK2RhdGE7CisgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqZGF0
YSkgJiYgLS1sZW5ndGgpOworCisgICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBl
c2NhcGUgc2VxdWVuY2UuCisgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqZGF0YSkpCisgICAgICAg
ICAgICArK2RhdGE7CisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0KKyAgICByZXR1cm4gZGF0
YSArIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgVUNoYXIqIHNraXBXaGl0ZVNwYWNlcyhVQ2hhciog
ZGF0YSkKK3sKKyAgICB3aGlsZSAoKmRhdGEgPD0gJyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0
ZXJzWypkYXRhXSA9PSBDaGFyYWN0ZXJXaGl0ZVNwYWNlKSkKKyAgICAgICAgKytkYXRhOworICAg
IHJldHVybiBkYXRhOworfQorCisvLyBNYWluIENTUyB0b2tlbml6ZXIgZnVuY3Rpb25zLgorCitp
bmxpbmUgYm9vbCBDU1NQYXJzZXI6OmlzSWRlbnRpZmllclN0YXJ0KCkKK3sKKyAgICAvLyBDaGVj
ayB3aGV0aGVyIGFuIGlkZW50aWZpZXIgaXMgc3RhcnRlZC4KKyAgICByZXR1cm4gaXNJZGVudGlm
aWVyU3RhcnRBZnRlckRhc2goKCptX2RhdGEgIT0gJy0nKSA/IG1fZGF0YSA6IG1fZGF0YSArIDEp
OworfQorCitpbmxpbmUgVUNoYXIqIENTU1BhcnNlcjo6Y2hlY2tTdHJpbmcoVUNoYXIqIGRhdGEs
IFVDaGFyIHF1b3RlKQoreworICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXZlcnQgZXNjYXBlIHNl
cXVlbmNlcywgc3RyaW5ncworICAgIC8vIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSBwYXJzaW5n
LgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqZGF0YSA9PSBxdW90
ZSkpIHsKKyAgICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwuCisgICAg
ICAgICAgICByZXR1cm4gZGF0YSArIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZ
KCpkYXRhIDwgMTQgJiYgKCEqZGF0YSB8fCAqZGF0YSA9PSAxMCB8fCAoKmRhdGEgfCAweDEpID09
IDEzKSkpIHsKKyAgICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIGZhaWxlZCBmb3IgY2hh
cmFjdGVyIDAsIDEwLCAxMiBvciAxMy4KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKExJS0VMWShkYXRhWzBdICE9ICdcXCcpKQorICAgICAgICAgICAgKytk
YXRhOworICAgICAgICBlbHNlIGlmIChkYXRhWzFdID09ICdcbicgfHwgZGF0YVsxXSA9PSAnXGYn
KQorICAgICAgICAgICAgZGF0YSArPSAyOworICAgICAgICBlbHNlIGlmIChkYXRhWzFdID09ICdc
cicpCisgICAgICAgICAgICBkYXRhICs9IGRhdGFbMl0gPT0gJ1xuJyA/IDMgOiAyOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEgPSBjaGVja0VzY2FwZShkYXRhKTsKKyAgICAgICAg
ICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBDU1NQYXJzZXI6OnBhcnNlRXNjYXBlKFVDaGFyKiYgcmVzdWx0KQorewor
ICAgIEFTU0VSVCgqbV9kYXRhID09ICdcXCcgJiYgaXNDU1NFc2NhcGUobV9kYXRhWzFdKSk7CisK
KyAgICArK21fZGF0YTsKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCptX2RhdGEpKSB7CisgICAg
ICAgIHVuc2lnbmVkIHVuaWNvZGUgPSAwOworICAgICAgICBpbnQgbGVuZ3RoID0gNjsKKworICAg
ICAgICBkbyB7CisgICAgICAgICAgICB1bmljb2RlID0gKHVuaWNvZGUgPDwgNCkgKyB0b0FTQ0lJ
SGV4VmFsdWUoKm1fZGF0YSsrKTsKKyAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJ
SUhleERpZ2l0KCptX2RhdGEpKTsKKworICAgICAgICAvLyBDaGFyYWN0ZXJzIGFib3ZlIDB4ZmZm
ZiBhcmUgbm90IGhhbmRsZWQuCisgICAgICAgIGlmICh1bmljb2RlID4gMHhmZmZmKQorICAgICAg
ICAgICAgdW5pY29kZSA9IDB4ZmZmZDsKKworICAgICAgICAvLyBPcHRpb25hbCBzcGFjZSBhZnRl
ciB0aGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKm1fZGF0YSkp
CisgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgKnJlc3VsdCA9IHVuaWNvZGU7CisgICAg
fSBlbHNlCisgICAgICAgICpyZXN1bHQgPSAqbV9kYXRhKys7CisgICAgKytyZXN1bHQ7Cit9CisK
K2lubGluZSBib29sIENTU1BhcnNlcjo6cGFyc2VJZGVudGlmaWVyKFVDaGFyKiYgcmVzdWx0KQor
eworICAgIC8vIElmIGEgdmFsaWQgaWRlbnRpZmllciBzdGFydCBpcyBmb3VuZCwgd2UgY2FuIHNh
ZmVseQorICAgIC8vIHBhcnNlIHRoZSBpZGVudGlmaWVyIHVudGlsIHRoZSBuZXh0IGludmFsaWQg
Y2hhcmFjdGVyLgorICAgIEFTU0VSVChpc0lkZW50aWZpZXJTdGFydCgpKTsKKyAgICBib29sIGhh
c0VzY2FwZSA9IGZhbHNlOworICAgIGRvIHsKKyAgICAgICAgaWYgKExJS0VMWSgqbV9kYXRhICE9
ICdcXCcpKQorICAgICAgICAgICAgKnJlc3VsdCsrID0gKm1fZGF0YSsrOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGhhc0VzY2FwZSA9IHRydWU7CisgICAgICAgICAgICBwYXJzZUVzY2Fw
ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfSB3aGlsZSAoaXNDU1NMZXR0ZXIobV9kYXRhWzBd
KSB8fCAobV9kYXRhWzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUobV9kYXRhWzFdKSkpOworICAg
IHJldHVybiBoYXNFc2NhcGU7Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6cGFyc2VTdHJp
bmcoVUNoYXIqJiByZXN1bHQsIFVDaGFyIHF1b3RlKQoreworICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09IHF1b3RlKSkgeworICAgICAgICAgICAgLy8g
U3RyaW5nIHBhcnNpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgqbV9kYXRhID49IDE0IHx8ICgq
bV9kYXRhIDw9IDkgJiYgKm1fZGF0YSkgfHwgKm1fZGF0YSA9PSAxMSk7CisKKyAgICAgICAgaWYg
KExJS0VMWShtX2RhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9k
YXRhKys7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAnXG4nIHx8IG1fZGF0YVsxXSA9
PSAnXGYnKQorICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0
YVsxXSA9PSAnXHInKQorICAgICAgICAgICAgbV9kYXRhICs9IG1fZGF0YVsyXSA9PSAnXG4nID8g
MyA6IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7Cisg
ICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlVVJJKFVDaGFyKiYgc3RhcnQs
IFVDaGFyKiYgcmVzdWx0KQoreworICAgIFVDaGFyKiB1cmlTdGFydCA9IHNraXBXaGl0ZVNwYWNl
cyhtX2RhdGEpOworCisgICAgaWYgKCp1cmlTdGFydCA9PSAnIicgfHwgKnVyaVN0YXJ0ID09ICdc
JycpIHsKKyAgICAgICAgVUNoYXIgcXVvdGUgPSAqdXJpU3RhcnQ7CisgICAgICAgICsrdXJpU3Rh
cnQ7CisKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IGNoZWNrU3RyaW5nKHVyaVN0YXJ0LCBx
dW90ZSk7CisgICAgICAgIGlmICghc3RyaW5nRW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBzdHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsKKyAgICAgICAgaWYg
KCpzdHJpbmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0YXJ0
ID0gcmVzdWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHBhcnNlU3RyaW5nKHJlc3Vs
dCwgcXVvdGUpOworCisgICAgICAgIG1fZGF0YSA9IHN0cmluZ0VuZCArIDE7CisgICAgICAgIG1f
dG9rZW4gPSBVUkk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IHVy
aVN0YXJ0OworCisgICAgICAgIHdoaWxlIChpc1VSSUxldHRlcigqc3RyaW5nRW5kKSkgeworICAg
ICAgICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJ1xcJykKKyAgICAgICAgICAgICAgICArK3N0cmlu
Z0VuZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0cmluZ0VuZCA9IGNo
ZWNrRXNjYXBlKHN0cmluZ0VuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmdFbmQpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHN0cmluZ0VuZCA9IHNraXBXaGl0ZVNwYWNlcyhzdHJpbmdFbmQpOworICAgICAgICBp
ZiAoKnN0cmluZ0VuZCAhPSAnKScpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3Rh
cnQgPSByZXN1bHQgPSBtX2RhdGEgPSB1cmlTdGFydDsKKyAgICAgICAgd2hpbGUgKGlzVVJJTGV0
dGVyKCptX2RhdGEpKSB7CisgICAgICAgICAgICBpZiAoTElLRUxZKCptX2RhdGEgIT0gJ1xcJykp
CisgICAgICAgICAgICAgICAgKnJlc3VsdCsrID0gKm1fZGF0YSsrOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CisgICAgICAgIH0KKworICAg
ICAgICBtX2RhdGEgPSBzdHJpbmdFbmQgKyAxOworICAgICAgICBtX3Rva2VuID0gVVJJOworICAg
IH0KK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVVuaWNvZGVSYW5nZSgpCit7Cisg
ICAgVUNoYXIqIGRhdGEgPSBtX2RhdGEgKyAxOworICAgIGludCBsZW5ndGggPSA2OworICAgIEFT
U0VSVCgqbV9kYXRhID09ICcrJyk7CisKKyAgICB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpkYXRh
KSAmJiBsZW5ndGgpIHsKKyAgICAgICAgKytkYXRhOworICAgICAgICAtLWxlbmd0aDsKKyAgICB9
CisKKyAgICBpZiAobGVuZ3RoICYmICpkYXRhID09ICc/JykgeworICAgICAgICAvLyBBdCBtb3N0
IDUgaGV4IGRpZ2l0IGZvbGxvd2VkIGJ5IGEgcXVlc3Rpb24gbWFyay4KKyAgICAgICAgZG8gewor
ICAgICAgICAgICAgKytkYXRhOworICAgICAgICAgICAgLS1sZW5ndGg7CisgICAgICAgIH0gd2hp
bGUgKCpkYXRhID09ICc/JyAmJiBsZW5ndGgpOworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobGVuZ3RoIDwgNikgeworICAgICAg
ICAvLyBBdCBsZWFzdCBvbmUgaGV4IGRpZ2l0LgorICAgICAgICBpZiAoZGF0YVswXSA9PSAnLScg
JiYgaXNBU0NJSUhleERpZ2l0KGRhdGFbMV0pKSB7CisgICAgICAgICAgICAvLyBGb2xsb3dlZCBi
eSBhIGRhc2ggYW5kIGEgaGV4IGRpZ2l0LgorICAgICAgICAgICAgKytkYXRhOworICAgICAgICAg
ICAgbGVuZ3RoID0gNjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICArK2RhdGE7
CisgICAgICAgICAgICB9IHdoaWxlICgtLWxlbmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQoKmRhdGEp
KTsKKyAgICAgICAgfQorICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VO
dGhDaGlsZCgpCit7CisgICAgVUNoYXIqIGRhdGEgPSBtX2RhdGE7CisKKyAgICB3aGlsZSAoaXNB
U0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgKytkYXRhOworICAgIGlmIChpc0Nhc2VsZXNzRXF1
YWwoKmRhdGEsICduJykpIHsKKyAgICAgICAgbV9kYXRhID0gZGF0YSArIDE7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2Vy
OjpwYXJzZU50aENoaWxkRXh0cmEoKQoreworICAgIFVDaGFyKiBkYXRhID0gc2tpcFdoaXRlU3Bh
Y2VzKG1fZGF0YSk7CisgICAgaWYgKCpkYXRhICE9ICcrJyAmJiAqZGF0YSAhPSAnLScpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGRhdGEgPSBza2lwV2hpdGVTcGFjZXMoZGF0YSArIDEp
OworICAgIGlmICghaXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZG8geworICAgICAgICArK2RhdGE7CisgICAgfSB3aGlsZSAoaXNBU0NJSURpZ2l0KCpk
YXRhKSk7CisKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEZ1bmN0aW9uVG9rZW4oaW50IGxlbmd0aCkKK3sKKyAg
ICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisK
KyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKGlzQ2FzZWxl
c3NFcXVhbChuYW1lWzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYm
IGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IE5P
VEZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3Un
KSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ3InKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFt
ZVsyXSwgJ2wnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBVUkk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgOToKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLWNo
aWxkIikpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAg
ICByZXR1cm47CisKKyAgICBjYXNlIDExOgorICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5h
bWUsICJudGgtb2YtdHlwZSIpKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50aENoaWxk
TW9kZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAxNDoKKyAgICAgICAgaWYgKGlzQ2Fz
ZWxlc3NFcXVhbChuYW1lLCAibnRoLWxhc3QtY2hpbGQiKSkKKyAgICAgICAgICAgIG1fcGFyc2lu
Z01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgMTY6Cisg
ICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50aC1sYXN0LW9mLXR5cGUiKSkKKyAg
ICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0TWVkaWFRdWVyeVRva2Vu
KGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1fcGFyc2luZ01vZGUgPT0gTWVkaWFRdWVyeU1v
ZGUpOworICAgIFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworCisgICAgaWYgKGxlbmd0aCA9
PSAzKSB7CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ2EnKSAmJiBpc0Nh
c2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2Qn
KSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJQV9BTkQ7CisgICAgICAgIGVsc2UgaWYgKGlz
Q2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAn
bycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAgICAgICAgICAgbV90b2tl
biA9IE1FRElBX05PVDsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSA0KSB7CisgICAgICAgIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsx
XSwgJ24nKQorICAgICAgICAgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnbCcp
ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzNdLCAneScpKQorICAgICAgICAgICAgbV90b2tlbiA9
IE1FRElBX09OTFk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdE51
bWJlclRva2VuKFVDaGFyKiB0eXBlLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGgg
PiAwKTsKKworICAgIHN3aXRjaCAobG93ZXJjYXNlQ2hhcmFjdGVyKHR5cGVbMF0pKSB7CisgICAg
Y2FzZSAnYyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlw
ZVsxXSwgJ20nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBDTVM7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgJ2QnOgorICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXNDYXNlbGVzc0Vx
dWFsKHR5cGVbMV0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdnJykpCisgICAg
ICAgICAgICBtX3Rva2VuID0gREVHUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnZSc6
CisgICAgICAgIGlmIChsZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NF
cXVhbCh0eXBlWzFdLCAnbScpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBFTVM7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3gnKSkKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gRVhTOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgJ2cnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYgaXNDYXNlbGVzc0VxdWFsKHR5
cGVbMV0sICdyJykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsyXSwg
J2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ2QnKSkKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBHUkFEUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaCc6CisgICAgICAgIGlm
IChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3onKSkKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBIRVJUWjsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaSc6Cisg
ICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ24nKSkK
KyAgICAgICAgICAgIG1fdG9rZW4gPSBJTlM7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
J2snOgorICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICdoJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICd6JykpCisgICAgICAgICAgICBtX3Rv
a2VuID0gS0hFUlRaOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdtJzoKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVb
MV0sICdtJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IE1NUzsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAncycpKQorICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBNU0VDUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdw
JzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVz
c0VxdWFsKHR5cGVbMV0sICd4JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFBYUzsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAndCcpKQorICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBQVFM7CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNz
RXF1YWwodHlwZVsxXSwgJ2MnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUENTOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAobGVu
Z3RoID09IDMpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2En
KSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2QnKSkKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gUkFEUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFd
LCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnbScpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBSRU1TOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
J3MnOgorICAgICAgICBpZiAobGVuZ3RoID09IDEpCisgICAgICAgICAgICBtX3Rva2VuID0gU0VD
UzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAndCc6CisgICAgICAgIGlmIChsZW5ndGgg
PT0gNCAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3UnKQorICAgICAgICAgICAgICAgICYm
IGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncicpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzNd
LCAnbicpKQorICAgICAgICAgICAgbV90b2tlbiA9IFRVUk5TOworICAgICAgICByZXR1cm47CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBpZiAodHlwZVswXSA9PSAnXycgJiYgbGVuZ3RoID09IDUg
JiYgdHlwZVsxXSA9PSAnXycgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdxJykKKyAgICAg
ICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ2UnKSAmJiBpc0Nhc2VsZXNz
RXF1YWwodHlwZVs0XSwgJ20nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBRRU1TOworICAgICAg
ICByZXR1cm47CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdERhc2hU
b2tlbihpbnQgbGVuZ3RoKQoreworICAgIFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworCisg
ICAgaWYgKGxlbmd0aCA9PSAxMSkgeworICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVb
MTBdLCAneScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMSwgIndlYmtpdC1hbiIpKQorICAg
ICAgICAgICAgbV90b2tlbiA9IEFOWUZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwobmFtZVsxMF0sICduJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Vi
a2l0LW1pIikpCisgICAgICAgICAgICBtX3Rva2VuID0gTUlORlVOQ1RJT047CisgICAgICAgIGVs
c2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ3gnKSAmJiBpc0Nhc2VsZXNzRXF1YWwo
bmFtZSArIDEsICJ3ZWJraXQtbWEiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNQVhGVU5DVElP
TjsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMiAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSAr
IDEsICJ3ZWJraXQtY2FsYyIpKQorICAgICAgICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOworfQor
CitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9vbCBo
YXNFc2NhcGUpCit7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisgICAgQVNTRVJU
KG5hbWVbMF0gPT0gJ0AnICYmIGxlbmd0aCA+PSAyKTsKKworICAgIC8vIGNoYXJzZXQsIGZvbnQt
ZmFjZSwgaW1wb3J0LCBtZWRpYSwgbmFtZXNwYWNlLCBwYWdlLAorICAgIC8vIC13ZWJraXQta2V5
ZnJhbWVzLCBhbmQgLXdlYmtpdC1tZWRpYXF1ZXJ5IGFyZSBub3QgYWZmZWN0ZWQgYnkgaGFzRXNj
YXBlLgorICAgIHN3aXRjaCAobG93ZXJjYXNlQ2hhcmFjdGVyKG5hbWVbMV0pKSB7CisgICAgY2Fz
ZSAnYic6CisgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgIGlm
IChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1sZWZ0IikpCisgICAgICAgICAgICAg
ICAgbV90b2tlbiA9IEJPVFRPTUxFRlRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgMTM6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAi
b3R0b20tcmlnaHQiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NUklHSFRfU1lN
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgICBp
ZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0b20tY2VudGVyIikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IEJPVFRPTUNFTlRFUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgY2FzZSAxOToKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSAr
IDIsICJvdHRvbS1sZWZ0LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RU
T01MRUZUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDIw
OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm90dG9tLXJpZ2h0
LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01SSUdIVENPUk5FUl9T
WU07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gOCAmJiBpc0Nhc2VsZXNzRXF1YWwo
bmFtZSArIDIsICJoYXJzZXQiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBDSEFSU0VUX1NZTTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnZic6CisgICAgICAgIGlmIChsZW5ndGggPT0g
MTAgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib250LWZhY2UiKSkKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdp
JzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA3ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwg
Im1wb3J0IikpIHsKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsK
KyAgICAgICAgICAgIG1fdG9rZW4gPSBJTVBPUlRfU1lNOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgJ2wnOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmIChsZW5ndGggPT0gOSkgeworICAgICAgICAgICAgaWYg
KGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC10b3AiKSkKKyAgICAgICAgICAgICAgICBt
X3Rva2VuID0gTEVGVFRPUF9TWU07CisgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEyKSB7
CisgICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQg
ZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nh
c2VsZXNzRXF1YWwobmFtZVsxMV0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAi
ZWZ0LW1pZGRsIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IExFRlRNSURETEVfU1lNOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTFdLCAnbScpICYmIGlz
Q2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBMRUZUQk9UVE9NX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlICdtJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA2ICYmIGlzQ2FzZWxlc3NFcXVhbChu
YW1lICsgMiwgImVkaWEiKSkgeworICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVl
cnlNb2RlOworICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX1NZTTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlICduJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAm
JiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJhbWVzcGFjZSIpKQorICAgICAgICAgICAgbV90
b2tlbiA9IE5BTUVTUEFDRV9TWU07CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3AnOgor
ICAgICAgICBpZiAobGVuZ3RoID09IDUgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiYWdl
IikpCisgICAgICAgICAgICBtX3Rva2VuID0gUEFHRV9TWU07CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmIChsZW5ndGggPT0gMTApIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwobmFtZSArIDIsICJpZ2h0LXRvcCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBSSUdIVFRPUF9TWU07CisgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEzKSB7CisgICAg
ICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhl
ciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZVsxMl0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC1t
aWRkbCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVE1JRERMRV9TWU07CisgICAg
ICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMl0sICdtJykgJiYgaXNDYXNl
bGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBSSUdIVEJPVFRPTV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSAndCc6CisgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAg
aWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLWxlZnQiKSkKKyAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gVE9QTEVGVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y2FzZSAxMDoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1y
aWdodCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BSSUdIVF9TWU07CisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwobmFtZSArIDIsICJvcC1jZW50ZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gVE9QQ0VOVEVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE2
OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLWxlZnQtY29y
bmVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUExFRlRDT1JORVJfU1lNOworICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICBpZiAoaXND
YXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3AtcmlnaHQtY29ybmVyIikpCisgICAgICAgICAgICAg
ICAgbV90b2tlbiA9IFRPUFJJR0hUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICctJzoKKyAgICAgICAgc3dpdGNo
IChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgIGlmICghaGFzRXNjYXBl
ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1ydWxlIikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9SVUxFX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNoYXJhY3Rl
ciBmaXJzdCBjb3VsZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgorICAgICAg
ICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ3MnKSAmJiBpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJ3ZWJraXQtZGVjbCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBX
RUJLSVRfREVDTFNfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5h
bWVbMTNdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC12YWx1Iikp
CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9WQUxVRV9TWU07CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgIGlmICghaGFzRXNjYXBl
ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1yZWdpb24iKSkKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gV0VCS0lUX1JVTEVfU1lNOworICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2Vs
ZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtc2VsZWN0b3IiKSkKKyAgICAgICAgICAgICAgICBt
X3Rva2VuID0gV0VCS0lUX1NFTEVDVE9SX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBjYXNlIDE4OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwg
IndlYmtpdC1rZXlmcmFtZXMiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX0tF
WUZSQU1FU19TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxOToKKyAg
ICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtbWVkaWFxdWVy
eSIpKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAyMjoKKyAgICAgICAg
ICAgIGlmICghaGFzRXNjYXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1r
ZXlmcmFtZS1ydWxlIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlGUkFN
RV9SVUxFX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwog
aW50IENTU1BhcnNlcjo6bGV4KHZvaWQqIHl5bHZhbFdpdGhvdXRUeXBlKQogewogICAgIFlZU1RZ
UEUqIHl5bHZhbCA9IHN0YXRpY19jYXN0PFlZU1RZUEUqPih5eWx2YWxXaXRob3V0VHlwZSk7Ci0g
ICAgaW50IGxlbmd0aDsKKyAgICAvLyBXcml0ZSBwb2ludGVyIGZvciB0aGUgbmV4dCBjaGFyYWN0
ZXIuCisgICAgVUNoYXIqIHJlc3VsdDsKKyAgICBib29sIGhhc0VzY2FwZTsKIAotICAgIGxleCgp
OworICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgdGVybWluYXRlZCBieSB0d28gXDAsIHNvCisg
ICAgLy8gaXQgaXMgc2FmZSB0byByZWFkIHR3byBjaGFyYWN0ZXJzIGFoZWFkIGFueXRpbWUuCiAK
LSAgICBVQ2hhciogdCA9IHRleHQoJmxlbmd0aCk7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIElu
IGRlYnVnIHdlIGNoZWNrIHdpdGggYW4gQVNTRVJUIHRoYXQgdGhlIGxlbmd0aCBpcyA+IDAgZm9y
IHN0cmluZyB0eXBlcy4KKyAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gMDsKKyAgICB5
eWx2YWwtPnN0cmluZy5sZW5ndGggPSAwOworI2VuZGlmCiAKLSAgICBzd2l0Y2ggKHRva2VuKCkp
IHsKLSAgICBjYXNlIFdISVRFU1BBQ0U6Ci0gICAgY2FzZSBTR01MX0NEOgotICAgIGNhc2UgSU5D
TFVERVM6Ci0gICAgY2FzZSBEQVNITUFUQ0g6CityZXN0YXJ0QWZ0ZXJDb21tZW50OgorICAgIG1f
dG9rZW5TdGFydCA9IHJlc3VsdCA9IG1fZGF0YTsKKyAgICBtX3Rva2VuID0gKm1fZGF0YTsKKyAg
ICArK21fZGF0YTsKKworICAgIHN3aXRjaCAoKG1fdG9rZW4gPD0gMTI3KSA/IHR5cGVzT2ZBU0NJ
SUNoYXJhY3RlcnNbbV90b2tlbl0gOiBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQpIHsKKyAgICBj
YXNlIENoYXJhY3RlckNhc2VsZXNzVToKKyAgICAgICAgaWYgKFVOTElLRUxZKCptX2RhdGEgPT0g
JysnKSkKKyAgICAgICAgICAgIGlmIChwYXJzZVVuaWNvZGVSYW5nZSgpKSB7CisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFVOSUNPREVSQU5HRTsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0
cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydC4KKworICAgIGNhc2UgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0Ogor
ICAgICAgICAtLW1fZGF0YTsKKyAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVudGlmaWVyKHJl
c3VsdCk7CisgICAgICAgIG1fdG9rZW4gPSBJREVOVDsKKworICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisKKyAgICAgICAgaWYgKFVOTElLRUxZKCptX2Rh
dGEgPT0gJygnKSkgeworICAgICAgICAgICAgbV90b2tlbiA9IEZVTkNUSU9OOworICAgICAgICAg
ICAgaWYgKCFoYXNFc2NhcGUpCisgICAgICAgICAgICAgICAgZGV0ZWN0RnVuY3Rpb25Ub2tlbihy
ZXN1bHQgLSBtX3Rva2VuU3RhcnQpOworICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAg
ICArK3Jlc3VsdDsKKyAgICAgICAgICAgICsreXlsdmFsLT5zdHJpbmcubGVuZ3RoOworCisgICAg
ICAgICAgICBpZiAodG9rZW4oKSA9PSBVUkkpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0g
RlVOQ1RJT047CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyByZWFsbHkg
YW4gVVJJLgorICAgICAgICAgICAgICAgIHBhcnNlVVJJKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3Rl
cnMsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVz
dWx0IC0geXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlICE9IE5vcm1hbE1vZGUpICYmICFoYXNF
c2NhcGUpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE1lZGlhUXVlcnlNb2Rl
KQorICAgICAgICAgICAgICAgIGRldGVjdE1lZGlhUXVlcnlUb2tlbihyZXN1bHQgLSBtX3Rva2Vu
U3RhcnQpOworICAgICAgICAgICAgZWxzZSBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1v
ZGUgJiYgaXNDYXNlbGVzc0VxdWFsKG1fdG9rZW5TdGFydFswXSwgJ24nKSkgeworICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBTdHJpbmcgIm4iIGlzIElERU5UIGJ1dCAibisxIiBpcyBOVEguCisgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0IC0gbV90b2tlblN0YXJ0ID09IDIg
JiYgbV90b2tlblN0YXJ0WzFdID09ICctJykgeworICAgICAgICAgICAgICAgICAgICAvLyBTdHJp
bmcgIm4tIiBpcyBJREVOVCBidXQgIm4tMSIgaXMgTlRILgorICAgICAgICAgICAgICAgICAgICAv
LyBTcGVjdWxhdGl2ZWx5IGRlY3JlYXNlIG1fZGF0YSB0byBkZXRlY3QgYW4gbnRoLWNoaWxkIHRv
a2VuLgorICAgICAgICAgICAgICAgICAgICBtX2RhdGEtLTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHBhcnNlTnRoQ2hpbGRFeHRyYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
ID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2UgdG8gbV9kYXRhIGlm
IHVuc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YSsrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBVUkk6Ci0gICAgY2FzZSBTVFJJTkc6Ci0g
ICAgY2FzZSBJREVOVDoKLSAgICBjYXNlIE5USDoKLSAgICBjYXNlIEhFWDoKLSAgICBjYXNlIElE
U0VMOgotICAgIGNhc2UgRElNRU46Ci0gICAgY2FzZSBVTklDT0RFUkFOR0U6Ci0gICAgY2FzZSBG
VU5DVElPTjoKLSAgICBjYXNlIEFOWUZVTkNUSU9OOgotICAgIGNhc2UgTk9URlVOQ1RJT046Ci0g
ICAgY2FzZSBDQUxDRlVOQ1RJT046Ci0gICAgY2FzZSBNSU5GVU5DVElPTjoKLSAgICBjYXNlIE1B
WEZVTkNUSU9OOgotICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gdDsKLSAgICAg
ICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgSU1QT1JUX1NZTToKLSAgICBjYXNlIFBBR0VfU1lNOgotICAgIGNhc2UgTUVESUFfU1lN
OgotICAgIGNhc2UgRk9OVF9GQUNFX1NZTToKLSAgICBjYXNlIENIQVJTRVRfU1lNOgotICAgIGNh
c2UgTkFNRVNQQUNFX1NZTToKLSAgICBjYXNlIFdFQktJVF9LRVlGUkFNRVNfU1lNOgotCi0gICAg
Y2FzZSBJTVBPUlRBTlRfU1lNOgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUUVNUzoKLSAg
ICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBHUkFEUzoKLSAgICBjYXNlIFRVUk5TOgotICAgICAg
ICBsZW5ndGgtLTsKLSAgICBjYXNlIERFR1M6Ci0gICAgY2FzZSBSQURTOgotICAgIGNhc2UgS0hF
UlRaOgotICAgIGNhc2UgUkVNUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBNU0VDUzoK
LSAgICBjYXNlIEhFUlRaOgotICAgIGNhc2UgRU1TOgotICAgIGNhc2UgRVhTOgotICAgIGNhc2Ug
UFhTOgotICAgIGNhc2UgQ01TOgotICAgIGNhc2UgTU1TOgotICAgIGNhc2UgSU5TOgotICAgIGNh
c2UgUFRTOgotICAgIGNhc2UgUENTOgotICAgICAgICBsZW5ndGgtLTsKLSAgICBjYXNlIFNFQ1M6
Ci0gICAgY2FzZSBQRVJDRU5UQUdFOgotICAgICAgICBsZW5ndGgtLTsKLSAgICBjYXNlIEZMT0FU
VE9LRU46Ci0gICAgY2FzZSBJTlRFR0VSOgotICAgICAgICB5eWx2YWwtPm51bWJlciA9IGNoYXJh
Y3RlcnNUb0RvdWJsZSh0LCBsZW5ndGgpOworICAgIGNhc2UgQ2hhcmFjdGVyRG90OgorICAgICAg
ICBpZiAoIWlzQVNDSUlEaWdpdChtX2RhdGFbMF0pKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIC8vIEZhbGwgdGhyb3VnaCB0byBDaGFyYWN0ZXJOdW1iZXIuCisKKyAgICBjYXNlIENoYXJh
Y3Rlck51bWJlcjogeworICAgICAgICBib29sIGRvdFNlZW4gPSAobV90b2tlbiA9PSAnLicpOwor
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCht
X2RhdGFbMF0pKSB7CisgICAgICAgICAgICAgICAgLy8gT25seSBvbmUgZG90IGlzIGFsbG93ZWQg
Zm9yIGEgbnVtYmVyLAorICAgICAgICAgICAgICAgIC8vIGFuZCBpdCBtdXN0IGJlIGZvbGxvd2Vk
IGJ5IGEgZGlnaXQuCisgICAgICAgICAgICAgICAgaWYgKG1fZGF0YVswXSAhPSAnLicgfHwgZG90
U2VlbiB8fCAhaXNBU0NJSURpZ2l0KG1fZGF0YVsxXSkpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRvdFNlZW4gPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgKyttX2RhdGE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVU5MSUtFTFkobV9w
YXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpICYmICFkb3RTZWVuICYmIGlzQ2FzZWxlc3NFcXVh
bCgqbV9kYXRhLCAnbicpKSB7CisgICAgICAgICAgICAvLyAiWzAtOV0rbiIgaXMgYWx3YXlzIGFu
IE50aENoaWxkLgorICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICBwYXJzZU50aENo
aWxkRXh0cmEoKTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICB5eWx2
YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgeXlsdmFs
LT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICB5eWx2YWwtPm51bWJlciA9IGNoYXJhY3RlcnNUb0Rv
dWJsZShtX3Rva2VuU3RhcnQsIG1fZGF0YSAtIG1fdG9rZW5TdGFydCk7CisKKyAgICAgICAgLy8g
VHlwZSBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydCgpKSB7
CisgICAgICAgICAgICBVQ2hhciogdHlwZSA9IG1fZGF0YTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG1fZGF0YTsKKworICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVudGlmaWVyKHJlc3Vs
dCk7CisgICAgICAgICAgICBpZiAoKm1fZGF0YSA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICAv
LyBBbnkgaWRlbnRpZmllciBmb2xsb3dlZCBieSBhICcrJyBzaWduIGlzIGFuIGludmFsaWQgZGlt
ZW5zaW9uLgorICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBJTlZBTElERElNRU47CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBESU1FTjsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKKyAgICAg
ICAgICAgICAgICAgICAgZGV0ZWN0TnVtYmVyVG9rZW4odHlwZSwgbV9kYXRhIC0gdHlwZSk7CisK
KyAgICAgICAgICAgICAgICBpZiAobV90b2tlbiA9PSBESU1FTikgeworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgZGVjb2RlZCBudW1iZXIgaXMgb3ZlcndyaXR0ZW4sIGJ1dCB0aGlzIGlzIGlu
dGVudGlvbmFsLgorICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJz
ID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKCptX2RhdGEgPT0gJyUnKSB7CisgICAgICAgICAgICAv
LyBBbHRob3VnaCB0aGUgQ1NTIGdyYW1tYXIgc2F5cyB7bnVtfSUgd2UgZm9sbG93CisgICAgICAg
ICAgICAvLyB3ZWJraXQgYXQgdGhlIG1vbWVudCB3aGljaCB1c2VzIHtudW19JSsuCisgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICB9IHdoaWxl
ICgqbV9kYXRhID09ICclJyk7CisgICAgICAgICAgICBtX3Rva2VuID0gUEVSQ0VOVEFHRTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Rva2VuID0gZG90U2VlbiA/IEZMT0FUVE9LRU4g
OiBJTlRFR0VSOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIENoYXJhY3RlckRh
c2g6CisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydEFmdGVyRGFzaChtX2RhdGEpKSB7Cisg
ICAgICAgICAgICAtLW1fZGF0YTsKKyAgICAgICAgICAgIGhhc0VzY2FwZSA9IHBhcnNlSWRlbnRp
ZmllcihyZXN1bHQpOworICAgICAgICAgICAgbV90b2tlbiA9IElERU5UOworCisgICAgICAgICAg
ICBpZiAoKm1fZGF0YSA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJ
T047CisgICAgICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCisgICAgICAgICAgICAgICAgICAg
IGRldGVjdERhc2hUb2tlbihyZXN1bHQgLSBtX3Rva2VuU3RhcnQpOworICAgICAgICAgICAgICAg
ICsrbV9kYXRhOworICAgICAgICAgICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAgfSBlbHNl
IGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkgJiYgIWhhc0VzY2Fw
ZSAmJiBpc0Nhc2VsZXNzRXF1YWwobV90b2tlblN0YXJ0WzFdLCAnbicpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdCAtIG1fdG9rZW5TdGFydCA9PSAyKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFN0cmluZyAiLW4iIGlzIElERU5UIGJ1dCAiLW4rMSIgaXMgTlRILgorICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBt
X2RhdGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdCAtIG1fdG9rZW5TdGFydCA9PSAzICYmIG1fdG9rZW5TdGFydFsyXSA9PSAnLScpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICItbi0iIGlzIElERU5UIGJ1dCAiLW4tMSIg
aXMgTlRILgorICAgICAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGl2ZWx5IGRlY3JlYXNlIG1f
ZGF0YSB0byBkZXRlY3QgYW4gbnRoLWNoaWxkIHRva2VuLgorICAgICAgICAgICAgICAgICAgICBt
X2RhdGEtLTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRyYSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAg
ICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0Owor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UmV2ZXJ0IHRoZSBjaGFuZ2UgdG8gbV9kYXRhIGlmIHVuc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGF0YSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFj
dGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9
IHJlc3VsdCAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgfSBlbHNlIGlmIChtX2RhdGFbMF0gPT0g
Jy0nICYmIG1fZGF0YVsxXSA9PSAnPicpIHsKKyAgICAgICAgICAgIG1fZGF0YSArPSAyOworICAg
ICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CisgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFko
bV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpKSB7CisgICAgICAgICAgICAvLyAiLVswLTld
K24iIGlzIGFsd2F5cyBhbiBOdGhDaGlsZC4KKyAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxk
KCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmEoKTsKKyAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJh
Y3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVu
Z3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdDoKKyAgICBjYXNlIENoYXJhY3Rlck90aGVyOgor
ICAgICAgICAvLyBtX3Rva2VuIGlzIHNpbXBseSB0aGUgY3VycmVudCBjaGFyYWN0ZXIuCiAgICAg
ICAgIGJyZWFrOwotICAgIH0KIAotICAgIHJldHVybiB0b2tlbigpOwotfQorICAgIGNhc2UgQ2hh
cmFjdGVyV2hpdGVTcGFjZToKKyAgICAgICAgbV90b2tlbiA9IFdISVRFU1BBQ0U7CisgICAgICAg
IC8vIE1pZ2h0IHN0YXJ0IHdpdGggYSAnXG4nLgorICAgICAgICAtLW1fZGF0YTsKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAr
K21fbGluZU51bWJlcjsKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICB9IHdoaWxlICgq
bV9kYXRhIDw9ICcgJyAmJiAodHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1sqbV9kYXRhXSA9PSBDaGFy
YWN0ZXJXaGl0ZVNwYWNlKSk7CisgICAgICAgIGJyZWFrOwogCi12b2lkIENTU1BhcnNlcjo6cmVj
aGVja0F0S2V5d29yZChjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIFN0cmluZyBy
dWxlTmFtZShzdHIsIGxlbik7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAi
QGltcG9ydCIpKQotICAgICAgICB5eVRvayA9IElNUE9SVF9TWU07Ci0gICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAcGFnZSIpKQotICAgICAgICB5eVRvayA9IFBBR0Vf
U1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQG1lZGlhIikp
Ci0gICAgICAgIHl5VG9rID0gTUVESUFfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKHJ1bGVOYW1lLCAiQGZvbnQtZmFjZSIpKQotICAgICAgICB5eVRvayA9IEZPTlRfRkFDRV9T
WU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJAY2hhcnNldCIp
KQotICAgICAgICB5eVRvayA9IENIQVJTRVRfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHJ1bGVOYW1lLCAiQG5hbWVzcGFjZSIpKQotICAgICAgICB5eVRvayA9IE5BTUVTUEFD
RV9TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJALXdlYmtp
dC1rZXlmcmFtZXMiKSkKLSAgICAgICAgeXlUb2sgPSBXRUJLSVRfS0VZRlJBTUVTX1NZTTsKLSAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkAtd2Via2l0LW1lZGlhcXVl
cnkiKSkKLSAgICAgICAgeXlUb2sgPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07Ci19Ci0KLVVDaGFy
KiBDU1NQYXJzZXI6OnRleHQoaW50ICpsZW5ndGgpCi17Ci0gICAgVUNoYXIqIHN0YXJ0ID0geXl0
ZXh0OwotICAgIGludCBsID0geXlsZW5nOwotICAgIHN3aXRjaCAoeXlUb2spIHsKLSAgICBjYXNl
IFNUUklORzoKLSAgICAgICAgbC0tOwotICAgICAgICAvKiBub2JyZWFrICovCi0gICAgY2FzZSBI
RVg6Ci0gICAgY2FzZSBJRFNFTDoKLSAgICAgICAgc3RhcnQrKzsKLSAgICAgICAgbC0tOworICAg
IGNhc2UgQ2hhcmFjdGVyRW5kTWVkaWFRdWVyeToKKyAgICAgICAgaWYgKG1fcGFyc2luZ01vZGUg
PT0gTWVkaWFRdWVyeU1vZGUpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9k
ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUkk6Ci0gICAgICAgIC8vICJ1cmwoInt3fXtz
dHJpbmd9e3d9IikiCi0gICAgICAgIC8vICJ1cmwoInt3fXt1cmx9e3d9IikiCi0gICAgICAgIC8v
IHN0cmlwICJ1cmwoIiBhbmQgIikiCi0gICAgICAgIHN0YXJ0ICs9IDQ7Ci0gICAgICAgIGwgLT0g
NTsKLSAgICAgICAgLy8gc3RyaXAge3d9Ci0gICAgICAgIHdoaWxlIChsICYmIGlzSFRNTFNwYWNl
KCpzdGFydCkpIHsKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICAgICAtLWw7Ci0gICAg
ICAgIH0KLSAgICAgICAgd2hpbGUgKGwgJiYgaXNIVE1MU3BhY2Uoc3RhcnRbbCAtIDFdKSkKLSAg
ICAgICAgICAgIC0tbDsKLSAgICAgICAgaWYgKGwgJiYgKCpzdGFydCA9PSAnIicgfHwgKnN0YXJ0
ID09ICdcJycpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobCA+PSAyICYmIHN0YXJ0W2wgLSAxXSA9
PSAqc3RhcnQpOwotICAgICAgICAgICAgKytzdGFydDsKLSAgICAgICAgICAgIGwgLT0gMjsKKwor
ICAgIGNhc2UgQ2hhcmFjdGVyRW5kTnRoQ2hpbGQ6CisgICAgICAgIGlmIChtX3BhcnNpbmdNb2Rl
ID09IE50aENoaWxkTW9kZSkKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2Rl
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyUXVvdGU6CisgICAgICAgIGlm
IChjaGVja1N0cmluZyhtX2RhdGEsIG1fdG9rZW4pKSB7CisgICAgICAgICAgICArK3Jlc3VsdDsK
KyAgICAgICAgICAgIHBhcnNlU3RyaW5nKHJlc3VsdCwgbV90b2tlbik7CisgICAgICAgICAgICBt
X3Rva2VuID0gU1RSSU5HOworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9
IG1fdG9rZW5TdGFydCArIDE7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBy
ZXN1bHQgLSAobV90b2tlblN0YXJ0ICsgMSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKKworICAgIGNhc2UgQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrOiB7CisgICAg
ICAgIFVDaGFyKiBzdGFydCA9IHNraXBXaGl0ZVNwYWNlcyhtX2RhdGEpOworICAgICAgICBpZiAo
aXNDYXNlbGVzc0VxdWFsKHN0YXJ0LCAiaW1wb3J0YW50IikpIHsKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBJTVBPUlRBTlRfU1lNOworICAgICAgICAgICAgbV9kYXRhID0gc3RhcnQgKyA5OworICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIC8vIHByb2Nlc3MgZXNjYXBlcwot
ICAgIFVDaGFyKiBvdXQgPSBzdGFydDsKLSAgICBVQ2hhciogZXNjYXBlID0gMDsKKyAgICBjYXNl
IENoYXJhY3Rlckhhc2htYXJrOiB7CisgICAgICAgIFVDaGFyKiBzdGFydCA9IG1fZGF0YTsKKyAg
ICAgICAgcmVzdWx0ID0gbV9kYXRhOwogCi0gICAgYm9vbCBzYXdFc2NhcGUgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGlzQVNDSUlEaWdpdCgqbV9kYXRhKSkgeworICAgICAgICAgICAgLy8gVGhpcyBt
dXN0IGJlIGEgdmFsaWQgaGV4IG51bWJlciB0b2tlbi4KKyAgICAgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdp
dCgqbV9kYXRhKSk7CisgICAgICAgICAgICBtX3Rva2VuID0gSEVYOworICAgICAgICAgICAgeXls
dmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IHN0YXJ0OworICAgICAgICAgICAgeXlsdmFsLT5zdHJp
bmcubGVuZ3RoID0gbV9kYXRhIC0gc3RhcnQ7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJZGVudGlm
aWVyU3RhcnQoKSkgeworICAgICAgICAgICAgbV90b2tlbiA9IElEU0VMOworICAgICAgICAgICAg
aWYgKCFwYXJzZUlkZW50aWZpZXIocmVzdWx0KSkgeworICAgICAgICAgICAgICAgIC8vIENoZWNr
IHdoZXRoZXIgdGhlIGlkZW50aWZpZXIgaXMgYWxzbyBhIHZhbGlkIGhleCBudW1iZXIuCisgICAg
ICAgICAgICAgICAgVUNoYXIqIGN1cnJlbnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gSEVYOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X3Rva2VuID0gSURTRUw7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAg
ICAgICAgfSB3aGlsZSAoY3VycmVudCA8IHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gc3RhcnQ7CisgICAgICAgICAgICB5eWx2
YWwtPnN0cmluZy5sZW5ndGggPSByZXN1bHQgLSBzdGFydDsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAg
ICBVQ2hhciogY3VycmVudCA9IHN0YXJ0ICsgaTsKLSAgICAgICAgaWYgKGVzY2FwZSA9PSBjdXJy
ZW50IC0gMSkgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoeXlUb2sgPT0gU1RSSU5H
ICYmCi0gICAgICAgICAgICAgICAgICgqY3VycmVudCA9PSAnXG4nIHx8ICpjdXJyZW50ID09ICdc
cicgfHwgKmN1cnJlbnQgPT0gJ1xmJykpIHsKLSAgICAgICAgICAgICAgICAvLyAjIyMgaGFuZGxl
IFxyXG4gY2FzZQotICAgICAgICAgICAgICAgIGlmICgqY3VycmVudCAhPSAnXHInKQotICAgICAg
ICAgICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
IGNhc2UgQ2hhcmFjdGVyU2xhc2g6CisgICAgICAgIC8vIElnbm9yZSBjb21tZW50cy4gVGhleSBh
cmUgbm90IGV2ZW4gY29uc2lkZXJlZCBhcyB3aGl0ZSBzcGFjZXMuCisgICAgICAgIGlmICgqbV9k
YXRhID09ICcqJykgeworICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICB3aGlsZSAo
bV9kYXRhWzBdICE9ICcqJyB8fCBtX2RhdGFbMV0gIT0gJy8nKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fZGF0YVswXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICArK21fbGluZU51bWJl
cjsKKyAgICAgICAgICAgICAgICBpZiAobV9kYXRhWzBdID09ICdcMCcgJiYgbV9kYXRhWzFdID09
ICdcMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIGNvbW1lbnRzIGFy
ZSBzaW1wbHkgaWdub3JlZC4KKyAgICAgICAgICAgICAgICAgICAgbV9kYXRhIC09IDI7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICArK21fZGF0YTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGluIGFsbCBvdGhlciBj
YXNlcyBjb3B5IHRoZSBjaGFyIHRvIG91dHB1dAotICAgICAgICAgICAgLy8gIyMjCi0gICAgICAg
ICAgICAqb3V0KysgPSAqY3VycmVudDsKLSAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fZGF0YSArPSAyOworICAgICAgICAgICAgZ290
byByZXN0YXJ0QWZ0ZXJDb21tZW50OwogICAgICAgICB9Ci0gICAgICAgIGlmIChlc2NhcGUgPT0g
Y3VycmVudCAtIDIgJiYgeXlUb2sgPT0gU1RSSU5HICYmCi0gICAgICAgICAgICAgKihjdXJyZW50
LTEpID09ICdccicgJiYgKmN1cnJlbnQgPT0gJ1xuJykgewotICAgICAgICAgICAgZXNjYXBlID0g
MDsKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hh
cmFjdGVyRG9sbGFyOgorICAgICAgICBpZiAoKm1fZGF0YSA9PSAnPScpIHsKKyAgICAgICAgICAg
ICsrbV9kYXRhOworICAgICAgICAgICAgbV90b2tlbiA9IEVORFNXSVRIOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChlc2NhcGUgPiBjdXJyZW50IC0gNyAmJiBpc0FTQ0lJSGV4RGlnaXQoKmN1cnJl
bnQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlc2NhcGUpIHsKLSAgICAg
ICAgICAgIC8vIGFkZCBlc2NhcGVkIGNoYXIKLSAgICAgICAgICAgIHVuc2lnbmVkIHVjID0gMDsK
LSAgICAgICAgICAgIGVzY2FwZSsrOwotICAgICAgICAgICAgd2hpbGUgKGVzY2FwZSA8IGN1cnJl
bnQpIHsKLSAgICAgICAgICAgICAgICB1YyAqPSAxNjsKLSAgICAgICAgICAgICAgICB1YyArPSB0
b0FTQ0lJSGV4VmFsdWUoKmVzY2FwZSk7Ci0gICAgICAgICAgICAgICAgZXNjYXBlKys7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJBc3RlcmlzazoKKyAgICAgICAgaWYgKCpt
X2RhdGEgPT0gJz0nKSB7CisgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBDT05UQUlOUzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hh
cmFjdGVyUGx1czoKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hp
bGRNb2RlKSkgeworICAgICAgICAgICAgLy8gU2ltcGxlc3QgY2FzZS4gIitbMC05XSpuIiBpcyBh
bHdheXMgTnRoQ2hpbGQuCisgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZCgpKSB7CisgICAg
ICAgICAgICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAgbV90b2tl
biA9IE5USDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90
b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0
YSAtIG1fdG9rZW5TdGFydDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGNhbid0IGhh
bmRsZSBjaGFycyBvdXRzaWRlIHVjczIKLSAgICAgICAgICAgIGlmICh1YyA+IDB4ZmZmZikKLSAg
ICAgICAgICAgICAgICB1YyA9IDB4ZmZmZDsKLSAgICAgICAgICAgICpvdXQrKyA9IHVjOwotICAg
ICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqY3VycmVu
dCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFl
c2NhcGUgJiYgKmN1cnJlbnQgPT0gJ1xcJykgewotICAgICAgICAgICAgZXNjYXBlID0gY3VycmVu
dDsKLSAgICAgICAgICAgIHNhd0VzY2FwZSA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3Rlckxlc3M6CisgICAgICAgIGlmICht
X2RhdGFbMF0gPT0gJyEnICYmIG1fZGF0YVsxXSA9PSAnLScgJiYgbV9kYXRhWzJdID09ICctJykg
eworICAgICAgICAgICAgbV9kYXRhICs9IDM7CisgICAgICAgICAgICBtX3Rva2VuID0gU0dNTF9D
RDsKICAgICAgICAgfQotICAgICAgICAqb3V0KysgPSAqY3VycmVudDsKLSAgICB9Ci0gICAgaWYg
KGVzY2FwZSkgewotICAgICAgICAvLyBhZGQgZXNjYXBlZCBjaGFyCi0gICAgICAgIHVuc2lnbmVk
IHVjID0gMDsKLSAgICAgICAgZXNjYXBlKys7Ci0gICAgICAgIHdoaWxlIChlc2NhcGUgPCBzdGFy
dCtsKSB7Ci0gICAgICAgICAgICB1YyAqPSAxNjsKLSAgICAgICAgICAgIHVjICs9IHRvQVNDSUlI
ZXhWYWx1ZSgqZXNjYXBlKTsKLSAgICAgICAgICAgIGVzY2FwZSsrOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgQ2hhcmFjdGVyQXQ6CisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydCgp
KSB7CisgICAgICAgICAgICBtX3Rva2VuID0gQVRLRVlXT1JEOworICAgICAgICAgICAgKytyZXN1
bHQ7CisgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAg
ICAgICAgICAgIGRldGVjdEF0VG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0LCBoYXNFc2NhcGUp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJCYWNrU2xh
c2g6CisgICAgICAgIGlmIChpc0NTU0VzY2FwZSgqbV9kYXRhKSkgeworICAgICAgICAgICAgLS1t
X2RhdGE7CisgICAgICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBJREVOVDsKKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMg
PSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSByZXN1
bHQgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IENoYXJhY3RlclhvcjoKKyAgICAgICAgaWYgKCptX2RhdGEgPT0gJz0nKSB7CisgICAgICAgICAg
ICArK21fZGF0YTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBCRUdJTlNXSVRIOwogICAgICAgICB9
Ci0gICAgICAgIC8vIGNhbid0IGhhbmRsZSBjaGFycyBvdXRzaWRlIHVjczIKLSAgICAgICAgaWYg
KHVjID4gMHhmZmZmKQotICAgICAgICAgICAgdWMgPSAweGZmZmQ7Ci0gICAgICAgICpvdXQrKyA9
IHVjOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyVmVydGljYWxCYXI6Cisg
ICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgKyttX2RhdGE7CisgICAg
ICAgICAgICBtX3Rva2VuID0gREFTSE1BVENIOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBDaGFyYWN0ZXJUaWxkZToKKyAgICAgICAgaWYgKCptX2RhdGEgPT0gJz0nKSB7
CisgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJTkNMVURFUzsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICAqbGVuZ3RoID0g
b3V0IC0gc3RhcnQ7CisjaWZuZGVmIE5ERUJVRworICAgIHN3aXRjaCAodG9rZW4oKSkgeworICAg
IGNhc2UgU1RSSU5HOgorICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9
PSBtX3Rva2VuU3RhcnQgKyAxKTsKKyAgICAgICAgYnJlYWs7CiAKLSAgICAvLyBJZiB3ZSBoYXZl
IGFuIHVucmVjb2duaXplZCBALWtleXdvcmQsIGFuZCBpZiB3ZSBoYW5kbGVkIGFueSBlc2NhcGVz
IGF0IGFsbCwgdGhlbgotICAgIC8vIHdlIHNob3VsZCBhdHRlbXB0IHRvIGFkanVzdCB5eVRvayB0
byB0aGUgY29ycmVjdCB0eXBlLgotICAgIGlmICh5eVRvayA9PSBBVEtFWVdPUkQgJiYgc2F3RXNj
YXBlKQotICAgICAgICByZWNoZWNrQXRLZXl3b3JkKHN0YXJ0LCAqbGVuZ3RoKTsKKyAgICBjYXNl
IElERU5UOgorICAgIGNhc2UgTlRIOgorICAgIGNhc2UgRElNRU46CisgICAgY2FzZSBVTklDT0RF
UkFOR0U6CisgICAgY2FzZSBGVU5DVElPTjoKKyAgICBjYXNlIEFOWUZVTkNUSU9OOgorICAgIGNh
c2UgTk9URlVOQ1RJT046CisgICAgY2FzZSBDQUxDRlVOQ1RJT046CisgICAgY2FzZSBNSU5GVU5D
VElPTjoKKyAgICBjYXNlIE1BWEZVTkNUSU9OOgorICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJp
bmcuY2hhcmFjdGVycyA9PSBtX3Rva2VuU3RhcnQgJiYgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID4g
MCk7CisgICAgICAgIGJyZWFrOwogCi0gICAgcmV0dXJuIHN0YXJ0OwotfQorICAgIGNhc2UgVVJJ
OgorICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyAmJiB5eWx2YWwtPnN0
cmluZy5jaGFyYWN0ZXJzICE9IG1fdG9rZW5TdGFydCk7CisgICAgICAgIGJyZWFrOwogCi12b2lk
IENTU1BhcnNlcjo6Y291bnRMaW5lcygpCi17Ci0gICAgZm9yIChVQ2hhciogY3VycmVudCA9IHl5
dGV4dDsgY3VycmVudCA8IHl5dGV4dCArIHl5bGVuZzsgKytjdXJyZW50KSB7Ci0gICAgICAgIGlm
ICgqY3VycmVudCA9PSAnXG4nKQotICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7CisgICAgY2Fz
ZSBIRVg6CisgICAgY2FzZSBJRFNFTDoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNo
YXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICsgMSAmJiB5eWx2YWwtPnN0cmluZy5sZW5ndGggPiAw
KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gdG9rZW4oKTsK
IH0KIAogQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdTZWxlY3Rv
cigpCkBAIC03ODU3LDI3ICs4ODM2LDI3IEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0TWVk
aWFMaW5lKE1lZGlhTGlzdCogbWVkaWEpCiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JM
aXN0U3RhcnQoKQogewotICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSB5eXRleHQgLSBt
X2RhdGEuZ2V0KCk7CisgICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFy
dCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9y
TGlzdEVuZCgpCiB7CiAgICAgaWYgKCFtX2N1cnJlbnRSdWxlRGF0YSkKICAgICAgICAgcmV0dXJu
OwotICAgIFVDaGFyKiBsaXN0RW5kID0geXl0ZXh0OwotICAgIHdoaWxlIChsaXN0RW5kID4gbV9k
YXRhLmdldCgpICsgMSkgeworICAgIFVDaGFyKiBsaXN0RW5kID0gbV90b2tlblN0YXJ0OworICAg
IHdoaWxlIChsaXN0RW5kID4gbV9kYXRhU3RhcnQuZ2V0KCkgKyAxKSB7CiAgICAgICAgIGlmIChp
c0hUTUxTcGFjZSgqKGxpc3RFbmQgLSAxKSkpCiAgICAgICAgICAgICAtLWxpc3RFbmQ7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX3NlbGVjdG9yTGlzdFJh
bmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGEuZ2V0KCk7CisgICAgbV9zZWxlY3Rvckxpc3RSYW5n
ZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiB9CiAKIHZvaWQgQ1NTUGFyc2Vy
OjptYXJrUnVsZUJvZHlTdGFydCgpCiB7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0g
bV9kYXRhLmdldCgpOwotICAgIGlmICgqeXl0ZXh0ID09ICd7JykKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBpZiAoKm1fdG9rZW5T
dGFydCA9PSAneycpCiAgICAgICAgICsrb2Zmc2V0OyAvLyBTa2lwIHRoZSBydWxlIGJvZHkgb3Bl
bmluZyBicmFjZS4KICAgICBpZiAob2Zmc2V0ID4gbV9ydWxlQm9keVJhbmdlLnN0YXJ0KQogICAg
ICAgICBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBvZmZzZXQ7CkBAIC03ODg2LDcgKzg4NjUsNyBA
QCB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5U3RhcnQoKQogCiB2b2lkIENTU1BhcnNlcjo6
bWFya1J1bGVCb2R5RW5kKCkKIHsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2Rh
dGEuZ2V0KCk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3Rh
cnQuZ2V0KCk7CiAgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5lbmQpCiAgICAgICAg
IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSBvZmZzZXQ7CiB9CkBAIC03ODk1LDE1ICs4ODc0LDE1IEBA
IHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlTdGFydCgpCiB7CiAgICAgaWYgKCFtX2luU3R5
bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvcGVydHlSYW5n
ZS5zdGFydCA9IHl5dGV4dCAtIG1fZGF0YS5nZXQoKTsKKyAgICBtX3Byb3BlcnR5UmFuZ2Uuc3Rh
cnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKIH0KIAogdm9pZCBDU1NQYXJz
ZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0
eVBhcnNlZCkKIHsKICAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uKQogICAgICAg
ICByZXR1cm47Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhLmdldCgpOwot
ICAgIGlmICgqeXl0ZXh0ID09ICc7JykgLy8gSW5jbHVkZSBzZW1pY29sb24gaW50byB0aGUgcHJv
cGVydHkgdGV4dC4KKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFT
dGFydC5nZXQoKTsKKyAgICBpZiAoKm1fdG9rZW5TdGFydCA9PSAnOycpIC8vIEluY2x1ZGUgc2Vt
aWNvbG9uIGludG8gdGhlIHByb3BlcnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwogICAgIG1f
cHJvcGVydHlSYW5nZS5lbmQgPSBvZmZzZXQ7CiAgICAgaWYgKG1fcHJvcGVydHlSYW5nZS5zdGFy
dCAhPSBVSU5UX01BWCAmJiBtX2N1cnJlbnRSdWxlRGF0YSkgewpAQCAtNzkxMSw3ICs4ODkwLDcg
QEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQs
IGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkKICAgICAgICAgY29uc3QgdW5zaWduZWQgc3RhcnQgPSBt
X3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGVuZCA9IG1fcHJv
cGVydHlSYW5nZS5lbmQ7CiAgICAgICAgIEFTU0VSVChzdGFydCA8IGVuZCk7Ci0gICAgICAgIFN0
cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyhtX2RhdGEuZ2V0KCkgKyBzdGFydCwgZW5kIC0g
c3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBTdHJpbmcgcHJvcGVydHlTdHJpbmcg
PSBTdHJpbmcobV9kYXRhU3RhcnQuZ2V0KCkgKyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hp
dGVTcGFjZSgpOwogICAgICAgICBpZiAocHJvcGVydHlTdHJpbmcuZW5kc1dpdGgoIjsiLCB0cnVl
KSkKICAgICAgICAgICAgIHByb3BlcnR5U3RyaW5nID0gcHJvcGVydHlTdHJpbmcubGVmdChwcm9w
ZXJ0eVN0cmluZy5sZW5ndGgoKSAtIDEpOwogICAgICAgICBzaXplX3QgY29sb25JbmRleCA9IHBy
b3BlcnR5U3RyaW5nLmZpbmQoIjoiKTsKQEAgLTgxMzAsMzMgKzkxMDksNCBAQCBib29sIGlzVmFs
aWROdGhUb2tlbihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHRva2VuKQogICAgICAgICB8fCBlcXVh
bElnbm9yaW5nQ2FzZSh0b2tlbiwgIm4iKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh0b2tlbiwgIi1u
Iik7CiB9CiAKLSNkZWZpbmUgWVlfREVDTCBpbnQgQ1NTUGFyc2VyOjpsZXgoKQotI2RlZmluZSB5
eWNvbnN0IGNvbnN0Ci10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwotdHlwZWRlZiB1bnNpZ25l
ZCBZWV9DSEFSOwotLy8gVGhlIGZvbGxvd2luZyBsaW5lIG1ha2VzIHN1cmUgd2UgdHJlYXQgbm9u
LUxhdGluLTEgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlY3RseS4KLSNkZWZpbmUgWVlfU0NfVE9f
VUkoYykgKGMgPiAweGZmID8gMHhmZiA6IGMpCi0jZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04g
XAotICAgICAgICB5eXRleHQgPSB5eV9icDsgXAotICAgICAgICB5eWxlbmcgPSAoaW50KSAoeXlf
Y3AgLSB5eV9icCk7IFwKLSAgICAgICAgeXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0gICAgICAg
ICp5eV9jcCA9IDA7IFwKLSAgICAgICAgeXlfY19idWZfcCA9IHl5X2NwOwotI2RlZmluZSBZWV9C
UkVBSyBicmVhazsKLSNkZWZpbmUgRUNITwotI2RlZmluZSBZWV9SVUxFX1NFVFVQCi0jZGVmaW5l
IElOSVRJQUwgMAotI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVS
ICsgc3RhdGUgKyAxKQotI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHl5VG9rID0gRU5EX1RPS0VOOyBy
ZXR1cm4geXlUb2sKLSNkZWZpbmUgWVlfRkFUQUxfRVJST1IoYSkKLS8vIFRoZSBmb2xsb3dpbmcg
bGluZSBpcyBuZWVkZWQgdG8gYnVpbGQgdGhlIHRva2VuaXplciB3aXRoIGEgY29uZGl0aW9uIHN0
YWNrLgotLy8gVGhlIG1hY3JvIGlzIHVzZWQgaW4gdGhlIHRva2VuaXplciBncmFtbWFyIHdpdGgg
bGluZXMgY29udGFpbmluZwotLy8gQkVHSU4obWVkaWFxdWVyaWVzKSBhbmQgQkVHSU4oaW5pdGlh
bCkuIHl5X3N0YXJ0IGFjdHMgYXMgaW5kZXggdG8KLS8vIHRva2VuaXplciB0cmFuc2l0aW9uIHRh
YmxlLCBhbmQgJ21lZGlhcXVlcmllcycgYW5kICdpbml0aWFsJyBhcmUKLS8vIG9mZnNldCBtdWx0
aXBsaWVycyB0aGF0IHNwZWNpZnkgd2hpY2ggdHJhbnNpdGlvbnMgYXJlIGFjdGl2ZQotLy8gaW4g
dGhlIHRva2VuaXplciBkdXJpbmcgaW4gZWFjaCBjb25kaXRpb24gKHRva2VuaXplciBzdGF0ZSku
Ci0jZGVmaW5lIEJFR0lOIHl5X3N0YXJ0ID0gMSArIDIgKgotCi0jaW5jbHVkZSAidG9rZW5pemVy
LmNwcCIKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IGFkYzE5MDIuLmI1ZmNkM2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTMxNSwxMiArMzE1LDI2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gbV9ydWxl
Qm9keVJhbmdlLmVuZCA9IDA7IH0KICAgICB2b2lkIHJlc2V0UHJvcGVydHlNYXJrcygpIHsgbV9w
cm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLmVuZCA9IFVJTlRfTUFYOyB9CiAg
ICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOwotICAgIGludCB0b2tlbigpIHsgcmV0dXJuIHl5VG9r
OyB9Ci0gICAgVUNoYXIqIHRleHQoaW50KiBsZW5ndGgpOwotICAgIHZvaWQgY291bnRMaW5lcygp
OwotICAgIGludCBsZXgoKTsKKyAgICBpbnQgdG9rZW4oKSB7IHJldHVybiBtX3Rva2VuOyB9CiAK
IHByaXZhdGU6CisgICAgaW5saW5lIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoKTsKKworICAgIHN0
YXRpYyBpbmxpbmUgVUNoYXIqIGNoZWNrU3RyaW5nKFVDaGFyKiwgVUNoYXIpOworCisgICAgdm9p
ZCBwYXJzZUVzY2FwZShVQ2hhciomKTsKKyAgICBpbmxpbmUgYm9vbCBwYXJzZUlkZW50aWZpZXIo
VUNoYXIqJik7CisgICAgaW5saW5lIHZvaWQgcGFyc2VTdHJpbmcoVUNoYXIqJiwgVUNoYXIpOwor
ICAgIGlubGluZSB2b2lkIHBhcnNlVVJJKFVDaGFyKiYsIFVDaGFyKiYpOworICAgIGlubGluZSBi
b29sIHBhcnNlVW5pY29kZVJhbmdlKCk7CisgICAgYm9vbCBwYXJzZU50aENoaWxkKCk7CisgICAg
Ym9vbCBwYXJzZU50aENoaWxkRXh0cmEoKTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3RGdW5jdGlv
blRva2VuKGludCk7CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0TWVkaWFRdWVyeVRva2VuKGludCk7
CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0TnVtYmVyVG9rZW4oVUNoYXIqLCBpbnQpOworICAgIGlu
bGluZSB2b2lkIGRldGVjdERhc2hUb2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdEF0
VG9rZW4oaW50LCBib29sKTsKKwogICAgIHZvaWQgc2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0
Kik7CiAgICAgdm9pZCBlbnN1cmVDU1NWYWx1ZVBvb2woKTsKIApAQCAtMzU2LDE1ICszNzAsMTcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmKTsKIAotICAg
IE93bkFycmF5UHRyPFVDaGFyPiBtX2RhdGE7Ci0gICAgVUNoYXIqIHl5dGV4dDsKLSAgICBVQ2hh
ciogeXlfY19idWZfcDsKLSAgICBVQ2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X2xhc3Rf
YWNjZXB0aW5nX3N0YXRlOwotICAgIFVDaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAg
IGludCB5eWxlbmc7Ci0gICAgaW50IHl5VG9rOwotICAgIGludCB5eV9zdGFydDsKKyAgICBlbnVt
IFBhcnNpbmdNb2RlIHsKKyAgICAgICAgTm9ybWFsTW9kZSwKKyAgICAgICAgTWVkaWFRdWVyeU1v
ZGUsCisgICAgICAgIE50aENoaWxkTW9kZQorICAgIH07CisKKyAgICBQYXJzaW5nTW9kZSBtX3Bh
cnNpbmdNb2RlOworICAgIE93bkFycmF5UHRyPFVDaGFyPiBtX2RhdGFTdGFydDsKKyAgICBVQ2hh
ciogbV9kYXRhOworICAgIFVDaGFyKiBtX3Rva2VuU3RhcnQ7CisgICAgaW50IG1fdG9rZW47CiAg
ICAgaW50IG1fbGluZU51bWJlcjsKICAgICBpbnQgbV9sYXN0U2VsZWN0b3JMaW5lTnVtYmVyOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZsZXggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvdG9rZW5pemVyLmZsZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGMyOGRiY2EuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4
CisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLSVvcHRpb24gY2FzZS1pbnNlbnNpdGl2
ZQotJW9wdGlvbiBub3l5d3JhcAotJW9wdGlvbiA4Yml0Ci0lb3B0aW9uIHN0YWNrCi0lcyBtZWRp
YXF1ZXJ5Ci0lcyBmb3JrZXl3b3JkCi0lcyBudGhjaGlsZAotCi1oICAgICAgICAgICAgICAgWzAt
OWEtZkEtRl0KLW5vbmFzY2lpICAgICAgICBbXDIwMC1cMzc3XQotdW5pY29kZSAgICAgICAgIFxc
e2h9ezEsNn1bIFx0XHJcblxmXT8KLWVzY2FwZSAgICAgICAgICB7dW5pY29kZX18XFxbIC1+XDIw
MC1cMzc3XQotbm1zdGFydCAgICAgICAgIFtfYS16QS1aXXx7bm9uYXNjaWl9fHtlc2NhcGV9Ci1u
bWNoYXIgICAgICAgICAgW19hLXpBLVowLTktXXx7bm9uYXNjaWl9fHtlc2NhcGV9Ci1zdHJpbmcx
ICAgICAgICAgXCIoW15cblxyXGZcXCJdfFxce25sfXx7ZXNjYXBlfSkqXCIKLXN0cmluZzIgICAg
ICAgICBcJyhbXlxuXHJcZlxcJ118XFx7bmx9fHtlc2NhcGV9KSpcJwotCi1pZGVudCAgICAgICAg
ICAgLT97bm1zdGFydH17bm1jaGFyfSoKLW51bSAgICAgICAgICAgICBbMC05XSt8WzAtOV0qIi4i
WzAtOV0rCi1pbnRudW0gICAgICAgICAgWzAtOV0rCi1zdHJpbmcgICAgICAgICAge3N0cmluZzF9
fHtzdHJpbmcyfQotdXJsICAgICAgICAgICAgIChbISMkJSYqLX5dfHtub25hc2NpaX18e2VzY2Fw
ZX0pKgotdyAgICAgICAgICAgICAgIFsgXHRcclxuXGZdKgotbmwgICAgICAgICAgICAgIFxufFxy
XG58XHJ8XGYKLXJhbmdlICAgICAgICAgICBcP3sxLDZ9fHtofShcP3swLDV9fHtofShcP3swLDR9
fHtofShcP3swLDN9fHtofShcP3swLDJ9fHtofShcPz98e2h9KSkpKSkKLW50aCAgICAgICAgICAg
ICBbXCstXT97aW50bnVtfSpuKFtcdFxyXG4gXSpbXCstXVtcdFxyXG4gXSp7aW50bnVtfSk/Ci1u
dGhmdW5jICAgICAgICAgIm50aC0iKCJjaGlsZCJ8Im9mLXR5cGUifCJsYXN0LWNoaWxkInwibGFz
dC1vZi10eXBlIikKLQotJSUKLQotXC9cKlteKl0qXCorKFteLypdW14qXSpcKispKlwvIHtjb3Vu
dExpbmVzKCk7IC8qIGlnbm9yZSBjb21tZW50cyAqLyB9Ci0KLVsgXHRcclxuXGZdKyAgICAgICAg
ICAgIHtjb3VudExpbmVzKCk7IHl5VG9rID0gV0hJVEVTUEFDRTsgcmV0dXJuIHl5VG9rO30KLQot
IjwhLS0iICAgICAgICAgICAgICAgICAge3l5VG9rID0gU0dNTF9DRDsgcmV0dXJuIHl5VG9rO30K
LSItLT4iICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IFNHTUxfQ0Q7IHJldHVybiB5eVRvazt9
Ci0ifj0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBJTkNMVURFUzsgcmV0dXJuIHl5VG9r
O30KLSJ8PSIgICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IERBU0hNQVRDSDsgcmV0dXJuIHl5
VG9rO30KLSJePSIgICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IEJFR0lOU1dJVEg7IHJldHVy
biB5eVRvazt9Ci0iJD0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBFTkRTV0lUSDsgcmV0
dXJuIHl5VG9rO30KLSIqPSIgICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IENPTlRBSU5TOyBy
ZXR1cm4geXlUb2s7fQotPG1lZGlhcXVlcnk+Im5vdCIgICAgICAge3l5VG9rID0gTUVESUFfTk9U
OyByZXR1cm4geXlUb2s7fQotPG1lZGlhcXVlcnk+Im9ubHkiICAgICAge3l5VG9rID0gTUVESUFf
T05MWTsgcmV0dXJuIHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJhbmQiICAgICAgIHt5eVRvayA9IE1F
RElBX0FORDsgcmV0dXJuIHl5VG9rO30KLQote3N0cmluZ30gICAgICAgICAgICAgICAge3l5VG9r
ID0gU1RSSU5HOyByZXR1cm4geXlUb2s7fQote2lkZW50fSAgICAgICAgICAgICAgICAge3l5VG9r
ID0gSURFTlQ7IHJldHVybiB5eVRvazt9Ci08bnRoY2hpbGQ+e250aH0gICAgICAgICB7eXlUb2sg
PSBOVEg7IHJldHVybiB5eVRvazt9Ci08bnRoY2hpbGQ+IikiICAgICAgICAgICB7QkVHSU4oSU5J
VElBTCk7IHl5VG9rID0gKnl5dGV4dDsgcmV0dXJuIHl5VG9rO30KLQotIiMie2h9KyAgICAgICAg
ICAgICAgICAge3l5VG9rID0gSEVYOyByZXR1cm4geXlUb2s7fQotIiMie2lkZW50fSAgICAgICAg
ICAgICAge3l5VG9rID0gSURTRUw7IHJldHVybiB5eVRvazt9Ci0KLSJAaW1wb3J0IiAgICAgICAg
ICAgICAgIHtCRUdJTihtZWRpYXF1ZXJ5KTsgeXlUb2sgPSBJTVBPUlRfU1lNOyByZXR1cm4geXlU
b2s7fQotIkBwYWdlIiAgICAgICAgICAgICAgICAge3l5VG9rID0gUEFHRV9TWU07IHJldHVybiB5
eVRvazt9Ci0iQHRvcC1sZWZ0LWNvcm5lciIgICAgICB7eXlUb2sgPSBUT1BMRUZUQ09STkVSX1NZ
TTsgcmV0dXJuIHl5VG9rO30KLSJAdG9wLWxlZnQiICAgICAgICAgICAgIHt5eVRvayA9IFRPUExF
RlRfU1lNOyByZXR1cm4geXlUb2s7fQotIkB0b3AtY2VudGVyIiAgICAgICAgICAge3l5VG9rID0g
VE9QQ0VOVEVSX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAdG9wLXJpZ2h0IiAgICAgICAgICAgIHt5
eVRvayA9IFRPUFJJR0hUX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAdG9wLXJpZ2h0LWNvcm5lciIg
ICAgIHt5eVRvayA9IFRPUFJJR0hUQ09STkVSX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9t
LWxlZnQtY29ybmVyIiAgIHt5eVRvayA9IEJPVFRPTUxFRlRDT1JORVJfU1lNOyByZXR1cm4geXlU
b2s7fQotIkBib3R0b20tbGVmdCIgICAgICAgICAge3l5VG9rID0gQk9UVE9NTEVGVF9TWU07IHJl
dHVybiB5eVRvazt9Ci0iQGJvdHRvbS1jZW50ZXIiICAgICAgICB7eXlUb2sgPSBCT1RUT01DRU5U
RVJfU1lNOyByZXR1cm4geXlUb2s7fQotIkBib3R0b20tcmlnaHQiICAgICAgICAge3l5VG9rID0g
Qk9UVE9NUklHSFRfU1lNOyByZXR1cm4geXlUb2s7fQotIkBib3R0b20tcmlnaHQtY29ybmVyIiAg
e3l5VG9rID0gQk9UVE9NUklHSFRDT1JORVJfU1lNOyByZXR1cm4geXlUb2s7fQotIkBsZWZ0LXRv
cCIgICAgICAgICAgICAge3l5VG9rID0gTEVGVFRPUF9TWU07IHJldHVybiB5eVRvazt9Ci0iQGxl
ZnQtbWlkZGxlIiAgICAgICAgICB7eXlUb2sgPSBMRUZUTUlERExFX1NZTTsgcmV0dXJuIHl5VG9r
O30KLSJAbGVmdC1ib3R0b20iICAgICAgICAgIHt5eVRvayA9IExFRlRCT1RUT01fU1lNOyByZXR1
cm4geXlUb2s7fQotIkByaWdodC10b3AiICAgICAgICAgICAge3l5VG9rID0gUklHSFRUT1BfU1lN
OyByZXR1cm4geXlUb2s7fQotIkByaWdodC1taWRkbGUiICAgICAgICAge3l5VG9rID0gUklHSFRN
SURETEVfU1lNOyByZXR1cm4geXlUb2s7fQotIkByaWdodC1ib3R0b20iICAgICAgICAge3l5VG9r
ID0gUklHSFRCT1RUT01fU1lNOyByZXR1cm4geXlUb2s7fQotIkBtZWRpYSIgICAgICAgICAgICAg
ICAge0JFR0lOKG1lZGlhcXVlcnkpOyB5eVRvayA9IE1FRElBX1NZTTsgcmV0dXJuIHl5VG9rO30K
LSJAZm9udC1mYWNlIiAgICAgICAgICAgIHt5eVRvayA9IEZPTlRfRkFDRV9TWU07IHJldHVybiB5
eVRvazt9Ci0iQGNoYXJzZXQiICAgICAgICAgICAgICB7eXlUb2sgPSBDSEFSU0VUX1NZTTsgcmV0
dXJuIHl5VG9rO30KLSJAbmFtZXNwYWNlIiAgICAgICAgICAgIHt5eVRvayA9IE5BTUVTUEFDRV9T
WU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LXJ1bGUiICAgICAgICAge3l5VG9rID0gV0VC
S0lUX1JVTEVfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1kZWNscyIgICAgICAgIHt5
eVRvayA9IFdFQktJVF9ERUNMU19TWU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LXZhbHVl
IiAgICAgICAge3l5VG9rID0gV0VCS0lUX1ZBTFVFX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13
ZWJraXQtbWVkaWFxdWVyeSIgICB7QkVHSU4obWVkaWFxdWVyeSk7IHl5VG9rID0gV0VCS0lUX01F
RElBUVVFUllfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1zZWxlY3RvciIgICAgIHt5
eVRvayA9IFdFQktJVF9TRUxFQ1RPUl9TWU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LWtl
eWZyYW1lcyIgICAge3l5VG9rID0gV0VCS0lUX0tFWUZSQU1FU19TWU07IHJldHVybiB5eVRvazsg
fQotIkAtd2Via2l0LWtleWZyYW1lLXJ1bGUiIHt5eVRvayA9IFdFQktJVF9LRVlGUkFNRV9SVUxF
X1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQtcmVnaW9uIiAgICAgICB7eXlUb2sgPSBX
RUJLSVRfUkVHSU9OX1JVTEVfU1lNOyByZXR1cm4geXlUb2s7fQotCi0iQCJ7aWRlbnR9ICAgICAg
ICAgICAgICB7eXlUb2sgPSBBVEtFWVdPUkQ7IHJldHVybiB5eVRvazsgfQotCi0iISJ7d30iaW1w
b3J0YW50IiAgICAgICB7eXlUb2sgPSBJTVBPUlRBTlRfU1lNOyByZXR1cm4geXlUb2s7fQotCi17
bnVtfWVtICAgICAgICAgICAgICAgICB7eXlUb2sgPSBFTVM7IHJldHVybiB5eVRvazt9Ci17bnVt
fXJlbSAgICAgICAgICAgICAgICB7eXlUb2sgPSBSRU1TOyByZXR1cm4geXlUb2s7fQote251bX1f
X3FlbSAgICAgICAgICAgICAge3l5VG9rID0gUUVNUzsgcmV0dXJuIHl5VG9rO30gLyogcXVpcmt5
IGVtcyAqLwote251bX1leCAgICAgICAgICAgICAgICAge3l5VG9rID0gRVhTOyByZXR1cm4geXlU
b2s7fQote251bX1weCAgICAgICAgICAgICAgICAge3l5VG9rID0gUFhTOyByZXR1cm4geXlUb2s7
fQote251bX1jbSAgICAgICAgICAgICAgICAge3l5VG9rID0gQ01TOyByZXR1cm4geXlUb2s7fQot
e251bX1tbSAgICAgICAgICAgICAgICAge3l5VG9rID0gTU1TOyByZXR1cm4geXlUb2s7fQote251
bX1pbiAgICAgICAgICAgICAgICAge3l5VG9rID0gSU5TOyByZXR1cm4geXlUb2s7fQote251bX1w
dCAgICAgICAgICAgICAgICAge3l5VG9rID0gUFRTOyByZXR1cm4geXlUb2s7fQote251bX1wYyAg
ICAgICAgICAgICAgICAge3l5VG9rID0gUENTOyByZXR1cm4geXlUb2s7fQote251bX1kZWcgICAg
ICAgICAgICAgICAge3l5VG9rID0gREVHUzsgcmV0dXJuIHl5VG9rO30KLXtudW19cmFkICAgICAg
ICAgICAgICAgIHt5eVRvayA9IFJBRFM7IHJldHVybiB5eVRvazt9Ci17bnVtfWdyYWQgICAgICAg
ICAgICAgICB7eXlUb2sgPSBHUkFEUzsgcmV0dXJuIHl5VG9rO30KLXtudW19dHVybiAgICAgICAg
ICAgICAgIHt5eVRvayA9IFRVUk5TOyByZXR1cm4geXlUb2s7fQote251bX1tcyAgICAgICAgICAg
ICAgICAge3l5VG9rID0gTVNFQ1M7IHJldHVybiB5eVRvazt9Ci17bnVtfXMgICAgICAgICAgICAg
ICAgICB7eXlUb2sgPSBTRUNTOyByZXR1cm4geXlUb2s7fQote251bX1IeiAgICAgICAgICAgICAg
ICAge3l5VG9rID0gSEVSVFo7IHJldHVybiB5eVRvazt9Ci17bnVtfWtIeiAgICAgICAgICAgICAg
ICB7eXlUb2sgPSBLSEVSVFo7IHJldHVybiB5eVRvazt9Ci17bnVtfXtpZGVudH0gICAgICAgICAg
ICB7eXlUb2sgPSBESU1FTjsgcmV0dXJuIHl5VG9rO30KLXtudW19e2lkZW50fVwrICAgICAgICAg
IHt5eVRvayA9IElOVkFMSURESU1FTjsgcmV0dXJuIHl5VG9rO30KLXtudW19JSsgICAgICAgICAg
ICAgICAgIHt5eVRvayA9IFBFUkNFTlRBR0U7IHJldHVybiB5eVRvazt9Ci17aW50bnVtfSAgICAg
ICAgICAgICAgICB7eXlUb2sgPSBJTlRFR0VSOyByZXR1cm4geXlUb2s7fQote251bX0gICAgICAg
ICAgICAgICAgICAge3l5VG9rID0gRkxPQVRUT0tFTjsgcmV0dXJuIHl5VG9rO30KLQotIi13ZWJr
aXQtYW55KCIgICAgICAgICAge3l5VG9rID0gQU5ZRlVOQ1RJT047IHJldHVybiB5eVRvazt9Ci0i
bm90KCIgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBOT1RGVU5DVElPTjsgcmV0dXJuIHl5VG9r
O30KLSJ1cmwoInt3fXtzdHJpbmd9e3d9IikiIHt5eVRvayA9IFVSSTsgcmV0dXJuIHl5VG9rO30K
LSJ1cmwoInt3fXt1cmx9e3d9IikiICAgIHt5eVRvayA9IFVSSTsgcmV0dXJuIHl5VG9rO30KLSIt
d2Via2l0LWNhbGMoIiAgICAgICAgIHt5eVRvayA9IENBTENGVU5DVElPTjsgcmV0dXJuIHl5VG9r
O30KLSItd2Via2l0LW1pbigiICAgICAgICAgIHt5eVRvayA9IE1JTkZVTkNUSU9OOyByZXR1cm4g
eXlUb2s7fQotIi13ZWJraXQtbWF4KCIgICAgICAgICAge3l5VG9rID0gTUFYRlVOQ1RJT047IHJl
dHVybiB5eVRvazt9Ci17bnRoZnVuY30iKCIgICAgICAgICAgICB7QkVHSU4obnRoY2hpbGQpOyB5
eVRvayA9IEZVTkNUSU9OOyByZXR1cm4geXlUb2s7fQote2lkZW50fSIoIiAgICAgICAgICAgICAg
e3l5VG9rID0gRlVOQ1RJT047IHJldHVybiB5eVRvazt9Ci0KLVVcK3tyYW5nZX0gICAgICAgICAg
ICAgIHt5eVRvayA9IFVOSUNPREVSQU5HRTsgcmV0dXJuIHl5VG9rO30KLVVcK3tofXsxLDZ9LXto
fXsxLDZ9ICAgIHt5eVRvayA9IFVOSUNPREVSQU5HRTsgcmV0dXJuIHl5VG9rO30KLQotPG1lZGlh
cXVlcnk+InsiICAgICAgICAgfAotPG1lZGlhcXVlcnk+IjsiICAgICAgICAge0JFR0lOKElOSVRJ
QUwpOyB5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazsgfQotLiAgICAgICAgICAgICAgICAg
ICAgICAge3l5VG9rID0gKnl5dGV4dDsgcmV0dXJuIHl5VG9rO30KLQotJSUKZGlmZiAtLWdpdCBh
L3dzY3JpcHQgYi93c2NyaXB0CmluZGV4IGE5ODk5YjYuLmFkZmU2MzcgMTAwNjQ0Ci0tLSBhL3dz
Y3JpcHQKKysrIGIvd3NjcmlwdApAQCAtMjc4LDcgKzI3OCw2IEBAIGRlZiBidWlsZChibGQpOgog
ICAgICAgICAjIGludGVybWVkaWF0ZSBzb3VyY2VzCiAgICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgn
RG9jVHlwZVN0cmluZ3MuY3BwJykKICAgICAgICAgZXhjbHVkZXMuYXBwZW5kKCdIVE1MRW50aXR5
TmFtZXMuY3BwJykKLSAgICAgICAgZXhjbHVkZXMuYXBwZW5kKCd0b2tlbml6ZXIuY3BwJykKIAog
ICAgICAgICAjIFF0IHNwZWNpZmljIGZpbGUgaW4gY29tbW9uIHNvdXJjZXMKICAgICAgICAgZXhj
bHVkZXMuYXBwZW5kKCdDb250ZXh0U2hhZG93LmNwcCcpCi0tIAoxLjcuMi41Cgo=
</data>
<flag name="commit-queue"
          id="121301"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121239</attachid>
            <date>2012-01-05 01:27:36 -0800</date>
            <delta_ts>2012-01-11 04:47:45 -0800</delta_ts>
            <desc>release patch</desc>
            <filename>0001-css-tokenizer.patch</filename>
            <type>text/plain</type>
            <size>86910</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA1YjFkMWRkNTNkMDk5M2U5ZDIyODQ2ZmNlZDgwODhkMDI5Njk0MWUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogVGh1LCA1IEphbiAyMDEyIDAxOjI0OjM2IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gY3Nz
LXRva2VuaXplcgoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMTEgKwogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDExIC0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICA3NCArCiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlICAgICAgICAgICAgICAgICB8ICAgIDggLQogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMucHJpICAgICAgICAgICAgICAgICAgfCAgIDExIC0KIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSAtCiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDMgLQogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgICAgICAgICAgICAgfCAgIDE3IC0KIC4uLi9XZWJD
b3JlLmd5cC9zY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5ICAgIHwgIDEwMSAtLQogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0K
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAgIHwgICAg
NCAtCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8
ICAgIDQgLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgICAgICAgICAgICAgICAg
ICAgfCAxNTA2ICsrKysrKysrKysrKysrKystLS0tCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmggICAgICAgICAgICAgICAgICAgICB8ICAgNDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy90
b2tlbml6ZXIuZmxleCAgICAgICAgICAgICAgICAgIHwgIDEzMCAtLQogd3NjcmlwdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KIDE2IGZpbGVzIGNo
YW5nZWQsIDEzNDIgaW5zZXJ0aW9ucygrKSwgNTg3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0b2tl
bml6ZXIucHkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9jc3MvdG9rZW5pemVy
LmZsZXgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZjM5ZTBkNS4u
Y2M2NTUzYSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEyLTAxLTA1ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQ3VzdG9tIHdyaXR0ZW4gQ1NTIGxleGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB0b2tlbml6ZXIuY3BwIGZyb20gaW50
ZXJtZWRpYXRlIHNvdXJjZXMuCisKKyAgICAgICAgKiB3c2NyaXB0OgorCiAyMDEyLTAxLTA0ICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBNb3ZlIFdlYk1pbWVSZWdpc3RyeSBhbmQgZGVwZW5kZW5jaWVzIHRvIFNvdXJjZS9QbGF0Zm9y
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2ODhlMGYxLi4xYjJjZmIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMjMxMiwxNyArMjMxMiw2IEBAIEFERF9DVVNUT01fQ09NTUFORCgKIExJU1Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSFRN
TEVudGl0eVRhYmxlLmNwcCkKIAogCi0jIEdlbmVyYXRlIHRva2VuaXplcgotRklMRShUT19OQVRJ
VkVfUEFUSCAke1BFUkxfRVhFQ1VUQUJMRX0gUEVSTF9FWEVDVVRBQkxFX05BVElWRV9QQVRIKQot
QUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vdG9rZW5pemVyLmNwcAotICAgIE1BSU5fREVQRU5ERU5DWSAke1dFQkNPUkVfRElSfS9j
c3MvbWFrZXRva2VuaXplcgotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vY3NzL3Rva2VuaXpl
ci5mbGV4Ci0gICAgQ09NTUFORCAke0ZMRVhfRVhFQ1VUQUJMRX0gLXQgJHtXRUJDT1JFX0RJUn0v
Y3NzL3Rva2VuaXplci5mbGV4IHwgJHtQRVJMX0VYRUNVVEFCTEVfTkFUSVZFX1BBVEh9ICR7V0VC
Q09SRV9ESVJ9L2Nzcy9tYWtldG9rZW5pemVyID4gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L3Rva2VuaXplci5jcHAKLSAgICBWRVJCQVRJTSkKLUFERF9TT1VSQ0VfV0VCQ09SRV9ERVJJ
VkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9jc3MvQ1NTUGFyc2VyLmNwcCB0b2tlbml6
ZXIuY3BwKQotCi0KICMgUmVwbGFjZSAiOyIgd2l0aCAic3BhY2UiIGluIG9yZGVyIHRvIHJlY29n
bml6ZSBmZWF0dXJlIGRlZmluaXRpb24gaW4gY3NzIGZpbGVzLgogU0VUKEZFQVRVUkVfREVGSU5F
U19XSVRIX1NQQUNFX1NFUEFSQVRPUiAiIikKIEZPUkVBQ0goX2ZlYXR1cmUgJHtGRUFUVVJFX0RF
RklORVN9KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdiNjZhYzguLmYyNTFhNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NyBAQAorMjAxMi0wMS0wNSAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQu
b3JnPgorCisgICAgICAgIEN1c3RvbSB3cml0dGVuIENTUyBsZXhlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMDcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlcGxhY2VzIHRoZSBm
bGV4IGJhc2VkIENTUyBsZXhlciB0byBhCisgICAgICAgIG5ldywgY3V0b20gd3JpdHRlbiBDU1Mg
bGV4ZXIuIFRoZSBuZXcgY29kZSBpcyBtb3JlCisgICAgICAgIHRoYW4gMiB0aW1lcyBmYXN0ZXIu
IFRoZSBjb2RlIHN0cnVjdHVyZSBpcyBxdWl0ZQorICAgICAgICBzdHJhaWdodGZvcndhcmQ6IGl0
IHNlbGVjdHMgdGhlIHBvc3NpYmxlIHRva2VucyBieQorICAgICAgICB0aGUgZmlyc3QgY2hhcmFj
dGVyIGFuZCBlbXBsb3kgdXRpbGl0aWVzIHRvIHBhcnNlCisgICAgICAgIHRoZSBtb3JlIHRoYW4g
b25lIGNoYXJhY3RlciBsb25nIG9uZXMuCisKKyAgICAgICAgQWxsIGJ1aWxkIHN5c3RlbXMgdXBk
YXRlZC4KKworICAgICAgICBFeGlzdGluZyB0ZXN0cyBjb3ZlciB0aGlzIGZlYXR1cmUuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgor
ICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0b2tl
bml6ZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Omxvd2VyY2FzZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0Nhc2Vs
ZXNzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpDU1NQYXJzZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzZXR1cFBhcnNlcik6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3Vu
ZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Om1pZ2h0QmVSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1pZ2h0QmVSR0IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYWRv
dyk6CisgICAgICAgIChXZWJDb3JlOjppc0JvcmRlckltYWdlUmVwZWF0S2V5d29yZCk6CisgICAg
ICAgIChXZWJDb3JlOjpCb3JkZXJJbWFnZVNsaWNlUGFyc2VDb250ZXh0Ojpjb21taXRCb3JkZXJJ
bWFnZVNsaWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4
dDo6Y29tbWl0Qm9yZGVySW1hZ2VRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckluZm9G
b3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ1NTTGV0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzQ1NTRXNjYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVVJJTGV0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OmNoZWNrRXNjYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBXaGl0ZVNwYWNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmlzSWRlbnRpZmllclN0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Y2hlY2tTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZUVzY2FwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VVUkkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZVVuaWNvZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlTnRoQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZU50aENoaWxkRXh0cmEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RGdW5j
dGlvblRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0TWVkaWFRdWVy
eVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0TnVtYmVyVG9rZW4p
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3REYXNoVG9rZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1NlbGVj
dG9yTGlzdFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1NlbGVjdG9y
TGlzdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQpOgorICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dG9rZW4pOgorICAgICAgICAqIGNz
cy90b2tlbml6ZXIuZmxleDogUmVtb3ZlZC4KKwogMjAxMi0wMS0wNCAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjEwNDA4NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDg4YzViNjAu
LmI4ZmExMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNjEyLDcgKzYxMiw2
IEBAIGFsbCA6IFwKICAgICBNYXRoTUxFbGVtZW50RmFjdG9yeS5jcHAgXAogICAgIE1hdGhNTE5h
bWVzLmNwcCBcCiAgICAgWFBhdGhHcmFtbWFyLmNwcCBcCi0gICAgdG9rZW5pemVyLmNwcCBcCiAj
CiAKICMgLS0tLS0tLS0KQEAgLTcwOSwxMyArNzA4LDYgQEAgQ29sb3JEYXRhLmNwcCA6IHBsYXRm
b3JtL0NvbG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21ha2UtaGFzaC10b29scy5wbAogCiAjIC0t
LS0tLS0tCiAKLSMgQ1NTIHRva2VuaXplcgotCi10b2tlbml6ZXIuY3BwIDogY3NzL3Rva2VuaXpl
ci5mbGV4IGNzcy9tYWtldG9rZW5pemVyCi0JZmxleCAtdCAkPCB8IHBlcmwgJChXZWJDb3JlKS9j
c3MvbWFrZXRva2VuaXplciA+ICRACi0KLSMgLS0tLS0tLS0KLQogIyBDU1MgZ3JhbW1hcgogIyBO
T1RFOiBPbGRlciB2ZXJzaW9ucyBvZiBiaXNvbiBkbyBub3QgaW5qZWN0IGFuIGluY2x1c2lvbiBn
dWFyZCwgc28gd2UgYWRkIG9uZS4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMucHJpIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IGQ5
ZTRjYzguLmZkN2Y3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKQEAgLTI2LDggKzI2
LDYgQEAgU1ZHX05BTUVTID0gJCRQV0Qvc3ZnL3N2Z3RhZ3MuaW4KIAogWExJTktfTkFNRVMgPSAk
JFBXRC9zdmcveGxpbmthdHRycy5pbgogCi1UT0tFTklaRVIgPSAkJFBXRC9jc3MvdG9rZW5pemVy
LmZsZXgKLQogQ1NTQklTT04gPSAkJFBXRC9jc3MvQ1NTR3JhbW1hci55CiAKIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9YU0xUPTEpIHsKQEAgLTc1NSwxNSArNzUzLDYgQEAgYXJyYXlCdWZmZXJW
aWV3Q3VzdG9tU2NyaXB0LmNvbW1hbmRzID0gcGVybCAkJFBXRC9pbnNwZWN0b3IveHhkLnBsIFY4
QXJyYXlCdWZmZXIKIGFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdC5hZGRfb3V0cHV0X3RvX3Nv
dXJjZXMgPSBmYWxzZQogR0VORVJBVE9SUyArPSBhcnJheUJ1ZmZlclZpZXdDdXN0b21TY3JpcHQK
IAotIyBHRU5FUkFUT1IgMzogdG9rZW5pemVyIChmbGV4KQotdG9rZW5pemVyLm91dHB1dCA9ICR7
UU1BS0VfRklMRV9CQVNFfS5jcHAKLXRva2VuaXplci5pbnB1dCA9IFRPS0VOSVpFUgotdG9rZW5p
emVyLnNjcmlwdCA9ICQkUFdEL2Nzcy9tYWtldG9rZW5pemVyCi10b2tlbml6ZXIuY29tbWFuZHMg
PSBmbGV4IC10IDwgJHtRTUFLRV9GSUxFX05BTUV9IHwgcGVybCAkJHRva2VuaXplci5zY3JpcHQg
PiAke1FNQUtFX0ZJTEVfT1VUfQotIyB0b2tlbml6ZXIuY3BwIGlzIGluY2x1ZGVkIGludG8gQ1NT
UGFyc2VyLmNwcAotdG9rZW5pemVyLmFkZF9vdXRwdXRfdG9fc291cmNlcyA9IGZhbHNlCi1HRU5F
UkFUT1JTICs9IHRva2VuaXplcgotCiAjIEdFTkVSQVRPUiA0OiBDU1MgZ3JhbW1hcgogY3NzYmlz
b24ub3V0cHV0ID0gJHtRTUFLRV9GSUxFX0JBU0V9LmNwcAogY3NzYmlzb24uaW5wdXQgPSBDU1NC
SVNPTgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBlYmI4Y2RmLi5mMTM2YTFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtNjMzLDEwICs2MzMsNiBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0hU
TUxFbnRpdHlUYWJsZS5jcHA6ICQoV2ViQ29yZSkvaHRtbC9wYXJzZXIvSFRNTEVudGl0eU5hbQog
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Db2xvckRhdGEuY3BwOiAkKFdlYkNvcmUpL3BsYXRmb3Jt
L0NvbG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21ha2UtaGFzaC10b29scy5wbAogCSQoUEVSTCkg
JChXZWJDb3JlKS9tYWtlLWhhc2gtdG9vbHMucGwgJChHRU5TT1VSQ0VTX1dFQkNPUkUpICQoV2Vi
Q29yZSkvcGxhdGZvcm0vQ29sb3JEYXRhLmdwZXJmCiAKLSMgQ1NTIHRva2VuaXplcgotRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS90b2tlbml6ZXIuY3BwIDogJChXZWJDb3JlKS9jc3MvdG9rZW5pemVy
LmZsZXggJChXZWJDb3JlKS9jc3MvbWFrZXRva2VuaXplcgotCSQoQU1fVl9HRU4pJChGTEVYKSAt
dCAkPCB8ICQoUEVSTCkgJChXZWJDb3JlKS9jc3MvbWFrZXRva2VuaXplciA+ICRACi0KICMgQ1NT
IGdyYW1tYXIKIAogIyBOT1RFOiBvbGRlciB2ZXJzaW9ucyBvZiBiaXNvbiBkbyBub3QgaW5qZWN0
IGFuIGluY2x1c2lvbiBndWFyZCwgc28gd2UgZG8gaXQKQEAgLTkyMiw3ICs5MTgsNiBAQCBFWFRS
QV9ESVNUICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mvc3ZnLmNzcyBcCiAJU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU1Byb3BlcnR5TmFtZXMuaW4gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NWYWx1ZUtleXdvcmRzLmluIFwKLQlTb3VyY2UvV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZsZXgg
XAogCVNvdXJjZS9XZWJDb3JlL2Nzcy92aWV3LXNvdXJjZS5jc3MgXAogCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRGb250RmFtaWx5TmFtZXMuaW4gXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dEZhY3RvcnkuaW4gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZWFkNmRhZC4u
OTY1MTkyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xLDYgKzEsMyBAQAot
d2ViY29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvdG9r
ZW5pemVyLmNwcAotCiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvQ1NTR3JhbW1hci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQ1NTR3Jh
bW1hci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggZTc5Yzc5
OC4uMWNkMWFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTkw
OCwyMyArOTA4LDYgQEAKICAgICAgICAgICBdLAogICAgICAgICB9LAogICAgICAgICB7Ci0gICAg
ICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Rva2VuaXplcicsCi0gICAgICAgICAgJ2lucHV0cyc6IFsK
LSAgICAgICAgICAgICcuLi9jc3MvbWFrZXRva2VuaXplcicsCi0gICAgICAgICAgICAnLi4vY3Nz
L3Rva2VuaXplci5mbGV4JywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwot
ICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC90b2tlbml6ZXIu
Y3BwJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAn
cHl0aG9uJywKLSAgICAgICAgICAgICdzY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5JywK
LSAgICAgICAgICAgICc8QChfb3V0cHV0cyknLAotICAgICAgICAgICAgJy0tJywKLSAgICAgICAg
ICAgICc8QChfaW5wdXRzKScKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7CiAg
ICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2Rlcml2ZWRfc291cmNlc19hbGxfaW5fb25lJywKICAg
ICAgICAgICAnaW5wdXRzJzogWwogICAgICAgICAgICAgJ3NjcmlwdHMvYWN0aW9uX2Rlcml2ZWRz
b3VyY2VzYWxsaW5vbmUucHknLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXAvc2NyaXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5weSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0b2tlbml6ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY0YTI4ZWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvc2NyaXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5weQorKysgL2Rldi9udWxsCkBAIC0x
LDEwMSArMCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0j
Ci0jIENvcHlyaWdodCAoYykgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ci0jIHVzYWdlOiBhY3Rpb25fbWFrZXRva2VuaXplci5weSBPVVRQVVRTIC0tIElOUFVUUwotIwot
IyBNdWx0aXBsZSBJTlBVVFMgbWF5IGJlIGxpc3RlZC4gVGhlIHNlY3Rpb25zIGFyZSBzZXBhcmF0
ZWQgYnkgLS0gYXJndW1lbnRzLgotIwotIyBPVVRQVVRTIG11c3QgY29udGFpbiBhIHNpbmdsZSBp
dGVtOiBhIHBhdGggdG8gdG9rZW5pemVyLmNwcC4KLSMKLSMgSU5QVVRTIG11c3QgY29udGFpbiBl
eGFjdGx5IHR3byBpdGVtcy4gVGhlIGZpcnN0IGl0ZW0gbXVzdCBiZSB0aGUgcGF0aCB0bwotIyBt
YWtldG9rZW5pemVyLiBUaGUgc2Vjb25kIGl0ZW0gbXVzdCBiZSB0aGUgcGF0aCB0byB0b2tlbml6
ZXIuZmxleC4KLQotCi1pbXBvcnQgb3MKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0K
LQotZGVmIFNwbGl0QXJnc0ludG9TZWN0aW9ucyhhcmdzKToKLSAgICBzZWN0aW9ucyA9IFtdCi0g
ICAgd2hpbGUgbGVuKGFyZ3MpID4gMDoKLSAgICAgICAgaWYgbm90ICctLScgaW4gYXJnczoKLSAg
ICAgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gJy0tJyBsZWZ0LCBldmVyeXRoaW5nIHJlbWFpbmlu
ZyBpcyBhbiBlbnRpcmUgc2VjdGlvbi4KLSAgICAgICAgICAgIGRhc2hlcyA9IGxlbihhcmdzKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGFzaGVzID0gYXJncy5pbmRleCgnLS0nKQotCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChhcmdzWzpkYXNoZXNdKQotCi0gICAgICAgICMgTmV4dCB0
aW1lIHRocm91Z2ggdGhlIGxvb3AsIGxvb2sgYXQgZXZlcnl0aGluZyBhZnRlciB0aGlzICctLScu
Ci0gICAgICAgIGlmIGRhc2hlcyArIDEgPT0gbGVuKGFyZ3MpOgotICAgICAgICAgICAgIyBJZiB0
aGUgJy0tJyBpcyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCB3ZSB3b24ndCBjb21lIGJhY2sgdGhy
b3VnaCB0aGUKLSAgICAgICAgICAgICMgbG9vcCBhZ2Fpbi4gQWRkIGFuIGVtcHR5IHNlY3Rpb24g
bm93IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vdGhpbmduZXNzCi0gICAgICAgICAgICAjIGZvbGxv
d2luZyB0aGUgZmluYWwgJy0tJy4KLSAgICAgICAgICAgIGFyZ3MgPSBbXQotICAgICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKGFyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhcmdzID0g
YXJnc1tkYXNoZXMgKyAxOl0KLQotICAgIHJldHVybiBzZWN0aW9ucwotCi0KLWRlZiBtYWluKGFy
Z3MpOgotICAgIHNlY3Rpb25zID0gU3BsaXRBcmdzSW50b1NlY3Rpb25zKGFyZ3NbMTpdKQotICAg
IGFzc2VydCBsZW4oc2VjdGlvbnMpID09IDIKLSAgICAob3V0cHV0cywgaW5wdXRzKSA9IHNlY3Rp
b25zCi0KLSAgICBhc3NlcnQgbGVuKG91dHB1dHMpID09IDEKLSAgICBvdXRwdXQgPSBvdXRwdXRz
WzBdCi0KLSAgICBhc3NlcnQgbGVuKGlucHV0cykgPT0gMgotICAgIG1ha2V0b2tlbml6ZXIgPSBp
bnB1dHNbMF0KLSAgICBmbGV4SW5wdXQgPSBpbnB1dHNbMV0KLQotICAgICMgRG8gaXQuIGNoZWNr
X2NhbGwgaXMgbmV3IGluIDIuNSwgc28gc2ltdWxhdGUgaXRzIGJlaGF2aW9yIHdpdGggY2FsbCBh
bmQKLSAgICAjIGFzc2VydC4KLSAgICBvdXRmaWxlID0gb3BlbihvdXRwdXQsICd3YicpCi0gICAg
cDEgPSBzdWJwcm9jZXNzLlBvcGVuKFsnZmxleCcsICctdCcsIGZsZXhJbnB1dF0sIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUpCi0gICAgcDIgPSBzdWJwcm9jZXNzLlBvcGVuKFsncGVybCcsIG1ha2V0
b2tlbml6ZXJdLCBzdGRpbj1wMS5zdGRvdXQsIHN0ZG91dD1vdXRmaWxlKQotCi0gICAgcjEgPSBw
MS53YWl0KCkKLSAgICByMiA9IHAyLndhaXQoKQotICAgIGFzc2VydCByMSA9PSAwCi0gICAgYXNz
ZXJ0IHIyID09IDAKLQotICAgIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKLSAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4MzA1
ZmNlLi42MTQwNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC04MjYzLDcgKzgyNjMsNiBAQAogICAg
ICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvWE1MVmlld2Vy
SlMuaCcsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9YUGF0aEdyYW1tYXIuY3BwJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL1hQYXRoR3JhbW1hci5oJywKLSAgICAgICAgICAgICc8KFBST0RVQ1Rf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL3Rva2VuaXplci5jcHAnLAogICAgICAgICBdLAog
ICAgICAgICAnZXhwb3J0X2ZpbGVfZ2VuZXJhdG9yX2ZpbGVzJzogWwogICAgICAgICAgICAgJzwo
UFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRXhwb3J0RmlsZUdlbmVyYXRvci5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRl
eCBkMGNmMzk1Li5mODk3ZmFiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagpAQCAtMzU0MjIsMTAgKzM1NDIyLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXHRva2VuaXplci5mbGV4IgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcV2ViS2l0
Q1NTRmlsdGVyVmFsdWUuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZjhiZmM3Li4zNTUy
Mzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC04OTQ2LDcgKzg5NDYsNiBAQAogCQk2NTY1ODE0NDA5RDEzMDQzMDAwRTYxRDcg
LyogQ1NTR3JhbW1hci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTR3JhbW1hci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MTQ3MDlE
MTMwNDMwMDBFNjFENyAvKiBDU1NWYWx1ZUtleXdvcmRzLmdwZXJmICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRzLmdwZXJmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2NTY1ODE0ODA5RDEzMDQzMDAwRTYxRDcgLyogQ1NTVmFsdWVLZXl3b3Jkcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTVmFsdWVLZXl3b3Jkcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2NTY1ODE0QzA5RDEzMDQzMDAwRTYxRDcgLyogdG9rZW5p
emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB0b2tlbml6ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTY1ODFBQzA5RDE0RUU2MDAwRTYx
RDcgLyogQ2hhcnNldERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENoYXJzZXREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2NTgx
QUUwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50
U3R5bGVTaGVldHNEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTA0NTMsNyArMTA0NTIsNiBAQAogCQk5M0NBNEM5RDA5REY5M0ZBMDBERjg2NzcgLyog
bWFrZXZhbHVlcy5wbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBtYWtldmFsdWVzLnBsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NBNEM5RjA5REY5M0ZBMDBERjg2NzcgLyogcXVp
cmtzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBxdWlya3MuY3NzOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0NBNENBMjA5REY5M0ZBMDBERjg2NzcgLyogc3ZnLmNzcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBzdmcuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5M0NBNENBMzA5REY5M0ZBMDBERjg2NzcgLyogdG9rZW5pemVyLmZsZXggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gdG9rZW5pemVyLmZsZXg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQ0NGMDI2MEFGNkM1MjkwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRpb25BY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNDQ0YwNUYwQUY2Q0E3NjAwMDE4RTg5IC8qIE5hdmlnYXRpb25B
Y3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdGlv
bkFjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDNDMTU4MEY5N0E5
RDcwMDUzQzAxMyAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01IVE1MQ2FudmFzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTU0NzEsNyArMTU0NjksNiBAQAogCQkJCTY1NjU4MUU3MDlEMTUwOEQwMDBF
NjFENyAvKiBTVkdFbGVtZW50RmFjdG9yeS5oICovLAogCQkJCTY1NjU4MUU4MDlEMTUwOEQwMDBF
NjFENyAvKiBTVkdOYW1lcy5jcHAgKi8sCiAJCQkJNjU2NTgxRTkwOUQxNTA4RDAwMEU2MUQ3IC8q
IFNWR05hbWVzLmggKi8sCi0JCQkJNjU2NTgxNEMwOUQxMzA0MzAwMEU2MUQ3IC8qIHRva2VuaXpl
ci5jcHAgKi8sCiAJCQkJNjU2NTgxQUUwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxl
U2hlZXRzLmggKi8sCiAJCQkJNjU2NTgxQUYwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0
eWxlU2hlZXRzRGF0YS5jcHAgKi8sCiAJCQkJMUExNDE0QjMxM0EwRjA1MDAwMTk5OTZDIC8qIFdl
YktpdEZvbnRGYW1pbHlOYW1lcy5jcHAgKi8sCkBAIC0yMDk3Niw3ICsyMDk3Myw2IEBACiAJCQkJ
QjIyMjdCMDIwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1Byb3BlcnR5TmFtZXMuaW4gKi8sCiAJ
CQkJQjIyMjdCMDMwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1N0eWxlU2VsZWN0b3IuY3BwICov
LAogCQkJCUIyMjI3QjA0MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NWYWx1ZUtleXdvcmRzLmlu
ICovLAotCQkJCTkzQ0E0Q0EzMDlERjkzRkEwMERGODY3NyAvKiB0b2tlbml6ZXIuZmxleCAqLywK
IAkJCQlCQzVFQzE3NjBBNTA3RTNFMDA2MDA3RjUgLyogdmlldy1zb3VyY2UuY3NzICovLAogCQkJ
CTMxMDYwMzZDMTQzMjdEMkUwMEFCRjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAgKi8s
CiAJCQkJMzEwNjAzNkQxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmgg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDc5NDBiMjcuLjdjMmExMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xNzcsOCArMTc3LDI0IEBAIGlubGluZSB2b2lkIENT
U1BhcnNlcjo6ZW5zdXJlQ1NTVmFsdWVQb29sKCkKICAgICAgICAgbV9jc3NWYWx1ZVBvb2wgPSBD
U1NWYWx1ZVBvb2w6OmNyZWF0ZSgpOwogfQogCitzdGF0aWMgaW5saW5lIFVDaGFyIGxvd2VyY2Fz
ZUNoYXJhY3RlcihVQ2hhciBjaHIpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNl
ZCBmb3IgY29tcGFyaW5nIGFueSBpbnB1dCBjaGFyYWN0ZXIKKyAgICAvLyB0byBhIGxvd2VyY2Fz
ZSBFbmdsaXNoIGNoYXJhY3Rlci4gVGhlIGlzQ2FzZWxlc3NFcXVhbCBiZWxvdworICAgIC8vIHNo
b3VsZCBiZSB1c2VkIGZvciByZWd1bGFyIGNvbXBhcmlzb24sIGJ1dCBzd2l0Y2ggc3RhdGVtZW50
cworICAgIC8vIHJlcXVpcmUgZGlyZWN0IHVzZSBvZiB0aGlzIGZ1bmN0aW9uLgorICAgIHJldHVy
biBjaHIgfCAweDIwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNDYXNlbGVzc0VxdWFsKFVD
aGFyIGNzc0NoYXJhY3RlciwgVUNoYXIgY2hhcmFjdGVyKQoreworICAgIC8vIFRoaXMgaXMgYW4g
b3ZlcmxvYWRlZCBmdW5jdGlvbiwgdGhpcyBpbnN0YW5jZSBjaGVja3MgY2hhcmFjdGVycy4KKyAg
ICBBU1NFUlQoY2hhcmFjdGVyID49ICdhJyAmJiBjaGFyYWN0ZXIgPD0gJ3onKTsKKyAgICByZXR1
cm4gTElLRUxZKGxvd2VyY2FzZUNoYXJhY3Rlcihjc3NDaGFyYWN0ZXIpID09IGNoYXJhY3Rlcik7
Cit9CisKIC8vIEZJWE1FOiBDYW4gbV9wYXJzZWRQcm9wZXJ0aWVzIGp1c3QgYmUgYSBWZWN0b3I/
Ci0gICAgCisKIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICA6
IG1fc3RyaWN0KHN0cmljdFBhcnNpbmcpCiAgICAgLCBtX2ltcG9ydGFudChmYWxzZSkKQEAgLTIw
MCw3ICsyMTYsOSBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAg
ICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQogICAgICwgbV9ydWxlUmFu
Z2VNYXAoMCkKICAgICAsIG1fY3VycmVudFJ1bGVEYXRhKDApCi0gICAgLCB5eV9zdGFydCgxKQor
ICAgICwgbV9wYXJzaW5nTW9kZShOb3JtYWxNb2RlKQorICAgICwgbV9kYXRhKDApCisgICAgLCBt
X3Rva2VuKDApCiAgICAgLCBtX2xpbmVOdW1iZXIoMCkKICAgICAsIG1fbGFzdFNlbGVjdG9yTGlu
ZU51bWJlcigwKQogICAgICwgbV9hbGxvd0ltcG9ydFJ1bGVzKHRydWUpCkBAIC0yNDIsMjcgKzI2
MCwyMiBAQCB2b2lkIENTU1BhcnNlclN0cmluZzo6bG93ZXIoKQogCiB2b2lkIENTU1BhcnNlcjo6
c2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29u
c3QgY2hhciogc3VmZml4KQogewotICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCkgKyBz
dHJsZW4ocHJlZml4KSArIHN0cmxlbihzdWZmaXgpICsgMjsKKyAgICBpbnQgbGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpICsgc3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3VmZml4KSArIDE7CiAKLSAg
ICBtX2RhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltsZW5ndGhdKTsKKyAgICBtX2RhdGFT
dGFydCA9IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW2xlbmd0aF0pOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdHJsZW4ocHJlZml4KTsgaSsrKQotICAgICAgICBtX2RhdGFbaV0gPSBw
cmVmaXhbaV07CisgICAgICAgIG1fZGF0YVN0YXJ0W2ldID0gcHJlZml4W2ldOwogCi0gICAgbWVt
Y3B5KG1fZGF0YS5nZXQoKSArIHN0cmxlbihwcmVmaXgpLCBzdHJpbmcuY2hhcmFjdGVycygpLCBz
dHJpbmcubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkobV9kYXRhU3RhcnQu
Z2V0KCkgKyBzdHJsZW4ocHJlZml4KSwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0
aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAKICAgICB1bnNpZ25lZCBzdGFydCA9IHN0cmxlbihwcmVm
aXgpICsgc3RyaW5nLmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIGVuZCA9IHN0YXJ0ICsgc3RybGVu
KHN1ZmZpeCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKLSAg
ICAgICAgbV9kYXRhW2ldID0gc3VmZml4W2kgLSBzdGFydF07CisgICAgICAgIG1fZGF0YVN0YXJ0
W2ldID0gc3VmZml4W2kgLSBzdGFydF07CiAKLSAgICBtX2RhdGFbbGVuZ3RoIC0gMV0gPSAwOwot
ICAgIG1fZGF0YVtsZW5ndGggLSAyXSA9IDA7CisgICAgbV9kYXRhU3RhcnRbbGVuZ3RoIC0gMV0g
PSAwOwogCi0gICAgeXlfaG9sZF9jaGFyID0gMDsKLSAgICB5eWxlbmcgPSAwOwotICAgIHl5dGV4
dCA9IG1fZGF0YS5nZXQoKTsKLSAgICB5eV9jX2J1Zl9wID0geXl0ZXh0OwotICAgIHl5X2hvbGRf
Y2hhciA9ICp5eV9jX2J1Zl9wOworICAgIG1fZGF0YSA9IG1fdG9rZW5TdGFydCA9IG1fZGF0YVN0
YXJ0LmdldCgpOwogICAgIHJlc2V0UnVsZUJvZHlNYXJrcygpOwogfQogCkBAIC00MjIsNyArNDM1
LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUjsKLSAgICBpZiAobGVuZ3RoID4gMiAmJiAoY2hhcmFjdGVyc1tsZW5ndGggLSAy
XSB8IDB4MjApID09ICdwJyAmJiAoY2hhcmFjdGVyc1tsZW5ndGggLSAxXSB8IDB4MjApID09ICd4
JykgeworICAgIGlmIChsZW5ndGggPiAyICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzW2xl
bmd0aCAtIDJdLCAncCcpICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzW2xlbmd0aCAtIDFd
LCAneCcpKSB7CiAgICAgICAgIGxlbmd0aCAtPSAyOwogICAgICAgICB1bml0ID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWDsKICAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDEgJiYgY2hhcmFjdGVy
c1tsZW5ndGggLSAxXSA9PSAnJScpIHsKQEAgLTkwNiwxMCArOTE5LDEwIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlQb3NpdGlvbjogICAgICAgICAgICAgLy8gc3RhdGlj
IHwgcmVsYXRpdmUgfCBhYnNvbHV0ZSB8IGZpeGVkIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVTdGF0aWMgfHwKLSAgICAgICAgICAgICBpZCA9PSBDU1NWYWx1ZVJlbGF0aXZl
IHx8Ci0gICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVBYnNvbHV0ZSB8fAotICAgICAgICAgICAg
IGlkID09IENTU1ZhbHVlRml4ZWQpCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVN0YXRpYwor
ICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVSZWxhdGl2ZQorICAgICAgICAgICAgfHwgaWQg
PT0gQ1NTVmFsdWVBYnNvbHV0ZQorICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVGaXhlZCkK
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKQEAg
LTkxOSwxMSArOTMyLDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0Jl
Zm9yZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlcjoKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6Ci0gICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUF1dG8gfHwKLSAgICAgICAgICAgICBpZCA9PSBDU1NWYWx1ZUFsd2F5cyB8fAot
ICAgICAgICAgICAgIGlkID09IENTU1ZhbHVlQXZvaWQgfHwKLSAgICAgICAgICAgICBpZCA9PSBD
U1NWYWx1ZUxlZnQgfHwKLSAgICAgICAgICAgICBpZCA9PSBDU1NWYWx1ZVJpZ2h0KQorICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvCisgICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUFs
d2F5cworICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVBdm9pZAorICAgICAgICAgICAgfHwg
aWQgPT0gQ1NTVmFsdWVMZWZ0CisgICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZVJpZ2h0KQog
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIApAQCAt
OTM1LDggKzk0OCw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0
eUNlbGxzOiAgICAgICAgICAvLyBzaG93IHwgaGlkZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlU2hvdyB8fAotICAgICAgICAgICAgIGlkID09IENTU1ZhbHVlSGlkZSkKKyAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlU2hvdworICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFs
dWVIaWRlKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVh
azsKIApAQCAtOTQ1LDExICs5NTgsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHJldHVybiBwYXJzZUNvbnRlbnQocHJv
cElkLCBpbXBvcnRhbnQpOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6ICAgICAg
ICAgIC8vIG5vcm1hbCB8IHByZSB8IG5vd3JhcCB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9ybWFsIHx8Ci0gICAgICAgICAgICBpZCA9PSBDU1NWYWx1ZVByZSB8fAotICAg
ICAgICAgICAgaWQgPT0gQ1NTVmFsdWVQcmVXcmFwIHx8Ci0gICAgICAgICAgICBpZCA9PSBDU1NW
YWx1ZVByZUxpbmUgfHwKLSAgICAgICAgICAgIGlkID09IENTU1ZhbHVlTm93cmFwKQorICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwKKyAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVl
UHJlCisgICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZVByZVdyYXAKKyAgICAgICAgICAgIHx8
IGlkID09IENTU1ZhbHVlUHJlTGluZQorICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVOb3dy
YXApCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwog
CkBAIC0xNDA4LDcgKzE0MjEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHJldHVybiBwYXJzZUNvdW50ZXIocHJv
cElkLCAxLCBpbXBvcnRhbnQpOwogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwotICAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlclJlc2V0OiAgICAgICAgLy8g
WyA8aWRlbnRpZmllcj4gPGludGVnZXI+PyBdKyB8IG5vbmUgfCBpbmhlcml0CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUNvdW50ZXJSZXNldDogICAgICAgIC8vIFsgPGlkZW50aWZpZXI+IDxpbnRlZ2Vy
Pj8gXSsgfCBub25lIHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgIT0gQ1NTVmFsdWVOb25lKQog
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ291bnRlcihwcm9wSWQsIDAsIGltcG9ydGFudCk7CiAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKQEAgLTIwMDksNyArMjAyMiw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoKICAgICAgICAgaWYgKChpZCA+
PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NTVmFsdWVXaW5kb3d0ZXh0KSB8fCBpZCA9PSBDU1NW
YWx1ZU1lbnUKICAgICAgICAgICAgIHx8IChpZCA+PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0Nv
bG9yICYmIGlkIDwgQ1NTVmFsdWVXZWJraXRUZXh0ICYmICFtX3N0cmljdCkpIHsKLSAgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNl
Q29sb3IoKTsKICAgICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKQEAgLTI4NzgsNyArMjg5MSw3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kQ29sb3Io
KQogICAgIGludCBpZCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkOwogICAgIGlmIChpZCA9
PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgKGlkID49IENTU1ZhbHVlQXF1YSAmJiBpZCA8PSBDU1NW
YWx1ZVdpbmRvd3RleHQpIHx8IGlkID09IENTU1ZhbHVlTWVudSB8fCBpZCA9PSBDU1NWYWx1ZUN1
cnJlbnRjb2xvciB8fAogICAgICAgICAoaWQgPj0gQ1NTVmFsdWVHcmV5ICYmIGlkIDwgQ1NTVmFs
dWVXZWJraXRUZXh0ICYmICFtX3N0cmljdCkpCi0gICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CiAgICAgcmV0dXJuIHBhcnNlQ29sb3IoKTsK
IH0KIApAQCAtNDc2OSwxMCArNDc4MiwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJH
QkEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICBpZiAobGVu
Z3RoIDwgNSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBjaGFyYWN0ZXJzWzRd
ID09ICcoJwotICAgICAgICAmJiAoY2hhcmFjdGVyc1swXSB8IDB4MjApID09ICdyJwotICAgICAg
ICAmJiAoY2hhcmFjdGVyc1sxXSB8IDB4MjApID09ICdnJwotICAgICAgICAmJiAoY2hhcmFjdGVy
c1syXSB8IDB4MjApID09ICdiJwotICAgICAgICAmJiAoY2hhcmFjdGVyc1szXSB8IDB4MjApID09
ICdhJzsKKyAgICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMF0sICdyJykKKyAg
ICAgICAgJiYgaXNDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMV0sICdnJykKKyAgICAgICAgJiYg
aXNDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0sICdiJykKKyAgICAgICAgJiYgaXNDYXNlbGVz
c0VxdWFsKGNoYXJhY3RlcnNbM10sICdhJyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdo
dEJlUkdCKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC00Nzgw
LDkgKzQ3OTMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQihjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIGlmIChsZW5ndGggPCA0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGNoYXJhY3RlcnNbM10gPT0gJygnCi0gICAgICAg
ICYmIChjaGFyYWN0ZXJzWzBdIHwgMHgyMCkgPT0gJ3InCi0gICAgICAgICYmIChjaGFyYWN0ZXJz
WzFdIHwgMHgyMCkgPT0gJ2cnCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzJdIHwgMHgyMCkgPT0g
J2InOworICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1swXSwgJ3InKQorICAg
ICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwgJ2cnKQorICAgICAgICAmJiBp
c0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1syXSwgJ2InKTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6
OmZhc3RQYXJzZUNvbG9yKFJHQkEzMiYgcmdiLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc3Ry
aWN0KQpAQCAtNTE3MCw3ICs1MTgzLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1Bh
cnNlcjo6cGFyc2VTaGFkb3coQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIGkKIAogICAg
ICAgICAgICAgaWYgKCFwYXJzZWRDb2xvciB8fCAhY29udGV4dC5hbGxvd0NvbG9yKQogICAgICAg
ICAgICAgICAgIHJldHVybiAwOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9yIGxlbmd0
aCBhbmQgaXMgaW52YWxpZCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQg
aXMgYSBjb2xvciwgYnV0IGEgY29sb3IgaXNuJ3QgYWxsb3dlZCBhdCB0aGlzIHBvaW50LgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBhIGNvbG9yLCBidXQgYSBjb2xvciBpc24n
dCBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCiAKICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Q29s
b3IocGFyc2VkQ29sb3IucmVsZWFzZSgpKTsKICAgICAgICAgfQpAQCAtNTQ1OCw3ICs1NDcxLDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UoaW50IHByb3BJZCwgUmVmUHRyPENT
U1ZhbHVlPiYgcmVzdWx0KQogCiBzdGF0aWMgYm9vbCBpc0JvcmRlckltYWdlUmVwZWF0S2V5d29y
ZChpbnQgaWQpCiB7Ci0gICAgIHJldHVybiBpZCA9PSBDU1NWYWx1ZVN0cmV0Y2ggfHwgaWQgPT0g
Q1NTVmFsdWVSZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSB8fCBpZCA9PSBDU1NWYWx1ZVJv
dW5kOworICAgIHJldHVybiBpZCA9PSBDU1NWYWx1ZVN0cmV0Y2ggfHwgaWQgPT0gQ1NTVmFsdWVS
ZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kOwogfQog
CiBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+
JiByZXN1bHQpCkBAIC01NTQzLDcgKzU1NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2xl
ZnQgPSBtX2Nzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobV9yaWdodC0+Z2V0RG91YmxlVmFsdWUo
KSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpbV9yaWdodC0+cHJpbWl0aXZlVHlwZSgp
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1fbGVmdCkKLSAgICAgICAgICAgICBtX2xlZnQg
PSBtX2Nzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobV9yaWdodC0+Z2V0RG91YmxlVmFsdWUoKSwg
KENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpbV9yaWdodC0+cHJpbWl0aXZlVHlwZSgpKTsK
KyAgICAgICAgICAgIG1fbGVmdCA9IG1fY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShtX3JpZ2h0
LT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3JpZ2h0
LT5wcmltaXRpdmVUeXBlKCkpOwogCiAgICAgICAgIC8vIE5vdyBidWlsZCBhIHJlY3QgdmFsdWUg
dG8gaG9sZCBhbGwgZm91ciBvZiBvdXIgcHJpbWl0aXZlIHZhbHVlcy4KICAgICAgICAgUmVmUHRy
PFF1YWQ+IHF1YWQgPSBRdWFkOjpjcmVhdGUoKTsKQEAgLTU2NTksNyArNTY3Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIG1fbGVmdCA9IG1fY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShtX3Jp
Z2h0LT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3Jp
Z2h0LT5wcmltaXRpdmVUeXBlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbV9sZWZ0KQot
ICAgICAgICAgICAgIG1fbGVmdCA9IG1fY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShtX3JpZ2h0
LT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3JpZ2h0
LT5wcmltaXRpdmVUeXBlKCkpOworICAgICAgICAgICAgbV9sZWZ0ID0gbV9jc3NWYWx1ZVBvb2wt
PmNyZWF0ZVZhbHVlKG1fcmlnaHQtPmdldERvdWJsZVZhbHVlKCksIChDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzKW1fcmlnaHQtPnByaW1pdGl2ZVR5cGUoKSk7CiAKICAgICAgICAgLy8gTm93
IGJ1aWxkIGEgcXVhZCB2YWx1ZSB0byBob2xkIGFsbCBmb3VyIG9mIG91ciBwcmltaXRpdmUgdmFs
dWVzLgogICAgICAgICBSZWZQdHI8UXVhZD4gcXVhZCA9IFF1YWQ6OmNyZWF0ZSgpOwpAQCAtNjYx
OSw3ICs2NjMyLDcgQEAgc3RhdGljIHZvaWQgZmlsdGVySW5mb0Zvck5hbWUoY29uc3QgQ1NTUGFy
c2VyU3RyaW5nJiBuYW1lLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZToKICAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAic2VwaWEoIikpCiAgICAgICAgIGZpbHRlclR5cGUgPSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb247CiAgICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNhdHVyYXRlKCIpKQotICAgICAgIGZpbHRlclR5cGUgPSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb247CisgICAgICAgIGZp
bHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb247
CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImh1ZS1yb3RhdGUoIikpCiAg
ICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVy
T3BlcmF0aW9uOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJpbnZlcnQo
IikpCkBAIC03MjIyLDIzNiArNzIzNSwxMjAyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRG
ZWF0dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1z
dGF0aWMgaW5saW5lIGludCB5eWVycm9yKGNvbnN0IGNoYXIqKSB7IHJldHVybiAxOyB9Ci0KICNk
ZWZpbmUgRU5EX1RPS0VOIDAKIAogI2luY2x1ZGUgIkNTU0dyYW1tYXIuaCIKIAorZW51bSBDaGFy
YWN0ZXJUeXBlIHsKKyAgICAvLyBUeXBlcyBmb3IgdGhlIG1haW4gc3dpdGNoLgorCisgICAgLy8g
VGhlIGZpcnN0IDQgdHlwZXMgbXVzdCBiZSBncm91cGVkIHRvZ2V0aGVyLCBhcyB0aGV5CisgICAg
Ly8gcmVwcmVzZW50IHRoZSBhbGxvd2VkIGNoYXJzIGluIGFuIGlkZW50aWZpZXIuCisgICAgQ2hh
cmFjdGVyQ2FzZWxlc3NVLAorICAgIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKyAgICBDaGFy
YWN0ZXJOdW1iZXIsCisgICAgQ2hhcmFjdGVyRGFzaCwKKworICAgIENoYXJhY3Rlck90aGVyLAor
ICAgIENoYXJhY3RlcldoaXRlU3BhY2UsCisgICAgQ2hhcmFjdGVyRW5kTWVkaWFRdWVyeSwKKyAg
ICBDaGFyYWN0ZXJFbmROdGhDaGlsZCwKKyAgICBDaGFyYWN0ZXJRdW90ZSwKKyAgICBDaGFyYWN0
ZXJFeGNsYW1hdGlvbk1hcmssCisgICAgQ2hhcmFjdGVySGFzaG1hcmssCisgICAgQ2hhcmFjdGVy
RG9sbGFyLAorICAgIENoYXJhY3RlckFzdGVyaXNrLAorICAgIENoYXJhY3RlclBsdXMsCisgICAg
Q2hhcmFjdGVyRG90LAorICAgIENoYXJhY3RlclNsYXNoLAorICAgIENoYXJhY3Rlckxlc3MsCisg
ICAgQ2hhcmFjdGVyQXQsCisgICAgQ2hhcmFjdGVyQmFja1NsYXNoLAorICAgIENoYXJhY3Rlclhv
ciwKKyAgICBDaGFyYWN0ZXJWZXJ0aWNhbEJhciwKKyAgICBDaGFyYWN0ZXJUaWxkZSwKK307CisK
Ky8vIDEyOCBBU0NJSSBjb2Rlcworc3RhdGljIGNvbnN0IENoYXJhY3RlclR5cGUgdHlwZXNPZkFT
Q0lJQ2hhcmFjdGVyc1sxMjhdID0geworLyogICAwIC0gTnVsbCAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogICAxIC0gU3RhcnQgb2YgSGVhZGluZyAgICovIENoYXJhY3Rlck90
aGVyLAorLyogICAyIC0gU3RhcnQgb2YgVGV4dCAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyog
ICAzIC0gRW5kIG9mIFRleHQgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA0IC0gRW5k
IG9mIFRyYW5zbS4gICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA1IC0gRW5xdWlyeSAgICAg
ICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA2IC0gQWNrbm93bGVkZ21lbnQgICAgICov
IENoYXJhY3Rlck90aGVyLAorLyogICA3IC0gQmVsbCAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ck90aGVyLAorLyogICA4IC0gQmFjayBTcGFjZSAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAor
LyogICA5IC0gSG9yaXpvbnRhbCBUYWIgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAg
MTAgLSBMaW5lIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAxMSAt
IFZlcnRpY2FsIFRhYiAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxMiAtIEZvcm0gRmVl
ZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDEzIC0gQ2FycmlhZ2UgUmV0
dXJuICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAgMTQgLSBTaGlmdCBPdXQgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTUgLSBTaGlmdCBJbiAgICAgICAgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCisvKiAgMTYgLSBEYXRhIExpbmUgRXNjYXBlICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCisvKiAgMTcgLSBEZXZpY2UgQ29udHJvbCAxICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAg
MTggLSBEZXZpY2UgQ29udHJvbCAyICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTkgLSBEZXZp
Y2UgQ29udHJvbCAzICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjAgLSBEZXZpY2UgQ29udHJv
bCA0ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjEgLSBOZWdhdGl2ZSBBY2suICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgMjIgLSBTeW5jaHJvbm91cyBJZGxlICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgMjMgLSBFbmQgb2YgVHJhbnNtaXQgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgMjQgLSBDYW5jZWwgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjUgLSBF
bmQgb2YgTWVkaXVtICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjYgLSBTdWJzdGl0dXRl
ICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjcgLSBFc2NhcGUgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjggLSBGaWxlIFNlcGFyYXRvciAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAgMjkgLSBHcm91cCBTZXBhcmF0b3IgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgMzAgLSBSZWNvcmQgU2VwYXJhdG9yICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzEg
LSBVbml0IFNlcGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzIgLSBTcGFjZSAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAzMyAtICEgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCisvKiAgMzQgLSAiICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCisvKiAgMzUgLSAjICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySGFzaG1hcmssCisvKiAgMzYgLSAkICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyRG9sbGFyLAorLyogIDM3IC0gJSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90
aGVyLAorLyogIDM4IC0gJiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyog
IDM5IC0gJyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclF1b3RlLAorLyogIDQwIC0gKCAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDQxIC0gKSAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlckVuZE50aENoaWxkLAorLyogIDQyIC0gKiAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlckFzdGVyaXNrLAorLyogIDQzIC0gKyAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlclBsdXMsCisvKiAgNDQgLSAsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgNDUgLSAtICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRGFzaCwKKy8q
ICA0NiAtIC4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb3QsCisvKiAgNDcgLSAvICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyU2xhc2gsCisvKiAgNDggLSAwICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDQ5IC0gMSAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck51bWJlciwKKy8qICA1MCAtIDIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJOdW1iZXIsCisvKiAgNTEgLSAzICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVy
LAorLyogIDUyIC0gNCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1
MyAtIDUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTQgLSA2ICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU1IC0gNyAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NiAtIDggICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTcgLSA5ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyTnVtYmVyLAorLyogIDU4IC0gOiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVy
LAorLyogIDU5IC0gOyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVuZE1lZGlhUXVlcnks
CisvKiAgNjAgLSA8ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTGVzcywKKy8qICA2MSAt
ID0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2MiAtID4gICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2MyAtID8gICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2NCAtIEAgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJBdCwKKy8qICA2NSAtIEEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAgNjYgLSBCICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogIDY3IC0gQyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qICA2OCAtIEQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAgNjkgLSBFICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogIDcwIC0gRiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qICA3MSAtIEcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAgNzIgLSBIICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogIDczIC0gSSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qICA3NCAtIEogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzUgLSBLICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc2IC0gTCAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NyAtIE0gICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzggLSBOICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc5IC0gTyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MCAtIFAgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODEgLSBRICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgyIC0gUiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MyAtIFMgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODQgLSBUICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg1IC0gVSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlckNhc2VsZXNzVSwKKy8qICA4NiAtIFYgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODcgLSBXICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg4IC0gWCAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4OSAtIFkgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTAgLSBaICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDkxIC0gWyAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3Rlck90aGVyLAorLyogIDkyIC0gXCAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlckJhY2tTbGFzaCwKKy8qICA5MyAtIF0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJP
dGhlciwKKy8qICA5NCAtIF4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJYb3IsCisvKiAg
OTUgLSBfICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyog
IDk2IC0gYCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDk3IC0gYSAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5OCAtIGIg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTkgLSBj
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTAwIC0g
ZCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwMSAt
IGUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDIg
LSBmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTAz
IC0gZyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEw
NCAtIGggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAx
MDUgLSBpICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyog
MTA2IC0gaiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8q
IDEwNyAtIGsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisv
KiAxMDggLSBsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAor
LyogMTA5IC0gbSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
Ky8qIDExMCAtIG4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
CisvKiAxMTEgLSBvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAorLyogMTEyIC0gcCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKKy8qIDExMyAtIHEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCisvKiAxMTQgLSByICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogMTE1IC0gcyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qIDExNiAtIHQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAxMTcgLSB1ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQ2FzZWxlc3NV
LAorLyogMTE4IC0gdiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKKy8qIDExOSAtIHcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCisvKiAxMjAgLSB4ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogMTIxIC0geSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qIDEyMiAtIHogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAxMjMgLSB7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kTWVkaWFR
dWVyeSwKKy8qIDEyNCAtIHwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJWZXJ0aWNhbEJh
ciwKKy8qIDEyNSAtIH0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qIDEy
NiAtIH4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJUaWxkZSwKKy8qIDEyNyAtIERlbGV0
ZSAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKK307CisKKy8vIFV0aWxpdHkgZnVuY3Rp
b25zIGZvciB0aGUgQ1NTIHRva2VuaXplci4KKworc3RhdGljIGlubGluZSBib29sIGlzQ1NTTGV0
dGVyKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49IDEyOCB8fCB0eXBlc09mQVNDSUlD
aGFyYWN0ZXJzW2Nocl0gPD0gQ2hhcmFjdGVyRGFzaDsKK30KKworc3RhdGljIGlubGluZSBib29s
IGlzQ1NTRXNjYXBlKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49ICcgJyAmJiBjaHIg
IT0gMTI3OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNVUklMZXR0ZXIoVUNoYXIgY2hyKQor
eworICAgIHJldHVybiAoY2hyID49ICcqJyAmJiBjaHIgIT0gMTI3KSB8fCAoY2hyID49ICcjJyAm
JiBjaHIgPD0gJyYnKSB8fCBjaHIgPT0gJyEnOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJ
ZGVudGlmaWVyU3RhcnRBZnRlckRhc2goVUNoYXIqIGRhdGEpCit7CisgICAgcmV0dXJuIGlzQVND
SUlBbHBoYShkYXRhWzBdKSB8fCBkYXRhWzBdID09ICdfJyB8fCBkYXRhWzBdID49IDEyOAorICAg
ICAgICB8fCAoZGF0YVswXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKGRhdGFbMV0pKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciogY3NzU3RyaW5nLCBjb25z
dCBjaGFyKiBjb25zdGFudFN0cmluZykKK3sKKyAgICAvLyBDb21wYXJlIGFuIFVDaGFyIG1lbW9y
eSBkYXRhIHdpdGggYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLgorICAgIC8vIFRoaXMgaXMgYW4g
b3ZlcmxvYWRlZCBmdW5jdGlvbiwgdGhpcyBpbnN0YW5jZSBjaGVja3Mgc3RyaW5ncy4KKyAgICAv
LyBUaGUgdHdvIGZ1bmN0aW9ucyBjYW5ub3QgYmUgZ3JvdXBlZCB0b2dldGhlciwgc2luY2UgdGhp
cyBvbmUgZGVwZW5kcworICAgIC8vIG9uIGlzQ1NTTGV0dGVyLCB3aGlsZSB0aGUgb3RoZXIgaXMg
dXNlZCBpbiBvdGhlciBwbGFjZXMuCisgICAgZG8geworICAgICAgICAvLyBUaGUgaW5wdXQgbXVz
dCBiZSBwYXJ0IG9mIGFuIGlkZW50aWZpZXIgaWYgY29uc3RhbnRDaGFyIG9yIGNvbnN0U3RyaW5n
CisgICAgICAgIC8vIGNvbnRhaW5zICctJy4gT3RoZXJ3aXNlIGxvd2VyY2FzZUNoYXJhY3Rlcign
XHInKSB3b3VsZCBiZSBlcXVhbCB0byAnLScuCisgICAgICAgIEFTU0VSVCgoKmNvbnN0YW50U3Ry
aW5nID49ICdhJyAmJiAqY29uc3RhbnRTdHJpbmcgPD0gJ3onKSB8fCAqY29uc3RhbnRTdHJpbmcg
PT0gJy0nKTsKKyAgICAgICAgQVNTRVJUKCpjb25zdGFudFN0cmluZyAhPSAnLScgfHwgaXNDU1NM
ZXR0ZXIoKmNzc1N0cmluZykpOworICAgICAgICBpZiAobG93ZXJjYXNlQ2hhcmFjdGVyKCpjc3NT
dHJpbmcrKykgIT0gKCpjb25zdGFudFN0cmluZysrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9IHdoaWxlICgqY29uc3RhbnRTdHJpbmcpOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgVUNoYXIqIGNoZWNrRXNjYXBlKFVDaGFyKiBkYXRhKQoreworICAgIEFTU0VSVCgq
ZGF0YSA9PSAnXFwnKTsKKworICAgICsrZGF0YTsKKyAgICBpZiAoIWlzQ1NTRXNjYXBlKCpkYXRh
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpkYXRhKSkg
eworICAgICAgICBpbnQgbGVuZ3RoID0gNjsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICAr
K2RhdGE7CisgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqZGF0YSkgJiYgLS1sZW5n
dGgpOworCisgICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBlc2NhcGUgc2VxdWVu
Y2UuCisgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqZGF0YSkpCisgICAgICAgICAgICArK2RhdGE7
CisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0KKyAgICByZXR1cm4gZGF0YSArIDE7Cit9CisK
K3N0YXRpYyBpbmxpbmUgVUNoYXIqIHNraXBXaGl0ZVNwYWNlcyhVQ2hhciogZGF0YSkKK3sKKyAg
ICB3aGlsZSAoKmRhdGEgPD0gJyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWypkYXRhXSA9
PSBDaGFyYWN0ZXJXaGl0ZVNwYWNlKSkKKyAgICAgICAgKytkYXRhOworICAgIHJldHVybiBkYXRh
OworfQorCisvLyBNYWluIENTUyB0b2tlbml6ZXIgZnVuY3Rpb25zLgorCitpbmxpbmUgYm9vbCBD
U1NQYXJzZXI6OmlzSWRlbnRpZmllclN0YXJ0KCkKK3sKKyAgICAvLyBDaGVjayB3aGV0aGVyIGFu
IGlkZW50aWZpZXIgaXMgc3RhcnRlZC4KKyAgICByZXR1cm4gaXNJZGVudGlmaWVyU3RhcnRBZnRl
ckRhc2goKCptX2RhdGEgIT0gJy0nKSA/IG1fZGF0YSA6IG1fZGF0YSArIDEpOworfQorCitpbmxp
bmUgVUNoYXIqIENTU1BhcnNlcjo6Y2hlY2tTdHJpbmcoVUNoYXIqIGRhdGEsIFVDaGFyIHF1b3Rl
KQoreworICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXZlcnQgZXNjYXBlIHNlcXVlbmNlcywgc3Ry
aW5ncworICAgIC8vIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSBwYXJzaW5nLgorICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqZGF0YSA9PSBxdW90ZSkpIHsKKyAgICAg
ICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwuCisgICAgICAgICAgICByZXR1
cm4gZGF0YSArIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKCpkYXRhIDwgMTQg
JiYgKCEqZGF0YSB8fCAqZGF0YSA9PSAxMCB8fCAoKmRhdGEgfCAweDEpID09IDEzKSkpIHsKKyAg
ICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIGZhaWxlZCBmb3IgY2hhcmFjdGVyIDAsIDEw
LCAxMiBvciAxMy4KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKExJS0VMWShkYXRhWzBdICE9ICdcXCcpKQorICAgICAgICAgICAgKytkYXRhOworICAgICAg
ICBlbHNlIGlmIChkYXRhWzFdID09ICdcbicgfHwgZGF0YVsxXSA9PSAnXGYnKQorICAgICAgICAg
ICAgZGF0YSArPSAyOworICAgICAgICBlbHNlIGlmIChkYXRhWzFdID09ICdccicpCisgICAgICAg
ICAgICBkYXRhICs9IGRhdGFbMl0gPT0gJ1xuJyA/IDMgOiAyOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGRhdGEgPSBjaGVja0VzY2FwZShkYXRhKTsKKyAgICAgICAgICAgIGlmICghZGF0
YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBDU1NQYXJzZXI6OnBhcnNlRXNjYXBlKFVDaGFyKiYgcmVzdWx0KQoreworICAgIEFTU0VSVCgq
bV9kYXRhID09ICdcXCcgJiYgaXNDU1NFc2NhcGUobV9kYXRhWzFdKSk7CisKKyAgICArK21fZGF0
YTsKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCptX2RhdGEpKSB7CisgICAgICAgIHVuc2lnbmVk
IHVuaWNvZGUgPSAwOworICAgICAgICBpbnQgbGVuZ3RoID0gNjsKKworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICB1bmljb2RlID0gKHVuaWNvZGUgPDwgNCkgKyB0b0FTQ0lJSGV4VmFsdWUoKm1f
ZGF0YSsrKTsKKyAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJSUhleERpZ2l0KCpt
X2RhdGEpKTsKKworICAgICAgICAvLyBDaGFyYWN0ZXJzIGFib3ZlIDB4ZmZmZiBhcmUgbm90IGhh
bmRsZWQuCisgICAgICAgIGlmICh1bmljb2RlID4gMHhmZmZmKQorICAgICAgICAgICAgdW5pY29k
ZSA9IDB4ZmZmZDsKKworICAgICAgICAvLyBPcHRpb25hbCBzcGFjZSBhZnRlciB0aGUgZXNjYXBl
IHNlcXVlbmNlLgorICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKm1fZGF0YSkpCisgICAgICAgICAg
ICArK21fZGF0YTsKKyAgICAgICAgKnJlc3VsdCA9IHVuaWNvZGU7CisgICAgfSBlbHNlCisgICAg
ICAgICpyZXN1bHQgPSAqbV9kYXRhKys7CisgICAgKytyZXN1bHQ7Cit9CisKK2lubGluZSBib29s
IENTU1BhcnNlcjo6cGFyc2VJZGVudGlmaWVyKFVDaGFyKiYgcmVzdWx0KQoreworICAgIC8vIElm
IGEgdmFsaWQgaWRlbnRpZmllciBzdGFydCBpcyBmb3VuZCwgd2UgY2FuIHNhZmVseQorICAgIC8v
IHBhcnNlIHRoZSBpZGVudGlmaWVyIHVudGlsIHRoZSBuZXh0IGludmFsaWQgY2hhcmFjdGVyLgor
ICAgIEFTU0VSVChpc0lkZW50aWZpZXJTdGFydCgpKTsKKyAgICBib29sIGhhc0VzY2FwZSA9IGZh
bHNlOworICAgIGRvIHsKKyAgICAgICAgaWYgKExJS0VMWSgqbV9kYXRhICE9ICdcXCcpKQorICAg
ICAgICAgICAgKnJlc3VsdCsrID0gKm1fZGF0YSsrOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGhhc0VzY2FwZSA9IHRydWU7CisgICAgICAgICAgICBwYXJzZUVzY2FwZShyZXN1bHQpOwor
ICAgICAgICB9CisgICAgfSB3aGlsZSAoaXNDU1NMZXR0ZXIobV9kYXRhWzBdKSB8fCAobV9kYXRh
WzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUobV9kYXRhWzFdKSkpOworICAgIHJldHVybiBoYXNF
c2NhcGU7Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6cGFyc2VTdHJpbmcoVUNoYXIqJiBy
ZXN1bHQsIFVDaGFyIHF1b3RlKQoreworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChV
TkxJS0VMWSgqbV9kYXRhID09IHF1b3RlKSkgeworICAgICAgICAgICAgLy8gU3RyaW5nIHBhcnNp
bmcgaXMgZG9uZS4KKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVCgqbV9kYXRhID49IDE0IHx8ICgqbV9kYXRhIDw9IDkg
JiYgKm1fZGF0YSkgfHwgKm1fZGF0YSA9PSAxMSk7CisKKyAgICAgICAgaWYgKExJS0VMWShtX2Rh
dGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9kYXRhKys7CisgICAg
ICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAnXG4nIHx8IG1fZGF0YVsxXSA9PSAnXGYnKQorICAg
ICAgICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAnXHIn
KQorICAgICAgICAgICAgbV9kYXRhICs9IG1fZGF0YVsyXSA9PSAnXG4nID8gMyA6IDI7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CisgICAgfQorfQorCitp
bmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlVVJJKFVDaGFyKiYgc3RhcnQsIFVDaGFyKiYgcmVz
dWx0KQoreworICAgIFVDaGFyKiB1cmlTdGFydCA9IHNraXBXaGl0ZVNwYWNlcyhtX2RhdGEpOwor
CisgICAgaWYgKCp1cmlTdGFydCA9PSAnIicgfHwgKnVyaVN0YXJ0ID09ICdcJycpIHsKKyAgICAg
ICAgVUNoYXIgcXVvdGUgPSAqdXJpU3RhcnQ7CisgICAgICAgICsrdXJpU3RhcnQ7CisKKyAgICAg
ICAgVUNoYXIqIHN0cmluZ0VuZCA9IGNoZWNrU3RyaW5nKHVyaVN0YXJ0LCBxdW90ZSk7CisgICAg
ICAgIGlmICghc3RyaW5nRW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdHJpbmdF
bmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsKKyAgICAgICAgaWYgKCpzdHJpbmdFbmQg
IT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0YXJ0ID0gcmVzdWx0ID0g
bV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHBhcnNlU3RyaW5nKHJlc3VsdCwgcXVvdGUpOwor
CisgICAgICAgIG1fZGF0YSA9IHN0cmluZ0VuZCArIDE7CisgICAgICAgIG1fdG9rZW4gPSBVUkk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IHVyaVN0YXJ0OworCisg
ICAgICAgIHdoaWxlIChpc1VSSUxldHRlcigqc3RyaW5nRW5kKSkgeworICAgICAgICAgICAgaWYg
KCpzdHJpbmdFbmQgIT0gJ1xcJykKKyAgICAgICAgICAgICAgICArK3N0cmluZ0VuZDsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0cmluZ0VuZCA9IGNoZWNrRXNjYXBlKHN0
cmluZ0VuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmdFbmQpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN0cmlu
Z0VuZCA9IHNraXBXaGl0ZVNwYWNlcyhzdHJpbmdFbmQpOworICAgICAgICBpZiAoKnN0cmluZ0Vu
ZCAhPSAnKScpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3RhcnQgPSByZXN1bHQg
PSBtX2RhdGEgPSB1cmlTdGFydDsKKyAgICAgICAgd2hpbGUgKGlzVVJJTGV0dGVyKCptX2RhdGEp
KSB7CisgICAgICAgICAgICBpZiAoTElLRUxZKCptX2RhdGEgIT0gJ1xcJykpCisgICAgICAgICAg
ICAgICAgKnJlc3VsdCsrID0gKm1fZGF0YSsrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBtX2RhdGEg
PSBzdHJpbmdFbmQgKyAxOworICAgICAgICBtX3Rva2VuID0gVVJJOworICAgIH0KK30KKworaW5s
aW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVVuaWNvZGVSYW5nZSgpCit7CisgICAgVUNoYXIqIGRh
dGEgPSBtX2RhdGEgKyAxOworICAgIGludCBsZW5ndGggPSA2OworICAgIEFTU0VSVCgqbV9kYXRh
ID09ICcrJyk7CisKKyAgICB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpkYXRhKSAmJiBsZW5ndGgp
IHsKKyAgICAgICAgKytkYXRhOworICAgICAgICAtLWxlbmd0aDsKKyAgICB9CisKKyAgICBpZiAo
bGVuZ3RoICYmICpkYXRhID09ICc/JykgeworICAgICAgICAvLyBBdCBtb3N0IDUgaGV4IGRpZ2l0
IGZvbGxvd2VkIGJ5IGEgcXVlc3Rpb24gbWFyay4KKyAgICAgICAgZG8geworICAgICAgICAgICAg
KytkYXRhOworICAgICAgICAgICAgLS1sZW5ndGg7CisgICAgICAgIH0gd2hpbGUgKCpkYXRhID09
ICc/JyAmJiBsZW5ndGgpOworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobGVuZ3RoIDwgNikgeworICAgICAgICAvLyBBdCBsZWFz
dCBvbmUgaGV4IGRpZ2l0LgorICAgICAgICBpZiAoZGF0YVswXSA9PSAnLScgJiYgaXNBU0NJSUhl
eERpZ2l0KGRhdGFbMV0pKSB7CisgICAgICAgICAgICAvLyBGb2xsb3dlZCBieSBhIGRhc2ggYW5k
IGEgaGV4IGRpZ2l0LgorICAgICAgICAgICAgKytkYXRhOworICAgICAgICAgICAgbGVuZ3RoID0g
NjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICArK2RhdGE7CisgICAgICAgICAg
ICB9IHdoaWxlICgtLWxlbmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQoKmRhdGEpKTsKKyAgICAgICAg
fQorICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VOdGhDaGlsZCgpCit7
CisgICAgVUNoYXIqIGRhdGEgPSBtX2RhdGE7CisKKyAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KCpk
YXRhKSkKKyAgICAgICAgKytkYXRhOworICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwoKmRhdGEsICdu
JykpIHsKKyAgICAgICAgbV9kYXRhID0gZGF0YSArIDE7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENo
aWxkRXh0cmEoKQoreworICAgIFVDaGFyKiBkYXRhID0gc2tpcFdoaXRlU3BhY2VzKG1fZGF0YSk7
CisgICAgaWYgKCpkYXRhICE9ICcrJyAmJiAqZGF0YSAhPSAnLScpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGRhdGEgPSBza2lwV2hpdGVTcGFjZXMoZGF0YSArIDEpOworICAgIGlmICgh
aXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8gewor
ICAgICAgICArK2RhdGE7CisgICAgfSB3aGlsZSAoaXNBU0NJSURpZ2l0KCpkYXRhKSk7CisKKyAg
ICBtX2RhdGEgPSBkYXRhOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBDU1NQ
YXJzZXI6OmRldGVjdEZ1bmN0aW9uVG9rZW4oaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVu
Z3RoID4gMCk7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisKKyAgICBzd2l0Y2gg
KGxlbmd0aCkgeworICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1l
WzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQ2FzZWxlc3NF
cXVhbChuYW1lWzJdLCAndCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IE5PVEZVTkNUSU9OOwor
ICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3UnKSAmJiBpc0Nhc2Vs
ZXNzRXF1YWwobmFtZVsxXSwgJ3InKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2wnKSkK
KyAgICAgICAgICAgIG1fdG9rZW4gPSBVUkk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
OToKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLWNoaWxkIikpCisgICAg
ICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIDExOgorICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUsICJudGgtb2Yt
dHlwZSIpKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50aENoaWxkTW9kZTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSAxNDoKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChu
YW1lLCAibnRoLWxhc3QtY2hpbGQiKSkKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhD
aGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgMTY6CisgICAgICAgIGlmIChp
c0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50aC1sYXN0LW9mLXR5cGUiKSkKKyAgICAgICAgICAgIG1f
cGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisK
K2lubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0TWVkaWFRdWVyeVRva2VuKGludCBsZW5ndGgp
Cit7CisgICAgQVNTRVJUKG1fcGFyc2luZ01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpOworICAgIFVD
aGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworCisgICAgaWYgKGxlbmd0aCA9PSAzKSB7CisgICAg
ICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwo
bmFtZVsxXSwgJ24nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2QnKSkKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBNRURJQV9BTkQ7CisgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVh
bChuYW1lWzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQ2Fz
ZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX05P
VDsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSA0KSB7CisgICAgICAgIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKQorICAg
ICAgICAgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnbCcpICYmIGlzQ2FzZWxl
c3NFcXVhbChuYW1lWzNdLCAneScpKQorICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX09OTFk7
CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdE51bWJlclRva2VuKFVD
aGFyKiB0eXBlLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKworICAg
IHN3aXRjaCAobG93ZXJjYXNlQ2hhcmFjdGVyKHR5cGVbMF0pKSB7CisgICAgY2FzZSAnYyc6Cisg
ICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20nKSkK
KyAgICAgICAgICAgIG1fdG9rZW4gPSBDTVM7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
J2QnOgorICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdnJykpCisgICAgICAgICAgICBtX3Rv
a2VuID0gREVHUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnZSc6CisgICAgICAgIGlm
IChsZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFd
LCAnbScpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBFTVM7CisgICAgICAgICAgICBlbHNl
IGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3gnKSkKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gRVhTOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2cnOgor
ICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdyJykK
KyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2EnKSAmJiBpc0Nh
c2VsZXNzRXF1YWwodHlwZVszXSwgJ2QnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBHUkFEUzsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaCc6CisgICAgICAgIGlmIChsZW5ndGggPT0g
MiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3onKSkKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBIRVJUWjsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaSc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ24nKSkKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBJTlM7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2snOgorICAgICAg
ICBpZiAobGVuZ3RoID09IDMgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdoJykgJiYgaXND
YXNlbGVzc0VxdWFsKHR5cGVbMl0sICd6JykpCisgICAgICAgICAgICBtX3Rva2VuID0gS0hFUlRa
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdtJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9
PSAyKSB7CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCisg
ICAgICAgICAgICAgICAgbV90b2tlbiA9IE1NUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2Fz
ZWxlc3NFcXVhbCh0eXBlWzFdLCAncycpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBNU0VD
UzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVb
MV0sICd4JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFBYUzsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAndCcpKQorICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBQVFM7CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsx
XSwgJ2MnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUENTOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAobGVuZ3RoID09IDMpIHsK
KyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2EnKSAmJiBpc0Nhc2Vs
ZXNzRXF1YWwodHlwZVsyXSwgJ2QnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUkFEUzsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnZScpICYmIGlz
Q2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnbScpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBS
RU1TOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3MnOgorICAgICAg
ICBpZiAobGVuZ3RoID09IDEpCisgICAgICAgICAgICBtX3Rva2VuID0gU0VDUzsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSAndCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gNCAmJiBpc0Nh
c2VsZXNzRXF1YWwodHlwZVsxXSwgJ3UnKQorICAgICAgICAgICAgICAgICYmIGlzQ2FzZWxlc3NF
cXVhbCh0eXBlWzJdLCAncicpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnbicpKQorICAg
ICAgICAgICAgbV90b2tlbiA9IFRVUk5TOworICAgICAgICByZXR1cm47CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBpZiAodHlwZVswXSA9PSAnXycgJiYgbGVuZ3RoID09IDUgJiYgdHlwZVsxXSA9
PSAnXycgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdxJykKKyAgICAgICAgICAgICAgICAm
JiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ2UnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVs0
XSwgJ20nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBRRU1TOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdERhc2hUb2tlbihpbnQgbGVu
Z3RoKQoreworICAgIFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworCisgICAgaWYgKGxlbmd0
aCA9PSAxMSkgeworICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAneScpICYm
IGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMSwgIndlYmtpdC1hbiIpKQorICAgICAgICAgICAgbV90
b2tlbiA9IEFOWUZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFt
ZVsxMF0sICduJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAid2Via2l0LW1pIikpCisg
ICAgICAgICAgICBtX3Rva2VuID0gTUlORlVOQ1RJT047CisgICAgICAgIGVsc2UgaWYgKGlzQ2Fz
ZWxlc3NFcXVhbChuYW1lWzEwXSwgJ3gnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDEsICJ3
ZWJraXQtbWEiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNQVhGVU5DVElPTjsKKyAgICB9IGVs
c2UgaWYgKGxlbmd0aCA9PSAxMiAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDEsICJ3ZWJraXQt
Y2FsYyIpKQorICAgICAgICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOworfQorCitpbmxpbmUgdm9p
ZCBDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9vbCBoYXNFc2NhcGUpCit7
CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisgICAgQVNTRVJUKG5hbWVbMF0gPT0g
J0AnICYmIGxlbmd0aCA+PSAyKTsKKworICAgIC8vIGNoYXJzZXQsIGZvbnQtZmFjZSwgaW1wb3J0
LCBtZWRpYSwgbmFtZXNwYWNlLCBwYWdlLAorICAgIC8vIC13ZWJraXQta2V5ZnJhbWVzLCBhbmQg
LXdlYmtpdC1tZWRpYXF1ZXJ5IGFyZSBub3QgYWZmZWN0ZWQgYnkgaGFzRXNjYXBlLgorICAgIHN3
aXRjaCAobG93ZXJjYXNlQ2hhcmFjdGVyKG5hbWVbMV0pKSB7CisgICAgY2FzZSAnYic6CisgICAg
ICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNo
IChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZSArIDIsICJvdHRvbS1sZWZ0IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IEJPVFRPTUxFRlRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTM6
CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0b20tcmlnaHQi
KSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NUklHSFRfU1lNOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVz
c0VxdWFsKG5hbWUgKyAyLCAib3R0b20tY2VudGVyIikpCisgICAgICAgICAgICAgICAgbV90b2tl
biA9IEJPVFRPTUNFTlRFUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2Fz
ZSAxOToKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1s
ZWZ0LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUQ09STkVS
X1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDIwOgorICAgICAgICAg
ICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm90dG9tLXJpZ2h0LWNvcm5lciIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01SSUdIVENPUk5FUl9TWU07CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnYyc6
CisgICAgICAgIGlmIChsZW5ndGggPT0gOCAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJo
YXJzZXQiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBDSEFSU0VUX1NZTTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSAnZic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNDYXNl
bGVzc0VxdWFsKG5hbWUgKyAyLCAib250LWZhY2UiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBG
T05UX0ZBQ0VfU1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdpJzoKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSA3ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm1wb3J0IikpIHsK
KyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBJTVBPUlRfU1lNOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgJ2wnOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChsZW5ndGggPT0gOSkgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NF
cXVhbChuYW1lICsgMiwgImVmdC10b3AiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTEVG
VFRPUF9TWU07CisgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEyKSB7CisgICAgICAgICAg
ICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1
Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwo
bmFtZVsxMV0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiZWZ0LW1pZGRsIikp
CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IExFRlRNSURETEVfU1lNOworICAgICAgICAgICAg
ZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTFdLCAnbScpICYmIGlzQ2FzZWxlc3NFcXVh
bChuYW1lICsgMiwgImVmdC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZU
Qk9UVE9NX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdtJzoK
KyAgICAgICAgaWYgKGxlbmd0aCA9PSA2ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVk
aWEiKSkgeworICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOworICAg
ICAgICAgICAgbV90b2tlbiA9IE1FRElBX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlICduJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0Nhc2VsZXNz
RXF1YWwobmFtZSArIDIsICJhbWVzcGFjZSIpKQorICAgICAgICAgICAgbV90b2tlbiA9IE5BTUVT
UEFDRV9TWU07CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3AnOgorICAgICAgICBpZiAo
bGVuZ3RoID09IDUgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiYWdlIikpCisgICAgICAg
ICAgICBtX3Rva2VuID0gUEFHRV9TWU07CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3In
OgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChsZW5ndGggPT0gMTApIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFt
ZSArIDIsICJpZ2h0LXRvcCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVFRPUF9T
WU07CisgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEzKSB7CisgICAgICAgICAgICAvLyBD
aGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhl
IHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsx
Ml0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC1taWRkbCIpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVE1JRERMRV9TWU07CisgICAgICAgICAgICBlbHNl
IGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMl0sICdtJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5h
bWUgKyAyLCAiaWdodC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVEJP
VFRPTV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAndCc6Cisg
ICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dp
dGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxl
c3NFcXVhbChuYW1lICsgMiwgIm9wLWxlZnQiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0g
VE9QTEVGVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxMDoKKyAg
ICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1yaWdodCIpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BSSUdIVF9TWU07CisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFt
ZSArIDIsICJvcC1jZW50ZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QQ0VOVEVS
X1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE2OgorICAgICAgICAg
ICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLWxlZnQtY29ybmVyIikpCisgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IFRPUExFRlRDT1JORVJfU1lNOworICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFs
KG5hbWUgKyAyLCAib3AtcmlnaHQtY29ybmVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IFRPUFJJR0hUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlICctJzoKKyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsK
KyAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgIGlmICghaGFzRXNjYXBlICYmIGlzQ2FzZWxl
c3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1ydWxlIikpCisgICAgICAgICAgICAgICAgbV90b2tl
biA9IFdFQktJVF9SVUxFX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IDE0OgorICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNoYXJhY3RlciBmaXJzdCBjb3Vs
ZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgorICAgICAgICAgICAgaWYgKGlz
Q2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ3MnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIs
ICJ3ZWJraXQtZGVjbCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfREVDTFNf
U1lNOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTNdLCAnZScp
ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC12YWx1IikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9WQUxVRV9TWU07CisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgIGlmICghaGFzRXNjYXBlICYmIGlzQ2FzZWxl
c3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1yZWdpb24iKSkKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gV0VCS0lUX1JFR0lPTl9SVUxFX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBjYXNlIDE3OgorICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNDYXNlbGVzc0Vx
dWFsKG5hbWUgKyAyLCAid2Via2l0LXNlbGVjdG9yIikpCisgICAgICAgICAgICAgICAgbV90b2tl
biA9IFdFQktJVF9TRUxFQ1RPUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y2FzZSAxODoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJr
aXQta2V5ZnJhbWVzIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlGUkFN
RVNfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTk6CisgICAgICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Via2l0LW1lZGlhcXVlcnkiKSkg
eworICAgICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX01FRElBUVVFUllfU1lNOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgICBp
ZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJh
bWUtcnVsZSIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfS0VZRlJBTUVfUlVM
RV9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBD
U1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxXaXRob3V0VHlwZSkKIHsKICAgICBZWVNUWVBFKiB5
eWx2YWwgPSBzdGF0aWNfY2FzdDxZWVNUWVBFKj4oeXlsdmFsV2l0aG91dFR5cGUpOwotICAgIGlu
dCBsZW5ndGg7CisgICAgLy8gV3JpdGUgcG9pbnRlciBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLgor
ICAgIFVDaGFyKiByZXN1bHQ7CisgICAgYm9vbCBoYXNFc2NhcGU7CiAKLSAgICBsZXgoKTsKKyAg
ICAvLyBUaGUgaW5wdXQgYnVmZmVyIGlzIHRlcm1pbmF0ZWQgYnkgdHdvIFwwLCBzbworICAgIC8v
IGl0IGlzIHNhZmUgdG8gcmVhZCB0d28gY2hhcmFjdGVycyBhaGVhZCBhbnl0aW1lLgogCi0gICAg
VUNoYXIqIHQgPSB0ZXh0KCZsZW5ndGgpOworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBJbiBkZWJ1
ZyB3ZSBjaGVjayB3aXRoIGFuIEFTU0VSVCB0aGF0IHRoZSBsZW5ndGggaXMgPiAwIGZvciBzdHJp
bmcgdHlwZXMuCisgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IDA7CisgICAgeXlsdmFs
LT5zdHJpbmcubGVuZ3RoID0gMDsKKyNlbmRpZgogCi0gICAgc3dpdGNoICh0b2tlbigpKSB7Ci0g
ICAgY2FzZSBXSElURVNQQUNFOgotICAgIGNhc2UgU0dNTF9DRDoKLSAgICBjYXNlIElOQ0xVREVT
OgotICAgIGNhc2UgREFTSE1BVENIOgorcmVzdGFydEFmdGVyQ29tbWVudDoKKyAgICBtX3Rva2Vu
U3RhcnQgPSByZXN1bHQgPSBtX2RhdGE7CisgICAgbV90b2tlbiA9ICptX2RhdGE7CisgICAgKytt
X2RhdGE7CisKKyAgICBzd2l0Y2ggKChtX3Rva2VuIDw9IDEyNykgPyB0eXBlc09mQVNDSUlDaGFy
YWN0ZXJzW21fdG9rZW5dIDogQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0KSB7CisgICAgY2FzZSBD
aGFyYWN0ZXJDYXNlbGVzc1U6CisgICAgICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09ICcrJykp
CisgICAgICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2UoKSkgeworICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBVTklDT0RFUkFOR0U7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcu
Y2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQuCisKKyAgICBjYXNlIENoYXJhY3RlcklkZW50aWZpZXJTdGFydDoKKyAgICAg
ICAgLS1tX2RhdGE7CisgICAgICAgIGhhc0VzY2FwZSA9IHBhcnNlSWRlbnRpZmllcihyZXN1bHQp
OworICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisKKyAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hh
cmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0g
cmVzdWx0IC0gbV90b2tlblN0YXJ0OworCisgICAgICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09
ICcoJykpIHsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBGVU5DVElPTjsKKyAgICAgICAgICAgIGlm
ICghaGFzRXNjYXBlKQorICAgICAgICAgICAgICAgIGRldGVjdEZ1bmN0aW9uVG9rZW4ocmVzdWx0
IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgKyty
ZXN1bHQ7CisgICAgICAgICAgICArK3l5bHZhbC0+c3RyaW5nLmxlbmd0aDsKKworICAgICAgICAg
ICAgaWYgKHRva2VuKCkgPT0gVVJJKSB7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEZVTkNU
SU9OOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgaXQgaXMgcmVhbGx5IGFuIFVS
SS4KKyAgICAgICAgICAgICAgICBwYXJzZVVSSSh5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzLCBy
ZXN1bHQpOworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAt
IHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSAhPSBOb3JtYWxNb2RlKSAmJiAhaGFzRXNjYXBl
KSB7CisgICAgICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSkKKyAg
ICAgICAgICAgICAgICBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlICYm
IGlzQ2FzZWxlc3NFcXVhbChtX3Rva2VuU3RhcnRbMF0sICduJykpIHsKKyAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0IC0gbV90b2tlblN0YXJ0ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gU3RyaW5nICJuIiBpcyBJREVOVCBidXQgIm4rMSIgaXMgTlRILgorICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5s
ZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAtIG1fdG9rZW5TdGFydCA9PSAyICYmIG1f
dG9rZW5TdGFydFsxXSA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJu
LSIgaXMgSURFTlQgYnV0ICJuLTEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU3Bl
Y3VsYXRpdmVseSBkZWNyZWFzZSBtX2RhdGEgdG8gZGV0ZWN0IGFuIG50aC1jaGlsZCB0b2tlbi4K
KyAgICAgICAgICAgICAgICAgICAgbV9kYXRhLS07CisgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9
IE5USDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1f
ZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlIHRvIG1fZGF0YSBpZiB1bnN1
Y2Nlc3NmdWwuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGErKzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgVVJJOgotICAgIGNhc2UgU1RSSU5HOgotICAgIGNh
c2UgSURFTlQ6Ci0gICAgY2FzZSBOVEg6Ci0gICAgY2FzZSBIRVg6Ci0gICAgY2FzZSBJRFNFTDoK
LSAgICBjYXNlIERJTUVOOgotICAgIGNhc2UgVU5JQ09ERVJBTkdFOgotICAgIGNhc2UgRlVOQ1RJ
T046Ci0gICAgY2FzZSBBTllGVU5DVElPTjoKLSAgICBjYXNlIE5PVEZVTkNUSU9OOgotICAgIGNh
c2UgQ0FMQ0ZVTkNUSU9OOgotICAgIGNhc2UgTUlORlVOQ1RJT046Ci0gICAgY2FzZSBNQVhGVU5D
VElPTjoKLSAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IHQ7Ci0gICAgICAgIHl5
bHZhbC0+c3RyaW5nLmxlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IElNUE9SVF9TWU06Ci0gICAgY2FzZSBQQUdFX1NZTToKLSAgICBjYXNlIE1FRElBX1NZTToKLSAg
ICBjYXNlIEZPTlRfRkFDRV9TWU06Ci0gICAgY2FzZSBDSEFSU0VUX1NZTToKLSAgICBjYXNlIE5B
TUVTUEFDRV9TWU06Ci0gICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1NZTToKLQotICAgIGNhc2Ug
SU1QT1JUQU5UX1NZTToKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFFFTVM6Ci0gICAgICAg
IGxlbmd0aC0tOwotICAgIGNhc2UgR1JBRFM6Ci0gICAgY2FzZSBUVVJOUzoKLSAgICAgICAgbGVu
Z3RoLS07Ci0gICAgY2FzZSBERUdTOgotICAgIGNhc2UgUkFEUzoKLSAgICBjYXNlIEtIRVJUWjoK
LSAgICBjYXNlIFJFTVM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNhc2UgTVNFQ1M6Ci0gICAg
Y2FzZSBIRVJUWjoKLSAgICBjYXNlIEVNUzoKLSAgICBjYXNlIEVYUzoKLSAgICBjYXNlIFBYUzoK
LSAgICBjYXNlIENNUzoKLSAgICBjYXNlIE1NUzoKLSAgICBjYXNlIElOUzoKLSAgICBjYXNlIFBU
UzoKLSAgICBjYXNlIFBDUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBTRUNTOgotICAg
IGNhc2UgUEVSQ0VOVEFHRToKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBGTE9BVFRPS0VO
OgotICAgIGNhc2UgSU5URUdFUjoKLSAgICAgICAgeXlsdmFsLT5udW1iZXIgPSBjaGFyYWN0ZXJz
VG9Eb3VibGUodCwgbGVuZ3RoKTsKKyAgICBjYXNlIENoYXJhY3RlckRvdDoKKyAgICAgICAgaWYg
KCFpc0FTQ0lJRGlnaXQobV9kYXRhWzBdKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyBGYWxsIHRocm91Z2ggdG8gQ2hhcmFjdGVyTnVtYmVyLgorCisgICAgY2FzZSBDaGFyYWN0ZXJO
dW1iZXI6IHsKKyAgICAgICAgYm9vbCBkb3RTZWVuID0gKG1fdG9rZW4gPT0gJy4nKTsKKworICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQobV9kYXRh
WzBdKSkgeworICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGRvdCBpcyBhbGxvd2VkIGZvciBh
IG51bWJlciwKKyAgICAgICAgICAgICAgICAvLyBhbmQgaXQgbXVzdCBiZSBmb2xsb3dlZCBieSBh
IGRpZ2l0LgorICAgICAgICAgICAgICAgIGlmIChtX2RhdGFbMF0gIT0gJy4nIHx8IGRvdFNlZW4g
fHwgIWlzQVNDSUlEaWdpdChtX2RhdGFbMV0pKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkb3RTZWVuID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICsrbV9kYXRhOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2lu
Z01vZGUgPT0gTnRoQ2hpbGRNb2RlKSAmJiAhZG90U2VlbiAmJiBpc0Nhc2VsZXNzRXF1YWwoKm1f
ZGF0YSwgJ24nKSkgeworICAgICAgICAgICAgLy8gIlswLTldK24iIGlzIGFsd2F5cyBhbiBOdGhD
aGlsZC4KKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgcGFyc2VOdGhDaGlsZEV4
dHJhKCk7CisgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAgeXlsdmFsLT5z
dHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgeXlsdmFsLT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUo
bV90b2tlblN0YXJ0LCBtX2RhdGEgLSBtX3Rva2VuU3RhcnQpOworCisgICAgICAgIC8vIFR5cGUg
b2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoKSkgeworICAg
ICAgICAgICAgVUNoYXIqIHR5cGUgPSBtX2RhdGE7CisgICAgICAgICAgICByZXN1bHQgPSBtX2Rh
dGE7CisKKyAgICAgICAgICAgIGhhc0VzY2FwZSA9IHBhcnNlSWRlbnRpZmllcihyZXN1bHQpOwor
ICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJysnKSB7CisgICAgICAgICAgICAgICAgLy8gQW55
IGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYSAnKycgc2lnbiBpcyBhbiBpbnZhbGlkIGRpbWVuc2lv
bi4KKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0g
SU5WQUxJRERJTUVOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gRElNRU47CisgICAgICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCisgICAgICAgICAg
ICAgICAgICAgIGRldGVjdE51bWJlclRva2VuKHR5cGUsIG1fZGF0YSAtIHR5cGUpOworCisgICAg
ICAgICAgICAgICAgaWYgKG1fdG9rZW4gPT0gRElNRU4pIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIGRlY29kZWQgbnVtYmVyIGlzIG92ZXJ3cml0dGVuLCBidXQgdGhpcyBpcyBpbnRlbnRp
b25hbC4KKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1f
dG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0g
bV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmICgqbV9kYXRhID09ICclJykgeworICAgICAgICAgICAgLy8gQWx0
aG91Z2ggdGhlIENTUyBncmFtbWFyIHNheXMge251bX0lIHdlIGZvbGxvdworICAgICAgICAgICAg
Ly8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hpY2ggdXNlcyB7bnVtfSUrLgorICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgfSB3aGlsZSAoKm1f
ZGF0YSA9PSAnJScpOworICAgICAgICAgICAgbV90b2tlbiA9IFBFUkNFTlRBR0U7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbV90b2tlbiA9IGRvdFNlZW4gPyBGTE9BVFRPS0VOIDogSU5U
RUdFUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBDaGFyYWN0ZXJEYXNoOgor
ICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2gobV9kYXRhKSkgeworICAgICAg
ICAgICAgLS1tX2RhdGE7CisgICAgICAgICAgICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50aWZpZXIo
cmVzdWx0KTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJREVOVDsKKworICAgICAgICAgICAgaWYg
KCptX2RhdGEgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEZVTkNUSU9OOwor
ICAgICAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQorICAgICAgICAgICAgICAgICAgICBkZXRl
Y3REYXNoVG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgICAgICAgICArK21f
ZGF0YTsKKyAgICAgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
VU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpICYmICFoYXNFc2NhcGUgJiYg
aXNDYXNlbGVzc0VxdWFsKG1fdG9rZW5TdGFydFsxXSwgJ24nKSkgeworICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMikgeworICAgICAgICAgICAgICAgICAgICAv
LyBTdHJpbmcgIi1uIiBpcyBJREVOVCBidXQgIi1uKzEiIGlzIE5USC4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRyYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9kYXRh
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1
bHQgLSBtX3Rva2VuU3RhcnQgPT0gMyAmJiBtX3Rva2VuU3RhcnRbMl0gPT0gJy0nKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4tIiBpcyBJREVOVCBidXQgIi1uLTEiIGlzIE5U
SC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSBkZWNyZWFzZSBtX2RhdGEg
dG8gZGV0ZWN0IGFuIG50aC1jaGlsZCB0b2tlbi4KKyAgICAgICAgICAgICAgICAgICAgbV9kYXRh
LS07CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVy
dCB0aGUgY2hhbmdlIHRvIG1fZGF0YSBpZiB1bnN1Y2Nlc3NmdWwuCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2RhdGErKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMg
PSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSByZXN1
bHQgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgIH0gZWxzZSBpZiAobV9kYXRhWzBdID09ICctJyAm
JiBtX2RhdGFbMV0gPT0gJz4nKSB7CisgICAgICAgICAgICBtX2RhdGEgKz0gMjsKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBTR01MX0NEOworICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFy
c2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSkgeworICAgICAgICAgICAgLy8gIi1bMC05XStuIiBp
cyBhbHdheXMgYW4gTnRoQ2hpbGQuCisgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZCgpKSB7
CisgICAgICAgICAgICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJz
ID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9
IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICBicmVhazsKIAotICAgIGRlZmF1bHQ6CisgICAgY2FzZSBDaGFyYWN0ZXJPdGhlcjoKKyAgICAg
ICAgLy8gbV90b2tlbiBpcyBzaW1wbHkgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgogICAgICAgICBi
cmVhazsKLSAgICB9CiAKLSAgICByZXR1cm4gdG9rZW4oKTsKLX0KKyAgICBjYXNlIENoYXJhY3Rl
cldoaXRlU3BhY2U6CisgICAgICAgIG1fdG9rZW4gPSBXSElURVNQQUNFOworICAgICAgICAvLyBN
aWdodCBzdGFydCB3aXRoIGEgJ1xuJy4KKyAgICAgICAgLS1tX2RhdGE7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICdcbicpCisgICAgICAgICAgICAgICAgKyttX2xp
bmVOdW1iZXI7CisgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgfSB3aGlsZSAoKm1fZGF0
YSA8PSAnICcgJiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKm1fZGF0YV0gPT0gQ2hhcmFjdGVy
V2hpdGVTcGFjZSkpOworICAgICAgICBicmVhazsKIAotdm9pZCBDU1NQYXJzZXI6OnJlY2hlY2tB
dEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICBTdHJpbmcgcnVsZU5h
bWUoc3RyLCBsZW4pOwotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBpbXBv
cnQiKSkKLSAgICAgICAgeXlUb2sgPSBJTVBPUlRfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHJ1bGVOYW1lLCAiQHBhZ2UiKSkKLSAgICAgICAgeXlUb2sgPSBQQUdFX1NZTTsK
LSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBtZWRpYSIpKQotICAg
ICAgICB5eVRvayA9IE1FRElBX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShy
dWxlTmFtZSwgIkBmb250LWZhY2UiKSkKLSAgICAgICAgeXlUb2sgPSBGT05UX0ZBQ0VfU1lNOwot
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQGNoYXJzZXQiKSkKLSAg
ICAgICAgeXlUb2sgPSBDSEFSU0VUX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShydWxlTmFtZSwgIkBuYW1lc3BhY2UiKSkKLSAgICAgICAgeXlUb2sgPSBOQU1FU1BBQ0VfU1lN
OwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQC13ZWJraXQta2V5
ZnJhbWVzIikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX0tFWUZSQU1FU19TWU07Ci0gICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJALXdlYmtpdC1tZWRpYXF1ZXJ5Iikp
Ci0gICAgICAgIHl5VG9rID0gV0VCS0lUX01FRElBUVVFUllfU1lNOwotfQotCi1VQ2hhciogQ1NT
UGFyc2VyOjp0ZXh0KGludCAqbGVuZ3RoKQotewotICAgIFVDaGFyKiBzdGFydCA9IHl5dGV4dDsK
LSAgICBpbnQgbCA9IHl5bGVuZzsKLSAgICBzd2l0Y2ggKHl5VG9rKSB7Ci0gICAgY2FzZSBTVFJJ
Tkc6Ci0gICAgICAgIGwtLTsKLSAgICAgICAgLyogbm9icmVhayAqLwotICAgIGNhc2UgSEVYOgot
ICAgIGNhc2UgSURTRUw6Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIGwtLTsKKyAgICBjYXNl
IENoYXJhY3RlckVuZE1lZGlhUXVlcnk6CisgICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE1l
ZGlhUXVlcnlNb2RlKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE5vcm1hbE1vZGU7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgVVJJOgotICAgICAgICAvLyAidXJsKCJ7d317c3RyaW5n
fXt3fSIpIgotICAgICAgICAvLyAidXJsKCJ7d317dXJsfXt3fSIpIgotICAgICAgICAvLyBzdHJp
cCAidXJsKCIgYW5kICIpIgotICAgICAgICBzdGFydCArPSA0OwotICAgICAgICBsIC09IDU7Ci0g
ICAgICAgIC8vIHN0cmlwIHt3fQotICAgICAgICB3aGlsZSAobCAmJiBpc0hUTUxTcGFjZSgqc3Rh
cnQpKSB7Ci0gICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAgLS1sOwotICAgICAgICB9
Ci0gICAgICAgIHdoaWxlIChsICYmIGlzSFRNTFNwYWNlKHN0YXJ0W2wgLSAxXSkpCi0gICAgICAg
ICAgICAtLWw7Ci0gICAgICAgIGlmIChsICYmICgqc3RhcnQgPT0gJyInIHx8ICpzdGFydCA9PSAn
XCcnKSkgewotICAgICAgICAgICAgQVNTRVJUKGwgPj0gMiAmJiBzdGFydFtsIC0gMV0gPT0gKnN0
YXJ0KTsKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICAgICBsIC09IDI7CisKKyAgICBj
YXNlIENoYXJhY3RlckVuZE50aENoaWxkOgorICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBO
dGhDaGlsZE1vZGUpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlclF1b3RlOgorICAgICAgICBpZiAoY2hl
Y2tTdHJpbmcobV9kYXRhLCBtX3Rva2VuKSkgeworICAgICAgICAgICAgKytyZXN1bHQ7CisgICAg
ICAgICAgICBwYXJzZVN0cmluZyhyZXN1bHQsIG1fdG9rZW4pOworICAgICAgICAgICAgbV90b2tl
biA9IFNUUklORzsKKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rv
a2VuU3RhcnQgKyAxOworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0
IC0gKG1fdG9rZW5TdGFydCArIDEpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6CisKKyAgICBjYXNlIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyazogeworICAgICAgICBV
Q2hhciogc3RhcnQgPSBza2lwV2hpdGVTcGFjZXMobV9kYXRhKTsKKyAgICAgICAgaWYgKGlzQ2Fz
ZWxlc3NFcXVhbChzdGFydCwgImltcG9ydGFudCIpKSB7CisgICAgICAgICAgICBtX3Rva2VuID0g
SU1QT1JUQU5UX1NZTTsKKyAgICAgICAgICAgIG1fZGF0YSA9IHN0YXJ0ICsgOTsKKyAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICAvLyBwcm9jZXNzIGVzY2FwZXMKLSAgICBV
Q2hhciogb3V0ID0gc3RhcnQ7Ci0gICAgVUNoYXIqIGVzY2FwZSA9IDA7CisgICAgY2FzZSBDaGFy
YWN0ZXJIYXNobWFyazogeworICAgICAgICBVQ2hhciogc3RhcnQgPSBtX2RhdGE7CisgICAgICAg
IHJlc3VsdCA9IG1fZGF0YTsKIAotICAgIGJvb2wgc2F3RXNjYXBlID0gZmFsc2U7CisgICAgICAg
IGlmIChpc0FTQ0lJRGlnaXQoKm1fZGF0YSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBi
ZSBhIHZhbGlkIGhleCBudW1iZXIgdG9rZW4uCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICB9IHdoaWxlIChpc0FTQ0lJSGV4RGlnaXQoKm1f
ZGF0YSkpOworICAgICAgICAgICAgbV90b2tlbiA9IEhFWDsKKyAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmNoYXJhY3RlcnMgPSBzdGFydDsKKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxl
bmd0aCA9IG1fZGF0YSAtIHN0YXJ0OworICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0
YXJ0KCkpIHsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJRFNFTDsKKyAgICAgICAgICAgIGlmICgh
cGFyc2VJZGVudGlmaWVyKHJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0
aGVyIHRoZSBpZGVudGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVtYmVyLgorICAgICAgICAg
ICAgICAgIFVDaGFyKiBjdXJyZW50ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IEhFWDsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNB
U0NJSUhleERpZ2l0KCpjdXJyZW50KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tl
biA9IElEU0VMOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgICAg
IH0gd2hpbGUgKGN1cnJlbnQgPCByZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
eXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IHN0YXJ0OworICAgICAgICAgICAgeXlsdmFsLT5z
dHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gc3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgVUNo
YXIqIGN1cnJlbnQgPSBzdGFydCArIGk7Ci0gICAgICAgIGlmIChlc2NhcGUgPT0gY3VycmVudCAt
IDEpIHsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHl5VG9rID09IFNUUklORyAmJgot
ICAgICAgICAgICAgICAgICAoKmN1cnJlbnQgPT0gJ1xuJyB8fCAqY3VycmVudCA9PSAnXHInIHx8
ICpjdXJyZW50ID09ICdcZicpKSB7Ci0gICAgICAgICAgICAgICAgLy8gIyMjIGhhbmRsZSBcclxu
IGNhc2UKLSAgICAgICAgICAgICAgICBpZiAoKmN1cnJlbnQgIT0gJ1xyJykKLSAgICAgICAgICAg
ICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICBjYXNl
IENoYXJhY3RlclNsYXNoOgorICAgICAgICAvLyBJZ25vcmUgY29tbWVudHMuIFRoZXkgYXJlIG5v
dCBldmVuIGNvbnNpZGVyZWQgYXMgd2hpdGUgc3BhY2VzLgorICAgICAgICBpZiAoKm1fZGF0YSA9
PSAnKicpIHsKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAgd2hpbGUgKG1fZGF0
YVswXSAhPSAnKicgfHwgbV9kYXRhWzFdICE9ICcvJykgeworICAgICAgICAgICAgICAgIGlmICht
X2RhdGFbMF0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fZGF0YVswXSA9PSAnXDAnICYmIG1fZGF0YVsxXSA9PSAnXDAn
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVudGVybWluYXRlZCBjb21tZW50cyBhcmUgc2lt
cGx5IGlnbm9yZWQuCisgICAgICAgICAgICAgICAgICAgIG1fZGF0YSAtPSAyOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytt
X2RhdGE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpbiBhbGwgb3RoZXIgY2FzZXMg
Y29weSB0aGUgY2hhciB0byBvdXRwdXQKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAg
Km91dCsrID0gKmN1cnJlbnQ7Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBtX2RhdGEgKz0gMjsKKyAgICAgICAgICAgIGdvdG8gcmVz
dGFydEFmdGVyQ29tbWVudDsKICAgICAgICAgfQotICAgICAgICBpZiAoZXNjYXBlID09IGN1cnJl
bnQgLSAyICYmIHl5VG9rID09IFNUUklORyAmJgotICAgICAgICAgICAgICooY3VycmVudC0xKSA9
PSAnXHInICYmICpjdXJyZW50ID09ICdcbicpIHsKLSAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3Rl
ckRvbGxhcjoKKyAgICAgICAgaWYgKCptX2RhdGEgPT0gJz0nKSB7CisgICAgICAgICAgICArK21f
ZGF0YTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBFTkRTV0lUSDsKICAgICAgICAgfQotICAgICAg
ICBpZiAoZXNjYXBlID4gY3VycmVudCAtIDcgJiYgaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50KSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgICAg
ICAvLyBhZGQgZXNjYXBlZCBjaGFyCi0gICAgICAgICAgICB1bnNpZ25lZCB1YyA9IDA7Ci0gICAg
ICAgICAgICBlc2NhcGUrKzsKLSAgICAgICAgICAgIHdoaWxlIChlc2NhcGUgPCBjdXJyZW50KSB7
Ci0gICAgICAgICAgICAgICAgdWMgKj0gMTY7Ci0gICAgICAgICAgICAgICAgdWMgKz0gdG9BU0NJ
SUhleFZhbHVlKCplc2NhcGUpOwotICAgICAgICAgICAgICAgIGVzY2FwZSsrOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyQXN0ZXJpc2s6CisgICAgICAgIGlmICgqbV9kYXRh
ID09ICc9JykgeworICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICBtX3Rva2VuID0g
Q09OVEFJTlM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3Rl
clBsdXM6CisgICAgICAgIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9k
ZSkpIHsKKyAgICAgICAgICAgIC8vIFNpbXBsZXN0IGNhc2UuICIrWzAtOV0qbiIgaXMgYWx3YXlz
IE50aENoaWxkLgorICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGQoKSkgeworICAgICAgICAg
ICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYSgpOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBO
VEg7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5T
dGFydDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBt
X3Rva2VuU3RhcnQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjYW4ndCBoYW5kbGUg
Y2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgICAgICBpZiAodWMgPiAweGZmZmYpCi0gICAgICAg
ICAgICAgICAgdWMgPSAweGZmZmQ7Ci0gICAgICAgICAgICAqb3V0KysgPSB1YzsKLSAgICAgICAg
ICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKmN1cnJlbnQpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZXNjYXBl
ICYmICpjdXJyZW50ID09ICdcXCcpIHsKLSAgICAgICAgICAgIGVzY2FwZSA9IGN1cnJlbnQ7Ci0g
ICAgICAgICAgICBzYXdFc2NhcGUgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJMZXNzOgorICAgICAgICBpZiAobV9kYXRh
WzBdID09ICchJyAmJiBtX2RhdGFbMV0gPT0gJy0nICYmIG1fZGF0YVsyXSA9PSAnLScpIHsKKyAg
ICAgICAgICAgIG1fZGF0YSArPSAzOworICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CiAg
ICAgICAgIH0KLSAgICAgICAgKm91dCsrID0gKmN1cnJlbnQ7Ci0gICAgfQotICAgIGlmIChlc2Nh
cGUpIHsKLSAgICAgICAgLy8gYWRkIGVzY2FwZWQgY2hhcgotICAgICAgICB1bnNpZ25lZCB1YyA9
IDA7Ci0gICAgICAgIGVzY2FwZSsrOwotICAgICAgICB3aGlsZSAoZXNjYXBlIDwgc3RhcnQrbCkg
ewotICAgICAgICAgICAgdWMgKj0gMTY7Ci0gICAgICAgICAgICB1YyArPSB0b0FTQ0lJSGV4VmFs
dWUoKmVzY2FwZSk7Ci0gICAgICAgICAgICBlc2NhcGUrKzsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIENoYXJhY3RlckF0OgorICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoKSkgewor
ICAgICAgICAgICAgbV90b2tlbiA9IEFUS0VZV09SRDsKKyAgICAgICAgICAgICsrcmVzdWx0Owor
ICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVudGlmaWVyKHJlc3VsdCk7CisgICAgICAg
ICAgICBkZXRlY3RBdFRva2VuKHJlc3VsdCAtIG1fdG9rZW5TdGFydCwgaGFzRXNjYXBlKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyQmFja1NsYXNoOgor
ICAgICAgICBpZiAoaXNDU1NFc2NhcGUoKm1fZGF0YSkpIHsKKyAgICAgICAgICAgIC0tbV9kYXRh
OworICAgICAgICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCk7CisgICAgICAgICAgICBtX3Rv
a2VuID0gSURFTlQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90
b2tlblN0YXJ0OworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0g
bV90b2tlblN0YXJ0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFy
YWN0ZXJYb3I6CisgICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgKytt
X2RhdGE7CisgICAgICAgICAgICBtX3Rva2VuID0gQkVHSU5TV0lUSDsKICAgICAgICAgfQotICAg
ICAgICAvLyBjYW4ndCBoYW5kbGUgY2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgIGlmICh1YyA+
IDB4ZmZmZikKLSAgICAgICAgICAgIHVjID0gMHhmZmZkOwotICAgICAgICAqb3V0KysgPSB1YzsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlclZlcnRpY2FsQmFyOgorICAgICAg
ICBpZiAoKm1fZGF0YSA9PSAnPScpIHsKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAg
ICAgbV90b2tlbiA9IERBU0hNQVRDSDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgQ2hhcmFjdGVyVGlsZGU6CisgICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAg
ICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICBtX3Rva2VuID0gSU5DTFVERVM7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgKmxlbmd0aCA9IG91dCAt
IHN0YXJ0OworI2lmbmRlZiBOREVCVUcKKyAgICBzd2l0Y2ggKHRva2VuKCkpIHsKKyAgICBjYXNl
IFNUUklORzoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90
b2tlblN0YXJ0ICsgMSk7CisgICAgICAgIGJyZWFrOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBhbiB1
bnJlY29nbml6ZWQgQC1rZXl3b3JkLCBhbmQgaWYgd2UgaGFuZGxlZCBhbnkgZXNjYXBlcyBhdCBh
bGwsIHRoZW4KLSAgICAvLyB3ZSBzaG91bGQgYXR0ZW1wdCB0byBhZGp1c3QgeXlUb2sgdG8gdGhl
IGNvcnJlY3QgdHlwZS4KLSAgICBpZiAoeXlUb2sgPT0gQVRLRVlXT1JEICYmIHNhd0VzY2FwZSkK
LSAgICAgICAgcmVjaGVja0F0S2V5d29yZChzdGFydCwgKmxlbmd0aCk7CisgICAgY2FzZSBJREVO
VDoKKyAgICBjYXNlIE5USDoKKyAgICBjYXNlIERJTUVOOgorICAgIGNhc2UgVU5JQ09ERVJBTkdF
OgorICAgIGNhc2UgRlVOQ1RJT046CisgICAgY2FzZSBBTllGVU5DVElPTjoKKyAgICBjYXNlIE5P
VEZVTkNUSU9OOgorICAgIGNhc2UgQ0FMQ0ZVTkNUSU9OOgorICAgIGNhc2UgTUlORlVOQ1RJT046
CisgICAgY2FzZSBNQVhGVU5DVElPTjoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNo
YXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICYmIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA+IDApOwor
ICAgICAgICBicmVhazsKIAotICAgIHJldHVybiBzdGFydDsKLX0KKyAgICBjYXNlIFVSSToKKyAg
ICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgJiYgeXlsdmFsLT5zdHJpbmcu
Y2hhcmFjdGVycyAhPSBtX3Rva2VuU3RhcnQpOworICAgICAgICBicmVhazsKIAotdm9pZCBDU1NQ
YXJzZXI6OmNvdW50TGluZXMoKQotewotICAgIGZvciAoVUNoYXIqIGN1cnJlbnQgPSB5eXRleHQ7
IGN1cnJlbnQgPCB5eXRleHQgKyB5eWxlbmc7ICsrY3VycmVudCkgewotICAgICAgICBpZiAoKmN1
cnJlbnQgPT0gJ1xuJykKLSAgICAgICAgICAgICsrbV9saW5lTnVtYmVyOworICAgIGNhc2UgSEVY
OgorICAgIGNhc2UgSURTRUw6CisgICAgICAgIEFTU0VSVCh5eWx2YWwtPnN0cmluZy5jaGFyYWN0
ZXJzID09IG1fdG9rZW5TdGFydCArIDEgJiYgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID4gMCk7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHRva2VuKCk7CiB9CiAK
IENTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKQpA
QCAtNzg1NywyNyArODgzNiwyNyBAQCB2b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdE1lZGlhTGlu
ZShNZWRpYUxpc3QqIG1lZGlhKQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdFN0
YXJ0KCkKIHsKLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0geXl0ZXh0IC0gbV9kYXRh
LmdldCgpOworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBt
X2RhdGFTdGFydC5nZXQoKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RF
bmQoKQogewogICAgIGlmICghbV9jdXJyZW50UnVsZURhdGEpCiAgICAgICAgIHJldHVybjsKLSAg
ICBVQ2hhciogbGlzdEVuZCA9IHl5dGV4dDsKLSAgICB3aGlsZSAobGlzdEVuZCA+IG1fZGF0YS5n
ZXQoKSArIDEpIHsKKyAgICBVQ2hhciogbGlzdEVuZCA9IG1fdG9rZW5TdGFydDsKKyAgICB3aGls
ZSAobGlzdEVuZCA+IG1fZGF0YVN0YXJ0LmdldCgpICsgMSkgewogICAgICAgICBpZiAoaXNIVE1M
U3BhY2UoKihsaXN0RW5kIC0gMSkpKQogICAgICAgICAgICAgLS1saXN0RW5kOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5l
bmQgPSBsaXN0RW5kIC0gbV9kYXRhLmdldCgpOworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5k
ID0gbGlzdEVuZCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFy
a1J1bGVCb2R5U3RhcnQoKQogewotICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0
YS5nZXQoKTsKLSAgICBpZiAoKnl5dGV4dCA9PSAneycpCisgICAgdW5zaWduZWQgb2Zmc2V0ID0g
bV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CisgICAgaWYgKCptX3Rva2VuU3RhcnQg
PT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcg
YnJhY2UuCiAgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5zdGFydCkKICAgICAgICAg
bV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gb2Zmc2V0OwpAQCAtNzg4Niw3ICs4ODY1LDcgQEAgdm9p
ZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtS
dWxlQm9keUVuZCgpCiB7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhLmdl
dCgpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0Lmdl
dCgpOwogICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2UuZW5kKQogICAgICAgICBtX3J1
bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0OwogfQpAQCAtNzg5NSwxNSArODg3NCwxNSBAQCB2b2lk
IENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQogewogICAgIGlmICghbV9pblN0eWxlUnVs
ZU9yRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb3BlcnR5UmFuZ2Uuc3Rh
cnQgPSB5eXRleHQgLSBtX2RhdGEuZ2V0KCk7CisgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0g
bV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpt
YXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJz
ZWQpCiB7CiAgICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAgcmV0
dXJuOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YS5nZXQoKTsKLSAgICBp
ZiAoKnl5dGV4dCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGludG8gdGhlIHByb3BlcnR5
IHRleHQuCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQu
Z2V0KCk7CisgICAgaWYgKCptX3Rva2VuU3RhcnQgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xv
biBpbnRvIHRoZSBwcm9wZXJ0eSB0ZXh0LgogICAgICAgICArK29mZnNldDsKICAgICBtX3Byb3Bl
cnR5UmFuZ2UuZW5kID0gb2Zmc2V0OwogICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0g
VUlOVF9NQVggJiYgbV9jdXJyZW50UnVsZURhdGEpIHsKQEAgLTc5MTEsNyArODg5MCw3IEBAIHZv
aWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29s
IGlzUHJvcGVydHlQYXJzZWQpCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHN0YXJ0ID0gbV9wcm9w
ZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmQgPSBtX3Byb3BlcnR5
UmFuZ2UuZW5kOwogICAgICAgICBBU1NFUlQoc3RhcnQgPCBlbmQpOwotICAgICAgICBTdHJpbmcg
cHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRhLmdldCgpICsgc3RhcnQsIGVuZCAtIHN0YXJ0
KS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgU3RyaW5nIHByb3BlcnR5U3RyaW5nID0gU3Ry
aW5nKG1fZGF0YVN0YXJ0LmdldCgpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKICAgICAgICAgaWYgKHByb3BlcnR5U3RyaW5nLmVuZHNXaXRoKCI7IiwgdHJ1ZSkpCiAg
ICAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5U3RyaW5nLmxlZnQocHJvcGVydHlT
dHJpbmcubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgc2l6ZV90IGNvbG9uSW5kZXggPSBwcm9wZXJ0
eVN0cmluZy5maW5kKCI6Iik7CkBAIC04MTMwLDMzICs5MTA5LDQgQEAgYm9vbCBpc1ZhbGlkTnRo
VG9rZW4oY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiB0b2tlbikKICAgICAgICAgfHwgZXF1YWxJZ25v
cmluZ0Nhc2UodG9rZW4sICJuIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodG9rZW4sICItbiIpOwog
fQogCi0jZGVmaW5lIFlZX0RFQ0wgaW50IENTU1BhcnNlcjo6bGV4KCkKLSNkZWZpbmUgeXljb25z
dCBjb25zdAotdHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKLXR5cGVkZWYgdW5zaWduZWQgWVlf
Q0hBUjsKLS8vIFRoZSBmb2xsb3dpbmcgbGluZSBtYWtlcyBzdXJlIHdlIHRyZWF0IG5vbi1MYXRp
bi0xIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZWN0bHkuCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMp
IChjID4gMHhmZiA/IDB4ZmYgOiBjKQotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAg
ICAgICAgeXl0ZXh0ID0geXlfYnA7IFwKLSAgICAgICAgeXlsZW5nID0gKGludCkgKHl5X2NwIC0g
eXlfYnApOyBcCi0gICAgICAgIHl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAotICAgICAgICAqeXlf
Y3AgPSAwOyBcCi0gICAgICAgIHl5X2NfYnVmX3AgPSB5eV9jcDsKLSNkZWZpbmUgWVlfQlJFQUsg
YnJlYWs7Ci0jZGVmaW5lIEVDSE8KLSNkZWZpbmUgWVlfUlVMRV9TRVRVUAotI2RlZmluZSBJTklU
SUFMIDAKLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0
YXRlICsgMSkKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSB5eVRvayA9IEVORF9UT0tFTjsgcmV0dXJu
IHl5VG9rCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKGEpCi0vLyBUaGUgZm9sbG93aW5nIGxpbmUg
aXMgbmVlZGVkIHRvIGJ1aWxkIHRoZSB0b2tlbml6ZXIgd2l0aCBhIGNvbmRpdGlvbiBzdGFjay4K
LS8vIFRoZSBtYWNybyBpcyB1c2VkIGluIHRoZSB0b2tlbml6ZXIgZ3JhbW1hciB3aXRoIGxpbmVz
IGNvbnRhaW5pbmcKLS8vIEJFR0lOKG1lZGlhcXVlcmllcykgYW5kIEJFR0lOKGluaXRpYWwpLiB5
eV9zdGFydCBhY3RzIGFzIGluZGV4IHRvCi0vLyB0b2tlbml6ZXIgdHJhbnNpdGlvbiB0YWJsZSwg
YW5kICdtZWRpYXF1ZXJpZXMnIGFuZCAnaW5pdGlhbCcgYXJlCi0vLyBvZmZzZXQgbXVsdGlwbGll
cnMgdGhhdCBzcGVjaWZ5IHdoaWNoIHRyYW5zaXRpb25zIGFyZSBhY3RpdmUKLS8vIGluIHRoZSB0
b2tlbml6ZXIgZHVyaW5nIGluIGVhY2ggY29uZGl0aW9uICh0b2tlbml6ZXIgc3RhdGUpLgotI2Rl
ZmluZSBCRUdJTiB5eV9zdGFydCA9IDEgKyAyICoKLQotI2luY2x1ZGUgInRva2VuaXplci5jcHAi
Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBhZGMxOTAyLi5iNWZjZDNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCkBAIC0zMTUsMTIgKzMxNSwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlSYW5nZS5zdGFydCA9IG1fcnVsZUJvZHlS
YW5nZS5lbmQgPSAwOyB9CiAgICAgdm9pZCByZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVy
dHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBVSU5UX01BWDsgfQogICAgIGlu
dCBsZXgodm9pZCogeXlsdmFsKTsKLSAgICBpbnQgdG9rZW4oKSB7IHJldHVybiB5eVRvazsgfQot
ICAgIFVDaGFyKiB0ZXh0KGludCogbGVuZ3RoKTsKLSAgICB2b2lkIGNvdW50TGluZXMoKTsKLSAg
ICBpbnQgbGV4KCk7CisgICAgaW50IHRva2VuKCkgeyByZXR1cm4gbV90b2tlbjsgfQogCiBwcml2
YXRlOgorICAgIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0YXJ0KCk7CisKKyAgICBzdGF0aWMg
aW5saW5lIFVDaGFyKiBjaGVja1N0cmluZyhVQ2hhciosIFVDaGFyKTsKKworICAgIHZvaWQgcGFy
c2VFc2NhcGUoVUNoYXIqJik7CisgICAgaW5saW5lIGJvb2wgcGFyc2VJZGVudGlmaWVyKFVDaGFy
KiYpOworICAgIGlubGluZSB2b2lkIHBhcnNlU3RyaW5nKFVDaGFyKiYsIFVDaGFyKTsKKyAgICBp
bmxpbmUgdm9pZCBwYXJzZVVSSShVQ2hhciomLCBVQ2hhciomKTsKKyAgICBpbmxpbmUgYm9vbCBw
YXJzZVVuaWNvZGVSYW5nZSgpOworICAgIGJvb2wgcGFyc2VOdGhDaGlsZCgpOworICAgIGJvb2wg
cGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0RnVuY3Rpb25Ub2tl
bihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdE1lZGlhUXVlcnlUb2tlbihpbnQpOworICAg
IGlubGluZSB2b2lkIGRldGVjdE51bWJlclRva2VuKFVDaGFyKiwgaW50KTsKKyAgICBpbmxpbmUg
dm9pZCBkZXRlY3REYXNoVG9rZW4oaW50KTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2Vu
KGludCwgYm9vbCk7CisKICAgICB2b2lkIHNldFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwog
ICAgIHZvaWQgZW5zdXJlQ1NTVmFsdWVQb29sKCk7CiAKQEAgLTM1NiwxNSArMzcwLDE3IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIHBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJik7CiAKLSAgICBPd25B
cnJheVB0cjxVQ2hhcj4gbV9kYXRhOwotICAgIFVDaGFyKiB5eXRleHQ7Ci0gICAgVUNoYXIqIHl5
X2NfYnVmX3A7Ci0gICAgVUNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZTsKLSAgICBVQ2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICBpbnQg
eXlsZW5nOwotICAgIGludCB5eVRvazsKLSAgICBpbnQgeXlfc3RhcnQ7CisgICAgZW51bSBQYXJz
aW5nTW9kZSB7CisgICAgICAgIE5vcm1hbE1vZGUsCisgICAgICAgIE1lZGlhUXVlcnlNb2RlLAor
ICAgICAgICBOdGhDaGlsZE1vZGUKKyAgICB9OworCisgICAgUGFyc2luZ01vZGUgbV9wYXJzaW5n
TW9kZTsKKyAgICBPd25BcnJheVB0cjxVQ2hhcj4gbV9kYXRhU3RhcnQ7CisgICAgVUNoYXIqIG1f
ZGF0YTsKKyAgICBVQ2hhciogbV90b2tlblN0YXJ0OworICAgIGludCBtX3Rva2VuOwogICAgIGlu
dCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1fbGFzdFNlbGVjdG9yTGluZU51bWJlcjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4IGIvU291cmNlL1dlYkNv
cmUvY3NzL3Rva2VuaXplci5mbGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjhk
YmNhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleAorKysg
L2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0lb3B0aW9uIGNhc2UtaW5zZW5zaXRpdmUKLSVv
cHRpb24gbm95eXdyYXAKLSVvcHRpb24gOGJpdAotJW9wdGlvbiBzdGFjawotJXMgbWVkaWFxdWVy
eQotJXMgZm9ya2V5d29yZAotJXMgbnRoY2hpbGQKLQotaCAgICAgICAgICAgICAgIFswLTlhLWZB
LUZdCi1ub25hc2NpaSAgICAgICAgW1wyMDAtXDM3N10KLXVuaWNvZGUgICAgICAgICBcXHtofXsx
LDZ9WyBcdFxyXG5cZl0/Ci1lc2NhcGUgICAgICAgICAge3VuaWNvZGV9fFxcWyAtflwyMDAtXDM3
N10KLW5tc3RhcnQgICAgICAgICBbX2EtekEtWl18e25vbmFzY2lpfXx7ZXNjYXBlfQotbm1jaGFy
ICAgICAgICAgIFtfYS16QS1aMC05LV18e25vbmFzY2lpfXx7ZXNjYXBlfQotc3RyaW5nMSAgICAg
ICAgIFwiKFteXG5cclxmXFwiXXxcXHtubH18e2VzY2FwZX0pKlwiCi1zdHJpbmcyICAgICAgICAg
XCcoW15cblxyXGZcXCddfFxce25sfXx7ZXNjYXBlfSkqXCcKLQotaWRlbnQgICAgICAgICAgIC0/
e25tc3RhcnR9e25tY2hhcn0qCi1udW0gICAgICAgICAgICAgWzAtOV0rfFswLTldKiIuIlswLTld
KwotaW50bnVtICAgICAgICAgIFswLTldKwotc3RyaW5nICAgICAgICAgIHtzdHJpbmcxfXx7c3Ry
aW5nMn0KLXVybCAgICAgICAgICAgICAoWyEjJCUmKi1+XXx7bm9uYXNjaWl9fHtlc2NhcGV9KSoK
LXcgICAgICAgICAgICAgICBbIFx0XHJcblxmXSoKLW5sICAgICAgICAgICAgICBcbnxcclxufFxy
fFxmCi1yYW5nZSAgICAgICAgICAgXD97MSw2fXx7aH0oXD97MCw1fXx7aH0oXD97MCw0fXx7aH0o
XD97MCwzfXx7aH0oXD97MCwyfXx7aH0oXD8/fHtofSkpKSkpCi1udGggICAgICAgICAgICAgW1wr
LV0/e2ludG51bX0qbihbXHRcclxuIF0qW1wrLV1bXHRcclxuIF0qe2ludG51bX0pPwotbnRoZnVu
YyAgICAgICAgICJudGgtIigiY2hpbGQifCJvZi10eXBlInwibGFzdC1jaGlsZCJ8Imxhc3Qtb2Yt
dHlwZSIpCi0KLSUlCi0KLVwvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLyB7Y291bnRMaW5l
cygpOyAvKiBpZ25vcmUgY29tbWVudHMgKi8gfQotCi1bIFx0XHJcblxmXSsgICAgICAgICAgICB7
Y291bnRMaW5lcygpOyB5eVRvayA9IFdISVRFU1BBQ0U7IHJldHVybiB5eVRvazt9Ci0KLSI8IS0t
IiAgICAgICAgICAgICAgICAgIHt5eVRvayA9IFNHTUxfQ0Q7IHJldHVybiB5eVRvazt9Ci0iLS0+
IiAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBTR01MX0NEOyByZXR1cm4geXlUb2s7fQotIn49
IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0gSU5DTFVERVM7IHJldHVybiB5eVRvazt9Ci0i
fD0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBEQVNITUFUQ0g7IHJldHVybiB5eVRvazt9
Ci0iXj0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBCRUdJTlNXSVRIOyByZXR1cm4geXlU
b2s7fQotIiQ9IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0gRU5EU1dJVEg7IHJldHVybiB5
eVRvazt9Ci0iKj0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBDT05UQUlOUzsgcmV0dXJu
IHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJub3QiICAgICAgIHt5eVRvayA9IE1FRElBX05PVDsgcmV0
dXJuIHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJvbmx5IiAgICAgIHt5eVRvayA9IE1FRElBX09OTFk7
IHJldHVybiB5eVRvazt9Ci08bWVkaWFxdWVyeT4iYW5kIiAgICAgICB7eXlUb2sgPSBNRURJQV9B
TkQ7IHJldHVybiB5eVRvazt9Ci0KLXtzdHJpbmd9ICAgICAgICAgICAgICAgIHt5eVRvayA9IFNU
UklORzsgcmV0dXJuIHl5VG9rO30KLXtpZGVudH0gICAgICAgICAgICAgICAgIHt5eVRvayA9IElE
RU5UOyByZXR1cm4geXlUb2s7fQotPG50aGNoaWxkPntudGh9ICAgICAgICAge3l5VG9rID0gTlRI
OyByZXR1cm4geXlUb2s7fQotPG50aGNoaWxkPiIpIiAgICAgICAgICAge0JFR0lOKElOSVRJQUwp
OyB5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazt9Ci0KLSIjIntofSsgICAgICAgICAgICAg
ICAgIHt5eVRvayA9IEhFWDsgcmV0dXJuIHl5VG9rO30KLSIjIntpZGVudH0gICAgICAgICAgICAg
IHt5eVRvayA9IElEU0VMOyByZXR1cm4geXlUb2s7fQotCi0iQGltcG9ydCIgICAgICAgICAgICAg
ICB7QkVHSU4obWVkaWFxdWVyeSk7IHl5VG9rID0gSU1QT1JUX1NZTTsgcmV0dXJuIHl5VG9rO30K
LSJAcGFnZSIgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBBR0VfU1lNOyByZXR1cm4geXlUb2s7
fQotIkB0b3AtbGVmdC1jb3JuZXIiICAgICAge3l5VG9rID0gVE9QTEVGVENPUk5FUl9TWU07IHJl
dHVybiB5eVRvazt9Ci0iQHRvcC1sZWZ0IiAgICAgICAgICAgICB7eXlUb2sgPSBUT1BMRUZUX1NZ
TTsgcmV0dXJuIHl5VG9rO30KLSJAdG9wLWNlbnRlciIgICAgICAgICAgIHt5eVRvayA9IFRPUENF
TlRFUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1yaWdodCIgICAgICAgICAgICB7eXlUb2sg
PSBUT1BSSUdIVF9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1yaWdodC1jb3JuZXIiICAgICB7
eXlUb2sgPSBUT1BSSUdIVENPUk5FUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQGJvdHRvbS1sZWZ0
LWNvcm5lciIgICB7eXlUb2sgPSBCT1RUT01MRUZUQ09STkVSX1NZTTsgcmV0dXJuIHl5VG9rO30K
LSJAYm90dG9tLWxlZnQiICAgICAgICAgIHt5eVRvayA9IEJPVFRPTUxFRlRfU1lNOyByZXR1cm4g
eXlUb2s7fQotIkBib3R0b20tY2VudGVyIiAgICAgICAge3l5VG9rID0gQk9UVE9NQ0VOVEVSX1NZ
TTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLXJpZ2h0IiAgICAgICAgIHt5eVRvayA9IEJPVFRP
TVJJR0hUX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLXJpZ2h0LWNvcm5lciIgIHt5eVRv
ayA9IEJPVFRPTVJJR0hUQ09STkVSX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAbGVmdC10b3AiICAg
ICAgICAgICAgIHt5eVRvayA9IExFRlRUT1BfU1lNOyByZXR1cm4geXlUb2s7fQotIkBsZWZ0LW1p
ZGRsZSIgICAgICAgICAge3l5VG9rID0gTEVGVE1JRERMRV9TWU07IHJldHVybiB5eVRvazt9Ci0i
QGxlZnQtYm90dG9tIiAgICAgICAgICB7eXlUb2sgPSBMRUZUQk9UVE9NX1NZTTsgcmV0dXJuIHl5
VG9rO30KLSJAcmlnaHQtdG9wIiAgICAgICAgICAgIHt5eVRvayA9IFJJR0hUVE9QX1NZTTsgcmV0
dXJuIHl5VG9rO30KLSJAcmlnaHQtbWlkZGxlIiAgICAgICAgIHt5eVRvayA9IFJJR0hUTUlERExF
X1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtYm90dG9tIiAgICAgICAgIHt5eVRvayA9IFJJ
R0hUQk9UVE9NX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAbWVkaWEiICAgICAgICAgICAgICAgIHtC
RUdJTihtZWRpYXF1ZXJ5KTsgeXlUb2sgPSBNRURJQV9TWU07IHJldHVybiB5eVRvazt9Ci0iQGZv
bnQtZmFjZSIgICAgICAgICAgICB7eXlUb2sgPSBGT05UX0ZBQ0VfU1lNOyByZXR1cm4geXlUb2s7
fQotIkBjaGFyc2V0IiAgICAgICAgICAgICAge3l5VG9rID0gQ0hBUlNFVF9TWU07IHJldHVybiB5
eVRvazt9Ci0iQG5hbWVzcGFjZSIgICAgICAgICAgICB7eXlUb2sgPSBOQU1FU1BBQ0VfU1lNOyBy
ZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1ydWxlIiAgICAgICAgIHt5eVRvayA9IFdFQktJVF9S
VUxFX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQtZGVjbHMiICAgICAgICB7eXlUb2sg
PSBXRUJLSVRfREVDTFNfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC12YWx1ZSIgICAg
ICAgIHt5eVRvayA9IFdFQktJVF9WQUxVRV9TWU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0
LW1lZGlhcXVlcnkiICAge0JFR0lOKG1lZGlhcXVlcnkpOyB5eVRvayA9IFdFQktJVF9NRURJQVFV
RVJZX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQtc2VsZWN0b3IiICAgICB7eXlUb2sg
PSBXRUJLSVRfU0VMRUNUT1JfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1rZXlmcmFt
ZXMiICAgIHt5eVRvayA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJA
LXdlYmtpdC1rZXlmcmFtZS1ydWxlIiB7eXlUb2sgPSBXRUJLSVRfS0VZRlJBTUVfUlVMRV9TWU07
IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LXJlZ2lvbiIgICAgICAge3l5VG9rID0gV0VCS0lU
X1JFR0lPTl9SVUxFX1NZTTsgcmV0dXJuIHl5VG9rO30KLQotIkAie2lkZW50fSAgICAgICAgICAg
ICAge3l5VG9rID0gQVRLRVlXT1JEOyByZXR1cm4geXlUb2s7IH0KLQotIiEie3d9ImltcG9ydGFu
dCIgICAgICAge3l5VG9rID0gSU1QT1JUQU5UX1NZTTsgcmV0dXJuIHl5VG9rO30KLQote251bX1l
bSAgICAgICAgICAgICAgICAge3l5VG9rID0gRU1TOyByZXR1cm4geXlUb2s7fQote251bX1yZW0g
ICAgICAgICAgICAgICAge3l5VG9rID0gUkVNUzsgcmV0dXJuIHl5VG9rO30KLXtudW19X19xZW0g
ICAgICAgICAgICAgIHt5eVRvayA9IFFFTVM7IHJldHVybiB5eVRvazt9IC8qIHF1aXJreSBlbXMg
Ki8KLXtudW19ZXggICAgICAgICAgICAgICAgIHt5eVRvayA9IEVYUzsgcmV0dXJuIHl5VG9rO30K
LXtudW19cHggICAgICAgICAgICAgICAgIHt5eVRvayA9IFBYUzsgcmV0dXJuIHl5VG9rO30KLXtu
dW19Y20gICAgICAgICAgICAgICAgIHt5eVRvayA9IENNUzsgcmV0dXJuIHl5VG9rO30KLXtudW19
bW0gICAgICAgICAgICAgICAgIHt5eVRvayA9IE1NUzsgcmV0dXJuIHl5VG9rO30KLXtudW19aW4g
ICAgICAgICAgICAgICAgIHt5eVRvayA9IElOUzsgcmV0dXJuIHl5VG9rO30KLXtudW19cHQgICAg
ICAgICAgICAgICAgIHt5eVRvayA9IFBUUzsgcmV0dXJuIHl5VG9rO30KLXtudW19cGMgICAgICAg
ICAgICAgICAgIHt5eVRvayA9IFBDUzsgcmV0dXJuIHl5VG9rO30KLXtudW19ZGVnICAgICAgICAg
ICAgICAgIHt5eVRvayA9IERFR1M7IHJldHVybiB5eVRvazt9Ci17bnVtfXJhZCAgICAgICAgICAg
ICAgICB7eXlUb2sgPSBSQURTOyByZXR1cm4geXlUb2s7fQote251bX1ncmFkICAgICAgICAgICAg
ICAge3l5VG9rID0gR1JBRFM7IHJldHVybiB5eVRvazt9Ci17bnVtfXR1cm4gICAgICAgICAgICAg
ICB7eXlUb2sgPSBUVVJOUzsgcmV0dXJuIHl5VG9rO30KLXtudW19bXMgICAgICAgICAgICAgICAg
IHt5eVRvayA9IE1TRUNTOyByZXR1cm4geXlUb2s7fQote251bX1zICAgICAgICAgICAgICAgICAg
e3l5VG9rID0gU0VDUzsgcmV0dXJuIHl5VG9rO30KLXtudW19SHogICAgICAgICAgICAgICAgIHt5
eVRvayA9IEhFUlRaOyByZXR1cm4geXlUb2s7fQote251bX1rSHogICAgICAgICAgICAgICAge3l5
VG9rID0gS0hFUlRaOyByZXR1cm4geXlUb2s7fQote251bX17aWRlbnR9ICAgICAgICAgICAge3l5
VG9rID0gRElNRU47IHJldHVybiB5eVRvazt9Ci17bnVtfXtpZGVudH1cKyAgICAgICAgICB7eXlU
b2sgPSBJTlZBTElERElNRU47IHJldHVybiB5eVRvazt9Ci17bnVtfSUrICAgICAgICAgICAgICAg
ICB7eXlUb2sgPSBQRVJDRU5UQUdFOyByZXR1cm4geXlUb2s7fQote2ludG51bX0gICAgICAgICAg
ICAgICAge3l5VG9rID0gSU5URUdFUjsgcmV0dXJuIHl5VG9rO30KLXtudW19ICAgICAgICAgICAg
ICAgICAgIHt5eVRvayA9IEZMT0FUVE9LRU47IHJldHVybiB5eVRvazt9Ci0KLSItd2Via2l0LWFu
eSgiICAgICAgICAgIHt5eVRvayA9IEFOWUZVTkNUSU9OOyByZXR1cm4geXlUb2s7fQotIm5vdCgi
ICAgICAgICAgICAgICAgICAge3l5VG9rID0gTk9URlVOQ1RJT047IHJldHVybiB5eVRvazt9Ci0i
dXJsKCJ7d317c3RyaW5nfXt3fSIpIiB7eXlUb2sgPSBVUkk7IHJldHVybiB5eVRvazt9Ci0idXJs
KCJ7d317dXJsfXt3fSIpIiAgICB7eXlUb2sgPSBVUkk7IHJldHVybiB5eVRvazt9Ci0iLXdlYmtp
dC1jYWxjKCIgICAgICAgICB7eXlUb2sgPSBDQUxDRlVOQ1RJT047IHJldHVybiB5eVRvazt9Ci0i
LXdlYmtpdC1taW4oIiAgICAgICAgICB7eXlUb2sgPSBNSU5GVU5DVElPTjsgcmV0dXJuIHl5VG9r
O30KLSItd2Via2l0LW1heCgiICAgICAgICAgIHt5eVRvayA9IE1BWEZVTkNUSU9OOyByZXR1cm4g
eXlUb2s7fQote250aGZ1bmN9IigiICAgICAgICAgICAge0JFR0lOKG50aGNoaWxkKTsgeXlUb2sg
PSBGVU5DVElPTjsgcmV0dXJuIHl5VG9rO30KLXtpZGVudH0iKCIgICAgICAgICAgICAgIHt5eVRv
ayA9IEZVTkNUSU9OOyByZXR1cm4geXlUb2s7fQotCi1VXCt7cmFuZ2V9ICAgICAgICAgICAgICB7
eXlUb2sgPSBVTklDT0RFUkFOR0U7IHJldHVybiB5eVRvazt9Ci1VXCt7aH17MSw2fS17aH17MSw2
fSAgICB7eXlUb2sgPSBVTklDT0RFUkFOR0U7IHJldHVybiB5eVRvazt9Ci0KLTxtZWRpYXF1ZXJ5
PiJ7IiAgICAgICAgIHwKLTxtZWRpYXF1ZXJ5PiI7IiAgICAgICAgIHtCRUdJTihJTklUSUFMKTsg
eXlUb2sgPSAqeXl0ZXh0OyByZXR1cm4geXlUb2s7IH0KLS4gICAgICAgICAgICAgICAgICAgICAg
IHt5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazt9Ci0KLSUlCmRpZmYgLS1naXQgYS93c2Ny
aXB0IGIvd3NjcmlwdAppbmRleCBhOTg5OWI2Li5hZGZlNjM3IDEwMDY0NAotLS0gYS93c2NyaXB0
CisrKyBiL3dzY3JpcHQKQEAgLTI3OCw3ICsyNzgsNiBAQCBkZWYgYnVpbGQoYmxkKToKICAgICAg
ICAgIyBpbnRlcm1lZGlhdGUgc291cmNlcwogICAgICAgICBleGNsdWRlcy5hcHBlbmQoJ0RvY1R5
cGVTdHJpbmdzLmNwcCcpCiAgICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgnSFRNTEVudGl0eU5hbWVz
LmNwcCcpCi0gICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgndG9rZW5pemVyLmNwcCcpCiAKICAgICAg
ICAgIyBRdCBzcGVjaWZpYyBmaWxlIGluIGNvbW1vbiBzb3VyY2VzCiAgICAgICAgIGV4Y2x1ZGVz
LmFwcGVuZCgnQ29udGV4dFNoYWRvdy5jcHAnKQotLSAKMS43LjIuNQoK
</data>
<flag name="review"
          id="121666"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122006</attachid>
            <date>2012-01-11 04:47:45 -0800</date>
            <delta_ts>2012-01-24 01:21:45 -0800</delta_ts>
            <desc>next patch</desc>
            <filename>0001-css-lexer.patch</filename>
            <type>text/plain</type>
            <size>80712</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA0NDFmNzI3ZGVlMmEyM2FiMmEzYzZkMmI4Mjg3ZWZlOWQ0YmVkNzk2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogV2VkLCAxMSBKYW4gMjAxMiAwNDo0MzoyMCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGNz
cy1sZXhlcgoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTEgKwogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDExIC0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA3NCArCiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5t
YWtlICAgICAgICAgICAgICAgICB8ICAgIDggLQogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMucHJpICAgICAgICAgICAgICAgICAgfCAgIDExIC0KIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSAtCiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDMgLQogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAgICAgICAgICAgICAgfCAgIDE3IC0KIC4uLi9XZWJDb3Jl
Lmd5cC9zY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5ICAgIHwgIDEwMSAtLQogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAgIHwgICAgNCAt
CiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8ICAg
IDQgLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgICAgICAgICAgICAgICAgICAg
fCAxNDU4ICsrKysrKysrKysrKysrKystLS0tCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmggICAgICAgICAgICAgICAgICAgICB8ICAgNDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy90b2tl
bml6ZXIuZmxleCAgICAgICAgICAgICAgICAgIHwgIDEzMCAtLQogd3NjcmlwdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KIDE2IGZpbGVzIGNoYW5n
ZWQsIDEzMTggaW5zZXJ0aW9ucygrKSwgNTYzIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0b2tlbml6
ZXIucHkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZs
ZXgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMThmNDUwMS4uMDM5
YTAyZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTAxLTA1ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQ3VzdG9tIHdyaXR0ZW4gQ1NTIGxleGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB0b2tlbml6ZXIuY3BwIGZyb20gaW50ZXJt
ZWRpYXRlIHNvdXJjZXMuCisKKyAgICAgICAgKiB3c2NyaXB0OgorCiAyMDEyLTAxLTA5ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBbQUNd
IFNpbXBsaWZ5IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGJ1aWxkIG9wdGlvbnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKaW5kZXggMmIwZjEyNC4uNWQxMTk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTIzMjAsMTcgKzIzMjAsNiBAQCBBRERfQ1VTVE9NX0NPTU1BTkQoCiBMSVNUKEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0hUTUxFbnRpdHlUYWJs
ZS5jcHApCiAKIAotIyBHZW5lcmF0ZSB0b2tlbml6ZXIKLUZJTEUoVE9fTkFUSVZFX1BBVEggJHtQ
RVJMX0VYRUNVVEFCTEV9IFBFUkxfRVhFQ1VUQUJMRV9OQVRJVkVfUEFUSCkKLUFERF9DVVNUT01f
Q09NTUFORCgKLSAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L3Rva2Vu
aXplci5jcHAKLSAgICBNQUlOX0RFUEVOREVOQ1kgJHtXRUJDT1JFX0RJUn0vY3NzL21ha2V0b2tl
bml6ZXIKLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2Nzcy90b2tlbml6ZXIuZmxleAotICAg
IENPTU1BTkQgJHtGTEVYX0VYRUNVVEFCTEV9IC10ICR7V0VCQ09SRV9ESVJ9L2Nzcy90b2tlbml6
ZXIuZmxleCB8ICR7UEVSTF9FWEVDVVRBQkxFX05BVElWRV9QQVRIfSAke1dFQkNPUkVfRElSfS9j
c3MvbWFrZXRva2VuaXplciA+ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS90b2tlbml6
ZXIuY3BwCi0gICAgVkVSQkFUSU0pCi1BRERfU09VUkNFX1dFQkNPUkVfREVSSVZFRF9ERVBFTkRF
TkNJRVMoJHtXRUJDT1JFX0RJUn0vY3NzL0NTU1BhcnNlci5jcHAgdG9rZW5pemVyLmNwcCkKLQot
CiAjIFJlcGxhY2UgIjsiIHdpdGggInNwYWNlIiBpbiBvcmRlciB0byByZWNvZ25pemUgZmVhdHVy
ZSBkZWZpbml0aW9uIGluIGNzcyBmaWxlcy4KIFNFVChGRUFUVVJFX0RFRklORVNfV0lUSF9TUEFD
RV9TRVBBUkFUT1IgIiIpCiBGT1JFQUNIKF9mZWF0dXJlICR7RkVBVFVSRV9ERUZJTkVTfSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCAwMTU5Y2I5Li43NGQ2OGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcgQEAK
KzIwMTItMDEtMDUgIFpvbHRhbiBIZXJjemVnICA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKworICAg
ICAgICBDdXN0b20gd3JpdHRlbiBDU1MgbGV4ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXBsYWNlcyB0aGUgZmxleCBiYXNlZCBD
U1MgbGV4ZXIgdG8gYQorICAgICAgICBuZXcsIGN1dG9tIHdyaXR0ZW4gQ1NTIGxleGVyLiBUaGUg
bmV3IGNvZGUgaXMgbW9yZQorICAgICAgICB0aGFuIDIgdGltZXMgZmFzdGVyLiBUaGUgY29kZSBz
dHJ1Y3R1cmUgaXMgcXVpdGUKKyAgICAgICAgc3RyYWlnaHRmb3J3YXJkOiBpdCBzZWxlY3RzIHRo
ZSBwb3NzaWJsZSB0b2tlbnMgYnkKKyAgICAgICAgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgZW1w
bG95IHV0aWxpdGllcyB0byBwYXJzZQorICAgICAgICB0aGUgbW9yZSB0aGFuIG9uZSBjaGFyYWN0
ZXIgbG9uZyBvbmVzLgorCisgICAgICAgIEFsbCBidWlsZCBzeXN0ZW1zIHVwZGF0ZWQuCisKKyAg
ICAgICAgRXhpc3RpbmcgdGVzdHMgY292ZXIgdGhpcyBmZWF0dXJlLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBE
ZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoK
KyAgICAgICAgKiBXZWJDb3JlLmd5cC9zY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5OiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjps
b3dlcmNhc2VDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNDYXNlbGVzc0VxdWFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Q1NTUGFyc2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6c2V0dXBQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTaW1w
bGVMZW5ndGhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjptaWdodEJlUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptaWdodEJl
UkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTaGFkb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNCb3JkZXJJbWFnZVJlcGVhdEtleXdvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Qm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dDo6Y29tbWl0Qm9yZGVySW1hZ2VTbGljZSk6
CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJbWFnZVF1YWRQYXJzZUNvbnRleHQ6OmNvbW1pdEJv
cmRlckltYWdlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJJbmZvRm9yTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjppc0NTU0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjppc0NTU0Vz
Y2FwZSk6CisgICAgICAgIChXZWJDb3JlOjppc1VSSUxldHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojppc0lkZW50aWZpZXJTdGFydEFmdGVyRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0Vz
Y2FwZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwV2hpdGVTcGFjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjppc0lkZW50aWZpZXJTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNoZWNrU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFy
c2VFc2NhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUlkZW50aWZpZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVVJJKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VVbmljb2RlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZU50aENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VOdGhDaGlsZEV4
dHJhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0RnVuY3Rpb25Ub2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmRldGVjdE1lZGlhUXVlcnlUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmRldGVjdE51bWJlclRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0RGFzaFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OmxleCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RTdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6bWFya1Byb3BlcnR5RW5kKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnRva2VuKToKKyAgICAgICAgKiBjc3MvdG9rZW5pemVy
LmZsZXg6IFJlbW92ZWQuCisKIDIwMTItMDEtMTEgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFNob3VsZFNraXBUeXBlSW5IZWFkZXIoKSBhbmQgU2hvdWxk
U2tpcFR5cGVJbkltcGxlbWVudGF0aW9uKCkgc2hvdWxkIGJlIHRoZSBzYW1lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQppbmRleCBmNzVhODkwLi45MTQ4M2UwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UKQEAgLTYxMiw3ICs2MTIsNiBAQCBhbGwgOiBcCiAgICAgTWF0aE1MRWxl
bWVudEZhY3RvcnkuY3BwIFwKICAgICBNYXRoTUxOYW1lcy5jcHAgXAogICAgIFhQYXRoR3JhbW1h
ci5jcHAgXAotICAgIHRva2VuaXplci5jcHAgXAogIwogCiAjIC0tLS0tLS0tCkBAIC03MDksMTMg
KzcwOCw2IEBAIENvbG9yRGF0YS5jcHAgOiBwbGF0Zm9ybS9Db2xvckRhdGEuZ3BlcmYgJChXZWJD
b3JlKS9tYWtlLWhhc2gtdG9vbHMucGwKIAogIyAtLS0tLS0tLQogCi0jIENTUyB0b2tlbml6ZXIK
LQotdG9rZW5pemVyLmNwcCA6IGNzcy90b2tlbml6ZXIuZmxleCBjc3MvbWFrZXRva2VuaXplcgot
CWZsZXggLXQgJDwgfCBwZXJsICQoV2ViQ29yZSkvY3NzL21ha2V0b2tlbml6ZXIgPiAkQAotCi0j
IC0tLS0tLS0tCi0KICMgQ1NTIGdyYW1tYXIKICMgTk9URTogT2xkZXIgdmVyc2lvbnMgb2YgYmlz
b24gZG8gbm90IGluamVjdCBhbiBpbmNsdXNpb24gZ3VhcmQsIHNvIHdlIGFkZCBvbmUuCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLnByaQppbmRleCAwMzM1YjM4Li41NTE4MGQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMucHJpCkBAIC0yNiw4ICsyNiw2IEBAIFNWR19OQU1FUyA9ICQkUFdEL3N2
Zy9zdmd0YWdzLmluCiAKIFhMSU5LX05BTUVTID0gJCRQV0Qvc3ZnL3hsaW5rYXR0cnMuaW4KIAot
VE9LRU5JWkVSID0gJCRQV0QvY3NzL3Rva2VuaXplci5mbGV4Ci0KIENTU0JJU09OID0gJCRQV0Qv
Y3NzL0NTU0dyYW1tYXIueQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFNMVD0xKSB7CkBA
IC03NTUsMTUgKzc1Myw2IEBAIGFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdC5jb21tYW5kcyA9
IHBlcmwgJCRQV0QvaW5zcGVjdG9yL3h4ZC5wbCBWOEFycmF5QnVmZmVyCiBhcnJheUJ1ZmZlclZp
ZXdDdXN0b21TY3JpcHQuYWRkX291dHB1dF90b19zb3VyY2VzID0gZmFsc2UKIEdFTkVSQVRPUlMg
Kz0gYXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2NyaXB0CiAKLSMgR0VORVJBVE9SIDM6IHRva2VuaXpl
ciAoZmxleCkKLXRva2VuaXplci5vdXRwdXQgPSAke1FNQUtFX0ZJTEVfQkFTRX0uY3BwCi10b2tl
bml6ZXIuaW5wdXQgPSBUT0tFTklaRVIKLXRva2VuaXplci5zY3JpcHQgPSAkJFBXRC9jc3MvbWFr
ZXRva2VuaXplcgotdG9rZW5pemVyLmNvbW1hbmRzID0gZmxleCAtdCA8ICR7UU1BS0VfRklMRV9O
QU1FfSB8IHBlcmwgJCR0b2tlbml6ZXIuc2NyaXB0ID4gJHtRTUFLRV9GSUxFX09VVH0KLSMgdG9r
ZW5pemVyLmNwcCBpcyBpbmNsdWRlZCBpbnRvIENTU1BhcnNlci5jcHAKLXRva2VuaXplci5hZGRf
b3V0cHV0X3RvX3NvdXJjZXMgPSBmYWxzZQotR0VORVJBVE9SUyArPSB0b2tlbml6ZXIKLQogIyBH
RU5FUkFUT1IgNDogQ1NTIGdyYW1tYXIKIGNzc2Jpc29uLm91dHB1dCA9ICR7UU1BS0VfRklMRV9C
QVNFfS5jcHAKIGNzc2Jpc29uLmlucHV0ID0gQ1NTQklTT04KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5k
ZXggMDk0M2U3MC4uZWEyNDMwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTYzMCwxMCArNjMw
LDYgQEAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9IVE1MRW50aXR5VGFibGUuY3BwOiAkKFdlYkNv
cmUpL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlOYW0KIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQ29s
b3JEYXRhLmNwcDogJChXZWJDb3JlKS9wbGF0Zm9ybS9Db2xvckRhdGEuZ3BlcmYgJChXZWJDb3Jl
KS9tYWtlLWhhc2gtdG9vbHMucGwKIAkkKFBFUkwpICQoV2ViQ29yZSkvbWFrZS1oYXNoLXRvb2xz
LnBsICQoR0VOU09VUkNFU19XRUJDT1JFKSAkKFdlYkNvcmUpL3BsYXRmb3JtL0NvbG9yRGF0YS5n
cGVyZgogCi0jIENTUyB0b2tlbml6ZXIKLURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvdG9rZW5pemVy
LmNwcCA6ICQoV2ViQ29yZSkvY3NzL3Rva2VuaXplci5mbGV4ICQoV2ViQ29yZSkvY3NzL21ha2V0
b2tlbml6ZXIKLQkkKEFNX1ZfR0VOKSQoRkxFWCkgLXQgJDwgfCAkKFBFUkwpICQoV2ViQ29yZSkv
Y3NzL21ha2V0b2tlbml6ZXIgPiAkQAotCiAjIENTUyBncmFtbWFyCiAKICMgTk9URTogb2xkZXIg
dmVyc2lvbnMgb2YgYmlzb24gZG8gbm90IGluamVjdCBhbiBpbmNsdXNpb24gZ3VhcmQsIHNvIHdl
IGRvIGl0CkBAIC05MTksNyArOTE1LDYgQEAgRVhUUkFfRElTVCArPSBcCiAJU291cmNlL1dlYkNv
cmUvY3NzL3N2Zy5jc3MgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQcm9wZXJ0eU5hbWVz
LmluIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTVmFsdWVLZXl3b3Jkcy5pbiBcCi0JU291
cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mvdmll
dy1zb3VyY2UuY3NzIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Rm9udEZhbWlseU5hbWVz
LmluIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRGYWN0b3J5LmluIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCmluZGV4IDU1YmEyMjIuLjY0MDljZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQpAQCAtMSw2ICsxLDMgQEAKLXdlYmNvcmVfYnVpbHRfbm9zb3VyY2VzICs9
IFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL3Rva2VuaXplci5jcHAKLQogd2ViY29yZV9idWls
dF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0NTU0dyYW1tYXIuY3BwIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0NTU0dyYW1tYXIuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDVkMmI5NWMuLjI3MjUzNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC05MDksMjMgKzkwOSw2IEBACiAgICAgICAgICAg
XSwKICAgICAgICAgfSwKICAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICd0b2tl
bml6ZXInLAotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vY3NzL21ha2V0
b2tlbml6ZXInLAotICAgICAgICAgICAgJy4uL2Nzcy90b2tlbml6ZXIuZmxleCcsCi0gICAgICAg
ICAgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJraXQvdG9rZW5pemVyLmNwcCcsCi0gICAgICAgICAgXSwKLSAgICAg
ICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgJ3B5dGhvbicsCi0gICAgICAgICAgICAnc2Ny
aXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5weScsCi0gICAgICAgICAgICAnPEAoX291dHB1dHMp
JywKLSAgICAgICAgICAgICctLScsCi0gICAgICAgICAgICAnPEAoX2lucHV0cyknCi0gICAgICAg
ICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewogICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdk
ZXJpdmVkX3NvdXJjZXNfYWxsX2luX29uZScsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKICAgICAg
ICAgICAgICdzY3JpcHRzL2FjdGlvbl9kZXJpdmVkc291cmNlc2FsbGlub25lLnB5JywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0b2tl
bml6ZXIucHkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9zY3JpcHRzL2FjdGlvbl9tYWtl
dG9rZW5pemVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGEyOGVlLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0
b2tlbml6ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotIyEvdXNyL2Jpbi9w
eXRob24KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jIAotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRp
c3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0j
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyB1c2FnZTogYWN0aW9uX21ha2V0b2tl
bml6ZXIucHkgT1VUUFVUUyAtLSBJTlBVVFMKLSMKLSMgTXVsdGlwbGUgSU5QVVRTIG1heSBiZSBs
aXN0ZWQuIFRoZSBzZWN0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IC0tIGFyZ3VtZW50cy4KLSMKLSMg
T1VUUFVUUyBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgaXRlbTogYSBwYXRoIHRvIHRva2VuaXplci5j
cHAuCi0jCi0jIElOUFVUUyBtdXN0IGNvbnRhaW4gZXhhY3RseSB0d28gaXRlbXMuIFRoZSBmaXJz
dCBpdGVtIG11c3QgYmUgdGhlIHBhdGggdG8KLSMgbWFrZXRva2VuaXplci4gVGhlIHNlY29uZCBp
dGVtIG11c3QgYmUgdGhlIHBhdGggdG8gdG9rZW5pemVyLmZsZXguCi0KLQotaW1wb3J0IG9zCi1p
bXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotCi0KLWRlZiBTcGxpdEFyZ3NJbnRvU2VjdGlv
bnMoYXJncyk6Ci0gICAgc2VjdGlvbnMgPSBbXQotICAgIHdoaWxlIGxlbihhcmdzKSA+IDA6Ci0g
ICAgICAgIGlmIG5vdCAnLS0nIGluIGFyZ3M6Ci0gICAgICAgICAgICAjIElmIHRoZXJlIGlzIG5v
ICctLScgbGVmdCwgZXZlcnl0aGluZyByZW1haW5pbmcgaXMgYW4gZW50aXJlIHNlY3Rpb24uCi0g
ICAgICAgICAgICBkYXNoZXMgPSBsZW4oYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IGRhc2hlcyA9IGFyZ3MuaW5kZXgoJy0tJykKLQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoYXJn
c1s6ZGFzaGVzXSkKLQotICAgICAgICAjIE5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLCBsb29r
IGF0IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhpcyAnLS0nLgotICAgICAgICBpZiBkYXNoZXMgKyAxID09
IGxlbihhcmdzKToKLSAgICAgICAgICAgICMgSWYgdGhlICctLScgaXMgYXQgdGhlIGVuZCBvZiB0
aGUgbGlzdCwgd2Ugd29uJ3QgY29tZSBiYWNrIHRocm91Z2ggdGhlCi0gICAgICAgICAgICAjIGxv
b3AgYWdhaW4uIEFkZCBhbiBlbXB0eSBzZWN0aW9uIG5vdyBjb3JyZXNwb25kaW5nIHRvIHRoZSBu
b3RoaW5nbmVzcwotICAgICAgICAgICAgIyBmb2xsb3dpbmcgdGhlIGZpbmFsICctLScuCi0gICAg
ICAgICAgICBhcmdzID0gW10KLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChhcmdzKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgYXJncyA9IGFyZ3NbZGFzaGVzICsgMTpdCi0KLSAgICBy
ZXR1cm4gc2VjdGlvbnMKLQotCi1kZWYgbWFpbihhcmdzKToKLSAgICBzZWN0aW9ucyA9IFNwbGl0
QXJnc0ludG9TZWN0aW9ucyhhcmdzWzE6XSkKLSAgICBhc3NlcnQgbGVuKHNlY3Rpb25zKSA9PSAy
Ci0gICAgKG91dHB1dHMsIGlucHV0cykgPSBzZWN0aW9ucwotCi0gICAgYXNzZXJ0IGxlbihvdXRw
dXRzKSA9PSAxCi0gICAgb3V0cHV0ID0gb3V0cHV0c1swXQotCi0gICAgYXNzZXJ0IGxlbihpbnB1
dHMpID09IDIKLSAgICBtYWtldG9rZW5pemVyID0gaW5wdXRzWzBdCi0gICAgZmxleElucHV0ID0g
aW5wdXRzWzFdCi0KLSAgICAjIERvIGl0LiBjaGVja19jYWxsIGlzIG5ldyBpbiAyLjUsIHNvIHNp
bXVsYXRlIGl0cyBiZWhhdmlvciB3aXRoIGNhbGwgYW5kCi0gICAgIyBhc3NlcnQuCi0gICAgb3V0
ZmlsZSA9IG9wZW4ob3V0cHV0LCAnd2InKQotICAgIHAxID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2Zs
ZXgnLCAnLXQnLCBmbGV4SW5wdXRdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgIHAyID0g
c3VicHJvY2Vzcy5Qb3BlbihbJ3BlcmwnLCBtYWtldG9rZW5pemVyXSwgc3RkaW49cDEuc3Rkb3V0
LCBzdGRvdXQ9b3V0ZmlsZSkKLQotICAgIHIxID0gcDEud2FpdCgpCi0gICAgcjIgPSBwMi53YWl0
KCkKLSAgICBhc3NlcnQgcjEgPT0gMAotICAgIGFzc2VydCByMiA9PSAwCi0KLSAgICByZXR1cm4g
MAotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lzLmV4aXQobWFpbihzeXMu
YXJndikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMGViNTI0OC4uZjQ4YTViYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtODI5NSw3ICs4Mjk1LDYgQEAKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL1hNTFZpZXdlckpTLmgnLAogICAgICAgICAgICAgJzwoUFJP
RFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvWFBhdGhHcmFtbWFyLmNwcCcsCiAgICAg
ICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YUGF0aEdyYW1t
YXIuaCcsCi0gICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS90b2tlbml6ZXIuY3BwJywKICAgICAgICAgXSwKICAgICAgICAgJ2V4cG9ydF9maWxlX2dlbmVy
YXRvcl9maWxlcyc6IFsKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJDb3JlL0V4cG9ydEZpbGVHZW5lcmF0b3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYTM4YjJkMy4uMGU4MzQ4ZiAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTM1MzgyLDEw
ICszNTM4Miw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGNzc1x0b2tlbml6ZXIuZmxleCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU0ZpbHRlclZhbHVlLmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYmMzZDc3YS4uNzhjOTdlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODk1Myw3ICs4OTUzLDYg
QEAKIAkJNjU2NTgxNDQwOUQxMzA0MzAwMEU2MUQ3IC8qIENTU0dyYW1tYXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0dyYW1tYXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NTY1ODE0NzA5RDEzMDQzMDAwRTYxRDcgLyogQ1NTVmFsdWVL
ZXl3b3Jkcy5ncGVyZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ1NTVmFsdWVLZXl3b3Jkcy5n
cGVyZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2NTgxNDgwOUQxMzA0MzAwMEU2
MUQ3IC8qIENTU1ZhbHVlS2V5d29yZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU1ZhbHVlS2V5d29yZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjU2
NTgxNEMwOUQxMzA0MzAwMEU2MUQ3IC8qIHRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gdG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjU2NTgxQUMwOUQxNEVFNjAwMEU2MUQ3IC8qIENoYXJzZXREYXRhLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGFyc2V0RGF0YS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MUFFMDlEMTRFRTYwMDBFNjFENyAvKiBVc2Vy
QWdlbnRTdHlsZVNoZWV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNl
ckFnZW50U3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2NTgx
QUYwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckFnZW50U3R5bGVTaGVldHNEYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNDYyLDcgKzEwNDYxLDYgQEAK
IAkJOTNDQTRDOUQwOURGOTNGQTAwREY4Njc3IC8qIG1ha2V2YWx1ZXMucGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gbWFrZXZhbHVlcy5wbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNDQTRDOUYwOURGOTNGQTAwREY4Njc3IC8qIHF1aXJrcy5jc3MgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gcXVpcmtzLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDQTRDQTIw
OURGOTNGQTAwREY4Njc3IC8qIHN2Zy5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gc3ZnLmNz
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNDQTRDQTMwOURGOTNGQTAwREY4Njc3
IC8qIHRva2VuaXplci5mbGV4ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IHRva2VuaXplci5mbGV4
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NDRjAyNjBBRjZDNTI5MDAwMThFODkg
LyogTmF2aWdhdGlvbkFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YXZpZ2F0aW9uQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0NGMDVG
MEFGNkNBNzYwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRpb25BY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0QzQzE1ODBGOTdBOUQ3MDA1M0MwMTMgLyogRE9NSFRNTENhbnZh
c0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTENhbnZh
c0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDUwLDcgKzE1NDQ4
LDYgQEAKIAkJCQk2NTY1ODFFNzA5RDE1MDhEMDAwRTYxRDcgLyogU1ZHRWxlbWVudEZhY3Rvcnku
aCAqLywKIAkJCQk2NTY1ODFFODA5RDE1MDhEMDAwRTYxRDcgLyogU1ZHTmFtZXMuY3BwICovLAog
CQkJCTY1NjU4MUU5MDlEMTUwOEQwMDBFNjFENyAvKiBTVkdOYW1lcy5oICovLAotCQkJCTY1NjU4
MTRDMDlEMTMwNDMwMDBFNjFENyAvKiB0b2tlbml6ZXIuY3BwICovLAogCQkJCTY1NjU4MUFFMDlE
MTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oICovLAogCQkJCTY1NjU4MUFG
MDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICovLAogCQkJ
CTFBMTQxNEIzMTNBMEYwNTAwMDE5OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5TmFtZXMuY3BwICov
LApAQCAtMjA5MjUsNyArMjA5MjIsNiBAQAogCQkJCUIyMjI3QjAyMEQwMEJGRjEwMDcxQjc4MiAv
KiBTVkdDU1NQcm9wZXJ0eU5hbWVzLmluICovLAogCQkJCUIyMjI3QjAzMEQwMEJGRjEwMDcxQjc4
MiAvKiBTVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCAqLywKIAkJCQlCMjIyN0IwNDBEMDBCRkYxMDA3
MUI3ODIgLyogU1ZHQ1NTVmFsdWVLZXl3b3Jkcy5pbiAqLywKLQkJCQk5M0NBNENBMzA5REY5M0ZB
MDBERjg2NzcgLyogdG9rZW5pemVyLmZsZXggKi8sCiAJCQkJQkM1RUMxNzYwQTUwN0UzRTAwNjAw
N0Y1IC8qIHZpZXctc291cmNlLmNzcyAqLywKIAkJCQkzMTA2MDM2QzE0MzI3RDJFMDBBQkY0QkEg
LyogV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwICovLAogCQkJCTMxMDYwMzZEMTQzMjdEMkUwMEFC
RjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAppbmRleCA3YzhiZDFiLi5hZjlkN2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAt
MTc3LDggKzE3NywyNCBAQCBpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmVuc3VyZUNTU1ZhbHVlUG9v
bCgpCiAgICAgICAgIG1fY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpjcmVhdGUoKTsKIH0K
IAorc3RhdGljIGlubGluZSBVQ2hhciBsb3dlcmNhc2VDaGFyYWN0ZXIoVUNoYXIgY2hyKQorewor
ICAgIC8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmluZyBhbnkgaW5wdXQg
Y2hhcmFjdGVyCisgICAgLy8gdG8gYSBsb3dlcmNhc2UgRW5nbGlzaCBjaGFyYWN0ZXIuIFRoZSBp
c0Nhc2VsZXNzRXF1YWwgYmVsb3cKKyAgICAvLyBzaG91bGQgYmUgdXNlZCBmb3IgcmVndWxhciBj
b21wYXJpc29uLCBidXQgc3dpdGNoIHN0YXRlbWVudHMKKyAgICAvLyByZXF1aXJlIGRpcmVjdCB1
c2Ugb2YgdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gY2hyIHwgMHgyMDsKK30KKworc3RhdGlj
IGlubGluZSBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciBjc3NDaGFyYWN0ZXIsIFVDaGFyIGNo
YXJhY3RlcikKK3sKKyAgICAvLyBUaGlzIGlzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24sIHRoaXMg
aW5zdGFuY2UgY2hlY2tzIGNoYXJhY3RlcnMuCisgICAgQVNTRVJUKGNoYXJhY3RlciA+PSAnYScg
JiYgY2hhcmFjdGVyIDw9ICd6Jyk7CisgICAgcmV0dXJuIExJS0VMWShsb3dlcmNhc2VDaGFyYWN0
ZXIoY3NzQ2hhcmFjdGVyKSA9PSBjaGFyYWN0ZXIpOworfQorCiAvLyBGSVhNRTogQ2FuIG1fcGFy
c2VkUHJvcGVydGllcyBqdXN0IGJlIGEgVmVjdG9yPwotICAgIAorCiBDU1NQYXJzZXI6OkNTU1Bh
cnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgOiBtX3N0cmljdChzdHJpY3RQYXJzaW5nKQog
ICAgICwgbV9pbXBvcnRhbnQoZmFsc2UpCkBAIC0yMDAsNyArMjE2LDkgQEAgQ1NTUGFyc2VyOjpD
U1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5nKQogICAgICwgbV9wcm9wZXJ0eVJhbmdlKFVJTlRf
TUFYLCBVSU5UX01BWCkKICAgICAsIG1fcnVsZVJhbmdlTWFwKDApCiAgICAgLCBtX2N1cnJlbnRS
dWxlRGF0YSgwKQotICAgICwgeXlfc3RhcnQoMSkKKyAgICAsIG1fcGFyc2luZ01vZGUoTm9ybWFs
TW9kZSkKKyAgICAsIG1fZGF0YSgwKQorICAgICwgbV90b2tlbigwKQogICAgICwgbV9saW5lTnVt
YmVyKDApCiAgICAgLCBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIoMCkKICAgICAsIG1fYWxsb3dJ
bXBvcnRSdWxlcyh0cnVlKQpAQCAtMjQyLDI3ICsyNjAsMjIgQEAgdm9pZCBDU1NQYXJzZXJTdHJp
bmc6Omxvd2VyKCkKIAogdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIHBy
ZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIqIHN1ZmZpeCkKIHsKLSAgICBp
bnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpICsgc3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3Vm
Zml4KSArIDI7CisgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSArIHN0cmxlbihwcmVm
aXgpICsgc3RybGVuKHN1ZmZpeCkgKyAxOwogCi0gICAgbV9kYXRhID0gYWRvcHRBcnJheVB0cihu
ZXcgVUNoYXJbbGVuZ3RoXSk7CisgICAgbV9kYXRhU3RhcnQgPSBhZG9wdEFycmF5UHRyKG5ldyBV
Q2hhcltsZW5ndGhdKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RybGVuKHByZWZp
eCk7IGkrKykKLSAgICAgICAgbV9kYXRhW2ldID0gcHJlZml4W2ldOworICAgICAgICBtX2RhdGFT
dGFydFtpXSA9IHByZWZpeFtpXTsKIAotICAgIG1lbWNweShtX2RhdGEuZ2V0KCkgKyBzdHJsZW4o
cHJlZml4KSwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVD
aGFyKSk7CisgICAgbWVtY3B5KG1fZGF0YVN0YXJ0LmdldCgpICsgc3RybGVuKHByZWZpeCksIHN0
cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOwogCiAg
ICAgdW5zaWduZWQgc3RhcnQgPSBzdHJsZW4ocHJlZml4KSArIHN0cmluZy5sZW5ndGgoKTsKICAg
ICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN0cmxlbihzdWZmaXgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0gICAgICAgIG1fZGF0YVtpXSA9IHN1ZmZpeFtp
IC0gc3RhcnRdOworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHN1ZmZpeFtpIC0gc3RhcnRdOwog
Ci0gICAgbV9kYXRhW2xlbmd0aCAtIDFdID0gMDsKLSAgICBtX2RhdGFbbGVuZ3RoIC0gMl0gPSAw
OworICAgIG1fZGF0YVN0YXJ0W2xlbmd0aCAtIDFdID0gMDsKIAotICAgIHl5X2hvbGRfY2hhciA9
IDA7Ci0gICAgeXlsZW5nID0gMDsKLSAgICB5eXRleHQgPSBtX2RhdGEuZ2V0KCk7Ci0gICAgeXlf
Y19idWZfcCA9IHl5dGV4dDsKLSAgICB5eV9ob2xkX2NoYXIgPSAqeXlfY19idWZfcDsKKyAgICBt
X2RhdGEgPSBtX3Rva2VuU3RhcnQgPSBtX2RhdGFTdGFydC5nZXQoKTsKICAgICByZXNldFJ1bGVC
b2R5TWFya3MoKTsKIH0KIApAQCAtNDIyLDcgKzQzNSw3IEBAIHN0YXRpYyBib29sIHBhcnNlU2lt
cGxlTGVuZ3RoVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBp
bnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyB1bml0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7Ci0gICAgaWYgKGxlbmd0
aCA+IDIgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMl0gfCAweDIwKSA9PSAncCcgJiYgKGNoYXJh
Y3RlcnNbbGVuZ3RoIC0gMV0gfCAweDIwKSA9PSAneCcpIHsKKyAgICBpZiAobGVuZ3RoID4gMiAm
JiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1tsZW5ndGggLSAyXSwgJ3AnKSAmJiBpc0Nhc2Vs
ZXNzRXF1YWwoY2hhcmFjdGVyc1tsZW5ndGggLSAxXSwgJ3gnKSkgewogICAgICAgICBsZW5ndGgg
LT0gMjsKICAgICAgICAgdW5pdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg7CiAgICAgfSBl
bHNlIGlmIChsZW5ndGggPiAxICYmIGNoYXJhY3RlcnNbbGVuZ3RoIC0gMV0gPT0gJyUnKSB7CkBA
IC00Nzc0LDEwICs0Nzg3LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCQShjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIGlmIChsZW5ndGggPCA1
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGNoYXJhY3RlcnNbNF0gPT0gJygn
Ci0gICAgICAgICYmIChjaGFyYWN0ZXJzWzBdIHwgMHgyMCkgPT0gJ3InCi0gICAgICAgICYmIChj
aGFyYWN0ZXJzWzFdIHwgMHgyMCkgPT0gJ2cnCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzJdIHwg
MHgyMCkgPT0gJ2InCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzNdIHwgMHgyMCkgPT0gJ2EnOwor
ICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1swXSwgJ3InKQorICAgICAgICAm
JiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwgJ2cnKQorICAgICAgICAmJiBpc0Nhc2Vs
ZXNzRXF1YWwoY2hhcmFjdGVyc1syXSwgJ2InKQorICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwo
Y2hhcmFjdGVyc1szXSwgJ2EnKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0Io
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTQ3ODUsOSArNDc5
OCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgaWYgKGxlbmd0aCA8IDQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gY2hhcmFjdGVyc1szXSA9PSAnKCcKLSAgICAgICAgJiYgKGNo
YXJhY3RlcnNbMF0gfCAweDIwKSA9PSAncicKLSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMV0gfCAw
eDIwKSA9PSAnZycKLSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMl0gfCAweDIwKSA9PSAnYic7Cisg
ICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAncicpCisgICAgICAgICYm
IGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzFdLCAnZycpCisgICAgICAgICYmIGlzQ2FzZWxl
c3NFcXVhbChjaGFyYWN0ZXJzWzJdLCAnYicpOwogfQogCiBib29sIENTU1BhcnNlcjo6ZmFzdFBh
cnNlQ29sb3IoUkdCQTMyJiByZ2IsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzdHJpY3QpCkBA
IC03MjI3LDIzNiArNzI0MCwxMjAyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGZWF0dXJl
U2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMg
aW5saW5lIGludCB5eWVycm9yKGNvbnN0IGNoYXIqKSB7IHJldHVybiAxOyB9Ci0KICNkZWZpbmUg
RU5EX1RPS0VOIDAKIAogI2luY2x1ZGUgIkNTU0dyYW1tYXIuaCIKIAorZW51bSBDaGFyYWN0ZXJU
eXBlIHsKKyAgICAvLyBUeXBlcyBmb3IgdGhlIG1haW4gc3dpdGNoLgorCisgICAgLy8gVGhlIGZp
cnN0IDQgdHlwZXMgbXVzdCBiZSBncm91cGVkIHRvZ2V0aGVyLCBhcyB0aGV5CisgICAgLy8gcmVw
cmVzZW50IHRoZSBhbGxvd2VkIGNoYXJzIGluIGFuIGlkZW50aWZpZXIuCisgICAgQ2hhcmFjdGVy
Q2FzZWxlc3NVLAorICAgIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKyAgICBDaGFyYWN0ZXJO
dW1iZXIsCisgICAgQ2hhcmFjdGVyRGFzaCwKKworICAgIENoYXJhY3Rlck90aGVyLAorICAgIENo
YXJhY3RlcldoaXRlU3BhY2UsCisgICAgQ2hhcmFjdGVyRW5kTWVkaWFRdWVyeSwKKyAgICBDaGFy
YWN0ZXJFbmROdGhDaGlsZCwKKyAgICBDaGFyYWN0ZXJRdW90ZSwKKyAgICBDaGFyYWN0ZXJFeGNs
YW1hdGlvbk1hcmssCisgICAgQ2hhcmFjdGVySGFzaG1hcmssCisgICAgQ2hhcmFjdGVyRG9sbGFy
LAorICAgIENoYXJhY3RlckFzdGVyaXNrLAorICAgIENoYXJhY3RlclBsdXMsCisgICAgQ2hhcmFj
dGVyRG90LAorICAgIENoYXJhY3RlclNsYXNoLAorICAgIENoYXJhY3Rlckxlc3MsCisgICAgQ2hh
cmFjdGVyQXQsCisgICAgQ2hhcmFjdGVyQmFja1NsYXNoLAorICAgIENoYXJhY3RlclhvciwKKyAg
ICBDaGFyYWN0ZXJWZXJ0aWNhbEJhciwKKyAgICBDaGFyYWN0ZXJUaWxkZSwKK307CisKKy8vIDEy
OCBBU0NJSSBjb2Rlcworc3RhdGljIGNvbnN0IENoYXJhY3RlclR5cGUgdHlwZXNPZkFTQ0lJQ2hh
cmFjdGVyc1sxMjhdID0geworLyogICAwIC0gTnVsbCAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ck90aGVyLAorLyogICAxIC0gU3RhcnQgb2YgSGVhZGluZyAgICovIENoYXJhY3Rlck90aGVyLAor
LyogICAyIC0gU3RhcnQgb2YgVGV4dCAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICAzIC0g
RW5kIG9mIFRleHQgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA0IC0gRW5kIG9mIFRy
YW5zbS4gICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA1IC0gRW5xdWlyeSAgICAgICAgICAg
ICovIENoYXJhY3Rlck90aGVyLAorLyogICA2IC0gQWNrbm93bGVkZ21lbnQgICAgICovIENoYXJh
Y3Rlck90aGVyLAorLyogICA3IC0gQmVsbCAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVy
LAorLyogICA4IC0gQmFjayBTcGFjZSAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA5
IC0gSG9yaXpvbnRhbCBUYWIgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAgMTAgLSBM
aW5lIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAxMSAtIFZlcnRp
Y2FsIFRhYiAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxMiAtIEZvcm0gRmVlZCAgICAg
ICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDEzIC0gQ2FycmlhZ2UgUmV0dXJuICAg
ICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAgMTQgLSBTaGlmdCBPdXQgICAgICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgMTUgLSBTaGlmdCBJbiAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgMTYgLSBEYXRhIExpbmUgRXNjYXBlICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgMTcgLSBEZXZpY2UgQ29udHJvbCAxICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTggLSBE
ZXZpY2UgQ29udHJvbCAyICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTkgLSBEZXZpY2UgQ29u
dHJvbCAzICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjAgLSBEZXZpY2UgQ29udHJvbCA0ICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjEgLSBOZWdhdGl2ZSBBY2suICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAgMjIgLSBTeW5jaHJvbm91cyBJZGxlICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgMjMgLSBFbmQgb2YgVHJhbnNtaXQgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjQg
LSBDYW5jZWwgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjUgLSBFbmQgb2Yg
TWVkaXVtICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjYgLSBTdWJzdGl0dXRlICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjcgLSBFc2NhcGUgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCisvKiAgMjggLSBGaWxlIFNlcGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCisvKiAgMjkgLSBHcm91cCBTZXBhcmF0b3IgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAg
MzAgLSBSZWNvcmQgU2VwYXJhdG9yICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzEgLSBVbml0
IFNlcGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzIgLSBTcGFjZSAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAzMyAtICEgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCisvKiAgMzQgLSAiICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyUXVvdGUsCisvKiAgMzUgLSAjICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySGFzaG1hcmssCisvKiAgMzYgLSAkICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
RG9sbGFyLAorLyogIDM3IC0gJSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAor
LyogIDM4IC0gJiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDM5IC0g
JyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclF1b3RlLAorLyogIDQwIC0gKCAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDQxIC0gKSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlckVuZE50aENoaWxkLAorLyogIDQyIC0gKiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlckFzdGVyaXNrLAorLyogIDQzIC0gKyAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlclBsdXMsCisvKiAgNDQgLSAsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgNDUgLSAtICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRGFzaCwKKy8qICA0NiAt
IC4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb3QsCisvKiAgNDcgLSAvICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyU2xhc2gsCisvKiAgNDggLSAwICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDQ5IC0gMSAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3Rlck51bWJlciwKKy8qICA1MCAtIDIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1i
ZXIsCisvKiAgNTEgLSAzICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyog
IDUyIC0gNCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1MyAtIDUg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTQgLSA2ICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU1IC0gNyAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NiAtIDggICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJOdW1iZXIsCisvKiAgNTcgLSA5ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVt
YmVyLAorLyogIDU4IC0gOiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyog
IDU5IC0gOyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVuZE1lZGlhUXVlcnksCisvKiAg
NjAgLSA8ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTGVzcywKKy8qICA2MSAtID0gICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2MiAtID4gICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2MyAtID8gICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKKy8qICA2NCAtIEAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJB
dCwKKy8qICA2NSAtIEEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCisvKiAgNjYgLSBCICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogIDY3IC0gQyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qICA2OCAtIEQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAgNjkgLSBFICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogIDcwIC0gRiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qICA3MSAtIEcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAgNzIgLSBIICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogIDczIC0gSSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qICA3NCAtIEogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAgNzUgLSBLICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogIDc2IC0gTCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qICA3NyAtIE0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAgNzggLSBOICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogIDc5IC0gTyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qICA4MCAtIFAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODEgLSBRICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgyIC0gUiAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MyAtIFMgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODQgLSBUICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg1IC0gVSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlckNhc2VsZXNzVSwKKy8qICA4NiAtIFYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODcgLSBXICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg4IC0gWCAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4OSAtIFkgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTAgLSBaICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDkxIC0gWyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogIDkyIC0gXCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckJh
Y2tTbGFzaCwKKy8qICA5MyAtIF0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwK
Ky8qICA5NCAtIF4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJYb3IsCisvKiAgOTUgLSBf
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDk2IC0g
YCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDk3IC0gYSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5OCAtIGIgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTkgLSBjICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTAwIC0gZCAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwMSAtIGUgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDIgLSBmICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTAzIC0gZyAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwNCAtIGgg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDUgLSBp
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTA2IC0g
aiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwNyAt
IGsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDgg
LSBsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTA5
IC0gbSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEx
MCAtIG4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAx
MTEgLSBvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyog
MTEyIC0gcCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8q
IDExMyAtIHEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisv
KiAxMTQgLSByICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAor
LyogMTE1IC0gcyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
Ky8qIDExNiAtIHQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
CisvKiAxMTcgLSB1ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQ2FzZWxlc3NVLAorLyog
MTE4IC0gdiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8q
IDExOSAtIHcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisv
KiAxMjAgLSB4ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAor
LyogMTIxIC0geSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
Ky8qIDEyMiAtIHogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
CisvKiAxMjMgLSB7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kTWVkaWFRdWVyeSwK
Ky8qIDEyNCAtIHwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJWZXJ0aWNhbEJhciwKKy8q
IDEyNSAtIH0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qIDEyNiAtIH4g
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJUaWxkZSwKKy8qIDEyNyAtIERlbGV0ZSAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKK307CisKKy8vIFV0aWxpdHkgZnVuY3Rpb25zIGZv
ciB0aGUgQ1NTIHRva2VuaXplci4KKworc3RhdGljIGlubGluZSBib29sIGlzQ1NTTGV0dGVyKFVD
aGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49IDEyOCB8fCB0eXBlc09mQVNDSUlDaGFyYWN0
ZXJzW2Nocl0gPD0gQ2hhcmFjdGVyRGFzaDsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQ1NT
RXNjYXBlKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49ICcgJyAmJiBjaHIgIT0gMTI3
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNVUklMZXR0ZXIoVUNoYXIgY2hyKQoreworICAg
IHJldHVybiAoY2hyID49ICcqJyAmJiBjaHIgIT0gMTI3KSB8fCAoY2hyID49ICcjJyAmJiBjaHIg
PD0gJyYnKSB8fCBjaHIgPT0gJyEnOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJZGVudGlm
aWVyU3RhcnRBZnRlckRhc2goVUNoYXIqIGRhdGEpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBo
YShkYXRhWzBdKSB8fCBkYXRhWzBdID09ICdfJyB8fCBkYXRhWzBdID49IDEyOAorICAgICAgICB8
fCAoZGF0YVswXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKGRhdGFbMV0pKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciogY3NzU3RyaW5nLCBjb25zdCBjaGFy
KiBjb25zdGFudFN0cmluZykKK3sKKyAgICAvLyBDb21wYXJlIGFuIFVDaGFyIG1lbW9yeSBkYXRh
IHdpdGggYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLgorICAgIC8vIFRoaXMgaXMgYW4gb3Zlcmxv
YWRlZCBmdW5jdGlvbiwgdGhpcyBpbnN0YW5jZSBjaGVja3Mgc3RyaW5ncy4KKyAgICAvLyBUaGUg
dHdvIGZ1bmN0aW9ucyBjYW5ub3QgYmUgZ3JvdXBlZCB0b2dldGhlciwgc2luY2UgdGhpcyBvbmUg
ZGVwZW5kcworICAgIC8vIG9uIGlzQ1NTTGV0dGVyLCB3aGlsZSB0aGUgb3RoZXIgaXMgdXNlZCBp
biBvdGhlciBwbGFjZXMuCisgICAgZG8geworICAgICAgICAvLyBUaGUgaW5wdXQgbXVzdCBiZSBw
YXJ0IG9mIGFuIGlkZW50aWZpZXIgaWYgY29uc3RhbnRDaGFyIG9yIGNvbnN0U3RyaW5nCisgICAg
ICAgIC8vIGNvbnRhaW5zICctJy4gT3RoZXJ3aXNlIGxvd2VyY2FzZUNoYXJhY3RlcignXHInKSB3
b3VsZCBiZSBlcXVhbCB0byAnLScuCisgICAgICAgIEFTU0VSVCgoKmNvbnN0YW50U3RyaW5nID49
ICdhJyAmJiAqY29uc3RhbnRTdHJpbmcgPD0gJ3onKSB8fCAqY29uc3RhbnRTdHJpbmcgPT0gJy0n
KTsKKyAgICAgICAgQVNTRVJUKCpjb25zdGFudFN0cmluZyAhPSAnLScgfHwgaXNDU1NMZXR0ZXIo
KmNzc1N0cmluZykpOworICAgICAgICBpZiAobG93ZXJjYXNlQ2hhcmFjdGVyKCpjc3NTdHJpbmcr
KykgIT0gKCpjb25zdGFudFN0cmluZysrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9IHdoaWxlICgqY29uc3RhbnRTdHJpbmcpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0
aWMgVUNoYXIqIGNoZWNrRXNjYXBlKFVDaGFyKiBkYXRhKQoreworICAgIEFTU0VSVCgqZGF0YSA9
PSAnXFwnKTsKKworICAgICsrZGF0YTsKKyAgICBpZiAoIWlzQ1NTRXNjYXBlKCpkYXRhKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpkYXRhKSkgeworICAg
ICAgICBpbnQgbGVuZ3RoID0gNjsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICArK2RhdGE7
CisgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqZGF0YSkgJiYgLS1sZW5ndGgpOwor
CisgICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBlc2NhcGUgc2VxdWVuY2UuCisg
ICAgICAgIGlmIChpc0hUTUxTcGFjZSgqZGF0YSkpCisgICAgICAgICAgICArK2RhdGE7CisgICAg
ICAgIHJldHVybiBkYXRhOworICAgIH0KKyAgICByZXR1cm4gZGF0YSArIDE7Cit9CisKK3N0YXRp
YyBpbmxpbmUgVUNoYXIqIHNraXBXaGl0ZVNwYWNlcyhVQ2hhciogZGF0YSkKK3sKKyAgICB3aGls
ZSAoKmRhdGEgPD0gJyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWypkYXRhXSA9PSBDaGFy
YWN0ZXJXaGl0ZVNwYWNlKSkKKyAgICAgICAgKytkYXRhOworICAgIHJldHVybiBkYXRhOworfQor
CisvLyBNYWluIENTUyB0b2tlbml6ZXIgZnVuY3Rpb25zLgorCitpbmxpbmUgYm9vbCBDU1NQYXJz
ZXI6OmlzSWRlbnRpZmllclN0YXJ0KCkKK3sKKyAgICAvLyBDaGVjayB3aGV0aGVyIGFuIGlkZW50
aWZpZXIgaXMgc3RhcnRlZC4KKyAgICByZXR1cm4gaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2go
KCptX2RhdGEgIT0gJy0nKSA/IG1fZGF0YSA6IG1fZGF0YSArIDEpOworfQorCitpbmxpbmUgVUNo
YXIqIENTU1BhcnNlcjo6Y2hlY2tTdHJpbmcoVUNoYXIqIGRhdGEsIFVDaGFyIHF1b3RlKQorewor
ICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXZlcnQgZXNjYXBlIHNlcXVlbmNlcywgc3RyaW5ncwor
ICAgIC8vIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSBwYXJzaW5nLgorICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqZGF0YSA9PSBxdW90ZSkpIHsKKyAgICAgICAgICAg
IC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwuCisgICAgICAgICAgICByZXR1cm4gZGF0
YSArIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKCpkYXRhIDw9ICdccicgJiYg
KCEqZGF0YSB8fCAqZGF0YSA9PSAnXG4nIHx8ICgqZGF0YSB8IDB4MSkgPT0gJ1xyJykpKSB7Cisg
ICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBmYWlsZWQgZm9yIGNoYXJhY3RlciAnXDAn
LCAnXG4nLCAnXGYnIG9yICdccicuCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChMSUtFTFkoZGF0YVswXSAhPSAnXFwnKSkKKyAgICAgICAgICAgICsrZGF0
YTsKKyAgICAgICAgZWxzZSBpZiAoZGF0YVsxXSA9PSAnXG4nIHx8IGRhdGFbMV0gPT0gJ1xmJykK
KyAgICAgICAgICAgIGRhdGEgKz0gMjsKKyAgICAgICAgZWxzZSBpZiAoZGF0YVsxXSA9PSAnXHIn
KQorICAgICAgICAgICAgZGF0YSArPSBkYXRhWzJdID09ICdcbicgPyAzIDogMjsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBkYXRhID0gY2hlY2tFc2NhcGUoZGF0YSk7CisgICAgICAgICAg
ICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZUVzY2FwZShVQ2hhciomIHJlc3VsdCkKK3sKKyAg
ICBBU1NFUlQoKm1fZGF0YSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKG1fZGF0YVsxXSkpOworCisg
ICAgKyttX2RhdGE7CisgICAgaWYgKGlzQVNDSUlIZXhEaWdpdCgqbV9kYXRhKSkgeworICAgICAg
ICB1bnNpZ25lZCB1bmljb2RlID0gMDsKKyAgICAgICAgaW50IGxlbmd0aCA9IDY7CisKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgdW5pY29kZSA9ICh1bmljb2RlIDw8IDQpICsgdG9BU0NJSUhl
eFZhbHVlKCptX2RhdGErKyk7CisgICAgICAgIH0gd2hpbGUgKC0tbGVuZ3RoICYmIGlzQVNDSUlI
ZXhEaWdpdCgqbV9kYXRhKSk7CisKKyAgICAgICAgLy8gQ2hhcmFjdGVycyBhYm92ZSAweGZmZmYg
YXJlIG5vdCBoYW5kbGVkLgorICAgICAgICBpZiAodW5pY29kZSA+IDB4ZmZmZikKKyAgICAgICAg
ICAgIHVuaWNvZGUgPSAweGZmZmQ7CisKKyAgICAgICAgLy8gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIg
dGhlIGVzY2FwZSBzZXF1ZW5jZS4KKyAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCptX2RhdGEpKQor
ICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICpyZXN1bHQgPSB1bmljb2RlOworICAgIH0g
ZWxzZQorICAgICAgICAqcmVzdWx0ID0gKm1fZGF0YSsrOworICAgICsrcmVzdWx0OworfQorCitp
bmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBhcnNlSWRlbnRpZmllcihVQ2hhciomIHJlc3VsdCkKK3sK
KyAgICAvLyBJZiBhIHZhbGlkIGlkZW50aWZpZXIgc3RhcnQgaXMgZm91bmQsIHdlIGNhbiBzYWZl
bHkKKyAgICAvLyBwYXJzZSB0aGUgaWRlbnRpZmllciB1bnRpbCB0aGUgbmV4dCBpbnZhbGlkIGNo
YXJhY3Rlci4KKyAgICBBU1NFUlQoaXNJZGVudGlmaWVyU3RhcnQoKSk7CisgICAgYm9vbCBoYXNF
c2NhcGUgPSBmYWxzZTsKKyAgICBkbyB7CisgICAgICAgIGlmIChMSUtFTFkoKm1fZGF0YSAhPSAn
XFwnKSkKKyAgICAgICAgICAgICpyZXN1bHQrKyA9ICptX2RhdGErKzsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBoYXNFc2NhcGUgPSB0cnVlOworICAgICAgICAgICAgcGFyc2VFc2NhcGUo
cmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGlzQ1NTTGV0dGVyKG1fZGF0YVswXSkg
fHwgKG1fZGF0YVswXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKG1fZGF0YVsxXSkpKTsKKyAgICBy
ZXR1cm4gaGFzRXNjYXBlOworfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU3RyaW5n
KFVDaGFyKiYgcmVzdWx0LCBVQ2hhciBxdW90ZSkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBpZiAoVU5MSUtFTFkoKm1fZGF0YSA9PSBxdW90ZSkpIHsKKyAgICAgICAgICAgIC8vIFN0
cmluZyBwYXJzaW5nIGlzIGRvbmUuCisgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoKm1fZGF0YSA+ICdccicgfHwgKCpt
X2RhdGEgPCAnXG4nICYmICptX2RhdGEpIHx8ICptX2RhdGEgPT0gJ1x2Jyk7CisKKyAgICAgICAg
aWYgKExJS0VMWShtX2RhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAq
bV9kYXRhKys7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAnXG4nIHx8IG1fZGF0YVsx
XSA9PSAnXGYnKQorICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAgICAgIGVsc2UgaWYgKG1f
ZGF0YVsxXSA9PSAnXHInKQorICAgICAgICAgICAgbV9kYXRhICs9IG1fZGF0YVsyXSA9PSAnXG4n
ID8gMyA6IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7
CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlVVJJKFVDaGFyKiYgc3Rh
cnQsIFVDaGFyKiYgcmVzdWx0KQoreworICAgIFVDaGFyKiB1cmlTdGFydCA9IHNraXBXaGl0ZVNw
YWNlcyhtX2RhdGEpOworCisgICAgaWYgKCp1cmlTdGFydCA9PSAnIicgfHwgKnVyaVN0YXJ0ID09
ICdcJycpIHsKKyAgICAgICAgVUNoYXIgcXVvdGUgPSAqdXJpU3RhcnQ7CisgICAgICAgICsrdXJp
U3RhcnQ7CisKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IGNoZWNrU3RyaW5nKHVyaVN0YXJ0
LCBxdW90ZSk7CisgICAgICAgIGlmICghc3RyaW5nRW5kKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBzdHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5nRW5kKTsKKyAgICAgICAg
aWYgKCpzdHJpbmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0
YXJ0ID0gcmVzdWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAgIHBhcnNlU3RyaW5nKHJl
c3VsdCwgcXVvdGUpOworCisgICAgICAgIG1fZGF0YSA9IHN0cmluZ0VuZCArIDE7CisgICAgICAg
IG1fdG9rZW4gPSBVUkk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9
IHVyaVN0YXJ0OworCisgICAgICAgIHdoaWxlIChpc1VSSUxldHRlcigqc3RyaW5nRW5kKSkgewor
ICAgICAgICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJ1xcJykKKyAgICAgICAgICAgICAgICArK3N0
cmluZ0VuZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0cmluZ0VuZCA9
IGNoZWNrRXNjYXBlKHN0cmluZ0VuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmdFbmQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHN0cmluZ0VuZCA9IHNraXBXaGl0ZVNwYWNlcyhzdHJpbmdFbmQpOworICAgICAg
ICBpZiAoKnN0cmluZ0VuZCAhPSAnKScpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
c3RhcnQgPSByZXN1bHQgPSBtX2RhdGEgPSB1cmlTdGFydDsKKyAgICAgICAgd2hpbGUgKGlzVVJJ
TGV0dGVyKCptX2RhdGEpKSB7CisgICAgICAgICAgICBpZiAoTElLRUxZKCptX2RhdGEgIT0gJ1xc
JykpCisgICAgICAgICAgICAgICAgKnJlc3VsdCsrID0gKm1fZGF0YSsrOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7CisgICAgICAgIH0KKwor
ICAgICAgICBtX2RhdGEgPSBzdHJpbmdFbmQgKyAxOworICAgICAgICBtX3Rva2VuID0gVVJJOwor
ICAgIH0KK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVVuaWNvZGVSYW5nZSgpCit7
CisgICAgVUNoYXIqIGRhdGEgPSBtX2RhdGEgKyAxOworICAgIGludCBsZW5ndGggPSA2OworICAg
IEFTU0VSVCgqbV9kYXRhID09ICcrJyk7CisKKyAgICB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpk
YXRhKSAmJiBsZW5ndGgpIHsKKyAgICAgICAgKytkYXRhOworICAgICAgICAtLWxlbmd0aDsKKyAg
ICB9CisKKyAgICBpZiAobGVuZ3RoICYmICpkYXRhID09ICc/JykgeworICAgICAgICAvLyBBdCBt
b3N0IDUgaGV4IGRpZ2l0IGZvbGxvd2VkIGJ5IGEgcXVlc3Rpb24gbWFyay4KKyAgICAgICAgZG8g
eworICAgICAgICAgICAgKytkYXRhOworICAgICAgICAgICAgLS1sZW5ndGg7CisgICAgICAgIH0g
d2hpbGUgKCpkYXRhID09ICc/JyAmJiBsZW5ndGgpOworICAgICAgICBtX2RhdGEgPSBkYXRhOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobGVuZ3RoIDwgNikgeworICAg
ICAgICAvLyBBdCBsZWFzdCBvbmUgaGV4IGRpZ2l0LgorICAgICAgICBpZiAoZGF0YVswXSA9PSAn
LScgJiYgaXNBU0NJSUhleERpZ2l0KGRhdGFbMV0pKSB7CisgICAgICAgICAgICAvLyBGb2xsb3dl
ZCBieSBhIGRhc2ggYW5kIGEgaGV4IGRpZ2l0LgorICAgICAgICAgICAgKytkYXRhOworICAgICAg
ICAgICAgbGVuZ3RoID0gNjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICArK2Rh
dGE7CisgICAgICAgICAgICB9IHdoaWxlICgtLWxlbmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQoKmRh
dGEpKTsKKyAgICAgICAgfQorICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENTU1BhcnNlcjo6cGFy
c2VOdGhDaGlsZCgpCit7CisgICAgVUNoYXIqIGRhdGEgPSBtX2RhdGE7CisKKyAgICB3aGlsZSAo
aXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgKytkYXRhOworICAgIGlmIChpc0Nhc2VsZXNz
RXF1YWwoKmRhdGEsICduJykpIHsKKyAgICAgICAgbV9kYXRhID0gZGF0YSArIDE7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFy
c2VyOjpwYXJzZU50aENoaWxkRXh0cmEoKQoreworICAgIFVDaGFyKiBkYXRhID0gc2tpcFdoaXRl
U3BhY2VzKG1fZGF0YSk7CisgICAgaWYgKCpkYXRhICE9ICcrJyAmJiAqZGF0YSAhPSAnLScpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRhdGEgPSBza2lwV2hpdGVTcGFjZXMoZGF0YSAr
IDEpOworICAgIGlmICghaXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZG8geworICAgICAgICArK2RhdGE7CisgICAgfSB3aGlsZSAoaXNBU0NJSURpZ2l0
KCpkYXRhKSk7CisKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIHJldHVybiB0cnVlOworfQorCitp
bmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEZ1bmN0aW9uVG9rZW4oaW50IGxlbmd0aCkKK3sK
KyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7
CisKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKGlzQ2Fz
ZWxlc3NFcXVhbChuYW1lWzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycp
ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAgICAgICAgICAgbV90b2tlbiA9
IE5PVEZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwg
J3UnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ3InKSAmJiBpc0Nhc2VsZXNzRXF1YWwo
bmFtZVsyXSwgJ2wnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBVUkk7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgOToKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRo
LWNoaWxkIikpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIDExOgorICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFs
KG5hbWUsICJudGgtb2YtdHlwZSIpKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50aENo
aWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAxNDoKKyAgICAgICAgaWYgKGlz
Q2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLWxhc3QtY2hpbGQiKSkKKyAgICAgICAgICAgIG1fcGFy
c2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgMTY6
CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50aC1sYXN0LW9mLXR5cGUiKSkK
KyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0TWVkaWFRdWVyeVRv
a2VuKGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1fcGFyc2luZ01vZGUgPT0gTWVkaWFRdWVy
eU1vZGUpOworICAgIFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworCisgICAgaWYgKGxlbmd0
aCA9PSAzKSB7CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ2EnKSAmJiBp
c0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwg
J2QnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJQV9BTkQ7CisgICAgICAgIGVsc2UgaWYg
KGlzQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzFd
LCAnbycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAgICAgICAgICAgbV90
b2tlbiA9IE1FRElBX05PVDsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSA0KSB7CisgICAgICAg
IGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFt
ZVsxXSwgJ24nKQorICAgICAgICAgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAn
bCcpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzNdLCAneScpKQorICAgICAgICAgICAgbV90b2tl
biA9IE1FRElBX09OTFk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVj
dE51bWJlclRva2VuKFVDaGFyKiB0eXBlLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5n
dGggPiAwKTsKKworICAgIHN3aXRjaCAobG93ZXJjYXNlQ2hhcmFjdGVyKHR5cGVbMF0pKSB7Cisg
ICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwo
dHlwZVsxXSwgJ20nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBDTVM7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgJ2QnOgorICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXNDYXNlbGVz
c0VxdWFsKHR5cGVbMV0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdnJykpCisg
ICAgICAgICAgICBtX3Rva2VuID0gREVHUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAn
ZSc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQ2FzZWxl
c3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBFTVM7Cisg
ICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3gnKSkKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gRVhTOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgJ2cnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYgaXNDYXNlbGVzc0VxdWFs
KHR5cGVbMV0sICdyJykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsy
XSwgJ2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ2QnKSkKKyAgICAgICAgICAgIG1f
dG9rZW4gPSBHUkFEUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaCc6CisgICAgICAg
IGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3onKSkKKyAgICAg
ICAgICAgIG1fdG9rZW4gPSBIRVJUWjsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaSc6
CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ24n
KSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJTlM7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgJ2snOgorICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVb
MV0sICdoJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICd6JykpCisgICAgICAgICAgICBt
X3Rva2VuID0gS0hFUlRaOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdtJzoKKyAgICAg
ICAgaWYgKGxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5
cGVbMV0sICdtJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IE1NUzsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAncycpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBNU0VDUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
ICdwJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICBpZiAoaXNDYXNl
bGVzc0VxdWFsKHR5cGVbMV0sICd4JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFBYUzsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAndCcpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBQVFM7CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwodHlwZVsxXSwgJ2MnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUENTOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAo
bGVuZ3RoID09IDMpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwg
J2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2QnKSkKKyAgICAgICAgICAgICAgICBt
X3Rva2VuID0gUkFEUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBl
WzFdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnbScpKQorICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBSRU1TOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgJ3MnOgorICAgICAgICBpZiAobGVuZ3RoID09IDEpCisgICAgICAgICAgICBtX3Rva2VuID0g
U0VDUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAndCc6CisgICAgICAgIGlmIChsZW5n
dGggPT0gNCAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3UnKQorICAgICAgICAgICAgICAg
ICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncicpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBl
WzNdLCAnbicpKQorICAgICAgICAgICAgbV90b2tlbiA9IFRVUk5TOworICAgICAgICByZXR1cm47
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAodHlwZVswXSA9PSAnXycgJiYgbGVuZ3RoID09
IDUgJiYgdHlwZVsxXSA9PSAnXycgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdxJykKKyAg
ICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ2UnKSAmJiBpc0Nhc2Vs
ZXNzRXF1YWwodHlwZVs0XSwgJ20nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBRRU1TOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdERh
c2hUb2tlbihpbnQgbGVuZ3RoKQoreworICAgIFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0Owor
CisgICAgaWYgKGxlbmd0aCA9PSAxMSkgeworICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5h
bWVbMTBdLCAneScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMSwgIndlYmtpdC1hbiIpKQor
ICAgICAgICAgICAgbV90b2tlbiA9IEFOWUZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nh
c2VsZXNzRXF1YWwobmFtZVsxMF0sICduJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAxLCAi
d2Via2l0LW1pIikpCisgICAgICAgICAgICBtX3Rva2VuID0gTUlORlVOQ1RJT047CisgICAgICAg
IGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ3gnKSAmJiBpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDEsICJ3ZWJraXQtbWEiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNQVhGVU5D
VElPTjsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMiAmJiBpc0Nhc2VsZXNzRXF1YWwobmFt
ZSArIDEsICJ3ZWJraXQtY2FsYyIpKQorICAgICAgICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOwor
fQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9v
bCBoYXNFc2NhcGUpCit7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2VuU3RhcnQ7CisgICAgQVNT
RVJUKG5hbWVbMF0gPT0gJ0AnICYmIGxlbmd0aCA+PSAyKTsKKworICAgIC8vIGNoYXJzZXQsIGZv
bnQtZmFjZSwgaW1wb3J0LCBtZWRpYSwgbmFtZXNwYWNlLCBwYWdlLAorICAgIC8vIC13ZWJraXQt
a2V5ZnJhbWVzLCBhbmQgLXdlYmtpdC1tZWRpYXF1ZXJ5IGFyZSBub3QgYWZmZWN0ZWQgYnkgaGFz
RXNjYXBlLgorICAgIHN3aXRjaCAobG93ZXJjYXNlQ2hhcmFjdGVyKG5hbWVbMV0pKSB7CisgICAg
Y2FzZSAnYic6CisgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAg
IGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1sZWZ0IikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IEJPVFRPTUxFRlRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAib3R0b20tcmlnaHQiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NUklHSFRf
U1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAg
ICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0b20tY2VudGVyIikpCisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IEJPVFRPTUNFTlRFUl9TWU07CisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgY2FzZSAxOToKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFt
ZSArIDIsICJvdHRvbS1sZWZ0LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBC
T1RUT01MRUZUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IDIwOgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm90dG9tLXJp
Z2h0LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01SSUdIVENPUk5F
Ul9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gOCAmJiBpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJoYXJzZXQiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBDSEFSU0VUX1NZ
TTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnZic6CisgICAgICAgIGlmIChsZW5ndGgg
PT0gMTAgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib250LWZhY2UiKSkKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
ICdpJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA3ICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsg
MiwgIm1wb3J0IikpIHsKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9k
ZTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJTVBPUlRfU1lNOworICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgJ2wnOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChsZW5ndGggPT0gOSkgeworICAgICAgICAgICAg
aWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC10b3AiKSkKKyAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gTEVGVFRPUF9TWU07CisgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEy
KSB7CisgICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291
bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChp
c0Nhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAy
LCAiZWZ0LW1pZGRsIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IExFRlRNSURETEVfU1lN
OworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWVbMTFdLCAnbScpICYm
IGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC1ib3R0byIpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBMRUZUQk9UVE9NX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlICdtJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA2ICYmIGlzQ2FzZWxlc3NFcXVh
bChuYW1lICsgMiwgImVkaWEiKSkgeworICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlh
UXVlcnlNb2RlOworICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX1NZTTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICduJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAx
MCAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJhbWVzcGFjZSIpKQorICAgICAgICAgICAg
bV90b2tlbiA9IE5BTUVTUEFDRV9TWU07CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3An
OgorICAgICAgICBpZiAobGVuZ3RoID09IDUgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAi
YWdlIikpCisgICAgICAgICAgICBtX3Rva2VuID0gUEFHRV9TWU07CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmIChsZW5ndGggPT0gMTApIHsKKyAgICAgICAgICAgIGlmIChpc0Nh
c2VsZXNzRXF1YWwobmFtZSArIDIsICJpZ2h0LXRvcCIpKQorICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBSSUdIVFRPUF9TWU07CisgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEzKSB7Cisg
ICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVy
dGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAgICAgIGlmIChpc0Nhc2Vs
ZXNzRXF1YWwobmFtZVsxMl0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdo
dC1taWRkbCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVE1JRERMRV9TWU07Cisg
ICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMl0sICdtJykgJiYgaXND
YXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBSSUdIVEJPVFRPTV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSAndCc6CisgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSA5OgorICAgICAgICAg
ICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLWxlZnQiKSkKKyAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gVE9QTEVGVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgY2FzZSAxMDoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJv
cC1yaWdodCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BSSUdIVF9TWU07CisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGlmIChpc0Nh
c2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1jZW50ZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gVE9QQ0VOVEVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IDE2OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLWxlZnQt
Y29ybmVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUExFRlRDT1JORVJfU1lNOwor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICBpZiAo
aXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3AtcmlnaHQtY29ybmVyIikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFRPUFJJR0hUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICctJzoKKyAgICAgICAgc3dp
dGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgIGlmICghaGFzRXNj
YXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1ydWxlIikpCisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9SVUxFX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNoYXJh
Y3RlciBmaXJzdCBjb3VsZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgorICAg
ICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ3MnKSAmJiBpc0Nhc2VsZXNz
RXF1YWwobmFtZSArIDIsICJ3ZWJraXQtZGVjbCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBXRUJLSVRfREVDTFNfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFs
KG5hbWVbMTNdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC12YWx1
IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9WQUxVRV9TWU07CisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgIGlmICghaGFzRXNj
YXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1yZWdpb24iKSkKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX1JFR0lPTl9SVUxFX1NZTTsKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUg
JiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Via2l0LXNlbGVjdG9yIikpCisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9TRUxFQ1RPUl9TWU07CisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgY2FzZSAxODoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwo
bmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWVzIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IFdFQktJVF9LRVlGUkFNRVNfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNh
c2UgMTk6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Via2l0
LW1lZGlhcXVlcnkiKSkgeworICAgICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1
ZXJ5TW9kZTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX01FRElBUVVFUllfU1lN
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMjI6
CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIs
ICJ3ZWJraXQta2V5ZnJhbWUtcnVsZSIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJL
SVRfS0VZRlJBTUVfUlVMRV9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIGludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxXaXRob3V0VHlwZSkKIHsK
ICAgICBZWVNUWVBFKiB5eWx2YWwgPSBzdGF0aWNfY2FzdDxZWVNUWVBFKj4oeXlsdmFsV2l0aG91
dFR5cGUpOwotICAgIGludCBsZW5ndGg7CisgICAgLy8gV3JpdGUgcG9pbnRlciBmb3IgdGhlIG5l
eHQgY2hhcmFjdGVyLgorICAgIFVDaGFyKiByZXN1bHQ7CisgICAgYm9vbCBoYXNFc2NhcGU7CiAK
LSAgICBsZXgoKTsKKyAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGlzIHRlcm1pbmF0ZWQgYnkgdHdv
IFwwLCBzbworICAgIC8vIGl0IGlzIHNhZmUgdG8gcmVhZCB0d28gY2hhcmFjdGVycyBhaGVhZCBh
bnl0aW1lLgogCi0gICAgVUNoYXIqIHQgPSB0ZXh0KCZsZW5ndGgpOworI2lmbmRlZiBOREVCVUcK
KyAgICAvLyBJbiBkZWJ1ZyB3ZSBjaGVjayB3aXRoIGFuIEFTU0VSVCB0aGF0IHRoZSBsZW5ndGgg
aXMgPiAwIGZvciBzdHJpbmcgdHlwZXMuCisgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9
IDA7CisgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gMDsKKyNlbmRpZgogCi0gICAgc3dpdGNo
ICh0b2tlbigpKSB7Ci0gICAgY2FzZSBXSElURVNQQUNFOgotICAgIGNhc2UgU0dNTF9DRDoKLSAg
ICBjYXNlIElOQ0xVREVTOgotICAgIGNhc2UgREFTSE1BVENIOgorcmVzdGFydEFmdGVyQ29tbWVu
dDoKKyAgICBtX3Rva2VuU3RhcnQgPSByZXN1bHQgPSBtX2RhdGE7CisgICAgbV90b2tlbiA9ICpt
X2RhdGE7CisgICAgKyttX2RhdGE7CisKKyAgICBzd2l0Y2ggKChtX3Rva2VuIDw9IDEyNykgPyB0
eXBlc09mQVNDSUlDaGFyYWN0ZXJzW21fdG9rZW5dIDogQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
KSB7CisgICAgY2FzZSBDaGFyYWN0ZXJDYXNlbGVzc1U6CisgICAgICAgIGlmIChVTkxJS0VMWSgq
bV9kYXRhID09ICcrJykpCisgICAgICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2UoKSkgewor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBVTklDT0RFUkFOR0U7CisgICAgICAgICAgICAgICAg
eXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAg
ICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0
byBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQuCisKKyAgICBjYXNlIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydDoKKyAgICAgICAgLS1tX2RhdGE7CisgICAgICAgIGhhc0VzY2FwZSA9IHBhcnNlSWRl
bnRpZmllcihyZXN1bHQpOworICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisKKyAgICAgICAgeXls
dmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgeXlsdmFsLT5z
dHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gbV90b2tlblN0YXJ0OworCisgICAgICAgIGlmIChVTkxJ
S0VMWSgqbV9kYXRhID09ICcoJykpIHsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBGVU5DVElPTjsK
KyAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQorICAgICAgICAgICAgICAgIGRldGVjdEZ1bmN0
aW9uVG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgICAgICsrbV9kYXRhOwor
ICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgICAgICAgICArK3l5bHZhbC0+c3RyaW5nLmxlbmd0
aDsKKworICAgICAgICAgICAgaWYgKHRva2VuKCkgPT0gVVJJKSB7CisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IEZVTkNUSU9OOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgaXQg
aXMgcmVhbGx5IGFuIFVSSS4KKyAgICAgICAgICAgICAgICBwYXJzZVVSSSh5eWx2YWwtPnN0cmlu
Zy5jaGFyYWN0ZXJzLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxl
bmd0aCA9IHJlc3VsdCAtIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnM7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSAhPSBOb3JtYWxNb2Rl
KSAmJiAhaGFzRXNjYXBlKSB7CisgICAgICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBNZWRp
YVF1ZXJ5TW9kZSkKKyAgICAgICAgICAgICAgICBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW4ocmVzdWx0
IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fcGFyc2luZ01vZGUgPT0g
TnRoQ2hpbGRNb2RlICYmIGlzQ2FzZWxlc3NFcXVhbChtX3Rva2VuU3RhcnRbMF0sICduJykpIHsK
KyAgICAgICAgICAgICAgICBpZiAocmVzdWx0IC0gbV90b2tlblN0YXJ0ID09IDEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuIiBpcyBJREVOVCBidXQgIm4rMSIgaXMgTlRILgor
ICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgICAgICAgICB5
eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAtIG1fdG9rZW5T
dGFydCA9PSAyICYmIG1fdG9rZW5TdGFydFsxXSA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gU3RyaW5nICJuLSIgaXMgSURFTlQgYnV0ICJuLTEiIGlzIE5USC4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSBkZWNyZWFzZSBtX2RhdGEgdG8gZGV0ZWN0IGFuIG50
aC1jaGlsZCB0b2tlbi4KKyAgICAgICAgICAgICAgICAgICAgbV9kYXRhLS07CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlIHRv
IG1fZGF0YSBpZiB1bnN1Y2Nlc3NmdWwuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEr
KzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgVVJJOgotICAgIGNhc2Ug
U1RSSU5HOgotICAgIGNhc2UgSURFTlQ6Ci0gICAgY2FzZSBOVEg6Ci0gICAgY2FzZSBIRVg6Ci0g
ICAgY2FzZSBJRFNFTDoKLSAgICBjYXNlIERJTUVOOgotICAgIGNhc2UgVU5JQ09ERVJBTkdFOgot
ICAgIGNhc2UgRlVOQ1RJT046Ci0gICAgY2FzZSBBTllGVU5DVElPTjoKLSAgICBjYXNlIE5PVEZV
TkNUSU9OOgotICAgIGNhc2UgQ0FMQ0ZVTkNUSU9OOgotICAgIGNhc2UgTUlORlVOQ1RJT046Ci0g
ICAgY2FzZSBNQVhGVU5DVElPTjoKLSAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9
IHQ7Ci0gICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIElNUE9SVF9TWU06Ci0gICAgY2FzZSBQQUdFX1NZTToKLSAgICBjYXNl
IE1FRElBX1NZTToKLSAgICBjYXNlIEZPTlRfRkFDRV9TWU06Ci0gICAgY2FzZSBDSEFSU0VUX1NZ
TToKLSAgICBjYXNlIE5BTUVTUEFDRV9TWU06Ci0gICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1NZ
TToKLQotICAgIGNhc2UgSU1QT1JUQU5UX1NZTToKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IFFFTVM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNhc2UgR1JBRFM6Ci0gICAgY2FzZSBUVVJO
UzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBERUdTOgotICAgIGNhc2UgUkFEUzoKLSAg
ICBjYXNlIEtIRVJUWjoKLSAgICBjYXNlIFJFTVM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNh
c2UgTVNFQ1M6Ci0gICAgY2FzZSBIRVJUWjoKLSAgICBjYXNlIEVNUzoKLSAgICBjYXNlIEVYUzoK
LSAgICBjYXNlIFBYUzoKLSAgICBjYXNlIENNUzoKLSAgICBjYXNlIE1NUzoKLSAgICBjYXNlIElO
UzoKLSAgICBjYXNlIFBUUzoKLSAgICBjYXNlIFBDUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAg
Y2FzZSBTRUNTOgotICAgIGNhc2UgUEVSQ0VOVEFHRToKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAg
Y2FzZSBGTE9BVFRPS0VOOgotICAgIGNhc2UgSU5URUdFUjoKLSAgICAgICAgeXlsdmFsLT5udW1i
ZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUodCwgbGVuZ3RoKTsKKyAgICBjYXNlIENoYXJhY3RlckRv
dDoKKyAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQobV9kYXRhWzBdKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gQ2hhcmFjdGVyTnVtYmVyLgorCisgICAg
Y2FzZSBDaGFyYWN0ZXJOdW1iZXI6IHsKKyAgICAgICAgYm9vbCBkb3RTZWVuID0gKG1fdG9rZW4g
PT0gJy4nKTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJRGlnaXQobV9kYXRhWzBdKSkgeworICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGRvdCBp
cyBhbGxvd2VkIGZvciBhIG51bWJlciwKKyAgICAgICAgICAgICAgICAvLyBhbmQgaXQgbXVzdCBi
ZSBmb2xsb3dlZCBieSBhIGRpZ2l0LgorICAgICAgICAgICAgICAgIGlmIChtX2RhdGFbMF0gIT0g
Jy4nIHx8IGRvdFNlZW4gfHwgIWlzQVNDSUlEaWdpdChtX2RhdGFbMV0pKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkb3RTZWVuID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFVO
TElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSAmJiAhZG90U2VlbiAmJiBpc0Nh
c2VsZXNzRXF1YWwoKm1fZGF0YSwgJ24nKSkgeworICAgICAgICAgICAgLy8gIlswLTldK24iIGlz
IGFsd2F5cyBhbiBOdGhDaGlsZC4KKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAgICAg
cGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAg
ICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgeXlsdmFsLT5udW1iZXIgPSBjaGFy
YWN0ZXJzVG9Eb3VibGUobV90b2tlblN0YXJ0LCBtX2RhdGEgLSBtX3Rva2VuU3RhcnQpOworCisg
ICAgICAgIC8vIFR5cGUgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICBpZiAoaXNJZGVudGlmaWVy
U3RhcnQoKSkgeworICAgICAgICAgICAgVUNoYXIqIHR5cGUgPSBtX2RhdGE7CisgICAgICAgICAg
ICByZXN1bHQgPSBtX2RhdGE7CisKKyAgICAgICAgICAgIGhhc0VzY2FwZSA9IHBhcnNlSWRlbnRp
ZmllcihyZXN1bHQpOworICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJysnKSB7CisgICAgICAg
ICAgICAgICAgLy8gQW55IGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYSAnKycgc2lnbiBpcyBhbiBp
bnZhbGlkIGRpbWVuc2lvbi4KKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gSU5WQUxJRERJTUVOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gRElNRU47CisgICAgICAgICAgICAgICAgaWYgKCFoYXNFc2Nh
cGUpCisgICAgICAgICAgICAgICAgICAgIGRldGVjdE51bWJlclRva2VuKHR5cGUsIG1fZGF0YSAt
IHR5cGUpOworCisgICAgICAgICAgICAgICAgaWYgKG1fdG9rZW4gPT0gRElNRU4pIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIGRlY29kZWQgbnVtYmVyIGlzIG92ZXJ3cml0dGVuLCBidXQg
dGhpcyBpcyBpbnRlbnRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcu
Y2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5z
dHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgqbV9kYXRhID09ICclJykgeworICAg
ICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIENTUyBncmFtbWFyIHNheXMge251bX0lIHdlIGZvbGxv
dworICAgICAgICAgICAgLy8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hpY2ggdXNlcyB7bnVtfSUr
LgorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAg
ICAgfSB3aGlsZSAoKm1fZGF0YSA9PSAnJScpOworICAgICAgICAgICAgbV90b2tlbiA9IFBFUkNF
TlRBR0U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV90b2tlbiA9IGRvdFNlZW4gPyBG
TE9BVFRPS0VOIDogSU5URUdFUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBD
aGFyYWN0ZXJEYXNoOgorICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2gobV9k
YXRhKSkgeworICAgICAgICAgICAgLS1tX2RhdGE7CisgICAgICAgICAgICBoYXNFc2NhcGUgPSBw
YXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJREVOVDsKKwor
ICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgbV90b2tl
biA9IEZVTkNUSU9OOworICAgICAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQorICAgICAgICAg
ICAgICAgICAgICBkZXRlY3REYXNoVG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAg
ICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpICYm
ICFoYXNFc2NhcGUgJiYgaXNDYXNlbGVzc0VxdWFsKG1fdG9rZW5TdGFydFsxXSwgJ24nKSkgewor
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMikgeworICAgICAg
ICAgICAgICAgICAgICAvLyBTdHJpbmcgIi1uIiBpcyBJREVOVCBidXQgIi1uKzEiIGlzIE5USC4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRyYSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9kYXRhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMyAmJiBtX3Rva2VuU3RhcnRbMl0g
PT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4tIiBpcyBJREVOVCBi
dXQgIi1uLTEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSBk
ZWNyZWFzZSBtX2RhdGEgdG8gZGV0ZWN0IGFuIG50aC1jaGlsZCB0b2tlbi4KKyAgICAgICAgICAg
ICAgICAgICAgbV9kYXRhLS07CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxk
RXh0cmEoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9r
ZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlIHRvIG1fZGF0YSBpZiB1bnN1Y2Nlc3NmdWwuCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGErKzsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5sZW5ndGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgIH0gZWxzZSBpZiAobV9k
YXRhWzBdID09ICctJyAmJiBtX2RhdGFbMV0gPT0gJz4nKSB7CisgICAgICAgICAgICBtX2RhdGEg
Kz0gMjsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBTR01MX0NEOworICAgICAgICB9IGVsc2UgaWYg
KFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSkgeworICAgICAgICAgICAg
Ly8gIi1bMC05XStuIiBpcyBhbHdheXMgYW4gTnRoQ2hpbGQuCisgICAgICAgICAgICBpZiAocGFy
c2VOdGhDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhKCk7Cisg
ICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0
cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQ6CisgICAgY2FzZSBDaGFyYWN0
ZXJPdGhlcjoKKyAgICAgICAgLy8gbV90b2tlbiBpcyBzaW1wbHkgdGhlIGN1cnJlbnQgY2hhcmFj
dGVyLgogICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICByZXR1cm4gdG9rZW4oKTsKLX0KKyAg
ICBjYXNlIENoYXJhY3RlcldoaXRlU3BhY2U6CisgICAgICAgIG1fdG9rZW4gPSBXSElURVNQQUNF
OworICAgICAgICAvLyBNaWdodCBzdGFydCB3aXRoIGEgJ1xuJy4KKyAgICAgICAgLS1tX2RhdGE7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICgqbV9kYXRhID09ICdcbicpCisgICAgICAg
ICAgICAgICAgKyttX2xpbmVOdW1iZXI7CisgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAg
fSB3aGlsZSAoKm1fZGF0YSA8PSAnICcgJiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKm1fZGF0
YV0gPT0gQ2hhcmFjdGVyV2hpdGVTcGFjZSkpOworICAgICAgICBicmVhazsKIAotdm9pZCBDU1NQ
YXJzZXI6OnJlY2hlY2tBdEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAg
ICBTdHJpbmcgcnVsZU5hbWUoc3RyLCBsZW4pOwotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShy
dWxlTmFtZSwgIkBpbXBvcnQiKSkKLSAgICAgICAgeXlUb2sgPSBJTVBPUlRfU1lNOwotICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQHBhZ2UiKSkKLSAgICAgICAgeXlU
b2sgPSBQQUdFX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwg
IkBtZWRpYSIpKQotICAgICAgICB5eVRvayA9IE1FRElBX1NZTTsKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBmb250LWZhY2UiKSkKLSAgICAgICAgeXlUb2sgPSBG
T05UX0ZBQ0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAi
QGNoYXJzZXQiKSkKLSAgICAgICAgeXlUb2sgPSBDSEFSU0VUX1NZTTsKLSAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBuYW1lc3BhY2UiKSkKLSAgICAgICAgeXlUb2sg
PSBOQU1FU1BBQ0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1l
LCAiQC13ZWJraXQta2V5ZnJhbWVzIikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX0tFWUZSQU1F
U19TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJALXdlYmtp
dC1tZWRpYXF1ZXJ5IikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX01FRElBUVVFUllfU1lNOwot
fQotCi1VQ2hhciogQ1NTUGFyc2VyOjp0ZXh0KGludCAqbGVuZ3RoKQotewotICAgIFVDaGFyKiBz
dGFydCA9IHl5dGV4dDsKLSAgICBpbnQgbCA9IHl5bGVuZzsKLSAgICBzd2l0Y2ggKHl5VG9rKSB7
Ci0gICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgIGwtLTsKLSAgICAgICAgLyogbm9icmVhayAqLwot
ICAgIGNhc2UgSEVYOgotICAgIGNhc2UgSURTRUw6Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAg
IGwtLTsKKyAgICBjYXNlIENoYXJhY3RlckVuZE1lZGlhUXVlcnk6CisgICAgICAgIGlmIChtX3Bh
cnNpbmdNb2RlID09IE1lZGlhUXVlcnlNb2RlKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9
IE5vcm1hbE1vZGU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVVJJOgotICAgICAgICAvLyAi
dXJsKCJ7d317c3RyaW5nfXt3fSIpIgotICAgICAgICAvLyAidXJsKCJ7d317dXJsfXt3fSIpIgot
ICAgICAgICAvLyBzdHJpcCAidXJsKCIgYW5kICIpIgotICAgICAgICBzdGFydCArPSA0OwotICAg
ICAgICBsIC09IDU7Ci0gICAgICAgIC8vIHN0cmlwIHt3fQotICAgICAgICB3aGlsZSAobCAmJiBp
c0hUTUxTcGFjZSgqc3RhcnQpKSB7Ci0gICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAg
LS1sOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChsICYmIGlzSFRNTFNwYWNlKHN0YXJ0W2wg
LSAxXSkpCi0gICAgICAgICAgICAtLWw7Ci0gICAgICAgIGlmIChsICYmICgqc3RhcnQgPT0gJyIn
IHx8ICpzdGFydCA9PSAnXCcnKSkgewotICAgICAgICAgICAgQVNTRVJUKGwgPj0gMiAmJiBzdGFy
dFtsIC0gMV0gPT0gKnN0YXJ0KTsKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICAgICBs
IC09IDI7CisKKyAgICBjYXNlIENoYXJhY3RlckVuZE50aENoaWxkOgorICAgICAgICBpZiAobV9w
YXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0g
Tm9ybWFsTW9kZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlclF1b3RlOgor
ICAgICAgICBpZiAoY2hlY2tTdHJpbmcobV9kYXRhLCBtX3Rva2VuKSkgeworICAgICAgICAgICAg
KytyZXN1bHQ7CisgICAgICAgICAgICBwYXJzZVN0cmluZyhyZXN1bHQsIG1fdG9rZW4pOworICAg
ICAgICAgICAgbV90b2tlbiA9IFNUUklORzsKKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNo
YXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQgKyAxOworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcu
bGVuZ3RoID0gcmVzdWx0IC0gKG1fdG9rZW5TdGFydCArIDEpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6CisKKyAgICBjYXNlIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFy
azogeworICAgICAgICBVQ2hhciogc3RhcnQgPSBza2lwV2hpdGVTcGFjZXMobV9kYXRhKTsKKyAg
ICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChzdGFydCwgImltcG9ydGFudCIpKSB7CisgICAgICAg
ICAgICBtX3Rva2VuID0gSU1QT1JUQU5UX1NZTTsKKyAgICAgICAgICAgIG1fZGF0YSA9IHN0YXJ0
ICsgOTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICAvLyBwcm9jZXNz
IGVzY2FwZXMKLSAgICBVQ2hhciogb3V0ID0gc3RhcnQ7Ci0gICAgVUNoYXIqIGVzY2FwZSA9IDA7
CisgICAgY2FzZSBDaGFyYWN0ZXJIYXNobWFyazogeworICAgICAgICBVQ2hhciogc3RhcnQgPSBt
X2RhdGE7CisgICAgICAgIHJlc3VsdCA9IG1fZGF0YTsKIAotICAgIGJvb2wgc2F3RXNjYXBlID0g
ZmFsc2U7CisgICAgICAgIGlmIChpc0FTQ0lJRGlnaXQoKm1fZGF0YSkpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgbXVzdCBiZSBhIHZhbGlkIGhleCBudW1iZXIgdG9rZW4uCisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICB9IHdoaWxlIChpc0FT
Q0lJSGV4RGlnaXQoKm1fZGF0YSkpOworICAgICAgICAgICAgbV90b2tlbiA9IEhFWDsKKyAgICAg
ICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBzdGFydDsKKyAgICAgICAgICAgIHl5
bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIHN0YXJ0OworICAgICAgICB9IGVsc2UgaWYg
KGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJRFNFTDsKKyAg
ICAgICAgICAgIGlmICghcGFyc2VJZGVudGlmaWVyKHJlc3VsdCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBDaGVjayB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVt
YmVyLgorICAgICAgICAgICAgICAgIFVDaGFyKiBjdXJyZW50ID0gc3RhcnQ7CisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IEhFWDsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50KSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IElEU0VMOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50Owor
ICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQgPCByZXN1bHQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IHN0YXJ0OworICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gc3RhcnQ7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgVUNoYXIqIGN1cnJlbnQgPSBzdGFydCArIGk7Ci0gICAgICAgIGlmIChlc2Nh
cGUgPT0gY3VycmVudCAtIDEpIHsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQoKmN1
cnJlbnQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHl5VG9r
ID09IFNUUklORyAmJgotICAgICAgICAgICAgICAgICAoKmN1cnJlbnQgPT0gJ1xuJyB8fCAqY3Vy
cmVudCA9PSAnXHInIHx8ICpjdXJyZW50ID09ICdcZicpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
IyMjIGhhbmRsZSBcclxuIGNhc2UKLSAgICAgICAgICAgICAgICBpZiAoKmN1cnJlbnQgIT0gJ1xy
JykKLSAgICAgICAgICAgICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICBjYXNlIENoYXJhY3RlclNsYXNoOgorICAgICAgICAvLyBJZ25vcmUgY29tbWVu
dHMuIFRoZXkgYXJlIG5vdCBldmVuIGNvbnNpZGVyZWQgYXMgd2hpdGUgc3BhY2VzLgorICAgICAg
ICBpZiAoKm1fZGF0YSA9PSAnKicpIHsKKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICAg
ICAgd2hpbGUgKG1fZGF0YVswXSAhPSAnKicgfHwgbV9kYXRhWzFdICE9ICcvJykgeworICAgICAg
ICAgICAgICAgIGlmIChtX2RhdGFbMF0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKytt
X2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgaWYgKG1fZGF0YVswXSA9PSAnXDAnICYmIG1f
ZGF0YVsxXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVudGVybWluYXRlZCBj
b21tZW50cyBhcmUgc2ltcGx5IGlnbm9yZWQuCisgICAgICAgICAgICAgICAgICAgIG1fZGF0YSAt
PSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKyttX2RhdGE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpbiBh
bGwgb3RoZXIgY2FzZXMgY29weSB0aGUgY2hhciB0byBvdXRwdXQKLSAgICAgICAgICAgIC8vICMj
IwotICAgICAgICAgICAgKm91dCsrID0gKmN1cnJlbnQ7Ci0gICAgICAgICAgICBlc2NhcGUgPSAw
OwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2RhdGEgKz0gMjsKKyAgICAg
ICAgICAgIGdvdG8gcmVzdGFydEFmdGVyQ29tbWVudDsKICAgICAgICAgfQotICAgICAgICBpZiAo
ZXNjYXBlID09IGN1cnJlbnQgLSAyICYmIHl5VG9rID09IFNUUklORyAmJgotICAgICAgICAgICAg
ICooY3VycmVudC0xKSA9PSAnXHInICYmICpjdXJyZW50ID09ICdcbicpIHsKLSAgICAgICAgICAg
IGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIENoYXJhY3RlckRvbGxhcjoKKyAgICAgICAgaWYgKCptX2RhdGEgPT0gJz0nKSB7Cisg
ICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBFTkRTV0lUSDsKICAg
ICAgICAgfQotICAgICAgICBpZiAoZXNjYXBlID4gY3VycmVudCAtIDcgJiYgaXNBU0NJSUhleERp
Z2l0KCpjdXJyZW50KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXNjYXBl
KSB7Ci0gICAgICAgICAgICAvLyBhZGQgZXNjYXBlZCBjaGFyCi0gICAgICAgICAgICB1bnNpZ25l
ZCB1YyA9IDA7Ci0gICAgICAgICAgICBlc2NhcGUrKzsKLSAgICAgICAgICAgIHdoaWxlIChlc2Nh
cGUgPCBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAgdWMgKj0gMTY7Ci0gICAgICAgICAgICAg
ICAgdWMgKz0gdG9BU0NJSUhleFZhbHVlKCplc2NhcGUpOwotICAgICAgICAgICAgICAgIGVzY2Fw
ZSsrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyQXN0ZXJpc2s6CisgICAg
ICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAg
ICAgICBtX3Rva2VuID0gQ09OVEFJTlM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIENoYXJhY3RlclBsdXM6CisgICAgICAgIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2Rl
ID09IE50aENoaWxkTW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFNpbXBsZXN0IGNhc2UuICIrWzAt
OV0qbiIgaXMgYWx3YXlzIE50aENoaWxkLgorICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGQo
KSkgeworICAgICAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYSgpOworICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFj
dGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAv
LyBjYW4ndCBoYW5kbGUgY2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgICAgICBpZiAodWMgPiAw
eGZmZmYpCi0gICAgICAgICAgICAgICAgdWMgPSAweGZmZmQ7Ci0gICAgICAgICAgICAqb3V0Kysg
PSB1YzsKLSAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICBpZiAoaXNIVE1MU3Bh
Y2UoKmN1cnJlbnQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAg
ICAgIGlmICghZXNjYXBlICYmICpjdXJyZW50ID09ICdcXCcpIHsKLSAgICAgICAgICAgIGVzY2Fw
ZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICBzYXdFc2NhcGUgPSB0cnVlOwotICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJMZXNzOgorICAg
ICAgICBpZiAobV9kYXRhWzBdID09ICchJyAmJiBtX2RhdGFbMV0gPT0gJy0nICYmIG1fZGF0YVsy
XSA9PSAnLScpIHsKKyAgICAgICAgICAgIG1fZGF0YSArPSAzOworICAgICAgICAgICAgbV90b2tl
biA9IFNHTUxfQ0Q7CiAgICAgICAgIH0KLSAgICAgICAgKm91dCsrID0gKmN1cnJlbnQ7Ci0gICAg
fQotICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgLy8gYWRkIGVzY2FwZWQgY2hhcgotICAgICAg
ICB1bnNpZ25lZCB1YyA9IDA7Ci0gICAgICAgIGVzY2FwZSsrOwotICAgICAgICB3aGlsZSAoZXNj
YXBlIDwgc3RhcnQrbCkgewotICAgICAgICAgICAgdWMgKj0gMTY7Ci0gICAgICAgICAgICB1YyAr
PSB0b0FTQ0lJSGV4VmFsdWUoKmVzY2FwZSk7Ci0gICAgICAgICAgICBlc2NhcGUrKzsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlckF0OgorICAgICAgICBpZiAoaXNJZGVudGlm
aWVyU3RhcnQoKSkgeworICAgICAgICAgICAgbV90b2tlbiA9IEFUS0VZV09SRDsKKyAgICAgICAg
ICAgICsrcmVzdWx0OworICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFyc2VJZGVudGlmaWVyKHJl
c3VsdCk7CisgICAgICAgICAgICBkZXRlY3RBdFRva2VuKHJlc3VsdCAtIG1fdG9rZW5TdGFydCwg
aGFzRXNjYXBlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFj
dGVyQmFja1NsYXNoOgorICAgICAgICBpZiAoaXNDU1NFc2NhcGUoKm1fZGF0YSkpIHsKKyAgICAg
ICAgICAgIC0tbV9kYXRhOworICAgICAgICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCk7Cisg
ICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5j
aGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVu
Z3RoID0gcmVzdWx0IC0gbV90b2tlblN0YXJ0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBDaGFyYWN0ZXJYb3I6CisgICAgICAgIGlmICgqbV9kYXRhID09ICc9Jykgewor
ICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICBtX3Rva2VuID0gQkVHSU5TV0lUSDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyVmVydGljYWxC
YXI6CisgICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgKyttX2RhdGE7
CisgICAgICAgICAgICBtX3Rva2VuID0gREFTSE1BVENIOwogICAgICAgICB9Ci0gICAgICAgIC8v
IGNhbid0IGhhbmRsZSBjaGFycyBvdXRzaWRlIHVjczIKLSAgICAgICAgaWYgKHVjID4gMHhmZmZm
KQotICAgICAgICAgICAgdWMgPSAweGZmZmQ7Ci0gICAgICAgICpvdXQrKyA9IHVjOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyVGlsZGU6CisgICAgICAgIGlmICgqbV9kYXRh
ID09ICc9JykgeworICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICBtX3Rva2VuID0g
SU5DTFVERVM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
Kmxlbmd0aCA9IG91dCAtIHN0YXJ0OworI2lmbmRlZiBOREVCVUcKKyAgICBzd2l0Y2ggKHRva2Vu
KCkpIHsKKyAgICBjYXNlIFNUUklORzoKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNo
YXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICsgMSk7CisgICAgICAgIGJyZWFrOwogCi0gICAgLy8g
SWYgd2UgaGF2ZSBhbiB1bnJlY29nbml6ZWQgQC1rZXl3b3JkLCBhbmQgaWYgd2UgaGFuZGxlZCBh
bnkgZXNjYXBlcyBhdCBhbGwsIHRoZW4KLSAgICAvLyB3ZSBzaG91bGQgYXR0ZW1wdCB0byBhZGp1
c3QgeXlUb2sgdG8gdGhlIGNvcnJlY3QgdHlwZS4KLSAgICBpZiAoeXlUb2sgPT0gQVRLRVlXT1JE
ICYmIHNhd0VzY2FwZSkKLSAgICAgICAgcmVjaGVja0F0S2V5d29yZChzdGFydCwgKmxlbmd0aCk7
CisgICAgY2FzZSBJREVOVDoKKyAgICBjYXNlIE5USDoKKyAgICBjYXNlIERJTUVOOgorICAgIGNh
c2UgVU5JQ09ERVJBTkdFOgorICAgIGNhc2UgRlVOQ1RJT046CisgICAgY2FzZSBBTllGVU5DVElP
TjoKKyAgICBjYXNlIE5PVEZVTkNUSU9OOgorICAgIGNhc2UgQ0FMQ0ZVTkNUSU9OOgorICAgIGNh
c2UgTUlORlVOQ1RJT046CisgICAgY2FzZSBNQVhGVU5DVElPTjoKKyAgICAgICAgQVNTRVJUKHl5
bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICYmIHl5bHZhbC0+c3RyaW5n
Lmxlbmd0aCA+IDApOworICAgICAgICBicmVhazsKIAotICAgIHJldHVybiBzdGFydDsKLX0KKyAg
ICBjYXNlIFVSSToKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgJiYg
eXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyAhPSBtX3Rva2VuU3RhcnQpOworICAgICAgICBicmVh
azsKIAotdm9pZCBDU1NQYXJzZXI6OmNvdW50TGluZXMoKQotewotICAgIGZvciAoVUNoYXIqIGN1
cnJlbnQgPSB5eXRleHQ7IGN1cnJlbnQgPCB5eXRleHQgKyB5eWxlbmc7ICsrY3VycmVudCkgewot
ICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJ1xuJykKLSAgICAgICAgICAgICsrbV9saW5lTnVtYmVy
OworICAgIGNhc2UgSEVYOgorICAgIGNhc2UgSURTRUw6CisgICAgICAgIEFTU0VSVCh5eWx2YWwt
PnN0cmluZy5jaGFyYWN0ZXJzID09IG1fdG9rZW5TdGFydCArIDEgJiYgeXlsdmFsLT5zdHJpbmcu
bGVuZ3RoID4gMCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJu
IHRva2VuKCk7CiB9CiAKIENTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0
aW5nU2VsZWN0b3IoKQpAQCAtNzg2MiwyNyArODg0MSwyNyBAQCB2b2lkIENTU1BhcnNlcjo6dXBk
YXRlTGFzdE1lZGlhTGluZShNZWRpYUxpc3QqIG1lZGlhKQogCiB2b2lkIENTU1BhcnNlcjo6bWFy
a1NlbGVjdG9yTGlzdFN0YXJ0KCkKIHsKLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0g
eXl0ZXh0IC0gbV9kYXRhLmdldCgpOworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBt
X3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1h
cmtTZWxlY3Rvckxpc3RFbmQoKQogewogICAgIGlmICghbV9jdXJyZW50UnVsZURhdGEpCiAgICAg
ICAgIHJldHVybjsKLSAgICBVQ2hhciogbGlzdEVuZCA9IHl5dGV4dDsKLSAgICB3aGlsZSAobGlz
dEVuZCA+IG1fZGF0YS5nZXQoKSArIDEpIHsKKyAgICBVQ2hhciogbGlzdEVuZCA9IG1fdG9rZW5T
dGFydDsKKyAgICB3aGlsZSAobGlzdEVuZCA+IG1fZGF0YVN0YXJ0LmdldCgpICsgMSkgewogICAg
ICAgICBpZiAoaXNIVE1MU3BhY2UoKihsaXN0RW5kIC0gMSkpKQogICAgICAgICAgICAgLS1saXN0
RW5kOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV9zZWxl
Y3Rvckxpc3RSYW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhLmdldCgpOworICAgIG1fc2VsZWN0
b3JMaXN0UmFuZ2UuZW5kID0gbGlzdEVuZCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiB2b2lk
IENTU1BhcnNlcjo6bWFya1J1bGVCb2R5U3RhcnQoKQogewotICAgIHVuc2lnbmVkIG9mZnNldCA9
IHl5dGV4dCAtIG1fZGF0YS5nZXQoKTsKLSAgICBpZiAoKnl5dGV4dCA9PSAneycpCisgICAgdW5z
aWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CisgICAgaWYg
KCptX3Rva2VuU3RhcnQgPT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVs
ZSBib2R5IG9wZW5pbmcgYnJhY2UuCiAgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5z
dGFydCkKICAgICAgICAgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gb2Zmc2V0OwpAQCAtNzg5MSw3
ICs4ODcwLDcgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKIAogdm9pZCBD
U1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0
ZXh0IC0gbV9kYXRhLmdldCgpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAt
IG1fZGF0YVN0YXJ0LmdldCgpOwogICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2UuZW5k
KQogICAgICAgICBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0OwogfQpAQCAtNzkwMCwxNSAr
ODg3OSwxNSBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQogewogICAgIGlm
ICghbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICBtX3By
b3BlcnR5UmFuZ2Uuc3RhcnQgPSB5eXRleHQgLSBtX2RhdGEuZ2V0KCk7CisgICAgbV9wcm9wZXJ0
eVJhbmdlLnN0YXJ0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiB9CiAKIHZv
aWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29s
IGlzUHJvcGVydHlQYXJzZWQpCiB7CiAgICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlv
bikKICAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0
YS5nZXQoKTsKLSAgICBpZiAoKnl5dGV4dCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGlu
dG8gdGhlIHByb3BlcnR5IHRleHQuCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0
IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CisgICAgaWYgKCptX3Rva2VuU3RhcnQgPT0gJzsnKSAvLyBJ
bmNsdWRlIHNlbWljb2xvbiBpbnRvIHRoZSBwcm9wZXJ0eSB0ZXh0LgogICAgICAgICArK29mZnNl
dDsKICAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gb2Zmc2V0OwogICAgIGlmIChtX3Byb3BlcnR5
UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYgbV9jdXJyZW50UnVsZURhdGEpIHsKQEAgLTc5MTYs
NyArODg5NSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9y
dGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAgICBjb25zdCB1bnNpZ25lZCBl
bmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwogICAgICAgICBBU1NFUlQoc3RhcnQgPCBlbmQpOwot
ICAgICAgICBTdHJpbmcgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRhLmdldCgpICsgc3Rh
cnQsIGVuZCAtIHN0YXJ0KS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgU3RyaW5nIHByb3Bl
cnR5U3RyaW5nID0gU3RyaW5nKG1fZGF0YVN0YXJ0LmdldCgpICsgc3RhcnQsIGVuZCAtIHN0YXJ0
KS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKHByb3BlcnR5U3RyaW5nLmVuZHNXaXRo
KCI7IiwgdHJ1ZSkpCiAgICAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5U3RyaW5n
LmxlZnQocHJvcGVydHlTdHJpbmcubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgc2l6ZV90IGNvbG9u
SW5kZXggPSBwcm9wZXJ0eVN0cmluZy5maW5kKCI6Iik7CkBAIC04MTM1LDMzICs5MTE0LDQgQEAg
Ym9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiB0b2tlbikKICAgICAg
ICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodG9rZW4sICJuIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
dG9rZW4sICItbiIpOwogfQogCi0jZGVmaW5lIFlZX0RFQ0wgaW50IENTU1BhcnNlcjo6bGV4KCkK
LSNkZWZpbmUgeXljb25zdCBjb25zdAotdHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKLXR5cGVk
ZWYgdW5zaWduZWQgWVlfQ0hBUjsKLS8vIFRoZSBmb2xsb3dpbmcgbGluZSBtYWtlcyBzdXJlIHdl
IHRyZWF0IG5vbi1MYXRpbi0xIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZWN0bHkuCi0jZGVmaW5l
IFlZX1NDX1RPX1VJKGMpIChjID4gMHhmZiA/IDB4ZmYgOiBjKQotI2RlZmluZSBZWV9ET19CRUZP
UkVfQUNUSU9OIFwKLSAgICAgICAgeXl0ZXh0ID0geXlfYnA7IFwKLSAgICAgICAgeXlsZW5nID0g
KGludCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgICAgIHl5X2hvbGRfY2hhciA9ICp5eV9jcDsg
XAotICAgICAgICAqeXlfY3AgPSAwOyBcCi0gICAgICAgIHl5X2NfYnVmX3AgPSB5eV9jcDsKLSNk
ZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZGVmaW5lIEVDSE8KLSNkZWZpbmUgWVlfUlVMRV9TRVRV
UAotI2RlZmluZSBJTklUSUFMIDAKLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5E
X09GX0JVRkZFUiArIHN0YXRlICsgMSkKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSB5eVRvayA9IEVO
RF9UT0tFTjsgcmV0dXJuIHl5VG9rCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKGEpCi0vLyBUaGUg
Zm9sbG93aW5nIGxpbmUgaXMgbmVlZGVkIHRvIGJ1aWxkIHRoZSB0b2tlbml6ZXIgd2l0aCBhIGNv
bmRpdGlvbiBzdGFjay4KLS8vIFRoZSBtYWNybyBpcyB1c2VkIGluIHRoZSB0b2tlbml6ZXIgZ3Jh
bW1hciB3aXRoIGxpbmVzIGNvbnRhaW5pbmcKLS8vIEJFR0lOKG1lZGlhcXVlcmllcykgYW5kIEJF
R0lOKGluaXRpYWwpLiB5eV9zdGFydCBhY3RzIGFzIGluZGV4IHRvCi0vLyB0b2tlbml6ZXIgdHJh
bnNpdGlvbiB0YWJsZSwgYW5kICdtZWRpYXF1ZXJpZXMnIGFuZCAnaW5pdGlhbCcgYXJlCi0vLyBv
ZmZzZXQgbXVsdGlwbGllcnMgdGhhdCBzcGVjaWZ5IHdoaWNoIHRyYW5zaXRpb25zIGFyZSBhY3Rp
dmUKLS8vIGluIHRoZSB0b2tlbml6ZXIgZHVyaW5nIGluIGVhY2ggY29uZGl0aW9uICh0b2tlbml6
ZXIgc3RhdGUpLgotI2RlZmluZSBCRUdJTiB5eV9zdGFydCA9IDEgKyAyICoKLQotI2luY2x1ZGUg
InRva2VuaXplci5jcHAiCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBhZGMxOTAyLi5i
NWZjZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0zMTUsMTIgKzMxNSwyNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlSYW5nZS5zdGFy
dCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CiAgICAgdm9pZCByZXNldFByb3BlcnR5TWFy
a3MoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBVSU5U
X01BWDsgfQogICAgIGludCBsZXgodm9pZCogeXlsdmFsKTsKLSAgICBpbnQgdG9rZW4oKSB7IHJl
dHVybiB5eVRvazsgfQotICAgIFVDaGFyKiB0ZXh0KGludCogbGVuZ3RoKTsKLSAgICB2b2lkIGNv
dW50TGluZXMoKTsKLSAgICBpbnQgbGV4KCk7CisgICAgaW50IHRva2VuKCkgeyByZXR1cm4gbV90
b2tlbjsgfQogCiBwcml2YXRlOgorICAgIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0YXJ0KCk7
CisKKyAgICBzdGF0aWMgaW5saW5lIFVDaGFyKiBjaGVja1N0cmluZyhVQ2hhciosIFVDaGFyKTsK
KworICAgIHZvaWQgcGFyc2VFc2NhcGUoVUNoYXIqJik7CisgICAgaW5saW5lIGJvb2wgcGFyc2VJ
ZGVudGlmaWVyKFVDaGFyKiYpOworICAgIGlubGluZSB2b2lkIHBhcnNlU3RyaW5nKFVDaGFyKiYs
IFVDaGFyKTsKKyAgICBpbmxpbmUgdm9pZCBwYXJzZVVSSShVQ2hhciomLCBVQ2hhciomKTsKKyAg
ICBpbmxpbmUgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZSgpOworICAgIGJvb2wgcGFyc2VOdGhDaGls
ZCgpOworICAgIGJvb2wgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgaW5saW5lIHZvaWQgZGV0
ZWN0RnVuY3Rpb25Ub2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdE1lZGlhUXVlcnlU
b2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdE51bWJlclRva2VuKFVDaGFyKiwgaW50
KTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3REYXNoVG9rZW4oaW50KTsKKyAgICBpbmxpbmUgdm9p
ZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CisKICAgICB2b2lkIHNldFN0eWxlU2hlZXQoQ1NT
U3R5bGVTaGVldCopOwogICAgIHZvaWQgZW5zdXJlQ1NTVmFsdWVQb29sKCk7CiAKQEAgLTM1Niwx
NSArMzcwLDE3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHBhcnNlQ29sb3IoY29uc3QgU3RyaW5n
Jik7CiAKLSAgICBPd25BcnJheVB0cjxVQ2hhcj4gbV9kYXRhOwotICAgIFVDaGFyKiB5eXRleHQ7
Ci0gICAgVUNoYXIqIHl5X2NfYnVmX3A7Ci0gICAgVUNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGlu
dCB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBVQ2hhciogeXlfbGFzdF9hY2NlcHRpbmdf
Y3BvczsKLSAgICBpbnQgeXlsZW5nOwotICAgIGludCB5eVRvazsKLSAgICBpbnQgeXlfc3RhcnQ7
CisgICAgZW51bSBQYXJzaW5nTW9kZSB7CisgICAgICAgIE5vcm1hbE1vZGUsCisgICAgICAgIE1l
ZGlhUXVlcnlNb2RlLAorICAgICAgICBOdGhDaGlsZE1vZGUKKyAgICB9OworCisgICAgUGFyc2lu
Z01vZGUgbV9wYXJzaW5nTW9kZTsKKyAgICBPd25BcnJheVB0cjxVQ2hhcj4gbV9kYXRhU3RhcnQ7
CisgICAgVUNoYXIqIG1fZGF0YTsKKyAgICBVQ2hhciogbV90b2tlblN0YXJ0OworICAgIGludCBt
X3Rva2VuOwogICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1fbGFzdFNlbGVjdG9yTGlu
ZU51bWJlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4
IGIvU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjMjhkYmNhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy90b2tl
bml6ZXIuZmxleAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0lb3B0aW9uIGNhc2Ut
aW5zZW5zaXRpdmUKLSVvcHRpb24gbm95eXdyYXAKLSVvcHRpb24gOGJpdAotJW9wdGlvbiBzdGFj
awotJXMgbWVkaWFxdWVyeQotJXMgZm9ya2V5d29yZAotJXMgbnRoY2hpbGQKLQotaCAgICAgICAg
ICAgICAgIFswLTlhLWZBLUZdCi1ub25hc2NpaSAgICAgICAgW1wyMDAtXDM3N10KLXVuaWNvZGUg
ICAgICAgICBcXHtofXsxLDZ9WyBcdFxyXG5cZl0/Ci1lc2NhcGUgICAgICAgICAge3VuaWNvZGV9
fFxcWyAtflwyMDAtXDM3N10KLW5tc3RhcnQgICAgICAgICBbX2EtekEtWl18e25vbmFzY2lpfXx7
ZXNjYXBlfQotbm1jaGFyICAgICAgICAgIFtfYS16QS1aMC05LV18e25vbmFzY2lpfXx7ZXNjYXBl
fQotc3RyaW5nMSAgICAgICAgIFwiKFteXG5cclxmXFwiXXxcXHtubH18e2VzY2FwZX0pKlwiCi1z
dHJpbmcyICAgICAgICAgXCcoW15cblxyXGZcXCddfFxce25sfXx7ZXNjYXBlfSkqXCcKLQotaWRl
bnQgICAgICAgICAgIC0/e25tc3RhcnR9e25tY2hhcn0qCi1udW0gICAgICAgICAgICAgWzAtOV0r
fFswLTldKiIuIlswLTldKwotaW50bnVtICAgICAgICAgIFswLTldKwotc3RyaW5nICAgICAgICAg
IHtzdHJpbmcxfXx7c3RyaW5nMn0KLXVybCAgICAgICAgICAgICAoWyEjJCUmKi1+XXx7bm9uYXNj
aWl9fHtlc2NhcGV9KSoKLXcgICAgICAgICAgICAgICBbIFx0XHJcblxmXSoKLW5sICAgICAgICAg
ICAgICBcbnxcclxufFxyfFxmCi1yYW5nZSAgICAgICAgICAgXD97MSw2fXx7aH0oXD97MCw1fXx7
aH0oXD97MCw0fXx7aH0oXD97MCwzfXx7aH0oXD97MCwyfXx7aH0oXD8/fHtofSkpKSkpCi1udGgg
ICAgICAgICAgICAgW1wrLV0/e2ludG51bX0qbihbXHRcclxuIF0qW1wrLV1bXHRcclxuIF0qe2lu
dG51bX0pPwotbnRoZnVuYyAgICAgICAgICJudGgtIigiY2hpbGQifCJvZi10eXBlInwibGFzdC1j
aGlsZCJ8Imxhc3Qtb2YtdHlwZSIpCi0KLSUlCi0KLVwvXCpbXipdKlwqKyhbXi8qXVteKl0qXCor
KSpcLyB7Y291bnRMaW5lcygpOyAvKiBpZ25vcmUgY29tbWVudHMgKi8gfQotCi1bIFx0XHJcblxm
XSsgICAgICAgICAgICB7Y291bnRMaW5lcygpOyB5eVRvayA9IFdISVRFU1BBQ0U7IHJldHVybiB5
eVRvazt9Ci0KLSI8IS0tIiAgICAgICAgICAgICAgICAgIHt5eVRvayA9IFNHTUxfQ0Q7IHJldHVy
biB5eVRvazt9Ci0iLS0+IiAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBTR01MX0NEOyByZXR1
cm4geXlUb2s7fQotIn49IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0gSU5DTFVERVM7IHJl
dHVybiB5eVRvazt9Ci0ifD0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBEQVNITUFUQ0g7
IHJldHVybiB5eVRvazt9Ci0iXj0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBCRUdJTlNX
SVRIOyByZXR1cm4geXlUb2s7fQotIiQ9IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0gRU5E
U1dJVEg7IHJldHVybiB5eVRvazt9Ci0iKj0iICAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBD
T05UQUlOUzsgcmV0dXJuIHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJub3QiICAgICAgIHt5eVRvayA9
IE1FRElBX05PVDsgcmV0dXJuIHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJvbmx5IiAgICAgIHt5eVRv
ayA9IE1FRElBX09OTFk7IHJldHVybiB5eVRvazt9Ci08bWVkaWFxdWVyeT4iYW5kIiAgICAgICB7
eXlUb2sgPSBNRURJQV9BTkQ7IHJldHVybiB5eVRvazt9Ci0KLXtzdHJpbmd9ICAgICAgICAgICAg
ICAgIHt5eVRvayA9IFNUUklORzsgcmV0dXJuIHl5VG9rO30KLXtpZGVudH0gICAgICAgICAgICAg
ICAgIHt5eVRvayA9IElERU5UOyByZXR1cm4geXlUb2s7fQotPG50aGNoaWxkPntudGh9ICAgICAg
ICAge3l5VG9rID0gTlRIOyByZXR1cm4geXlUb2s7fQotPG50aGNoaWxkPiIpIiAgICAgICAgICAg
e0JFR0lOKElOSVRJQUwpOyB5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazt9Ci0KLSIjInto
fSsgICAgICAgICAgICAgICAgIHt5eVRvayA9IEhFWDsgcmV0dXJuIHl5VG9rO30KLSIjIntpZGVu
dH0gICAgICAgICAgICAgIHt5eVRvayA9IElEU0VMOyByZXR1cm4geXlUb2s7fQotCi0iQGltcG9y
dCIgICAgICAgICAgICAgICB7QkVHSU4obWVkaWFxdWVyeSk7IHl5VG9rID0gSU1QT1JUX1NZTTsg
cmV0dXJuIHl5VG9rO30KLSJAcGFnZSIgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBBR0VfU1lN
OyByZXR1cm4geXlUb2s7fQotIkB0b3AtbGVmdC1jb3JuZXIiICAgICAge3l5VG9rID0gVE9QTEVG
VENPUk5FUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1sZWZ0IiAgICAgICAgICAgICB7eXlU
b2sgPSBUT1BMRUZUX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAdG9wLWNlbnRlciIgICAgICAgICAg
IHt5eVRvayA9IFRPUENFTlRFUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1yaWdodCIgICAg
ICAgICAgICB7eXlUb2sgPSBUT1BSSUdIVF9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1yaWdo
dC1jb3JuZXIiICAgICB7eXlUb2sgPSBUT1BSSUdIVENPUk5FUl9TWU07IHJldHVybiB5eVRvazt9
Ci0iQGJvdHRvbS1sZWZ0LWNvcm5lciIgICB7eXlUb2sgPSBCT1RUT01MRUZUQ09STkVSX1NZTTsg
cmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLWxlZnQiICAgICAgICAgIHt5eVRvayA9IEJPVFRPTUxF
RlRfU1lNOyByZXR1cm4geXlUb2s7fQotIkBib3R0b20tY2VudGVyIiAgICAgICAge3l5VG9rID0g
Qk9UVE9NQ0VOVEVSX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLXJpZ2h0IiAgICAgICAg
IHt5eVRvayA9IEJPVFRPTVJJR0hUX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLXJpZ2h0
LWNvcm5lciIgIHt5eVRvayA9IEJPVFRPTVJJR0hUQ09STkVSX1NZTTsgcmV0dXJuIHl5VG9rO30K
LSJAbGVmdC10b3AiICAgICAgICAgICAgIHt5eVRvayA9IExFRlRUT1BfU1lNOyByZXR1cm4geXlU
b2s7fQotIkBsZWZ0LW1pZGRsZSIgICAgICAgICAge3l5VG9rID0gTEVGVE1JRERMRV9TWU07IHJl
dHVybiB5eVRvazt9Ci0iQGxlZnQtYm90dG9tIiAgICAgICAgICB7eXlUb2sgPSBMRUZUQk9UVE9N
X1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtdG9wIiAgICAgICAgICAgIHt5eVRvayA9IFJJ
R0hUVE9QX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtbWlkZGxlIiAgICAgICAgIHt5eVRv
ayA9IFJJR0hUTUlERExFX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtYm90dG9tIiAgICAg
ICAgIHt5eVRvayA9IFJJR0hUQk9UVE9NX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAbWVkaWEiICAg
ICAgICAgICAgICAgIHtCRUdJTihtZWRpYXF1ZXJ5KTsgeXlUb2sgPSBNRURJQV9TWU07IHJldHVy
biB5eVRvazt9Ci0iQGZvbnQtZmFjZSIgICAgICAgICAgICB7eXlUb2sgPSBGT05UX0ZBQ0VfU1lN
OyByZXR1cm4geXlUb2s7fQotIkBjaGFyc2V0IiAgICAgICAgICAgICAge3l5VG9rID0gQ0hBUlNF
VF9TWU07IHJldHVybiB5eVRvazt9Ci0iQG5hbWVzcGFjZSIgICAgICAgICAgICB7eXlUb2sgPSBO
QU1FU1BBQ0VfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1ydWxlIiAgICAgICAgIHt5
eVRvayA9IFdFQktJVF9SVUxFX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQtZGVjbHMi
ICAgICAgICB7eXlUb2sgPSBXRUJLSVRfREVDTFNfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdl
YmtpdC12YWx1ZSIgICAgICAgIHt5eVRvayA9IFdFQktJVF9WQUxVRV9TWU07IHJldHVybiB5eVRv
azsgfQotIkAtd2Via2l0LW1lZGlhcXVlcnkiICAge0JFR0lOKG1lZGlhcXVlcnkpOyB5eVRvayA9
IFdFQktJVF9NRURJQVFVRVJZX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQtc2VsZWN0
b3IiICAgICB7eXlUb2sgPSBXRUJLSVRfU0VMRUNUT1JfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJA
LXdlYmtpdC1rZXlmcmFtZXMiICAgIHt5eVRvayA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOyByZXR1
cm4geXlUb2s7IH0KLSJALXdlYmtpdC1rZXlmcmFtZS1ydWxlIiB7eXlUb2sgPSBXRUJLSVRfS0VZ
RlJBTUVfUlVMRV9TWU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LXJlZ2lvbiIgICAgICAg
e3l5VG9rID0gV0VCS0lUX1JFR0lPTl9SVUxFX1NZTTsgcmV0dXJuIHl5VG9rO30KLQotIkAie2lk
ZW50fSAgICAgICAgICAgICAge3l5VG9rID0gQVRLRVlXT1JEOyByZXR1cm4geXlUb2s7IH0KLQot
IiEie3d9ImltcG9ydGFudCIgICAgICAge3l5VG9rID0gSU1QT1JUQU5UX1NZTTsgcmV0dXJuIHl5
VG9rO30KLQote251bX1lbSAgICAgICAgICAgICAgICAge3l5VG9rID0gRU1TOyByZXR1cm4geXlU
b2s7fQote251bX1yZW0gICAgICAgICAgICAgICAge3l5VG9rID0gUkVNUzsgcmV0dXJuIHl5VG9r
O30KLXtudW19X19xZW0gICAgICAgICAgICAgIHt5eVRvayA9IFFFTVM7IHJldHVybiB5eVRvazt9
IC8qIHF1aXJreSBlbXMgKi8KLXtudW19ZXggICAgICAgICAgICAgICAgIHt5eVRvayA9IEVYUzsg
cmV0dXJuIHl5VG9rO30KLXtudW19cHggICAgICAgICAgICAgICAgIHt5eVRvayA9IFBYUzsgcmV0
dXJuIHl5VG9rO30KLXtudW19Y20gICAgICAgICAgICAgICAgIHt5eVRvayA9IENNUzsgcmV0dXJu
IHl5VG9rO30KLXtudW19bW0gICAgICAgICAgICAgICAgIHt5eVRvayA9IE1NUzsgcmV0dXJuIHl5
VG9rO30KLXtudW19aW4gICAgICAgICAgICAgICAgIHt5eVRvayA9IElOUzsgcmV0dXJuIHl5VG9r
O30KLXtudW19cHQgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBUUzsgcmV0dXJuIHl5VG9rO30K
LXtudW19cGMgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBDUzsgcmV0dXJuIHl5VG9rO30KLXtu
dW19ZGVnICAgICAgICAgICAgICAgIHt5eVRvayA9IERFR1M7IHJldHVybiB5eVRvazt9Ci17bnVt
fXJhZCAgICAgICAgICAgICAgICB7eXlUb2sgPSBSQURTOyByZXR1cm4geXlUb2s7fQote251bX1n
cmFkICAgICAgICAgICAgICAge3l5VG9rID0gR1JBRFM7IHJldHVybiB5eVRvazt9Ci17bnVtfXR1
cm4gICAgICAgICAgICAgICB7eXlUb2sgPSBUVVJOUzsgcmV0dXJuIHl5VG9rO30KLXtudW19bXMg
ICAgICAgICAgICAgICAgIHt5eVRvayA9IE1TRUNTOyByZXR1cm4geXlUb2s7fQote251bX1zICAg
ICAgICAgICAgICAgICAge3l5VG9rID0gU0VDUzsgcmV0dXJuIHl5VG9rO30KLXtudW19SHogICAg
ICAgICAgICAgICAgIHt5eVRvayA9IEhFUlRaOyByZXR1cm4geXlUb2s7fQote251bX1rSHogICAg
ICAgICAgICAgICAge3l5VG9rID0gS0hFUlRaOyByZXR1cm4geXlUb2s7fQote251bX17aWRlbnR9
ICAgICAgICAgICAge3l5VG9rID0gRElNRU47IHJldHVybiB5eVRvazt9Ci17bnVtfXtpZGVudH1c
KyAgICAgICAgICB7eXlUb2sgPSBJTlZBTElERElNRU47IHJldHVybiB5eVRvazt9Ci17bnVtfSUr
ICAgICAgICAgICAgICAgICB7eXlUb2sgPSBQRVJDRU5UQUdFOyByZXR1cm4geXlUb2s7fQote2lu
dG51bX0gICAgICAgICAgICAgICAge3l5VG9rID0gSU5URUdFUjsgcmV0dXJuIHl5VG9rO30KLXtu
dW19ICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IEZMT0FUVE9LRU47IHJldHVybiB5eVRvazt9
Ci0KLSItd2Via2l0LWFueSgiICAgICAgICAgIHt5eVRvayA9IEFOWUZVTkNUSU9OOyByZXR1cm4g
eXlUb2s7fQotIm5vdCgiICAgICAgICAgICAgICAgICAge3l5VG9rID0gTk9URlVOQ1RJT047IHJl
dHVybiB5eVRvazt9Ci0idXJsKCJ7d317c3RyaW5nfXt3fSIpIiB7eXlUb2sgPSBVUkk7IHJldHVy
biB5eVRvazt9Ci0idXJsKCJ7d317dXJsfXt3fSIpIiAgICB7eXlUb2sgPSBVUkk7IHJldHVybiB5
eVRvazt9Ci0iLXdlYmtpdC1jYWxjKCIgICAgICAgICB7eXlUb2sgPSBDQUxDRlVOQ1RJT047IHJl
dHVybiB5eVRvazt9Ci0iLXdlYmtpdC1taW4oIiAgICAgICAgICB7eXlUb2sgPSBNSU5GVU5DVElP
TjsgcmV0dXJuIHl5VG9rO30KLSItd2Via2l0LW1heCgiICAgICAgICAgIHt5eVRvayA9IE1BWEZV
TkNUSU9OOyByZXR1cm4geXlUb2s7fQote250aGZ1bmN9IigiICAgICAgICAgICAge0JFR0lOKG50
aGNoaWxkKTsgeXlUb2sgPSBGVU5DVElPTjsgcmV0dXJuIHl5VG9rO30KLXtpZGVudH0iKCIgICAg
ICAgICAgICAgIHt5eVRvayA9IEZVTkNUSU9OOyByZXR1cm4geXlUb2s7fQotCi1VXCt7cmFuZ2V9
ICAgICAgICAgICAgICB7eXlUb2sgPSBVTklDT0RFUkFOR0U7IHJldHVybiB5eVRvazt9Ci1VXCt7
aH17MSw2fS17aH17MSw2fSAgICB7eXlUb2sgPSBVTklDT0RFUkFOR0U7IHJldHVybiB5eVRvazt9
Ci0KLTxtZWRpYXF1ZXJ5PiJ7IiAgICAgICAgIHwKLTxtZWRpYXF1ZXJ5PiI7IiAgICAgICAgIHtC
RUdJTihJTklUSUFMKTsgeXlUb2sgPSAqeXl0ZXh0OyByZXR1cm4geXlUb2s7IH0KLS4gICAgICAg
ICAgICAgICAgICAgICAgIHt5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazt9Ci0KLSUlCmRp
ZmYgLS1naXQgYS93c2NyaXB0IGIvd3NjcmlwdAppbmRleCBhOTg5OWI2Li5hZGZlNjM3IDEwMDY0
NAotLS0gYS93c2NyaXB0CisrKyBiL3dzY3JpcHQKQEAgLTI3OCw3ICsyNzgsNiBAQCBkZWYgYnVp
bGQoYmxkKToKICAgICAgICAgIyBpbnRlcm1lZGlhdGUgc291cmNlcwogICAgICAgICBleGNsdWRl
cy5hcHBlbmQoJ0RvY1R5cGVTdHJpbmdzLmNwcCcpCiAgICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgn
SFRNTEVudGl0eU5hbWVzLmNwcCcpCi0gICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgndG9rZW5pemVy
LmNwcCcpCiAKICAgICAgICAgIyBRdCBzcGVjaWZpYyBmaWxlIGluIGNvbW1vbiBzb3VyY2VzCiAg
ICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgnQ29udGV4dFNoYWRvdy5jcHAnKQotLSAKMS43LjIuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123705</attachid>
            <date>2012-01-24 01:21:45 -0800</date>
            <delta_ts>2012-01-24 13:04:10 -0800</delta_ts>
            <desc>patch update</desc>
            <filename>0001-css-lexer.patch</filename>
            <type>text/plain</type>
            <size>80499</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAxYjNjODI1MTBiYjI1NjU3YjA3ZDVmYWIxZGFlYzc2MTllZDZhYjdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogVHVlLCAyNCBKYW4gMjAxMiAwMDozNDoxOCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGNz
cy1sZXhlcgoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTEgKwogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDExIC0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA3MSArCiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5t
YWtlICAgICAgICAgICAgICAgICB8ICAgIDggLQogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMucHJpICAgICAgICAgICAgICAgICAgfCAgIDExIC0KIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSAtCiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDMgLQogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAgICAgICAgICAgICAgfCAgIDE3IC0KIC4uLi9XZWJDb3Jl
Lmd5cC9zY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5ICAgIHwgIDEwMSAtLQogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAgIHwgICAgNCAt
CiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8ICAg
IDQgLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgICAgICAgICAgICAgICAgICAg
fCAxNDU4ICsrKysrKysrKysrKysrKystLS0tCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmggICAgICAgICAgICAgICAgICAgICB8ICAgNDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy90b2tl
bml6ZXIuZmxleCAgICAgICAgICAgICAgICAgIHwgIDEzMCAtLQogd3NjcmlwdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KIDE2IGZpbGVzIGNoYW5n
ZWQsIDEzMTUgaW5zZXJ0aW9ucygrKSwgNTYzIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0b2tlbml6
ZXIucHkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZs
ZXgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZjhiYTdmMy4uZjU4
ZjAyMyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTAxLTI0ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQ3VzdG9tIHdyaXR0ZW4gQ1NTIGxleGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB0b2tlbml6ZXIuY3BwIGZyb20gaW50ZXJt
ZWRpYXRlIHNvdXJjZXMuCisKKyAgICAgICAgKiB3c2NyaXB0OgorCiAyMDEyLTAxLTIxICBQcmlp
dCBMYWVzICA8cGxhZXNAcGxhZXMub3JnPgogCiAgICAgICAgIFtHVEtdW1BBVENIXSBFbmFibGUg
TWF0aE1MIHN1cHBvcnQgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3YzVjOTAx
Li40YjJjMjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjMyMiwxNyArMjMyMiw2IEBAIEFE
RF9DVVNUT01fQ09NTUFORCgKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUyAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0vSFRNTEVudGl0eVRhYmxlLmNwcCkKIAogCi0jIEdlbmVyYXRl
IHRva2VuaXplcgotRklMRShUT19OQVRJVkVfUEFUSCAke1BFUkxfRVhFQ1VUQUJMRX0gUEVSTF9F
WEVDVVRBQkxFX05BVElWRV9QQVRIKQotQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vdG9rZW5pemVyLmNwcAotICAgIE1BSU5fREVQ
RU5ERU5DWSAke1dFQkNPUkVfRElSfS9jc3MvbWFrZXRva2VuaXplcgotICAgIERFUEVORFMgJHtX
RUJDT1JFX0RJUn0vY3NzL3Rva2VuaXplci5mbGV4Ci0gICAgQ09NTUFORCAke0ZMRVhfRVhFQ1VU
QUJMRX0gLXQgJHtXRUJDT1JFX0RJUn0vY3NzL3Rva2VuaXplci5mbGV4IHwgJHtQRVJMX0VYRUNV
VEFCTEVfTkFUSVZFX1BBVEh9ICR7V0VCQ09SRV9ESVJ9L2Nzcy9tYWtldG9rZW5pemVyID4gJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L3Rva2VuaXplci5jcHAKLSAgICBWRVJCQVRJTSkK
LUFERF9TT1VSQ0VfV0VCQ09SRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9j
c3MvQ1NTUGFyc2VyLmNwcCB0b2tlbml6ZXIuY3BwKQotCi0KICMgUmVwbGFjZSAiOyIgd2l0aCAi
c3BhY2UiIGluIG9yZGVyIHRvIHJlY29nbml6ZSBmZWF0dXJlIGRlZmluaXRpb24gaW4gY3NzIGZp
bGVzLgogU0VUKEZFQVRVUkVfREVGSU5FU19XSVRIX1NQQUNFX1NFUEFSQVRPUiAiIikKIEZPUkVB
Q0goX2ZlYXR1cmUgJHtGRUFUVVJFX0RFRklORVN9KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGQxY2ExMDcuLjQ0
N2NkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAxMi0wMS0yNCAgWm9sdGFuIEhl
cmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorCisgICAgICAgIEN1c3RvbSB3cml0dGVuIENT
UyBsZXhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzAxMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIHJlcGxhY2VzIHRoZSBmbGV4IGJhc2VkIENTUyBsZXhlciB0byBhCisgICAgICAg
IG5ldywgY3VzdG9tIHdyaXR0ZW4gb25lLiBUaGUgbmV3IGNvZGUgaXMgbW9yZQorICAgICAgICB0
aGFuIDIgdGltZXMgZmFzdGVyIGFjY29yZGluZyB0byBvcHJvZmlsZSBhbmQgQ1BVCisgICAgICAg
IGN5Y2xlIGNvdW50ZXJzLgorCisgICAgICAgIFRoZSBjb2RlIHN0cnVjdHVyZSBpcyBxdWl0ZSBz
dHJhaWdodGZvcndhcmQ6IGl0IGNob29zZQorICAgICAgICB0aGUgcG9zc2libGUgdG9rZW4gZ3Jv
dXAgYmFzZWQgb24gdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgICAgICBhbmQgZW1wbG95IHV0aWxp
dHkgZnVuY3Rpb25zIHRvIHBhcnNlIHRoZSBsb25nZXIgdGhhbgorICAgICAgICBvbmUgY2hhcmFj
dGVyIGxvbmcgb25lcy4gTW9zdCBvZiB0aGUgdXRpbGl0aWVzIGFyZSBpbmxpbmUKKyAgICAgICAg
dG8gbWFrZSB0aGUgbGV4ZXIgZmFzdC4KKworICAgICAgICBBbGwgYnVpbGQgc3lzdGVtcyB1cGRh
dGVkLiBJbmNsdWRpbmcgcmVtb3ZpbmcgdGhlIGZsZXggc3VwcG9ydC4KKworICAgICAgICBFeGlz
dGluZyB0ZXN0cyBjb3ZlciB0aGlzIGZlYXR1cmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLnByaToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0b2tlbml6ZXIucHk6IFJlbW92ZWQuCisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxvd2VyY2FzZUNo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0Nhc2VsZXNzRXF1YWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpDU1NQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXR1cFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpbXBsZUxlbmd0aFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1pZ2h0QmVSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6
Om1pZ2h0QmVSR0IpOgorICAgICAgICAoV2ViQ29yZTo6aXNDU1NMZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6aXNDU1NFc2NhcGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNVUklMZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2gpOgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tFc2NhcGUpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcFdoaXRlU3BhY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6aXNJZGVudGlmaWVyU3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjaGVja1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlRXNjYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
cGFyc2VJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVVSSSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVW5pY29kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VOdGhDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnBhcnNlTnRoQ2hpbGRFeHRyYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmRldGVj
dEZ1bmN0aW9uVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RNZWRp
YVF1ZXJ5VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3ROdW1iZXJU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmRldGVjdERhc2hUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpsZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJr
U2VsZWN0b3JMaXN0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrU2Vs
ZWN0b3JMaXN0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVCb2R5
U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUHJvcGVydHlTdGFydCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZCk6CisgICAgICAgICogY3NzL0NT
U1BhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjp0b2tlbik6CisgICAgICAg
ICogY3NzL3Rva2VuaXplci5mbGV4OiBSZW1vdmVkLgorCiAyMDEyLTAxLTIzICBTY290dCBHcmFo
YW0gIDxzY290dG1nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBdm9pZCBzcHVyaW91cyByZWJ1
aWxkcyBvbiB2czIwMTAgZHVlIHRvIERlcml2ZWRTb3VyY2VzIG5vdCBleGlzdGluZwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMTdkM2NjMS4uMzkwMDAwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCkBAIC02MTQsNyArNjE0LDYgQEAgYWxsIDogXAogICAgIE1hdGhN
TEVsZW1lbnRGYWN0b3J5LmNwcCBcCiAgICAgTWF0aE1MTmFtZXMuY3BwIFwKICAgICBYUGF0aEdy
YW1tYXIuY3BwIFwKLSAgICB0b2tlbml6ZXIuY3BwIFwKICMKIAogIyAtLS0tLS0tLQpAQCAtNzEx
LDEzICs3MTAsNiBAQCBDb2xvckRhdGEuY3BwIDogcGxhdGZvcm0vQ29sb3JEYXRhLmdwZXJmICQo
V2ViQ29yZSkvbWFrZS1oYXNoLXRvb2xzLnBsCiAKICMgLS0tLS0tLS0KIAotIyBDU1MgdG9rZW5p
emVyCi0KLXRva2VuaXplci5jcHAgOiBjc3MvdG9rZW5pemVyLmZsZXggY3NzL21ha2V0b2tlbml6
ZXIKLQlmbGV4IC10ICQ8IHwgcGVybCAkKFdlYkNvcmUpL2Nzcy9tYWtldG9rZW5pemVyID4gJEAK
LQotIyAtLS0tLS0tLQotCiAjIENTUyBncmFtbWFyCiAjIE5PVEU6IE9sZGVyIHZlcnNpb25zIG9m
IGJpc29uIGRvIG5vdCBpbmplY3QgYW4gaW5jbHVzaW9uIGd1YXJkLCBzbyB3ZSBhZGQgb25lLgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKaW5kZXggMDZkN2ExNi4uODdiNmEzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLnByaQpAQCAtMjYsOCArMjYsNiBAQCBTVkdfTkFNRVMgPSAkJFBX
RC9zdmcvc3ZndGFncy5pbgogCiBYTElOS19OQU1FUyA9ICQkUFdEL3N2Zy94bGlua2F0dHJzLmlu
CiAKLVRPS0VOSVpFUiA9ICQkUFdEL2Nzcy90b2tlbml6ZXIuZmxleAotCiBDU1NCSVNPTiA9ICQk
UFdEL2Nzcy9DU1NHcmFtbWFyLnkKIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9MSkg
ewpAQCAtNzU3LDE1ICs3NTUsNiBAQCBhcnJheUJ1ZmZlclZpZXdDdXN0b21TY3JpcHQuY29tbWFu
ZHMgPSBwZXJsICQkUFdEL2luc3BlY3Rvci94eGQucGwgVjhBcnJheUJ1ZmZlcgogYXJyYXlCdWZm
ZXJWaWV3Q3VzdG9tU2NyaXB0LmFkZF9vdXRwdXRfdG9fc291cmNlcyA9IGZhbHNlCiBHRU5FUkFU
T1JTICs9IGFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdAogCi0jIEdFTkVSQVRPUiAzOiB0b2tl
bml6ZXIgKGZsZXgpCi10b2tlbml6ZXIub3V0cHV0ID0gJHtRTUFLRV9GSUxFX0JBU0V9LmNwcAot
dG9rZW5pemVyLmlucHV0ID0gVE9LRU5JWkVSCi10b2tlbml6ZXIuc2NyaXB0ID0gJCRQV0QvY3Nz
L21ha2V0b2tlbml6ZXIKLXRva2VuaXplci5jb21tYW5kcyA9IGZsZXggLXQgPCAke1FNQUtFX0ZJ
TEVfTkFNRX0gfCBwZXJsICQkdG9rZW5pemVyLnNjcmlwdCA+ICR7UU1BS0VfRklMRV9PVVR9Ci0j
IHRva2VuaXplci5jcHAgaXMgaW5jbHVkZWQgaW50byBDU1NQYXJzZXIuY3BwCi10b2tlbml6ZXIu
YWRkX291dHB1dF90b19zb3VyY2VzID0gZmFsc2UKLUdFTkVSQVRPUlMgKz0gdG9rZW5pemVyCi0K
ICMgR0VORVJBVE9SIDQ6IENTUyBncmFtbWFyCiBjc3NiaXNvbi5vdXRwdXQgPSAke1FNQUtFX0ZJ
TEVfQkFTRX0uY3BwCiBjc3NiaXNvbi5pbnB1dCA9IENTU0JJU09OCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CmluZGV4IDI0ZWU3NGQuLmQ5OTBkOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC02MzMsMTAg
KzYzMyw2IEBAIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSFRNTEVudGl0eVRhYmxlLmNwcDogJChX
ZWJDb3JlKS9odG1sL3BhcnNlci9IVE1MRW50aXR5TmFtCiBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0NvbG9yRGF0YS5jcHA6ICQoV2ViQ29yZSkvcGxhdGZvcm0vQ29sb3JEYXRhLmdwZXJmICQoV2Vi
Q29yZSkvbWFrZS1oYXNoLXRvb2xzLnBsCiAJJChBTV9WX0dFTikkKFBFUkwpICQoV2ViQ29yZSkv
bWFrZS1oYXNoLXRvb2xzLnBsICQoR0VOU09VUkNFU19XRUJDT1JFKSAkKFdlYkNvcmUpL3BsYXRm
b3JtL0NvbG9yRGF0YS5ncGVyZgogCi0jIENTUyB0b2tlbml6ZXIKLURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvdG9rZW5pemVyLmNwcCA6ICQoV2ViQ29yZSkvY3NzL3Rva2VuaXplci5mbGV4ICQoV2Vi
Q29yZSkvY3NzL21ha2V0b2tlbml6ZXIKLQkkKEFNX1ZfR0VOKSQoRkxFWCkgLXQgJDwgfCAkKFBF
UkwpICQoV2ViQ29yZSkvY3NzL21ha2V0b2tlbml6ZXIgPiAkQAotCiAjIENTUyBncmFtbWFyCiAK
ICMgTk9URTogb2xkZXIgdmVyc2lvbnMgb2YgYmlzb24gZG8gbm90IGluamVjdCBhbiBpbmNsdXNp
b24gZ3VhcmQsIHNvIHdlIGRvIGl0CkBAIC05MjQsNyArOTIwLDYgQEAgRVhUUkFfRElTVCArPSBc
CiAJU291cmNlL1dlYkNvcmUvY3NzL3N2Zy5jc3MgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NQcm9wZXJ0eU5hbWVzLmluIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTVmFsdWVLZXl3
b3Jkcy5pbiBcCi0JU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4IFwKIAlTb3VyY2Uv
V2ViQ29yZS9jc3Mvdmlldy1zb3VyY2UuY3NzIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Rm9udEZhbWlseU5hbWVzLmluIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRGYWN0b3J5Lmlu
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDUzN2UzZDIuLmY2MTY3YzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMSw2ICsxLDMgQEAKLXdlYmNvcmVfYnVp
bHRfbm9zb3VyY2VzICs9IFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL3Rva2VuaXplci5jcHAK
LQogd2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0NT
U0dyYW1tYXIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0NTU0dyYW1tYXIuaCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDBjZmQwZTQuLmY2YmZkNmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC05MTEsMjMgKzkxMSw2
IEBACiAgICAgICAgICAgXSwKICAgICAgICAgfSwKICAgICAgICAgewotICAgICAgICAgICdhY3Rp
b25fbmFtZSc6ICd0b2tlbml6ZXInLAotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAg
ICAnLi4vY3NzL21ha2V0b2tlbml6ZXInLAotICAgICAgICAgICAgJy4uL2Nzcy90b2tlbml6ZXIu
ZmxleCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvdG9rZW5pemVyLmNwcCcsCi0gICAg
ICAgICAgXSwKLSAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgJ3B5dGhvbicsCi0g
ICAgICAgICAgICAnc2NyaXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5weScsCi0gICAgICAgICAg
ICAnPEAoX291dHB1dHMpJywKLSAgICAgICAgICAgICctLScsCi0gICAgICAgICAgICAnPEAoX2lu
cHV0cyknCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewogICAgICAgICAgICdh
Y3Rpb25fbmFtZSc6ICdkZXJpdmVkX3NvdXJjZXNfYWxsX2luX29uZScsCiAgICAgICAgICAgJ2lu
cHV0cyc6IFsKICAgICAgICAgICAgICdzY3JpcHRzL2FjdGlvbl9kZXJpdmVkc291cmNlc2FsbGlu
b25lLnB5JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL3NjcmlwdHMv
YWN0aW9uX21ha2V0b2tlbml6ZXIucHkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9zY3Jp
cHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmNGEyOGVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL3Njcmlw
dHMvYWN0aW9uX21ha2V0b2tlbml6ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBA
QAotIyEvdXNyL2Jpbi9weXRob24KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIAotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
IyBtZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotIwotIyBDb3B5cmln
aHQgKGMpIDIwMDkgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyB1c2FnZTog
YWN0aW9uX21ha2V0b2tlbml6ZXIucHkgT1VUUFVUUyAtLSBJTlBVVFMKLSMKLSMgTXVsdGlwbGUg
SU5QVVRTIG1heSBiZSBsaXN0ZWQuIFRoZSBzZWN0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IC0tIGFy
Z3VtZW50cy4KLSMKLSMgT1VUUFVUUyBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgaXRlbTogYSBwYXRo
IHRvIHRva2VuaXplci5jcHAuCi0jCi0jIElOUFVUUyBtdXN0IGNvbnRhaW4gZXhhY3RseSB0d28g
aXRlbXMuIFRoZSBmaXJzdCBpdGVtIG11c3QgYmUgdGhlIHBhdGggdG8KLSMgbWFrZXRva2VuaXpl
ci4gVGhlIHNlY29uZCBpdGVtIG11c3QgYmUgdGhlIHBhdGggdG8gdG9rZW5pemVyLmZsZXguCi0K
LQotaW1wb3J0IG9zCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotCi0KLWRlZiBTcGxp
dEFyZ3NJbnRvU2VjdGlvbnMoYXJncyk6Ci0gICAgc2VjdGlvbnMgPSBbXQotICAgIHdoaWxlIGxl
bihhcmdzKSA+IDA6Ci0gICAgICAgIGlmIG5vdCAnLS0nIGluIGFyZ3M6Ci0gICAgICAgICAgICAj
IElmIHRoZXJlIGlzIG5vICctLScgbGVmdCwgZXZlcnl0aGluZyByZW1haW5pbmcgaXMgYW4gZW50
aXJlIHNlY3Rpb24uCi0gICAgICAgICAgICBkYXNoZXMgPSBsZW4oYXJncykKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIGRhc2hlcyA9IGFyZ3MuaW5kZXgoJy0tJykKLQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoYXJnc1s6ZGFzaGVzXSkKLQotICAgICAgICAjIE5leHQgdGltZSB0aHJvdWdo
IHRoZSBsb29wLCBsb29rIGF0IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhpcyAnLS0nLgotICAgICAgICBp
ZiBkYXNoZXMgKyAxID09IGxlbihhcmdzKToKLSAgICAgICAgICAgICMgSWYgdGhlICctLScgaXMg
YXQgdGhlIGVuZCBvZiB0aGUgbGlzdCwgd2Ugd29uJ3QgY29tZSBiYWNrIHRocm91Z2ggdGhlCi0g
ICAgICAgICAgICAjIGxvb3AgYWdhaW4uIEFkZCBhbiBlbXB0eSBzZWN0aW9uIG5vdyBjb3JyZXNw
b25kaW5nIHRvIHRoZSBub3RoaW5nbmVzcwotICAgICAgICAgICAgIyBmb2xsb3dpbmcgdGhlIGZp
bmFsICctLScuCi0gICAgICAgICAgICBhcmdzID0gW10KLSAgICAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChhcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXJncyA9IGFyZ3NbZGFzaGVz
ICsgMTpdCi0KLSAgICByZXR1cm4gc2VjdGlvbnMKLQotCi1kZWYgbWFpbihhcmdzKToKLSAgICBz
ZWN0aW9ucyA9IFNwbGl0QXJnc0ludG9TZWN0aW9ucyhhcmdzWzE6XSkKLSAgICBhc3NlcnQgbGVu
KHNlY3Rpb25zKSA9PSAyCi0gICAgKG91dHB1dHMsIGlucHV0cykgPSBzZWN0aW9ucwotCi0gICAg
YXNzZXJ0IGxlbihvdXRwdXRzKSA9PSAxCi0gICAgb3V0cHV0ID0gb3V0cHV0c1swXQotCi0gICAg
YXNzZXJ0IGxlbihpbnB1dHMpID09IDIKLSAgICBtYWtldG9rZW5pemVyID0gaW5wdXRzWzBdCi0g
ICAgZmxleElucHV0ID0gaW5wdXRzWzFdCi0KLSAgICAjIERvIGl0LiBjaGVja19jYWxsIGlzIG5l
dyBpbiAyLjUsIHNvIHNpbXVsYXRlIGl0cyBiZWhhdmlvciB3aXRoIGNhbGwgYW5kCi0gICAgIyBh
c3NlcnQuCi0gICAgb3V0ZmlsZSA9IG9wZW4ob3V0cHV0LCAnd2InKQotICAgIHAxID0gc3VicHJv
Y2Vzcy5Qb3BlbihbJ2ZsZXgnLCAnLXQnLCBmbGV4SW5wdXRdLCBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFKQotICAgIHAyID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BlcmwnLCBtYWtldG9rZW5pemVyXSwg
c3RkaW49cDEuc3Rkb3V0LCBzdGRvdXQ9b3V0ZmlsZSkKLQotICAgIHIxID0gcDEud2FpdCgpCi0g
ICAgcjIgPSBwMi53YWl0KCkKLSAgICBhc3NlcnQgcjEgPT0gMAotICAgIGFzc2VydCByMiA9PSAw
Ci0KLSAgICByZXR1cm4gMAotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lz
LmV4aXQobWFpbihzeXMuYXJndikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZGMxZGI2NS4uMGI2MmJj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzkyNiw3ICs3OTI2LDYgQEAKICAgICAgICAgICAgICc8
KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL1hNTFZpZXdlckpTLmgnLAogICAg
ICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvWFBhdGhHcmFt
bWFyLmNwcCcsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9YUGF0aEdyYW1tYXIuaCcsCi0gICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS90b2tlbml6ZXIuY3BwJywKICAgICAgICAgXSwKICAgICAgICAgJ2V4
cG9ydF9maWxlX2dlbmVyYXRvcl9maWxlcyc6IFsKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0V4cG9ydEZpbGVHZW5lcmF0b3IuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZjRlNzNjNC4u
MDc2NDIxNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTM1Mzc0LDEwICszNTM3NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1x0b2tlbml6ZXIuZmxleCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU0ZpbHRlclZh
bHVlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDFjZjJlMy4uNTQ2MGRiNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
ODUyMSw3ICs4NTIxLDYgQEAKIAkJNjU2NTgxNDQwOUQxMzA0MzAwMEU2MUQ3IC8qIENTU0dyYW1t
YXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0dyYW1tYXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTY1ODE0NzA5RDEzMDQzMDAwRTYx
RDcgLyogQ1NTVmFsdWVLZXl3b3Jkcy5ncGVyZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ1NT
VmFsdWVLZXl3b3Jkcy5ncGVyZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2NTgx
NDgwOUQxMzA0MzAwMEU2MUQ3IC8qIENTU1ZhbHVlS2V5d29yZHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ZhbHVlS2V5d29yZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNjU2NTgxNEMwOUQxMzA0MzAwMEU2MUQ3IC8qIHRva2VuaXplci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdG9rZW5pemVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2NTgxQUMwOUQxNEVFNjAwMEU2MUQ3IC8qIENoYXJz
ZXREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGFyc2V0
RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MUFFMDlEMTRFRTYw
MDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVXNlckFnZW50U3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjU2NTgxQUYwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRz
RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckFnZW50
U3R5bGVTaGVldHNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDM5
LDcgKzEwMDM4LDYgQEAKIAkJOTNDQTRDOUQwOURGOTNGQTAwREY4Njc3IC8qIG1ha2V2YWx1ZXMu
cGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gbWFrZXZhbHVlcy5wbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNDQTRDOUYwOURGOTNGQTAwREY4Njc3IC8qIHF1aXJrcy5jc3MgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gcXVpcmtzLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTNDQTRDQTIwOURGOTNGQTAwREY4Njc3IC8qIHN2Zy5jc3MgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gc3ZnLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNDQTRDQTMw
OURGOTNGQTAwREY4Njc3IC8qIHRva2VuaXplci5mbGV4ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IHRva2VuaXplci5mbGV4OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NDRjAyNjBB
RjZDNTI5MDAwMThFODkgLyogTmF2aWdhdGlvbkFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOYXZpZ2F0aW9uQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQ0NGMDVGMEFGNkNBNzYwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRpb25BY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QzQzE1ODBGOTdBOUQ3MDA1M0MwMTMg
LyogRE9NSFRNTENhbnZhc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NSFRNTENhbnZhc0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE0ODA0LDcgKzE0ODAyLDYgQEAKIAkJCQk2NTY1ODFFNzA5RDE1MDhEMDAwRTYxRDcgLyogU1ZH
RWxlbWVudEZhY3RvcnkuaCAqLywKIAkJCQk2NTY1ODFFODA5RDE1MDhEMDAwRTYxRDcgLyogU1ZH
TmFtZXMuY3BwICovLAogCQkJCTY1NjU4MUU5MDlEMTUwOEQwMDBFNjFENyAvKiBTVkdOYW1lcy5o
ICovLAotCQkJCTY1NjU4MTRDMDlEMTMwNDMwMDBFNjFENyAvKiB0b2tlbml6ZXIuY3BwICovLAog
CQkJCTY1NjU4MUFFMDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oICov
LAogCQkJCTY1NjU4MUFGMDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0Rh
dGEuY3BwICovLAogCQkJCTFBMTQxNEIzMTNBMEYwNTAwMDE5OTk2QyAvKiBXZWJLaXRGb250RmFt
aWx5TmFtZXMuY3BwICovLApAQCAtMjAwNTUsNyArMjAwNTIsNiBAQAogCQkJCUIyMjI3QjAyMEQw
MEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NQcm9wZXJ0eU5hbWVzLmluICovLAogCQkJCUIyMjI3QjAz
MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCAqLywKIAkJCQlCMjIy
N0IwNDBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTVmFsdWVLZXl3b3Jkcy5pbiAqLywKLQkJCQk5
M0NBNENBMzA5REY5M0ZBMDBERjg2NzcgLyogdG9rZW5pemVyLmZsZXggKi8sCiAJCQkJQkM1RUMx
NzYwQTUwN0UzRTAwNjAwN0Y1IC8qIHZpZXctc291cmNlLmNzcyAqLywKIAkJCQkzMTA2MDM2QzE0
MzI3RDJFMDBBQkY0QkEgLyogV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwICovLAogCQkJCTMxMDYw
MzZEMTQzMjdEMkUwMEFCRjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAppbmRleCAzYmU3MzRkLi5kZThlN2EwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcApAQCAtMTc4LDggKzE3OCwyNCBAQCBpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmVu
c3VyZUNTU1ZhbHVlUG9vbCgpCiAgICAgICAgIG1fY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29s
OjpjcmVhdGUoKTsKIH0KIAorc3RhdGljIGlubGluZSBVQ2hhciBsb3dlcmNhc2VDaGFyYWN0ZXIo
VUNoYXIgY2hyKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yIGNvbXBh
cmluZyBhbnkgaW5wdXQgY2hhcmFjdGVyCisgICAgLy8gdG8gYSBsb3dlcmNhc2UgRW5nbGlzaCBj
aGFyYWN0ZXIuIFRoZSBpc0Nhc2VsZXNzRXF1YWwgYmVsb3cKKyAgICAvLyBzaG91bGQgYmUgdXNl
ZCBmb3IgcmVndWxhciBjb21wYXJpc29uLCBidXQgc3dpdGNoIHN0YXRlbWVudHMKKyAgICAvLyBy
ZXF1aXJlIGRpcmVjdCB1c2Ugb2YgdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gY2hyIHwgMHgy
MDsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciBjc3NDaGFy
YWN0ZXIsIFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICAvLyBUaGlzIGlzIGFuIG92ZXJsb2FkZWQg
ZnVuY3Rpb24sIHRoaXMgaW5zdGFuY2UgY2hlY2tzIGNoYXJhY3RlcnMuCisgICAgQVNTRVJUKGNo
YXJhY3RlciA+PSAnYScgJiYgY2hhcmFjdGVyIDw9ICd6Jyk7CisgICAgcmV0dXJuIExJS0VMWShs
b3dlcmNhc2VDaGFyYWN0ZXIoY3NzQ2hhcmFjdGVyKSA9PSBjaGFyYWN0ZXIpOworfQorCiAvLyBG
SVhNRTogQ2FuIG1fcGFyc2VkUHJvcGVydGllcyBqdXN0IGJlIGEgVmVjdG9yPwotICAgIAorCiBD
U1NQYXJzZXI6OkNTU1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgOiBtX3N0cmljdChz
dHJpY3RQYXJzaW5nKQogICAgICwgbV9pbXBvcnRhbnQoZmFsc2UpCkBAIC0yMDEsNyArMjE3LDkg
QEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5nKQogICAgICwgbV9wcm9w
ZXJ0eVJhbmdlKFVJTlRfTUFYLCBVSU5UX01BWCkKICAgICAsIG1fcnVsZVJhbmdlTWFwKDApCiAg
ICAgLCBtX2N1cnJlbnRSdWxlRGF0YSgwKQotICAgICwgeXlfc3RhcnQoMSkKKyAgICAsIG1fcGFy
c2luZ01vZGUoTm9ybWFsTW9kZSkKKyAgICAsIG1fZGF0YSgwKQorICAgICwgbV90b2tlbigwKQog
ICAgICwgbV9saW5lTnVtYmVyKDApCiAgICAgLCBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIoMCkK
ICAgICAsIG1fYWxsb3dJbXBvcnRSdWxlcyh0cnVlKQpAQCAtMjQzLDI3ICsyNjEsMjIgQEAgdm9p
ZCBDU1NQYXJzZXJTdHJpbmc6Omxvd2VyKCkKIAogdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2Vy
KGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIqIHN1
ZmZpeCkKIHsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpICsgc3RybGVuKHByZWZp
eCkgKyBzdHJsZW4oc3VmZml4KSArIDI7CisgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KSArIHN0cmxlbihwcmVmaXgpICsgc3RybGVuKHN1ZmZpeCkgKyAxOwogCi0gICAgbV9kYXRhID0g
YWRvcHRBcnJheVB0cihuZXcgVUNoYXJbbGVuZ3RoXSk7CisgICAgbV9kYXRhU3RhcnQgPSBhZG9w
dEFycmF5UHRyKG5ldyBVQ2hhcltsZW5ndGhdKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3RybGVuKHByZWZpeCk7IGkrKykKLSAgICAgICAgbV9kYXRhW2ldID0gcHJlZml4W2ldOwor
ICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHByZWZpeFtpXTsKIAotICAgIG1lbWNweShtX2RhdGEu
Z2V0KCkgKyBzdHJsZW4ocHJlZml4KSwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0
aCgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KG1fZGF0YVN0YXJ0LmdldCgpICsgc3Ry
bGVuKHByZWZpeCksIHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVv
ZihVQ2hhcikpOwogCiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdHJsZW4ocHJlZml4KSArIHN0cmlu
Zy5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN0cmxlbihzdWZmaXgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0gICAgICAgIG1fZGF0
YVtpXSA9IHN1ZmZpeFtpIC0gc3RhcnRdOworICAgICAgICBtX2RhdGFTdGFydFtpXSA9IHN1ZmZp
eFtpIC0gc3RhcnRdOwogCi0gICAgbV9kYXRhW2xlbmd0aCAtIDFdID0gMDsKLSAgICBtX2RhdGFb
bGVuZ3RoIC0gMl0gPSAwOworICAgIG1fZGF0YVN0YXJ0W2xlbmd0aCAtIDFdID0gMDsKIAotICAg
IHl5X2hvbGRfY2hhciA9IDA7Ci0gICAgeXlsZW5nID0gMDsKLSAgICB5eXRleHQgPSBtX2RhdGEu
Z2V0KCk7Ci0gICAgeXlfY19idWZfcCA9IHl5dGV4dDsKLSAgICB5eV9ob2xkX2NoYXIgPSAqeXlf
Y19idWZfcDsKKyAgICBtX2RhdGEgPSBtX3Rva2VuU3RhcnQgPSBtX2RhdGFTdGFydC5nZXQoKTsK
ICAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKIH0KIApAQCAtNDIzLDcgKzQzNiw3IEBAIHN0YXRp
YyBib29sIHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IGRlY2xhcmF0aW9uLCBpbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7
Ci0gICAgaWYgKGxlbmd0aCA+IDIgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMl0gfCAweDIwKSA9
PSAncCcgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMV0gfCAweDIwKSA9PSAneCcpIHsKKyAgICBp
ZiAobGVuZ3RoID4gMiAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1tsZW5ndGggLSAyXSwg
J3AnKSAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1tsZW5ndGggLSAxXSwgJ3gnKSkgewog
ICAgICAgICBsZW5ndGggLT0gMjsKICAgICAgICAgdW5pdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFg7CiAgICAgfSBlbHNlIGlmIChsZW5ndGggPiAxICYmIGNoYXJhY3RlcnNbbGVuZ3RoIC0g
MV0gPT0gJyUnKSB7CkBAIC00Nzg1LDEwICs0Nzk4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBt
aWdodEJlUkdCQShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAg
IGlmIChsZW5ndGggPCA1KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGNoYXJh
Y3RlcnNbNF0gPT0gJygnCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzBdIHwgMHgyMCkgPT0gJ3In
Ci0gICAgICAgICYmIChjaGFyYWN0ZXJzWzFdIHwgMHgyMCkgPT0gJ2cnCi0gICAgICAgICYmIChj
aGFyYWN0ZXJzWzJdIHwgMHgyMCkgPT0gJ2InCi0gICAgICAgICYmIChjaGFyYWN0ZXJzWzNdIHwg
MHgyMCkgPT0gJ2EnOworICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1swXSwg
J3InKQorICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwgJ2cnKQorICAg
ICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1syXSwgJ2InKQorICAgICAgICAmJiBp
c0Nhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1szXSwgJ2EnKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIG1pZ2h0QmVSR0IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
QEAgLTQ3OTYsOSArNDgwOSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgaWYgKGxlbmd0aCA8IDQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gY2hhcmFjdGVyc1szXSA9PSAnKCcK
LSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMF0gfCAweDIwKSA9PSAncicKLSAgICAgICAgJiYgKGNo
YXJhY3RlcnNbMV0gfCAweDIwKSA9PSAnZycKLSAgICAgICAgJiYgKGNoYXJhY3RlcnNbMl0gfCAw
eDIwKSA9PSAnYic7CisgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAn
cicpCisgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzFdLCAnZycpCisgICAg
ICAgICYmIGlzQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzJdLCAnYicpOwogfQogCiBib29sIENT
U1BhcnNlcjo6ZmFzdFBhcnNlQ29sb3IoUkdCQTMyJiByZ2IsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCBzdHJpY3QpCkBAIC03MzA1LDIzNiArNzMxOCwxMjAyIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZvbnRWYXJpYW50TGlnYXR1cmVzKGJvb2wgaW1wb3J0YW50KQogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgaW5saW5lIGludCB5eWVycm9yKGNvbnN0IGNoYXIqKSB7IHJldHVybiAx
OyB9Ci0KICNkZWZpbmUgRU5EX1RPS0VOIDAKIAogI2luY2x1ZGUgIkNTU0dyYW1tYXIuaCIKIAor
ZW51bSBDaGFyYWN0ZXJUeXBlIHsKKyAgICAvLyBUeXBlcyBmb3IgdGhlIG1haW4gc3dpdGNoLgor
CisgICAgLy8gVGhlIGZpcnN0IDQgdHlwZXMgbXVzdCBiZSBncm91cGVkIHRvZ2V0aGVyLCBhcyB0
aGV5CisgICAgLy8gcmVwcmVzZW50IHRoZSBhbGxvd2VkIGNoYXJzIGluIGFuIGlkZW50aWZpZXIu
CisgICAgQ2hhcmFjdGVyQ2FzZWxlc3NVLAorICAgIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
KyAgICBDaGFyYWN0ZXJOdW1iZXIsCisgICAgQ2hhcmFjdGVyRGFzaCwKKworICAgIENoYXJhY3Rl
ck90aGVyLAorICAgIENoYXJhY3RlcldoaXRlU3BhY2UsCisgICAgQ2hhcmFjdGVyRW5kTWVkaWFR
dWVyeSwKKyAgICBDaGFyYWN0ZXJFbmROdGhDaGlsZCwKKyAgICBDaGFyYWN0ZXJRdW90ZSwKKyAg
ICBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCisgICAgQ2hhcmFjdGVySGFzaG1hcmssCisgICAg
Q2hhcmFjdGVyRG9sbGFyLAorICAgIENoYXJhY3RlckFzdGVyaXNrLAorICAgIENoYXJhY3RlclBs
dXMsCisgICAgQ2hhcmFjdGVyRG90LAorICAgIENoYXJhY3RlclNsYXNoLAorICAgIENoYXJhY3Rl
ckxlc3MsCisgICAgQ2hhcmFjdGVyQXQsCisgICAgQ2hhcmFjdGVyQmFja1NsYXNoLAorICAgIENo
YXJhY3RlclhvciwKKyAgICBDaGFyYWN0ZXJWZXJ0aWNhbEJhciwKKyAgICBDaGFyYWN0ZXJUaWxk
ZSwKK307CisKKy8vIDEyOCBBU0NJSSBjb2Rlcworc3RhdGljIGNvbnN0IENoYXJhY3RlclR5cGUg
dHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1sxMjhdID0geworLyogICAwIC0gTnVsbCAgICAgICAgICAg
ICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICAxIC0gU3RhcnQgb2YgSGVhZGluZyAgICovIENo
YXJhY3Rlck90aGVyLAorLyogICAyIC0gU3RhcnQgb2YgVGV4dCAgICAgICovIENoYXJhY3Rlck90
aGVyLAorLyogICAzIC0gRW5kIG9mIFRleHQgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyog
ICA0IC0gRW5kIG9mIFRyYW5zbS4gICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA1IC0gRW5x
dWlyeSAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA2IC0gQWNrbm93bGVkZ21l
bnQgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA3IC0gQmVsbCAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck90aGVyLAorLyogICA4IC0gQmFjayBTcGFjZSAgICAgICAgICovIENoYXJhY3Rl
ck90aGVyLAorLyogICA5IC0gSG9yaXpvbnRhbCBUYWIgICAgICovIENoYXJhY3RlcldoaXRlU3Bh
Y2UsCisvKiAgMTAgLSBMaW5lIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwK
Ky8qICAxMSAtIFZlcnRpY2FsIFRhYiAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxMiAt
IEZvcm0gRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDEzIC0gQ2Fy
cmlhZ2UgUmV0dXJuICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAgMTQgLSBTaGlmdCBP
dXQgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTUgLSBTaGlmdCBJbiAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTYgLSBEYXRhIExpbmUgRXNjYXBlICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCisvKiAgMTcgLSBEZXZpY2UgQ29udHJvbCAxICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCisvKiAgMTggLSBEZXZpY2UgQ29udHJvbCAyICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAg
MTkgLSBEZXZpY2UgQ29udHJvbCAzICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjAgLSBEZXZp
Y2UgQ29udHJvbCA0ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjEgLSBOZWdhdGl2ZSBBY2su
ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjIgLSBTeW5jaHJvbm91cyBJZGxlICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgMjMgLSBFbmQgb2YgVHJhbnNtaXQgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgMjQgLSBDYW5jZWwgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgMjUgLSBFbmQgb2YgTWVkaXVtICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjYgLSBT
dWJzdGl0dXRlICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjcgLSBFc2NhcGUgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjggLSBGaWxlIFNlcGFyYXRvciAgICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjkgLSBHcm91cCBTZXBhcmF0b3IgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAgMzAgLSBSZWNvcmQgU2VwYXJhdG9yICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgMzEgLSBVbml0IFNlcGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzIg
LSBTcGFjZSAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAzMyAtICEg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCisvKiAgMzQgLSAi
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCisvKiAgMzUgLSAjICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySGFzaG1hcmssCisvKiAgMzYgLSAkICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyRG9sbGFyLAorLyogIDM3IC0gJSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogIDM4IC0gJiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90
aGVyLAorLyogIDM5IC0gJyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclF1b3RlLAorLyog
IDQwIC0gKCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDQxIC0gKSAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVuZE50aENoaWxkLAorLyogIDQyIC0gKiAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlckFzdGVyaXNrLAorLyogIDQzIC0gKyAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlclBsdXMsCisvKiAgNDQgLSAsICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgNDUgLSAtICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
RGFzaCwKKy8qICA0NiAtIC4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb3QsCisvKiAg
NDcgLSAvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyU2xhc2gsCisvKiAgNDggLSAwICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDQ5IC0gMSAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1MCAtIDIgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTEgLSAzICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyTnVtYmVyLAorLyogIDUyIC0gNCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJl
ciwKKy8qICA1MyAtIDUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAg
NTQgLSA2ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU1IC0gNyAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NiAtIDggICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTcgLSA5ICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU4IC0gOiAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3Rlck90aGVyLAorLyogIDU5IC0gOyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVuZE1l
ZGlhUXVlcnksCisvKiAgNjAgLSA8ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTGVzcywK
Ky8qICA2MSAtID0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2MiAt
ID4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2MyAtID8gICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA2NCAtIEAgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJBdCwKKy8qICA2NSAtIEEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjYgLSBCICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY3IC0gQyAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2OCAtIEQgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjkgLSBFICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDcwIC0gRiAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MSAtIEcgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzIgLSBIICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDczIC0gSSAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NCAtIEogICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzUgLSBLICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc2IC0gTCAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NyAtIE0gICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzggLSBOICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc5IC0gTyAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MCAtIFAgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODEgLSBRICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgyIC0gUiAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MyAtIFMgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODQgLSBUICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg1IC0gVSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlckNhc2VsZXNzVSwKKy8qICA4NiAtIFYgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODcgLSBXICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg4IC0gWCAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4OSAtIFkgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTAgLSBaICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDkxIC0gWyAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDkyIC0gXCAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlckJhY2tTbGFzaCwKKy8qICA5MyAtIF0gICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKKy8qICA5NCAtIF4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJY
b3IsCisvKiAgOTUgLSBfICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogIDk2IC0gYCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyog
IDk3IC0gYSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8q
ICA5OCAtIGIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisv
KiAgOTkgLSBjICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAor
LyogMTAwIC0gZCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
Ky8qIDEwMSAtIGUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
CisvKiAxMDIgLSBmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAorLyogMTAzIC0gZyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKKy8qIDEwNCAtIGggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCisvKiAxMDUgLSBpICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAorLyogMTA2IC0gaiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qIDEwNyAtIGsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAxMDggLSBsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogMTA5IC0gbSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qIDExMCAtIG4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAxMTEgLSBvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogMTEyIC0gcCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qIDExMyAtIHEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAxMTQgLSByICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogMTE1IC0gcyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDExNiAtIHQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMTcgLSB1ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
Q2FzZWxlc3NVLAorLyogMTE4IC0gdiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qIDExOSAtIHcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAxMjAgLSB4ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogMTIxIC0geSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDEyMiAtIHogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMjMgLSB7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
RW5kTWVkaWFRdWVyeSwKKy8qIDEyNCAtIHwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJW
ZXJ0aWNhbEJhciwKKy8qIDEyNSAtIH0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qIDEyNiAtIH4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJUaWxkZSwKKy8qIDEy
NyAtIERlbGV0ZSAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKK307CisKKy8vIFV0aWxp
dHkgZnVuY3Rpb25zIGZvciB0aGUgQ1NTIHRva2VuaXplci4KKworc3RhdGljIGlubGluZSBib29s
IGlzQ1NTTGV0dGVyKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49IDEyOCB8fCB0eXBl
c09mQVNDSUlDaGFyYWN0ZXJzW2Nocl0gPD0gQ2hhcmFjdGVyRGFzaDsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGlzQ1NTRXNjYXBlKFVDaGFyIGNocikKK3sKKyAgICByZXR1cm4gY2hyID49ICcg
JyAmJiBjaHIgIT0gMTI3OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNVUklMZXR0ZXIoVUNo
YXIgY2hyKQoreworICAgIHJldHVybiAoY2hyID49ICcqJyAmJiBjaHIgIT0gMTI3KSB8fCAoY2hy
ID49ICcjJyAmJiBjaHIgPD0gJyYnKSB8fCBjaHIgPT0gJyEnOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2goVUNoYXIqIGRhdGEpCit7CisgICAgcmV0
dXJuIGlzQVNDSUlBbHBoYShkYXRhWzBdKSB8fCBkYXRhWzBdID09ICdfJyB8fCBkYXRhWzBdID49
IDEyOAorICAgICAgICB8fCAoZGF0YVswXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKGRhdGFbMV0p
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQ2FzZWxlc3NFcXVhbChVQ2hhciogY3NzU3Ry
aW5nLCBjb25zdCBjaGFyKiBjb25zdGFudFN0cmluZykKK3sKKyAgICAvLyBDb21wYXJlIGFuIFVD
aGFyIG1lbW9yeSBkYXRhIHdpdGggYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLgorICAgIC8vIFRo
aXMgaXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbiwgdGhpcyBpbnN0YW5jZSBjaGVja3Mgc3RyaW5n
cy4KKyAgICAvLyBUaGUgdHdvIGZ1bmN0aW9ucyBjYW5ub3QgYmUgZ3JvdXBlZCB0b2dldGhlciwg
c2luY2UgdGhpcyBvbmUgZGVwZW5kcworICAgIC8vIG9uIGlzQ1NTTGV0dGVyLCB3aGlsZSB0aGUg
b3RoZXIgaXMgdXNlZCBpbiBvdGhlciBwbGFjZXMuCisgICAgZG8geworICAgICAgICAvLyBUaGUg
aW5wdXQgbXVzdCBiZSBwYXJ0IG9mIGFuIGlkZW50aWZpZXIgaWYgY29uc3RhbnRDaGFyIG9yIGNv
bnN0U3RyaW5nCisgICAgICAgIC8vIGNvbnRhaW5zICctJy4gT3RoZXJ3aXNlIGxvd2VyY2FzZUNo
YXJhY3RlcignXHInKSB3b3VsZCBiZSBlcXVhbCB0byAnLScuCisgICAgICAgIEFTU0VSVCgoKmNv
bnN0YW50U3RyaW5nID49ICdhJyAmJiAqY29uc3RhbnRTdHJpbmcgPD0gJ3onKSB8fCAqY29uc3Rh
bnRTdHJpbmcgPT0gJy0nKTsKKyAgICAgICAgQVNTRVJUKCpjb25zdGFudFN0cmluZyAhPSAnLScg
fHwgaXNDU1NMZXR0ZXIoKmNzc1N0cmluZykpOworICAgICAgICBpZiAobG93ZXJjYXNlQ2hhcmFj
dGVyKCpjc3NTdHJpbmcrKykgIT0gKCpjb25zdGFudFN0cmluZysrKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9IHdoaWxlICgqY29uc3RhbnRTdHJpbmcpOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgVUNoYXIqIGNoZWNrRXNjYXBlKFVDaGFyKiBkYXRhKQoreworICAg
IEFTU0VSVCgqZGF0YSA9PSAnXFwnKTsKKworICAgICsrZGF0YTsKKyAgICBpZiAoIWlzQ1NTRXNj
YXBlKCpkYXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0
KCpkYXRhKSkgeworICAgICAgICBpbnQgbGVuZ3RoID0gNjsKKworICAgICAgICBkbyB7CisgICAg
ICAgICAgICArK2RhdGE7CisgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqZGF0YSkg
JiYgLS1sZW5ndGgpOworCisgICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBlc2Nh
cGUgc2VxdWVuY2UuCisgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqZGF0YSkpCisgICAgICAgICAg
ICArK2RhdGE7CisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0KKyAgICByZXR1cm4gZGF0YSAr
IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgVUNoYXIqIHNraXBXaGl0ZVNwYWNlcyhVQ2hhciogZGF0
YSkKK3sKKyAgICB3aGlsZSAoKmRhdGEgPD0gJyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0ZXJz
WypkYXRhXSA9PSBDaGFyYWN0ZXJXaGl0ZVNwYWNlKSkKKyAgICAgICAgKytkYXRhOworICAgIHJl
dHVybiBkYXRhOworfQorCisvLyBNYWluIENTUyB0b2tlbml6ZXIgZnVuY3Rpb25zLgorCitpbmxp
bmUgYm9vbCBDU1NQYXJzZXI6OmlzSWRlbnRpZmllclN0YXJ0KCkKK3sKKyAgICAvLyBDaGVjayB3
aGV0aGVyIGFuIGlkZW50aWZpZXIgaXMgc3RhcnRlZC4KKyAgICByZXR1cm4gaXNJZGVudGlmaWVy
U3RhcnRBZnRlckRhc2goKCptX2RhdGEgIT0gJy0nKSA/IG1fZGF0YSA6IG1fZGF0YSArIDEpOwor
fQorCitpbmxpbmUgVUNoYXIqIENTU1BhcnNlcjo6Y2hlY2tTdHJpbmcoVUNoYXIqIGRhdGEsIFVD
aGFyIHF1b3RlKQoreworICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXZlcnQgZXNjYXBlIHNlcXVl
bmNlcywgc3RyaW5ncworICAgIC8vIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSBwYXJzaW5nLgor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqZGF0YSA9PSBxdW90ZSkp
IHsKKyAgICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwuCisgICAgICAg
ICAgICByZXR1cm4gZGF0YSArIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKCpk
YXRhIDw9ICdccicgJiYgKCEqZGF0YSB8fCAqZGF0YSA9PSAnXG4nIHx8ICgqZGF0YSB8IDB4MSkg
PT0gJ1xyJykpKSB7CisgICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBmYWlsZWQgZm9y
IGNoYXJhY3RlciAnXDAnLCAnXG4nLCAnXGYnIG9yICdccicuCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChMSUtFTFkoZGF0YVswXSAhPSAnXFwnKSkKKyAg
ICAgICAgICAgICsrZGF0YTsKKyAgICAgICAgZWxzZSBpZiAoZGF0YVsxXSA9PSAnXG4nIHx8IGRh
dGFbMV0gPT0gJ1xmJykKKyAgICAgICAgICAgIGRhdGEgKz0gMjsKKyAgICAgICAgZWxzZSBpZiAo
ZGF0YVsxXSA9PSAnXHInKQorICAgICAgICAgICAgZGF0YSArPSBkYXRhWzJdID09ICdcbicgPyAz
IDogMjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkYXRhID0gY2hlY2tFc2NhcGUoZGF0
YSk7CisgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZUVzY2FwZShVQ2hhciom
IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoKm1fZGF0YSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKG1f
ZGF0YVsxXSkpOworCisgICAgKyttX2RhdGE7CisgICAgaWYgKGlzQVNDSUlIZXhEaWdpdCgqbV9k
YXRhKSkgeworICAgICAgICB1bnNpZ25lZCB1bmljb2RlID0gMDsKKyAgICAgICAgaW50IGxlbmd0
aCA9IDY7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgdW5pY29kZSA9ICh1bmljb2RlIDw8
IDQpICsgdG9BU0NJSUhleFZhbHVlKCptX2RhdGErKyk7CisgICAgICAgIH0gd2hpbGUgKC0tbGVu
Z3RoICYmIGlzQVNDSUlIZXhEaWdpdCgqbV9kYXRhKSk7CisKKyAgICAgICAgLy8gQ2hhcmFjdGVy
cyBhYm92ZSAweGZmZmYgYXJlIG5vdCBoYW5kbGVkLgorICAgICAgICBpZiAodW5pY29kZSA+IDB4
ZmZmZikKKyAgICAgICAgICAgIHVuaWNvZGUgPSAweGZmZmQ7CisKKyAgICAgICAgLy8gT3B0aW9u
YWwgc3BhY2UgYWZ0ZXIgdGhlIGVzY2FwZSBzZXF1ZW5jZS4KKyAgICAgICAgaWYgKGlzSFRNTFNw
YWNlKCptX2RhdGEpKQorICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICpyZXN1bHQgPSB1
bmljb2RlOworICAgIH0gZWxzZQorICAgICAgICAqcmVzdWx0ID0gKm1fZGF0YSsrOworICAgICsr
cmVzdWx0OworfQorCitpbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBhcnNlSWRlbnRpZmllcihVQ2hh
ciomIHJlc3VsdCkKK3sKKyAgICAvLyBJZiBhIHZhbGlkIGlkZW50aWZpZXIgc3RhcnQgaXMgZm91
bmQsIHdlIGNhbiBzYWZlbHkKKyAgICAvLyBwYXJzZSB0aGUgaWRlbnRpZmllciB1bnRpbCB0aGUg
bmV4dCBpbnZhbGlkIGNoYXJhY3Rlci4KKyAgICBBU1NFUlQoaXNJZGVudGlmaWVyU3RhcnQoKSk7
CisgICAgYm9vbCBoYXNFc2NhcGUgPSBmYWxzZTsKKyAgICBkbyB7CisgICAgICAgIGlmIChMSUtF
TFkoKm1fZGF0YSAhPSAnXFwnKSkKKyAgICAgICAgICAgICpyZXN1bHQrKyA9ICptX2RhdGErKzsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBoYXNFc2NhcGUgPSB0cnVlOworICAgICAgICAg
ICAgcGFyc2VFc2NhcGUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGlzQ1NTTGV0
dGVyKG1fZGF0YVswXSkgfHwgKG1fZGF0YVswXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKG1fZGF0
YVsxXSkpKTsKKyAgICByZXR1cm4gaGFzRXNjYXBlOworfQorCitpbmxpbmUgdm9pZCBDU1NQYXJz
ZXI6OnBhcnNlU3RyaW5nKFVDaGFyKiYgcmVzdWx0LCBVQ2hhciBxdW90ZSkKK3sKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoKm1fZGF0YSA9PSBxdW90ZSkpIHsKKyAg
ICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIGRvbmUuCisgICAgICAgICAgICArK21fZGF0
YTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoKm1fZGF0
YSA+ICdccicgfHwgKCptX2RhdGEgPCAnXG4nICYmICptX2RhdGEpIHx8ICptX2RhdGEgPT0gJ1x2
Jyk7CisKKyAgICAgICAgaWYgKExJS0VMWShtX2RhdGFbMF0gIT0gJ1xcJykpCisgICAgICAgICAg
ICAqcmVzdWx0KysgPSAqbV9kYXRhKys7CisgICAgICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAn
XG4nIHx8IG1fZGF0YVsxXSA9PSAnXGYnKQorICAgICAgICAgICAgbV9kYXRhICs9IDI7CisgICAg
ICAgIGVsc2UgaWYgKG1fZGF0YVsxXSA9PSAnXHInKQorICAgICAgICAgICAgbV9kYXRhICs9IG1f
ZGF0YVsyXSA9PSAnXG4nID8gMyA6IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNl
RXNjYXBlKHJlc3VsdCk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNl
VVJJKFVDaGFyKiYgc3RhcnQsIFVDaGFyKiYgcmVzdWx0KQoreworICAgIFVDaGFyKiB1cmlTdGFy
dCA9IHNraXBXaGl0ZVNwYWNlcyhtX2RhdGEpOworCisgICAgaWYgKCp1cmlTdGFydCA9PSAnIicg
fHwgKnVyaVN0YXJ0ID09ICdcJycpIHsKKyAgICAgICAgVUNoYXIgcXVvdGUgPSAqdXJpU3RhcnQ7
CisgICAgICAgICsrdXJpU3RhcnQ7CisKKyAgICAgICAgVUNoYXIqIHN0cmluZ0VuZCA9IGNoZWNr
U3RyaW5nKHVyaVN0YXJ0LCBxdW90ZSk7CisgICAgICAgIGlmICghc3RyaW5nRW5kKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBzdHJpbmdFbmQgPSBza2lwV2hpdGVTcGFjZXMoc3RyaW5n
RW5kKTsKKyAgICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHN0YXJ0ID0gcmVzdWx0ID0gbV9kYXRhID0gdXJpU3RhcnQ7CisgICAgICAg
IHBhcnNlU3RyaW5nKHJlc3VsdCwgcXVvdGUpOworCisgICAgICAgIG1fZGF0YSA9IHN0cmluZ0Vu
ZCArIDE7CisgICAgICAgIG1fdG9rZW4gPSBVUkk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNo
YXIqIHN0cmluZ0VuZCA9IHVyaVN0YXJ0OworCisgICAgICAgIHdoaWxlIChpc1VSSUxldHRlcigq
c3RyaW5nRW5kKSkgeworICAgICAgICAgICAgaWYgKCpzdHJpbmdFbmQgIT0gJ1xcJykKKyAgICAg
ICAgICAgICAgICArK3N0cmluZ0VuZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHN0cmluZ0VuZCA9IGNoZWNrRXNjYXBlKHN0cmluZ0VuZCk7CisgICAgICAgICAgICAgICAg
aWYgKCFzdHJpbmdFbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHN0cmluZ0VuZCA9IHNraXBXaGl0ZVNwYWNlcyhzdHJp
bmdFbmQpOworICAgICAgICBpZiAoKnN0cmluZ0VuZCAhPSAnKScpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgc3RhcnQgPSByZXN1bHQgPSBtX2RhdGEgPSB1cmlTdGFydDsKKyAgICAg
ICAgd2hpbGUgKGlzVVJJTGV0dGVyKCptX2RhdGEpKSB7CisgICAgICAgICAgICBpZiAoTElLRUxZ
KCptX2RhdGEgIT0gJ1xcJykpCisgICAgICAgICAgICAgICAgKnJlc3VsdCsrID0gKm1fZGF0YSsr
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhcnNlRXNjYXBlKHJlc3VsdCk7
CisgICAgICAgIH0KKworICAgICAgICBtX2RhdGEgPSBzdHJpbmdFbmQgKyAxOworICAgICAgICBt
X3Rva2VuID0gVVJJOworICAgIH0KK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVVu
aWNvZGVSYW5nZSgpCit7CisgICAgVUNoYXIqIGRhdGEgPSBtX2RhdGEgKyAxOworICAgIGludCBs
ZW5ndGggPSA2OworICAgIEFTU0VSVCgqbV9kYXRhID09ICcrJyk7CisKKyAgICB3aGlsZSAoaXNB
U0NJSUhleERpZ2l0KCpkYXRhKSAmJiBsZW5ndGgpIHsKKyAgICAgICAgKytkYXRhOworICAgICAg
ICAtLWxlbmd0aDsKKyAgICB9CisKKyAgICBpZiAobGVuZ3RoICYmICpkYXRhID09ICc/Jykgewor
ICAgICAgICAvLyBBdCBtb3N0IDUgaGV4IGRpZ2l0IGZvbGxvd2VkIGJ5IGEgcXVlc3Rpb24gbWFy
ay4KKyAgICAgICAgZG8geworICAgICAgICAgICAgKytkYXRhOworICAgICAgICAgICAgLS1sZW5n
dGg7CisgICAgICAgIH0gd2hpbGUgKCpkYXRhID09ICc/JyAmJiBsZW5ndGgpOworICAgICAgICBt
X2RhdGEgPSBkYXRhOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobGVu
Z3RoIDwgNikgeworICAgICAgICAvLyBBdCBsZWFzdCBvbmUgaGV4IGRpZ2l0LgorICAgICAgICBp
ZiAoZGF0YVswXSA9PSAnLScgJiYgaXNBU0NJSUhleERpZ2l0KGRhdGFbMV0pKSB7CisgICAgICAg
ICAgICAvLyBGb2xsb3dlZCBieSBhIGRhc2ggYW5kIGEgaGV4IGRpZ2l0LgorICAgICAgICAgICAg
KytkYXRhOworICAgICAgICAgICAgbGVuZ3RoID0gNjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgICAgICArK2RhdGE7CisgICAgICAgICAgICB9IHdoaWxlICgtLWxlbmd0aCAmJiBpc0FT
Q0lJSGV4RGlnaXQoKmRhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBtX2RhdGEgPSBkYXRhOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IENTU1BhcnNlcjo6cGFyc2VOdGhDaGlsZCgpCit7CisgICAgVUNoYXIqIGRhdGEgPSBtX2RhdGE7
CisKKyAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAgICAgKytkYXRhOworICAg
IGlmIChpc0Nhc2VsZXNzRXF1YWwoKmRhdGEsICduJykpIHsKKyAgICAgICAgbV9kYXRhID0gZGF0
YSArIDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENoaWxkRXh0cmEoKQoreworICAgIFVDaGFyKiBk
YXRhID0gc2tpcFdoaXRlU3BhY2VzKG1fZGF0YSk7CisgICAgaWYgKCpkYXRhICE9ICcrJyAmJiAq
ZGF0YSAhPSAnLScpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRhdGEgPSBza2lwV2hp
dGVTcGFjZXMoZGF0YSArIDEpOworICAgIGlmICghaXNBU0NJSURpZ2l0KCpkYXRhKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8geworICAgICAgICArK2RhdGE7CisgICAgfSB3aGls
ZSAoaXNBU0NJSURpZ2l0KCpkYXRhKSk7CisKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIHJldHVy
biB0cnVlOworfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEZ1bmN0aW9uVG9rZW4o
aW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgVUNoYXIqIG5hbWUg
PSBtX3Rva2VuU3RhcnQ7CisKKyAgICBzd2l0Y2ggKGxlbmd0aCkgeworICAgIGNhc2UgMzoKKyAg
ICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbicpICYmIGlzQ2FzZWxlc3NFcXVh
bChuYW1lWzFdLCAnbycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAgICAg
ICAgICAgbV90b2tlbiA9IE5PVEZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNz
RXF1YWwobmFtZVswXSwgJ3UnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ3InKSAmJiBp
c0Nhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2wnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBVUkk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgOToKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NF
cXVhbChuYW1lLCAibnRoLWNoaWxkIikpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRo
Q2hpbGRNb2RlOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIDExOgorICAgICAgICBpZiAo
aXNDYXNlbGVzc0VxdWFsKG5hbWUsICJudGgtb2YtdHlwZSIpKQorICAgICAgICAgICAgbV9wYXJz
aW5nTW9kZSA9IE50aENoaWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAxNDoK
KyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lLCAibnRoLWxhc3QtY2hpbGQiKSkKKyAg
ICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgMTY6CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSwgIm50aC1s
YXN0LW9mLXR5cGUiKSkKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0
ZWN0TWVkaWFRdWVyeVRva2VuKGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1fcGFyc2luZ01v
ZGUgPT0gTWVkaWFRdWVyeU1vZGUpOworICAgIFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0Owor
CisgICAgaWYgKGxlbmd0aCA9PSAzKSB7CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFt
ZVswXSwgJ2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKSAmJiBpc0Nhc2VsZXNz
RXF1YWwobmFtZVsyXSwgJ2QnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJQV9BTkQ7Cisg
ICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbicpICYmIGlzQ2FzZWxl
c3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKQor
ICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX05PVDsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9
PSA0KSB7CisgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0Nh
c2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKQorICAgICAgICAgICAgICAgICYmIGlzQ2FzZWxlc3NF
cXVhbChuYW1lWzJdLCAnbCcpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lWzNdLCAneScpKQorICAg
ICAgICAgICAgbV90b2tlbiA9IE1FRElBX09OTFk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBD
U1NQYXJzZXI6OmRldGVjdE51bWJlclRva2VuKFVDaGFyKiB0eXBlLCBpbnQgbGVuZ3RoKQorewor
ICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKworICAgIHN3aXRjaCAobG93ZXJjYXNlQ2hhcmFjdGVy
KHR5cGVbMF0pKSB7CisgICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBp
c0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBDTVM7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2QnOgorICAgICAgICBpZiAobGVuZ3RoID09
IDMgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5
cGVbMl0sICdnJykpCisgICAgICAgICAgICBtX3Rva2VuID0gREVHUzsKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSAnZSc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMikgeworICAgICAgICAg
ICAgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBFTVM7CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsx
XSwgJ3gnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRVhTOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgJ2cnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYg
aXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdyJykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2Vs
ZXNzRXF1YWwodHlwZVsyXSwgJ2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwgJ2QnKSkK
KyAgICAgICAgICAgIG1fdG9rZW4gPSBHUkFEUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSAnaCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsx
XSwgJ3onKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBIRVJUWjsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSAnaSc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0Nhc2VsZXNzRXF1
YWwodHlwZVsxXSwgJ24nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJTlM7CisgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgJ2snOgorICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXNDYXNl
bGVzc0VxdWFsKHR5cGVbMV0sICdoJykgJiYgaXNDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICd6Jykp
CisgICAgICAgICAgICBtX3Rva2VuID0gS0hFUlRaOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlICdtJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICBpZiAoaXND
YXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IE1N
UzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAncycpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBNU0VDUzsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7CisgICAgICAg
ICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd4JykpCisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IFBYUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbCh0eXBl
WzFdLCAndCcpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQVFM7CisgICAgICAgICAgICBl
bHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2MnKSkKKyAgICAgICAgICAgICAgICBt
X3Rva2VuID0gUENTOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3In
OgorICAgICAgICBpZiAobGVuZ3RoID09IDMpIHsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNz
RXF1YWwodHlwZVsxXSwgJ2EnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2QnKSkKKyAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gUkFEUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2Fz
ZWxlc3NFcXVhbCh0eXBlWzFdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnbScp
KQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSRU1TOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgJ3MnOgorICAgICAgICBpZiAobGVuZ3RoID09IDEpCisgICAgICAg
ICAgICBtX3Rva2VuID0gU0VDUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAndCc6Cisg
ICAgICAgIGlmIChsZW5ndGggPT0gNCAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3UnKQor
ICAgICAgICAgICAgICAgICYmIGlzQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncicpICYmIGlzQ2Fz
ZWxlc3NFcXVhbCh0eXBlWzNdLCAnbicpKQorICAgICAgICAgICAgbV90b2tlbiA9IFRVUk5TOwor
ICAgICAgICByZXR1cm47CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAodHlwZVswXSA9PSAn
XycgJiYgbGVuZ3RoID09IDUgJiYgdHlwZVsxXSA9PSAnXycgJiYgaXNDYXNlbGVzc0VxdWFsKHR5
cGVbMl0sICdxJykKKyAgICAgICAgICAgICAgICAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVszXSwg
J2UnKSAmJiBpc0Nhc2VsZXNzRXF1YWwodHlwZVs0XSwgJ20nKSkKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBRRU1TOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQ
YXJzZXI6OmRldGVjdERhc2hUb2tlbihpbnQgbGVuZ3RoKQoreworICAgIFVDaGFyKiBuYW1lID0g
bV90b2tlblN0YXJ0OworCisgICAgaWYgKGxlbmd0aCA9PSAxMSkgeworICAgICAgICBpZiAoaXND
YXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAneScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMSwg
IndlYmtpdC1hbiIpKQorICAgICAgICAgICAgbV90b2tlbiA9IEFOWUZVTkNUSU9OOworICAgICAg
ICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMF0sICduJykgJiYgaXNDYXNlbGVzc0Vx
dWFsKG5hbWUgKyAxLCAid2Via2l0LW1pIikpCisgICAgICAgICAgICBtX3Rva2VuID0gTUlORlVO
Q1RJT047CisgICAgICAgIGVsc2UgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ3gnKSAm
JiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDEsICJ3ZWJraXQtbWEiKSkKKyAgICAgICAgICAgIG1f
dG9rZW4gPSBNQVhGVU5DVElPTjsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMiAmJiBpc0Nh
c2VsZXNzRXF1YWwobmFtZSArIDEsICJ3ZWJraXQtY2FsYyIpKQorICAgICAgICBtX3Rva2VuID0g
Q0FMQ0ZVTkNUSU9OOworfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4o
aW50IGxlbmd0aCwgYm9vbCBoYXNFc2NhcGUpCit7CisgICAgVUNoYXIqIG5hbWUgPSBtX3Rva2Vu
U3RhcnQ7CisgICAgQVNTRVJUKG5hbWVbMF0gPT0gJ0AnICYmIGxlbmd0aCA+PSAyKTsKKworICAg
IC8vIGNoYXJzZXQsIGZvbnQtZmFjZSwgaW1wb3J0LCBtZWRpYSwgbmFtZXNwYWNlLCBwYWdlLAor
ICAgIC8vIC13ZWJraXQta2V5ZnJhbWVzLCBhbmQgLXdlYmtpdC1tZWRpYXF1ZXJ5IGFyZSBub3Qg
YWZmZWN0ZWQgYnkgaGFzRXNjYXBlLgorICAgIHN3aXRjaCAobG93ZXJjYXNlQ2hhcmFjdGVyKG5h
bWVbMV0pKSB7CisgICAgY2FzZSAnYic6CisgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAx
MjoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1sZWZ0
IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTUxFRlRfU1lNOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVz
c0VxdWFsKG5hbWUgKyAyLCAib3R0b20tcmlnaHQiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gQk9UVE9NUklHSFRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2Ug
MTQ6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3R0b20tY2Vu
dGVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTUNFTlRFUl9TWU07CisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxOToKKyAgICAgICAgICAgIGlmIChpc0Nh
c2VsZXNzRXF1YWwobmFtZSArIDIsICJvdHRvbS1sZWZ0LWNvcm5lciIpKQorICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1l
ICsgMiwgIm90dG9tLXJpZ2h0LWNvcm5lciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBC
T1RUT01SSUdIVENPUk5FUl9TWU07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnYyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gOCAm
JiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJoYXJzZXQiKSkKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBDSEFSU0VUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnZic6CisgICAg
ICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib250LWZh
Y2UiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlICdpJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA3ICYmIGlzQ2FzZWxl
c3NFcXVhbChuYW1lICsgMiwgIm1wb3J0IikpIHsKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUg
PSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJTVBPUlRfU1lNOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2wnOgorICAgICAgICBpZiAoaGFz
RXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChsZW5ndGggPT0gOSkg
eworICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC10b3AiKSkK
KyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTEVGVFRPUF9TWU07CisgICAgICAgIH0gZWxzZSBp
ZiAobGVuZ3RoID09IDEyKSB7CisgICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFy
YWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAg
ICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdlJykgJiYgaXNDYXNlbGVz
c0VxdWFsKG5hbWUgKyAyLCAiZWZ0LW1pZGRsIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IExFRlRNSURETEVfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAoaXNDYXNlbGVzc0VxdWFsKG5h
bWVbMTFdLCAnbScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVmdC1ib3R0byIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUQk9UVE9NX1NZTTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlICdtJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA2ICYm
IGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgImVkaWEiKSkgeworICAgICAgICAgICAgbV9wYXJz
aW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOworICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX1NZ
TTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICduJzoKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSAxMCAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJhbWVzcGFjZSIp
KQorICAgICAgICAgICAgbV90b2tlbiA9IE5BTUVTUEFDRV9TWU07CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgJ3AnOgorICAgICAgICBpZiAobGVuZ3RoID09IDUgJiYgaXNDYXNlbGVzc0Vx
dWFsKG5hbWUgKyAyLCAiYWdlIikpCisgICAgICAgICAgICBtX3Rva2VuID0gUEFHRV9TWU07Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChsZW5ndGggPT0gMTApIHsKKyAgICAg
ICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJpZ2h0LXRvcCIpKQorICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVFRPUF9TWU07CisgICAgICAgIH0gZWxzZSBpZiAobGVu
Z3RoID09IDEzKSB7CisgICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIg
Zmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KKyAgICAgICAg
ICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsxMl0sICdlJykgJiYgaXNDYXNlbGVzc0VxdWFs
KG5hbWUgKyAyLCAiaWdodC1taWRkbCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdI
VE1JRERMRV9TWU07CisgICAgICAgICAgICBlbHNlIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZVsx
Ml0sICdtJykgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAiaWdodC1ib3R0byIpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVEJPVFRPTV9TWU07CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSAndCc6CisgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2Fz
ZSA5OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIm9wLWxlZnQi
KSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QTEVGVF9TWU07CisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1
YWwobmFtZSArIDIsICJvcC1yaWdodCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BS
SUdIVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxMToKKyAgICAg
ICAgICAgIGlmIChpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJvcC1jZW50ZXIiKSkKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gVE9QQ0VOVEVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1l
ICsgMiwgIm9wLWxlZnQtY29ybmVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUExF
RlRDT1JORVJfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTc6Cisg
ICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAib3AtcmlnaHQtY29ybmVy
IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUFJJR0hUQ09STkVSX1NZTTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICct
JzoKKyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMzoKKyAgICAgICAg
ICAgIGlmICghaGFzRXNjYXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1y
dWxlIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9SVUxFX1NZTTsKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgaWYgKGhhc0Vz
Y2FwZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIENoZWNraW5n
IHRoZSBsYXN0IGNoYXJhY3RlciBmaXJzdCBjb3VsZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2li
aWxlIGNhc2VzLgorICAgICAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ3Mn
KSAmJiBpc0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQtZGVjbCIpKQorICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfREVDTFNfU1lNOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNDYXNlbGVzc0VxdWFsKG5hbWVbMTNdLCAnZScpICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsg
MiwgIndlYmtpdC12YWx1IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9WQUxV
RV9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNToKKyAgICAgICAg
ICAgIGlmICghaGFzRXNjYXBlICYmIGlzQ2FzZWxlc3NFcXVhbChuYW1lICsgMiwgIndlYmtpdC1y
ZWdpb24iKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX1JFR0lPTl9SVUxFX1NZ
TTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAg
aWYgKCFoYXNFc2NhcGUgJiYgaXNDYXNlbGVzc0VxdWFsKG5hbWUgKyAyLCAid2Via2l0LXNlbGVj
dG9yIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9TRUxFQ1RPUl9TWU07Cisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxODoKKyAgICAgICAgICAgIGlmIChp
c0Nhc2VsZXNzRXF1YWwobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWVzIikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOworICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNhc2UgMTk6CisgICAgICAgICAgICBpZiAoaXNDYXNlbGVzc0VxdWFsKG5h
bWUgKyAyLCAid2Via2l0LW1lZGlhcXVlcnkiKSkgeworICAgICAgICAgICAgICAgIG1fcGFyc2lu
Z01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lU
X01FRElBUVVFUllfU1lNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSAmJiBpc0Nhc2VsZXNz
RXF1YWwobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWUtcnVsZSIpKQorICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBXRUJLSVRfS0VZRlJBTUVfUlVMRV9TWU07CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxX
aXRob3V0VHlwZSkKIHsKICAgICBZWVNUWVBFKiB5eWx2YWwgPSBzdGF0aWNfY2FzdDxZWVNUWVBF
Kj4oeXlsdmFsV2l0aG91dFR5cGUpOwotICAgIGludCBsZW5ndGg7CisgICAgLy8gV3JpdGUgcG9p
bnRlciBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLgorICAgIFVDaGFyKiByZXN1bHQ7CisgICAgYm9v
bCBoYXNFc2NhcGU7CiAKLSAgICBsZXgoKTsKKyAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGlzIHRl
cm1pbmF0ZWQgYnkgdHdvIFwwLCBzbworICAgIC8vIGl0IGlzIHNhZmUgdG8gcmVhZCB0d28gY2hh
cmFjdGVycyBhaGVhZCBhbnl0aW1lLgogCi0gICAgVUNoYXIqIHQgPSB0ZXh0KCZsZW5ndGgpOwor
I2lmbmRlZiBOREVCVUcKKyAgICAvLyBJbiBkZWJ1ZyB3ZSBjaGVjayB3aXRoIGFuIEFTU0VSVCB0
aGF0IHRoZSBsZW5ndGggaXMgPiAwIGZvciBzdHJpbmcgdHlwZXMuCisgICAgeXlsdmFsLT5zdHJp
bmcuY2hhcmFjdGVycyA9IDA7CisgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gMDsKKyNlbmRp
ZgogCi0gICAgc3dpdGNoICh0b2tlbigpKSB7Ci0gICAgY2FzZSBXSElURVNQQUNFOgotICAgIGNh
c2UgU0dNTF9DRDoKLSAgICBjYXNlIElOQ0xVREVTOgotICAgIGNhc2UgREFTSE1BVENIOgorcmVz
dGFydEFmdGVyQ29tbWVudDoKKyAgICBtX3Rva2VuU3RhcnQgPSByZXN1bHQgPSBtX2RhdGE7Cisg
ICAgbV90b2tlbiA9ICptX2RhdGE7CisgICAgKyttX2RhdGE7CisKKyAgICBzd2l0Y2ggKChtX3Rv
a2VuIDw9IDEyNykgPyB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzW21fdG9rZW5dIDogQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0KSB7CisgICAgY2FzZSBDaGFyYWN0ZXJDYXNlbGVzc1U6CisgICAgICAg
IGlmIChVTkxJS0VMWSgqbV9kYXRhID09ICcrJykpCisgICAgICAgICAgICBpZiAocGFyc2VVbmlj
b2RlUmFuZ2UoKSkgeworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBVTklDT0RFUkFOR0U7Cisg
ICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsK
KyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2Vu
U3RhcnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIC8v
IEZhbGwgdGhyb3VnaCB0byBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQuCisKKyAgICBjYXNlIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydDoKKyAgICAgICAgLS1tX2RhdGE7CisgICAgICAgIGhhc0Vz
Y2FwZSA9IHBhcnNlSWRlbnRpZmllcihyZXN1bHQpOworICAgICAgICBtX3Rva2VuID0gSURFTlQ7
CisKKyAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAg
ICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gbV90b2tlblN0YXJ0OworCisg
ICAgICAgIGlmIChVTkxJS0VMWSgqbV9kYXRhID09ICcoJykpIHsKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBGVU5DVElPTjsKKyAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQorICAgICAgICAgICAg
ICAgIGRldGVjdEZ1bmN0aW9uVG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAg
ICAgICsrbV9kYXRhOworICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgICAgICAgICArK3l5bHZh
bC0+c3RyaW5nLmxlbmd0aDsKKworICAgICAgICAgICAgaWYgKHRva2VuKCkgPT0gVVJJKSB7Cisg
ICAgICAgICAgICAgICAgbV90b2tlbiA9IEZVTkNUSU9OOworICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHdoZXRoZXIgaXQgaXMgcmVhbGx5IGFuIFVSSS4KKyAgICAgICAgICAgICAgICBwYXJzZVVS
SSh5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHl5
bHZhbC0+c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAtIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnM7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9k
ZSAhPSBOb3JtYWxNb2RlKSAmJiAhaGFzRXNjYXBlKSB7CisgICAgICAgICAgICBpZiAobV9wYXJz
aW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSkKKyAgICAgICAgICAgICAgICBkZXRlY3RNZWRpYVF1
ZXJ5VG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1f
cGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlICYmIGlzQ2FzZWxlc3NFcXVhbChtX3Rva2VuU3Rh
cnRbMF0sICduJykpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0IC0gbV90b2tlblN0YXJ0
ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuIiBpcyBJREVOVCBidXQg
Im4rMSIgaXMgTlRILgorICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJh
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAg
ICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3Rh
cnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJl
c3VsdCAtIG1fdG9rZW5TdGFydCA9PSAyICYmIG1fdG9rZW5TdGFydFsxXSA9PSAnLScpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuLSIgaXMgSURFTlQgYnV0ICJuLTEiIGlzIE5U
SC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSBkZWNyZWFzZSBtX2RhdGEg
dG8gZGV0ZWN0IGFuIG50aC1jaGlsZCB0b2tlbi4KKyAgICAgICAgICAgICAgICAgICAgbV9kYXRh
LS07CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVy
dCB0aGUgY2hhbmdlIHRvIG1fZGF0YSBpZiB1bnN1Y2Nlc3NmdWwuCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2RhdGErKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgIGNhc2Ug
VVJJOgotICAgIGNhc2UgU1RSSU5HOgotICAgIGNhc2UgSURFTlQ6Ci0gICAgY2FzZSBOVEg6Ci0g
ICAgY2FzZSBIRVg6Ci0gICAgY2FzZSBJRFNFTDoKLSAgICBjYXNlIERJTUVOOgotICAgIGNhc2Ug
VU5JQ09ERVJBTkdFOgotICAgIGNhc2UgRlVOQ1RJT046Ci0gICAgY2FzZSBBTllGVU5DVElPTjoK
LSAgICBjYXNlIE5PVEZVTkNUSU9OOgotICAgIGNhc2UgQ0FMQ0ZVTkNUSU9OOgotICAgIGNhc2Ug
TUlORlVOQ1RJT046Ci0gICAgY2FzZSBNQVhGVU5DVElPTjoKLSAgICAgICAgeXlsdmFsLT5zdHJp
bmcuY2hhcmFjdGVycyA9IHQ7Ci0gICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IGxlbmd0
aDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIElNUE9SVF9TWU06Ci0gICAgY2FzZSBQQUdF
X1NZTToKLSAgICBjYXNlIE1FRElBX1NZTToKLSAgICBjYXNlIEZPTlRfRkFDRV9TWU06Ci0gICAg
Y2FzZSBDSEFSU0VUX1NZTToKLSAgICBjYXNlIE5BTUVTUEFDRV9TWU06Ci0gICAgY2FzZSBXRUJL
SVRfS0VZRlJBTUVTX1NZTToKLQotICAgIGNhc2UgSU1QT1JUQU5UX1NZTToKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIFFFTVM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNhc2UgR1JBRFM6
Ci0gICAgY2FzZSBUVVJOUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBERUdTOgotICAg
IGNhc2UgUkFEUzoKLSAgICBjYXNlIEtIRVJUWjoKLSAgICBjYXNlIFJFTVM6Ci0gICAgICAgIGxl
bmd0aC0tOwotICAgIGNhc2UgTVNFQ1M6Ci0gICAgY2FzZSBIRVJUWjoKLSAgICBjYXNlIEVNUzoK
LSAgICBjYXNlIEVYUzoKLSAgICBjYXNlIFBYUzoKLSAgICBjYXNlIENNUzoKLSAgICBjYXNlIE1N
UzoKLSAgICBjYXNlIElOUzoKLSAgICBjYXNlIFBUUzoKLSAgICBjYXNlIFBDUzoKLSAgICAgICAg
bGVuZ3RoLS07Ci0gICAgY2FzZSBTRUNTOgotICAgIGNhc2UgUEVSQ0VOVEFHRToKLSAgICAgICAg
bGVuZ3RoLS07Ci0gICAgY2FzZSBGTE9BVFRPS0VOOgotICAgIGNhc2UgSU5URUdFUjoKLSAgICAg
ICAgeXlsdmFsLT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUodCwgbGVuZ3RoKTsKKyAgICBj
YXNlIENoYXJhY3RlckRvdDoKKyAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQobV9kYXRhWzBdKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gQ2hhcmFjdGVy
TnVtYmVyLgorCisgICAgY2FzZSBDaGFyYWN0ZXJOdW1iZXI6IHsKKyAgICAgICAgYm9vbCBkb3RT
ZWVuID0gKG1fdG9rZW4gPT0gJy4nKTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQobV9kYXRhWzBdKSkgeworICAgICAgICAgICAgICAgIC8v
IE9ubHkgb25lIGRvdCBpcyBhbGxvd2VkIGZvciBhIG51bWJlciwKKyAgICAgICAgICAgICAgICAv
LyBhbmQgaXQgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRpZ2l0LgorICAgICAgICAgICAgICAgIGlm
IChtX2RhdGFbMF0gIT0gJy4nIHx8IGRvdFNlZW4gfHwgIWlzQVNDSUlEaWdpdChtX2RhdGFbMV0p
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkb3RTZWVuID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrbV9kYXRhOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSAmJiAh
ZG90U2VlbiAmJiBpc0Nhc2VsZXNzRXF1YWwoKm1fZGF0YSwgJ24nKSkgeworICAgICAgICAgICAg
Ly8gIlswLTldK24iIGlzIGFsd2F5cyBhbiBOdGhDaGlsZC4KKyAgICAgICAgICAgICsrbV9kYXRh
OworICAgICAgICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgICAgICAgICBtX3Rva2Vu
ID0gTlRIOworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5T
dGFydDsKKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9r
ZW5TdGFydDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgeXlsdmFs
LT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUobV90b2tlblN0YXJ0LCBtX2RhdGEgLSBtX3Rv
a2VuU3RhcnQpOworCisgICAgICAgIC8vIFR5cGUgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICBp
ZiAoaXNJZGVudGlmaWVyU3RhcnQoKSkgeworICAgICAgICAgICAgVUNoYXIqIHR5cGUgPSBtX2Rh
dGE7CisgICAgICAgICAgICByZXN1bHQgPSBtX2RhdGE7CisKKyAgICAgICAgICAgIGhhc0VzY2Fw
ZSA9IHBhcnNlSWRlbnRpZmllcihyZXN1bHQpOworICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0g
JysnKSB7CisgICAgICAgICAgICAgICAgLy8gQW55IGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYSAn
Kycgc2lnbiBpcyBhbiBpbnZhbGlkIGRpbWVuc2lvbi4KKyAgICAgICAgICAgICAgICArK21fZGF0
YTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gSU5WQUxJRERJTUVOOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRElNRU47CisgICAgICAgICAgICAg
ICAgaWYgKCFoYXNFc2NhcGUpCisgICAgICAgICAgICAgICAgICAgIGRldGVjdE51bWJlclRva2Vu
KHR5cGUsIG1fZGF0YSAtIHR5cGUpOworCisgICAgICAgICAgICAgICAgaWYgKG1fdG9rZW4gPT0g
RElNRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRlY29kZWQgbnVtYmVyIGlzIG92
ZXJ3cml0dGVuLCBidXQgdGhpcyBpcyBpbnRlbnRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAg
eXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbV9kYXRhIC0gbV90b2tlblN0YXJ0OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgqbV9kYXRh
ID09ICclJykgeworICAgICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIENTUyBncmFtbWFyIHNheXMg
e251bX0lIHdlIGZvbGxvdworICAgICAgICAgICAgLy8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hp
Y2ggdXNlcyB7bnVtfSUrLgorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICsrbV9k
YXRhOworICAgICAgICAgICAgfSB3aGlsZSAoKm1fZGF0YSA9PSAnJScpOworICAgICAgICAgICAg
bV90b2tlbiA9IFBFUkNFTlRBR0U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV90b2tl
biA9IGRvdFNlZW4gPyBGTE9BVFRPS0VOIDogSU5URUdFUjsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBDaGFyYWN0ZXJEYXNoOgorICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3Rh
cnRBZnRlckRhc2gobV9kYXRhKSkgeworICAgICAgICAgICAgLS1tX2RhdGE7CisgICAgICAgICAg
ICBoYXNFc2NhcGUgPSBwYXJzZUlkZW50aWZpZXIocmVzdWx0KTsKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBJREVOVDsKKworICAgICAgICAgICAgaWYgKCptX2RhdGEgPT0gJygnKSB7CisgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IEZVTkNUSU9OOworICAgICAgICAgICAgICAgIGlmICghaGFzRXNj
YXBlKQorICAgICAgICAgICAgICAgICAgICBkZXRlY3REYXNoVG9rZW4ocmVzdWx0IC0gbV90b2tl
blN0YXJ0KTsKKyAgICAgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgICAgICArK3Jl
c3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9PSBO
dGhDaGlsZE1vZGUpICYmICFoYXNFc2NhcGUgJiYgaXNDYXNlbGVzc0VxdWFsKG1fdG9rZW5TdGFy
dFsxXSwgJ24nKSkgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgLSBtX3Rva2VuU3RhcnQg
PT0gMikgeworICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgIi1uIiBpcyBJREVOVCBidXQg
Ii1uKzEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRy
YSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9kYXRhOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMyAmJiBt
X3Rva2VuU3RhcnRbMl0gPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAi
LW4tIiBpcyBJREVOVCBidXQgIi1uLTEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgLy8g
U3BlY3VsYXRpdmVseSBkZWNyZWFzZSBtX2RhdGEgdG8gZGV0ZWN0IGFuIG50aC1jaGlsZCB0b2tl
bi4KKyAgICAgICAgICAgICAgICAgICAgbV9kYXRhLS07CisgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tl
biA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9
IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlIHRvIG1fZGF0YSBpZiB1
bnN1Y2Nlc3NmdWwuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGErKzsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAg
ICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAg
IH0gZWxzZSBpZiAobV9kYXRhWzBdID09ICctJyAmJiBtX2RhdGFbMV0gPT0gJz4nKSB7CisgICAg
ICAgICAgICBtX2RhdGEgKz0gMjsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBTR01MX0NEOworICAg
ICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSkg
eworICAgICAgICAgICAgLy8gIi1bMC05XStuIiBpcyBhbHdheXMgYW4gTnRoQ2hpbGQuCisgICAg
ICAgICAgICBpZiAocGFyc2VOdGhDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VOdGhD
aGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAg
ICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAg
ICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIG1fdG9rZW5TdGFydDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQ6Cisg
ICAgY2FzZSBDaGFyYWN0ZXJPdGhlcjoKKyAgICAgICAgLy8gbV90b2tlbiBpcyBzaW1wbHkgdGhl
IGN1cnJlbnQgY2hhcmFjdGVyLgogICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICByZXR1cm4g
dG9rZW4oKTsKLX0KKyAgICBjYXNlIENoYXJhY3RlcldoaXRlU3BhY2U6CisgICAgICAgIG1fdG9r
ZW4gPSBXSElURVNQQUNFOworICAgICAgICAvLyBNaWdodCBzdGFydCB3aXRoIGEgJ1xuJy4KKyAg
ICAgICAgLS1tX2RhdGE7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICgqbV9kYXRhID09
ICdcbicpCisgICAgICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7CisgICAgICAgICAgICArK21f
ZGF0YTsKKyAgICAgICAgfSB3aGlsZSAoKm1fZGF0YSA8PSAnICcgJiYgKHR5cGVzT2ZBU0NJSUNo
YXJhY3RlcnNbKm1fZGF0YV0gPT0gQ2hhcmFjdGVyV2hpdGVTcGFjZSkpOworICAgICAgICBicmVh
azsKIAotdm9pZCBDU1NQYXJzZXI6OnJlY2hlY2tBdEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwg
aW50IGxlbikKLXsKLSAgICBTdHJpbmcgcnVsZU5hbWUoc3RyLCBsZW4pOwotICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBpbXBvcnQiKSkKLSAgICAgICAgeXlUb2sgPSBJTVBP
UlRfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQHBhZ2Ui
KSkKLSAgICAgICAgeXlUb2sgPSBQQUdFX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShydWxlTmFtZSwgIkBtZWRpYSIpKQotICAgICAgICB5eVRvayA9IE1FRElBX1NZTTsKLSAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBmb250LWZhY2UiKSkKLSAg
ICAgICAgeXlUb2sgPSBGT05UX0ZBQ0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKHJ1bGVOYW1lLCAiQGNoYXJzZXQiKSkKLSAgICAgICAgeXlUb2sgPSBDSEFSU0VUX1NZTTsK
LSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBuYW1lc3BhY2UiKSkK
LSAgICAgICAgeXlUb2sgPSBOQU1FU1BBQ0VfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHJ1bGVOYW1lLCAiQC13ZWJraXQta2V5ZnJhbWVzIikpCi0gICAgICAgIHl5VG9rID0g
V0VCS0lUX0tFWUZSQU1FU19TWU07Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVs
ZU5hbWUsICJALXdlYmtpdC1tZWRpYXF1ZXJ5IikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX01F
RElBUVVFUllfU1lNOwotfQotCi1VQ2hhciogQ1NTUGFyc2VyOjp0ZXh0KGludCAqbGVuZ3RoKQot
ewotICAgIFVDaGFyKiBzdGFydCA9IHl5dGV4dDsKLSAgICBpbnQgbCA9IHl5bGVuZzsKLSAgICBz
d2l0Y2ggKHl5VG9rKSB7Ci0gICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgIGwtLTsKLSAgICAgICAg
Lyogbm9icmVhayAqLwotICAgIGNhc2UgSEVYOgotICAgIGNhc2UgSURTRUw6Ci0gICAgICAgIHN0
YXJ0Kys7Ci0gICAgICAgIGwtLTsKKyAgICBjYXNlIENoYXJhY3RlckVuZE1lZGlhUXVlcnk6Cisg
ICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE1lZGlhUXVlcnlNb2RlKQorICAgICAgICAgICAg
bV9wYXJzaW5nTW9kZSA9IE5vcm1hbE1vZGU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVVJJ
OgotICAgICAgICAvLyAidXJsKCJ7d317c3RyaW5nfXt3fSIpIgotICAgICAgICAvLyAidXJsKCJ7
d317dXJsfXt3fSIpIgotICAgICAgICAvLyBzdHJpcCAidXJsKCIgYW5kICIpIgotICAgICAgICBz
dGFydCArPSA0OwotICAgICAgICBsIC09IDU7Ci0gICAgICAgIC8vIHN0cmlwIHt3fQotICAgICAg
ICB3aGlsZSAobCAmJiBpc0hUTUxTcGFjZSgqc3RhcnQpKSB7Ci0gICAgICAgICAgICArK3N0YXJ0
OwotICAgICAgICAgICAgLS1sOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChsICYmIGlzSFRN
TFNwYWNlKHN0YXJ0W2wgLSAxXSkpCi0gICAgICAgICAgICAtLWw7Ci0gICAgICAgIGlmIChsICYm
ICgqc3RhcnQgPT0gJyInIHx8ICpzdGFydCA9PSAnXCcnKSkgewotICAgICAgICAgICAgQVNTRVJU
KGwgPj0gMiAmJiBzdGFydFtsIC0gMV0gPT0gKnN0YXJ0KTsKLSAgICAgICAgICAgICsrc3RhcnQ7
Ci0gICAgICAgICAgICBsIC09IDI7CisKKyAgICBjYXNlIENoYXJhY3RlckVuZE50aENoaWxkOgor
ICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpCisgICAgICAgICAgICBt
X3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENo
YXJhY3RlclF1b3RlOgorICAgICAgICBpZiAoY2hlY2tTdHJpbmcobV9kYXRhLCBtX3Rva2VuKSkg
eworICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgICAgICAgICBwYXJzZVN0cmluZyhyZXN1bHQs
IG1fdG9rZW4pOworICAgICAgICAgICAgbV90b2tlbiA9IFNUUklORzsKKyAgICAgICAgICAgIHl5
bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQgKyAxOworICAgICAgICAgICAg
eXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gKG1fdG9rZW5TdGFydCArIDEpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6CisKKyAgICBjYXNlIENoYXJhY3Rl
ckV4Y2xhbWF0aW9uTWFyazogeworICAgICAgICBVQ2hhciogc3RhcnQgPSBza2lwV2hpdGVTcGFj
ZXMobV9kYXRhKTsKKyAgICAgICAgaWYgKGlzQ2FzZWxlc3NFcXVhbChzdGFydCwgImltcG9ydGFu
dCIpKSB7CisgICAgICAgICAgICBtX3Rva2VuID0gSU1QT1JUQU5UX1NZTTsKKyAgICAgICAgICAg
IG1fZGF0YSA9IHN0YXJ0ICsgOTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAK
LSAgICAvLyBwcm9jZXNzIGVzY2FwZXMKLSAgICBVQ2hhciogb3V0ID0gc3RhcnQ7Ci0gICAgVUNo
YXIqIGVzY2FwZSA9IDA7CisgICAgY2FzZSBDaGFyYWN0ZXJIYXNobWFyazogeworICAgICAgICBV
Q2hhciogc3RhcnQgPSBtX2RhdGE7CisgICAgICAgIHJlc3VsdCA9IG1fZGF0YTsKIAotICAgIGJv
b2wgc2F3RXNjYXBlID0gZmFsc2U7CisgICAgICAgIGlmIChpc0FTQ0lJRGlnaXQoKm1fZGF0YSkp
IHsKKyAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIHZhbGlkIGhleCBudW1iZXIgdG9rZW4u
CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAg
ICB9IHdoaWxlIChpc0FTQ0lJSGV4RGlnaXQoKm1fZGF0YSkpOworICAgICAgICAgICAgbV90b2tl
biA9IEhFWDsKKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBzdGFydDsK
KyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fZGF0YSAtIHN0YXJ0OworICAg
ICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBJRFNFTDsKKyAgICAgICAgICAgIGlmICghcGFyc2VJZGVudGlmaWVyKHJlc3VsdCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlzIGFsc28g
YSB2YWxpZCBoZXggbnVtYmVyLgorICAgICAgICAgICAgICAgIFVDaGFyKiBjdXJyZW50ID0gc3Rh
cnQ7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEhFWDsKKyAgICAgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50KSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IElEU0VMOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgKytjdXJyZW50OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQgPCByZXN1bHQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9
IHN0YXJ0OworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gc3Rh
cnQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgVUNoYXIqIGN1cnJlbnQgPSBzdGFydCArIGk7Ci0g
ICAgICAgIGlmIChlc2NhcGUgPT0gY3VycmVudCAtIDEpIHsKLSAgICAgICAgICAgIGlmIChpc0FT
Q0lJSGV4RGlnaXQoKmN1cnJlbnQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKHl5VG9rID09IFNUUklORyAmJgotICAgICAgICAgICAgICAgICAoKmN1cnJlbnQg
PT0gJ1xuJyB8fCAqY3VycmVudCA9PSAnXHInIHx8ICpjdXJyZW50ID09ICdcZicpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gIyMjIGhhbmRsZSBcclxuIGNhc2UKLSAgICAgICAgICAgICAgICBpZiAo
KmN1cnJlbnQgIT0gJ1xyJykKLSAgICAgICAgICAgICAgICAgICAgZXNjYXBlID0gMDsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICBjYXNlIENoYXJhY3RlclNsYXNoOgorICAgICAgICAv
LyBJZ25vcmUgY29tbWVudHMuIFRoZXkgYXJlIG5vdCBldmVuIGNvbnNpZGVyZWQgYXMgd2hpdGUg
c3BhY2VzLgorICAgICAgICBpZiAoKm1fZGF0YSA9PSAnKicpIHsKKyAgICAgICAgICAgICsrbV9k
YXRhOworICAgICAgICAgICAgd2hpbGUgKG1fZGF0YVswXSAhPSAnKicgfHwgbV9kYXRhWzFdICE9
ICcvJykgeworICAgICAgICAgICAgICAgIGlmIChtX2RhdGFbMF0gPT0gJ1xuJykKKyAgICAgICAg
ICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgaWYgKG1fZGF0YVsw
XSA9PSAnXDAnICYmIG1fZGF0YVsxXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFVudGVybWluYXRlZCBjb21tZW50cyBhcmUgc2ltcGx5IGlnbm9yZWQuCisgICAgICAgICAgICAg
ICAgICAgIG1fZGF0YSAtPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgKyttX2RhdGE7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBpbiBhbGwgb3RoZXIgY2FzZXMgY29weSB0aGUgY2hhciB0byBvdXRwdXQKLSAg
ICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgKm91dCsrID0gKmN1cnJlbnQ7Ci0gICAgICAg
ICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2Rh
dGEgKz0gMjsKKyAgICAgICAgICAgIGdvdG8gcmVzdGFydEFmdGVyQ29tbWVudDsKICAgICAgICAg
fQotICAgICAgICBpZiAoZXNjYXBlID09IGN1cnJlbnQgLSAyICYmIHl5VG9rID09IFNUUklORyAm
JgotICAgICAgICAgICAgICooY3VycmVudC0xKSA9PSAnXHInICYmICpjdXJyZW50ID09ICdcbicp
IHsKLSAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlckRvbGxhcjoKKyAgICAgICAgaWYgKCptX2Rh
dGEgPT0gJz0nKSB7CisgICAgICAgICAgICArK21fZGF0YTsKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBFTkRTV0lUSDsKICAgICAgICAgfQotICAgICAgICBpZiAoZXNjYXBlID4gY3VycmVudCAtIDcg
JiYgaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgICAgICAvLyBhZGQgZXNjYXBlZCBjaGFyCi0gICAg
ICAgICAgICB1bnNpZ25lZCB1YyA9IDA7Ci0gICAgICAgICAgICBlc2NhcGUrKzsKLSAgICAgICAg
ICAgIHdoaWxlIChlc2NhcGUgPCBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAgdWMgKj0gMTY7
Ci0gICAgICAgICAgICAgICAgdWMgKz0gdG9BU0NJSUhleFZhbHVlKCplc2NhcGUpOwotICAgICAg
ICAgICAgICAgIGVzY2FwZSsrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVy
QXN0ZXJpc2s6CisgICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgKytt
X2RhdGE7CisgICAgICAgICAgICBtX3Rva2VuID0gQ09OVEFJTlM7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlclBsdXM6CisgICAgICAgIGlmIChVTkxJS0VM
WShtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFNpbXBs
ZXN0IGNhc2UuICIrWzAtOV0qbiIgaXMgYWx3YXlzIE50aENoaWxkLgorICAgICAgICAgICAgaWYg
KHBhcnNlTnRoQ2hpbGQoKSkgeworICAgICAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYSgp
OworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgeXlsdmFs
LT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICB5eWx2
YWwtPnN0cmluZy5sZW5ndGggPSBtX2RhdGEgLSBtX3Rva2VuU3RhcnQ7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvLyBjYW4ndCBoYW5kbGUgY2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAg
ICAgICBpZiAodWMgPiAweGZmZmYpCi0gICAgICAgICAgICAgICAgdWMgPSAweGZmZmQ7Ci0gICAg
ICAgICAgICAqb3V0KysgPSB1YzsKLSAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAgICAg
ICBpZiAoaXNIVE1MU3BhY2UoKmN1cnJlbnQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmICghZXNjYXBlICYmICpjdXJyZW50ID09ICdcXCcpIHsKLSAg
ICAgICAgICAgIGVzY2FwZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICBzYXdFc2NhcGUgPSB0cnVl
OwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFy
YWN0ZXJMZXNzOgorICAgICAgICBpZiAobV9kYXRhWzBdID09ICchJyAmJiBtX2RhdGFbMV0gPT0g
Jy0nICYmIG1fZGF0YVsyXSA9PSAnLScpIHsKKyAgICAgICAgICAgIG1fZGF0YSArPSAzOworICAg
ICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CiAgICAgICAgIH0KLSAgICAgICAgKm91dCsrID0g
KmN1cnJlbnQ7Ci0gICAgfQotICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgLy8gYWRkIGVzY2Fw
ZWQgY2hhcgotICAgICAgICB1bnNpZ25lZCB1YyA9IDA7Ci0gICAgICAgIGVzY2FwZSsrOwotICAg
ICAgICB3aGlsZSAoZXNjYXBlIDwgc3RhcnQrbCkgewotICAgICAgICAgICAgdWMgKj0gMTY7Ci0g
ICAgICAgICAgICB1YyArPSB0b0FTQ0lJSGV4VmFsdWUoKmVzY2FwZSk7Ci0gICAgICAgICAgICBl
c2NhcGUrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlckF0OgorICAgICAg
ICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoKSkgeworICAgICAgICAgICAgbV90b2tlbiA9IEFUS0VZ
V09SRDsKKyAgICAgICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAgaGFzRXNjYXBlID0gcGFy
c2VJZGVudGlmaWVyKHJlc3VsdCk7CisgICAgICAgICAgICBkZXRlY3RBdFRva2VuKHJlc3VsdCAt
IG1fdG9rZW5TdGFydCwgaGFzRXNjYXBlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgQ2hhcmFjdGVyQmFja1NsYXNoOgorICAgICAgICBpZiAoaXNDU1NFc2NhcGUoKm1f
ZGF0YSkpIHsKKyAgICAgICAgICAgIC0tbV9kYXRhOworICAgICAgICAgICAgcGFyc2VJZGVudGlm
aWVyKHJlc3VsdCk7CisgICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7CisgICAgICAgICAgICB5
eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgeXls
dmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0gbV90b2tlblN0YXJ0OworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJYb3I6CisgICAgICAgIGlmICgqbV9k
YXRhID09ICc9JykgeworICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICBtX3Rva2Vu
ID0gQkVHSU5TV0lUSDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hh
cmFjdGVyVmVydGljYWxCYXI6CisgICAgICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAg
ICAgICAgKyttX2RhdGE7CisgICAgICAgICAgICBtX3Rva2VuID0gREFTSE1BVENIOwogICAgICAg
ICB9Ci0gICAgICAgIC8vIGNhbid0IGhhbmRsZSBjaGFycyBvdXRzaWRlIHVjczIKLSAgICAgICAg
aWYgKHVjID4gMHhmZmZmKQotICAgICAgICAgICAgdWMgPSAweGZmZmQ7Ci0gICAgICAgICpvdXQr
KyA9IHVjOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyVGlsZGU6CisgICAg
ICAgIGlmICgqbV9kYXRhID09ICc9JykgeworICAgICAgICAgICAgKyttX2RhdGE7CisgICAgICAg
ICAgICBtX3Rva2VuID0gSU5DTFVERVM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgKmxlbmd0aCA9IG91dCAtIHN0YXJ0OworI2lmbmRlZiBOREVCVUcKKyAg
ICBzd2l0Y2ggKHRva2VuKCkpIHsKKyAgICBjYXNlIFNUUklORzoKKyAgICAgICAgQVNTRVJUKHl5
bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICsgMSk7CisgICAgICAgIGJy
ZWFrOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBhbiB1bnJlY29nbml6ZWQgQC1rZXl3b3JkLCBhbmQg
aWYgd2UgaGFuZGxlZCBhbnkgZXNjYXBlcyBhdCBhbGwsIHRoZW4KLSAgICAvLyB3ZSBzaG91bGQg
YXR0ZW1wdCB0byBhZGp1c3QgeXlUb2sgdG8gdGhlIGNvcnJlY3QgdHlwZS4KLSAgICBpZiAoeXlU
b2sgPT0gQVRLRVlXT1JEICYmIHNhd0VzY2FwZSkKLSAgICAgICAgcmVjaGVja0F0S2V5d29yZChz
dGFydCwgKmxlbmd0aCk7CisgICAgY2FzZSBJREVOVDoKKyAgICBjYXNlIE5USDoKKyAgICBjYXNl
IERJTUVOOgorICAgIGNhc2UgVU5JQ09ERVJBTkdFOgorICAgIGNhc2UgRlVOQ1RJT046CisgICAg
Y2FzZSBBTllGVU5DVElPTjoKKyAgICBjYXNlIE5PVEZVTkNUSU9OOgorICAgIGNhc2UgQ0FMQ0ZV
TkNUSU9OOgorICAgIGNhc2UgTUlORlVOQ1RJT046CisgICAgY2FzZSBNQVhGVU5DVElPTjoKKyAg
ICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPT0gbV90b2tlblN0YXJ0ICYm
IHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA+IDApOworICAgICAgICBicmVhazsKIAotICAgIHJldHVy
biBzdGFydDsKLX0KKyAgICBjYXNlIFVSSToKKyAgICAgICAgQVNTRVJUKHl5bHZhbC0+c3RyaW5n
LmNoYXJhY3RlcnMgJiYgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyAhPSBtX3Rva2VuU3RhcnQp
OworICAgICAgICBicmVhazsKIAotdm9pZCBDU1NQYXJzZXI6OmNvdW50TGluZXMoKQotewotICAg
IGZvciAoVUNoYXIqIGN1cnJlbnQgPSB5eXRleHQ7IGN1cnJlbnQgPCB5eXRleHQgKyB5eWxlbmc7
ICsrY3VycmVudCkgewotICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJ1xuJykKLSAgICAgICAgICAg
ICsrbV9saW5lTnVtYmVyOworICAgIGNhc2UgSEVYOgorICAgIGNhc2UgSURTRUw6CisgICAgICAg
IEFTU0VSVCh5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID09IG1fdG9rZW5TdGFydCArIDEgJiYg
eXlsdmFsLT5zdHJpbmcubGVuZ3RoID4gMCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyNlbmRp
ZgorCisgICAgcmV0dXJuIHRva2VuKCk7CiB9CiAKIENTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJz
ZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKQpAQCAtNzk0MCwyNyArODkxOSwyNyBAQCB2b2lk
IENTU1BhcnNlcjo6dXBkYXRlTGFzdE1lZGlhTGluZShNZWRpYUxpc3QqIG1lZGlhKQogCiB2b2lk
IENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdFN0YXJ0KCkKIHsKLSAgICBtX3NlbGVjdG9yTGlz
dFJhbmdlLnN0YXJ0ID0geXl0ZXh0IC0gbV9kYXRhLmdldCgpOworICAgIG1fc2VsZWN0b3JMaXN0
UmFuZ2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKIH0KIAogdm9p
ZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RFbmQoKQogewogICAgIGlmICghbV9jdXJyZW50
UnVsZURhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICBVQ2hhciogbGlzdEVuZCA9IHl5dGV4dDsK
LSAgICB3aGlsZSAobGlzdEVuZCA+IG1fZGF0YS5nZXQoKSArIDEpIHsKKyAgICBVQ2hhciogbGlz
dEVuZCA9IG1fdG9rZW5TdGFydDsKKyAgICB3aGlsZSAobGlzdEVuZCA+IG1fZGF0YVN0YXJ0Lmdl
dCgpICsgMSkgewogICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKihsaXN0RW5kIC0gMSkpKQogICAg
ICAgICAgICAgLS1saXN0RW5kOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhLmdldCgp
OworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gbGlzdEVuZCAtIG1fZGF0YVN0YXJ0Lmdl
dCgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5U3RhcnQoKQogewotICAgIHVu
c2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YS5nZXQoKTsKLSAgICBpZiAoKnl5dGV4dCA9
PSAneycpCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQu
Z2V0KCk7CisgICAgaWYgKCptX3Rva2VuU3RhcnQgPT0gJ3snKQogICAgICAgICArK29mZnNldDsg
Ly8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcgYnJhY2UuCiAgICAgaWYgKG9mZnNldCA+IG1f
cnVsZUJvZHlSYW5nZS5zdGFydCkKICAgICAgICAgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gb2Zm
c2V0OwpAQCAtNzk2OSw3ICs4OTQ4LDcgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0
YXJ0KCkKIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7Ci0gICAgdW5zaWdu
ZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhLmdldCgpOworICAgIHVuc2lnbmVkIG9mZnNldCA9
IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogICAgIGlmIChvZmZzZXQgPiBtX3J1
bGVCb2R5UmFuZ2UuZW5kKQogICAgICAgICBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0Owog
fQpAQCAtNzk3OCwxNSArODk1NywxNSBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3Rh
cnQoKQogewogICAgIGlmICghbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24pCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSB5eXRleHQgLSBtX2RhdGEuZ2V0KCk7
CisgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQu
Z2V0KCk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9y
dGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiB7CiAgICAgaWYgKCFtX2luU3R5bGVS
dWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIG9mZnNldCA9
IHl5dGV4dCAtIG1fZGF0YS5nZXQoKTsKLSAgICBpZiAoKnl5dGV4dCA9PSAnOycpIC8vIEluY2x1
ZGUgc2VtaWNvbG9uIGludG8gdGhlIHByb3BlcnR5IHRleHQuCisgICAgdW5zaWduZWQgb2Zmc2V0
ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CisgICAgaWYgKCptX3Rva2VuU3Rh
cnQgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xvbiBpbnRvIHRoZSBwcm9wZXJ0eSB0ZXh0Lgog
ICAgICAgICArK29mZnNldDsKICAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gb2Zmc2V0OwogICAg
IGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYgbV9jdXJyZW50UnVsZURh
dGEpIHsKQEAgLTc5OTQsNyArODk3Myw3IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlF
bmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAgICBj
b25zdCB1bnNpZ25lZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwogICAgICAgICBBU1NFUlQo
c3RhcnQgPCBlbmQpOwotICAgICAgICBTdHJpbmcgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9k
YXRhLmdldCgpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAg
ICAgU3RyaW5nIHByb3BlcnR5U3RyaW5nID0gU3RyaW5nKG1fZGF0YVN0YXJ0LmdldCgpICsgc3Rh
cnQsIGVuZCAtIHN0YXJ0KS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKHByb3BlcnR5
U3RyaW5nLmVuZHNXaXRoKCI7IiwgdHJ1ZSkpCiAgICAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9
IHByb3BlcnR5U3RyaW5nLmxlZnQocHJvcGVydHlTdHJpbmcubGVuZ3RoKCkgLSAxKTsKICAgICAg
ICAgc2l6ZV90IGNvbG9uSW5kZXggPSBwcm9wZXJ0eVN0cmluZy5maW5kKCI6Iik7CkBAIC04MjEz
LDMzICs5MTkyLDQgQEAgYm9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3QgQ1NTUGFyc2VyU3RyaW5n
JiB0b2tlbikKICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodG9rZW4sICJuIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UodG9rZW4sICItbiIpOwogfQogCi0jZGVmaW5lIFlZX0RFQ0wgaW50IENT
U1BhcnNlcjo6bGV4KCkKLSNkZWZpbmUgeXljb25zdCBjb25zdAotdHlwZWRlZiBpbnQgeXlfc3Rh
dGVfdHlwZTsKLXR5cGVkZWYgdW5zaWduZWQgWVlfQ0hBUjsKLS8vIFRoZSBmb2xsb3dpbmcgbGlu
ZSBtYWtlcyBzdXJlIHdlIHRyZWF0IG5vbi1MYXRpbi0xIFVuaWNvZGUgY2hhcmFjdGVycyBjb3Jy
ZWN0bHkuCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpIChjID4gMHhmZiA/IDB4ZmYgOiBjKQotI2Rl
ZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICAgICAgeXl0ZXh0ID0geXlfYnA7IFwKLSAg
ICAgICAgeXlsZW5nID0gKGludCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgICAgIHl5X2hvbGRf
Y2hhciA9ICp5eV9jcDsgXAotICAgICAgICAqeXlfY3AgPSAwOyBcCi0gICAgICAgIHl5X2NfYnVm
X3AgPSB5eV9jcDsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZGVmaW5lIEVDSE8KLSNkZWZp
bmUgWVlfUlVMRV9TRVRVUAotI2RlZmluZSBJTklUSUFMIDAKLSNkZWZpbmUgWVlfU1RBVEVfRU9G
KHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLSNkZWZpbmUgeXl0ZXJtaW5h
dGUoKSB5eVRvayA9IEVORF9UT0tFTjsgcmV0dXJuIHl5VG9rCi0jZGVmaW5lIFlZX0ZBVEFMX0VS
Uk9SKGEpCi0vLyBUaGUgZm9sbG93aW5nIGxpbmUgaXMgbmVlZGVkIHRvIGJ1aWxkIHRoZSB0b2tl
bml6ZXIgd2l0aCBhIGNvbmRpdGlvbiBzdGFjay4KLS8vIFRoZSBtYWNybyBpcyB1c2VkIGluIHRo
ZSB0b2tlbml6ZXIgZ3JhbW1hciB3aXRoIGxpbmVzIGNvbnRhaW5pbmcKLS8vIEJFR0lOKG1lZGlh
cXVlcmllcykgYW5kIEJFR0lOKGluaXRpYWwpLiB5eV9zdGFydCBhY3RzIGFzIGluZGV4IHRvCi0v
LyB0b2tlbml6ZXIgdHJhbnNpdGlvbiB0YWJsZSwgYW5kICdtZWRpYXF1ZXJpZXMnIGFuZCAnaW5p
dGlhbCcgYXJlCi0vLyBvZmZzZXQgbXVsdGlwbGllcnMgdGhhdCBzcGVjaWZ5IHdoaWNoIHRyYW5z
aXRpb25zIGFyZSBhY3RpdmUKLS8vIGluIHRoZSB0b2tlbml6ZXIgZHVyaW5nIGluIGVhY2ggY29u
ZGl0aW9uICh0b2tlbml6ZXIgc3RhdGUpLgotI2RlZmluZSBCRUdJTiB5eV9zdGFydCA9IDEgKyAy
ICoKLQotI2luY2x1ZGUgInRva2VuaXplci5jcHAiCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApp
bmRleCBhMGRmNjk2Li4xZjRhZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0zMTcsMTIg
KzMxNywyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVs
ZUJvZHlSYW5nZS5zdGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CiAgICAgdm9pZCBy
ZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlS
YW5nZS5lbmQgPSBVSU5UX01BWDsgfQogICAgIGludCBsZXgodm9pZCogeXlsdmFsKTsKLSAgICBp
bnQgdG9rZW4oKSB7IHJldHVybiB5eVRvazsgfQotICAgIFVDaGFyKiB0ZXh0KGludCogbGVuZ3Ro
KTsKLSAgICB2b2lkIGNvdW50TGluZXMoKTsKLSAgICBpbnQgbGV4KCk7CisgICAgaW50IHRva2Vu
KCkgeyByZXR1cm4gbV90b2tlbjsgfQogCiBwcml2YXRlOgorICAgIGlubGluZSBib29sIGlzSWRl
bnRpZmllclN0YXJ0KCk7CisKKyAgICBzdGF0aWMgaW5saW5lIFVDaGFyKiBjaGVja1N0cmluZyhV
Q2hhciosIFVDaGFyKTsKKworICAgIHZvaWQgcGFyc2VFc2NhcGUoVUNoYXIqJik7CisgICAgaW5s
aW5lIGJvb2wgcGFyc2VJZGVudGlmaWVyKFVDaGFyKiYpOworICAgIGlubGluZSB2b2lkIHBhcnNl
U3RyaW5nKFVDaGFyKiYsIFVDaGFyKTsKKyAgICBpbmxpbmUgdm9pZCBwYXJzZVVSSShVQ2hhciom
LCBVQ2hhciomKTsKKyAgICBpbmxpbmUgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZSgpOworICAgIGJv
b2wgcGFyc2VOdGhDaGlsZCgpOworICAgIGJvb2wgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAg
aW5saW5lIHZvaWQgZGV0ZWN0RnVuY3Rpb25Ub2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRl
dGVjdE1lZGlhUXVlcnlUb2tlbihpbnQpOworICAgIGlubGluZSB2b2lkIGRldGVjdE51bWJlclRv
a2VuKFVDaGFyKiwgaW50KTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3REYXNoVG9rZW4oaW50KTsK
KyAgICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CisKICAgICB2b2lkIHNl
dFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwogICAgIHZvaWQgZW5zdXJlQ1NTVmFsdWVQb29s
KCk7CiAKQEAgLTM1OCwxNSArMzcyLDE3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHBhcnNlQ29s
b3IoY29uc3QgU3RyaW5nJik7CiAKLSAgICBPd25BcnJheVB0cjxVQ2hhcj4gbV9kYXRhOwotICAg
IFVDaGFyKiB5eXRleHQ7Ci0gICAgVUNoYXIqIHl5X2NfYnVmX3A7Ci0gICAgVUNoYXIgeXlfaG9s
ZF9jaGFyOwotICAgIGludCB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBVQ2hhciogeXlf
bGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICBpbnQgeXlsZW5nOwotICAgIGludCB5eVRvazsKLSAg
ICBpbnQgeXlfc3RhcnQ7CisgICAgZW51bSBQYXJzaW5nTW9kZSB7CisgICAgICAgIE5vcm1hbE1v
ZGUsCisgICAgICAgIE1lZGlhUXVlcnlNb2RlLAorICAgICAgICBOdGhDaGlsZE1vZGUKKyAgICB9
OworCisgICAgUGFyc2luZ01vZGUgbV9wYXJzaW5nTW9kZTsKKyAgICBPd25BcnJheVB0cjxVQ2hh
cj4gbV9kYXRhU3RhcnQ7CisgICAgVUNoYXIqIG1fZGF0YTsKKyAgICBVQ2hhciogbV90b2tlblN0
YXJ0OworICAgIGludCBtX3Rva2VuOwogICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1f
bGFzdFNlbGVjdG9yTGluZU51bWJlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L3Rva2VuaXplci5mbGV4IGIvU291cmNlL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjhkYmNhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBA
Ci0lb3B0aW9uIGNhc2UtaW5zZW5zaXRpdmUKLSVvcHRpb24gbm95eXdyYXAKLSVvcHRpb24gOGJp
dAotJW9wdGlvbiBzdGFjawotJXMgbWVkaWFxdWVyeQotJXMgZm9ya2V5d29yZAotJXMgbnRoY2hp
bGQKLQotaCAgICAgICAgICAgICAgIFswLTlhLWZBLUZdCi1ub25hc2NpaSAgICAgICAgW1wyMDAt
XDM3N10KLXVuaWNvZGUgICAgICAgICBcXHtofXsxLDZ9WyBcdFxyXG5cZl0/Ci1lc2NhcGUgICAg
ICAgICAge3VuaWNvZGV9fFxcWyAtflwyMDAtXDM3N10KLW5tc3RhcnQgICAgICAgICBbX2EtekEt
Wl18e25vbmFzY2lpfXx7ZXNjYXBlfQotbm1jaGFyICAgICAgICAgIFtfYS16QS1aMC05LV18e25v
bmFzY2lpfXx7ZXNjYXBlfQotc3RyaW5nMSAgICAgICAgIFwiKFteXG5cclxmXFwiXXxcXHtubH18
e2VzY2FwZX0pKlwiCi1zdHJpbmcyICAgICAgICAgXCcoW15cblxyXGZcXCddfFxce25sfXx7ZXNj
YXBlfSkqXCcKLQotaWRlbnQgICAgICAgICAgIC0/e25tc3RhcnR9e25tY2hhcn0qCi1udW0gICAg
ICAgICAgICAgWzAtOV0rfFswLTldKiIuIlswLTldKwotaW50bnVtICAgICAgICAgIFswLTldKwot
c3RyaW5nICAgICAgICAgIHtzdHJpbmcxfXx7c3RyaW5nMn0KLXVybCAgICAgICAgICAgICAoWyEj
JCUmKi1+XXx7bm9uYXNjaWl9fHtlc2NhcGV9KSoKLXcgICAgICAgICAgICAgICBbIFx0XHJcblxm
XSoKLW5sICAgICAgICAgICAgICBcbnxcclxufFxyfFxmCi1yYW5nZSAgICAgICAgICAgXD97MSw2
fXx7aH0oXD97MCw1fXx7aH0oXD97MCw0fXx7aH0oXD97MCwzfXx7aH0oXD97MCwyfXx7aH0oXD8/
fHtofSkpKSkpCi1udGggICAgICAgICAgICAgW1wrLV0/e2ludG51bX0qbihbXHRcclxuIF0qW1wr
LV1bXHRcclxuIF0qe2ludG51bX0pPwotbnRoZnVuYyAgICAgICAgICJudGgtIigiY2hpbGQifCJv
Zi10eXBlInwibGFzdC1jaGlsZCJ8Imxhc3Qtb2YtdHlwZSIpCi0KLSUlCi0KLVwvXCpbXipdKlwq
KyhbXi8qXVteKl0qXCorKSpcLyB7Y291bnRMaW5lcygpOyAvKiBpZ25vcmUgY29tbWVudHMgKi8g
fQotCi1bIFx0XHJcblxmXSsgICAgICAgICAgICB7Y291bnRMaW5lcygpOyB5eVRvayA9IFdISVRF
U1BBQ0U7IHJldHVybiB5eVRvazt9Ci0KLSI8IS0tIiAgICAgICAgICAgICAgICAgIHt5eVRvayA9
IFNHTUxfQ0Q7IHJldHVybiB5eVRvazt9Ci0iLS0+IiAgICAgICAgICAgICAgICAgICB7eXlUb2sg
PSBTR01MX0NEOyByZXR1cm4geXlUb2s7fQotIn49IiAgICAgICAgICAgICAgICAgICAge3l5VG9r
ID0gSU5DTFVERVM7IHJldHVybiB5eVRvazt9Ci0ifD0iICAgICAgICAgICAgICAgICAgICB7eXlU
b2sgPSBEQVNITUFUQ0g7IHJldHVybiB5eVRvazt9Ci0iXj0iICAgICAgICAgICAgICAgICAgICB7
eXlUb2sgPSBCRUdJTlNXSVRIOyByZXR1cm4geXlUb2s7fQotIiQ9IiAgICAgICAgICAgICAgICAg
ICAge3l5VG9rID0gRU5EU1dJVEg7IHJldHVybiB5eVRvazt9Ci0iKj0iICAgICAgICAgICAgICAg
ICAgICB7eXlUb2sgPSBDT05UQUlOUzsgcmV0dXJuIHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJub3Qi
ICAgICAgIHt5eVRvayA9IE1FRElBX05PVDsgcmV0dXJuIHl5VG9rO30KLTxtZWRpYXF1ZXJ5PiJv
bmx5IiAgICAgIHt5eVRvayA9IE1FRElBX09OTFk7IHJldHVybiB5eVRvazt9Ci08bWVkaWFxdWVy
eT4iYW5kIiAgICAgICB7eXlUb2sgPSBNRURJQV9BTkQ7IHJldHVybiB5eVRvazt9Ci0KLXtzdHJp
bmd9ICAgICAgICAgICAgICAgIHt5eVRvayA9IFNUUklORzsgcmV0dXJuIHl5VG9rO30KLXtpZGVu
dH0gICAgICAgICAgICAgICAgIHt5eVRvayA9IElERU5UOyByZXR1cm4geXlUb2s7fQotPG50aGNo
aWxkPntudGh9ICAgICAgICAge3l5VG9rID0gTlRIOyByZXR1cm4geXlUb2s7fQotPG50aGNoaWxk
PiIpIiAgICAgICAgICAge0JFR0lOKElOSVRJQUwpOyB5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5
eVRvazt9Ci0KLSIjIntofSsgICAgICAgICAgICAgICAgIHt5eVRvayA9IEhFWDsgcmV0dXJuIHl5
VG9rO30KLSIjIntpZGVudH0gICAgICAgICAgICAgIHt5eVRvayA9IElEU0VMOyByZXR1cm4geXlU
b2s7fQotCi0iQGltcG9ydCIgICAgICAgICAgICAgICB7QkVHSU4obWVkaWFxdWVyeSk7IHl5VG9r
ID0gSU1QT1JUX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcGFnZSIgICAgICAgICAgICAgICAgIHt5
eVRvayA9IFBBR0VfU1lNOyByZXR1cm4geXlUb2s7fQotIkB0b3AtbGVmdC1jb3JuZXIiICAgICAg
e3l5VG9rID0gVE9QTEVGVENPUk5FUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1sZWZ0IiAg
ICAgICAgICAgICB7eXlUb2sgPSBUT1BMRUZUX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAdG9wLWNl
bnRlciIgICAgICAgICAgIHt5eVRvayA9IFRPUENFTlRFUl9TWU07IHJldHVybiB5eVRvazt9Ci0i
QHRvcC1yaWdodCIgICAgICAgICAgICB7eXlUb2sgPSBUT1BSSUdIVF9TWU07IHJldHVybiB5eVRv
azt9Ci0iQHRvcC1yaWdodC1jb3JuZXIiICAgICB7eXlUb2sgPSBUT1BSSUdIVENPUk5FUl9TWU07
IHJldHVybiB5eVRvazt9Ci0iQGJvdHRvbS1sZWZ0LWNvcm5lciIgICB7eXlUb2sgPSBCT1RUT01M
RUZUQ09STkVSX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLWxlZnQiICAgICAgICAgIHt5
eVRvayA9IEJPVFRPTUxFRlRfU1lNOyByZXR1cm4geXlUb2s7fQotIkBib3R0b20tY2VudGVyIiAg
ICAgICAge3l5VG9rID0gQk9UVE9NQ0VOVEVSX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9t
LXJpZ2h0IiAgICAgICAgIHt5eVRvayA9IEJPVFRPTVJJR0hUX1NZTTsgcmV0dXJuIHl5VG9rO30K
LSJAYm90dG9tLXJpZ2h0LWNvcm5lciIgIHt5eVRvayA9IEJPVFRPTVJJR0hUQ09STkVSX1NZTTsg
cmV0dXJuIHl5VG9rO30KLSJAbGVmdC10b3AiICAgICAgICAgICAgIHt5eVRvayA9IExFRlRUT1Bf
U1lNOyByZXR1cm4geXlUb2s7fQotIkBsZWZ0LW1pZGRsZSIgICAgICAgICAge3l5VG9rID0gTEVG
VE1JRERMRV9TWU07IHJldHVybiB5eVRvazt9Ci0iQGxlZnQtYm90dG9tIiAgICAgICAgICB7eXlU
b2sgPSBMRUZUQk9UVE9NX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtdG9wIiAgICAgICAg
ICAgIHt5eVRvayA9IFJJR0hUVE9QX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmlnaHQtbWlkZGxl
IiAgICAgICAgIHt5eVRvayA9IFJJR0hUTUlERExFX1NZTTsgcmV0dXJuIHl5VG9rO30KLSJAcmln
aHQtYm90dG9tIiAgICAgICAgIHt5eVRvayA9IFJJR0hUQk9UVE9NX1NZTTsgcmV0dXJuIHl5VG9r
O30KLSJAbWVkaWEiICAgICAgICAgICAgICAgIHtCRUdJTihtZWRpYXF1ZXJ5KTsgeXlUb2sgPSBN
RURJQV9TWU07IHJldHVybiB5eVRvazt9Ci0iQGZvbnQtZmFjZSIgICAgICAgICAgICB7eXlUb2sg
PSBGT05UX0ZBQ0VfU1lNOyByZXR1cm4geXlUb2s7fQotIkBjaGFyc2V0IiAgICAgICAgICAgICAg
e3l5VG9rID0gQ0hBUlNFVF9TWU07IHJldHVybiB5eVRvazt9Ci0iQG5hbWVzcGFjZSIgICAgICAg
ICAgICB7eXlUb2sgPSBOQU1FU1BBQ0VfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1y
dWxlIiAgICAgICAgIHt5eVRvayA9IFdFQktJVF9SVUxFX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0i
QC13ZWJraXQtZGVjbHMiICAgICAgICB7eXlUb2sgPSBXRUJLSVRfREVDTFNfU1lNOyByZXR1cm4g
eXlUb2s7IH0KLSJALXdlYmtpdC12YWx1ZSIgICAgICAgIHt5eVRvayA9IFdFQktJVF9WQUxVRV9T
WU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LW1lZGlhcXVlcnkiICAge0JFR0lOKG1lZGlh
cXVlcnkpOyB5eVRvayA9IFdFQktJVF9NRURJQVFVRVJZX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0i
QC13ZWJraXQtc2VsZWN0b3IiICAgICB7eXlUb2sgPSBXRUJLSVRfU0VMRUNUT1JfU1lNOyByZXR1
cm4geXlUb2s7IH0KLSJALXdlYmtpdC1rZXlmcmFtZXMiICAgIHt5eVRvayA9IFdFQktJVF9LRVlG
UkFNRVNfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1rZXlmcmFtZS1ydWxlIiB7eXlU
b2sgPSBXRUJLSVRfS0VZRlJBTUVfUlVMRV9TWU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0
LXJlZ2lvbiIgICAgICAge3l5VG9rID0gV0VCS0lUX1JFR0lPTl9SVUxFX1NZTTsgcmV0dXJuIHl5
VG9rO30KLQotIkAie2lkZW50fSAgICAgICAgICAgICAge3l5VG9rID0gQVRLRVlXT1JEOyByZXR1
cm4geXlUb2s7IH0KLQotIiEie3d9ImltcG9ydGFudCIgICAgICAge3l5VG9rID0gSU1QT1JUQU5U
X1NZTTsgcmV0dXJuIHl5VG9rO30KLQote251bX1lbSAgICAgICAgICAgICAgICAge3l5VG9rID0g
RU1TOyByZXR1cm4geXlUb2s7fQote251bX1yZW0gICAgICAgICAgICAgICAge3l5VG9rID0gUkVN
UzsgcmV0dXJuIHl5VG9rO30KLXtudW19X19xZW0gICAgICAgICAgICAgIHt5eVRvayA9IFFFTVM7
IHJldHVybiB5eVRvazt9IC8qIHF1aXJreSBlbXMgKi8KLXtudW19ZXggICAgICAgICAgICAgICAg
IHt5eVRvayA9IEVYUzsgcmV0dXJuIHl5VG9rO30KLXtudW19cHggICAgICAgICAgICAgICAgIHt5
eVRvayA9IFBYUzsgcmV0dXJuIHl5VG9rO30KLXtudW19Y20gICAgICAgICAgICAgICAgIHt5eVRv
ayA9IENNUzsgcmV0dXJuIHl5VG9rO30KLXtudW19bW0gICAgICAgICAgICAgICAgIHt5eVRvayA9
IE1NUzsgcmV0dXJuIHl5VG9rO30KLXtudW19aW4gICAgICAgICAgICAgICAgIHt5eVRvayA9IElO
UzsgcmV0dXJuIHl5VG9rO30KLXtudW19cHQgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBUUzsg
cmV0dXJuIHl5VG9rO30KLXtudW19cGMgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBDUzsgcmV0
dXJuIHl5VG9rO30KLXtudW19ZGVnICAgICAgICAgICAgICAgIHt5eVRvayA9IERFR1M7IHJldHVy
biB5eVRvazt9Ci17bnVtfXJhZCAgICAgICAgICAgICAgICB7eXlUb2sgPSBSQURTOyByZXR1cm4g
eXlUb2s7fQote251bX1ncmFkICAgICAgICAgICAgICAge3l5VG9rID0gR1JBRFM7IHJldHVybiB5
eVRvazt9Ci17bnVtfXR1cm4gICAgICAgICAgICAgICB7eXlUb2sgPSBUVVJOUzsgcmV0dXJuIHl5
VG9rO30KLXtudW19bXMgICAgICAgICAgICAgICAgIHt5eVRvayA9IE1TRUNTOyByZXR1cm4geXlU
b2s7fQote251bX1zICAgICAgICAgICAgICAgICAge3l5VG9rID0gU0VDUzsgcmV0dXJuIHl5VG9r
O30KLXtudW19SHogICAgICAgICAgICAgICAgIHt5eVRvayA9IEhFUlRaOyByZXR1cm4geXlUb2s7
fQote251bX1rSHogICAgICAgICAgICAgICAge3l5VG9rID0gS0hFUlRaOyByZXR1cm4geXlUb2s7
fQote251bX17aWRlbnR9ICAgICAgICAgICAge3l5VG9rID0gRElNRU47IHJldHVybiB5eVRvazt9
Ci17bnVtfXtpZGVudH1cKyAgICAgICAgICB7eXlUb2sgPSBJTlZBTElERElNRU47IHJldHVybiB5
eVRvazt9Ci17bnVtfSUrICAgICAgICAgICAgICAgICB7eXlUb2sgPSBQRVJDRU5UQUdFOyByZXR1
cm4geXlUb2s7fQote2ludG51bX0gICAgICAgICAgICAgICAge3l5VG9rID0gSU5URUdFUjsgcmV0
dXJuIHl5VG9rO30KLXtudW19ICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IEZMT0FUVE9LRU47
IHJldHVybiB5eVRvazt9Ci0KLSItd2Via2l0LWFueSgiICAgICAgICAgIHt5eVRvayA9IEFOWUZV
TkNUSU9OOyByZXR1cm4geXlUb2s7fQotIm5vdCgiICAgICAgICAgICAgICAgICAge3l5VG9rID0g
Tk9URlVOQ1RJT047IHJldHVybiB5eVRvazt9Ci0idXJsKCJ7d317c3RyaW5nfXt3fSIpIiB7eXlU
b2sgPSBVUkk7IHJldHVybiB5eVRvazt9Ci0idXJsKCJ7d317dXJsfXt3fSIpIiAgICB7eXlUb2sg
PSBVUkk7IHJldHVybiB5eVRvazt9Ci0iLXdlYmtpdC1jYWxjKCIgICAgICAgICB7eXlUb2sgPSBD
QUxDRlVOQ1RJT047IHJldHVybiB5eVRvazt9Ci0iLXdlYmtpdC1taW4oIiAgICAgICAgICB7eXlU
b2sgPSBNSU5GVU5DVElPTjsgcmV0dXJuIHl5VG9rO30KLSItd2Via2l0LW1heCgiICAgICAgICAg
IHt5eVRvayA9IE1BWEZVTkNUSU9OOyByZXR1cm4geXlUb2s7fQote250aGZ1bmN9IigiICAgICAg
ICAgICAge0JFR0lOKG50aGNoaWxkKTsgeXlUb2sgPSBGVU5DVElPTjsgcmV0dXJuIHl5VG9rO30K
LXtpZGVudH0iKCIgICAgICAgICAgICAgIHt5eVRvayA9IEZVTkNUSU9OOyByZXR1cm4geXlUb2s7
fQotCi1VXCt7cmFuZ2V9ICAgICAgICAgICAgICB7eXlUb2sgPSBVTklDT0RFUkFOR0U7IHJldHVy
biB5eVRvazt9Ci1VXCt7aH17MSw2fS17aH17MSw2fSAgICB7eXlUb2sgPSBVTklDT0RFUkFOR0U7
IHJldHVybiB5eVRvazt9Ci0KLTxtZWRpYXF1ZXJ5PiJ7IiAgICAgICAgIHwKLTxtZWRpYXF1ZXJ5
PiI7IiAgICAgICAgIHtCRUdJTihJTklUSUFMKTsgeXlUb2sgPSAqeXl0ZXh0OyByZXR1cm4geXlU
b2s7IH0KLS4gICAgICAgICAgICAgICAgICAgICAgIHt5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5
eVRvazt9Ci0KLSUlCmRpZmYgLS1naXQgYS93c2NyaXB0IGIvd3NjcmlwdAppbmRleCBhOTg5OWI2
Li5hZGZlNjM3IDEwMDY0NAotLS0gYS93c2NyaXB0CisrKyBiL3dzY3JpcHQKQEAgLTI3OCw3ICsy
NzgsNiBAQCBkZWYgYnVpbGQoYmxkKToKICAgICAgICAgIyBpbnRlcm1lZGlhdGUgc291cmNlcwog
ICAgICAgICBleGNsdWRlcy5hcHBlbmQoJ0RvY1R5cGVTdHJpbmdzLmNwcCcpCiAgICAgICAgIGV4
Y2x1ZGVzLmFwcGVuZCgnSFRNTEVudGl0eU5hbWVzLmNwcCcpCi0gICAgICAgIGV4Y2x1ZGVzLmFw
cGVuZCgndG9rZW5pemVyLmNwcCcpCiAKICAgICAgICAgIyBRdCBzcGVjaWZpYyBmaWxlIGluIGNv
bW1vbiBzb3VyY2VzCiAgICAgICAgIGV4Y2x1ZGVzLmFwcGVuZCgnQ29udGV4dFNoYWRvdy5jcHAn
KQotLSAKMS43LjIuNQoK
</data>
<flag name="review"
          id="124798"
          type_id="1"
          status="+"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="124906"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123928</attachid>
            <date>2012-01-25 06:01:18 -0800</date>
            <delta_ts>2012-01-29 11:17:03 -0800</delta_ts>
            <desc>patch with renamings</desc>
            <filename>0001-css-lexer.patch</filename>
            <type>text/plain</type>
            <size>85837</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAyZTVhMjkyNDdiYTE5MTMzNjQ1Y2I4M2ExMGMwOTM1YzdhN2JjZDk1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
RGF0ZTogV2VkLCAyNSBKYW4gMjAxMiAwNTo1NzowNSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGNz
cy1sZXhlcgoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTEgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgfCAgIDE0ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQVNDSUlDVHlw
ZS5oICAgICAgICAgICAgIHwgICAyMCArCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTEgLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc0ICsKIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UgICAgICAgICAgICAgICAgIHwgICAgOCAtCiBTb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5wcmkgICAgICAgICAgICAgICAgICB8ICAgMTEgLQogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICA1IC0KIFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgMyAtCiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCAgICAgICAgICAgICB8ICAgMTcgLQogLi4u
L1dlYkNvcmUuZ3lwL3NjcmlwdHMvYWN0aW9uX21ha2V0b2tlbml6ZXIucHkgICAgfCAgMTAxIC0t
CiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDEgLQogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAg
fCAgICA0IC0KIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiAgIHwgICAgNCAtCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCAgICAgICAgICAg
ICAgICAgICB8IDE0NDEgKysrKysrKysrKysrKysrKy0tLS0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0MiArLQogU291cmNlL1dlYkNvcmUv
Y3NzL3Rva2VuaXplci5mbGV4ICAgICAgICAgICAgICAgICAgfCAgMTMwIC0tCiB3c2NyaXB0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgLQogMTggZmls
ZXMgY2hhbmdlZCwgMTMzNiBpbnNlcnRpb25zKCspLCA1NjIgZGVsZXRpb25zKC0pCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvc2NyaXB0cy9hY3Rpb25fbWFr
ZXRva2VuaXplci5weQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2Nzcy90b2tl
bml6ZXIuZmxleAoKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxNmYz
NmRlLi44MmZmMWNkIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTItMDEtMjUgIFpvbHRhbiBIZXJjemVnICA8emhlcmN6ZWdAd2Via2l0
Lm9yZz4KKworICAgICAgICBDdXN0b20gd3JpdHRlbiBDU1MgbGV4ZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTA3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRva2VuaXplci5jcHAgZnJv
bSBpbnRlcm1lZGlhdGUgc291cmNlcy4KKworICAgICAgICAqIHdzY3JpcHQ6CisKIDIwMTItMDEt
MjUgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCByZWdpc3RlcmluZyBvZiA8c3R5bGUgc2NvcGVk
PiB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVl
MTg5ZjMuLmM5MjFkODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDEyLTAxLTI1ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgQ3VzdG9tIHdyaXR0ZW4gQ1NTIGxleGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGN1
c3RvbSB3cml0dGVuIENTUyBsZXhlci4KKworICAgICAgICAqIHd0Zi9BU0NJSUNUeXBlLmg6Cisg
ICAgICAgIChXVEY6OnRvQVNDSUlMb3dlclVuY2hlY2tlZCk6CisgICAgICAgIChXVEYpOgorICAg
ICAgICAoV1RGOjppc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKToKKwogMjAxMi0wMS0yNCAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU1CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvQVNDSUlDVHlwZS5oCmluZGV4IDE3MDA2YWUuLjE4ZTEwOGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCkBAIC0xMTEsNiArMTExLDE2IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJUeXBlPiBpbmxpbmUgQ2hhclR5cGUgdG9BU0NJSUxvd2VyKENoYXJUeXBlIGMp
CiAgICAgcmV0dXJuIGMgfCAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSA8PCA1KTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSBDaGFyVHlwZSB0b0FTQ0lJTG93ZXJVbmNo
ZWNrZWQoQ2hhclR5cGUgY2hhcmFjdGVyKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gY2FuIGJl
IHVzZWQgZm9yIGNvbXBhcmluZyBhbnkgaW5wdXQgY2hhcmFjdGVyCisgICAgLy8gdG8gYSBsb3dl
cmNhc2UgRW5nbGlzaCBjaGFyYWN0ZXIuIFRoZSBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsCisg
ICAgLy8gYmVsb3cgc2hvdWxkIGJlIHVzZWQgZm9yIHJlZ3VsYXIgY29tcGFyaXNvbiBvZiBBU0NJ
SSBhbHBoYQorICAgIC8vIGNoYXJhY3RlcnMsIGJ1dCBzd2l0Y2ggc3RhdGVtZW50cyBpbiBDU1Mg
dG9rZW5pemVyIHJlcXVpcmUKKyAgICAvLyBkaXJlY3QgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCisg
ICAgcmV0dXJuIGNoYXJhY3RlciB8IDB4MjA7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJU
eXBlPiBpbmxpbmUgQ2hhclR5cGUgdG9BU0NJSVVwcGVyKENoYXJUeXBlIGMpCiB7CiAgICAgcmV0
dXJuIGMgJiB+KChjID49ICdhJyAmJiBjIDw9ICd6JykgPDwgNSk7CkBAIC0xNDAsNiArMTUwLDE0
IEBAIGlubGluZSBjaGFyIHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNoYXIgYykKICAgICBy
ZXR1cm4gbmliYmxlIDwgMTAgPyAnMCcgKyBuaWJibGUgOiAnQScgKyBuaWJibGUgLSAxMDsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSBib29sIGlzQVNDSUlBbHBoYUNh
c2VsZXNzRXF1YWwoQ2hhclR5cGUgY3NzQ2hhcmFjdGVyLCBjaGFyIGNoYXJhY3RlcikKK3sKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIGEgKHByZWZlcnJhYmx5KSBjb25zdGFudCBBU0NJ
SQorICAgIC8vIGxvd2VyY2FzZSBsZXR0ZXIgdG8gYW55IGlucHV0IGNoYXJhY3Rlci4KKyAgICBB
U1NFUlQoY2hhcmFjdGVyID49ICdhJyAmJiBjaGFyYWN0ZXIgPD0gJ3onKTsKKyAgICByZXR1cm4g
TElLRUxZKHRvQVNDSUlMb3dlclVuY2hlY2tlZChjc3NDaGFyYWN0ZXIpID09IGNoYXJhY3Rlcik7
Cit9CisKIH0KIAogdXNpbmcgV1RGOjppc0FTQ0lJOwpAQCAtMTU0LDggKzE3MiwxMCBAQCB1c2lu
ZyBXVEY6OmlzQVNDSUlTcGFjZTsKIHVzaW5nIFdURjo6aXNBU0NJSVVwcGVyOwogdXNpbmcgV1RG
Ojp0b0FTQ0lJSGV4VmFsdWU7CiB1c2luZyBXVEY6OnRvQVNDSUlMb3dlcjsKK3VzaW5nIFdURjo6
dG9BU0NJSUxvd2VyVW5jaGVja2VkOwogdXNpbmcgV1RGOjp0b0FTQ0lJVXBwZXI7CiB1c2luZyBX
VEY6Omxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0OwogdXNpbmcgV1RGOjp1cHBlck5pYmJsZVRv
QVNDSUlIZXhEaWdpdDsKK3VzaW5nIFdURjo6aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbDsKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDM2NmMyYTAuLjQxY2I4NzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC0yMzIyLDE3ICsyMzIyLDYgQEAgQUREX0NVU1RPTV9DT01NQU5EKAog
TElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9IVE1MRW50aXR5VGFibGUuY3BwKQogCiAKLSMgR2VuZXJhdGUgdG9rZW5pemVyCi1GSUxFKFRP
X05BVElWRV9QQVRIICR7UEVSTF9FWEVDVVRBQkxFfSBQRVJMX0VYRUNVVEFCTEVfTkFUSVZFX1BB
VEgpCi1BRERfQ1VTVE9NX0NPTU1BTkQoCi0gICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS90b2tlbml6ZXIuY3BwCi0gICAgTUFJTl9ERVBFTkRFTkNZICR7V0VCQ09SRV9E
SVJ9L2Nzcy9tYWtldG9rZW5pemVyCi0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9jc3MvdG9r
ZW5pemVyLmZsZXgKLSAgICBDT01NQU5EICR7RkxFWF9FWEVDVVRBQkxFfSAtdCAke1dFQkNPUkVf
RElSfS9jc3MvdG9rZW5pemVyLmZsZXggfCAke1BFUkxfRVhFQ1VUQUJMRV9OQVRJVkVfUEFUSH0g
JHtXRUJDT1JFX0RJUn0vY3NzL21ha2V0b2tlbml6ZXIgPiAke0RFUklWRURfU09VUkNFU19XRUJD
T1JFX0RJUn0vdG9rZW5pemVyLmNwcAotICAgIFZFUkJBVElNKQotQUREX1NPVVJDRV9XRUJDT1JF
X0RFUklWRURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2Nzcy9DU1NQYXJzZXIuY3BwIHRv
a2VuaXplci5jcHApCi0KLQogIyBSZXBsYWNlICI7IiB3aXRoICJzcGFjZSIgaW4gb3JkZXIgdG8g
cmVjb2duaXplIGZlYXR1cmUgZGVmaW5pdGlvbiBpbiBjc3MgZmlsZXMuCiBTRVQoRkVBVFVSRV9E
RUZJTkVTX1dJVEhfU1BBQ0VfU0VQQVJBVE9SICIiKQogRk9SRUFDSChfZmVhdHVyZSAke0ZFQVRV
UkVfREVGSU5FU30pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ0Nzg2MS4uNDMzOTNjZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDc3IEBACisyMDEyLTAxLTI1ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQ3VzdG9tIHdyaXR0ZW4gQ1NTIGxleGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFjZXMg
dGhlIGZsZXggYmFzZWQgQ1NTIGxleGVyIHRvIGEKKyAgICAgICAgbmV3LCBjdXN0b20gd3JpdHRl
biBvbmUuIFRoZSBuZXcgY29kZSBpcyBtb3JlCisgICAgICAgIHRoYW4gMiB0aW1lcyBmYXN0ZXIg
YWNjb3JkaW5nIHRvIG9wcm9maWxlIGFuZCBDUFUKKyAgICAgICAgY3ljbGUgY291bnRlcnMuCisK
KyAgICAgICAgVGhlIGNvZGUgc3RydWN0dXJlIGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZDogaXQg
Y2hvb3NlCisgICAgICAgIHRoZSBwb3NzaWJsZSB0b2tlbiBncm91cCBiYXNlZCBvbiB0aGUgZmly
c3QgY2hhcmFjdGVyCisgICAgICAgIGFuZCBlbXBsb3kgdXRpbGl0eSBmdW5jdGlvbnMgdG8gcGFy
c2UgdGhlIGxvbmdlciB0aGFuCisgICAgICAgIG9uZSBjaGFyYWN0ZXIgbG9uZyBvbmVzLiBNb3N0
IG9mIHRoZSB1dGlsaXRpZXMgYXJlIGlubGluZQorICAgICAgICB0byBtYWtlIHRoZSBsZXhlciBm
YXN0LgorCisgICAgICAgIEFsbCBidWlsZCBzeXN0ZW1zIHVwZGF0ZWQuIEluY2x1ZGluZyByZW1v
dmluZyB0aGUgZmxleCBzdXBwb3J0LgorCisgICAgICAgIEV4aXN0aW5nIHRlc3RzIGNvdmVyIHRo
aXMgZmVhdHVyZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJpOgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXAvc2NyaXB0
cy9hY3Rpb25fbWFrZXRva2VuaXplci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpDU1NQYXJzZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzZXR1cFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZVNpbXBsZUxlbmd0aFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1pZ2h0QmVSR0JBKToK
KyAgICAgICAgKFdlYkNvcmU6Om1pZ2h0QmVSR0IpOgorICAgICAgICAoKToKKyAgICAgICAgKFdl
YkNvcmU6OmlzQ1NTTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNDU1NFc2NhcGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNVUklMZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNFcXVhbFRvQ1NTSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0FuZFNr
aXBFc2NhcGUpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcFdoaXRlU3BhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjppc0lkZW50aWZpZXJTdGFydCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OmNoZWNrQW5kU2tpcFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlRXNjYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVVSSSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlVW5pY29kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VOdGhDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
TnRoQ2hpbGRFeHRyYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmRldGVjdEZ1bmN0
aW9uVHlwZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0TWVkaWFR
dWVyeVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0TnVtYmVyVG9r
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3REYXNoVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1Nl
bGVjdG9yTGlzdFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1NlbGVj
dG9yTGlzdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQpOgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dG9rZW4pOgorICAgICAgICAo
Q1NTUGFyc2VyKToKKyAgICAgICAgKCk6CisgICAgICAgICogY3NzL3Rva2VuaXplci5mbGV4OiBS
ZW1vdmVkLgorCiAyMDEyLTAxLTI1ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtJbnNwZWN0b3JJbmRleGVkREJdIFBhc3Mg
RGF0YWJhc2UsIG9iamVjdCBzdG9yZXMgYW5kIGluZGV4ZXMgbWV0YSBpbmZvcm1hdGlvbiB0byBm
cm9udGVuZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGRlMWM4YzUuLmM2Zjli
MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNjE0LDcgKzYxNCw2IEBAIGFs
bCA6IFwKICAgICBNYXRoTUxFbGVtZW50RmFjdG9yeS5jcHAgXAogICAgIE1hdGhNTE5hbWVzLmNw
cCBcCiAgICAgWFBhdGhHcmFtbWFyLmNwcCBcCi0gICAgdG9rZW5pemVyLmNwcCBcCiAjCiAKICMg
LS0tLS0tLS0KQEAgLTcxMSwxMyArNzEwLDYgQEAgQ29sb3JEYXRhLmNwcCA6IHBsYXRmb3JtL0Nv
bG9yRGF0YS5ncGVyZiAkKFdlYkNvcmUpL21ha2UtaGFzaC10b29scy5wbAogCiAjIC0tLS0tLS0t
CiAKLSMgQ1NTIHRva2VuaXplcgotCi10b2tlbml6ZXIuY3BwIDogY3NzL3Rva2VuaXplci5mbGV4
IGNzcy9tYWtldG9rZW5pemVyCi0JZmxleCAtdCAkPCB8IHBlcmwgJChXZWJDb3JlKS9jc3MvbWFr
ZXRva2VuaXplciA+ICRACi0KLSMgLS0tLS0tLS0KLQogIyBDU1MgZ3JhbW1hcgogIyBOT1RFOiBP
bGRlciB2ZXJzaW9ucyBvZiBiaXNvbiBkbyBub3QgaW5qZWN0IGFuIGluY2x1c2lvbiBndWFyZCwg
c28gd2UgYWRkIG9uZS4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMucHJpIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IDk1MmVlMDcu
LjFjMmVhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKQEAgLTI2LDggKzI2LDYgQEAg
U1ZHX05BTUVTID0gJCRQV0Qvc3ZnL3N2Z3RhZ3MuaW4KIAogWExJTktfTkFNRVMgPSAkJFBXRC9z
dmcveGxpbmthdHRycy5pbgogCi1UT0tFTklaRVIgPSAkJFBXRC9jc3MvdG9rZW5pemVyLmZsZXgK
LQogQ1NTQklTT04gPSAkJFBXRC9jc3MvQ1NTR3JhbW1hci55CiAKIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9YU0xUPTEpIHsKQEAgLTc1OCwxNSArNzU2LDYgQEAgYXJyYXlCdWZmZXJWaWV3Q3Vz
dG9tU2NyaXB0LmNvbW1hbmRzID0gcGVybCAkJFBXRC9pbnNwZWN0b3IveHhkLnBsIFY4QXJyYXlC
dWZmZXIKIGFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdC5hZGRfb3V0cHV0X3RvX3NvdXJjZXMg
PSBmYWxzZQogR0VORVJBVE9SUyArPSBhcnJheUJ1ZmZlclZpZXdDdXN0b21TY3JpcHQKIAotIyBH
RU5FUkFUT1IgMzogdG9rZW5pemVyIChmbGV4KQotdG9rZW5pemVyLm91dHB1dCA9ICR7UU1BS0Vf
RklMRV9CQVNFfS5jcHAKLXRva2VuaXplci5pbnB1dCA9IFRPS0VOSVpFUgotdG9rZW5pemVyLnNj
cmlwdCA9ICQkUFdEL2Nzcy9tYWtldG9rZW5pemVyCi10b2tlbml6ZXIuY29tbWFuZHMgPSBmbGV4
IC10IDwgJHtRTUFLRV9GSUxFX05BTUV9IHwgcGVybCAkJHRva2VuaXplci5zY3JpcHQgPiAke1FN
QUtFX0ZJTEVfT1VUfQotIyB0b2tlbml6ZXIuY3BwIGlzIGluY2x1ZGVkIGludG8gQ1NTUGFyc2Vy
LmNwcAotdG9rZW5pemVyLmFkZF9vdXRwdXRfdG9fc291cmNlcyA9IGZhbHNlCi1HRU5FUkFUT1JT
ICs9IHRva2VuaXplcgotCiAjIEdFTkVSQVRPUiA0OiBDU1MgZ3JhbW1hcgogY3NzYmlzb24ub3V0
cHV0ID0gJHtRTUFLRV9GSUxFX0JBU0V9LmNwcAogY3NzYmlzb24uaW5wdXQgPSBDU1NCSVNPTgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQppbmRleCAyNGU5ZGUyLi4wYWUwMzBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtNjMzLDEwICs2MzMsNiBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0hUTUxFbnRp
dHlUYWJsZS5jcHA6ICQoV2ViQ29yZSkvaHRtbC9wYXJzZXIvSFRNTEVudGl0eU5hbQogRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9Db2xvckRhdGEuY3BwOiAkKFdlYkNvcmUpL3BsYXRmb3JtL0NvbG9y
RGF0YS5ncGVyZiAkKFdlYkNvcmUpL21ha2UtaGFzaC10b29scy5wbAogCSQoQU1fVl9HRU4pJChQ
RVJMKSAkKFdlYkNvcmUpL21ha2UtaGFzaC10b29scy5wbCAkKEdFTlNPVVJDRVNfV0VCQ09SRSkg
JChXZWJDb3JlKS9wbGF0Zm9ybS9Db2xvckRhdGEuZ3BlcmYKIAotIyBDU1MgdG9rZW5pemVyCi1E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL3Rva2VuaXplci5jcHAgOiAkKFdlYkNvcmUpL2Nzcy90b2tl
bml6ZXIuZmxleCAkKFdlYkNvcmUpL2Nzcy9tYWtldG9rZW5pemVyCi0JJChBTV9WX0dFTikkKEZM
RVgpIC10ICQ8IHwgJChQRVJMKSAkKFdlYkNvcmUpL2Nzcy9tYWtldG9rZW5pemVyID4gJEAKLQog
IyBDU1MgZ3JhbW1hcgogCiAjIE5PVEU6IG9sZGVyIHZlcnNpb25zIG9mIGJpc29uIGRvIG5vdCBp
bmplY3QgYW4gaW5jbHVzaW9uIGd1YXJkLCBzbyB3ZSBkbyBpdApAQCAtOTI2LDcgKzkyMiw2IEBA
IEVYVFJBX0RJU1QgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9zdmcuY3NzIFwKIAlTb3VyY2Uv
V2ViQ29yZS9jc3MvU1ZHQ1NTUHJvcGVydHlOYW1lcy5pbiBcCiAJU291cmNlL1dlYkNvcmUvY3Nz
L1NWR0NTU1ZhbHVlS2V5d29yZHMuaW4gXAotCVNvdXJjZS9XZWJDb3JlL2Nzcy90b2tlbml6ZXIu
ZmxleCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL3ZpZXctc291cmNlLmNzcyBcCiAJU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdEZvbnRGYW1pbHlOYW1lcy5pbiBcCiAJU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RmFjdG9yeS5pbiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjMDA4
YjUzLi4wYTI5YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTEsNiArMSwz
IEBACi13ZWJjb3JlX2J1aWx0X25vc291cmNlcyArPSBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS90b2tlbml6ZXIuY3BwCi0KIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9DU1NHcmFtbWFyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9D
U1NHcmFtbWFyLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA4
MTlmOWRkLi5lZTU0OWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApA
QCAtOTEyLDIzICs5MTIsNiBAQAogICAgICAgICAgIF0sCiAgICAgICAgIH0sCiAgICAgICAgIHsK
LSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAndG9rZW5pemVyJywKLSAgICAgICAgICAnaW5wdXRz
JzogWwotICAgICAgICAgICAgJy4uL2Nzcy9tYWtldG9rZW5pemVyJywKLSAgICAgICAgICAgICcu
Li9jc3MvdG9rZW5pemVyLmZsZXgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMn
OiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L3Rva2Vu
aXplci5jcHAnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAg
ICAgICdweXRob24nLAotICAgICAgICAgICAgJ3NjcmlwdHMvYWN0aW9uX21ha2V0b2tlbml6ZXIu
cHknLAotICAgICAgICAgICAgJzxAKF9vdXRwdXRzKScsCi0gICAgICAgICAgICAnLS0nLAotICAg
ICAgICAgICAgJzxAKF9pbnB1dHMpJwotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAg
IHsKICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZGVyaXZlZF9zb3VyY2VzX2FsbF9pbl9vbmUn
LAogICAgICAgICAgICdpbnB1dHMnOiBbCiAgICAgICAgICAgICAnc2NyaXB0cy9hY3Rpb25fZGVy
aXZlZHNvdXJjZXNhbGxpbm9uZS5weScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9zY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5IGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXAvc2NyaXB0cy9hY3Rpb25fbWFrZXRva2VuaXplci5weQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjRhMjhlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cC9zY3JpcHRzL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5CisrKyAvZGV2L251bGwK
QEAgLTEsMTAxICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyAKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0KLSMgdXNhZ2U6IGFjdGlvbl9tYWtldG9rZW5pemVyLnB5IE9VVFBVVFMgLS0gSU5QVVRT
Ci0jCi0jIE11bHRpcGxlIElOUFVUUyBtYXkgYmUgbGlzdGVkLiBUaGUgc2VjdGlvbnMgYXJlIHNl
cGFyYXRlZCBieSAtLSBhcmd1bWVudHMuCi0jCi0jIE9VVFBVVFMgbXVzdCBjb250YWluIGEgc2lu
Z2xlIGl0ZW06IGEgcGF0aCB0byB0b2tlbml6ZXIuY3BwLgotIwotIyBJTlBVVFMgbXVzdCBjb250
YWluIGV4YWN0bHkgdHdvIGl0ZW1zLiBUaGUgZmlyc3QgaXRlbSBtdXN0IGJlIHRoZSBwYXRoIHRv
Ci0jIG1ha2V0b2tlbml6ZXIuIFRoZSBzZWNvbmQgaXRlbSBtdXN0IGJlIHRoZSBwYXRoIHRvIHRv
a2VuaXplci5mbGV4LgotCi0KLWltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBz
eXMKLQotCi1kZWYgU3BsaXRBcmdzSW50b1NlY3Rpb25zKGFyZ3MpOgotICAgIHNlY3Rpb25zID0g
W10KLSAgICB3aGlsZSBsZW4oYXJncykgPiAwOgotICAgICAgICBpZiBub3QgJy0tJyBpbiBhcmdz
OgotICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyAnLS0nIGxlZnQsIGV2ZXJ5dGhpbmcgcmVt
YWluaW5nIGlzIGFuIGVudGlyZSBzZWN0aW9uLgotICAgICAgICAgICAgZGFzaGVzID0gbGVuKGFy
Z3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXNoZXMgPSBhcmdzLmluZGV4KCctLScp
Ci0KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKGFyZ3NbOmRhc2hlc10pCi0KLSAgICAgICAgIyBO
ZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCwgbG9vayBhdCBldmVyeXRoaW5nIGFmdGVyIHRoaXMg
Jy0tJy4KLSAgICAgICAgaWYgZGFzaGVzICsgMSA9PSBsZW4oYXJncyk6Ci0gICAgICAgICAgICAj
IElmIHRoZSAnLS0nIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QsIHdlIHdvbid0IGNvbWUgYmFj
ayB0aHJvdWdoIHRoZQotICAgICAgICAgICAgIyBsb29wIGFnYWluLiBBZGQgYW4gZW1wdHkgc2Vj
dGlvbiBub3cgY29ycmVzcG9uZGluZyB0byB0aGUgbm90aGluZ25lc3MKLSAgICAgICAgICAgICMg
Zm9sbG93aW5nIHRoZSBmaW5hbCAnLS0nLgotICAgICAgICAgICAgYXJncyA9IFtdCi0gICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFy
Z3MgPSBhcmdzW2Rhc2hlcyArIDE6XQotCi0gICAgcmV0dXJuIHNlY3Rpb25zCi0KLQotZGVmIG1h
aW4oYXJncyk6Ci0gICAgc2VjdGlvbnMgPSBTcGxpdEFyZ3NJbnRvU2VjdGlvbnMoYXJnc1sxOl0p
Ci0gICAgYXNzZXJ0IGxlbihzZWN0aW9ucykgPT0gMgotICAgIChvdXRwdXRzLCBpbnB1dHMpID0g
c2VjdGlvbnMKLQotICAgIGFzc2VydCBsZW4ob3V0cHV0cykgPT0gMQotICAgIG91dHB1dCA9IG91
dHB1dHNbMF0KLQotICAgIGFzc2VydCBsZW4oaW5wdXRzKSA9PSAyCi0gICAgbWFrZXRva2VuaXpl
ciA9IGlucHV0c1swXQotICAgIGZsZXhJbnB1dCA9IGlucHV0c1sxXQotCi0gICAgIyBEbyBpdC4g
Y2hlY2tfY2FsbCBpcyBuZXcgaW4gMi41LCBzbyBzaW11bGF0ZSBpdHMgYmVoYXZpb3Igd2l0aCBj
YWxsIGFuZAotICAgICMgYXNzZXJ0LgotICAgIG91dGZpbGUgPSBvcGVuKG91dHB1dCwgJ3diJykK
LSAgICBwMSA9IHN1YnByb2Nlc3MuUG9wZW4oWydmbGV4JywgJy10JywgZmxleElucHV0XSwgc3Rk
b3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICBwMiA9IHN1YnByb2Nlc3MuUG9wZW4oWydwZXJsJywg
bWFrZXRva2VuaXplcl0sIHN0ZGluPXAxLnN0ZG91dCwgc3Rkb3V0PW91dGZpbGUpCi0KLSAgICBy
MSA9IHAxLndhaXQoKQotICAgIHIyID0gcDIud2FpdCgpCi0gICAgYXNzZXJ0IHIxID09IDAKLSAg
ICBhc3NlcnQgcjIgPT0gMAotCi0gICAgcmV0dXJuIDAKLQotCi1pZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgotICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDM1NzBmY2MuLjhlMjE4YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTc5NTEsNyArNzk1MSw2IEBA
CiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YTUxW
aWV3ZXJKUy5oJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL1hQYXRoR3JhbW1hci5jcHAnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvWFBhdGhHcmFtbWFyLmgnLAotICAgICAgICAgICAgJzwoUFJP
RFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvdG9rZW5pemVyLmNwcCcsCiAgICAgICAg
IF0sCiAgICAgICAgICdleHBvcnRfZmlsZV9nZW5lcmF0b3JfZmlsZXMnOiBbCiAgICAgICAgICAg
ICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FeHBvcnRGaWxlR2VuZXJh
dG9yLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CmluZGV4IDM5MzYwMTMuLjA4OGEyYjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zNTM4MiwxMCArMzUzODIsNiBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcdG9rZW5pemVyLmZsZXgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk5ZThlM2Yu
LjQzNjY2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTg1MjQsNyArODUyNCw2IEBACiAJCTY1NjU4MTQ0MDlEMTMwNDMwMDBF
NjFENyAvKiBDU1NHcmFtbWFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDU1NHcmFtbWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2NTgx
NDcwOUQxMzA0MzAwMEU2MUQ3IC8qIENTU1ZhbHVlS2V5d29yZHMuZ3BlcmYgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IENTU1ZhbHVlS2V5d29yZHMuZ3BlcmY7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTY1NjU4MTQ4MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NWYWx1ZUtleXdvcmRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1NjU4MTRDMDlEMTMwNDMwMDBFNjFENyAvKiB0
b2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRva2Vu
aXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MUFDMDlEMTRFRTYw
MDBFNjFENyAvKiBDaGFyc2V0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ2hhcnNldERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NTY1ODFBRTA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJBZ2VudFN0eWxlU2hlZXRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MUFGMDlEMTRFRTYwMDBFNjFENyAvKiBVc2Vy
QWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDA0Miw3ICsxMDA0MSw2IEBACiAJCTkzQ0E0QzlEMDlERjkzRkEwMERGODY3
NyAvKiBtYWtldmFsdWVzLnBsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IG1ha2V2YWx1ZXMucGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0E0QzlGMDlERjkzRkEwMERGODY3NyAv
KiBxdWlya3MuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IHF1aXJrcy5jc3M7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0E0Q0EyMDlERjkzRkEwMERGODY3NyAvKiBzdmcuY3Nz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IHN2Zy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTkzQ0E0Q0EzMDlERjkzRkEwMERGODY3NyAvKiB0b2tlbml6ZXIuZmxleCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSB0b2tlbml6ZXIuZmxleDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTNDQ0YwMjYwQUY2QzUyOTAwMDE4RTg5IC8qIE5hdmlnYXRpb25BY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF2aWdhdGlvbkFjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NDRjA1RjBBRjZDQTc2MDAwMThFODkgLyogTmF2aWdh
dGlvbkFjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXZp
Z2F0aW9uQWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEM0MxNTgw
Rjk3QTlENzAwNTNDMDEzIC8qIERPTUhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNDgwOSw3ICsxNDgwNyw2IEBACiAJCQkJNjU2NTgxRTcwOUQxNTA4
RDAwMEU2MUQ3IC8qIFNWR0VsZW1lbnRGYWN0b3J5LmggKi8sCiAJCQkJNjU2NTgxRTgwOUQxNTA4
RDAwMEU2MUQ3IC8qIFNWR05hbWVzLmNwcCAqLywKIAkJCQk2NTY1ODFFOTA5RDE1MDhEMDAwRTYx
RDcgLyogU1ZHTmFtZXMuaCAqLywKLQkJCQk2NTY1ODE0QzA5RDEzMDQzMDAwRTYxRDcgLyogdG9r
ZW5pemVyLmNwcCAqLywKIAkJCQk2NTY1ODFBRTA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50
U3R5bGVTaGVldHMuaCAqLywKIAkJCQk2NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFn
ZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLywKIAkJCQkxQTE0MTRCMzEzQTBGMDUwMDAxOTk5NkMg
LyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcCAqLywKQEAgLTIwMDYwLDcgKzIwMDU3LDYgQEAK
IAkJCQlCMjIyN0IwMjBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTUHJvcGVydHlOYW1lcy5pbiAq
LywKIAkJCQlCMjIyN0IwMzBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5j
cHAgKi8sCiAJCQkJQjIyMjdCMDQwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1ZhbHVlS2V5d29y
ZHMuaW4gKi8sCi0JCQkJOTNDQTRDQTMwOURGOTNGQTAwREY4Njc3IC8qIHRva2VuaXplci5mbGV4
ICovLAogCQkJCUJDNUVDMTc2MEE1MDdFM0UwMDYwMDdGNSAvKiB2aWV3LXNvdXJjZS5jc3MgKi8s
CiAJCQkJMzEwNjAzNkMxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmNw
cCAqLywKIAkJCQkzMTA2MDM2RDE0MzI3RDJFMDBBQkY0QkEgLyogV2ViS2l0Q1NTRmlsdGVyVmFs
dWUuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggM2JlNzM0ZC4uMzkzMmNmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTIwMSw3ICsyMDEsOSBAQCBDU1NQYXJzZXI6
OkNTU1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlO
VF9NQVgsIFVJTlRfTUFYKQogICAgICwgbV9ydWxlUmFuZ2VNYXAoMCkKICAgICAsIG1fY3VycmVu
dFJ1bGVEYXRhKDApCi0gICAgLCB5eV9zdGFydCgxKQorICAgICwgbV9wYXJzaW5nTW9kZShOb3Jt
YWxNb2RlKQorICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKDApCisgICAgLCBtX3Rva2VuKDApCiAg
ICAgLCBtX2xpbmVOdW1iZXIoMCkKICAgICAsIG1fbGFzdFNlbGVjdG9yTGluZU51bWJlcigwKQog
ICAgICwgbV9hbGxvd0ltcG9ydFJ1bGVzKHRydWUpCkBAIC0yNDMsMjcgKzI0NSwyMiBAQCB2b2lk
IENTU1BhcnNlclN0cmluZzo6bG93ZXIoKQogCiB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIo
Y29uc3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhciogc3Vm
Zml4KQogewotICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCkgKyBzdHJsZW4ocHJlZml4
KSArIHN0cmxlbihzdWZmaXgpICsgMjsKKyAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgp
ICsgc3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3VmZml4KSArIDE7CiAKLSAgICBtX2RhdGEgPSBh
ZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltsZW5ndGhdKTsKKyAgICBtX2RhdGFTdGFydCA9IGFkb3B0
QXJyYXlQdHIobmV3IFVDaGFyW2xlbmd0aF0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdHJsZW4ocHJlZml4KTsgaSsrKQotICAgICAgICBtX2RhdGFbaV0gPSBwcmVmaXhbaV07Cisg
ICAgICAgIG1fZGF0YVN0YXJ0W2ldID0gcHJlZml4W2ldOwogCi0gICAgbWVtY3B5KG1fZGF0YS5n
ZXQoKSArIHN0cmxlbihwcmVmaXgpLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3Ro
KCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkobV9kYXRhU3RhcnQuZ2V0KCkgKyBzdHJs
ZW4ocHJlZml4KSwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9m
KFVDaGFyKSk7CiAKICAgICB1bnNpZ25lZCBzdGFydCA9IHN0cmxlbihwcmVmaXgpICsgc3RyaW5n
Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIGVuZCA9IHN0YXJ0ICsgc3RybGVuKHN1ZmZpeCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKLSAgICAgICAgbV9kYXRh
W2ldID0gc3VmZml4W2kgLSBzdGFydF07CisgICAgICAgIG1fZGF0YVN0YXJ0W2ldID0gc3VmZml4
W2kgLSBzdGFydF07CiAKLSAgICBtX2RhdGFbbGVuZ3RoIC0gMV0gPSAwOwotICAgIG1fZGF0YVts
ZW5ndGggLSAyXSA9IDA7CisgICAgbV9kYXRhU3RhcnRbbGVuZ3RoIC0gMV0gPSAwOwogCi0gICAg
eXlfaG9sZF9jaGFyID0gMDsKLSAgICB5eWxlbmcgPSAwOwotICAgIHl5dGV4dCA9IG1fZGF0YS5n
ZXQoKTsKLSAgICB5eV9jX2J1Zl9wID0geXl0ZXh0OwotICAgIHl5X2hvbGRfY2hhciA9ICp5eV9j
X2J1Zl9wOworICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fdG9rZW5TdGFydCA9IG1fZGF0YVN0
YXJ0LmdldCgpOwogICAgIHJlc2V0UnVsZUJvZHlNYXJrcygpOwogfQogCkBAIC00MjMsNyArNDIw
LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUjsKLSAgICBpZiAobGVuZ3RoID4gMiAmJiAoY2hhcmFjdGVyc1tsZW5ndGggLSAy
XSB8IDB4MjApID09ICdwJyAmJiAoY2hhcmFjdGVyc1tsZW5ndGggLSAxXSB8IDB4MjApID09ICd4
JykgeworICAgIGlmIChsZW5ndGggPiAyICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hh
cmFjdGVyc1tsZW5ndGggLSAyXSwgJ3AnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNo
YXJhY3RlcnNbbGVuZ3RoIC0gMV0sICd4JykpIHsKICAgICAgICAgbGVuZ3RoIC09IDI7CiAgICAg
ICAgIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOwogICAgIH0gZWxzZSBpZiAobGVu
Z3RoID4gMSAmJiBjaGFyYWN0ZXJzW2xlbmd0aCAtIDFdID09ICclJykgewpAQCAtNDc4NSwxMCAr
NDc4MiwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQkEoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICBpZiAobGVuZ3RoIDwgNSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBjaGFyYWN0ZXJzWzRdID09ICcoJwotICAgICAgICAm
JiAoY2hhcmFjdGVyc1swXSB8IDB4MjApID09ICdyJwotICAgICAgICAmJiAoY2hhcmFjdGVyc1sx
XSB8IDB4MjApID09ICdnJwotICAgICAgICAmJiAoY2hhcmFjdGVyc1syXSB8IDB4MjApID09ICdi
JwotICAgICAgICAmJiAoY2hhcmFjdGVyc1szXSB8IDB4MjApID09ICdhJzsKKyAgICAgICAgJiYg
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAncicpCisgICAgICAgICYm
IGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwgJ2cnKQorICAgICAgICAm
JiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0sICdiJykKKyAgICAgICAg
JiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzNdLCAnYScpOwogfQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQpAQCAtNDc5Niw5ICs0NzkzLDkgQEAgc3RhdGljIGlubGluZSBib29sIG1p
Z2h0QmVSR0IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICBp
ZiAobGVuZ3RoIDwgNCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBjaGFyYWN0
ZXJzWzNdID09ICcoJwotICAgICAgICAmJiAoY2hhcmFjdGVyc1swXSB8IDB4MjApID09ICdyJwot
ICAgICAgICAmJiAoY2hhcmFjdGVyc1sxXSB8IDB4MjApID09ICdnJwotICAgICAgICAmJiAoY2hh
cmFjdGVyc1syXSB8IDB4MjApID09ICdiJzsKKyAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAncicpCisgICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwgJ2cnKQorICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0sICdiJyk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjpmYXN0
UGFyc2VDb2xvcihSR0JBMzImIHJnYiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHN0cmljdCkK
QEAgLTczMDUsMjM2ICs3MzAyLDEyMDMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlh
bnRMaWdhdHVyZXMoYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgaW50IHl5ZXJyb3IoY29uc3QgY2hhciopIHsgcmV0dXJuIDE7IH0KLQogI2RlZmlu
ZSBFTkRfVE9LRU4gMAogCiAjaW5jbHVkZSAiQ1NTR3JhbW1hci5oIgogCitlbnVtIENoYXJhY3Rl
clR5cGUgeworICAgIC8vIFR5cGVzIGZvciB0aGUgbWFpbiBzd2l0Y2guCisKKyAgICAvLyBUaGUg
Zmlyc3QgNCB0eXBlcyBtdXN0IGJlIGdyb3VwZWQgdG9nZXRoZXIsIGFzIHRoZXkKKyAgICAvLyBy
ZXByZXNlbnQgdGhlIGFsbG93ZWQgY2hhcnMgaW4gYW4gaWRlbnRpZmllci4KKyAgICBDaGFyYWN0
ZXJDYXNlbGVzc1UsCisgICAgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorICAgIENoYXJhY3Rl
ck51bWJlciwKKyAgICBDaGFyYWN0ZXJEYXNoLAorCisgICAgQ2hhcmFjdGVyT3RoZXIsCisgICAg
Q2hhcmFjdGVyV2hpdGVTcGFjZSwKKyAgICBDaGFyYWN0ZXJFbmRNZWRpYVF1ZXJ5LAorICAgIENo
YXJhY3RlckVuZE50aENoaWxkLAorICAgIENoYXJhY3RlclF1b3RlLAorICAgIENoYXJhY3RlckV4
Y2xhbWF0aW9uTWFyaywKKyAgICBDaGFyYWN0ZXJIYXNobWFyaywKKyAgICBDaGFyYWN0ZXJEb2xs
YXIsCisgICAgQ2hhcmFjdGVyQXN0ZXJpc2ssCisgICAgQ2hhcmFjdGVyUGx1cywKKyAgICBDaGFy
YWN0ZXJEb3QsCisgICAgQ2hhcmFjdGVyU2xhc2gsCisgICAgQ2hhcmFjdGVyTGVzcywKKyAgICBD
aGFyYWN0ZXJBdCwKKyAgICBDaGFyYWN0ZXJCYWNrU2xhc2gsCisgICAgQ2hhcmFjdGVyWG9yLAor
ICAgIENoYXJhY3RlclZlcnRpY2FsQmFyLAorICAgIENoYXJhY3RlclRpbGRlLAorfTsKKworLy8g
MTI4IEFTQ0lJIGNvZGVzCitzdGF0aWMgY29uc3QgQ2hhcmFjdGVyVHlwZSB0eXBlc09mQVNDSUlD
aGFyYWN0ZXJzWzEyOF0gPSB7CisvKiAgIDAgLSBOdWxsICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAgIDEgLSBTdGFydCBvZiBIZWFkaW5nICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgIDIgLSBTdGFydCBvZiBUZXh0ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDMg
LSBFbmQgb2YgVGV4dCAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDQgLSBFbmQgb2Yg
VHJhbnNtLiAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDUgLSBFbnF1aXJ5ICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgIDYgLSBBY2tub3dsZWRnbWVudCAgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCisvKiAgIDcgLSBCZWxsICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCisvKiAgIDggLSBCYWNrIFNwYWNlICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAg
IDkgLSBIb3Jpem9udGFsIFRhYiAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAxMCAt
IExpbmUgRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDExIC0gVmVy
dGljYWwgVGFiICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDEyIC0gRm9ybSBGZWVkICAg
ICAgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAgMTMgLSBDYXJyaWFnZSBSZXR1cm4g
ICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAxNCAtIFNoaWZ0IE91dCAgICAgICAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxNSAtIFNoaWZ0IEluICAgICAgICAgICAqLyBDaGFyYWN0
ZXJPdGhlciwKKy8qICAxNiAtIERhdGEgTGluZSBFc2NhcGUgICAqLyBDaGFyYWN0ZXJPdGhlciwK
Ky8qICAxNyAtIERldmljZSBDb250cm9sIDEgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxOCAt
IERldmljZSBDb250cm9sIDIgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAxOSAtIERldmljZSBD
b250cm9sIDMgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMCAtIERldmljZSBDb250cm9sIDQg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyMSAtIE5lZ2F0aXZlIEFjay4gICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKKy8qICAyMiAtIFN5bmNocm9ub3VzIElkbGUgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICAyMyAtIEVuZCBvZiBUcmFuc21pdCAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAy
NCAtIENhbmNlbCAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNSAtIEVuZCBv
ZiBNZWRpdW0gICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNiAtIFN1YnN0aXR1dGUgICAg
ICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAyNyAtIEVzY2FwZSAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKKy8qICAyOCAtIEZpbGUgU2VwYXJhdG9yICAgICAqLyBDaGFyYWN0ZXJP
dGhlciwKKy8qICAyOSAtIEdyb3VwIFNlcGFyYXRvciAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8q
ICAzMCAtIFJlY29yZCBTZXBhcmF0b3IgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzMSAtIFVu
aXQgU2VwYXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICAzMiAtIFNwYWNlICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDMzIC0gISAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyaywKKy8qICAzNCAtICIgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJRdW90ZSwKKy8qICAzNSAtICMgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJIYXNobWFyaywKKy8qICAzNiAtICQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJEb2xsYXIsCisvKiAgMzcgLSAlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgMzggLSAmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMzkg
LSAnICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCisvKiAgNDAgLSAoICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNDEgLSApICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCisvKiAgNDIgLSAqICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVyQXN0ZXJpc2ssCisvKiAgNDMgLSArICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyUGx1cywKKy8qICA0NCAtICwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKKy8qICA0NSAtIC0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEYXNoLAorLyogIDQ2
IC0gLiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckRvdCwKKy8qICA0NyAtIC8gICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJTbGFzaCwKKy8qICA0OCAtIDAgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNDkgLSAxICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyTnVtYmVyLAorLyogIDUwIC0gMiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51
bWJlciwKKy8qICA1MSAtIDMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisv
KiAgNTIgLSA0ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDUzIC0g
NSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NCAtIDYgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTUgLSA3ICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU2IC0gOCAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck51bWJlciwKKy8qICA1NyAtIDkgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJO
dW1iZXIsCisvKiAgNTggLSA6ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgNTkgLSA7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kTWVkaWFRdWVyeSwKKy8q
ICA2MCAtIDwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJMZXNzLAorLyogIDYxIC0gPSAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDYyIC0gPiAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDYzIC0gPyAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck90aGVyLAorLyogIDY0IC0gQCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ckF0LAorLyogIDY1IC0gQSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKKy8qICA2NiAtIEIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAgNjcgLSBDICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogIDY4IC0gRCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qICA2OSAtIEUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAgNzAgLSBGICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogIDcxIC0gRyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qICA3MiAtIEggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAgNzMgLSBJICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogIDc0IC0gSiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qICA3NSAtIEsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAgNzYgLSBMICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogIDc3IC0gTSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qICA3OCAtIE4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzkgLSBPICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgwIC0gUCAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MSAtIFEgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODIgLSBSICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgzIC0gUyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NCAtIFQgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODUgLSBVICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyQ2FzZWxlc3NVLAorLyogIDg2IC0gViAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NyAtIFcgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODggLSBYICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg5IC0gWSAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5MCAtIFogICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTEgLSBbICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgOTIgLSBcICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
QmFja1NsYXNoLAorLyogIDkzIC0gXSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVy
LAorLyogIDk0IC0gXiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclhvciwKKy8qICA5NSAt
IF8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgOTYg
LSBgICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgOTcgLSBhICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDk4IC0gYiAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5OSAtIGMgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDAgLSBkICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTAxIC0gZSAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwMiAtIGYg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDMgLSBn
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTA0IC0g
aCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEwNSAt
IGkgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMDYg
LSBqICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTA3
IC0gayAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEw
OCAtIGwgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAx
MDkgLSBtICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyog
MTEwIC0gbiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8q
IDExMSAtIG8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisv
KiAxMTIgLSBwICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAor
LyogMTEzIC0gcSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
Ky8qIDExNCAtIHIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
CisvKiAxMTUgLSBzICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAorLyogMTE2IC0gdCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKKy8qIDExNyAtIHUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJDYXNlbGVzc1UsCisv
KiAxMTggLSB2ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAor
LyogMTE5IC0gdyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
Ky8qIDEyMCAtIHggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
CisvKiAxMjEgLSB5ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAorLyogMTIyIC0geiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKKy8qIDEyMyAtIHsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJFbmRNZWRpYVF1ZXJ5
LAorLyogMTI0IC0gfCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclZlcnRpY2FsQmFyLAor
LyogMTI1IC0gfSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogMTI2IC0g
fiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclRpbGRlLAorLyogMTI3IC0gRGVsZXRlICAg
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorfTsKKworLy8gVXRpbGl0eSBmdW5jdGlvbnMg
Zm9yIHRoZSBDU1MgdG9rZW5pemVyLgorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NMZXR0ZXIo
VUNoYXIgY2hhcmFjdGVyKQoreworICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gMTI4IHx8IHR5cGVz
T2ZBU0NJSUNoYXJhY3RlcnNbY2hhcmFjdGVyXSA8PSBDaGFyYWN0ZXJEYXNoOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNDU1NFc2NhcGUoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIHJldHVy
biBjaGFyYWN0ZXIgPj0gJyAnICYmIGNoYXJhY3RlciAhPSAxMjc7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc1VSSUxldHRlcihVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIChjaGFy
YWN0ZXIgPj0gJyonICYmIGNoYXJhY3RlciAhPSAxMjcpIHx8IChjaGFyYWN0ZXIgPj0gJyMnICYm
IGNoYXJhY3RlciA8PSAnJicpIHx8IGNoYXJhY3RlciA9PSAnISc7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc0lkZW50aWZpZXJTdGFydEFmdGVyRGFzaChVQ2hhciogY3VycmVudENoYXJhY3Rl
cikKK3sKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGN1cnJlbnRDaGFyYWN0ZXJbMF0pIHx8IGN1
cnJlbnRDaGFyYWN0ZXJbMF0gPT0gJ18nIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMF0gPj0gMTI4Cisg
ICAgICAgIHx8IChjdXJyZW50Q2hhcmFjdGVyWzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUoY3Vy
cmVudENoYXJhY3RlclsxXSkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihVQ2hhciogY3NzU3RyaW5nLCBjb25zdCBjaGFyKiBjb25zdGFudFN0cmluZykK
K3sKKyAgICAvLyBDb21wYXJlIGFuIFVDaGFyIG1lbW9yeSBkYXRhIHdpdGggYSB6ZXJvIHRlcm1p
bmF0ZWQgc3RyaW5nLgorICAgIGRvIHsKKyAgICAgICAgLy8gVGhlIGlucHV0IG11c3QgYmUgcGFy
dCBvZiBhbiBpZGVudGlmaWVyIGlmIGNvbnN0YW50Q2hhciBvciBjb25zdFN0cmluZworICAgICAg
ICAvLyBjb250YWlucyAnLScuIE90aGVyd2lzZSB0b0FTQ0lJTG93ZXJVbmNoZWNrZWQoJ1xyJykg
d291bGQgYmUgZXF1YWwgdG8gJy0nLgorICAgICAgICBBU1NFUlQoKCpjb25zdGFudFN0cmluZyA+
PSAnYScgJiYgKmNvbnN0YW50U3RyaW5nIDw9ICd6JykgfHwgKmNvbnN0YW50U3RyaW5nID09ICct
Jyk7CisgICAgICAgIEFTU0VSVCgqY29uc3RhbnRTdHJpbmcgIT0gJy0nIHx8IGlzQ1NTTGV0dGVy
KCpjc3NTdHJpbmcpKTsKKyAgICAgICAgaWYgKHRvQVNDSUlMb3dlclVuY2hlY2tlZCgqY3NzU3Ry
aW5nKyspICE9ICgqY29uc3RhbnRTdHJpbmcrKykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfSB3aGlsZSAoKmNvbnN0YW50U3RyaW5nKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIFVDaGFyKiBjaGVja0FuZFNraXBFc2NhcGUoVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIp
Cit7CisgICAgLy8gUmV0dXJucyB3aXRoIE5VTEwsIGlmIGVzY2FwZSBjaGVjayBpcyBmYWlsZWQu
IE90aGVyd2lzZQorICAgIC8vIGl0IHJldHVybnMgd2l0aCB0aGUgZm9sbG93aW5nIGNoYXJhY3Rl
ci4KKyAgICBBU1NFUlQoKmN1cnJlbnRDaGFyYWN0ZXIgPT0gJ1xcJyk7CisKKyAgICArK2N1cnJl
bnRDaGFyYWN0ZXI7CisgICAgaWYgKCFpc0NTU0VzY2FwZSgqY3VycmVudENoYXJhY3RlcikpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudENoYXJh
Y3RlcikpIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IDY7CisKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgKytjdXJyZW50Q2hhcmFjdGVyOworICAgICAgICB9IHdoaWxlIChpc0FTQ0lJSGV4RGln
aXQoKmN1cnJlbnRDaGFyYWN0ZXIpICYmIC0tbGVuZ3RoKTsKKworICAgICAgICAvLyBPcHRpb25h
bCBzcGFjZSBhZnRlciB0aGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAgICBpZiAoaXNIVE1MU3Bh
Y2UoKmN1cnJlbnRDaGFyYWN0ZXIpKQorICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyOwor
ICAgICAgICByZXR1cm4gY3VycmVudENoYXJhY3RlcjsKKyAgICB9CisgICAgcmV0dXJuIGN1cnJl
bnRDaGFyYWN0ZXIgKyAxOworfQorCitzdGF0aWMgaW5saW5lIFVDaGFyKiBza2lwV2hpdGVTcGFj
ZShVQ2hhciogY3VycmVudENoYXJhY3RlcikKK3sKKyAgICB3aGlsZSAoaXNIVE1MU3BhY2UoKmN1
cnJlbnRDaGFyYWN0ZXIpKQorICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgcmV0dXJu
IGN1cnJlbnRDaGFyYWN0ZXI7Cit9CisKKy8vIE1haW4gQ1NTIHRva2VuaXplciBmdW5jdGlvbnMu
CisKK2lubGluZSBib29sIENTU1BhcnNlcjo6aXNJZGVudGlmaWVyU3RhcnQoKQoreworICAgIC8v
IENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBpcyBzdGFydGVkLgorICAgIHJldHVybiBpc0lk
ZW50aWZpZXJTdGFydEFmdGVyRGFzaCgoKm1fY3VycmVudENoYXJhY3RlciAhPSAnLScpID8gbV9j
dXJyZW50Q2hhcmFjdGVyIDogbV9jdXJyZW50Q2hhcmFjdGVyICsgMSk7Cit9CisKK2lubGluZSBV
Q2hhciogQ1NTUGFyc2VyOjpjaGVja0FuZFNraXBTdHJpbmcoVUNoYXIqIGN1cnJlbnRDaGFyYWN0
ZXIsIFVDaGFyIHF1b3RlKQoreworICAgIC8vIFJldHVybnMgd2l0aCBOVUxMLCBpZiBzdHJpbmcg
Y2hlY2sgaXMgZmFpbGVkLiBPdGhlcndpc2UKKyAgICAvLyBpdCByZXR1cm5zIHdpdGggdGhlIGZv
bGxvd2luZyBjaGFyYWN0ZXIuIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgLy8gc2luY2Ugd2UgY2Fu
bm90IHJldmVydCBlc2NhcGUgc2VxdWVuY2VzLCB0aHVzIHN0cmluZ3MKKyAgICAvLyBtdXN0IGJl
IHZhbGlkYXRlZCBiZWZvcmUgcGFyc2luZy4KKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoKmN1cnJlbnRDaGFyYWN0ZXIgPT0gcXVvdGUpKSB7CisgICAgICAgICAgICAv
LyBTdHJpbmcgcGFyc2luZyBpcyBzdWNjZXNzZnVsLgorICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRDaGFyYWN0ZXIgKyAxOworICAgICAgICB9CisgICAgICAgIGlmIChVTkxJS0VMWSgqY3VycmVu
dENoYXJhY3RlciA8PSAnXHInICYmICghKmN1cnJlbnRDaGFyYWN0ZXIgfHwgKmN1cnJlbnRDaGFy
YWN0ZXIgPT0gJ1xuJyB8fCAoKmN1cnJlbnRDaGFyYWN0ZXIgfCAweDEpID09ICdccicpKSkgewor
ICAgICAgICAgICAgLy8gU3RyaW5nIHBhcnNpbmcgaXMgZmFpbGVkIGZvciBjaGFyYWN0ZXIgJ1ww
JywgJ1xuJywgJ1xmJyBvciAnXHInLgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoTElLRUxZKGN1cnJlbnRDaGFyYWN0ZXJbMF0gIT0gJ1xcJykpCisgICAg
ICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFy
YWN0ZXJbMV0gPT0gJ1xuJyB8fCBjdXJyZW50Q2hhcmFjdGVyWzFdID09ICdcZicpCisgICAgICAg
ICAgICBjdXJyZW50Q2hhcmFjdGVyICs9IDI7CisgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFy
YWN0ZXJbMV0gPT0gJ1xyJykKKyAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIgKz0gY3VycmVu
dENoYXJhY3RlclsyXSA9PSAnXG4nID8gMyA6IDI7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgY3VycmVudENoYXJhY3RlciA9IGNoZWNrQW5kU2tpcEVzY2FwZShjdXJyZW50Q2hhcmFjdGVy
KTsKKyAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDU1NQYXJzZXI6OnBhcnNlRXNj
YXBlKFVDaGFyKiYgcmVzdWx0KQoreworICAgIEFTU0VSVCgqbV9jdXJyZW50Q2hhcmFjdGVyID09
ICdcXCcgJiYgaXNDU1NFc2NhcGUobV9jdXJyZW50Q2hhcmFjdGVyWzFdKSk7CisKKyAgICArK21f
Y3VycmVudENoYXJhY3RlcjsKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCptX2N1cnJlbnRDaGFy
YWN0ZXIpKSB7CisgICAgICAgIHVuc2lnbmVkIHVuaWNvZGUgPSAwOworICAgICAgICBpbnQgbGVu
Z3RoID0gNjsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICB1bmljb2RlID0gKHVuaWNvZGUg
PDwgNCkgKyB0b0FTQ0lJSGV4VmFsdWUoKm1fY3VycmVudENoYXJhY3RlcisrKTsKKyAgICAgICAg
fSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJSUhleERpZ2l0KCptX2N1cnJlbnRDaGFyYWN0ZXIp
KTsKKworICAgICAgICAvLyBDaGFyYWN0ZXJzIGFib3ZlIDB4ZmZmZiBhcmUgbm90IGhhbmRsZWQu
CisgICAgICAgIGlmICh1bmljb2RlID4gMHhmZmZmKQorICAgICAgICAgICAgdW5pY29kZSA9IDB4
ZmZmZDsKKworICAgICAgICAvLyBPcHRpb25hbCBzcGFjZSBhZnRlciB0aGUgZXNjYXBlIHNlcXVl
bmNlLgorICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKm1fY3VycmVudENoYXJhY3RlcikpCisgICAg
ICAgICAgICArK21fY3VycmVudENoYXJhY3RlcjsKKyAgICAgICAgKnJlc3VsdCA9IHVuaWNvZGU7
CisgICAgfSBlbHNlCisgICAgICAgICpyZXN1bHQgPSAqbV9jdXJyZW50Q2hhcmFjdGVyKys7Cisg
ICAgKytyZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6cGFyc2VJZGVudGlmaWVy
KFVDaGFyKiYgcmVzdWx0LCBib29sJiBoYXNFc2NhcGUpCit7CisgICAgLy8gSWYgYSB2YWxpZCBp
ZGVudGlmaWVyIHN0YXJ0IGlzIGZvdW5kLCB3ZSBjYW4gc2FmZWx5CisgICAgLy8gcGFyc2UgdGhl
IGlkZW50aWZpZXIgdW50aWwgdGhlIG5leHQgaW52YWxpZCBjaGFyYWN0ZXIuCisgICAgQVNTRVJU
KGlzSWRlbnRpZmllclN0YXJ0KCkpOworICAgIGhhc0VzY2FwZSA9IGZhbHNlOworICAgIGRvIHsK
KyAgICAgICAgaWYgKExJS0VMWSgqbV9jdXJyZW50Q2hhcmFjdGVyICE9ICdcXCcpKQorICAgICAg
ICAgICAgKnJlc3VsdCsrID0gKm1fY3VycmVudENoYXJhY3RlcisrOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGhhc0VzY2FwZSA9IHRydWU7CisgICAgICAgICAgICBwYXJzZUVzY2FwZShy
ZXN1bHQpOworICAgICAgICB9CisgICAgfSB3aGlsZSAoaXNDU1NMZXR0ZXIobV9jdXJyZW50Q2hh
cmFjdGVyWzBdKSB8fCAobV9jdXJyZW50Q2hhcmFjdGVyWzBdID09ICdcXCcgJiYgaXNDU1NFc2Nh
cGUobV9jdXJyZW50Q2hhcmFjdGVyWzFdKSkpOworfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6
OnBhcnNlU3RyaW5nKFVDaGFyKiYgcmVzdWx0LCBVQ2hhciBxdW90ZSkKK3sKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoKm1fY3VycmVudENoYXJhY3RlciA9PSBxdW90
ZSkpIHsKKyAgICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIGRvbmUuCisgICAgICAgICAg
ICArK21fY3VycmVudENoYXJhY3RlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBBU1NFUlQoKm1fY3VycmVudENoYXJhY3RlciA+ICdccicgfHwgKCptX2N1cnJlbnRD
aGFyYWN0ZXIgPCAnXG4nICYmICptX2N1cnJlbnRDaGFyYWN0ZXIpIHx8ICptX2N1cnJlbnRDaGFy
YWN0ZXIgPT0gJ1x2Jyk7CisKKyAgICAgICAgaWYgKExJS0VMWShtX2N1cnJlbnRDaGFyYWN0ZXJb
MF0gIT0gJ1xcJykpCisgICAgICAgICAgICAqcmVzdWx0KysgPSAqbV9jdXJyZW50Q2hhcmFjdGVy
Kys7CisgICAgICAgIGVsc2UgaWYgKG1fY3VycmVudENoYXJhY3RlclsxXSA9PSAnXG4nIHx8IG1f
Y3VycmVudENoYXJhY3RlclsxXSA9PSAnXGYnKQorICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFj
dGVyICs9IDI7CisgICAgICAgIGVsc2UgaWYgKG1fY3VycmVudENoYXJhY3RlclsxXSA9PSAnXHIn
KQorICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyICs9IG1fY3VycmVudENoYXJhY3Rlclsy
XSA9PSAnXG4nID8gMyA6IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlRXNjYXBl
KHJlc3VsdCk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlVVJJKFVD
aGFyKiYgc3RhcnQsIFVDaGFyKiYgcmVzdWx0KQoreworICAgIFVDaGFyKiB1cmlTdGFydCA9IHNr
aXBXaGl0ZVNwYWNlKG1fY3VycmVudENoYXJhY3Rlcik7CisKKyAgICBpZiAoKnVyaVN0YXJ0ID09
ICciJyB8fCAqdXJpU3RhcnQgPT0gJ1wnJykgeworICAgICAgICBVQ2hhciBxdW90ZSA9ICp1cmlT
dGFydDsKKyAgICAgICAgKyt1cmlTdGFydDsKKworICAgICAgICBVQ2hhciogc3RyaW5nRW5kID0g
Y2hlY2tBbmRTa2lwU3RyaW5nKHVyaVN0YXJ0LCBxdW90ZSk7CisgICAgICAgIGlmICghc3RyaW5n
RW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdHJpbmdFbmQgPSBza2lwV2hpdGVT
cGFjZShzdHJpbmdFbmQpOworICAgICAgICBpZiAoKnN0cmluZ0VuZCAhPSAnKScpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgc3RhcnQgPSByZXN1bHQgPSBtX2N1cnJlbnRDaGFyYWN0
ZXIgPSB1cmlTdGFydDsKKyAgICAgICAgcGFyc2VTdHJpbmcocmVzdWx0LCBxdW90ZSk7CisKKyAg
ICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gc3RyaW5nRW5kICsgMTsKKyAgICAgICAgbV90b2tl
biA9IFVSSTsKKyAgICB9IGVsc2UgeworICAgICAgICBVQ2hhciogc3RyaW5nRW5kID0gdXJpU3Rh
cnQ7CisKKyAgICAgICAgd2hpbGUgKGlzVVJJTGV0dGVyKCpzdHJpbmdFbmQpKSB7CisgICAgICAg
ICAgICBpZiAoKnN0cmluZ0VuZCAhPSAnXFwnKQorICAgICAgICAgICAgICAgICsrc3RyaW5nRW5k
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RyaW5nRW5kID0gY2hlY2tB
bmRTa2lwRXNjYXBlKHN0cmluZ0VuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmdFbmQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHN0cmluZ0VuZCA9IHNraXBXaGl0ZVNwYWNlKHN0cmluZ0VuZCk7CisgICAgICAg
IGlmICgqc3RyaW5nRW5kICE9ICcpJykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBz
dGFydCA9IHJlc3VsdCA9IG1fY3VycmVudENoYXJhY3RlciA9IHVyaVN0YXJ0OworICAgICAgICB3
aGlsZSAoaXNVUklMZXR0ZXIoKm1fY3VycmVudENoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGlm
IChMSUtFTFkoKm1fY3VycmVudENoYXJhY3RlciAhPSAnXFwnKSkKKyAgICAgICAgICAgICAgICAq
cmVzdWx0KysgPSAqbV9jdXJyZW50Q2hhcmFjdGVyKys7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcGFyc2VFc2NhcGUocmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1f
Y3VycmVudENoYXJhY3RlciA9IHN0cmluZ0VuZCArIDE7CisgICAgICAgIG1fdG9rZW4gPSBVUkk7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVW5pY29kZVJhbmdlKCkK
K3sKKyAgICBVQ2hhciogY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3RlciArIDE7
CisgICAgaW50IGxlbmd0aCA9IDY7CisgICAgQVNTRVJUKCptX2N1cnJlbnRDaGFyYWN0ZXIgPT0g
JysnKTsKKworICAgIHdoaWxlIChpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnRDaGFyYWN0ZXIpICYm
IGxlbmd0aCkgeworICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgIC0tbGVuZ3Ro
OworICAgIH0KKworICAgIGlmIChsZW5ndGggJiYgKmN1cnJlbnRDaGFyYWN0ZXIgPT0gJz8nKSB7
CisgICAgICAgIC8vIEF0IG1vc3QgNSBoZXggZGlnaXQgZm9sbG93ZWQgYnkgYSBxdWVzdGlvbiBt
YXJrLgorICAgICAgICBkbyB7CisgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI7CisgICAg
ICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgfSB3aGlsZSAoKmN1cnJlbnRDaGFyYWN0ZXIgPT0g
Jz8nICYmIGxlbmd0aCk7CisgICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IGN1cnJlbnRDaGFy
YWN0ZXI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChsZW5ndGggPCA2
KSB7CisgICAgICAgIC8vIEF0IGxlYXN0IG9uZSBoZXggZGlnaXQuCisgICAgICAgIGlmIChjdXJy
ZW50Q2hhcmFjdGVyWzBdID09ICctJyAmJiBpc0FTQ0lJSGV4RGlnaXQoY3VycmVudENoYXJhY3Rl
clsxXSkpIHsKKyAgICAgICAgICAgIC8vIEZvbGxvd2VkIGJ5IGEgZGFzaCBhbmQgYSBoZXggZGln
aXQuCisgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgICAgICBsZW5ndGgg
PSA2OworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICsrY3VycmVudENoYXJhY3Rl
cjsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuZ3RoICYmIGlzQVNDSUlIZXhEaWdpdCgqY3Vy
cmVudENoYXJhY3RlcikpOworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9
IGN1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENoaWxkKCkKK3sKKyAgICBV
Q2hhciogY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3RlcjsKKworICAgIHdoaWxl
IChpc0FTQ0lJRGlnaXQoKmN1cnJlbnRDaGFyYWN0ZXIpKQorICAgICAgICArK2N1cnJlbnRDaGFy
YWN0ZXI7CisgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoKmN1cnJlbnRDaGFyYWN0
ZXIsICduJykpIHsKKyAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gY3VycmVudENoYXJhY3Rl
ciArIDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENoaWxkRXh0cmEoKQoreworICAgIFVDaGFyKiBj
dXJyZW50Q2hhcmFjdGVyID0gc2tpcFdoaXRlU3BhY2UobV9jdXJyZW50Q2hhcmFjdGVyKTsKKyAg
ICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXIgIT0gJysnICYmICpjdXJyZW50Q2hhcmFjdGVyICE9ICct
JykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY3VycmVudENoYXJhY3RlciA9IHNraXBX
aGl0ZVNwYWNlKGN1cnJlbnRDaGFyYWN0ZXIgKyAxKTsKKyAgICBpZiAoIWlzQVNDSUlEaWdpdCgq
Y3VycmVudENoYXJhY3RlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvIHsKKyAg
ICAgICAgKytjdXJyZW50Q2hhcmFjdGVyOworICAgIH0gd2hpbGUgKGlzQVNDSUlEaWdpdCgqY3Vy
cmVudENoYXJhY3RlcikpOworCisgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gY3VycmVudENoYXJh
Y3RlcjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRl
Y3RGdW5jdGlvblR5cGVUb2tlbihpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPiAw
KTsKKyAgICBVQ2hhciogbmFtZSA9IG1fdG9rZW5TdGFydDsKKworICAgIHN3aXRjaCAobGVuZ3Ro
KSB7CisgICAgY2FzZSAzOgorICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChu
YW1lWzBdLCAnbicpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ28nKSAm
JiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICd0JykpCisgICAgICAgICAgICBt
X3Rva2VuID0gTk9URlVOQ1RJT047CisgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwobmFtZVswXSwgJ3UnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVb
MV0sICdyJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnbCcpKQorICAg
ICAgICAgICAgbV90b2tlbiA9IFVSSTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSA5Ogor
ICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAibnRoLWNoaWxkIikpCisg
ICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2RlOworICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIDExOgorICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1l
LCAibnRoLW9mLXR5cGUiKSkKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1v
ZGU7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgMTQ6CisgICAgICAgIGlmIChpc0VxdWFs
VG9DU1NJZGVudGlmaWVyKG5hbWUsICJudGgtbGFzdC1jaGlsZCIpKQorICAgICAgICAgICAgbV9w
YXJzaW5nTW9kZSA9IE50aENoaWxkTW9kZTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAx
NjoKKyAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSwgIm50aC1sYXN0LW9m
LXR5cGUiKSkKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0TWVk
aWFRdWVyeVRva2VuKGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1fcGFyc2luZ01vZGUgPT0g
TWVkaWFRdWVyeU1vZGUpOworICAgIFVDaGFyKiBuYW1lID0gbV90b2tlblN0YXJ0OworCisgICAg
aWYgKGxlbmd0aCA9PSAzKSB7CisgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KG5hbWVbMF0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbicp
ICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2QnKSkKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBNRURJQV9BTkQ7CisgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwobmFtZVswXSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVb
MV0sICdvJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKQorICAg
ICAgICAgICAgbV90b2tlbiA9IE1FRElBX05PVDsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSA0
KSB7CisgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICdvJykg
JiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbicpCisgICAgICAgICAgICAg
ICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnbCcpICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwobmFtZVszXSwgJ3knKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBN
RURJQV9PTkxZOworICAgIH0KK30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3ROdW1i
ZXJUb2tlbihVQ2hhciogdHlwZSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoID4g
MCk7CisKKyAgICBzd2l0Y2ggKHRvQVNDSUlMb3dlclVuY2hlY2tlZCh0eXBlWzBdKSkgeworICAg
IGNhc2UgJ2MnOgorICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAgICAgICAgICAgbV90b2tlbiA9IENNUzsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSAnZCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMyAmJiBp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdlJykgJiYgaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbCh0eXBlWzJdLCAnZycpKQorICAgICAgICAgICAgbV90b2tlbiA9IERFR1M7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2UnOgorICAgICAgICBpZiAobGVuZ3RoID09IDIp
IHsKKyAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdt
JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEVNUzsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3gnKSkKKyAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gRVhTOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
J2cnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVh
bCh0eXBlWzFdLCAncicpCisgICAgICAgICAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbCh0eXBlWzJdLCAnYScpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVszXSwg
J2QnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBHUkFEUzsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSAnaCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKHR5cGVbMV0sICd6JykpCisgICAgICAgICAgICBtX3Rva2VuID0gSEVSVFo7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2knOgorICAgICAgICBpZiAobGVuZ3RoID09IDIg
JiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbicpKQorICAgICAgICAgICAg
bV90b2tlbiA9IElOUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnayc6CisgICAgICAg
IGlmIChsZW5ndGggPT0gMyAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdo
JykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAneicpKQorICAgICAgICAg
ICAgbV90b2tlbiA9IEtIRVJUWjsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnbSc6Cisg
ICAgICAgIGlmIChsZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNh
c2VsZXNzRXF1YWwodHlwZVsxXSwgJ20nKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTU1T
OworICAgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFd
LCAncycpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBNU0VDUzsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7
CisgICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAneCcp
KQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQWFM7CisgICAgICAgICAgICBlbHNlIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd0JykpCisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IFBUUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwodHlwZVsxXSwgJ2MnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUENTOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAobGVu
Z3RoID09IDMpIHsKKyAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5
cGVbMV0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnZCcpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSQURTOworICAgICAgICAgICAgZWxzZSBpZiAoaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnZScpICYmIGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwodHlwZVsyXSwgJ20nKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUkVNUzsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdzJzoKKyAgICAgICAgaWYg
KGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgbV90b2tlbiA9IFNFQ1M7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgJ3QnOgorICAgICAgICBpZiAobGVuZ3RoID09IDQgJiYgaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAndScpCisgICAgICAgICAgICAgICAgJiYgaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncicpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwodHlwZVszXSwgJ24nKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBUVVJOUzsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ18nICYm
IGxlbmd0aCA9PSA1ICYmIHR5cGVbMV0gPT0gJ18nICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwodHlwZVsyXSwgJ3EnKQorICAgICAgICAgICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwodHlwZVszXSwgJ2UnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbNF0s
ICdtJykpCisgICAgICAgICAgICBtX3Rva2VuID0gUUVNUzsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKworaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3REYXNoVG9rZW4oaW50IGxlbmd0
aCkKK3sKKyAgICBVQ2hhciogbmFtZSA9IG1fdG9rZW5TdGFydDsKKworICAgIGlmIChsZW5ndGgg
PT0gMTEpIHsKKyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMF0s
ICd5JykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMSwgIndlYmtpdC1hbiIpKQor
ICAgICAgICAgICAgbV90b2tlbiA9IEFOWUZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAnbicpICYmIGlzRXF1YWxUb0NTU0lkZW50
aWZpZXIobmFtZSArIDEsICJ3ZWJraXQtbWkiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNSU5G
VU5DVElPTjsKKyAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1l
WzEwXSwgJ3gnKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAxLCAid2Via2l0LW1h
IikpCisgICAgICAgICAgICBtX3Rva2VuID0gTUFYRlVOQ1RJT047CisgICAgfSBlbHNlIGlmIChs
ZW5ndGggPT0gMTIgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMSwgIndlYmtpdC1j
YWxjIikpCisgICAgICAgIG1fdG9rZW4gPSBDQUxDRlVOQ1RJT047Cit9CisKK2lubGluZSB2b2lk
IENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVuZ3RoLCBib29sIGhhc0VzY2FwZSkKK3sK
KyAgICBVQ2hhciogbmFtZSA9IG1fdG9rZW5TdGFydDsKKyAgICBBU1NFUlQobmFtZVswXSA9PSAn
QCcgJiYgbGVuZ3RoID49IDIpOworCisgICAgLy8gY2hhcnNldCwgZm9udC1mYWNlLCBpbXBvcnQs
IG1lZGlhLCBuYW1lc3BhY2UsIHBhZ2UsCisgICAgLy8gLXdlYmtpdC1rZXlmcmFtZXMsIGFuZCAt
d2Via2l0LW1lZGlhcXVlcnkgYXJlIG5vdCBhZmZlY3RlZCBieSBoYXNFc2NhcGUuCisgICAgc3dp
dGNoICh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQobmFtZVsxXSkpIHsKKyAgICBjYXNlICdiJzoKKyAg
ICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzd2l0
Y2ggKGxlbmd0aCkgeworICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAgaWYgKGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1sZWZ0IikpCisgICAgICAgICAgICAgICAg
bV90b2tlbiA9IEJPVFRPTUxFRlRfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNhc2UgMTM6CisgICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsg
MiwgIm90dG9tLXJpZ2h0IikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTVJJR0hU
X1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE0OgorICAgICAgICAg
ICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1jZW50ZXIiKSkK
KyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NQ0VOVEVSX1NZTTsKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBjYXNlIDE5OgorICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NT
U0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1sZWZ0LWNvcm5lciIpKQorICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZp
ZXIobmFtZSArIDIsICJvdHRvbS1yaWdodC1jb3JuZXIiKSkKKyAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gQk9UVE9NUklHSFRDT1JORVJfU1lNOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2MnOgorICAgICAgICBpZiAobGVuZ3Ro
ID09IDggJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImhhcnNldCIpKQorICAg
ICAgICAgICAgbV90b2tlbiA9IENIQVJTRVRfU1lNOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlICdmJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0VxdWFsVG9DU1NJZGVudGlm
aWVyKG5hbWUgKyAyLCAib250LWZhY2UiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZB
Q0VfU1lNOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdpJzoKKyAgICAgICAgaWYgKGxl
bmd0aCA9PSA3ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJtcG9ydCIpKSB7
CisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CisgICAgICAgICAg
ICBtX3Rva2VuID0gSU1QT1JUX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlICdsJzoKKyAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAobGVuZ3RoID09IDkpIHsKKyAgICAgICAgICAgIGlmIChpc0VxdWFsVG9D
U1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiZWZ0LXRvcCIpKQorICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBMRUZUVE9QX1NZTTsKKyAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT0gMTIpIHsKKyAg
ICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNoYXJhY3RlciBmaXJzdCBjb3VsZCBmdXJ0
aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgorICAgICAgICAgICAgaWYgKGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdlJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmll
cihuYW1lICsgMiwgImVmdC1taWRkbCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZU
TUlERExFX1NZTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwobmFtZVsxMV0sICdtJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImVm
dC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUQk9UVE9NX1NZTTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdtJzoKKyAgICAgICAgaWYgKGxl
bmd0aCA9PSA2ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJlZGlhIikpIHsK
KyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBNRURJQV9TWU07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSAnbic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNFcXVhbFRvQ1NTSWRlbnRp
ZmllcihuYW1lICsgMiwgImFtZXNwYWNlIikpCisgICAgICAgICAgICBtX3Rva2VuID0gTkFNRVNQ
QUNFX1NZTTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAncCc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gNSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiYWdlIikpCisg
ICAgICAgICAgICBtX3Rva2VuID0gUEFHRV9TWU07CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgJ3InOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmIChsZW5ndGggPT0gMTApIHsKKyAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUgKyAyLCAiaWdodC10b3AiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gUklHSFRUT1BfU1lNOworICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMykgeworICAg
ICAgICAgICAgLy8gQ2hlY2tpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRo
ZXIgcmVkdWNlIHRoZSBwb3NzaWJpbGUgY2FzZXMuCisgICAgICAgICAgICBpZiAoaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEyXSwgJ2UnKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVy
KG5hbWUgKyAyLCAiaWdodC1taWRkbCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSSUdI
VE1JRERMRV9TWU07CisgICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKG5hbWVbMTJdLCAnbScpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJp
Z2h0LWJvdHRvIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFJJR0hUQk9UVE9NX1NZTTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICd0JzoKKyAgICAgICAgaWYg
KGhhc0VzY2FwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzd2l0Y2ggKGxlbmd0
aCkgeworICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRp
ZmllcihuYW1lICsgMiwgIm9wLWxlZnQiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9Q
TEVGVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxMDoKKyAgICAg
ICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3AtcmlnaHQiKSkK
KyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QUklHSFRfU1lNOworICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRl
bnRpZmllcihuYW1lICsgMiwgIm9wLWNlbnRlciIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBUT1BDRU5URVJfU1lNOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTY6
CisgICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9wLWxl
ZnQtY29ybmVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUExFRlRDT1JORVJfU1lN
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICBp
ZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9wLXJpZ2h0LWNvcm5lciIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BSSUdIVENPUk5FUl9TWU07CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnLSc6Cisg
ICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7CisgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBp
ZiAoIWhhc0VzY2FwZSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0
LXJ1bGUiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX1JVTEVfU1lNOworICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgICBpZiAoaGFz
RXNjYXBlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgLy8gQ2hlY2tp
bmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3Nz
aWJpbGUgY2FzZXMuCisgICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChu
YW1lWzEzXSwgJ3MnKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0
LWRlY2wiKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX0RFQ0xTX1NZTTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxM10sICdl
JykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC12YWx1IikpCisg
ICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9WQUxVRV9TWU07CisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgIGlmICghaGFzRXNjYXBlICYm
IGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtcmVnaW9uIikpCisgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9SRUdJT05fUlVMRV9TWU07CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNzoKKyAgICAgICAgICAgIGlmICghaGFzRXNjYXBl
ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtc2VsZWN0b3IiKSkK
KyAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX1NFTEVDVE9SX1NZTTsKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE4OgorICAgICAgICAgICAgaWYgKGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWVzIikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOworICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNhc2UgMTk6CisgICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRp
ZmllcihuYW1lICsgMiwgIndlYmtpdC1tZWRpYXF1ZXJ5IikpIHsKKyAgICAgICAgICAgICAgICBt
X3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IFdFQktJVF9NRURJQVFVRVJZX1NZTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBjYXNlIDIyOgorICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1rZXlmcmFtZS1ydWxlIikpCisg
ICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9LRVlGUkFNRV9SVUxFX1NZTTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwogaW50IENTU1BhcnNlcjo6bGV4
KHZvaWQqIHl5bHZhbFdpdGhvdXRUeXBlKQogewogICAgIFlZU1RZUEUqIHl5bHZhbCA9IHN0YXRp
Y19jYXN0PFlZU1RZUEUqPih5eWx2YWxXaXRob3V0VHlwZSk7Ci0gICAgaW50IGxlbmd0aDsKKyAg
ICAvLyBXcml0ZSBwb2ludGVyIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgVUNoYXIqIHJl
c3VsdDsKKyAgICBib29sIGhhc0VzY2FwZTsKIAotICAgIGxleCgpOworICAgIC8vIFRoZSBpbnB1
dCBidWZmZXIgaXMgdGVybWluYXRlZCBieSB0d28gXDAsIHNvCisgICAgLy8gaXQgaXMgc2FmZSB0
byByZWFkIHR3byBjaGFyYWN0ZXJzIGFoZWFkIGFueXRpbWUuCiAKLSAgICBVQ2hhciogdCA9IHRl
eHQoJmxlbmd0aCk7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIEluIGRlYnVnIHdlIGNoZWNrIHdp
dGggYW4gQVNTRVJUIHRoYXQgdGhlIGxlbmd0aCBpcyA+IDAgZm9yIHN0cmluZyB0eXBlcy4KKyAg
ICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gMDsKKyAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSAwOworI2VuZGlmCiAKLSAgICBzd2l0Y2ggKHRva2VuKCkpIHsKLSAgICBjYXNlIFdISVRF
U1BBQ0U6Ci0gICAgY2FzZSBTR01MX0NEOgotICAgIGNhc2UgSU5DTFVERVM6Ci0gICAgY2FzZSBE
QVNITUFUQ0g6CityZXN0YXJ0QWZ0ZXJDb21tZW50OgorICAgIG1fdG9rZW5TdGFydCA9IHJlc3Vs
dCA9IG1fY3VycmVudENoYXJhY3RlcjsKKyAgICBtX3Rva2VuID0gKm1fY3VycmVudENoYXJhY3Rl
cjsKKyAgICArK21fY3VycmVudENoYXJhY3RlcjsKKworICAgIHN3aXRjaCAoKG1fdG9rZW4gPD0g
MTI3KSA/IHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbbV90b2tlbl0gOiBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQpIHsKKyAgICBjYXNlIENoYXJhY3RlckNhc2VsZXNzVToKKyAgICAgICAgaWYgKFVO
TElLRUxZKCptX2N1cnJlbnRDaGFyYWN0ZXIgPT0gJysnKSkKKyAgICAgICAgICAgIGlmIChwYXJz
ZVVuaWNvZGVSYW5nZSgpKSB7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFVOSUNPREVSQU5H
RTsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0
YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fY3VycmVudENo
YXJhY3RlciAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dC4KKworICAgIGNhc2UgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0OgorICAgICAgICAtLW1fY3Vy
cmVudENoYXJhY3RlcjsKKyAgICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCwgaGFzRXNjYXBl
KTsKKyAgICAgICAgbV90b2tlbiA9IElERU5UOworCisgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNo
YXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9
IHJlc3VsdCAtIG1fdG9rZW5TdGFydDsKKworICAgICAgICBpZiAoVU5MSUtFTFkoKm1fY3VycmVu
dENoYXJhY3RlciA9PSAnKCcpKSB7CisgICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJT047Cisg
ICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKKyAgICAgICAgICAgICAgICBkZXRlY3RGdW5jdGlv
blR5cGVUb2tlbihyZXN1bHQgLSBtX3Rva2VuU3RhcnQpOworICAgICAgICAgICAgKyttX2N1cnJl
bnRDaGFyYWN0ZXI7CisgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgICAgICsreXlsdmFs
LT5zdHJpbmcubGVuZ3RoOworCisgICAgICAgICAgICBpZiAodG9rZW4oKSA9PSBVUkkpIHsKKyAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJT047CisgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgd2hldGhlciBpdCBpcyByZWFsbHkgYW4gVVJJLgorICAgICAgICAgICAgICAgIHBhcnNlVVJJ
KHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgeXls
dmFsLT5zdHJpbmcubGVuZ3RoID0gcmVzdWx0IC0geXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVyczsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2Rl
ICE9IE5vcm1hbE1vZGUpICYmICFoYXNFc2NhcGUpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcnNp
bmdNb2RlID09IE1lZGlhUXVlcnlNb2RlKQorICAgICAgICAgICAgICAgIGRldGVjdE1lZGlhUXVl
cnlUb2tlbihyZXN1bHQgLSBtX3Rva2VuU3RhcnQpOworICAgICAgICAgICAgZWxzZSBpZiAobV9w
YXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCht
X3Rva2VuU3RhcnRbMF0sICduJykpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0IC0gbV90
b2tlblN0YXJ0ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuIiBpcyBJ
REVOVCBidXQgIm4rMSIgaXMgTlRILgorICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhD
aGlsZEV4dHJhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2N1cnJlbnRD
aGFyYWN0ZXIgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAtIG1fdG9rZW5TdGFydCA9PSAyICYmIG1fdG9rZW5T
dGFydFsxXSA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuLSIgaXMg
SURFTlQgYnV0ICJuLTEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRp
dmVseSBkZWNyZWFzZSBtX2N1cnJlbnRDaGFyYWN0ZXIgdG8gZGV0ZWN0IGFuIG50aC1jaGlsZCB0
b2tlbi4KKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyLS07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmxlbmd0aCA9IG1fY3VycmVudENoYXJhY3RlciAtIG1fdG9rZW5TdGFydDsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVy
dCB0aGUgY2hhbmdlIHRvIG1fY3VycmVudENoYXJhY3RlciBpZiB1bnN1Y2Nlc3NmdWwuCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIrKzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
ICAgICBicmVhazsKIAotICAgIGNhc2UgVVJJOgotICAgIGNhc2UgU1RSSU5HOgotICAgIGNhc2Ug
SURFTlQ6Ci0gICAgY2FzZSBOVEg6Ci0gICAgY2FzZSBIRVg6Ci0gICAgY2FzZSBJRFNFTDoKLSAg
ICBjYXNlIERJTUVOOgotICAgIGNhc2UgVU5JQ09ERVJBTkdFOgotICAgIGNhc2UgRlVOQ1RJT046
Ci0gICAgY2FzZSBBTllGVU5DVElPTjoKLSAgICBjYXNlIE5PVEZVTkNUSU9OOgotICAgIGNhc2Ug
Q0FMQ0ZVTkNUSU9OOgotICAgIGNhc2UgTUlORlVOQ1RJT046Ci0gICAgY2FzZSBNQVhGVU5DVElP
TjoKLSAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IHQ7Ci0gICAgICAgIHl5bHZh
bC0+c3RyaW5nLmxlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIElN
UE9SVF9TWU06Ci0gICAgY2FzZSBQQUdFX1NZTToKLSAgICBjYXNlIE1FRElBX1NZTToKLSAgICBj
YXNlIEZPTlRfRkFDRV9TWU06Ci0gICAgY2FzZSBDSEFSU0VUX1NZTToKLSAgICBjYXNlIE5BTUVT
UEFDRV9TWU06Ci0gICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1NZTToKLQotICAgIGNhc2UgSU1Q
T1JUQU5UX1NZTToKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFFFTVM6Ci0gICAgICAgIGxl
bmd0aC0tOwotICAgIGNhc2UgR1JBRFM6Ci0gICAgY2FzZSBUVVJOUzoKLSAgICAgICAgbGVuZ3Ro
LS07Ci0gICAgY2FzZSBERUdTOgotICAgIGNhc2UgUkFEUzoKLSAgICBjYXNlIEtIRVJUWjoKLSAg
ICBjYXNlIFJFTVM6Ci0gICAgICAgIGxlbmd0aC0tOwotICAgIGNhc2UgTVNFQ1M6Ci0gICAgY2Fz
ZSBIRVJUWjoKLSAgICBjYXNlIEVNUzoKLSAgICBjYXNlIEVYUzoKLSAgICBjYXNlIFBYUzoKLSAg
ICBjYXNlIENNUzoKLSAgICBjYXNlIE1NUzoKLSAgICBjYXNlIElOUzoKLSAgICBjYXNlIFBUUzoK
LSAgICBjYXNlIFBDUzoKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBTRUNTOgotICAgIGNh
c2UgUEVSQ0VOVEFHRToKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgY2FzZSBGTE9BVFRPS0VOOgot
ICAgIGNhc2UgSU5URUdFUjoKLSAgICAgICAgeXlsdmFsLT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9E
b3VibGUodCwgbGVuZ3RoKTsKKyAgICBjYXNlIENoYXJhY3RlckRvdDoKKyAgICAgICAgaWYgKCFp
c0FTQ0lJRGlnaXQobV9jdXJyZW50Q2hhcmFjdGVyWzBdKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gQ2hhcmFjdGVyTnVtYmVyLgorCisgICAgY2FzZSBD
aGFyYWN0ZXJOdW1iZXI6IHsKKyAgICAgICAgYm9vbCBkb3RTZWVuID0gKG1fdG9rZW4gPT0gJy4n
KTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJRGln
aXQobV9jdXJyZW50Q2hhcmFjdGVyWzBdKSkgeworICAgICAgICAgICAgICAgIC8vIE9ubHkgb25l
IGRvdCBpcyBhbGxvd2VkIGZvciBhIG51bWJlciwKKyAgICAgICAgICAgICAgICAvLyBhbmQgaXQg
bXVzdCBiZSBmb2xsb3dlZCBieSBhIGRpZ2l0LgorICAgICAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRDaGFyYWN0ZXJbMF0gIT0gJy4nIHx8IGRvdFNlZW4gfHwgIWlzQVNDSUlEaWdpdChtX2N1cnJl
bnRDaGFyYWN0ZXJbMV0pKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkb3RTZWVuID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrbV9jdXJy
ZW50Q2hhcmFjdGVyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2lu
Z01vZGUgPT0gTnRoQ2hpbGRNb2RlKSAmJiAhZG90U2VlbiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKCptX2N1cnJlbnRDaGFyYWN0ZXIsICduJykpIHsKKyAgICAgICAgICAgIC8vICJbMC05
XStuIiBpcyBhbHdheXMgYW4gTnRoQ2hpbGQuCisgICAgICAgICAgICArK21fY3VycmVudENoYXJh
Y3RlcjsKKyAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYSgpOworICAgICAgICAgICAgbV90
b2tlbiA9IE5USDsKKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgPSBtX3Rv
a2VuU3RhcnQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2N1cnJlbnRD
aGFyYWN0ZXIgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHl5bHZhbC0+bnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKG1fdG9rZW5TdGFy
dCwgbV9jdXJyZW50Q2hhcmFjdGVyIC0gbV90b2tlblN0YXJ0KTsKKworICAgICAgICAvLyBUeXBl
IG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KCkpIHsKKyAg
ICAgICAgICAgIFVDaGFyKiB0eXBlID0gbV9jdXJyZW50Q2hhcmFjdGVyOworICAgICAgICAgICAg
cmVzdWx0ID0gbV9jdXJyZW50Q2hhcmFjdGVyOworCisgICAgICAgICAgICBwYXJzZUlkZW50aWZp
ZXIocmVzdWx0LCBoYXNFc2NhcGUpOworICAgICAgICAgICAgaWYgKCptX2N1cnJlbnRDaGFyYWN0
ZXIgPT0gJysnKSB7CisgICAgICAgICAgICAgICAgLy8gQW55IGlkZW50aWZpZXIgZm9sbG93ZWQg
YnkgYSAnKycgc2lnbiBpcyBhbiBpbnZhbGlkIGRpbWVuc2lvbi4KKyAgICAgICAgICAgICAgICAr
K21fY3VycmVudENoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gSU5WQUxJRERJ
TUVOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRElN
RU47CisgICAgICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCisgICAgICAgICAgICAgICAgICAg
IGRldGVjdE51bWJlclRva2VuKHR5cGUsIG1fY3VycmVudENoYXJhY3RlciAtIHR5cGUpOworCisg
ICAgICAgICAgICAgICAgaWYgKG1fdG9rZW4gPT0gRElNRU4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGRlY29kZWQgbnVtYmVyIGlzIG92ZXJ3cml0dGVuLCBidXQgdGhpcyBpcyBpbnRl
bnRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9
IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
ID0gbV9jdXJyZW50Q2hhcmFjdGVyIC0gbV90b2tlblN0YXJ0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgqbV9jdXJyZW50Q2hhcmFjdGVyID09
ICclJykgeworICAgICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIENTUyBncmFtbWFyIHNheXMge251
bX0lIHdlIGZvbGxvdworICAgICAgICAgICAgLy8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hpY2gg
dXNlcyB7bnVtfSUrLgorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICsrbV9jdXJy
ZW50Q2hhcmFjdGVyOworICAgICAgICAgICAgfSB3aGlsZSAoKm1fY3VycmVudENoYXJhY3RlciA9
PSAnJScpOworICAgICAgICAgICAgbV90b2tlbiA9IFBFUkNFTlRBR0U7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbV90b2tlbiA9IGRvdFNlZW4gPyBGTE9BVFRPS0VOIDogSU5URUdFUjsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBDaGFyYWN0ZXJEYXNoOgorICAgICAg
ICBpZiAoaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2gobV9jdXJyZW50Q2hhcmFjdGVyKSkgewor
ICAgICAgICAgICAgLS1tX2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgICAgICBwYXJzZUlkZW50
aWZpZXIocmVzdWx0LCBoYXNFc2NhcGUpOworICAgICAgICAgICAgbV90b2tlbiA9IElERU5UOwor
CisgICAgICAgICAgICBpZiAoKm1fY3VycmVudENoYXJhY3RlciA9PSAnKCcpIHsKKyAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gRlVOQ1RJT047CisgICAgICAgICAgICAgICAgaWYgKCFoYXNFc2Nh
cGUpCisgICAgICAgICAgICAgICAgICAgIGRldGVjdERhc2hUb2tlbihyZXN1bHQgLSBtX3Rva2Vu
U3RhcnQpOworICAgICAgICAgICAgICAgICsrbV9jdXJyZW50Q2hhcmFjdGVyOworICAgICAgICAg
ICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNp
bmdNb2RlID09IE50aENoaWxkTW9kZSkgJiYgIWhhc0VzY2FwZSAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKG1fdG9rZW5TdGFydFsxXSwgJ24nKSkgeworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMikgeworICAgICAgICAgICAgICAgICAgICAvLyBTdHJp
bmcgIi1uIiBpcyBJREVOVCBidXQgIi1uKzEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHBhcnNlTnRoQ2hpbGRFeHRyYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50Q2hh
cmFjdGVyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChyZXN1bHQgLSBtX3Rva2VuU3RhcnQgPT0gMyAmJiBtX3Rva2VuU3RhcnRbMl0gPT0gJy0nKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4tIiBpcyBJREVOVCBidXQgIi1uLTEi
IGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSBkZWNyZWFzZSBt
X2N1cnJlbnRDaGFyYWN0ZXIgdG8gZGV0ZWN0IGFuIG50aC1jaGlsZCB0b2tlbi4KKyAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyLS07CisgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJzZU50aENoaWxkRXh0cmEoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tl
biA9IE5USDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9
IG1fY3VycmVudENoYXJhY3RlciAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlIHRv
IG1fY3VycmVudENoYXJhY3RlciBpZiB1bnN1Y2Nlc3NmdWwuCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmNo
YXJhY3RlcnMgPSBtX3Rva2VuU3RhcnQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSByZXN1bHQgLSBtX3Rva2VuU3RhcnQ7CisgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50
Q2hhcmFjdGVyWzBdID09ICctJyAmJiBtX2N1cnJlbnRDaGFyYWN0ZXJbMV0gPT0gJz4nKSB7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gMjsKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBTR01MX0NEOworICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0g
TnRoQ2hpbGRNb2RlKSkgeworICAgICAgICAgICAgLy8gIi1bMC05XStuIiBpcyBhbHdheXMgYW4g
TnRoQ2hpbGQuCisgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZCgpKSB7CisgICAgICAgICAg
ICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5U
SDsKKyAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0
YXJ0OworICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IG1fY3VycmVudENo
YXJhY3RlciAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICBicmVhazsKIAotICAgIGRlZmF1bHQ6CisgICAgY2FzZSBDaGFyYWN0ZXJPdGhlcjoKKyAgICAg
ICAgLy8gbV90b2tlbiBpcyBzaW1wbHkgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgogICAgICAgICBi
cmVhazsKLSAgICB9CiAKLSAgICByZXR1cm4gdG9rZW4oKTsKLX0KKyAgICBjYXNlIENoYXJhY3Rl
cldoaXRlU3BhY2U6CisgICAgICAgIG1fdG9rZW4gPSBXSElURVNQQUNFOworICAgICAgICAvLyBN
aWdodCBzdGFydCB3aXRoIGEgJ1xuJy4KKyAgICAgICAgLS1tX2N1cnJlbnRDaGFyYWN0ZXI7Cisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICgqbV9jdXJyZW50Q2hhcmFjdGVyID09ICdcbicp
CisgICAgICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7CisgICAgICAgICAgICArK21fY3VycmVu
dENoYXJhY3RlcjsKKyAgICAgICAgfSB3aGlsZSAoKm1fY3VycmVudENoYXJhY3RlciA8PSAnICcg
JiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKm1fY3VycmVudENoYXJhY3Rlcl0gPT0gQ2hhcmFj
dGVyV2hpdGVTcGFjZSkpOworICAgICAgICBicmVhazsKIAotdm9pZCBDU1NQYXJzZXI6OnJlY2hl
Y2tBdEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICBTdHJpbmcgcnVs
ZU5hbWUoc3RyLCBsZW4pOwotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBp
bXBvcnQiKSkKLSAgICAgICAgeXlUb2sgPSBJTVBPUlRfU1lNOwotICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQHBhZ2UiKSkKLSAgICAgICAgeXlUb2sgPSBQQUdFX1NZ
TTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShydWxlTmFtZSwgIkBtZWRpYSIpKQot
ICAgICAgICB5eVRvayA9IE1FRElBX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShydWxlTmFtZSwgIkBmb250LWZhY2UiKSkKLSAgICAgICAgeXlUb2sgPSBGT05UX0ZBQ0VfU1lN
OwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQGNoYXJzZXQiKSkK
LSAgICAgICAgeXlUb2sgPSBDSEFSU0VUX1NZTTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShydWxlTmFtZSwgIkBuYW1lc3BhY2UiKSkKLSAgICAgICAgeXlUb2sgPSBOQU1FU1BBQ0Vf
U1lNOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQC13ZWJraXQt
a2V5ZnJhbWVzIikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX0tFWUZSQU1FU19TWU07Ci0gICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZU5hbWUsICJALXdlYmtpdC1tZWRpYXF1ZXJ5
IikpCi0gICAgICAgIHl5VG9rID0gV0VCS0lUX01FRElBUVVFUllfU1lNOwotfQotCi1VQ2hhciog
Q1NTUGFyc2VyOjp0ZXh0KGludCAqbGVuZ3RoKQotewotICAgIFVDaGFyKiBzdGFydCA9IHl5dGV4
dDsKLSAgICBpbnQgbCA9IHl5bGVuZzsKLSAgICBzd2l0Y2ggKHl5VG9rKSB7Ci0gICAgY2FzZSBT
VFJJTkc6Ci0gICAgICAgIGwtLTsKLSAgICAgICAgLyogbm9icmVhayAqLwotICAgIGNhc2UgSEVY
OgotICAgIGNhc2UgSURTRUw6Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIGwtLTsKKyAgICBj
YXNlIENoYXJhY3RlckVuZE1lZGlhUXVlcnk6CisgICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09
IE1lZGlhUXVlcnlNb2RlKQorICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE5vcm1hbE1vZGU7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVVJJOgotICAgICAgICAvLyAidXJsKCJ7d317c3Ry
aW5nfXt3fSIpIgotICAgICAgICAvLyAidXJsKCJ7d317dXJsfXt3fSIpIgotICAgICAgICAvLyBz
dHJpcCAidXJsKCIgYW5kICIpIgotICAgICAgICBzdGFydCArPSA0OwotICAgICAgICBsIC09IDU7
Ci0gICAgICAgIC8vIHN0cmlwIHt3fQotICAgICAgICB3aGlsZSAobCAmJiBpc0hUTUxTcGFjZSgq
c3RhcnQpKSB7Ci0gICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAgLS1sOwotICAgICAg
ICB9Ci0gICAgICAgIHdoaWxlIChsICYmIGlzSFRNTFNwYWNlKHN0YXJ0W2wgLSAxXSkpCi0gICAg
ICAgICAgICAtLWw7Ci0gICAgICAgIGlmIChsICYmICgqc3RhcnQgPT0gJyInIHx8ICpzdGFydCA9
PSAnXCcnKSkgewotICAgICAgICAgICAgQVNTRVJUKGwgPj0gMiAmJiBzdGFydFtsIC0gMV0gPT0g
KnN0YXJ0KTsKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICAgICBsIC09IDI7CisKKyAg
ICBjYXNlIENoYXJhY3RlckVuZE50aENoaWxkOgorICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9
PSBOdGhDaGlsZE1vZGUpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlclF1b3RlOgorICAgICAgICBpZiAo
Y2hlY2tBbmRTa2lwU3RyaW5nKG1fY3VycmVudENoYXJhY3RlciwgbV90b2tlbikpIHsKKyAgICAg
ICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAgcGFyc2VTdHJpbmcocmVzdWx0LCBtX3Rva2Vu
KTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBTVFJJTkc7CisgICAgICAgICAgICB5eWx2YWwtPnN0
cmluZy5jaGFyYWN0ZXJzID0gbV90b2tlblN0YXJ0ICsgMTsKKyAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmxlbmd0aCA9IHJlc3VsdCAtIChtX3Rva2VuU3RhcnQgKyAxKTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgorCisgICAgY2FzZSBDaGFyYWN0ZXJFeGNsYW1h
dGlvbk1hcms6IHsKKyAgICAgICAgVUNoYXIqIHN0YXJ0ID0gc2tpcFdoaXRlU3BhY2UobV9jdXJy
ZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIoc3RhcnQs
ICJpbXBvcnRhbnQiKSkgeworICAgICAgICAgICAgbV90b2tlbiA9IElNUE9SVEFOVF9TWU07Cisg
ICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBzdGFydCArIDk7CisgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgLy8gcHJvY2VzcyBlc2NhcGVzCi0gICAgVUNoYXIq
IG91dCA9IHN0YXJ0OwotICAgIFVDaGFyKiBlc2NhcGUgPSAwOworICAgIGNhc2UgQ2hhcmFjdGVy
SGFzaG1hcms6IHsKKyAgICAgICAgVUNoYXIqIHN0YXJ0ID0gbV9jdXJyZW50Q2hhcmFjdGVyOwor
ICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRDaGFyYWN0ZXI7CiAKLSAgICBib29sIHNhd0VzY2Fw
ZSA9IGZhbHNlOworICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KCptX2N1cnJlbnRDaGFyYWN0ZXIp
KSB7CisgICAgICAgICAgICAvLyBUaGlzIG11c3QgYmUgYSB2YWxpZCBoZXggbnVtYmVyIHRva2Vu
LgorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICsrbV9jdXJyZW50Q2hhcmFjdGVy
OworICAgICAgICAgICAgfSB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCptX2N1cnJlbnRDaGFyYWN0
ZXIpKTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBIRVg7CisgICAgICAgICAgICB5eWx2YWwtPnN0
cmluZy5jaGFyYWN0ZXJzID0gc3RhcnQ7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5n
dGggPSBtX2N1cnJlbnRDaGFyYWN0ZXIgLSBzdGFydDsKKyAgICAgICAgfSBlbHNlIGlmIChpc0lk
ZW50aWZpZXJTdGFydCgpKSB7CisgICAgICAgICAgICBtX3Rva2VuID0gSURTRUw7CisgICAgICAg
ICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0LCBoYXNFc2NhcGUpOworICAgICAgICAgICAgaWYg
KCFoYXNFc2NhcGUpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBpZGVu
dGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVtYmVyLgorICAgICAgICAgICAgICAgIFVDaGFy
KiBjdXJyZW50ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEhFWDsKKyAgICAg
ICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0
KCpjdXJyZW50KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IElEU0VMOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1
cnJlbnQgPCByZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeXlsdmFsLT5zdHJp
bmcuY2hhcmFjdGVycyA9IHN0YXJ0OworICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
ID0gcmVzdWx0IC0gc3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgVUNoYXIqIGN1cnJlbnQg
PSBzdGFydCArIGk7Ci0gICAgICAgIGlmIChlc2NhcGUgPT0gY3VycmVudCAtIDEpIHsKLSAgICAg
ICAgICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKHl5VG9rID09IFNUUklORyAmJgotICAgICAgICAgICAg
ICAgICAoKmN1cnJlbnQgPT0gJ1xuJyB8fCAqY3VycmVudCA9PSAnXHInIHx8ICpjdXJyZW50ID09
ICdcZicpKSB7Ci0gICAgICAgICAgICAgICAgLy8gIyMjIGhhbmRsZSBcclxuIGNhc2UKLSAgICAg
ICAgICAgICAgICBpZiAoKmN1cnJlbnQgIT0gJ1xyJykKLSAgICAgICAgICAgICAgICAgICAgZXNj
YXBlID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICBjYXNlIENoYXJhY3RlclNs
YXNoOgorICAgICAgICAvLyBJZ25vcmUgY29tbWVudHMuIFRoZXkgYXJlIG5vdCBldmVuIGNvbnNp
ZGVyZWQgYXMgd2hpdGUgc3BhY2VzLgorICAgICAgICBpZiAoKm1fY3VycmVudENoYXJhY3RlciA9
PSAnKicpIHsKKyAgICAgICAgICAgICsrbV9jdXJyZW50Q2hhcmFjdGVyOworICAgICAgICAgICAg
d2hpbGUgKG1fY3VycmVudENoYXJhY3RlclswXSAhPSAnKicgfHwgbV9jdXJyZW50Q2hhcmFjdGVy
WzFdICE9ICcvJykgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXJbMF0g
PT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7CisgICAgICAgICAg
ICAgICAgaWYgKG1fY3VycmVudENoYXJhY3RlclswXSA9PSAnXDAnICYmIG1fY3VycmVudENoYXJh
Y3RlclsxXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVudGVybWluYXRlZCBj
b21tZW50cyBhcmUgc2ltcGx5IGlnbm9yZWQuCisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dENoYXJhY3RlciAtPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgKyttX2N1cnJlbnRDaGFyYWN0ZXI7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAvLyBpbiBhbGwgb3RoZXIgY2FzZXMgY29weSB0aGUgY2hhciB0byBv
dXRwdXQKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgKm91dCsrID0gKmN1cnJlbnQ7
Ci0gICAgICAgICAgICBlc2NhcGUgPSAwOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gMjsKKyAgICAgICAgICAgIGdvdG8gcmVzdGFydEFm
dGVyQ29tbWVudDsKICAgICAgICAgfQotICAgICAgICBpZiAoZXNjYXBlID09IGN1cnJlbnQgLSAy
ICYmIHl5VG9rID09IFNUUklORyAmJgotICAgICAgICAgICAgICooY3VycmVudC0xKSA9PSAnXHIn
ICYmICpjdXJyZW50ID09ICdcbicpIHsKLSAgICAgICAgICAgIGVzY2FwZSA9IDA7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlckRvbGxh
cjoKKyAgICAgICAgaWYgKCptX2N1cnJlbnRDaGFyYWN0ZXIgPT0gJz0nKSB7CisgICAgICAgICAg
ICArK21fY3VycmVudENoYXJhY3RlcjsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBFTkRTV0lUSDsK
ICAgICAgICAgfQotICAgICAgICBpZiAoZXNjYXBlID4gY3VycmVudCAtIDcgJiYgaXNBU0NJSUhl
eERpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXNj
YXBlKSB7Ci0gICAgICAgICAgICAvLyBhZGQgZXNjYXBlZCBjaGFyCi0gICAgICAgICAgICB1bnNp
Z25lZCB1YyA9IDA7Ci0gICAgICAgICAgICBlc2NhcGUrKzsKLSAgICAgICAgICAgIHdoaWxlIChl
c2NhcGUgPCBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAgdWMgKj0gMTY7Ci0gICAgICAgICAg
ICAgICAgdWMgKz0gdG9BU0NJSUhleFZhbHVlKCplc2NhcGUpOwotICAgICAgICAgICAgICAgIGVz
Y2FwZSsrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyQXN0ZXJpc2s6Cisg
ICAgICAgIGlmICgqbV9jdXJyZW50Q2hhcmFjdGVyID09ICc9JykgeworICAgICAgICAgICAgKytt
X2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgICAgICBtX3Rva2VuID0gQ09OVEFJTlM7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlclBsdXM6CisgICAgICAg
IGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkpIHsKKyAgICAgICAg
ICAgIC8vIFNpbXBsZXN0IGNhc2UuICIrWzAtOV0qbiIgaXMgYWx3YXlzIE50aENoaWxkLgorICAg
ICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGQoKSkgeworICAgICAgICAgICAgICAgIHBhcnNlTnRo
Q2hpbGRFeHRyYSgpOworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAg
ICAgICAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBtX2N1cnJlbnRDaGFyYWN0ZXIgLSBtX3Rv
a2VuU3RhcnQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjYW4ndCBoYW5kbGUgY2hh
cnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgICAgICBpZiAodWMgPiAweGZmZmYpCi0gICAgICAgICAg
ICAgICAgdWMgPSAweGZmZmQ7Ci0gICAgICAgICAgICAqb3V0KysgPSB1YzsKLSAgICAgICAgICAg
IGVzY2FwZSA9IDA7Ci0gICAgICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKmN1cnJlbnQpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZXNjYXBlICYm
ICpjdXJyZW50ID09ICdcXCcpIHsKLSAgICAgICAgICAgIGVzY2FwZSA9IGN1cnJlbnQ7Ci0gICAg
ICAgICAgICBzYXdFc2NhcGUgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJMZXNzOgorICAgICAgICBpZiAobV9jdXJyZW50
Q2hhcmFjdGVyWzBdID09ICchJyAmJiBtX2N1cnJlbnRDaGFyYWN0ZXJbMV0gPT0gJy0nICYmIG1f
Y3VycmVudENoYXJhY3RlclsyXSA9PSAnLScpIHsKKyAgICAgICAgICAgIG1fY3VycmVudENoYXJh
Y3RlciArPSAzOworICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CiAgICAgICAgIH0KLSAg
ICAgICAgKm91dCsrID0gKmN1cnJlbnQ7Ci0gICAgfQotICAgIGlmIChlc2NhcGUpIHsKLSAgICAg
ICAgLy8gYWRkIGVzY2FwZWQgY2hhcgotICAgICAgICB1bnNpZ25lZCB1YyA9IDA7Ci0gICAgICAg
IGVzY2FwZSsrOwotICAgICAgICB3aGlsZSAoZXNjYXBlIDwgc3RhcnQrbCkgewotICAgICAgICAg
ICAgdWMgKj0gMTY7Ci0gICAgICAgICAgICB1YyArPSB0b0FTQ0lJSGV4VmFsdWUoKmVzY2FwZSk7
Ci0gICAgICAgICAgICBlc2NhcGUrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJh
Y3RlckF0OgorICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoKSkgeworICAgICAgICAgICAg
bV90b2tlbiA9IEFUS0VZV09SRDsKKyAgICAgICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAg
cGFyc2VJZGVudGlmaWVyKHJlc3VsdCwgaGFzRXNjYXBlKTsKKyAgICAgICAgICAgIGRldGVjdEF0
VG9rZW4ocmVzdWx0IC0gbV90b2tlblN0YXJ0LCBoYXNFc2NhcGUpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJCYWNrU2xhc2g6CisgICAgICAgIGlmIChp
c0NTU0VzY2FwZSgqbV9jdXJyZW50Q2hhcmFjdGVyKSkgeworICAgICAgICAgICAgLS1tX2N1cnJl
bnRDaGFyYWN0ZXI7CisgICAgICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0LCBoYXNFc2Nh
cGUpOworICAgICAgICAgICAgbV90b2tlbiA9IElERU5UOworICAgICAgICAgICAgeXlsdmFsLT5z
dHJpbmcuY2hhcmFjdGVycyA9IG1fdG9rZW5TdGFydDsKKyAgICAgICAgICAgIHl5bHZhbC0+c3Ry
aW5nLmxlbmd0aCA9IHJlc3VsdCAtIG1fdG9rZW5TdGFydDsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyWG9yOgorICAgICAgICBpZiAoKm1fY3VycmVudENo
YXJhY3RlciA9PSAnPScpIHsKKyAgICAgICAgICAgICsrbV9jdXJyZW50Q2hhcmFjdGVyOworICAg
ICAgICAgICAgbV90b2tlbiA9IEJFR0lOU1dJVEg7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIENoYXJhY3RlclZlcnRpY2FsQmFyOgorICAgICAgICBpZiAoKm1fY3VycmVu
dENoYXJhY3RlciA9PSAnPScpIHsKKyAgICAgICAgICAgICsrbV9jdXJyZW50Q2hhcmFjdGVyOwor
ICAgICAgICAgICAgbV90b2tlbiA9IERBU0hNQVRDSDsKICAgICAgICAgfQotICAgICAgICAvLyBj
YW4ndCBoYW5kbGUgY2hhcnMgb3V0c2lkZSB1Y3MyCi0gICAgICAgIGlmICh1YyA+IDB4ZmZmZikK
LSAgICAgICAgICAgIHVjID0gMHhmZmZkOwotICAgICAgICAqb3V0KysgPSB1YzsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlclRpbGRlOgorICAgICAgICBpZiAoKm1fY3VycmVu
dENoYXJhY3RlciA9PSAnPScpIHsKKyAgICAgICAgICAgICsrbV9jdXJyZW50Q2hhcmFjdGVyOwor
ICAgICAgICAgICAgbV90b2tlbiA9IElOQ0xVREVTOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgICpsZW5ndGggPSBvdXQgLSBzdGFydDsKKyNpZm5kZWYgTkRF
QlVHCisgICAgc3dpdGNoICh0b2tlbigpKSB7CisgICAgY2FzZSBTVFJJTkc6CisgICAgICAgIEFT
U0VSVCh5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID09IG1fdG9rZW5TdGFydCArIDEpOworICAg
ICAgICBicmVhazsKIAotICAgIC8vIElmIHdlIGhhdmUgYW4gdW5yZWNvZ25pemVkIEAta2V5d29y
ZCwgYW5kIGlmIHdlIGhhbmRsZWQgYW55IGVzY2FwZXMgYXQgYWxsLCB0aGVuCi0gICAgLy8gd2Ug
c2hvdWxkIGF0dGVtcHQgdG8gYWRqdXN0IHl5VG9rIHRvIHRoZSBjb3JyZWN0IHR5cGUuCi0gICAg
aWYgKHl5VG9rID09IEFUS0VZV09SRCAmJiBzYXdFc2NhcGUpCi0gICAgICAgIHJlY2hlY2tBdEtl
eXdvcmQoc3RhcnQsICpsZW5ndGgpOworICAgIGNhc2UgSURFTlQ6CisgICAgY2FzZSBOVEg6Cisg
ICAgY2FzZSBESU1FTjoKKyAgICBjYXNlIFVOSUNPREVSQU5HRToKKyAgICBjYXNlIEZVTkNUSU9O
OgorICAgIGNhc2UgQU5ZRlVOQ1RJT046CisgICAgY2FzZSBOT1RGVU5DVElPTjoKKyAgICBjYXNl
IENBTENGVU5DVElPTjoKKyAgICBjYXNlIE1JTkZVTkNUSU9OOgorICAgIGNhc2UgTUFYRlVOQ1RJ
T046CisgICAgICAgIEFTU0VSVCh5eWx2YWwtPnN0cmluZy5jaGFyYWN0ZXJzID09IG1fdG9rZW5T
dGFydCAmJiB5eWx2YWwtPnN0cmluZy5sZW5ndGggPiAwKTsKKyAgICAgICAgYnJlYWs7CiAKLSAg
ICByZXR1cm4gc3RhcnQ7Ci19CisgICAgY2FzZSBVUkk6CisgICAgICAgIEFTU0VSVCh5eWx2YWwt
PnN0cmluZy5jaGFyYWN0ZXJzICYmIHl5bHZhbC0+c3RyaW5nLmNoYXJhY3RlcnMgIT0gbV90b2tl
blN0YXJ0KTsKKyAgICAgICAgYnJlYWs7CiAKLXZvaWQgQ1NTUGFyc2VyOjpjb3VudExpbmVzKCkK
LXsKLSAgICBmb3IgKFVDaGFyKiBjdXJyZW50ID0geXl0ZXh0OyBjdXJyZW50IDwgeXl0ZXh0ICsg
eXlsZW5nOyArK2N1cnJlbnQpIHsKLSAgICAgICAgaWYgKCpjdXJyZW50ID09ICdcbicpCi0gICAg
ICAgICAgICArK21fbGluZU51bWJlcjsKKyAgICBjYXNlIEhFWDoKKyAgICBjYXNlIElEU0VMOgor
ICAgICAgICBBU1NFUlQoeXlsdmFsLT5zdHJpbmcuY2hhcmFjdGVycyA9PSBtX3Rva2VuU3RhcnQg
KyAxICYmIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCA+IDApOworICAgICAgICBicmVhazsKICAgICB9
CisjZW5kaWYKKworICAgIHJldHVybiB0b2tlbigpOwogfQogCiBDU1NQYXJzZXJTZWxlY3Rvciog
Q1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1NlbGVjdG9yKCkKQEAgLTc5NDAsMjcgKzg5MDQsMjcg
QEAgdm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RNZWRpYUxpbmUoTWVkaWFMaXN0KiBtZWRpYSkK
IAogdm9pZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RTdGFydCgpCiB7Ci0gICAgbV9zZWxl
Y3Rvckxpc3RSYW5nZS5zdGFydCA9IHl5dGV4dCAtIG1fZGF0YS5nZXQoKTsKKyAgICBtX3NlbGVj
dG9yTGlzdFJhbmdlLnN0YXJ0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiB9
CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKIHsKICAgICBpZiAoIW1f
Y3VycmVudFJ1bGVEYXRhKQogICAgICAgICByZXR1cm47Ci0gICAgVUNoYXIqIGxpc3RFbmQgPSB5
eXRleHQ7Ci0gICAgd2hpbGUgKGxpc3RFbmQgPiBtX2RhdGEuZ2V0KCkgKyAxKSB7CisgICAgVUNo
YXIqIGxpc3RFbmQgPSBtX3Rva2VuU3RhcnQ7CisgICAgd2hpbGUgKGxpc3RFbmQgPiBtX2RhdGFT
dGFydC5nZXQoKSArIDEpIHsKICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCoobGlzdEVuZCAtIDEp
KSkKICAgICAgICAgICAgIC0tbGlzdEVuZDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gbGlzdEVuZCAtIG1fZGF0
YS5nZXQoKTsKKyAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFT
dGFydC5nZXQoKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKIHsK
LSAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGEuZ2V0KCk7Ci0gICAgaWYgKCp5
eXRleHQgPT0gJ3snKQorICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0
YVN0YXJ0LmdldCgpOworICAgIGlmICgqbV90b2tlblN0YXJ0ID09ICd7JykKICAgICAgICAgKytv
ZmZzZXQ7IC8vIFNraXAgdGhlIHJ1bGUgYm9keSBvcGVuaW5nIGJyYWNlLgogICAgIGlmIChvZmZz
ZXQgPiBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpCiAgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5zdGFy
dCA9IG9mZnNldDsKQEAgLTc5NjksNyArODkzMyw3IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVs
ZUJvZHlTdGFydCgpCiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQogewotICAg
IHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YS5nZXQoKTsKKyAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKICAgICBpZiAob2Zmc2V0
ID4gbV9ydWxlQm9keVJhbmdlLmVuZCkKICAgICAgICAgbV9ydWxlQm9keVJhbmdlLmVuZCA9IG9m
ZnNldDsKIH0KQEAgLTc5NzgsMTUgKzg5NDIsMTUgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9w
ZXJ0eVN0YXJ0KCkKIHsKICAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0geXl0ZXh0IC0gbV9kYXRh
LmdldCgpOworICAgIG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0
YVN0YXJ0LmdldCgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wg
aXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQogewogICAgIGlmICghbV9p
blN0eWxlUnVsZU9yRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBv
ZmZzZXQgPSB5eXRleHQgLSBtX2RhdGEuZ2V0KCk7Ci0gICAgaWYgKCp5eXRleHQgPT0gJzsnKSAv
LyBJbmNsdWRlIHNlbWljb2xvbiBpbnRvIHRoZSBwcm9wZXJ0eSB0ZXh0LgorICAgIHVuc2lnbmVk
IG9mZnNldCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOworICAgIGlmICgqbV90
b2tlblN0YXJ0ID09ICc7JykgLy8gSW5jbHVkZSBzZW1pY29sb24gaW50byB0aGUgcHJvcGVydHkg
dGV4dC4KICAgICAgICAgKytvZmZzZXQ7CiAgICAgbV9wcm9wZXJ0eVJhbmdlLmVuZCA9IG9mZnNl
dDsKICAgICBpZiAobV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ICE9IFVJTlRfTUFYICYmIG1fY3VycmVu
dFJ1bGVEYXRhKSB7CkBAIC03OTk0LDcgKzg5NTgsNyBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1By
b3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQog
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzdGFydCA9IG1fcHJvcGVydHlSYW5nZS5zdGFydDsKICAg
ICAgICAgY29uc3QgdW5zaWduZWQgZW5kID0gbV9wcm9wZXJ0eVJhbmdlLmVuZDsKICAgICAgICAg
QVNTRVJUKHN0YXJ0IDwgZW5kKTsKLSAgICAgICAgU3RyaW5nIHByb3BlcnR5U3RyaW5nID0gU3Ry
aW5nKG1fZGF0YS5nZXQoKSArIHN0YXJ0LCBlbmQgLSBzdGFydCkuc3RyaXBXaGl0ZVNwYWNlKCk7
CisgICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyhtX2RhdGFTdGFydC5nZXQo
KSArIHN0YXJ0LCBlbmQgLSBzdGFydCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmIChw
cm9wZXJ0eVN0cmluZy5lbmRzV2l0aCgiOyIsIHRydWUpKQogICAgICAgICAgICAgcHJvcGVydHlT
dHJpbmcgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KHByb3BlcnR5U3RyaW5nLmxlbmd0aCgpIC0gMSk7
CiAgICAgICAgIHNpemVfdCBjb2xvbkluZGV4ID0gcHJvcGVydHlTdHJpbmcuZmluZCgiOiIpOwpA
QCAtODIxMywzMyArOTE3Nyw0IEBAIGJvb2wgaXNWYWxpZE50aFRva2VuKGNvbnN0IENTU1BhcnNl
clN0cmluZyYgdG9rZW4pCiAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKHRva2VuLCAibiIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKHRva2VuLCAiLW4iKTsKIH0KIAotI2RlZmluZSBZWV9ERUNM
IGludCBDU1NQYXJzZXI6OmxleCgpCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLXR5cGVkZWYgaW50
IHl5X3N0YXRlX3R5cGU7Ci10eXBlZGVmIHVuc2lnbmVkIFlZX0NIQVI7Ci0vLyBUaGUgZm9sbG93
aW5nIGxpbmUgbWFrZXMgc3VyZSB3ZSB0cmVhdCBub24tTGF0aW4tMSBVbmljb2RlIGNoYXJhY3Rl
cnMgY29ycmVjdGx5LgotI2RlZmluZSBZWV9TQ19UT19VSShjKSAoYyA+IDB4ZmYgPyAweGZmIDog
YykKLSNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCi0gICAgICAgIHl5dGV4dCA9IHl5X2Jw
OyBcCi0gICAgICAgIHl5bGVuZyA9IChpbnQpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgICAgICB5
eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKLSAgICAgICAgKnl5X2NwID0gMDsgXAotICAgICAgICB5
eV9jX2J1Zl9wID0geXlfY3A7Ci0jZGVmaW5lIFlZX0JSRUFLIGJyZWFrOwotI2RlZmluZSBFQ0hP
Ci0jZGVmaW5lIFlZX1JVTEVfU0VUVVAKLSNkZWZpbmUgSU5JVElBTCAwCi0jZGVmaW5lIFlZX1NU
QVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCi0jZGVmaW5lIHl5
dGVybWluYXRlKCkgeXlUb2sgPSBFTkRfVE9LRU47IHJldHVybiB5eVRvawotI2RlZmluZSBZWV9G
QVRBTF9FUlJPUihhKQotLy8gVGhlIGZvbGxvd2luZyBsaW5lIGlzIG5lZWRlZCB0byBidWlsZCB0
aGUgdG9rZW5pemVyIHdpdGggYSBjb25kaXRpb24gc3RhY2suCi0vLyBUaGUgbWFjcm8gaXMgdXNl
ZCBpbiB0aGUgdG9rZW5pemVyIGdyYW1tYXIgd2l0aCBsaW5lcyBjb250YWluaW5nCi0vLyBCRUdJ
TihtZWRpYXF1ZXJpZXMpIGFuZCBCRUdJTihpbml0aWFsKS4geXlfc3RhcnQgYWN0cyBhcyBpbmRl
eCB0bwotLy8gdG9rZW5pemVyIHRyYW5zaXRpb24gdGFibGUsIGFuZCAnbWVkaWFxdWVyaWVzJyBh
bmQgJ2luaXRpYWwnIGFyZQotLy8gb2Zmc2V0IG11bHRpcGxpZXJzIHRoYXQgc3BlY2lmeSB3aGlj
aCB0cmFuc2l0aW9ucyBhcmUgYWN0aXZlCi0vLyBpbiB0aGUgdG9rZW5pemVyIGR1cmluZyBpbiBl
YWNoIGNvbmRpdGlvbiAodG9rZW5pemVyIHN0YXRlKS4KLSNkZWZpbmUgQkVHSU4geXlfc3RhcnQg
PSAxICsgMiAqCi0KLSNpbmNsdWRlICJ0b2tlbml6ZXIuY3BwIgotCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKaW5kZXggYTBkZjY5Ni4uNjVjOGQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAt
MzE3LDEyICszMTcsMjYgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRSdWxlQm9keU1hcmtzKCkg
eyBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gMDsgfQogICAg
IHZvaWQgcmVzZXRQcm9wZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3By
b3BlcnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0KICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7
Ci0gICAgaW50IHRva2VuKCkgeyByZXR1cm4geXlUb2s7IH0KLSAgICBVQ2hhciogdGV4dChpbnQq
IGxlbmd0aCk7Ci0gICAgdm9pZCBjb3VudExpbmVzKCk7Ci0gICAgaW50IGxleCgpOworICAgIGlu
dCB0b2tlbigpIHsgcmV0dXJuIG1fdG9rZW47IH0KIAogcHJpdmF0ZToKKyAgICBpbmxpbmUgYm9v
bCBpc0lkZW50aWZpZXJTdGFydCgpOworCisgICAgc3RhdGljIGlubGluZSBVQ2hhciogY2hlY2tB
bmRTa2lwU3RyaW5nKFVDaGFyKiwgVUNoYXIpOworCisgICAgdm9pZCBwYXJzZUVzY2FwZShVQ2hh
ciomKTsKKyAgICBpbmxpbmUgdm9pZCBwYXJzZUlkZW50aWZpZXIoVUNoYXIqJiwgYm9vbCYpOwor
ICAgIGlubGluZSB2b2lkIHBhcnNlU3RyaW5nKFVDaGFyKiYsIFVDaGFyKTsKKyAgICBpbmxpbmUg
dm9pZCBwYXJzZVVSSShVQ2hhciomLCBVQ2hhciomKTsKKyAgICBpbmxpbmUgYm9vbCBwYXJzZVVu
aWNvZGVSYW5nZSgpOworICAgIGJvb2wgcGFyc2VOdGhDaGlsZCgpOworICAgIGJvb2wgcGFyc2VO
dGhDaGlsZEV4dHJhKCk7CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0RnVuY3Rpb25UeXBlVG9rZW4o
aW50KTsKKyAgICBpbmxpbmUgdm9pZCBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW4oaW50KTsKKyAgICBp
bmxpbmUgdm9pZCBkZXRlY3ROdW1iZXJUb2tlbihVQ2hhciosIGludCk7CisgICAgaW5saW5lIHZv
aWQgZGV0ZWN0RGFzaFRva2VuKGludCk7CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0QXRUb2tlbihp
bnQsIGJvb2wpOworCiAgICAgdm9pZCBzZXRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKICAg
ICB2b2lkIGVuc3VyZUNTU1ZhbHVlUG9vbCgpOwogCkBAIC0zNTgsMTUgKzM3MiwxNyBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYpOwogCi0gICAgT3duQXJy
YXlQdHI8VUNoYXI+IG1fZGF0YTsKLSAgICBVQ2hhciogeXl0ZXh0OwotICAgIFVDaGFyKiB5eV9j
X2J1Zl9wOwotICAgIFVDaGFyIHl5X2hvbGRfY2hhcjsKLSAgICBpbnQgeXlfbGFzdF9hY2NlcHRp
bmdfc3RhdGU7Ci0gICAgVUNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgaW50IHl5
bGVuZzsKLSAgICBpbnQgeXlUb2s7Ci0gICAgaW50IHl5X3N0YXJ0OworICAgIGVudW0gUGFyc2lu
Z01vZGUgeworICAgICAgICBOb3JtYWxNb2RlLAorICAgICAgICBNZWRpYVF1ZXJ5TW9kZSwKKyAg
ICAgICAgTnRoQ2hpbGRNb2RlCisgICAgfTsKKworICAgIFBhcnNpbmdNb2RlIG1fcGFyc2luZ01v
ZGU7CisgICAgT3duQXJyYXlQdHI8VUNoYXI+IG1fZGF0YVN0YXJ0OworICAgIFVDaGFyKiBtX2N1
cnJlbnRDaGFyYWN0ZXI7CisgICAgVUNoYXIqIG1fdG9rZW5TdGFydDsKKyAgICBpbnQgbV90b2tl
bjsKICAgICBpbnQgbV9saW5lTnVtYmVyOwogICAgIGludCBtX2xhc3RTZWxlY3RvckxpbmVOdW1i
ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzI4ZGJjYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvdG9rZW5pemVy
LmZsZXgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotJW9wdGlvbiBjYXNlLWluc2Vu
c2l0aXZlCi0lb3B0aW9uIG5veXl3cmFwCi0lb3B0aW9uIDhiaXQKLSVvcHRpb24gc3RhY2sKLSVz
IG1lZGlhcXVlcnkKLSVzIGZvcmtleXdvcmQKLSVzIG50aGNoaWxkCi0KLWggICAgICAgICAgICAg
ICBbMC05YS1mQS1GXQotbm9uYXNjaWkgICAgICAgIFtcMjAwLVwzNzddCi11bmljb2RlICAgICAg
ICAgXFx7aH17MSw2fVsgXHRcclxuXGZdPwotZXNjYXBlICAgICAgICAgIHt1bmljb2RlfXxcXFsg
LX5cMjAwLVwzNzddCi1ubXN0YXJ0ICAgICAgICAgW19hLXpBLVpdfHtub25hc2NpaX18e2VzY2Fw
ZX0KLW5tY2hhciAgICAgICAgICBbX2EtekEtWjAtOS1dfHtub25hc2NpaX18e2VzY2FwZX0KLXN0
cmluZzEgICAgICAgICBcIihbXlxuXHJcZlxcIl18XFx7bmx9fHtlc2NhcGV9KSpcIgotc3RyaW5n
MiAgICAgICAgIFwnKFteXG5cclxmXFwnXXxcXHtubH18e2VzY2FwZX0pKlwnCi0KLWlkZW50ICAg
ICAgICAgICAtP3tubXN0YXJ0fXtubWNoYXJ9KgotbnVtICAgICAgICAgICAgIFswLTldK3xbMC05
XSoiLiJbMC05XSsKLWludG51bSAgICAgICAgICBbMC05XSsKLXN0cmluZyAgICAgICAgICB7c3Ry
aW5nMX18e3N0cmluZzJ9Ci11cmwgICAgICAgICAgICAgKFshIyQlJiotfl18e25vbmFzY2lpfXx7
ZXNjYXBlfSkqCi13ICAgICAgICAgICAgICAgWyBcdFxyXG5cZl0qCi1ubCAgICAgICAgICAgICAg
XG58XHJcbnxccnxcZgotcmFuZ2UgICAgICAgICAgIFw/ezEsNn18e2h9KFw/ezAsNX18e2h9KFw/
ezAsNH18e2h9KFw/ezAsM318e2h9KFw/ezAsMn18e2h9KFw/P3x7aH0pKSkpKQotbnRoICAgICAg
ICAgICAgIFtcKy1dP3tpbnRudW19Km4oW1x0XHJcbiBdKltcKy1dW1x0XHJcbiBdKntpbnRudW19
KT8KLW50aGZ1bmMgICAgICAgICAibnRoLSIoImNoaWxkInwib2YtdHlwZSJ8Imxhc3QtY2hpbGQi
fCJsYXN0LW9mLXR5cGUiKQotCi0lJQotCi1cL1wqW14qXSpcKisoW14vKl1bXipdKlwqKykqXC8g
e2NvdW50TGluZXMoKTsgLyogaWdub3JlIGNvbW1lbnRzICovIH0KLQotWyBcdFxyXG5cZl0rICAg
ICAgICAgICAge2NvdW50TGluZXMoKTsgeXlUb2sgPSBXSElURVNQQUNFOyByZXR1cm4geXlUb2s7
fQotCi0iPCEtLSIgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBTR01MX0NEOyByZXR1cm4geXlU
b2s7fQotIi0tPiIgICAgICAgICAgICAgICAgICAge3l5VG9rID0gU0dNTF9DRDsgcmV0dXJuIHl5
VG9rO30KLSJ+PSIgICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IElOQ0xVREVTOyByZXR1cm4g
eXlUb2s7fQotInw9IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0gREFTSE1BVENIOyByZXR1
cm4geXlUb2s7fQotIl49IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0gQkVHSU5TV0lUSDsg
cmV0dXJuIHl5VG9rO30KLSIkPSIgICAgICAgICAgICAgICAgICAgIHt5eVRvayA9IEVORFNXSVRI
OyByZXR1cm4geXlUb2s7fQotIio9IiAgICAgICAgICAgICAgICAgICAge3l5VG9rID0gQ09OVEFJ
TlM7IHJldHVybiB5eVRvazt9Ci08bWVkaWFxdWVyeT4ibm90IiAgICAgICB7eXlUb2sgPSBNRURJ
QV9OT1Q7IHJldHVybiB5eVRvazt9Ci08bWVkaWFxdWVyeT4ib25seSIgICAgICB7eXlUb2sgPSBN
RURJQV9PTkxZOyByZXR1cm4geXlUb2s7fQotPG1lZGlhcXVlcnk+ImFuZCIgICAgICAge3l5VG9r
ID0gTUVESUFfQU5EOyByZXR1cm4geXlUb2s7fQotCi17c3RyaW5nfSAgICAgICAgICAgICAgICB7
eXlUb2sgPSBTVFJJTkc7IHJldHVybiB5eVRvazt9Ci17aWRlbnR9ICAgICAgICAgICAgICAgICB7
eXlUb2sgPSBJREVOVDsgcmV0dXJuIHl5VG9rO30KLTxudGhjaGlsZD57bnRofSAgICAgICAgIHt5
eVRvayA9IE5USDsgcmV0dXJuIHl5VG9rO30KLTxudGhjaGlsZD4iKSIgICAgICAgICAgIHtCRUdJ
TihJTklUSUFMKTsgeXlUb2sgPSAqeXl0ZXh0OyByZXR1cm4geXlUb2s7fQotCi0iIyJ7aH0rICAg
ICAgICAgICAgICAgICB7eXlUb2sgPSBIRVg7IHJldHVybiB5eVRvazt9Ci0iIyJ7aWRlbnR9ICAg
ICAgICAgICAgICB7eXlUb2sgPSBJRFNFTDsgcmV0dXJuIHl5VG9rO30KLQotIkBpbXBvcnQiICAg
ICAgICAgICAgICAge0JFR0lOKG1lZGlhcXVlcnkpOyB5eVRvayA9IElNUE9SVF9TWU07IHJldHVy
biB5eVRvazt9Ci0iQHBhZ2UiICAgICAgICAgICAgICAgICB7eXlUb2sgPSBQQUdFX1NZTTsgcmV0
dXJuIHl5VG9rO30KLSJAdG9wLWxlZnQtY29ybmVyIiAgICAgIHt5eVRvayA9IFRPUExFRlRDT1JO
RVJfU1lNOyByZXR1cm4geXlUb2s7fQotIkB0b3AtbGVmdCIgICAgICAgICAgICAge3l5VG9rID0g
VE9QTEVGVF9TWU07IHJldHVybiB5eVRvazt9Ci0iQHRvcC1jZW50ZXIiICAgICAgICAgICB7eXlU
b2sgPSBUT1BDRU5URVJfU1lNOyByZXR1cm4geXlUb2s7fQotIkB0b3AtcmlnaHQiICAgICAgICAg
ICAge3l5VG9rID0gVE9QUklHSFRfU1lNOyByZXR1cm4geXlUb2s7fQotIkB0b3AtcmlnaHQtY29y
bmVyIiAgICAge3l5VG9rID0gVE9QUklHSFRDT1JORVJfU1lNOyByZXR1cm4geXlUb2s7fQotIkBi
b3R0b20tbGVmdC1jb3JuZXIiICAge3l5VG9rID0gQk9UVE9NTEVGVENPUk5FUl9TWU07IHJldHVy
biB5eVRvazt9Ci0iQGJvdHRvbS1sZWZ0IiAgICAgICAgICB7eXlUb2sgPSBCT1RUT01MRUZUX1NZ
TTsgcmV0dXJuIHl5VG9rO30KLSJAYm90dG9tLWNlbnRlciIgICAgICAgIHt5eVRvayA9IEJPVFRP
TUNFTlRFUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQGJvdHRvbS1yaWdodCIgICAgICAgICB7eXlU
b2sgPSBCT1RUT01SSUdIVF9TWU07IHJldHVybiB5eVRvazt9Ci0iQGJvdHRvbS1yaWdodC1jb3Ju
ZXIiICB7eXlUb2sgPSBCT1RUT01SSUdIVENPUk5FUl9TWU07IHJldHVybiB5eVRvazt9Ci0iQGxl
ZnQtdG9wIiAgICAgICAgICAgICB7eXlUb2sgPSBMRUZUVE9QX1NZTTsgcmV0dXJuIHl5VG9rO30K
LSJAbGVmdC1taWRkbGUiICAgICAgICAgIHt5eVRvayA9IExFRlRNSURETEVfU1lNOyByZXR1cm4g
eXlUb2s7fQotIkBsZWZ0LWJvdHRvbSIgICAgICAgICAge3l5VG9rID0gTEVGVEJPVFRPTV9TWU07
IHJldHVybiB5eVRvazt9Ci0iQHJpZ2h0LXRvcCIgICAgICAgICAgICB7eXlUb2sgPSBSSUdIVFRP
UF9TWU07IHJldHVybiB5eVRvazt9Ci0iQHJpZ2h0LW1pZGRsZSIgICAgICAgICB7eXlUb2sgPSBS
SUdIVE1JRERMRV9TWU07IHJldHVybiB5eVRvazt9Ci0iQHJpZ2h0LWJvdHRvbSIgICAgICAgICB7
eXlUb2sgPSBSSUdIVEJPVFRPTV9TWU07IHJldHVybiB5eVRvazt9Ci0iQG1lZGlhIiAgICAgICAg
ICAgICAgICB7QkVHSU4obWVkaWFxdWVyeSk7IHl5VG9rID0gTUVESUFfU1lNOyByZXR1cm4geXlU
b2s7fQotIkBmb250LWZhY2UiICAgICAgICAgICAge3l5VG9rID0gRk9OVF9GQUNFX1NZTTsgcmV0
dXJuIHl5VG9rO30KLSJAY2hhcnNldCIgICAgICAgICAgICAgIHt5eVRvayA9IENIQVJTRVRfU1lN
OyByZXR1cm4geXlUb2s7fQotIkBuYW1lc3BhY2UiICAgICAgICAgICAge3l5VG9rID0gTkFNRVNQ
QUNFX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQtcnVsZSIgICAgICAgICB7eXlUb2sg
PSBXRUJLSVRfUlVMRV9TWU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LWRlY2xzIiAgICAg
ICAge3l5VG9rID0gV0VCS0lUX0RFQ0xTX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJraXQt
dmFsdWUiICAgICAgICB7eXlUb2sgPSBXRUJLSVRfVkFMVUVfU1lNOyByZXR1cm4geXlUb2s7IH0K
LSJALXdlYmtpdC1tZWRpYXF1ZXJ5IiAgIHtCRUdJTihtZWRpYXF1ZXJ5KTsgeXlUb2sgPSBXRUJL
SVRfTUVESUFRVUVSWV9TWU07IHJldHVybiB5eVRvazsgfQotIkAtd2Via2l0LXNlbGVjdG9yIiAg
ICAge3l5VG9rID0gV0VCS0lUX1NFTEVDVE9SX1NZTTsgcmV0dXJuIHl5VG9rOyB9Ci0iQC13ZWJr
aXQta2V5ZnJhbWVzIiAgICB7eXlUb2sgPSBXRUJLSVRfS0VZRlJBTUVTX1NZTTsgcmV0dXJuIHl5
VG9rOyB9Ci0iQC13ZWJraXQta2V5ZnJhbWUtcnVsZSIge3l5VG9rID0gV0VCS0lUX0tFWUZSQU1F
X1JVTEVfU1lNOyByZXR1cm4geXlUb2s7IH0KLSJALXdlYmtpdC1yZWdpb24iICAgICAgIHt5eVRv
ayA9IFdFQktJVF9SRUdJT05fUlVMRV9TWU07IHJldHVybiB5eVRvazt9Ci0KLSJAIntpZGVudH0g
ICAgICAgICAgICAgIHt5eVRvayA9IEFUS0VZV09SRDsgcmV0dXJuIHl5VG9rOyB9Ci0KLSIhInt3
fSJpbXBvcnRhbnQiICAgICAgIHt5eVRvayA9IElNUE9SVEFOVF9TWU07IHJldHVybiB5eVRvazt9
Ci0KLXtudW19ZW0gICAgICAgICAgICAgICAgIHt5eVRvayA9IEVNUzsgcmV0dXJuIHl5VG9rO30K
LXtudW19cmVtICAgICAgICAgICAgICAgIHt5eVRvayA9IFJFTVM7IHJldHVybiB5eVRvazt9Ci17
bnVtfV9fcWVtICAgICAgICAgICAgICB7eXlUb2sgPSBRRU1TOyByZXR1cm4geXlUb2s7fSAvKiBx
dWlya3kgZW1zICovCi17bnVtfWV4ICAgICAgICAgICAgICAgICB7eXlUb2sgPSBFWFM7IHJldHVy
biB5eVRvazt9Ci17bnVtfXB4ICAgICAgICAgICAgICAgICB7eXlUb2sgPSBQWFM7IHJldHVybiB5
eVRvazt9Ci17bnVtfWNtICAgICAgICAgICAgICAgICB7eXlUb2sgPSBDTVM7IHJldHVybiB5eVRv
azt9Ci17bnVtfW1tICAgICAgICAgICAgICAgICB7eXlUb2sgPSBNTVM7IHJldHVybiB5eVRvazt9
Ci17bnVtfWluICAgICAgICAgICAgICAgICB7eXlUb2sgPSBJTlM7IHJldHVybiB5eVRvazt9Ci17
bnVtfXB0ICAgICAgICAgICAgICAgICB7eXlUb2sgPSBQVFM7IHJldHVybiB5eVRvazt9Ci17bnVt
fXBjICAgICAgICAgICAgICAgICB7eXlUb2sgPSBQQ1M7IHJldHVybiB5eVRvazt9Ci17bnVtfWRl
ZyAgICAgICAgICAgICAgICB7eXlUb2sgPSBERUdTOyByZXR1cm4geXlUb2s7fQote251bX1yYWQg
ICAgICAgICAgICAgICAge3l5VG9rID0gUkFEUzsgcmV0dXJuIHl5VG9rO30KLXtudW19Z3JhZCAg
ICAgICAgICAgICAgIHt5eVRvayA9IEdSQURTOyByZXR1cm4geXlUb2s7fQote251bX10dXJuICAg
ICAgICAgICAgICAge3l5VG9rID0gVFVSTlM7IHJldHVybiB5eVRvazt9Ci17bnVtfW1zICAgICAg
ICAgICAgICAgICB7eXlUb2sgPSBNU0VDUzsgcmV0dXJuIHl5VG9rO30KLXtudW19cyAgICAgICAg
ICAgICAgICAgIHt5eVRvayA9IFNFQ1M7IHJldHVybiB5eVRvazt9Ci17bnVtfUh6ICAgICAgICAg
ICAgICAgICB7eXlUb2sgPSBIRVJUWjsgcmV0dXJuIHl5VG9rO30KLXtudW19a0h6ICAgICAgICAg
ICAgICAgIHt5eVRvayA9IEtIRVJUWjsgcmV0dXJuIHl5VG9rO30KLXtudW19e2lkZW50fSAgICAg
ICAgICAgIHt5eVRvayA9IERJTUVOOyByZXR1cm4geXlUb2s7fQote251bX17aWRlbnR9XCsgICAg
ICAgICAge3l5VG9rID0gSU5WQUxJRERJTUVOOyByZXR1cm4geXlUb2s7fQote251bX0lKyAgICAg
ICAgICAgICAgICAge3l5VG9rID0gUEVSQ0VOVEFHRTsgcmV0dXJuIHl5VG9rO30KLXtpbnRudW19
ICAgICAgICAgICAgICAgIHt5eVRvayA9IElOVEVHRVI7IHJldHVybiB5eVRvazt9Ci17bnVtfSAg
ICAgICAgICAgICAgICAgICB7eXlUb2sgPSBGTE9BVFRPS0VOOyByZXR1cm4geXlUb2s7fQotCi0i
LXdlYmtpdC1hbnkoIiAgICAgICAgICB7eXlUb2sgPSBBTllGVU5DVElPTjsgcmV0dXJuIHl5VG9r
O30KLSJub3QoIiAgICAgICAgICAgICAgICAgIHt5eVRvayA9IE5PVEZVTkNUSU9OOyByZXR1cm4g
eXlUb2s7fQotInVybCgie3d9e3N0cmluZ317d30iKSIge3l5VG9rID0gVVJJOyByZXR1cm4geXlU
b2s7fQotInVybCgie3d9e3VybH17d30iKSIgICAge3l5VG9rID0gVVJJOyByZXR1cm4geXlUb2s7
fQotIi13ZWJraXQtY2FsYygiICAgICAgICAge3l5VG9rID0gQ0FMQ0ZVTkNUSU9OOyByZXR1cm4g
eXlUb2s7fQotIi13ZWJraXQtbWluKCIgICAgICAgICAge3l5VG9rID0gTUlORlVOQ1RJT047IHJl
dHVybiB5eVRvazt9Ci0iLXdlYmtpdC1tYXgoIiAgICAgICAgICB7eXlUb2sgPSBNQVhGVU5DVElP
TjsgcmV0dXJuIHl5VG9rO30KLXtudGhmdW5jfSIoIiAgICAgICAgICAgIHtCRUdJTihudGhjaGls
ZCk7IHl5VG9rID0gRlVOQ1RJT047IHJldHVybiB5eVRvazt9Ci17aWRlbnR9IigiICAgICAgICAg
ICAgICB7eXlUb2sgPSBGVU5DVElPTjsgcmV0dXJuIHl5VG9rO30KLQotVVwre3JhbmdlfSAgICAg
ICAgICAgICAge3l5VG9rID0gVU5JQ09ERVJBTkdFOyByZXR1cm4geXlUb2s7fQotVVwre2h9ezEs
Nn0te2h9ezEsNn0gICAge3l5VG9rID0gVU5JQ09ERVJBTkdFOyByZXR1cm4geXlUb2s7fQotCi08
bWVkaWFxdWVyeT4ieyIgICAgICAgICB8Ci08bWVkaWFxdWVyeT4iOyIgICAgICAgICB7QkVHSU4o
SU5JVElBTCk7IHl5VG9rID0gKnl5dGV4dDsgcmV0dXJuIHl5VG9rOyB9Ci0uICAgICAgICAgICAg
ICAgICAgICAgICB7eXlUb2sgPSAqeXl0ZXh0OyByZXR1cm4geXlUb2s7fQotCi0lJQpkaWZmIC0t
Z2l0IGEvd3NjcmlwdCBiL3dzY3JpcHQKaW5kZXggYTk4OTliNi4uYWRmZTYzNyAxMDA2NDQKLS0t
IGEvd3NjcmlwdAorKysgYi93c2NyaXB0CkBAIC0yNzgsNyArMjc4LDYgQEAgZGVmIGJ1aWxkKGJs
ZCk6CiAgICAgICAgICMgaW50ZXJtZWRpYXRlIHNvdXJjZXMKICAgICAgICAgZXhjbHVkZXMuYXBw
ZW5kKCdEb2NUeXBlU3RyaW5ncy5jcHAnKQogICAgICAgICBleGNsdWRlcy5hcHBlbmQoJ0hUTUxF
bnRpdHlOYW1lcy5jcHAnKQotICAgICAgICBleGNsdWRlcy5hcHBlbmQoJ3Rva2VuaXplci5jcHAn
KQogCiAgICAgICAgICMgUXQgc3BlY2lmaWMgZmlsZSBpbiBjb21tb24gc291cmNlcwogICAgICAg
ICBleGNsdWRlcy5hcHBlbmQoJ0NvbnRleHRTaGFkb3cuY3BwJykKLS0gCjEuNy4yLjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>124528</attachid>
            <date>2012-01-30 05:12:06 -0800</date>
            <delta_ts>2012-01-30 05:12:06 -0800</delta_ts>
            <desc>parsing test</desc>
            <filename>style-test.tgz</filename>
            <type>application/octet-stream</type>
            <size>59823</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
      

    </bug>

</bugzilla>