<?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>100566</bug_id>
          
          <creation_ts>2012-10-26 15:17:44 -0700</creation_ts>
          <short_desc>JSC: a JSC printf (support for %J+s and %b)</short_desc>
          <delta_ts>2012-10-31 18:01:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>752484</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-26 15:17:44 -0700</bug_when>
    <thetext>Ever want to call printf() on that WTF::String?  Well now you can with VMInspector::printf(). Here&apos;s the skinny:

Added VMInspector::printf(), fprintf(), sprintf(), and snprintf().
        - %b prints ints as boolean TRUE (non-zero) or FALSE (zero).
        - %Js prints a WTF::String* like a %s prints a char*.
          Also works for 16bit WTF::Strings (prints wchar_t* using %S).
        - %J+s prints the WTF::String in verbose mode.
          The + means verbose.

Of course, they also work on any % formats that the standard ...printf() functions work on as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752492</commentid>
    <comment_count>1</comment_count>
      <attachid>171028</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-26 15:29:06 -0700</bug_when>
    <thetext>Created attachment 171028
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754506</commentid>
    <comment_count>2</comment_count>
      <attachid>171028</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-30 10:48:15 -0700</bug_when>
    <thetext>Comment on attachment 171028
the patch.

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

What about tests?

Overall it looks good, but I&apos;d like to see these comments addressed.

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        - %J+s prints the WTF::String in verbose mode.
&gt; +          The + means verbose.

Consider switching the order of these two lines.  &apos;+&apos; is a modifier and %J+s is an example of it&apos;s use.

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        (JSC):

The prepare-ChangeLog script put this in but messed up what it is for.  Change it to the right item or remove.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:112
&gt; +

Remove, only need one blank line between declarations.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:139
&gt; +

Remove this empty line.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:142
&gt; +

Remove.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:154
&gt; +    char buffer[128];

Seems like the buffer might be too small.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:227
&gt; +            // verbose mode prints: WTF::String &quot;&lt;your string&gt;&quot;

This comment isn&apos;t needed here since you have the same comment above printWTFString.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:237
&gt; +            p--;

This is not good enough.  Consider the handling of the unsupported %J+z.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:251
&gt; +        char* argFormat = buffer;

Do you need argFormat or could you just use buffer?  Using buffer could eliminate future confusion that buffer is available for use between here and the end of the while loop.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:254
&gt; +        if (UNLIKELY(curr &gt;= end))
&gt; +            goto formatTooLong;

Don&apos;t think the overflow check is needed here, since curr was just set to buffer.

Also, you could create a buffer overflow macro instead of putting the if ... goto everywhere.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:263
&gt; +        if (c == &apos;l&apos; || c == &apos;h&apos;) {

What about hh, ll, L and the more obscure j, t and z length modifiers?

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:275
&gt; +            ASSERT(curr[-1] == &apos;\0&apos;);

Seems a little unnecessary given the assignment and if.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:295
&gt; +    p -= 5;

Why subtract 5?  Is this to move before the current format?  Why not just use format for the error message?

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:302
&gt; +    // We&apos;ve got an error. Can&apos;t do any more work. Print and error message if

Should be &quot;an&quot; instead of &quot;and&quot;.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:357
&gt; +            const LChar* chars = str-&gt;characters8();
&gt; +            printArg(&quot;%s&quot;, reinterpret_cast&lt;const char*&gt;(chars));

Don&apos;t think you need the temp.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:360
&gt; +            const UChar* chars = str-&gt;characters16();
&gt; +            printArg(&quot;%S&quot;, reinterpret_cast&lt;const wchar_t*&gt;(chars));

Ditto.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:445
&gt; +        int count = ::vsnprintf(m_buffer, m_size, format, args);

I don&apos;t think it matters too much, but count doesn&apos;t include the terminating &apos;\0&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754923</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-30 20:57:28 -0700</bug_when>
    <thetext>Responses below.  New patch to follow shortly.

(In reply to comment #2)
&gt; (From update of attachment 171028 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171028&amp;action=review
&gt; 
&gt; What about tests?

Tests added to Tools/TestWebKitAPI/Tests/JavaScriptCore/VMInspector.cpp.

&gt; Overall it looks good, but I&apos;d like to see these comments addressed.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:13
&gt; &gt; +        - %J+s prints the WTF::String in verbose mode.
&gt; &gt; +          The + means verbose.
&gt; 
&gt; Consider switching the order of these two lines.  &apos;+&apos; is a modifier and %J+s is an example of it&apos;s use.

Done.

&gt; &gt; Source/JavaScriptCore/ChangeLog:16
&gt; &gt; +        (JSC):
&gt; 
&gt; The prepare-ChangeLog script put this in but messed up what it is for.  Change it to the right item or remove.

Deleted.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:112
&gt; &gt; +
&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:142
&gt; &gt; +
&gt; 
&gt; Remove, only need one blank line between declarations.

Per our offline discussion, we&apos;re leaving these as is for better readability since the coding-style doesn&apos;t say anything about blank lines.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:139
&gt; &gt; +
&gt; 
&gt; Remove this empty line.

Done.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:154
&gt; &gt; +    char buffer[128];
&gt; 
&gt; Seems like the buffer might be too small.

This buffer is only for:
1. To temporarily hold a copy of the normal chars (not needing formatting)  to be passed to printArg() and printed.
 
    The incoming format string may contain a string of normal chars much longer than 128, but we handle this by breaking them out to 128 chars fragments and printing each fragment before re-using the buffer to load up the next fragment.

2. To hold a single &quot;%...&quot; format to be passed to printArg() to process a single va_arg.

    We also verify in this case that we never copy a format string greater than 128 chars.  I&apos;m assuming that a 128 char format string is meaningless and if the user specifies such a string, then we&apos;ll treat it as an error.

Given this usage, I felt that 128 chars would be a good buffer size without using too much stack space.  BTW, I bumped the buffer size up to 129 chars so that we can have 128 chars not including the null terminator.   I&apos;ve also added the above usage details as a comment in the code.

Are you seeing a flaw somewhere in my reasoning?

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:227
&gt; &gt; +            // verbose mode prints: WTF::String &quot;&lt;your string&gt;&quot;
&gt; 
&gt; This comment isn&apos;t needed here since you have the same comment above printWTFString.

Deleted.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:237
&gt; &gt; +            p--;
&gt; 
&gt; This is not good enough.  Consider the handling of the unsupported %J+z.

Fixed.  I now cache the startOfFormatSpecifier at the beginning, and simply reset to that if we failed to parse the format.  This also takes care of future formats that can be more complex or of variable length.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:251
&gt; &gt; +        char* argFormat = buffer;
&gt; 
&gt; Do you need argFormat or could you just use buffer?  Using buffer could eliminate future confusion that buffer is available for use between here and the end of the while loop.

I wanted to use argFormat to improve readability (and conveyance of the intent of the code) and I had thought of the issues you brought up.  I&apos;ve changed my mind now.  I use buffer everywhere, and added comments to indicate that buffer contains an argFormat instead.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:254
&gt; &gt; +        if (UNLIKELY(curr &gt;= end))
&gt; &gt; +            goto formatTooLong;
&gt; 
&gt; Don&apos;t think the overflow check is needed here, since curr was just set to buffer.

This was needed, when I had argFormat separate from buffer, in case someone mess up argFormat in the future.  Since I got rid of argFormat, this is no longer needed, and is deleted.

&gt; Also, you could create a buffer overflow macro instead of putting the if ... goto everywhere.

Done.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:263
&gt; &gt; +        if (c == &apos;l&apos; || c == &apos;h&apos;) {
&gt; 
&gt; What about hh, ll, L and the more obscure j, t and z length modifiers?

I was going to say &quot;tough luck&quot; and not support every variation of the standard formats.  But on second thought, I decided to make at least a effort to make a good faith effort to make it more compatible (to the extent possible without rat-holing in handling exotic formats).  The code has been updated to support more formats variations.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:275
&gt; &gt; +            ASSERT(curr[-1] == &apos;\0&apos;);
&gt; 
&gt; Seems a little unnecessary given the assignment and if.

Agreed. I was being a little too paranoid when the code was still in flux. It&apos;s unnecessary now and is deleted.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:295
&gt; &gt; +    p -= 5;
&gt; 
&gt; Why subtract 5?  Is this to move before the current format?  Why not just use format for the error message?

This was a little heuristic so that we get some context on the current format that we&apos;re attempting to parse.  Otherwise, the error message can print pass the % and be meaningless.  But now that I cache startOfFormatSpecifier, I can set p to that and be guaranteed a meaningful error message.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:302
&gt; &gt; +    // We&apos;ve got an error. Can&apos;t do any more work. Print and error message if
&gt; 
&gt; Should be &quot;an&quot; instead of &quot;and&quot;.

Fixed.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:357
&gt; &gt; +            const LChar* chars = str-&gt;characters8();
&gt; &gt; +            printArg(&quot;%s&quot;, reinterpret_cast&lt;const char*&gt;(chars));
&gt; 
&gt; Don&apos;t think you need the temp.

Not needed.  Just wanted it for readability and in case I want to inspect chars in gdb.  Since this doesn&apos;t bloat the code too much, I&apos;d rather keep it.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:360
&gt; &gt; +            const UChar* chars = str-&gt;characters16();
&gt; &gt; +            printArg(&quot;%S&quot;, reinterpret_cast&lt;const wchar_t*&gt;(chars));
&gt; 
&gt; Ditto.

Ditto.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:445
&gt; &gt; +        int count = ::vsnprintf(m_buffer, m_size, format, args);
&gt; 
&gt; I don&apos;t think it matters too much, but count doesn&apos;t include the terminating &apos;\0&apos;.

Yes, I am aware of that and am actually counting on it here (in StringNFormatPrinter::printArg()):

        // Adjust the buffer to what&apos;s left if appropriate:
        if (success) {
            m_buffer += count;
            m_size -= count;
        }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754924</commentid>
    <comment_count>4</comment_count>
      <attachid>171572</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-30 20:59:02 -0700</bug_when>
    <thetext>Created attachment 171572
Updated patch with more standard format compatibility, and tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754926</commentid>
    <comment_count>5</comment_count>
      <attachid>171572</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-30 21:02:12 -0700</bug_when>
    <thetext>Comment on attachment 171572
Updated patch with more standard format compatibility, and tests.

Attachment 171572 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14687020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754930</commentid>
    <comment_count>6</comment_count>
      <attachid>171573</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-30 21:13:14 -0700</bug_when>
    <thetext>Created attachment 171573
Fixed the build breakage.  Ready for review now ... fingers crossed. =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755751</commentid>
    <comment_count>7</comment_count>
      <attachid>171573</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-31 17:36:04 -0700</bug_when>
    <thetext>Comment on attachment 171573
Fixed the build breakage.  Ready for review now ... fingers crossed. =)

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

r=me  Consider the comments I made.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:194
&gt; +            bool success = printArg(&quot;%s&quot;, buffer);

Since we know that buffer doesn&apos;t have any formatting, can&apos;t we just call printArg(buffer)? If so, it seems like it would be more efficient.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:281
&gt; +        if (c == &apos;0&apos; || c == &apos;-&apos; || c == &apos; &apos; || c == &apos;+&apos; || c == &apos;\&apos;&apos;) {

What about &apos;#&apos; for %o, %x and the floating point formats.

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:311
&gt; +        if (c == &apos;l&apos; || c == &apos;h&apos; || c == &apos;j&apos; || c == &apos;t&apos; || c == &apos;z&apos;) {

What about L for long double?

&gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:388
&gt; +        if (*cp == &apos;\n&apos;)

Does this work for windows?  I thought Windows terminated lines with CR,LF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755763</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-31 18:01:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 171573 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171573&amp;action=review
&gt; 
&gt; r=me  Consider the comments I made.
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:194
&gt; &gt; +            bool success = printArg(&quot;%s&quot;, buffer);
&gt; 
&gt; Since we know that buffer doesn&apos;t have any formatting, can&apos;t we just call printArg(buffer)? If so, it seems like it would be more efficient.

Can&apos;t do this.  The string to be printed may contain strings that look like escape characters but are not.  For example, the string may have a &quot;\n&quot; which should be printed as a &apos;\&apos; followed by a &apos;n&apos;, but if I pass it as a format, it will be printed as a newline.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:281
&gt; &gt; +        if (c == &apos;0&apos; || c == &apos;-&apos; || c == &apos; &apos; || c == &apos;+&apos; || c == &apos;\&apos;&apos;) {
&gt; 
&gt; What about &apos;#&apos; for %o, %x and the floating point formats.

Added.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:311
&gt; &gt; +        if (c == &apos;l&apos; || c == &apos;h&apos; || c == &apos;j&apos; || c == &apos;t&apos; || c == &apos;z&apos;) {
&gt; 
&gt; What about L for long double?

Added.

&gt; &gt; Source/JavaScriptCore/interpreter/VMInspector.cpp:388
&gt; &gt; +        if (*cp == &apos;\n&apos;)
&gt; 
&gt; Does this work for windows?  I thought Windows terminated lines with CR,LF.

Changed to (*cp == &apos;\n&apos; || *cp == &apos;\r&apos;).

All changes landed in r133103: &lt;http://trac.webkit.org/changeset/133103&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171028</attachid>
            <date>2012-10-26 15:29:06 -0700</date>
            <delta_ts>2012-10-30 20:59:02 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-100566.patch</filename>
            <type>text/plain</type>
            <size>15805</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyNzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTEwLTI2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
IEpTQyBwcmludGYgKHN1cHBvcnQgZm9yICVKK3MgYW5kICViKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDU2Ni4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBWTUluc3BlY3Rvcjo6cHJpbnRm
KCksIGZwcmludGYoKSwgc3ByaW50ZigpLCBhbmQgc25wcmludGYoKS4KKyAgICAgICAgLSAlYiBw
cmludHMgaW50cyBhcyBib29sZWFuIFRSVUUgKG5vbi16ZXJvKSBvciBGQUxTRSAoemVybykuCisg
ICAgICAgIC0gJUpzIHByaW50cyBhIFdURjo6U3RyaW5nKiBsaWtlIGEgJXMgcHJpbnRzIGEgY2hh
ciouCisgICAgICAgICAgQWxzbyB3b3JrcyBmb3IgMTZiaXQgV1RGOjpTdHJpbmdzIChwcmludHMg
d2NoYXJfdCogdXNpbmcgJVMpLgorICAgICAgICAtICVKK3MgcHJpbnRzIHRoZSBXVEY6OlN0cmlu
ZyBpbiB2ZXJib3NlIG1vZGUuCisgICAgICAgICAgVGhlICsgbWVhbnMgdmVyYm9zZS4KKworICAg
ICAgICAqIGludGVycHJldGVyL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChGb3JtYXRQcmludGVyKToKKyAgICAgICAgKEpTQzo6Rm9ybWF0UHJpbnRlcjo6fkZvcm1h
dFByaW50ZXIpOgorICAgICAgICAoSlNDOjpGb3JtYXRQcmludGVyOjpwcmludCk6CisgICAgICAg
IChKU0M6OkZvcm1hdFByaW50ZXI6OnByaW50QXJnKToKKyAgICAgICAgKEpTQzo6Rm9ybWF0UHJp
bnRlcjo6cHJpbnRXVEZTdHJpbmcpOgorICAgICAgICAoSlNDOjpGaWxlRm9ybWF0UHJpbnRlcjo6
RmlsZUZvcm1hdFByaW50ZXIpOgorICAgICAgICAoSlNDOjpGaWxlRm9ybWF0UHJpbnRlcjo6cHJp
bnRBcmcpOgorICAgICAgICAoSlNDOjpTdHJpbmdGb3JtYXRQcmludGVyOjpTdHJpbmdGb3JtYXRQ
cmludGVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5nRm9ybWF0UHJpbnRlcjo6cHJpbnRBcmcpOgor
ICAgICAgICAoSlNDOjpTdHJpbmdORm9ybWF0UHJpbnRlcjo6U3RyaW5nTkZvcm1hdFByaW50ZXIp
OgorICAgICAgICAoSlNDOjpTdHJpbmdORm9ybWF0UHJpbnRlcjo6cHJpbnRBcmcpOgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6ZnByaW50Zik6CisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9y
OjpwcmludGYpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6c3ByaW50Zik6CisgICAgICAg
IChKU0M6OlZNSW5zcGVjdG9yOjpzbnByaW50Zik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvVk1J
bnNwZWN0b3IuaDoKKyAgICAgICAgKFZNSW5zcGVjdG9yKToKKwogMjAxMi0xMC0yNiAgU2ltb24g
SGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBGaXgg
dGhlIExMSW50IGJ1aWxkIG9uIFdpbmRvd3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9WTUluc3BlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1ZNSW5zcGVjdG9yLmNwcAkocmV2aXNpb24gMTMyNzAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNSW5zcGVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShWTUlOU1BFQ1RPUikKIAor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IGNoYXIq
IFZNSW5zcGVjdG9yOjpnZXRUeXBlTmFtZShKU1ZhbHVlIHZhbHVlKQpAQCAtMTA1LDYgKzEwOSwz
OTUgQEAgaW50IFZNSW5zcGVjdG9yOjpjb3VudEZyYW1lcyhDYWxsRnJhbWUqIAogICAgIHJldHVy
biBjb3VudDsKIH0KIAorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBjbGFzcyBGb3JtYXRQ
cmludGVyCisvLyAgICAtIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSB0byBzdXBwb3J0IGZwcmlu
dGYuCisvLworLy8gICAgVGhlIEZvcm1hdFByaW50ZXIgY2xhc3NlcyBkbyB0aGUgcmVhbCBmb3Jt
YXR0aW5nIGFuZCBwcmludGluZy4KKy8vICAgIEJ5IGRlZmF1bHQsIHRoZSBzdXBlcmNsYXNzIEZv
cm1hdFByaW50ZXIgd2lsbCBwcmludCB0byBzdGRvdXQgKHByaW50ZikuCisvLyAgICBFYWNoIG9m
IHRoZSBzdWJjbGFzcyB3aWxsIGltcGxlbWVudCB0aGUgb3RoZXIgLi4ucHJpbnRmKCkgb3B0aW9u
cy4KKy8vICAgIFRoZSBzdWJjbGFzc2VzIGFyZToKKy8vCisvLyAgICAgICAgRmlsZUZvcm1hdFBy
aW50ZXIgICAgIC0gZnByaW50ZgorLy8gICAgICAgIFN0cmluZ0Zvcm1hdFByaW50ZXIgICAtIHNw
cmludGYKKy8vICAgICAgICBTdHJpbmdORm9ybWF0UHJpbnRlciAgLSBzbnByaW50ZgorCitjbGFz
cyBGb3JtYXRQcmludGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Gb3JtYXRQcmludGVyKCkg
eyB9CisKKyAgICB2b2lkIHByaW50KGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKTsK
KworcHJvdGVjdGVkOgorICAgIC8vIExvdyBsZXZlbCBwcmludGVyczoKKyAgICBib29sIHByaW50
QXJnKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHJpbnRBcmco
Y29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCisgICAgLy8gSlMgdHlwZSBzcGVj
aWZpYyBwcmludGVyczoKKyAgICB2b2lkIHByaW50V1RGU3RyaW5nKHZhX2xpc3QgYXJncywgYm9v
bCB2ZXJib3NlKTsKKworfTsKKworCisvLyBUaGUgcHVibGljIHByaW50KCkgZnVuY3Rpb24gaXMg
dGhlIHJlYWwgd29ya2hvcnNlIGJlaGluZCB0aGUgcHJpbnRmCisvLyBmYW1pbHkgb2YgZnVuY3Rp
b25zLiBwcmludCgpIGRlY2lwaGVycyB0aGUgJSBmb3JtYXR0aW5nLCB0cmFuc2xhdGUgdGhlbQor
Ly8gdG8gcHJpbWl0aXZlIGZvcm1hdHMsIGFuZCBkaXNwYXRjaGVzIHRvIHVuZGVybHlpbmcgcHJp
bnRBcmcoKSBmdW5jdGlvbnMKKy8vIHRvIGRvIHRoZSBwcmludGluZy4KKy8vIAorLy8gVGhlIG5v
bi1wdWJsaWMgaW50ZXJuYWwgcHJpbnRBcmcoKSBmdW5jdGlvbiBpcyB2aXJ0dWFsIGFuZCBpcyBy
ZXNwb25zaWJsZQorLy8gZm9yIGhhbmRsaW5nIHRoZSB2YXJpYXRpb25zIGJldHdlZW4gcHJpbnRm
LCBmcHJpbnRmLCBzcHJpbnRmLCBhbmQgc25wcmludGYuCisKK3ZvaWQgRm9ybWF0UHJpbnRlcjo6
cHJpbnQoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgICAgY29uc3QgY2hh
ciogcCA9IGZvcm1hdDsKKyAgICBjaGFyIGJ1ZmZlclsxMjhdOworICAgIGNoYXIqIGVuZCA9ICZi
dWZmZXJbc2l6ZW9mKGJ1ZmZlcikgLSAxXTsKKyAgICBjb25zdCBjaGFyKiBlcnJvclN0cjsKKwor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGNoYXIgYyA9ICpwKys7CisgICAgICAgIGNoYXIq
IGN1cnIgPSBidWZmZXI7CisKKyAgICAgICAgLy8gUHJpbnQgbGVhZGluZyBub3JtYWwgY2hhcnM6
CisgICAgICAgIHdoaWxlIChjICE9ICdcMCcgJiYgYyAhPSAnJScpIHsKKyAgICAgICAgICAgICpj
dXJyKysgPSBjOworICAgICAgICAgICAgaWYgKGN1cnIgPT0gZW5kKSB7CisgICAgICAgICAgICAg
ICAgLy8gT3V0IG9mIGJ1ZmZlciBzcGFjZS4gRmx1c2ggYW5kIHN0YXJ0IG92ZXIuCisgICAgICAg
ICAgICAgICAgKmN1cnIgPSAnXDAnOworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHBy
aW50QXJnKCIlcyIsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVycm9yU3RyID0gYnVmZmVyOworICAgICAgICAgICAgICAgICAg
ICBnb3RvIGhhbmRsZUVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
dXJyID0gYnVmZmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYyA9ICpwKys7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBzdHVmZiBpbiB0aGUgYnVmZmVyLCBmbHVzaCBp
dDoKKyAgICAgICAgaWYgKGN1cnIgIT0gYnVmZmVyKSB7CisgICAgICAgICAgICBBU1NFUlQoY3Vy
ciA8IGVuZCArIDEpOworICAgICAgICAgICAgKmN1cnIgPSAnXDAnOworICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gcHJpbnRBcmcoIiVzIiwgYnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICAgICAgICAgIGVycm9yU3RyID0gYnVmZmVyOworICAgICAgICAgICAg
ICAgIGdvdG8gaGFuZGxlRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBFbmQgaWYgdGhlcmUgYXJlIG5vdCBtb3JlIGNoYXJzIHRvIHByaW50OgorICAgICAgICBp
ZiAoYyA9PSAnXDAnKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gSWYgd2UgZ2V0
IGhlcmUsIHdlJ3ZlIG11c3QgaGF2ZSBzZWVuIGEgJyUnOgorICAgICAgICBBU1NFUlQocFstMV0g
PT0gJyUnKTsKKyAgICAgICAgYyA9ICpwKys7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yICIlJSIg
Y2FzZToKKyAgICAgICAgaWYgKGMgPT0gJyUnKSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBwcmludEFyZygiJWMiLCAnJScpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAg
ICAgICAgICAgICAgZXJyb3JTdHIgPSBwIC0gMjsKKyAgICAgICAgICAgICAgICBnb3RvIGhhbmRs
ZUVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBDaGVjayBmb3IgSlMgKCVKPHg+KSBmb3JtYXR0aW5nIGV4dGVuc2lvbnM6
CisgICAgICAgIGlmIChjID09ICdKJykgeworICAgICAgICAgICAgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKKyAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGMg
PT0gJ1wwJykpIHsKKyAgICAgICAgICAgICAgICBlcnJvclN0ciA9IHAgLSAyOyAvLyBSZXdpbmQg
dG8gJSBpbiAiJUpcMCIKKyAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZUVycm9yOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoYyA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICB2
ZXJib3NlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjPSAqcCsrOworICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShjID09ICdcMCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yU3Ry
ID0gcCAtIDM7IC8vIFJld2luZCB0byAlIGluICIlSitcMCIKKyAgICAgICAgICAgICAgICAgICAg
Z290byBoYW5kbGVFcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgLy8gJUpzIC0gV1RGOjpTdHJpbmcq
CisgICAgICAgICAgICAvLyB2ZXJib3NlIG1vZGUgcHJpbnRzOiBXVEY6OlN0cmluZyAiPHlvdXIg
c3RyaW5nPiIKKyAgICAgICAgICAgIGNhc2UgJ3MnOiB7CisgICAgICAgICAgICAgICAgcHJpbnRX
VEZTdHJpbmcoYXJncywgdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IC8vIEVORCBzd2l0Y2guCisKKyAgICAgICAgICAgIC8v
IElmIHdlIGRpZG4ndCBoYW5kbGUgdGhlIGZvcm1hdCBpbiBvbmUgb2YgdGhlIGFib3ZlIGNhc2Vz
LAorICAgICAgICAgICAgLy8gcmV3aW5kIHAgYW5kIGxldCB0aGUgc3RhbmRhcmQgZm9ybWF0dGlu
ZyBjaGVjayBoYW5kbGUgaXQKKyAgICAgICAgICAgIC8vIGlmIHBvc3NpYmxlOgorICAgICAgICAg
ICAgcC0tOworCisgICAgICAgIC8vIENoZWNrIGZvciBub24tSlMgZXh0ZW5zaW9uczoKKyAgICAg
ICAgfSBlbHNlIGlmIChjID09ICdiJykgeworICAgICAgICAgICAgaW50IHZhbHVlID0gdmFfYXJn
KGFyZ3MsIGludCk7CisgICAgICAgICAgICBwcmludEFyZygiJXMiLCB2YWx1ZSA/ICJUUlVFIiA6
ICJGQUxTRSIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAv
LyBDaGVjayBmb3Igc3RhbmRhcmQgZm9ybWF0dGluZzoKKyAgICAgICAgLy8gQSBmb3JtYXQgc3Bl
Y2lmaWVyIGFsd2F5cyBzdGFydHMgd2l0aCBhICUgYW5kIGVuZHMgd2l0aCBzb21lCisgICAgICAg
IC8vIGFscGhhYmV0LiBXZSdsbCBkbyB0aGUgc2ltcGxlIHRoaW5nIGFuZCBzY2FuIHVudGlsIHRo
ZSBuZXh0CisgICAgICAgIC8vIGFscGhhYmV0LCBvciB0aGUgZW5kIG9mIHN0cmluZy4KKworICAg
ICAgICBjaGFyKiBhcmdGb3JtYXQgPSBidWZmZXI7CisgICAgICAgIGN1cnIgPSBhcmdGb3JtYXQ7
CisgICAgICAgIGlmIChVTkxJS0VMWShjdXJyID49IGVuZCkpCisgICAgICAgICAgICBnb3RvIGZv
cm1hdFRvb0xvbmc7CisgICAgICAgICpjdXJyKysgPSAnJSc7CisKKyAgICAgICAgd2hpbGUgKGMg
IT0gJ1wwJyAmJiAhaXNBU0NJSUFscGhhKGMpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
Y3VyciA+PSBlbmQpKQorICAgICAgICAgICAgICAgIGdvdG8gZm9ybWF0VG9vTG9uZzsKKyAgICAg
ICAgICAgICpjdXJyKysgPSBjOworICAgICAgICAgICAgYyA9ICpwKys7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGMgPT0gJ2wnIHx8IGMgPT0gJ2gnKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoY3VyciA+PSBlbmQpKQorICAgICAgICAgICAgICAgIGdvdG8gZm9ybWF0VG9vTG9uZzsKKyAg
ICAgICAgICAgICpjdXJyKysgPSBjOworICAgICAgICAgICAgYyA9ICpwKys7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKFVOTElLRUxZKGN1cnIgPj0gZW5kKSkKKyAgICAgICAgICAgIGdvdG8gZm9y
bWF0VG9vTG9uZzsKKyAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgIGlmIChjID09ICdcMCcp
IHsKKyAgICAgICAgICAgIC8vIFVoIG9oLiBCYWQgZm9ybWF0LiBXZSBzaG91bGQgaGF2ZSBnb3R0
ZW4gYW4gYWxwaGFiZXQgaW5zdGVhZC4KKyAgICAgICAgICAgIC8vIFByaW50IHRoZSBzdXBwb3Nl
ZCBmb3JtYXQgYXMgYSBzdHJpbmcgaW5zdGVhZDoKKyAgICAgICAgICAgIEFTU0VSVChjdXJyWy0x
XSA9PSAnXDAnKTsKKyAgICAgICAgICAgIGVycm9yU3RyID0gYXJnRm9ybWF0OworICAgICAgICAg
ICAgZ290byBoYW5kbGVFcnJvcjsKKyAgICAgICAgfQorICAgICAgICAvLyBPdGhlcndpc2UsIHdl
IGhhdmUgdGhlIGFscGhhIHRoYXQgdGVybWluYXRlcyB0aGUgZm9ybWF0LgorICAgICAgICAvLyBU
ZXJtaW5hdGUgdGhlIGFyZ0Zvcm1hdCBzdHJpbmc6CisgICAgICAgIEFTU0VSVChpc0FTQ0lJQWxw
aGEoYykpOworICAgICAgICBpZiAoVU5MSUtFTFkoY3VyciA+PSBlbmQpKQorICAgICAgICAgICAg
Z290byBmb3JtYXRUb29Mb25nOworICAgICAgICAqY3VyciA9ICdcMCc7CisgICAgICAgIGJvb2wg
c3VjY2VzcyA9IHByaW50QXJnKGFyZ0Zvcm1hdCwgYXJncyk7CisgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgZXJyb3JTdHIgPSBhcmdGb3JtYXQ7CisgICAgICAgICAgICBnb3Rv
IGhhbmRsZUVycm9yOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybjsKKworZm9ybWF0VG9v
TG9uZzoKKyAgICAvLyBQcmludCB0aGUgZXJyb3Igc3RyaW5nOgorICAgIHAgLT0gNTsKKyAgICBp
ZiAocCA8IGZvcm1hdCkKKyAgICAgICAgcCA9IGZvcm1hdDsKKyAgICBwcmludEFyZygiRVJST1Ig
QCBGb3JtYXQgdG9vIGxvbmcgYXQgLi4uJXNcbiIsIHApOworICAgIHJldHVybjsKKworaGFuZGxl
RXJyb3I6CisgICAgLy8gV2UndmUgZ290IGFuIGVycm9yLiBDYW4ndCBkbyBhbnkgbW9yZSB3b3Jr
LiBQcmludCBhbmQgZXJyb3IgbWVzc2FnZSBpZgorICAgIC8vIHBvc3NpYmxlIGFuZCB0aGVuIGp1
c3QgcmV0dXJuLgorCisgICAgLy8gVGhlIGVycm9yU3RyIG1heSBiZSBwb2ludGluZyBpbnRvIHRo
ZSBtaWRkbGUgb2YgYnVmZmVyLCBvciB0aGUgb3JpZ2luYWwKKyAgICAvLyBmb3JtYXQgc3RyaW5n
LiBNb3ZlIHRoZSBzdHJpbmcgdG8gYnVmZmVyIGZvciBjb25zaXN0ZW5jeSwgYW5kIGFsc28gc28K
KyAgICAvLyB0aGF0IHdlIGNhbiBzdHJpcCBpdCBvZiBuZXdsaW5lcyBiZWxvdy4KKyAgICBpZiAo
ZXJyb3JTdHIgIT0gYnVmZmVyKSB7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oZXJy
b3JTdHIpOworICAgICAgICBpZiAobGVuZ3RoID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQorICAgICAg
ICAgICAgbGVuZ3RoID0gc2l6ZW9mKGJ1ZmZlcikgLSAxOworICAgICAgICBtZW1tb3ZlKGJ1ZmZl
ciwgZXJyb3JTdHIsIGxlbmd0aCk7CisgICAgICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsgLy8g
VGVybWluYXRlIHRoZSBtb3ZlZCBlcnJvciBzdHJpbmcuCisgICAgfQorICAgIC8vIFN0cmlwIHRo
ZSBuZXdsaW5lczoKKyAgICBjaGFyKiBjcCA9IGJ1ZmZlcjsKKyAgICB3aGlsZSAoKmNwKSB7Cisg
ICAgICAgIGlmICgqY3AgPT0gJ1xuJykKKyAgICAgICAgICAgICpjcCA9ICcgJzsKKyAgICAgICAg
Y3ArKzsKKyAgICB9CisgICAgLy8gUHJpbnQgdGhlIGVycm9yIHN0cmluZzoKKyAgICBwcmludEFy
ZygiRVJST1IgQCAuLi4lc1xuIiwgYnVmZmVyKTsKK30KKworCitib29sIEZvcm1hdFByaW50ZXI6
OnByaW50QXJnKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsK
KyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIGJvb2wgc3VjY2VzcyA9IHByaW50QXJn
KGZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiBzdWNjZXNzOwor
fQorCitib29sIEZvcm1hdFByaW50ZXI6OnByaW50QXJnKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFf
bGlzdCBhcmdzKQoreworICAgIGludCBjb3VudCA9IDo6dnByaW50Zihmb3JtYXQsIGFyZ3MpOwor
ICAgIHJldHVybiAoY291bnQgPj0gMCk7IC8vIEZhaWwgaWYgbGVzcyB0aGFuIDAgY2hhcnMgcHJp
bnRlZC4KK30KKworCisvLyAlSnMgLSBXVEY6OlN0cmluZyoKKy8vIHZlcmJvc2UgbW9kZSBwcmlu
dHM6IFdURjo6U3RyaW5nICI8eW91ciBzdHJpbmc+Igordm9pZCBGb3JtYXRQcmludGVyOjpwcmlu
dFdURlN0cmluZyh2YV9saXN0IGFyZ3MsIGJvb2wgdmVyYm9zZSkKK3sKKyAgICBjb25zdCBTdHJp
bmcqIHN0ciA9IHZhX2FyZyhhcmdzLCBjb25zdCBTdHJpbmcqKTsKKworICAgIC8vIFByaW50IHZl
cmJvc2UgaGVhZGVyIGlmIGFwcHJvcHJpYXRlOgorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBw
cmludEFyZygiV1RGOjpTdHJpbmcgXCIiKTsKKworICAgIC8vIFByaW50IHRoZSBzdHJpbmcgaXRz
ZWxmOgorICAgIGlmICghc3RyLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHN0ci0+aXM4Qml0
KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IExDaGFyKiBjaGFycyA9IHN0ci0+Y2hhcmFjdGVyczgo
KTsKKyAgICAgICAgICAgIHByaW50QXJnKCIlcyIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGNoYXJzKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBVQ2hhciog
Y2hhcnMgPSBzdHItPmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAgcHJpbnRBcmcoIiVTIiwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB3Y2hhcl90Kj4oY2hhcnMpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFByaW50IHZlcmJvc2UgZm9vdGVyIGlmIGFwcHJvcHJpYXRlOgorICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBwcmludEFyZygiXCIiKTsKK30KKworCisvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vICBjbGFzcyBGaWxlRm9ybWF0UHJpbnRlcgorLy8gICAgLSBpbXBsZW1lbnRz
IGZ1bmN0aW9uYWxpdHkgdG8gc3VwcG9ydCBmcHJpbnRmLgorCitjbGFzcyBGaWxlRm9ybWF0UHJp
bnRlcjogcHVibGljIEZvcm1hdFByaW50ZXIgeworcHVibGljOgorICAgIEZpbGVGb3JtYXRQcmlu
dGVyKEZJTEUqKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIHByaW50QXJnKGNvbnN0IGNo
YXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKKworICAgIEZJTEUqIG1fZmlsZTsKK307CisKK0Zp
bGVGb3JtYXRQcmludGVyOjpGaWxlRm9ybWF0UHJpbnRlcihGSUxFKiBmaWxlKQorICAgIDogbV9m
aWxlKGZpbGUpCit7IAorfQorCitib29sIEZpbGVGb3JtYXRQcmludGVyOjpwcmludEFyZyhjb25z
dCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpbnQgY291bnQgPSA6OnZmcHJp
bnRmKG1fZmlsZSwgZm9ybWF0LCBhcmdzKTsKKyAgICByZXR1cm4gKGNvdW50ID49IDApOyAvLyBG
YWlsIGlmIGxlc3MgdGhhbiAwIGNoYXJzIHByaW50ZWQuCit9CisKKworLy89PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CisvLyAgY2xhc3MgU3RyaW5nRm9ybWF0UHJpbnRlcgorLy8gICAgLSBpbXBsZW1lbnRz
IGZ1bmN0aW9uYWxpdHkgdG8gc3VwcG9ydCBzcHJpbnRmLgorCitjbGFzcyBTdHJpbmdGb3JtYXRQ
cmludGVyOiBwdWJsaWMgRm9ybWF0UHJpbnRlciB7CitwdWJsaWM6CisgICAgU3RyaW5nRm9ybWF0
UHJpbnRlcihjaGFyKiBidWZmZXIpOworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgcHJpbnRB
cmcoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCisgICAgY2hhciogbV9idWZm
ZXI7Cit9OworCitTdHJpbmdGb3JtYXRQcmludGVyOjpTdHJpbmdGb3JtYXRQcmludGVyKGNoYXIq
IGJ1ZmZlcikKKyAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKK3sgCit9CisKK2Jvb2wgU3RyaW5nRm9y
bWF0UHJpbnRlcjo6cHJpbnRBcmcoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7
CisgICAgaW50IGNvdW50ID0gOjp2c3ByaW50ZihtX2J1ZmZlciwgZm9ybWF0LCBhcmdzKTsKKyAg
ICBtX2J1ZmZlciArPSBjb3VudDsKKyAgICByZXR1cm4gKGNvdW50ID49IDApOyAvLyBGYWlsIGlm
IGxlc3MgdGhhbiAwIGNoYXJzIHByaW50ZWQuCit9CisKKworLy89PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisvLyAgY2xhc3MgU3RyaW5nTkZvcm1hdFByaW50ZXIKKy8vICAgIC0gaW1wbGVtZW50cyBmdW5j
dGlvbmFsaXR5IHRvIHN1cHBvcnQgc25wcmludGYuCisKK2NsYXNzIFN0cmluZ05Gb3JtYXRQcmlu
dGVyOiBwdWJsaWMgRm9ybWF0UHJpbnRlciB7CitwdWJsaWM6CisgICAgU3RyaW5nTkZvcm1hdFBy
aW50ZXIoY2hhciogYnVmZmVyLCBzaXplX3QpOworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wg
cHJpbnRBcmcoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCisgICAgY2hhciog
bV9idWZmZXI7CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisKKworU3RyaW5nTkZvcm1hdFByaW50
ZXI6OlN0cmluZ05Gb3JtYXRQcmludGVyKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCisgICAg
OiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX3NpemUoc2l6ZSkKK3sKK30KKworYm9vbCBTdHJp
bmdORm9ybWF0UHJpbnRlcjo6cHJpbnRBcmcoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFy
Z3MpCit7CisgICAgaWYgKG1fc2l6ZSA+IDApIHsKKyAgICAgICAgaW50IGNvdW50ID0gOjp2c25w
cmludGYobV9idWZmZXIsIG1fc2l6ZSwgZm9ybWF0LCBhcmdzKTsKKworICAgICAgICAvLyBBY2Nv
cmRpbmcgdG8gdnNucHJpbnRmIHNwZWNzLCAuLi4KKyAgICAgICAgYm9vbCBzdWNjZXNzID0gKGNv
dW50ID49IDApOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3VudCkgPj0gbV9z
aXplKSB7CisgICAgICAgICAgICAvLyBJZiBjb3VudCA+IHNpemUsIHRoZW4gd2UgZGlkbid0IGhh
dmUgZW5vdWdoIGJ1ZmZlciBzcGFjZS4KKyAgICAgICAgICAgIGNvdW50ID0gbV9zaXplOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQWRqdXN0IHRoZSBidWZmZXIgdG8gd2hhdCdzIGxlZnQgaWYg
YXBwcm9wcmlhdGU6CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBtX2J1ZmZl
ciArPSBjb3VudDsKKyAgICAgICAgICAgIG1fc2l6ZSAtPSBjb3VudDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9CisgICAgLy8gTm8gbW9yZSByb29tIHRvIHByaW50
LiBEZWNsYXJlIGl0IGEgZmFpbDoKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworLy89PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisvLyAgVk1JbnNwZWN0b3IgcHJpbnRmIGZhbWlseSBvZiBtZXRob2RzOgor
Cit2b2lkIFZNSW5zcGVjdG9yOjpmcHJpbnRmKEZJTEUqIGZpbGUsIGNvbnN0IGNoYXIqIGZvcm1h
dCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQp
OworICAgIEZpbGVGb3JtYXRQcmludGVyKGZpbGUpLnByaW50KGZvcm1hdCwgYXJncyk7CisgICAg
dmFfZW5kKGFyZ3MpOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjpwcmludGYoY29uc3QgY2hhciog
Zm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZv
cm1hdCk7CisgICAgRm9ybWF0UHJpbnRlcigpLnByaW50KGZvcm1hdCwgYXJncyk7CisgICAgdmFf
ZW5kKGFyZ3MpOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGNoYXIqIGJ1ZmZlciwg
Y29uc3QgY2hhciogZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0
YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgU3RyaW5nRm9ybWF0UHJpbnRlcihidWZmZXIpLnByaW50
KGZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCit2b2lkIFZNSW5zcGVjdG9y
OjpzbnByaW50ZihjaGFyKiBidWZmZXIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBmb3JtYXQs
IC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsK
KyAgICBTdHJpbmdORm9ybWF0UHJpbnRlcihidWZmZXIsIHNpemUpLnByaW50KGZvcm1hdCwgYXJn
cyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShWTUlOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9WTUluc3BlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9WTUluc3BlY3Rvci5oCShyZXZpc2lvbiAxMzI3MDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsOSBAQAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNW
YWx1ZS5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSw2ICs0
NCw0MiBAQCBwdWJsaWM6ICAgIAogICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1
bXBGcmFtZTAoQ2FsbEZyYW1lKik7CiAgICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZHVtcEZyYW1lKENhbGxGcmFtZSosIGNvbnN0IGNoYXIqIHByZWZpeCA9IDAsIGNvbnN0IGNoYXIq
IGZ1bmNOYW1lID0gMCwgY29uc3QgY2hhciogZmlsZSA9IDAsIGludCBsaW5lID0gLTEpOwogICAg
IHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBpbnQgY291bnRGcmFtZXMoQ2FsbEZyYW1lKik7CisK
KyAgICAvLyBTcGVjaWFsIGZhbWlseSBvZiAuLi5wcmludGYoKSBmdW5jdGlvbnMgdGhhdCBzdXBw
b3J0LCBpbiBhZGRpdGlvbiB0byB0aGUKKyAgICAvLyBzdGFuZGFyZCAlIGZvcm1hdHMgKGUuZy4g
JWQsICVzLCBldGMpLCB0aGUgZm9sbG93aW5nIGV4dHJhIEpTQyBmb3JtYXR0aW5nCisgICAgLy8g
b3B0aW9ucywgJUo8eD4sIHdoZXJlIDx4PiBjb25zaXN0cyBvZjoKKyAgICAvLworICAgIC8vICAg
KyAgICAtIHZlcmJvc2UgbW9kZSBtb2RpZmllci4KKyAgICAvLyAgICAgICAgICBVc2VkIGluIGNv
bWJpbmF0aW9uIHdpdGggb3RoZXIgb3B0aW9ucy4gTXVzdCBjb21lIGFmdGVyIHRoZSAlSi4KKyAg
ICAvLyAgIHMgICAgLSBXVEY6OlN0cmluZyoKKyAgICAvLworICAgIC8vIEV4YW1wbGVzIG9mIHVz
YWdlOgorICAgIC8vCisgICAgLy8gICAgV1RGOjpTdHJpbmcgc3RyKCJNeSBXVEYgU3RyaW5nIik7
CisgICAgLy8KKyAgICAvLyAgICAvLyBQcmludGluZyB0aGUgc3RyaW5nLiBXaWxsIHByaW50Ogor
ICAgIC8vICAgIC8vIFRoZSB3dGYgc3RyaW5nIHNheXM6ICJNeSBXVEYgU3RyaW5nIiBhbmQgaXMg
Tk9UIEVNUFRZLgorICAgIC8vCisgICAgLy8gICAgVk1JbnNwZWN0b3I6OnByaW50ZigiVGhlIHd0
ZiBzdHJpbmcgc2F5czogXCIlSnNcIiBhbmQgaXMgJXNcbiIsCisgICAgLy8gICAgICAgICZzdHIs
IHN0ci5pc0VtcHR5KCk/IkVNUFRZIjoiTk9UIEVNUFRZIik7CisgICAgLy8KKyAgICAvLyAgICAv
LyBQcmludGluZyB0aGUgc3RyaW5nIHdpdGggdmVyYm9zZSBtb2RlLiBXaWxsIHByaW50OgorICAg
IC8vICAgIC8vIDxXVEY6OlN0cmluZyAiTXkgV1RGIFN0cmluZyI+CisgICAgLy8KKyAgICAvLyAg
ICBWTUluc3BlY3Rvcjo6cHJpbnRmKCI8JUorcz5cbiIsICZzdHIpOworICAgIC8vCisgICAgLy8g
QWxzbyBhZGRlZCBzb21lIGNvbnZlbmllbmNlIG5vbi1KUyBmb3JtYXRzOgorICAgIC8vCisgICAg
Ly8gICAlYiAgICAtIGJvb2xlYW4gKHZhX2FyZ3Mgd2lsbCBsb29rIGZvciBhbiBpbnQpLgorICAg
IC8vICAgICAgICAgICBQcmludHMgVFJVRSBpZiBub24temVybywgZWxzZSBwcmludHMgRkFMU0Uu
CisgICAgLy8KKyAgICAvLyBDYXV0aW9uOiB0aGUgdXNlciBpcyBleHBlY3RlZCB0byBwYXNzIHRo
ZSBjb3JyZWN0bHkgbWF0Y2hlZCBhcmd1bWVudHMKKyAgICAvLyB0byBwYWlyIHdpdGggdGhlIGNv
cnJlc3BvbmRpbmcgJSBmb21hdHRpbmcuCisKKyAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmcHJpbnRmKEZJTEUqLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7CisgICAgc3RhdGlj
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRmKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsK
KyAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzcHJpbnRmKGNoYXIqLCBjb25zdCBj
aGFyKiBmb3JtYXQsIC4uLik7CisgICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc25w
cmludGYoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCg==
</data>
<flag name="review"
          id="184804"
          type_id="1"
          status="-"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171572</attachid>
            <date>2012-10-30 20:59:02 -0700</date>
            <delta_ts>2012-10-30 21:13:14 -0700</delta_ts>
            <desc>Updated patch with more standard format compatibility, and tests.</desc>
            <filename>bug-100566.patch</filename>
            <type>text/plain</type>
            <size>57720</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyOTc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTEwLTMwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
IEpTQyBwcmludGYgKHN1cHBvcnQgZm9yICVKK3MgYW5kICViKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDU2Ni4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBWTUluc3BlY3Rvcjo6cHJpbnRm
KCksIGZwcmludGYoKSwgc3ByaW50ZigpLCBhbmQgc25wcmludGYoKS4KKyAgICAgICAgLSAlYiBw
cmludHMgaW50cyBhcyBib29sZWFuIFRSVUUgKG5vbi16ZXJvKSBvciBGQUxTRSAoemVybykuCisg
ICAgICAgIC0gJUpzIHByaW50cyBhIFdURjo6U3RyaW5nKiBsaWtlIGEgJXMgcHJpbnRzIGEgY2hh
ciouCisgICAgICAgICAgQWxzbyB3b3JrcyBmb3IgMTZiaXQgV1RGOjpTdHJpbmdzIChwcmludHMg
d2NoYXJfdCogdXNpbmcgJVMpLgorICAgICAgICAtICcrJyBpcyBhIG1vZGlmaWVyIG1lYW5pbmcg
J3VzZSB2ZXJib3NlIG1vZGUnLCBhbmQgJUorcyBpcyBhbiBleGFtcGxlCisgICAgICAgICAgb2Yg
aXRzIHVzZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwOgorICAgICAgICAo
Rm9ybWF0UHJpbnRlcik6CisgICAgICAgIChKU0M6OkZvcm1hdFByaW50ZXI6On5Gb3JtYXRQcmlu
dGVyKToKKyAgICAgICAgKEpTQzo6Rm9ybWF0UHJpbnRlcjo6cHJpbnQpOgorICAgICAgICAoSlND
OjpGb3JtYXRQcmludGVyOjpwcmludEFyZyk6CisgICAgICAgIChKU0M6OkZvcm1hdFByaW50ZXI6
OnByaW50V1RGU3RyaW5nKToKKyAgICAgICAgKEpTQzo6RmlsZUZvcm1hdFByaW50ZXI6OkZpbGVG
b3JtYXRQcmludGVyKToKKyAgICAgICAgKEpTQzo6RmlsZUZvcm1hdFByaW50ZXI6OnByaW50QXJn
KToKKyAgICAgICAgKEpTQzo6U3RyaW5nRm9ybWF0UHJpbnRlcjo6U3RyaW5nRm9ybWF0UHJpbnRl
cik6CisgICAgICAgIChKU0M6OlN0cmluZ0Zvcm1hdFByaW50ZXI6OnByaW50QXJnKToKKyAgICAg
ICAgKEpTQzo6U3RyaW5nTkZvcm1hdFByaW50ZXI6OlN0cmluZ05Gb3JtYXRQcmludGVyKToKKyAg
ICAgICAgKEpTQzo6U3RyaW5nTkZvcm1hdFByaW50ZXI6OnByaW50QXJnKToKKyAgICAgICAgKEpT
Qzo6Vk1JbnNwZWN0b3I6OmZwcmludGYpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6cHJp
bnRmKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnNwcmludGYpOgorICAgICAgICAoSlND
OjpWTUluc3BlY3Rvcjo6c25wcmludGYpOgorICAgICAgICAqIGludGVycHJldGVyL1ZNSW5zcGVj
dG9yLmg6CisgICAgICAgIChWTUluc3BlY3Rvcik6CisKIDIwMTItMTAtMzAgIEpvc2VwaCBQZWNv
cmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBTeW5jIHVwIEZlYXR1
cmVEZWZpbmUgQ29uZmlndXJhdGlvbiBGaWxlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDEzMjk3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NDYs
NyArNzQ2LDcgQEAKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0
QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTRB
MzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8q
IFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKLQkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZN
SW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKKwkJRkU0
QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyog
Vk1JbnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcw
MERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMjYx
Myw2ICsyNjEzLDcgQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBD
b3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENC
QUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNEEzMzIwMTVC
RDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlE
MTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3Rp
Y3MuaCBpbiBIZWFkZXJzICovLApAQCAtMjk4Miw3ICsyOTgzLDYgQEAKIAkJCQkwRjc2NkQzOTE1
QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3NjZENDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0UgLyogREZHU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTRBMzMyMDE1QkQy
RTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDNG
MTVDNzVGMTkwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1ZNSW5zcGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwCShyZXZpc2lvbiAxMzI5NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKFZNSU5TUEVDVE9SKQogCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgY2hhciogVk1J
bnNwZWN0b3I6OmdldFR5cGVOYW1lKEpTVmFsdWUgdmFsdWUpCkBAIC0xMDUsNiArMTA5LDQ2NSBA
QCBpbnQgVk1JbnNwZWN0b3I6OmNvdW50RnJhbWVzKENhbGxGcmFtZSogCiAgICAgcmV0dXJuIGNv
dW50OwogfQogCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIGNsYXNzIEZvcm1hdFByaW50
ZXIKKy8vICAgIC0gaW1wbGVtZW50cyBmdW5jdGlvbmFsaXR5IHRvIHN1cHBvcnQgZnByaW50Zi4K
Ky8vCisvLyAgICBUaGUgRm9ybWF0UHJpbnRlciBjbGFzc2VzIGRvIHRoZSByZWFsIGZvcm1hdHRp
bmcgYW5kIHByaW50aW5nLgorLy8gICAgQnkgZGVmYXVsdCwgdGhlIHN1cGVyY2xhc3MgRm9ybWF0
UHJpbnRlciB3aWxsIHByaW50IHRvIHN0ZG91dCAocHJpbnRmKS4KKy8vICAgIEVhY2ggb2YgdGhl
IHN1YmNsYXNzIHdpbGwgaW1wbGVtZW50IHRoZSBvdGhlciAuLi5wcmludGYoKSBvcHRpb25zLgor
Ly8gICAgVGhlIHN1YmNsYXNzZXMgYXJlOgorLy8KKy8vICAgICAgICBGaWxlRm9ybWF0UHJpbnRl
ciAgICAgLSBmcHJpbnRmCisvLyAgICAgICAgU3RyaW5nRm9ybWF0UHJpbnRlciAgIC0gc3ByaW50
ZgorLy8gICAgICAgIFN0cmluZ05Gb3JtYXRQcmludGVyICAtIHNucHJpbnRmCisKK2NsYXNzIEZv
cm1hdFByaW50ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkZvcm1hdFByaW50ZXIoKSB7IH0K
KworICAgIHZvaWQgcHJpbnQoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCitw
cm90ZWN0ZWQ6CisgICAgLy8gTG93IGxldmVsIHByaW50ZXJzOgorICAgIGJvb2wgcHJpbnRBcmco
Y29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworICAgIHZpcnR1YWwgYm9vbCBwcmludEFyZyhjb25z
dCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncyk7CisKKyAgICAvLyBKUyB0eXBlIHNwZWNpZmlj
IHByaW50ZXJzOgorICAgIHZvaWQgcHJpbnRXVEZTdHJpbmcodmFfbGlzdCBhcmdzLCBib29sIHZl
cmJvc2UpOworfTsKKworCisvLyBUaGUgcHVibGljIHByaW50KCkgZnVuY3Rpb24gaXMgdGhlIHJl
YWwgd29ya2hvcnNlIGJlaGluZCB0aGUgcHJpbnRmCisvLyBmYW1pbHkgb2YgZnVuY3Rpb25zLiBw
cmludCgpIGRlY2lwaGVycyB0aGUgJSBmb3JtYXR0aW5nLCB0cmFuc2xhdGUgdGhlbQorLy8gdG8g
cHJpbWl0aXZlIGZvcm1hdHMsIGFuZCBkaXNwYXRjaGVzIHRvIHVuZGVybHlpbmcgcHJpbnRBcmco
KSBmdW5jdGlvbnMKKy8vIHRvIGRvIHRoZSBwcmludGluZy4KKy8vIAorLy8gVGhlIG5vbi1wdWJs
aWMgaW50ZXJuYWwgcHJpbnRBcmcoKSBmdW5jdGlvbiBpcyB2aXJ0dWFsIGFuZCBpcyByZXNwb25z
aWJsZQorLy8gZm9yIGhhbmRsaW5nIHRoZSB2YXJpYXRpb25zIGJldHdlZW4gcHJpbnRmLCBmcHJp
bnRmLCBzcHJpbnRmLCBhbmQgc25wcmludGYuCisKK3ZvaWQgRm9ybWF0UHJpbnRlcjo6cHJpbnQo
Y29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgICAgY29uc3QgY2hhciogcCA9
IGZvcm1hdDsKKyAgICBjb25zdCBjaGFyKiBlcnJvclN0cjsKKworICAgIC8vIGJ1ZmZlciBpcyBv
bmx5IHVzZWQgZm9yIDIgcHVycG9zZXM6CisgICAgLy8gMS4gVG8gdGVtcG9yYXJpbHkgaG9sZCBh
IGNvcHkgb2Ygbm9ybWFsIGNoYXJzIChub3QgbmVlZGluZyBmb3JtYXR0aW5nKQorICAgIC8vICAg
IHRvIGJlIHBhc3NlZCB0byBwcmludEFyZygpIGFuZCBwcmludGVkLgorICAgIC8vCisgICAgLy8g
ICAgVGhlIGluY29taW5nIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gYSBzdHJpbmcgb2Ygbm9y
bWFsIGNoYXJzIG11Y2gKKyAgICAvLyAgICBsb25nZXIgdGhhbiAxMjgsIGJ1dCB3ZSBoYW5kbGUg
dGhpcyBieSBicmVha2luZyB0aGVtIG91dCB0byAxMjggY2hhcnMKKyAgICAvLyAgICBmcmFnbWVu
dHMgYW5kIHByaW50aW5nIGVhY2ggZnJhZ21lbnQgYmVmb3JlIHJlLXVzaW5nIHRoZSBidWZmZXIg
dG8KKyAgICAvLyAgICBsb2FkIHVwIHRoZSBuZXh0IGZyYWdtZW50LgorICAgIC8vCisgICAgLy8g
Mi4gVG8gaG9sZCBhIHNpbmdsZSAiJS4uLiIgZm9ybWF0IHRvIGJlIHBhc3NlZCB0byBwcmludEFy
ZygpIHRvIHByb2Nlc3MKKyAgICAvLyAgICBhIHNpbmdsZSB2YV9hcmcuCisKKyAgICBjaGFyIGJ1
ZmZlclsxMjldOyAvLyAxMjggY2hhcnMgKyBudWxsIHRlcm1pbmF0b3IuCisgICAgY2hhciogZW5k
ID0gJmJ1ZmZlcltzaXplb2YoYnVmZmVyKSAtIDFdOworICAgIGNvbnN0IGNoYXIqIHN0YXJ0T2ZG
b3JtYXRTcGVjaWZpZXIgPSAwOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgY2hhciBj
ID0gKnArKzsKKyAgICAgICAgY2hhciogY3VyciA9IGJ1ZmZlcjsKKworICAgICAgICAvLyBQcmlu
dCBsZWFkaW5nIG5vcm1hbCBjaGFyczoKKyAgICAgICAgd2hpbGUgKGMgIT0gJ1wwJyAmJiBjICE9
ICclJykgeworICAgICAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgICAgICBpZiAoY3VyciA9
PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBPdXQgb2YgYnVmZmVyIHNwYWNlLiBGbHVzaCB0
aGUgZnJhZ21lbnQsIGFuZCBzdGFydCBvdmVyLgorICAgICAgICAgICAgICAgICpjdXJyID0gJ1ww
JzsKKyAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBwcmludEFyZygiJXMiLCBidWZmZXIp
OworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBl
cnJvclN0ciA9IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVFcnJvcjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VyciA9IGJ1ZmZlcjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICB9CisgICAgICAgIC8vIElm
IHdlIGhhdmUgc3R1ZmYgaW4gdGhlIGJ1ZmZlciwgZmx1c2ggdGhlIGZyYWdtZW50OgorICAgICAg
ICBpZiAoY3VyciAhPSBidWZmZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyIDwgZW5kICsg
MSk7CisgICAgICAgICAgICAqY3VyciA9ICdcMCc7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBwcmludEFyZygiJXMiLCBidWZmZXIpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICAgICAgZXJyb3JTdHIgPSBidWZmZXI7CisgICAgICAgICAgICAgICAgZ290byBo
YW5kbGVFcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEVuZCBp
ZiB0aGVyZSBhcmUgbm90IG1vcmUgY2hhcnMgdG8gcHJpbnQ6CisgICAgICAgIGlmIChjID09ICdc
MCcpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Un
dmUgbXVzdCBoYXZlIHNlZW4gYSAnJSc6CisgICAgICAgIHN0YXJ0T2ZGb3JtYXRTcGVjaWZpZXIg
PSBwIC0gMTsKKyAgICAgICAgQVNTRVJUKCpzdGFydE9mRm9ybWF0U3BlY2lmaWVyID09ICclJyk7
CisgICAgICAgIGMgPSAqcCsrOworCisgICAgICAgIC8vIENoZWNrIGZvciAiJSUiIGNhc2U6Cisg
ICAgICAgIGlmIChjID09ICclJykgeworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gcHJpbnRB
cmcoIiVjIiwgJyUnKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAg
ICAgIGVycm9yU3RyID0gcCAtIDI7CisgICAgICAgICAgICAgICAgZ290byBoYW5kbGVFcnJvcjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gQ2hlY2sgZm9yIEpTICglSjx4PikgZm9ybWF0dGluZyBleHRlbnNpb25zOgorICAgICAg
ICBpZiAoYyA9PSAnSicpIHsKKyAgICAgICAgICAgIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisg
ICAgICAgICAgICBjID0gKnArKzsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjID09ICdcMCcp
KSB7CisgICAgICAgICAgICAgICAgZXJyb3JTdHIgPSBwIC0gMjsgLy8gUmV3aW5kIHRvICUgaW4g
IiVKXDAiCisgICAgICAgICAgICAgICAgZ290byBoYW5kbGVFcnJvcjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGMgPT0gJysnKSB7CisgICAgICAgICAgICAgICAgdmVyYm9zZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgYz0gKnArKzsKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoYyA9PSAnXDAnKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJvclN0ciA9IHAgLSAz
OyAvLyBSZXdpbmQgdG8gJSBpbiAiJUorXDAiCisgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFu
ZGxlRXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgIC8vICVKcyAtIFdURjo6U3RyaW5nKgorICAgICAg
ICAgICAgY2FzZSAncyc6IHsKKyAgICAgICAgICAgICAgICBwcmludFdURlN0cmluZyhhcmdzLCB2
ZXJib3NlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gLy8gRU5EIHN3aXRjaC4KKworICAgICAgICAvLyBDaGVjayBmb3Igbm9uLUpTIGV4
dGVuc2lvbnM6CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnYicpIHsKKyAgICAgICAgICAgIGlu
dCB2YWx1ZSA9IHZhX2FyZyhhcmdzLCBpbnQpOworICAgICAgICAgICAgcHJpbnRBcmcoIiVzIiwg
dmFsdWUgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gSWYgd2UgZGlkbid0IGhhbmRsZSB0aGUgZm9ybWF0IGluIG9uZSBv
ZiB0aGUgYWJvdmUgY2FzZXMsCisgICAgICAgIC8vIHJld2luZCBwIGFuZCBsZXQgdGhlIHN0YW5k
YXJkIGZvcm1hdHRpbmcgY2hlY2sgaGFuZGxlIGl0CisgICAgICAgIC8vIGlmIHBvc3NpYmxlOgor
ICAgICAgICBwID0gc3RhcnRPZkZvcm1hdFNwZWNpZmllcjsKKyAgICAgICAgQVNTRVJUKCpwID09
ICclJyk7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIHN0YW5kYXJkIGZvcm1hdHRpbmc6CisgICAg
ICAgIC8vIEEgZm9ybWF0IHNwZWNpZmllciBhbHdheXMgc3RhcnRzIHdpdGggYSAlIGFuZCBlbmRz
IHdpdGggc29tZQorICAgICAgICAvLyBhbHBoYWJldC4gV2UnbGwgZG8gdGhlIHNpbXBsZSB0aGlu
ZyBhbmQgc2NhbiB1bnRpbCB0aGUgbmV4dAorICAgICAgICAvLyBhbHBoYWJldCwgb3IgdGhlIGVu
ZCBvZiBzdHJpbmcuCisKKyAgICAgICAgLy8gSW4gdGhlIGZvbGxvd2luZywgd2UncmUgZ29pbmcg
dG8gdXNlIGJ1ZmZlciBhcyBzdG9yYWdlIGZvciBhIGNvcHkKKyAgICAgICAgLy8gb2YgYSBzaW5n
bGUgZm9ybWF0IHNwZWNpZmllci4gSGVuY2UsIGNvbmNlcHR1YWxseSwgd2UgY2FuIHRoaW5rIG9m
CisgICAgICAgIC8vICdidWZmZXInIGFzIHN5bm9ueW1vdXMgd2l0aCAnYXJnRm9ybWF0JyBoZXJl
OgorCisjZGVmaW5lIEFCT1JUX0lGX0ZPUk1BVF9UT09fTE9ORyhjdXJyKSBcCisgICAgICAgIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
Y3VyciA+PSBlbmQpKSBcCisgICAgICAgICAgICAgICAgZ290byBmb3JtYXRUb29Mb25nOyAgICBc
CisgICAgICAgIH0gd2hpbGUgKGZhbHNlKQorICAgICAgICAKKyAgICAgICAgY3VyciA9IGJ1ZmZl
cjsKKyAgICAgICAgKmN1cnIrKyA9ICpwKys7IC8vIE91dHB1dCB0aGUgZmlyc3QgJSBpbiB0aGUg
Zm9ybWF0IHNwZWNpZmllci4KKyAgICAgICAgYyA9ICpwKys7IC8vIEdyYWIgdGhlIG5leHQgY2hh
ciBpbiB0aGUgZm9ybWF0IHNwZWNpZmllci4KKworICAgICAgICAvLyBDaGVja3MgZm9yIGxlYWRp
bmcgbW9kaWZpZXJzIGUuZy4gIiUtZCI6CisgICAgICAgIC8vICAgICAwLCAtLCAnICcsICssICdc
JycKKyAgICAgICAgaWYgKGMgPT0gJzAnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJyAnIHx8IGMgPT0g
JysnIHx8IGMgPT0gJ1wnJykgeworICAgICAgICAgICAgQUJPUlRfSUZfRk9STUFUX1RPT19MT05H
KGN1cnIpOworICAgICAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgICAgICBjID0gKnArKzsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrcyBmb3IgZGVjaW1hbCBkaWdpdCBmaWVsZCB3
aWR0aCBtb2RpZmllcnMgZS5nLiAiJTJmIjoKKyAgICAgICAgd2hpbGUgKGMgPj0gJzAnICYmIGMg
PD0gJzknKSB7CisgICAgICAgICAgICBBQk9SVF9JRl9GT1JNQVRfVE9PX0xPTkcoY3Vycik7Cisg
ICAgICAgICAgICAqY3VycisrID0gYzsKKyAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICB9
CisKKyAgICAgICAgLy8gQ2hlY2tzIGZvciAnLicgZS5nLiAiJTIuZiI6CisgICAgICAgIGlmIChj
ID09ICcuJykgeworICAgICAgICAgICAgQUJPUlRfSUZfRk9STUFUX1RPT19MT05HKGN1cnIpOwor
ICAgICAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgICAgICBjID0gKnArKzsKKworICAgICAg
ICAgICAgLy8gQ2hlY2tzIGZvciBkZWNpbWFsIGRpZ2l0IHByZWNpc2lvbiBtb2RpZmllcnMgIGUu
Zy4gIiUuMmYiOgorICAgICAgICAgICAgd2hpbGUgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Cisg
ICAgICAgICAgICAgICAgQUJPUlRfSUZfRk9STUFUX1RPT19MT05HKGN1cnIpOworICAgICAgICAg
ICAgICAgICpjdXJyKysgPSBjOworICAgICAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2tzIGZvciB0aGUgbW9kaWZpZXIgPG0+
IHdoZXJlIDxtPiBjYW4gYmU6CisgICAgICAgIC8vICAgICBsLCBoLCBqLCB0LCB6CisgICAgICAg
IC8vIGUuZy4gIiVsZCIKKyAgICAgICAgaWYgKGMgPT0gJ2wnIHx8IGMgPT0gJ2gnIHx8IGMgPT0g
J2onIHx8IGMgPT0gJ3QnIHx8IGMgPT0gJ3onKSB7CisgICAgICAgICAgICBBQk9SVF9JRl9GT1JN
QVRfVE9PX0xPTkcoY3Vycik7CisgICAgICAgICAgICAqY3VycisrID0gYzsKKyAgICAgICAgICAg
IGNoYXIgcHJldkNoYXIgPSBjOworICAgICAgICAgICAgYyA9ICpwKys7CisKKyAgICAgICAgICAg
IC8vIENoZWNrcyBmb3IgdGhlIG1vZGlmaWVyIGxsIG9yIGhoIGluICU8eD48bT46CisgICAgICAg
ICAgICBpZiAoKHByZXZDaGFyID09ICdsJyB8fCBwcmV2Q2hhciA9PSAnaCcpICYmIGMgPT0gcHJl
dkNoYXIpIHsKKyAgICAgICAgICAgICAgICBBQk9SVF9JRl9GT1JNQVRfVE9PX0xPTkcoY3Vycik7
CisgICAgICAgICAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgICAgICAgICAgYyA9ICpwKys7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVja3MgZm9yICU8eD4g
d2hlcmUgPHg+IGNhbiBiZToKKyAgICAgICAgLy8gICAgIGQsIGksIG4sIG8sIHUsIHgsIFgKKyAg
ICAgICAgLy8gQnV0IGhleSwgd2UncmUganVzdCBnb2luZyB0byBkbyB0aGUgc2ltcGxlIHRoaW5n
IGFuZCBhbGxvdyBhbnkKKyAgICAgICAgLy8gYWxwaGFiZXQuIFRoZSB1c2VyIGlzIGV4cGVjdGVk
IHRvIHBhc3MgY29ycmVjdCBmb3JtYXQgc3BlY2lmaWVycy4KKyAgICAgICAgLy8gV2Ugd29uJ3Qg
ZG8gYW55IGZvcm1hdCBjaGVja2luZyBoZXJlLiBXZSdsbCBqdXN0IHBhc3MgaXQgb24sIGFuZCB0
aGUKKyAgICAgICAgLy8gdW5kZXJseWluZyAuLi5wcmludGYoKSBpbXBsZW1lbnRhdGlvbiBtYXkg
ZG8gdGhlIG5lZWRlZCBjaGVja2luZworICAgICAgICAvLyBhdCBpdHMgZGlzY3JldGlvbi4KKyAg
ICAgICAgd2hpbGUgKGMgIT0gJ1wwJyAmJiAhaXNBU0NJSUFscGhhKGMpKSB7CisgICAgICAgICAg
ICBBQk9SVF9JRl9GT1JNQVRfVE9PX0xPTkcoY3Vycik7CisgICAgICAgICAgICAqY3VycisrID0g
YzsKKyAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICB9CisKKyAgICAgICAgQUJPUlRfSUZf
Rk9STUFUX1RPT19MT05HKGN1cnIpOworICAgICAgICAqY3VycisrID0gYzsKKyAgICAgICAgaWYg
KGMgPT0gJ1wwJykgeworICAgICAgICAgICAgLy8gVWggb2guIEJhZCBmb3JtYXQuIFdlIHNob3Vs
ZCBoYXZlIGdvdHRlbiBhbiBhbHBoYWJldCBpbnN0ZWFkLgorICAgICAgICAgICAgLy8gUHJpbnQg
dGhlIHN1cHBvc2VkIGZvcm1hdCBhcyBhIHN0cmluZyBpbnN0ZWFkOgorICAgICAgICAgICAgZXJy
b3JTdHIgPSBidWZmZXI7CisgICAgICAgICAgICBnb3RvIGhhbmRsZUVycm9yOworICAgICAgICB9
CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRoZSBhbHBoYSB0aGF0IHRlcm1pbmF0
ZXMgdGhlIGZvcm1hdC4KKyAgICAgICAgLy8gVGVybWluYXRlIHRoZSBidWZmZXIgKGkuZS4gYXJn
Rm9ybWF0KSBzdHJpbmc6CisgICAgICAgIEFTU0VSVChpc0FTQ0lJQWxwaGEoYykpOworICAgICAg
ICBBQk9SVF9JRl9GT1JNQVRfVE9PX0xPTkcoY3Vycik7CisgICAgICAgICpjdXJyID0gJ1wwJzsK
KworICAgICAgICBib29sIHN1Y2Nlc3MgPSBwcmludEFyZyhidWZmZXIsIGFyZ3MpOworICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGVycm9yU3RyID0gYnVmZmVyOworICAgICAg
ICAgICAgZ290byBoYW5kbGVFcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyN1bmRlZiBBQk9SVF9J
Rl9GT1JNQVRfVE9PX0xPTkcKKworICAgIHJldHVybjsKKworZm9ybWF0VG9vTG9uZzoKKyAgICAv
LyBQcmludCB0aGUgZXJyb3Igc3RyaW5nOgorICAgIEFTU0VSVCghIXN0YXJ0T2ZGb3JtYXRTcGVj
aWZpZXIpOworICAgIHAgPSBzdGFydE9mRm9ybWF0U3BlY2lmaWVyOworICAgIEFTU0VSVChwID49
IGZvcm1hdCk7CisgICAgcHJpbnRBcmcoIkVSUk9SIEAgRm9ybWF0IHRvbyBsb25nIGF0IFwiJXNc
IlxuIiwgcCk7CisgICAgcmV0dXJuOworCitoYW5kbGVFcnJvcjoKKyAgICAvLyBXZSd2ZSBnb3Qg
YW4gZXJyb3IuIENhbid0IGRvIGFueSBtb3JlIHdvcmsuIFByaW50IGFuIGVycm9yIG1lc3NhZ2Ug
aWYKKyAgICAvLyBwb3NzaWJsZSBhbmQgdGhlbiBqdXN0IHJldHVybi4KKworICAgIC8vIFRoZSBl
cnJvclN0ciBtYXkgYmUgcG9pbnRpbmcgaW50byB0aGUgbWlkZGxlIG9mIGJ1ZmZlciwgb3IgdGhl
IG9yaWdpbmFsCisgICAgLy8gZm9ybWF0IHN0cmluZy4gTW92ZSB0aGUgc3RyaW5nIHRvIGJ1ZmZl
ciBmb3IgY29uc2lzdGVuY3ksIGFuZCBhbHNvIHNvCisgICAgLy8gdGhhdCB3ZSBjYW4gc3RyaXAg
aXQgb2YgbmV3bGluZXMgYmVsb3cuCisgICAgaWYgKGVycm9yU3RyICE9IGJ1ZmZlcikgeworICAg
ICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKGVycm9yU3RyKTsKKyAgICAgICAgaWYgKGxlbmd0
aCA+IHNpemVvZihidWZmZXIpIC0gMSkKKyAgICAgICAgICAgIGxlbmd0aCA9IHNpemVvZihidWZm
ZXIpIC0gMTsKKyAgICAgICAgbWVtbW92ZShidWZmZXIsIGVycm9yU3RyLCBsZW5ndGgpOworICAg
ICAgICBidWZmZXJbbGVuZ3RoXSA9ICdcMCc7IC8vIFRlcm1pbmF0ZSB0aGUgbW92ZWQgZXJyb3Ig
c3RyaW5nLgorICAgIH0KKyAgICAvLyBTdHJpcCB0aGUgbmV3bGluZXM6CisgICAgY2hhciogY3Ag
PSBidWZmZXI7CisgICAgd2hpbGUgKCpjcCkgeworICAgICAgICBpZiAoKmNwID09ICdcbicpCisg
ICAgICAgICAgICAqY3AgPSAnICc7CisgICAgICAgIGNwKys7CisgICAgfQorICAgIC8vIFByaW50
IHRoZSBlcnJvciBzdHJpbmc6CisgICAgcHJpbnRBcmcoIkVSUk9SIEAgXCIlc1wiXG4iLCBidWZm
ZXIpOworfQorCisKK2Jvb2wgRm9ybWF0UHJpbnRlcjo6cHJpbnRBcmcoY29uc3QgY2hhciogZm9y
bWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1h
dCk7CisgICAgYm9vbCBzdWNjZXNzID0gcHJpbnRBcmcoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9l
bmQoYXJncyk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgRm9ybWF0UHJpbnRlcjo6
cHJpbnRBcmcoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgICAgaW50IGNv
dW50ID0gOjp2cHJpbnRmKGZvcm1hdCwgYXJncyk7CisgICAgcmV0dXJuIChjb3VudCA+PSAwKTsg
Ly8gRmFpbCBpZiBsZXNzIHRoYW4gMCBjaGFycyBwcmludGVkLgorfQorCisKKy8vICVKcyAtIFdU
Rjo6U3RyaW5nKgorLy8gdmVyYm9zZSBtb2RlIHByaW50czogV1RGOjpTdHJpbmcgIjx5b3VyIHN0
cmluZz4iCit2b2lkIEZvcm1hdFByaW50ZXI6OnByaW50V1RGU3RyaW5nKHZhX2xpc3QgYXJncywg
Ym9vbCB2ZXJib3NlKQoreworICAgIGNvbnN0IFN0cmluZyogc3RyID0gdmFfYXJnKGFyZ3MsIGNv
bnN0IFN0cmluZyopOworCisgICAgLy8gUHJpbnQgdmVyYm9zZSBoZWFkZXIgaWYgYXBwcm9wcmlh
dGU6CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50QXJnKCJXVEY6OlN0cmluZyBcIiIp
OworCisgICAgLy8gUHJpbnQgdGhlIHN0cmluZyBpdHNlbGY6CisgICAgaWYgKCFzdHItPmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoc3RyLT5pczhCaXQoKSkgeworICAgICAgICAgICAgY29uc3Qg
TENoYXIqIGNoYXJzID0gc3RyLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgcHJpbnRBcmco
IiVzIiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hhcnMpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IHN0ci0+Y2hhcmFjdGVyczE2
KCk7CisgICAgICAgICAgICBwcmludEFyZygiJVMiLCByZWludGVycHJldF9jYXN0PGNvbnN0IHdj
aGFyX3QqPihjaGFycykpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHJpbnQgdmVyYm9z
ZSBmb290ZXIgaWYgYXBwcm9wcmlhdGU6CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50
QXJnKCJcIiIpOworfQorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIGNsYXNzIEZpbGVG
b3JtYXRQcmludGVyCisvLyAgICAtIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSB0byBzdXBwb3J0
IGZwcmludGYuCisKK2NsYXNzIEZpbGVGb3JtYXRQcmludGVyOiBwdWJsaWMgRm9ybWF0UHJpbnRl
ciB7CitwdWJsaWM6CisgICAgRmlsZUZvcm1hdFByaW50ZXIoRklMRSopOworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIGJvb2wgcHJpbnRBcmcoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3Mp
OworCisgICAgRklMRSogbV9maWxlOworfTsKKworRmlsZUZvcm1hdFByaW50ZXI6OkZpbGVGb3Jt
YXRQcmludGVyKEZJTEUqIGZpbGUpCisgICAgOiBtX2ZpbGUoZmlsZSkKK3sgCit9CisKK2Jvb2wg
RmlsZUZvcm1hdFByaW50ZXI6OnByaW50QXJnKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBh
cmdzKQoreworICAgIGludCBjb3VudCA9IDo6dmZwcmludGYobV9maWxlLCBmb3JtYXQsIGFyZ3Mp
OworICAgIHJldHVybiAoY291bnQgPj0gMCk7IC8vIEZhaWwgaWYgbGVzcyB0aGFuIDAgY2hhcnMg
cHJpbnRlZC4KK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBjbGFzcyBTdHJpbmdG
b3JtYXRQcmludGVyCisvLyAgICAtIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSB0byBzdXBwb3J0
IHNwcmludGYuCisKK2NsYXNzIFN0cmluZ0Zvcm1hdFByaW50ZXI6IHB1YmxpYyBGb3JtYXRQcmlu
dGVyIHsKK3B1YmxpYzoKKyAgICBTdHJpbmdGb3JtYXRQcmludGVyKGNoYXIqIGJ1ZmZlcik7Citw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBwcmludEFyZyhjb25zdCBjaGFyKiBmb3JtYXQsIHZh
X2xpc3QgYXJncyk7CisKKyAgICBjaGFyKiBtX2J1ZmZlcjsKK307CisKK1N0cmluZ0Zvcm1hdFBy
aW50ZXI6OlN0cmluZ0Zvcm1hdFByaW50ZXIoY2hhciogYnVmZmVyKQorICAgIDogbV9idWZmZXIo
YnVmZmVyKQoreyAKK30KKworYm9vbCBTdHJpbmdGb3JtYXRQcmludGVyOjpwcmludEFyZyhjb25z
dCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpbnQgY291bnQgPSA6OnZzcHJp
bnRmKG1fYnVmZmVyLCBmb3JtYXQsIGFyZ3MpOworICAgIG1fYnVmZmVyICs9IGNvdW50OworICAg
IHJldHVybiAoY291bnQgPj0gMCk7IC8vIEZhaWwgaWYgbGVzcyB0aGFuIDAgY2hhcnMgcHJpbnRl
ZC4KK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBjbGFzcyBTdHJpbmdORm9ybWF0
UHJpbnRlcgorLy8gICAgLSBpbXBsZW1lbnRzIGZ1bmN0aW9uYWxpdHkgdG8gc3VwcG9ydCBzbnBy
aW50Zi4KKworY2xhc3MgU3RyaW5nTkZvcm1hdFByaW50ZXI6IHB1YmxpYyBGb3JtYXRQcmludGVy
IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdORm9ybWF0UHJpbnRlcihjaGFyKiBidWZmZXIsIHNpemVf
dCk7Citwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBwcmludEFyZyhjb25zdCBjaGFyKiBmb3Jt
YXQsIHZhX2xpc3QgYXJncyk7CisKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICBzaXplX3QgbV9z
aXplOworfTsKKworCitTdHJpbmdORm9ybWF0UHJpbnRlcjo6U3RyaW5nTkZvcm1hdFByaW50ZXIo
Y2hhciogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAs
IG1fc2l6ZShzaXplKQoreworfQorCitib29sIFN0cmluZ05Gb3JtYXRQcmludGVyOjpwcmludEFy
Zyhjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpZiAobV9zaXplID4g
MCkgeworICAgICAgICBpbnQgY291bnQgPSA6OnZzbnByaW50ZihtX2J1ZmZlciwgbV9zaXplLCBm
b3JtYXQsIGFyZ3MpOworCisgICAgICAgIC8vIEFjY29yZGluZyB0byB2c25wcmludGYgc3BlY3Ms
IC4uLgorICAgICAgICBib29sIHN1Y2Nlc3MgPSAoY291bnQgPj0gMCk7CisgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvdW50KSA+PSBtX3NpemUpIHsKKyAgICAgICAgICAgIC8vIElm
IGNvdW50ID4gc2l6ZSwgdGhlbiB3ZSBkaWRuJ3QgaGF2ZSBlbm91Z2ggYnVmZmVyIHNwYWNlLgor
ICAgICAgICAgICAgY291bnQgPSBtX3NpemU7CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGp1
c3QgdGhlIGJ1ZmZlciB0byB3aGF0J3MgbGVmdCBpZiBhcHByb3ByaWF0ZToKKyAgICAgICAgaWYg
KHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIG1fYnVmZmVyICs9IGNvdW50OworICAgICAgICAgICAg
bV9zaXplIC09IGNvdW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAg
IH0KKyAgICAvLyBObyBtb3JlIHJvb20gdG8gcHJpbnQuIERlY2xhcmUgaXQgYSBmYWlsOgorICAg
IHJldHVybiBmYWxzZTsKK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBWTUluc3Bl
Y3RvciBwcmludGYgZmFtaWx5IG9mIG1ldGhvZHM6CisKK3ZvaWQgVk1JbnNwZWN0b3I6OmZwcmlu
dGYoRklMRSogZmlsZSwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBh
cmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgRmlsZUZvcm1hdFByaW50ZXIo
ZmlsZSkucHJpbnQoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQg
Vk1JbnNwZWN0b3I6OnByaW50Zihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9s
aXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBGb3JtYXRQcmludGVy
KCkucHJpbnQoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQgVk1J
bnNwZWN0b3I6OnNwcmludGYoY2hhciogYnVmZmVyLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikK
K3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBT
dHJpbmdGb3JtYXRQcmludGVyKGJ1ZmZlcikucHJpbnQoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9l
bmQoYXJncyk7Cit9CisKK3ZvaWQgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGNoYXIqIGJ1ZmZlciwg
c2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJn
czsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIFN0cmluZ05Gb3JtYXRQcmludGVy
KGJ1ZmZlciwgc2l6ZSkucHJpbnQoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFZNSU5TUEVDVE9SKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNSW5zcGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNSW5zcGVjdG9y
LmgJKHJldmlzaW9uIDEzMjk3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9WTUluc3BlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw5IEBACiAKICNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSA8c3RkYXJn
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDYgKzQ0LDQyIEBAIHB1YmxpYzogICAgCiAgICAg
c3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcEZyYW1lMChDYWxsRnJhbWUqKTsKICAg
ICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wRnJhbWUoQ2FsbEZyYW1lKiwgY29u
c3QgY2hhciogcHJlZml4ID0gMCwgY29uc3QgY2hhciogZnVuY05hbWUgPSAwLCBjb25zdCBjaGFy
KiBmaWxlID0gMCwgaW50IGxpbmUgPSAtMSk7CiAgICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRF
IGludCBjb3VudEZyYW1lcyhDYWxsRnJhbWUqKTsKKworICAgIC8vIFNwZWNpYWwgZmFtaWx5IG9m
IC4uLnByaW50ZigpIGZ1bmN0aW9ucyB0aGF0IHN1cHBvcnQsIGluIGFkZGl0aW9uIHRvIHRoZQor
ICAgIC8vIHN0YW5kYXJkICUgZm9ybWF0cyAoZS5nLiAlZCwgJXMsIGV0YyksIHRoZSBmb2xsb3dp
bmcgZXh0cmEgSlNDIGZvcm1hdHRpbmcKKyAgICAvLyBvcHRpb25zLCAlSjx4Piwgd2hlcmUgPHg+
IGNvbnNpc3RzIG9mOgorICAgIC8vCisgICAgLy8gICArICAgIC0gdmVyYm9zZSBtb2RlIG1vZGlm
aWVyLgorICAgIC8vICAgICAgICAgIFVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBvcHRp
b25zLiBNdXN0IGNvbWUgYWZ0ZXIgdGhlICVKLgorICAgIC8vICAgcyAgICAtIFdURjo6U3RyaW5n
KgorICAgIC8vCisgICAgLy8gRXhhbXBsZXMgb2YgdXNhZ2U6CisgICAgLy8KKyAgICAvLyAgICBX
VEY6OlN0cmluZyBzdHIoIk15IFdURiBTdHJpbmciKTsKKyAgICAvLworICAgIC8vICAgIC8vIFBy
aW50aW5nIHRoZSBzdHJpbmcuIFdpbGwgcHJpbnQ6CisgICAgLy8gICAgLy8gVGhlIHd0ZiBzdHJp
bmcgc2F5czogIk15IFdURiBTdHJpbmciIGFuZCBpcyBOT1QgRU1QVFkuCisgICAgLy8KKyAgICAv
LyAgICBWTUluc3BlY3Rvcjo6cHJpbnRmKCJUaGUgd3RmIHN0cmluZyBzYXlzOiBcIiVKc1wiIGFu
ZCBpcyAlc1xuIiwKKyAgICAvLyAgICAgICAgJnN0ciwgc3RyLmlzRW1wdHkoKT8iRU1QVFkiOiJO
T1QgRU1QVFkiKTsKKyAgICAvLworICAgIC8vICAgIC8vIFByaW50aW5nIHRoZSBzdHJpbmcgd2l0
aCB2ZXJib3NlIG1vZGUuIFdpbGwgcHJpbnQ6CisgICAgLy8gICAgLy8gPFdURjo6U3RyaW5nICJN
eSBXVEYgU3RyaW5nIj4KKyAgICAvLworICAgIC8vICAgIFZNSW5zcGVjdG9yOjpwcmludGYoIjwl
SitzPlxuIiwgJnN0cik7CisgICAgLy8KKyAgICAvLyBBbHNvIGFkZGVkIHNvbWUgY29udmVuaWVu
Y2Ugbm9uLUpTIGZvcm1hdHM6CisgICAgLy8KKyAgICAvLyAgICViICAgIC0gYm9vbGVhbiAodmFf
YXJncyB3aWxsIGxvb2sgZm9yIGFuIGludCkuCisgICAgLy8gICAgICAgICAgIFByaW50cyBUUlVF
IGlmIG5vbi16ZXJvLCBlbHNlIHByaW50cyBGQUxTRS4KKyAgICAvLworICAgIC8vIENhdXRpb246
IHRoZSB1c2VyIGlzIGV4cGVjdGVkIHRvIHBhc3MgdGhlIGNvcnJlY3RseSBtYXRjaGVkIGFyZ3Vt
ZW50cworICAgIC8vIHRvIHBhaXIgd2l0aCB0aGUgY29ycmVzcG9uZGluZyAlIGZvbWF0dGluZy4K
KworICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZwcmludGYoRklMRSosIGNvbnN0
IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmludGYoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNwcmludGYoY2hhciosIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyAgICBz
dGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbnByaW50ZihjaGFyKiwgc2l6ZV90LCBjb25z
dCBjaGFyKiBmb3JtYXQsIC4uLik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEzMjk3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEyLTEwLTMwICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBIEpTQyBwcmludGYgKHN1cHBvcnQgZm9yICVKK3Mg
YW5kICViKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMDU2Ni4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBmb3J3YXJkaW5nIGhlYWRlciBmb3IgVk1JbnNwZWN0b3IuaC4KKworICAgICAgICBO
byBuZXcgdGVzdHMgbmVlZGVkIGZvciB0aGlzLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuaDogQWRkZWQuCisKIDIwMTItMTAtMzAgIENoYXJs
ZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFtCbGFj
a0JlcnJ5XSBQdXJnZUNyZWRlbnRpYWwgc2hvdWxkIGFsc28gcHVyZ2UgdGhlIHBlcnNpc3RlZCBj
cmVkZW50aWFsIHN0b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9p
bnRlcnByZXRlci9WTUluc3BlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1ZNSW5zcGVjdG9yLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9WTUluc3BlY3Rv
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViQ29yZV9GV0RfVk1JbnNwZWN0b3Jf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9WTUluc3BlY3Rvcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVk1JbnNwZWN0b3IuaD4KKyNlbmRpZgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyOTc5KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTAtMzAgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEEgSlNDIHByaW50ZiAoc3VwcG9y
dCBmb3IgJUorcyBhbmQgJWIpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAwNTY2LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIFZNSW5zcGVjdG9yOjpmcHJp
bnRmKCkgc3ByaW50ZigpIGFuZCBzbnByaW50ZigpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZTogQWRkZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9WTUluc3BlY3Rvci5jcHA6IEFkZGVkLgorICAg
ICAgICAoVEVTVCk6CisKIDIwMTItMTAtMzAgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgd2Via2l0LXBhdGNoIHJlYmFzZWxpbmUqOiBhZGQgbW9yZSBoZWxw
ZnVsIGxvZ2dpbmcKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzI5Nzgp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3IEBACiAJCUY2RjQ5QzZCMTU1
NDVDQTcwMDA3RjM5RCAvKiBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNkY0OUM2NjE1NTQ1
QzhEMDAwN0YzOUQgLyogRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwICovOyB9
OwogCQlGNkZEREREMzE0MjQxQUQ0MDA0RjE3MjkgLyogUHJpdmF0ZUJyb3dzaW5nUHVzaFN0YXRl
Tm9IaXN0b3J5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjZGRERERDIxNDI0MUFENDAwNEYxNzI5IC8qIFByaXZhdGVCcm93c2luZ1B1
c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJRjZGRERERDYxNDI0MUM2RjAw
NEYxNzI5IC8qIHB1c2gtc3RhdGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNkZERERENTE0MjQxQzQ4MDA0RjE3MjkgLyogcHVzaC1z
dGF0ZS5odG1sICovOyB9OworCQlGRTIxN0VDRDE2NDBBNTRBMDA1Mjk4OEIgLyogVk1JbnNwZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUy
MTdFQ0MxNjQwQTU0QTAwNTI5ODhCIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKIC8qIEVuZCBQ
QlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkg
c2VjdGlvbiAqLwpAQCAtNDM4LDYgKzQzOSw3IEBACiAJCUY2RjQ5QzY3MTU1NDVDOEQwMDA3RjM5
RCAvKiBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNkZEREREMjE0MjQxQUQ0MDA0RjE3MjkgLyogUHJpdmF0ZUJy
b3dzaW5nUHVzaFN0YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHJpdmF0ZUJyb3dzaW5nUHVzaFN0YXRlTm9IaXN0b3J5Q2FsbGJh
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNkZERERENTE0MjQxQzQ4MDA0
RjE3MjkgLyogcHVzaC1zdGF0ZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gInB1
c2gtc3RhdGUuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjE3RUNDMTY0
MEE1NEEwMDUyOTg4QiAvKiBWTUluc3BlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTcxOCw2ICs3MjAsNyBAQAogCQlCQ0I5RUI2
NjExMjM2NkQ4MDBBMTM3RTAgLyogVGVzdHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUZFMjE3RUNCMTY0MEE1NEEwMDUyOTg4QiAvKiBKYXZhU2NyaXB0
Q29yZSAqLywKIAkJCQlDMDg1ODdGOTEzRkVDMzlCMDAxRUY0RTUgLyogVGVzdFdlYktpdEFQSSAq
LywKIAkJCQlDMDdFNkNBRDEzRkQ2NzY1MDAzOEIyMkIgLyogbWFjICovLAogCQkJCTQ0MEExRDM2
MTRBMDEwMDAwMDhBNjZGMiAvKiBXZWJDb3JlICovLApAQCAtODE2LDYgKzgxOSwxNCBAQAogCQkJ
cGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUZFMjE3RUNC
MTY0MEE1NEEwMDUyOTg4QiAvKiBKYXZhU2NyaXB0Q29yZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkUyMTdFQ0MxNjQwQTU0QTAwNTI5ODhCIC8qIFZN
SW5zcGVjdG9yLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gSmF2YVNjcmlwdENvcmU7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8K
IAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KQEAgLTEwMDQsNiArMTAxNSw3
IEBACiAJCQkJMjk0M0JFODYxNjFERkVCODAwOTk5RTNEIC8qIFVzZXJDb250ZW50VGVzdC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTRGNEQyQzBFMTYyNkZFMjcwMDMyMEZFMSAvKiBNZW1vcnlJbnN0
cnVtZW50YXRpb25UZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3OEU2NDczMTYzMjY0NkQw
MEI2QzY3NiAvKiBJbmplY3RlZEJ1bmRsZUZyYW1lSGl0VGVzdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGRTIxN0VDRDE2NDBBNTRBMDA1Mjk4OEIgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL1ZN
SW5zcGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0ph
dmFTY3JpcHRDb3JlL1ZNSW5zcGVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvVk1JbnNwZWN0b3IuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDY4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgPGludGVycHJldGVyL1ZNSW5zcGVjdG9yLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworLy8gVGhlcmUn
cyBub3QgbXVjaCB3ZSBjYW4gdGVzdCBmb3IgdGhlIFZNSW5zcGVjdG9yOjpwcmludGYoKSBjYXNl
IGV4Y2VwdCB0bworLy8gbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNyYXNoLiBVbmZvcnR1bmF0ZWx5
LCB3ZSBhbHNvIGRvbid0IHdhbnQgYWxsIHRoZQorLy8gdGVzdCBzdHJpbmdzIGNyb3dkaW5nIG91
dCBzdGRvdXQuIFNvLCB3ZSBmb3JlZ28gdGhlIHByaW50ZiB0ZXN0cy4KKy8vIE5PVEUgdGhhdCB0
aGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IG9mIFZNSW5zcGVjdG9yOjpwcmludGYoKSBpcyB0aGUK
Ky8vIGZvcm1hdHRpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIGl0IGlzIGFyZSBhbHJlYWR5IGJlaW5n
IHRlc3RlZCBieSB0aGUKKy8vIGZwcmludGYoKSBhbmQgc3ByaW50ZigpIGNhc2VzLgorCisKKy8v
IFRoZSBWTUluc3BlY3Rvcjo6ZnByaW50ZigpIHRlc3Qgd29ya3MgYnkgcHJpbnRpbmcgdGhlIHN0
cmluZyB0byBhIHRlbXAgZmlsZSwKKy8vIGFuZCB0aGVuIHJlYWRpbmcgdGhlIGZpbGUgY29udGVu
dCBiYWNrIGludG8gYSBidWZmZXIsIHdoaWNoIHdlLCBpbiB0dXJuLAorLy8gY29tcGFyZSBhZ2Fp
bnN0IHRoZSBleHBlY3RlZCBzdHJpbmcuCisKK1RFU1QoSlNDLCBWTUluc3BlY3RvckZwcmludGYp
Cit7CisjaWYgRU5BQkxFKFZNSU5TUEVDVE9SKQorICAgIGNoYXIgYWN0dWFsWzEwMjRdOworICAg
IGNoYXIgZXhwZWN0ZWRbMTAyNF07CisgICAgY29uc3QgY2hhciogZm9ybWF0OworICAgIGNvbnN0
IGNoYXIqIGV4cGVjdGVkTGl0ZXJhbDsKKyAgICBGSUxFKiBmaWxlOworICAgIGNvbnN0IGNoYXIq
IGZpbGVuYW1lID0gIi90bXAvVk1JbnNwZWN0b3JGcHJpbnRmVGVzdC50eHQiOworICAgIHNpemVf
dCBzaXplOworCisjZGVmaW5lIE9QRU5fRklMRShmaWxlKSAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInciKTsgICAgICAgICAgICBcCisgICAgfSB3
aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwp
ICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgZmNsb3NlKGZpbGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOyAgICAgICAgICAgIFwKKyAgICAgICAg
ZnNlZWsoZmlsZSwgMCwgU0VFS19FTkQpOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2l6ZSA9
IGZ0ZWxsKGZpbGUpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV3aW5kKGZpbGUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZnJlYWQoYWN0dWFsLCAxLCBz
aXplLCBmaWxlKTsgICAgICAgICAgIFwKKyAgICAgICAgYWN0dWFsW3NpemVdID0gJ1wwJzsgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmNsb3NlKGZpbGUpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworICAgIC8vIFRlc3Rpbmcgc3RhbmRh
cmQgZGVmYXVsdCBmb3JtYXQgc3BlY2lmaWVyczoKKyAgICAvLyBOb3RlOiBzaG91bGQgd29yayBq
dXN0IGxpa2Ugc3ByaW50Zi4gU28sIHdlIGp1c3QgY29tcGFyZSBhZ2FpbnN0IHRoYXQuCisgICAg
bWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgLy8gVGhlIGNvbXBpbGVy
IHdhcm5pbmcgZmxhZ3MgYXJlIGNvbmZpZ3VyZWQgdG8gZXhwZWN0IGEgbGl0ZXJhbCBzdHJpbmcg
Zm9yCisgICAgLy8gOjpzcHJpbnRmIGJlbG93LiBTbywgdXNlIGEgI2RlZmluZSBmb3IgdGhpcyBv
bmUgY2FzZSB0byBrZWVwIHRoZQorICAgIC8vIGNvbXBpbGVyIGhhcHB5LgorI3VuZGVmIExJVEVS
QUxfRk9STUFUCisjZGVmaW5lIExJVEVSQUxfRk9STUFUICInJSUlJScgICAgICAgICAgICAgICAg
ICAgICAgICAgPT0+ICclJSdcbiIKKworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3Bl
Y3Rvcjo6ZnByaW50ZihmaWxlLCBMSVRFUkFMX0ZPUk1BVCk7CisgICAgUkVBRF9BTkRfQ0xPU0Vf
RklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgTElURVJBTF9GT1JN
QVQpOworCisjdW5kZWYgTElURVJBTF9GT1JNQVQKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVh
bCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVh
bCkpOworICAgIGZvcm1hdCA9ICInJSVjJywgJ3gnICAgICAgICAgICAgICAgICAgICA9PT4gJyVj
J1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmls
ZSwgZm9ybWF0LCAneCcpOworICAgIFJFQURfQU5EX0NMT1NFX0ZJTEUoZmlsZSwgYWN0dWFsKTsK
KyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgJ3gnKTsKKyAgICBBU1NFUlRfRVEoc3Ry
Y21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6
ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSUqYycsIDgsICd4JyAgICAgICAgICAgICAg
ICA9PT4gJyUqYydcbiI7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9yOjpm
cHJpbnRmKGZpbGUsIGZvcm1hdCwgOCwgJ3gnKTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZp
bGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsIDgsICd4Jyk7Cisg
ICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQo
YWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlcycsIFwiaGVs
bG8gd29ybGRcIiAgICAgICAgICA9PT4gJyVzJ1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7Cisg
ICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmlsZSwgZm9ybWF0LCAiaGVsbG8gd29ybGQiKTsKKyAg
ICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4cGVj
dGVkLCBmb3JtYXQsICJoZWxsbyB3b3JsZCIpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFs
LCBleHBlY3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFs
KSk7CisgICAgZm9ybWF0ID0gIiclJSpzJywgOCwgXCJoZWxsbyB3b3JsZFwiICAgICAgPT0+ICcl
KnMnXG4iOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6ZnByaW50Zihm
aWxlLCBmb3JtYXQsIDgsICJoZWxsbyB3b3JsZCIpOworICAgIFJFQURfQU5EX0NMT1NFX0ZJTEUo
ZmlsZSwgYWN0dWFsKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgOCwgImhlbGxv
IHdvcmxkIik7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisK
KyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAi
JyUlKnMnLCA4LCBcImhlbGxvXCIgICAgICAgICAgICA9PT4gJyUqcydcbiI7CisgICAgT1BFTl9G
SUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsIGZvcm1hdCwgOCwgImhl
bGxvIik7CisgICAgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3By
aW50ZihleHBlY3RlZCwgZm9ybWF0LCA4LCAiaGVsbG8iKTsKKyAgICBBU1NFUlRfRVEoc3RyY21w
KGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9m
KGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSVkJywgOTg3NjU0MzIxICAgICAgICAgICAgICA9
PT4gJyVkJ1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmlu
dGYoZmlsZSwgZm9ybWF0LCA5ODc2NTQzMjEpOworICAgIFJFQURfQU5EX0NMT1NFX0ZJTEUoZmls
ZSwgYWN0dWFsKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgOTg3NjU0MzIxKTsK
KyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNl
dChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSV1JywgNDI3
NjU0MzIxMHUgICAgICAgICAgICA9PT4gJyV1J1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7Cisg
ICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmlsZSwgZm9ybWF0LCA0Mjc2NTQzMjEwdSk7CisgICAg
UkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBlY3Rl
ZCwgZm9ybWF0LCA0Mjc2NTQzMjEwdSk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4
cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsK
KyAgICBmb3JtYXQgPSAiJyUldScsIDB4ZmZmZmZmZmYgICAgICAgICAgICAgPT0+ICcldSdcbiI7
CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsIGZv
cm1hdCwgMHhmZmZmZmZmZik7CisgICAgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwp
OworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCAweGZmZmZmZmZmKTsKKyAgICBBU1NF
UlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWws
ICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSV4JywgMHhmZmZmZmZmZiAg
ICAgICAgICAgICA9PT4gJyV4J1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1JbnNw
ZWN0b3I6OmZwcmludGYoZmlsZSwgZm9ybWF0LCAweGZmZmZmZmZmKTsKKyAgICBSRUFEX0FORF9D
TE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQs
IDB4ZmZmZmZmZmYpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDAp
OworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0
ID0gIiclJXAnLCAodm9pZCopMHhhYmNkYmFiZSAgICAgID09PiAnJXAnXG4iOworICAgIE9QRU5f
RklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6ZnByaW50ZihmaWxlLCBmb3JtYXQsICh2b2lk
KikweGFiY2RiYWJlKTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7Cisg
ICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsICh2b2lkKikweGFiY2RiYWJlKTsKKyAgICBB
U1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1
YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSVsdScsIDEyMzQ1Njc4
OTA5ODc2NTQzMjF1bCA9PT4gJyVsdSdcbiI7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZN
SW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsIGZvcm1hdCwgMTIzNDU2Nzg5MDk4NzY1NDMyMXVsKTsK
KyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4
cGVjdGVkLCBmb3JtYXQsIDEyMzQ1Njc4OTA5ODc2NTQzMjF1bCk7CisgICAgQVNTRVJUX0VRKHN0
cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNp
emVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlZicsIDEyMzQuNTY3ICAgICAgICAgICAg
ICAgPT0+ICclZidcbiI7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9yOjpm
cHJpbnRmKGZpbGUsIGZvcm1hdCwgMTIzNC41NjcpOworICAgIFJFQURfQU5EX0NMT1NFX0ZJTEUo
ZmlsZSwgYWN0dWFsKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgMTIzNC41Njcp
OworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgbWVt
c2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJS4yZics
IDEyMzQuNTY3ICAgICAgICAgICAgID09PiAnJS4yZidcbiI7CisgICAgT1BFTl9GSUxFKGZpbGUp
OworICAgIFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsIGZvcm1hdCwgMTIzNC41NjcpOworICAg
IFJFQURfQU5EX0NMT1NFX0ZJTEUoZmlsZSwgYWN0dWFsKTsKKyAgICA6OnNwcmludGYoZXhwZWN0
ZWQsIGZvcm1hdCwgMTIzNC41NjcpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBl
Y3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7Cisg
ICAgZm9ybWF0ID0gIiclJTEwLjJmJywgMTIzNC41NjcgICAgICAgICAgID09PiAnJTEwLjJmJ1xu
IjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmlsZSwg
Zm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwp
OworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgQVNTRVJU
X0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAn
eicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlMDEwLjJmJywgMTIzNC41Njcg
ICAgICAgICAgPT0+ICclMDEwLjJmJ1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1J
bnNwZWN0b3I6OmZwcmludGYoZmlsZSwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgUkVBRF9BTkRf
Q0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0
LCAxMjM0LjU2Nyk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7
CisKKyAgICAvLyBCYWQgLyB3ZWlyZCBmb3JtYXRzOgorICAgIG1lbXNldChhY3R1YWwsICd6Jywg
c2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSU1LjQnLCA5ODc2NTQzMjEgICAgICAg
ICAgICA9PT4gJyU1LjQnXG4iOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rv
cjo6ZnByaW50ZihmaWxlLCBmb3JtYXQsIDk4NzY1NDMyMSk7CisgICAgUkVBRF9BTkRfQ0xPU0Vf
RklMRShmaWxlLCBhY3R1YWwpOworICAgIGV4cGVjdGVkTGl0ZXJhbCA9ICInJTUuNCcsIDk4NzY1
NDMyMSAgICAgICAgICAgID09PiAnRVJST1IgQCBcIiU1LjQnIFwiXG4iOworICAgIEFTU0VSVF9F
UShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZExpdGVyYWwpLCAwKTsKKworICAgIG1lbXNldChhY3R1
YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSU1LjQnICclJWQnLCA5
ODc2NTQzMjEsIDQgICAgPT0+ICclNS40JyAnJWQnXG4iOworICAgIE9QRU5fRklMRShmaWxlKTsK
KyAgICBWTUluc3BlY3Rvcjo6ZnByaW50ZihmaWxlLCBmb3JtYXQsIDk4NzY1NDMyMSwgNCk7Cisg
ICAgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBl
Y3RlZCwgZm9ybWF0LCA5ODc2NTQzMjEsIDQpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFs
LCBleHBlY3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFs
KSk7CisgICAgZm9ybWF0ID0gIiclJXcnICclJWQnLCA5ODc2NTQzMjEsIDYgICAgICA9PT4gJyV3
JyAnJWQnXG4iOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6ZnByaW50
ZihmaWxlLCBmb3JtYXQsIDk4NzY1NDMyMSwgNik7CisgICAgUkVBRF9BTkRfQ0xPU0VfRklMRShm
aWxlLCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCA5ODc2NTQzMjEs
IDYpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisKKyAg
ICAvLyBUZXN0aW5nIHRoZSAlYiBleHRlbnNpb246CisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBz
aXplb2YoYWN0dWFsKSk7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9yOjpm
cHJpbnRmKGZpbGUsICInJSViJywgMCAgICAgICAgICA9PT4gJyViJ1xuIiwgMCk7CisgICAgUkVB
RF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0
dWFsLCAiJyViJywgMCAgICAgICAgICA9PT4gJ0ZBTFNFJ1xuIiksIDApOworCisgICAgbWVtc2V0
KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAg
IFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsICInJSViJywgMSAgICAgICAgICA9PT4gJyViJ1xu
IiwgMSk7CisgICAgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIEFTU0VS
VF9FUShzdHJjbXAoYWN0dWFsLCAiJyViJywgMSAgICAgICAgICA9PT4gJ1RSVUUnXG4iKSwgMCk7
CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBPUEVOX0ZJ
TEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmlsZSwgIiclJWInLCAtMTIzNDU2
Nzg5ID09PiAnJWInXG4iLCAtMTIzNDU2Nzg5KTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZp
bGUsIGFjdHVhbCk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsICInJWInLCAtMTIzNDU2
Nzg5ID09PiAnVFJVRSdcbiIpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9m
KGFjdHVhbCkpOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6ZnByaW50
ZihmaWxlLCAiJyUlYicsIDEyMzQ1Njc4OSAgPT0+ICclYidcbiIsIDEyMzQ1Njc4OSk7CisgICAg
UkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIEFTU0VSVF9FUShzdHJjbXAo
YWN0dWFsLCAiJyViJywgMTIzNDU2Nzg5ICA9PT4gJ1RSVUUnXG4iKSwgMCk7CisKKworICAgIC8v
IFRlc3RpbmcgdGhlICVKPHg+IGV4dGVuc2lvbnM6CisgICAgU3RyaW5nIHN0cjEoIlRlc3QgV1RG
IFN0cmluZyIpOworICAgIFN0cmluZyBzdHIyKCIiKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6
Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rv
cjo6ZnByaW50ZihmaWxlLCAiJyUlSnMnIGlzICUlcywgJnN0cjEsIHN0cjEuaXNFbXB0eSgpP1wi
RU1QVFlcIjpcIk5PVCBFTVBUWVwiICA9PT4gJyVKcycgaXMgJXNcbiIsCisgICAgICAgICZzdHIx
LCBzdHIxLmlzRW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVNUFRZIik7CisgICAgUkVBRF9BTkRf
Q0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIGV4cGVjdGVkTGl0ZXJhbCA9ICInJUpzJyBp
cyAlcywgJnN0cjEsIHN0cjEuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiICA9PT4g
J1Rlc3QgV1RGIFN0cmluZycgaXMgTk9UIEVNUFRZXG4iOworICAgIEFTU0VSVF9FUShzdHJjbXAo
YWN0dWFsLCBleHBlY3RlZExpdGVyYWwpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywg
c2l6ZW9mKGFjdHVhbCkpOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6
ZnByaW50ZihmaWxlLCAiJyUlSnMnIGlzICUlcywgJnN0cjIsIHN0cjIuaXNFbXB0eSgpP1wiRU1Q
VFlcIjpcIk5PVCBFTVBUWVwiICA9PT4gJyVKcycgaXMgJXNcbiIsCisgICAgICAgICZzdHIyLCBz
dHIyLmlzRW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVNUFRZIik7CisgICAgUkVBRF9BTkRfQ0xP
U0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIGV4cGVjdGVkTGl0ZXJhbCA9ICInJUpzJyBpcyAl
cywgJnN0cjIsIHN0cjIuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiICA9PT4gJycg
aXMgRU1QVFlcbiI7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkTGl0ZXJh
bCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAg
T1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsICInJSVKK3Mn
IGlzICUlcywgJnN0cjEsIHN0cjEuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiID09
PiAnJUorcycgaXMgJXNcbiIsCisgICAgICAgICZzdHIxLCBzdHIxLmlzRW1wdHkoKSA/ICJFTVBU
WSIgOiAiTk9UIEVNUFRZIik7CisgICAgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwp
OworICAgIGV4cGVjdGVkTGl0ZXJhbCA9ICInJUorcycgaXMgJXMsICZzdHIxLCBzdHIxLmlzRW1w
dHkoKT9cIkVNUFRZXCI6XCJOT1QgRU1QVFlcIiA9PT4gJ1dURjo6U3RyaW5nIFwiVGVzdCBXVEYg
U3RyaW5nXCInIGlzIE5PVCBFTVBUWVxuIjsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwg
ZXhwZWN0ZWRMaXRlcmFsKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihh
Y3R1YWwpKTsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYo
ZmlsZSwgIiclJUorcycgaXMgJSVzLCAmc3RyMiwgc3RyMi5pc0VtcHR5KCk/XCJFTVBUWVwiOlwi
Tk9UIEVNUFRZXCIgPT0+ICclSitzJyBpcyAlc1xuIiwKKyAgICAgICAgJnN0cjIsIHN0cjIuaXNF
bXB0eSgpID8gIkVNUFRZIiA6ICJOT1QgRU1QVFkiKTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxF
KGZpbGUsIGFjdHVhbCk7CisgICAgZXhwZWN0ZWRMaXRlcmFsID0gIiclSitzJyBpcyAlcywgJnN0
cjIsIHN0cjIuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiID09PiAnV1RGOjpTdHJp
bmcgXCJcIicgaXMgRU1QVFlcbiI7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVj
dGVkTGl0ZXJhbCksIDApOworCisjdW5kZWYgT1BFTl9GSUxFCisjdW5kZWYgUkVBRF9BTkRfQ0xP
U0VfRklMRQorCisjZW5kaWYKK30KKworCitURVNUKEpTQywgVk1JbnNwZWN0b3JTcHJpbnRmKQor
eworI2lmIEVOQUJMRShWTUlOU1BFQ1RPUikKKyAgICBjaGFyIGFjdHVhbFsxMDI0XTsKKyAgICBj
aGFyIGV4cGVjdGVkWzEwMjRdOworICAgIGNvbnN0IGNoYXIqIGZvcm1hdDsKKyAgICBjb25zdCBj
aGFyKiBleHBlY3RlZExpdGVyYWw7CisKKyAgICAvLyBUZXN0aW5nIHN0YW5kYXJkIGRlZmF1bHQg
Zm9ybWF0IHNwZWNpZmllcnM6CisgICAgLy8gTm90ZTogc2hvdWxkIHdvcmsganVzdCBsaWtlIHNw
cmludGYuIFNvLCB3ZSBqdXN0IGNvbXBhcmUgYWdhaW5zdCB0aGF0LgorICAgIG1lbXNldChhY3R1
YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIC8vIFRoZSBjb21waWxlciB3YXJuaW5nIGZs
YWdzIGFyZSBjb25maWd1cmVkIHRvIGV4cGVjdCBhIGxpdGVyYWwgc3RyaW5nIGZvcgorICAgIC8v
IDo6c3ByaW50ZiBiZWxvdy4gU28sIHVzZSBhICNkZWZpbmUgZm9yIHRoaXMgb25lIGNhc2UgdG8g
a2VlcCB0aGUKKyAgICAvLyBjb21waWxlciBoYXBweS4KKyN1bmRlZiBMSVRFUkFMX0ZPUk1BVAor
I2RlZmluZSBMSVRFUkFMX0ZPUk1BVCAiJyUlJSUnICAgICAgICAgICAgICAgICAgICAgICAgID09
PiAnJSUnXG4iCisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCBMSVRFUkFMX0ZPUk1B
VCk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBMSVRFUkFMX0ZPUk1BVCk7CisjdW5kZWYgTElU
RVJBTF9GT1JNQVQKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsK
KworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9
ICInJSVjJywgJ3gnICAgICAgICAgICAgICAgICAgICA9PT4gJyVjJ1xuIjsKKyAgICBWTUluc3Bl
Y3Rvcjo6c3ByaW50ZihhY3R1YWwsIGZvcm1hdCwgJ3gnKTsKKyAgICA6OnNwcmludGYoZXhwZWN0
ZWQsIGZvcm1hdCwgJ3gnKTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQp
LCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZv
cm1hdCA9ICInJSUqYycsIDgsICd4JyAgICAgICAgICAgICAgICA9PT4gJyUqYydcbiI7CisgICAg
Vk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCBmb3JtYXQsIDgsICd4Jyk7CisgICAgOjpzcHJp
bnRmKGV4cGVjdGVkLCBmb3JtYXQsIDgsICd4Jyk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1
YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1
YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlcycsIFwiaGVsbG8gd29ybGRcIiAgICAgICAgICA9PT4g
JyVzJ1xuIjsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWwsIGZvcm1hdCwgImhlbGxv
IHdvcmxkIik7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsICJoZWxsbyB3b3JsZCIp
OworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgbWVt
c2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJSpzJywg
OCwgXCJoZWxsbyB3b3JsZFwiICAgICAgPT0+ICclKnMnXG4iOworICAgIFZNSW5zcGVjdG9yOjpz
cHJpbnRmKGFjdHVhbCwgZm9ybWF0LCA4LCAiaGVsbG8gd29ybGQiKTsKKyAgICA6OnNwcmludGYo
ZXhwZWN0ZWQsIGZvcm1hdCwgOCwgImhlbGxvIHdvcmxkIik7CisgICAgQVNTRVJUX0VRKHN0cmNt
cChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVv
ZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlKnMnLCA4LCBcImhlbGxvXCIgICAgICAgICAg
ICA9PT4gJyUqcydcbiI7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCBmb3JtYXQs
IDgsICJoZWxsbyIpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCA4LCAiaGVsbG8i
KTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1l
bXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSVkJywg
OTg3NjU0MzIxICAgICAgICAgICAgICA9PT4gJyVkJ1xuIjsKKyAgICBWTUluc3BlY3Rvcjo6c3By
aW50ZihhY3R1YWwsIGZvcm1hdCwgOTg3NjU0MzIxKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQs
IGZvcm1hdCwgOTg3NjU0MzIxKTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0
ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAg
IGZvcm1hdCA9ICInJSV1JywgNDI3NjU0MzIxMHUgICAgICAgICAgICA9PT4gJyV1J1xuIjsKKyAg
ICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWwsIGZvcm1hdCwgNDI3NjU0MzIxMHUpOworICAg
IDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCA0Mjc2NTQzMjEwdSk7CisgICAgQVNTRVJUX0VR
KHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneics
IHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUldScsIDB4ZmZmZmZmZmYgICAgICAg
ICAgICAgPT0+ICcldSdcbiI7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCBmb3Jt
YXQsIDB4ZmZmZmZmZmYpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCAweGZmZmZm
ZmZmKTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAg
IG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSV4
JywgMHhmZmZmZmZmZiAgICAgICAgICAgICA9PT4gJyV4J1xuIjsKKyAgICBWTUluc3BlY3Rvcjo6
c3ByaW50ZihhY3R1YWwsIGZvcm1hdCwgMHhmZmZmZmZmZik7CisgICAgOjpzcHJpbnRmKGV4cGVj
dGVkLCBmb3JtYXQsIDB4ZmZmZmZmZmYpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBl
eHBlY3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7
CisgICAgZm9ybWF0ID0gIiclJXAnLCAodm9pZCopMHhhYmNkYmFiZSAgICAgID09PiAnJXAnXG4i
OworICAgIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9ybWF0LCAodm9pZCopMHhhYmNk
YmFiZSk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsICh2b2lkKikweGFiY2RiYWJl
KTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1l
bXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSVsdScs
IDEyMzQ1Njc4OTA5ODc2NTQzMjF1bCA9PT4gJyVsdSdcbiI7CisgICAgVk1JbnNwZWN0b3I6OnNw
cmludGYoYWN0dWFsLCBmb3JtYXQsIDEyMzQ1Njc4OTA5ODc2NTQzMjF1bCk7CisgICAgOjpzcHJp
bnRmKGV4cGVjdGVkLCBmb3JtYXQsIDEyMzQ1Njc4OTA5ODc2NTQzMjF1bCk7CisgICAgQVNTRVJU
X0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAn
eicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlZicsIDEyMzQuNTY3ICAgICAg
ICAgICAgICAgPT0+ICclZidcbiI7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCBm
b3JtYXQsIDEyMzQuNTY3KTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgMTIzNC41
NjcpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAg
bWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJS4y
ZicsIDEyMzQuNTY3ICAgICAgICAgICAgID09PiAnJS4yZidcbiI7CisgICAgVk1JbnNwZWN0b3I6
OnNwcmludGYoYWN0dWFsLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAgICA6OnNwcmludGYoZXhwZWN0
ZWQsIGZvcm1hdCwgMTIzNC41NjcpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBl
Y3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7Cisg
ICAgZm9ybWF0ID0gIiclJTEwLjJmJywgMTIzNC41NjcgICAgICAgICAgID09PiAnJTEwLjJmJ1xu
IjsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWwsIGZvcm1hdCwgMTIzNC41NjcpOwor
ICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgQVNTRVJUX0VR
KHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneics
IHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlMDEwLjJmJywgMTIzNC41NjcgICAg
ICAgICAgPT0+ICclMDEwLjJmJ1xuIjsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWws
IGZvcm1hdCwgMTIzNC41NjcpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCAxMjM0
LjU2Nyk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAg
ICAvLyBCYWQgLyB3ZWlyZCBmb3JtYXRzOgorICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9m
KGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSU1LjQnLCA5ODc2NTQzMjEgICAgICAgICAgICA9
PT4gJyU1LjQnXG4iOworICAgIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9ybWF0LCA5
ODc2NTQzMjEpOworICAgIGV4cGVjdGVkTGl0ZXJhbCA9ICInJTUuNCcsIDk4NzY1NDMyMSAgICAg
ICAgICAgID09PiAnRVJST1IgQCBcIiU1LjQnIFwiXG4iOworICAgIEFTU0VSVF9FUShzdHJjbXAo
YWN0dWFsLCBleHBlY3RlZExpdGVyYWwpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywg
c2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSU1LjQnICclJWQnLCA5ODc2NTQzMjEs
IDQgICAgPT0+ICclNS40JyAnJWQnXG4iOworICAgIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVh
bCwgZm9ybWF0LCA5ODc2NTQzMjEsIDQpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0
LCA5ODc2NTQzMjEsIDQpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCks
IDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9y
bWF0ID0gIiclJXcnICclJWQnLCA5ODc2NTQzMjEsIDYgICAgICA9PT4gJyV3JyAnJWQnXG4iOwor
ICAgIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9ybWF0LCA5ODc2NTQzMjEsIDYpOwor
ICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCA5ODc2NTQzMjEsIDYpOworICAgIEFTU0VS
VF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisKKyAgICAvLyBUZXN0aW5nIHRo
ZSAlYiBleHRlbnNpb246CisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7
CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCAiJyUlYicsIDAgICAgICAgICAgPT0+
ICclYidcbiIsIDApOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCAiJyViJywgMCAgICAg
ICAgICA9PT4gJ0ZBTFNFJ1xuIiksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXpl
b2YoYWN0dWFsKSk7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCAiJyUlYicsIDEg
ICAgICAgICAgPT0+ICclYidcbiIsIDEpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCAi
JyViJywgMSAgICAgICAgICA9PT4gJ1RSVUUnXG4iKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFs
LCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWws
ICInJSViJywgLTEyMzQ1Njc4OSA9PT4gJyViJ1xuIiwgLTEyMzQ1Njc4OSk7CisgICAgQVNTRVJU
X0VRKHN0cmNtcChhY3R1YWwsICInJWInLCAtMTIzNDU2Nzg5ID09PiAnVFJVRSdcbiIpLCAwKTsK
KworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIFZNSW5zcGVj
dG9yOjpzcHJpbnRmKGFjdHVhbCwgIiclJWInLCAxMjM0NTY3ODkgID09PiAnJWInXG4iLCAxMjM0
NTY3ODkpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCAiJyViJywgMTIzNDU2Nzg5ICA9
PT4gJ1RSVUUnXG4iKSwgMCk7CisKKworICAgIC8vIFRlc3RpbmcgdGhlICVKPHg+IGV4dGVuc2lv
bnM6CisgICAgU3RyaW5nIHN0cjEoIlRlc3QgV1RGIFN0cmluZyIpOworICAgIFN0cmluZyBzdHIy
KCIiKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIFZN
SW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgIiclJUpzJyBpcyAlJXMsICZzdHIxLCBzdHIxLmlz
RW1wdHkoKT9cIkVNUFRZXCI6XCJOT1QgRU1QVFlcIiAgPT0+ICclSnMnIGlzICVzXG4iLAorICAg
ICAgICAmc3RyMSwgc3RyMS5pc0VtcHR5KCkgPyAiRU1QVFkiIDogIk5PVCBFTVBUWSIpOworICAg
IGV4cGVjdGVkTGl0ZXJhbCA9ICInJUpzJyBpcyAlcywgJnN0cjEsIHN0cjEuaXNFbXB0eSgpP1wi
RU1QVFlcIjpcIk5PVCBFTVBUWVwiICA9PT4gJ1Rlc3QgV1RGIFN0cmluZycgaXMgTk9UIEVNUFRZ
XG4iOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZExpdGVyYWwpLCAwKTsK
KworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIFZNSW5zcGVj
dG9yOjpzcHJpbnRmKGFjdHVhbCwgIiclJUpzJyBpcyAlJXMsICZzdHIyLCBzdHIyLmlzRW1wdHko
KT9cIkVNUFRZXCI6XCJOT1QgRU1QVFlcIiAgPT0+ICclSnMnIGlzICVzXG4iLAorICAgICAgICAm
c3RyMiwgc3RyMi5pc0VtcHR5KCkgPyAiRU1QVFkiIDogIk5PVCBFTVBUWSIpOworICAgIGV4cGVj
dGVkTGl0ZXJhbCA9ICInJUpzJyBpcyAlcywgJnN0cjIsIHN0cjIuaXNFbXB0eSgpP1wiRU1QVFlc
IjpcIk5PVCBFTVBUWVwiICA9PT4gJycgaXMgRU1QVFlcbiI7CisgICAgQVNTRVJUX0VRKHN0cmNt
cChhY3R1YWwsIGV4cGVjdGVkTGl0ZXJhbCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3on
LCBzaXplb2YoYWN0dWFsKSk7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCAiJyUl
SitzJyBpcyAlJXMsICZzdHIxLCBzdHIxLmlzRW1wdHkoKT9cIkVNUFRZXCI6XCJOT1QgRU1QVFlc
IiA9PT4gJyVKK3MnIGlzICVzXG4iLAorICAgICAgICAmc3RyMSwgc3RyMS5pc0VtcHR5KCkgPyAi
RU1QVFkiIDogIk5PVCBFTVBUWSIpOworICAgIGV4cGVjdGVkTGl0ZXJhbCA9ICInJUorcycgaXMg
JXMsICZzdHIxLCBzdHIxLmlzRW1wdHkoKT9cIkVNUFRZXCI6XCJOT1QgRU1QVFlcIiA9PT4gJ1dU
Rjo6U3RyaW5nIFwiVGVzdCBXVEYgU3RyaW5nXCInIGlzIE5PVCBFTVBUWVxuIjsKKyAgICBBU1NF
UlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWRMaXRlcmFsKSwgMCk7CisKKyAgICBtZW1zZXQo
YWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50Zihh
Y3R1YWwsICInJSVKK3MnIGlzICUlcywgJnN0cjIsIHN0cjIuaXNFbXB0eSgpP1wiRU1QVFlcIjpc
Ik5PVCBFTVBUWVwiID09PiAnJUorcycgaXMgJXNcbiIsCisgICAgICAgICZzdHIyLCBzdHIyLmlz
RW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVNUFRZIik7CisgICAgZXhwZWN0ZWRMaXRlcmFsID0g
IiclSitzJyBpcyAlcywgJnN0cjIsIHN0cjIuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBU
WVwiID09PiAnV1RGOjpTdHJpbmcgXCJcIicgaXMgRU1QVFlcbiI7CisgICAgQVNTRVJUX0VRKHN0
cmNtcChhY3R1YWwsIGV4cGVjdGVkTGl0ZXJhbCksIDApOworI2VuZGlmCit9CisKKworVEVTVChK
U0MsIFZNSW5zcGVjdG9yU25wcmludGYpCit7CisjaWYgRU5BQkxFKFZNSU5TUEVDVE9SKQorICAg
IGNoYXIgYWN0dWFsWzEwMjRdOworICAgIGNoYXIgZXhwZWN0ZWRbMTAyNF07CisgICAgY29uc3Qg
Y2hhciogZm9ybWF0OworICAgIGNvbnN0IGNoYXIqIGV4cGVjdGVkTGl0ZXJhbDsKKworICAgIHNp
emVfdCBzaXplID0gMTsKKyAgICB3aGlsZSAoc2l6ZSA8PSAxMDApIHsKKworICAgICAgICAvLyBU
ZXN0aW5nIHN0YW5kYXJkIGRlZmF1bHQgZm9ybWF0IHNwZWNpZmllcnM6CisgICAgICAgIC8vIE5v
dGU6IHNob3VsZCB3b3JrIGp1c3QgbGlrZSBzbnByaW50Zi4gU28sIHdlIGp1c3QgY29tcGFyZSBh
Z2FpbnN0IHRoYXQuCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkp
OworICAgICAgICAvLyBUaGUgY29tcGlsZXIgd2FybmluZyBmbGFncyBhcmUgY29uZmlndXJlZCB0
byBleHBlY3QgYSBsaXRlcmFsIHN0cmluZyBmb3IKKyAgICAgICAgLy8gOjpzbnByaW50ZiBiZWxv
dy4gU28sIHVzZSBhICNkZWZpbmUgZm9yIHRoaXMgb25lIGNhc2UgdG8ga2VlcCB0aGUKKyAgICAg
ICAgLy8gY29tcGlsZXIgaGFwcHkuCisjdW5kZWYgTElURVJBTF9GT1JNQVQKKyNkZWZpbmUgTElU
RVJBTF9GT1JNQVQgIiclJSUlJyAgICAgICAgICAgICAgICAgICAgICAgICA9PT4gJyUlJ1xuIgor
ICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0dWFsLCBzaXplLCBMSVRFUkFMX0ZPUk1B
VCk7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIExJVEVSQUxfRk9STUFUKTsK
KyN1bmRlZiBMSVRFUkFMX0ZPUk1BVAorICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwg
ZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1
YWwpKTsKKyAgICAgICAgZm9ybWF0ID0gIiclJWMnLCAneCcgICAgICAgICAgICAgICAgICAgID09
PiAnJWMnXG4iOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0dWFsLCBzaXplLCBm
b3JtYXQsICd4Jyk7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIGZvcm1hdCwg
J3gnKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisK
KyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgICAgIGZv
cm1hdCA9ICInJSUqYycsIDgsICd4JyAgICAgICAgICAgICAgICA9PT4gJyUqYydcbiI7CisgICAg
ICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgOCwgJ3gnKTsK
KyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgZm9ybWF0LCA4LCAneCcpOworICAg
ICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICBt
ZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICAgICAgZm9ybWF0ID0gIicl
JXMnLCBcImhlbGxvIHdvcmxkXCIgICAgICAgICAgPT0+ICclcydcbiI7CisgICAgICAgIFZNSW5z
cGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgImhlbGxvIHdvcmxkIik7Cisg
ICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIGZvcm1hdCwgImhlbGxvIHdvcmxkIik7
CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAg
ICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBmb3JtYXQg
PSAiJyUlKnMnLCA4LCBcImhlbGxvIHdvcmxkXCIgICAgICA9PT4gJyUqcydcbiI7CisgICAgICAg
IFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgOCwgImhlbGxvIHdv
cmxkIik7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIGZvcm1hdCwgOCwgImhl
bGxvIHdvcmxkIik7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCks
IDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAg
ICAgICBmb3JtYXQgPSAiJyUlKnMnLCA4LCBcImhlbGxvXCIgICAgICAgICAgICA9PT4gJyUqcydc
biI7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwg
OCwgImhlbGxvIik7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIGZvcm1hdCwg
OCwgImhlbGxvIik7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCks
IDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAg
ICAgICBmb3JtYXQgPSAiJyUlZCcsIDk4NzY1NDMyMSAgICAgICAgICAgICAgPT0+ICclZCdcbiI7
CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgOTg3
NjU0MzIxKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgZm9ybWF0LCA5ODc2
NTQzMjEpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsK
KworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICAgICAg
Zm9ybWF0ID0gIiclJXUnLCA0Mjc2NTQzMjEwdSAgICAgICAgICAgID09PiAnJXUnXG4iOworICAg
ICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0dWFsLCBzaXplLCBmb3JtYXQsIDQyNzY1NDMy
MTB1KTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgZm9ybWF0LCA0Mjc2NTQz
MjEwdSk7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOwor
CisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBm
b3JtYXQgPSAiJyUldScsIDB4ZmZmZmZmZmYgICAgICAgICAgICAgPT0+ICcldSdcbiI7CisgICAg
ICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgMHhmZmZmZmZm
Zik7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIGZvcm1hdCwgMHhmZmZmZmZm
Zik7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisg
ICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBmb3Jt
YXQgPSAiJyUleCcsIDB4ZmZmZmZmZmYgICAgICAgICAgICAgPT0+ICcleCdcbiI7CisgICAgICAg
IFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgMHhmZmZmZmZmZik7
CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIGZvcm1hdCwgMHhmZmZmZmZmZik7
CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAg
ICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBmb3JtYXQg
PSAiJyUlcCcsICh2b2lkKikweGFiY2RiYWJlICAgICAgPT0+ICclcCdcbiI7CisgICAgICAgIFZN
SW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgKHZvaWQqKTB4YWJjZGJh
YmUpOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVkLCBzaXplLCBmb3JtYXQsICh2b2lkKikw
eGFiY2RiYWJlKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwg
MCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAg
ICAgIGZvcm1hdCA9ICInJSVsdScsIDEyMzQ1Njc4OTA5ODc2NTQzMjF1bCA9PT4gJyVsdSdcbiI7
CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgMTIz
NDU2Nzg5MDk4NzY1NDMyMXVsKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwg
Zm9ybWF0LCAxMjM0NTY3ODkwOTg3NjU0MzIxdWwpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21w
KGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNp
emVvZihhY3R1YWwpKTsKKyAgICAgICAgZm9ybWF0ID0gIiclJWYnLCAxMjM0LjU2NyAgICAgICAg
ICAgICAgID09PiAnJWYnXG4iOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0dWFs
LCBzaXplLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwg
c2l6ZSwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFs
LCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFj
dHVhbCkpOworICAgICAgICBmb3JtYXQgPSAiJyUlLjJmJywgMTIzNC41NjcgICAgICAgICAgICAg
PT0+ICclLjJmJ1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6
ZSwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUs
IGZvcm1hdCwgMTIzNC41NjcpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhw
ZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwp
KTsKKyAgICAgICAgZm9ybWF0ID0gIiclJTEwLjJmJywgMTIzNC41NjcgICAgICAgICAgID09PiAn
JTEwLjJmJ1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwg
Zm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIGZv
cm1hdCwgMTIzNC41NjcpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0
ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsK
KyAgICAgICAgZm9ybWF0ID0gIiclJTAxMC4yZicsIDEyMzQuNTY3ICAgICAgICAgID09PiAnJTAx
MC4yZidcbiI7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZv
cm1hdCwgMTIzNC41NjcpOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVkLCBzaXplLCBmb3Jt
YXQsIDEyMzQuNTY3KTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVk
KSwgMCk7CisKKyAgICAgICAgLy8gQmFkIC8gd2VpcmQgZm9ybWF0czoKKyAgICAgICAgbWVtc2V0
KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgICAgIGZvcm1hdCA9ICInJSU1LjQn
LCA5ODc2NTQzMjEgICAgICAgICAgICA9PT4gJyU1LjQnXG4iOworICAgICAgICBWTUluc3BlY3Rv
cjo6c25wcmludGYoYWN0dWFsLCBzaXplLCBmb3JtYXQsIDk4NzY1NDMyMSk7CisgICAgICAgIGV4
cGVjdGVkTGl0ZXJhbCA9ICInJTUuNCcsIDk4NzY1NDMyMSAgICAgICAgICAgID09PiAnRVJST1Ig
QCBcIiU1LjQnIFwiXG4iOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVkLCBzaXplLCAiJXMi
LCBleHBlY3RlZExpdGVyYWwpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhw
ZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwp
KTsKKyAgICAgICAgZm9ybWF0ID0gIiclJTUuNCcgJyUlZCcsIDk4NzY1NDMyMSwgNCAgICA9PT4g
JyU1LjQnICclZCdcbiI7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNp
emUsIGZvcm1hdCwgOTg3NjU0MzIxLCA0KTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwg
c2l6ZSwgZm9ybWF0LCA5ODc2NTQzMjEsIDQpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFj
dHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVv
ZihhY3R1YWwpKTsKKyAgICAgICAgZm9ybWF0ID0gIiclJXcnICclJWQnLCA5ODc2NTQzMjEsIDYg
ICAgICA9PT4gJyV3JyAnJWQnXG4iOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0
dWFsLCBzaXplLCBmb3JtYXQsIDk4NzY1NDMyMSwgNik7CisgICAgICAgIDo6c25wcmludGYoZXhw
ZWN0ZWQsIHNpemUsIGZvcm1hdCwgOTg3NjU0MzIxLCA2KTsKKyAgICAgICAgQVNTRVJUX0VRKHN0
cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKworICAgICAgICAvLyBUZXN0aW5nIHRoZSAl
YiBleHRlbnNpb246CisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkp
OworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0dWFsLCBzaXplLCAiJyUlYicsIDAg
ICAgICAgICAgPT0+ICclYidcbiIsIDApOworICAgICAgICBleHBlY3RlZExpdGVyYWwgPSAiJyVi
JywgMCAgICAgICAgICA9PT4gJ0ZBTFNFJ1xuIjsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3Rl
ZCwgc2l6ZSwgIiVzIiwgZXhwZWN0ZWRMaXRlcmFsKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNt
cChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBz
aXplb2YoYWN0dWFsKSk7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNp
emUsICInJSViJywgMSAgICAgICAgICA9PT4gJyViJ1xuIiwgMSk7CisgICAgICAgIGV4cGVjdGVk
TGl0ZXJhbCA9ICInJWInLCAxICAgICAgICAgID09PiAnVFJVRSdcbiI7CisgICAgICAgIDo6c25w
cmludGYoZXhwZWN0ZWQsIHNpemUsICIlcyIsIGV4cGVjdGVkTGl0ZXJhbCk7CisgICAgICAgIEFT
U0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChh
Y3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmlu
dGYoYWN0dWFsLCBzaXplLCAiJyUlYicsIC0xMjM0NTY3ODkgPT0+ICclYidcbiIsIC0xMjM0NTY3
ODkpOworICAgICAgICBleHBlY3RlZExpdGVyYWwgPSAiJyViJywgLTEyMzQ1Njc4OSA9PT4gJ1RS
VUUnXG4iOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVkLCBzaXplLCAiJXMiLCBleHBlY3Rl
ZExpdGVyYWwpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAw
KTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICAg
ICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwgIiclJWInLCAxMjM0NTY3ODkg
ID09PiAnJWInXG4iLCAxMjM0NTY3ODkpOworICAgICAgICBleHBlY3RlZExpdGVyYWwgPSAiJyVi
JywgMTIzNDU2Nzg5ICA9PT4gJ1RSVUUnXG4iOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVk
LCBzaXplLCAiJXMiLCBleHBlY3RlZExpdGVyYWwpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21w
KGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICAvLyBUZXN0aW5nIHRoZSAlSjx4PiBl
eHRlbnNpb25zOgorICAgICAgICBTdHJpbmcgc3RyMSgiVGVzdCBXVEYgU3RyaW5nIik7CisgICAg
ICAgIFN0cmluZyBzdHIyKCIiKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVv
ZihhY3R1YWwpKTsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwg
IiclJUpzJyBpcyAlJXMsICZzdHIxLCBzdHIxLmlzRW1wdHkoKT9cIkVNUFRZXCI6XCJOT1QgRU1Q
VFlcIiAgPT0+ICclSnMnIGlzICVzXG4iLAorICAgICAgICAgICAgJnN0cjEsIHN0cjEuaXNFbXB0
eSgpID8gIkVNUFRZIiA6ICJOT1QgRU1QVFkiKTsKKyAgICAgICAgZXhwZWN0ZWRMaXRlcmFsID0g
IiclSnMnIGlzICVzLCAmc3RyMSwgc3RyMS5pc0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZ
XCIgID09PiAnVGVzdCBXVEYgU3RyaW5nJyBpcyBOT1QgRU1QVFlcbiI7CisgICAgICAgIDo6c25w
cmludGYoZXhwZWN0ZWQsIHNpemUsICIlcyIsIGV4cGVjdGVkTGl0ZXJhbCk7CisgICAgICAgIEFT
U0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChh
Y3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmlu
dGYoYWN0dWFsLCBzaXplLCAiJyUlSnMnIGlzICUlcywgJnN0cjIsIHN0cjIuaXNFbXB0eSgpP1wi
RU1QVFlcIjpcIk5PVCBFTVBUWVwiICA9PT4gJyVKcycgaXMgJXNcbiIsCisgICAgICAgICAgICAm
c3RyMiwgc3RyMi5pc0VtcHR5KCkgPyAiRU1QVFkiIDogIk5PVCBFTVBUWSIpOworICAgICAgICBl
eHBlY3RlZExpdGVyYWwgPSAiJyVKcycgaXMgJXMsICZzdHIyLCBzdHIyLmlzRW1wdHkoKT9cIkVN
UFRZXCI6XCJOT1QgRU1QVFlcIiAgPT0+ICcnIGlzIEVNUFRZXG4iOworICAgICAgICA6OnNucHJp
bnRmKGV4cGVjdGVkLCBzaXplLCAiJXMiLCBleHBlY3RlZExpdGVyYWwpOworICAgICAgICBBU1NF
UlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0
dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRm
KGFjdHVhbCwgc2l6ZSwgIiclJUorcycgaXMgJSVzLCAmc3RyMSwgc3RyMS5pc0VtcHR5KCk/XCJF
TVBUWVwiOlwiTk9UIEVNUFRZXCIgPT0+ICclSitzJyBpcyAlc1xuIiwKKyAgICAgICAgICAgICZz
dHIxLCBzdHIxLmlzRW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVNUFRZIik7CisgICAgICAgIGV4
cGVjdGVkTGl0ZXJhbCA9ICInJUorcycgaXMgJXMsICZzdHIxLCBzdHIxLmlzRW1wdHkoKT9cIkVN
UFRZXCI6XCJOT1QgRU1QVFlcIiA9PT4gJ1dURjo6U3RyaW5nIFwiVGVzdCBXVEYgU3RyaW5nXCIn
IGlzIE5PVCBFTVBUWVxuIjsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgIiVz
IiwgZXhwZWN0ZWRMaXRlcmFsKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4
cGVjdGVkKSwgMCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFs
KSk7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsICInJSVKK3Mn
IGlzICUlcywgJnN0cjIsIHN0cjIuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiID09
PiAnJUorcycgaXMgJXNcbiIsCisgICAgICAgICAgICAmc3RyMiwgc3RyMi5pc0VtcHR5KCkgPyAi
RU1QVFkiIDogIk5PVCBFTVBUWSIpOworICAgICAgICBleHBlY3RlZExpdGVyYWwgPSAiJyVKK3Mn
IGlzICVzLCAmc3RyMiwgc3RyMi5pc0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZXCIgPT0+
ICdXVEY6OlN0cmluZyBcIlwiJyBpcyBFTVBUWVxuIjsKKyAgICAgICAgOjpzbnByaW50ZihleHBl
Y3RlZCwgc2l6ZSwgIiVzIiwgZXhwZWN0ZWRMaXRlcmFsKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0
cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICAgICAgLy8gVGVzdCBsb3dlciBzaXpl
cyBtb3JlIGRlbnNlbHksIGFuZCB0aGVuIHNwYWNlIG91dCB0byBsYXJnZXIgc2l6ZXMuCisgICAg
ICAgIC8vIFdlJ3JlIGRvaW5nIHRoaXMgYmVjYXVzZSB0aGUgbG93ZXIgc2l6ZXMgbWlnaHQgYmUg
aW50ZXJlc3RpbmcsIGJ1dAorICAgICAgICAvLyBmb3IgZXhwZWRpZW5jeSwgd2UgZG9uJ3Qgd2Fu
dCB0byB0ZXN0IGF0IHRoaXMgZmluZSBncmFpbiByZXNvbHV0aW9uCisgICAgICAgIC8vIGZvciBh
bGwgcG9zc2libGUgc2l6ZXMuIEhlbmNlLCB3ZSBhY2NlbGVyYXRlIHRoZSByYXRlIG9uY2Ugd2Un
cmUKKyAgICAgICAgLy8gcGFzcyB0aGUgaW50ZXJlc3Rpbmcgc21hbGwgc2l6ZXMuCisgICAgICAg
IGlmIChzaXplIDw9IDUpCisgICAgICAgICAgICBzaXplKys7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNpemUgKz0gNDsKKyAgICB9CisjZW5kaWYKK30K
</data>
<flag name="commit-queue"
          id="185543"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171573</attachid>
            <date>2012-10-30 21:13:14 -0700</date>
            <delta_ts>2012-10-31 17:36:04 -0700</delta_ts>
            <desc>Fixed the build breakage.  Ready for review now ... fingers crossed. =)</desc>
            <filename>bug-100566.patch</filename>
            <type>text/plain</type>
            <size>57959</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyOTc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTEwLTMwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
IEpTQyBwcmludGYgKHN1cHBvcnQgZm9yICVKK3MgYW5kICViKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDU2Ni4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBWTUluc3BlY3Rvcjo6cHJpbnRm
KCksIGZwcmludGYoKSwgc3ByaW50ZigpLCBhbmQgc25wcmludGYoKS4KKyAgICAgICAgLSAlYiBw
cmludHMgaW50cyBhcyBib29sZWFuIFRSVUUgKG5vbi16ZXJvKSBvciBGQUxTRSAoemVybykuCisg
ICAgICAgIC0gJUpzIHByaW50cyBhIFdURjo6U3RyaW5nKiBsaWtlIGEgJXMgcHJpbnRzIGEgY2hh
ciouCisgICAgICAgICAgQWxzbyB3b3JrcyBmb3IgMTZiaXQgV1RGOjpTdHJpbmdzIChwcmludHMg
d2NoYXJfdCogdXNpbmcgJVMpLgorICAgICAgICAtICcrJyBpcyBhIG1vZGlmaWVyIG1lYW5pbmcg
J3VzZSB2ZXJib3NlIG1vZGUnLCBhbmQgJUorcyBpcyBhbiBleGFtcGxlCisgICAgICAgICAgb2Yg
aXRzIHVzZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwOgorICAgICAgICAo
Rm9ybWF0UHJpbnRlcik6CisgICAgICAgIChKU0M6OkZvcm1hdFByaW50ZXI6On5Gb3JtYXRQcmlu
dGVyKToKKyAgICAgICAgKEpTQzo6Rm9ybWF0UHJpbnRlcjo6cHJpbnQpOgorICAgICAgICAoSlND
OjpGb3JtYXRQcmludGVyOjpwcmludEFyZyk6CisgICAgICAgIChKU0M6OkZvcm1hdFByaW50ZXI6
OnByaW50V1RGU3RyaW5nKToKKyAgICAgICAgKEpTQzo6RmlsZUZvcm1hdFByaW50ZXI6OkZpbGVG
b3JtYXRQcmludGVyKToKKyAgICAgICAgKEpTQzo6RmlsZUZvcm1hdFByaW50ZXI6OnByaW50QXJn
KToKKyAgICAgICAgKEpTQzo6U3RyaW5nRm9ybWF0UHJpbnRlcjo6U3RyaW5nRm9ybWF0UHJpbnRl
cik6CisgICAgICAgIChKU0M6OlN0cmluZ0Zvcm1hdFByaW50ZXI6OnByaW50QXJnKToKKyAgICAg
ICAgKEpTQzo6U3RyaW5nTkZvcm1hdFByaW50ZXI6OlN0cmluZ05Gb3JtYXRQcmludGVyKToKKyAg
ICAgICAgKEpTQzo6U3RyaW5nTkZvcm1hdFByaW50ZXI6OnByaW50QXJnKToKKyAgICAgICAgKEpT
Qzo6Vk1JbnNwZWN0b3I6OmZwcmludGYpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6cHJp
bnRmKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnNwcmludGYpOgorICAgICAgICAoSlND
OjpWTUluc3BlY3Rvcjo6c25wcmludGYpOgorICAgICAgICAqIGludGVycHJldGVyL1ZNSW5zcGVj
dG9yLmg6CisgICAgICAgIChWTUluc3BlY3Rvcik6CisKIDIwMTItMTAtMzAgIEpvc2VwaCBQZWNv
cmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBTeW5jIHVwIEZlYXR1
cmVEZWZpbmUgQ29uZmlndXJhdGlvbiBGaWxlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDEzMjk3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NDYs
NyArNzQ2LDcgQEAKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0
QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTRB
MzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8q
IFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKLQkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZN
SW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKKwkJRkU0
QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyog
Vk1JbnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcw
MERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMjYx
Myw2ICsyNjEzLDcgQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBD
b3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENC
QUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNEEzMzIwMTVC
RDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlE
MTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3Rp
Y3MuaCBpbiBIZWFkZXJzICovLApAQCAtMjk4Miw3ICsyOTgzLDYgQEAKIAkJCQkwRjc2NkQzOTE1
QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3NjZENDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0UgLyogREZHU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTRBMzMyMDE1QkQy
RTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDNG
MTVDNzVGMTkwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1ZNSW5zcGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwCShyZXZpc2lvbiAxMzI5NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKFZNSU5TUEVDVE9SKQogCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgY2hhciogVk1J
bnNwZWN0b3I6OmdldFR5cGVOYW1lKEpTVmFsdWUgdmFsdWUpCkBAIC0xMDUsNiArMTA5LDQ2NSBA
QCBpbnQgVk1JbnNwZWN0b3I6OmNvdW50RnJhbWVzKENhbGxGcmFtZSogCiAgICAgcmV0dXJuIGNv
dW50OwogfQogCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIGNsYXNzIEZvcm1hdFByaW50
ZXIKKy8vICAgIC0gaW1wbGVtZW50cyBmdW5jdGlvbmFsaXR5IHRvIHN1cHBvcnQgZnByaW50Zi4K
Ky8vCisvLyAgICBUaGUgRm9ybWF0UHJpbnRlciBjbGFzc2VzIGRvIHRoZSByZWFsIGZvcm1hdHRp
bmcgYW5kIHByaW50aW5nLgorLy8gICAgQnkgZGVmYXVsdCwgdGhlIHN1cGVyY2xhc3MgRm9ybWF0
UHJpbnRlciB3aWxsIHByaW50IHRvIHN0ZG91dCAocHJpbnRmKS4KKy8vICAgIEVhY2ggb2YgdGhl
IHN1YmNsYXNzIHdpbGwgaW1wbGVtZW50IHRoZSBvdGhlciAuLi5wcmludGYoKSBvcHRpb25zLgor
Ly8gICAgVGhlIHN1YmNsYXNzZXMgYXJlOgorLy8KKy8vICAgICAgICBGaWxlRm9ybWF0UHJpbnRl
ciAgICAgLSBmcHJpbnRmCisvLyAgICAgICAgU3RyaW5nRm9ybWF0UHJpbnRlciAgIC0gc3ByaW50
ZgorLy8gICAgICAgIFN0cmluZ05Gb3JtYXRQcmludGVyICAtIHNucHJpbnRmCisKK2NsYXNzIEZv
cm1hdFByaW50ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkZvcm1hdFByaW50ZXIoKSB7IH0K
KworICAgIHZvaWQgcHJpbnQoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCitw
cm90ZWN0ZWQ6CisgICAgLy8gTG93IGxldmVsIHByaW50ZXJzOgorICAgIGJvb2wgcHJpbnRBcmco
Y29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworICAgIHZpcnR1YWwgYm9vbCBwcmludEFyZyhjb25z
dCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncyk7CisKKyAgICAvLyBKUyB0eXBlIHNwZWNpZmlj
IHByaW50ZXJzOgorICAgIHZvaWQgcHJpbnRXVEZTdHJpbmcodmFfbGlzdCBhcmdzLCBib29sIHZl
cmJvc2UpOworfTsKKworCisvLyBUaGUgcHVibGljIHByaW50KCkgZnVuY3Rpb24gaXMgdGhlIHJl
YWwgd29ya2hvcnNlIGJlaGluZCB0aGUgcHJpbnRmCisvLyBmYW1pbHkgb2YgZnVuY3Rpb25zLiBw
cmludCgpIGRlY2lwaGVycyB0aGUgJSBmb3JtYXR0aW5nLCB0cmFuc2xhdGUgdGhlbQorLy8gdG8g
cHJpbWl0aXZlIGZvcm1hdHMsIGFuZCBkaXNwYXRjaGVzIHRvIHVuZGVybHlpbmcgcHJpbnRBcmco
KSBmdW5jdGlvbnMKKy8vIHRvIGRvIHRoZSBwcmludGluZy4KKy8vIAorLy8gVGhlIG5vbi1wdWJs
aWMgaW50ZXJuYWwgcHJpbnRBcmcoKSBmdW5jdGlvbiBpcyB2aXJ0dWFsIGFuZCBpcyByZXNwb25z
aWJsZQorLy8gZm9yIGhhbmRsaW5nIHRoZSB2YXJpYXRpb25zIGJldHdlZW4gcHJpbnRmLCBmcHJp
bnRmLCBzcHJpbnRmLCBhbmQgc25wcmludGYuCisKK3ZvaWQgRm9ybWF0UHJpbnRlcjo6cHJpbnQo
Y29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgICAgY29uc3QgY2hhciogcCA9
IGZvcm1hdDsKKyAgICBjb25zdCBjaGFyKiBlcnJvclN0cjsKKworICAgIC8vIGJ1ZmZlciBpcyBv
bmx5IHVzZWQgZm9yIDIgcHVycG9zZXM6CisgICAgLy8gMS4gVG8gdGVtcG9yYXJpbHkgaG9sZCBh
IGNvcHkgb2Ygbm9ybWFsIGNoYXJzIChub3QgbmVlZGluZyBmb3JtYXR0aW5nKQorICAgIC8vICAg
IHRvIGJlIHBhc3NlZCB0byBwcmludEFyZygpIGFuZCBwcmludGVkLgorICAgIC8vCisgICAgLy8g
ICAgVGhlIGluY29taW5nIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gYSBzdHJpbmcgb2Ygbm9y
bWFsIGNoYXJzIG11Y2gKKyAgICAvLyAgICBsb25nZXIgdGhhbiAxMjgsIGJ1dCB3ZSBoYW5kbGUg
dGhpcyBieSBicmVha2luZyB0aGVtIG91dCB0byAxMjggY2hhcnMKKyAgICAvLyAgICBmcmFnbWVu
dHMgYW5kIHByaW50aW5nIGVhY2ggZnJhZ21lbnQgYmVmb3JlIHJlLXVzaW5nIHRoZSBidWZmZXIg
dG8KKyAgICAvLyAgICBsb2FkIHVwIHRoZSBuZXh0IGZyYWdtZW50LgorICAgIC8vCisgICAgLy8g
Mi4gVG8gaG9sZCBhIHNpbmdsZSAiJS4uLiIgZm9ybWF0IHRvIGJlIHBhc3NlZCB0byBwcmludEFy
ZygpIHRvIHByb2Nlc3MKKyAgICAvLyAgICBhIHNpbmdsZSB2YV9hcmcuCisKKyAgICBjaGFyIGJ1
ZmZlclsxMjldOyAvLyAxMjggY2hhcnMgKyBudWxsIHRlcm1pbmF0b3IuCisgICAgY2hhciogZW5k
ID0gJmJ1ZmZlcltzaXplb2YoYnVmZmVyKSAtIDFdOworICAgIGNvbnN0IGNoYXIqIHN0YXJ0T2ZG
b3JtYXRTcGVjaWZpZXIgPSAwOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgY2hhciBj
ID0gKnArKzsKKyAgICAgICAgY2hhciogY3VyciA9IGJ1ZmZlcjsKKworICAgICAgICAvLyBQcmlu
dCBsZWFkaW5nIG5vcm1hbCBjaGFyczoKKyAgICAgICAgd2hpbGUgKGMgIT0gJ1wwJyAmJiBjICE9
ICclJykgeworICAgICAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgICAgICBpZiAoY3VyciA9
PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBPdXQgb2YgYnVmZmVyIHNwYWNlLiBGbHVzaCB0
aGUgZnJhZ21lbnQsIGFuZCBzdGFydCBvdmVyLgorICAgICAgICAgICAgICAgICpjdXJyID0gJ1ww
JzsKKyAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBwcmludEFyZygiJXMiLCBidWZmZXIp
OworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBl
cnJvclN0ciA9IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVFcnJvcjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VyciA9IGJ1ZmZlcjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICB9CisgICAgICAgIC8vIElm
IHdlIGhhdmUgc3R1ZmYgaW4gdGhlIGJ1ZmZlciwgZmx1c2ggdGhlIGZyYWdtZW50OgorICAgICAg
ICBpZiAoY3VyciAhPSBidWZmZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyIDwgZW5kICsg
MSk7CisgICAgICAgICAgICAqY3VyciA9ICdcMCc7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBwcmludEFyZygiJXMiLCBidWZmZXIpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICAgICAgZXJyb3JTdHIgPSBidWZmZXI7CisgICAgICAgICAgICAgICAgZ290byBo
YW5kbGVFcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEVuZCBp
ZiB0aGVyZSBhcmUgbm90IG1vcmUgY2hhcnMgdG8gcHJpbnQ6CisgICAgICAgIGlmIChjID09ICdc
MCcpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Un
dmUgbXVzdCBoYXZlIHNlZW4gYSAnJSc6CisgICAgICAgIHN0YXJ0T2ZGb3JtYXRTcGVjaWZpZXIg
PSBwIC0gMTsKKyAgICAgICAgQVNTRVJUKCpzdGFydE9mRm9ybWF0U3BlY2lmaWVyID09ICclJyk7
CisgICAgICAgIGMgPSAqcCsrOworCisgICAgICAgIC8vIENoZWNrIGZvciAiJSUiIGNhc2U6Cisg
ICAgICAgIGlmIChjID09ICclJykgeworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gcHJpbnRB
cmcoIiVjIiwgJyUnKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAg
ICAgIGVycm9yU3RyID0gcCAtIDI7CisgICAgICAgICAgICAgICAgZ290byBoYW5kbGVFcnJvcjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gQ2hlY2sgZm9yIEpTICglSjx4PikgZm9ybWF0dGluZyBleHRlbnNpb25zOgorICAgICAg
ICBpZiAoYyA9PSAnSicpIHsKKyAgICAgICAgICAgIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisg
ICAgICAgICAgICBjID0gKnArKzsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjID09ICdcMCcp
KSB7CisgICAgICAgICAgICAgICAgZXJyb3JTdHIgPSBwIC0gMjsgLy8gUmV3aW5kIHRvICUgaW4g
IiVKXDAiCisgICAgICAgICAgICAgICAgZ290byBoYW5kbGVFcnJvcjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGMgPT0gJysnKSB7CisgICAgICAgICAgICAgICAgdmVyYm9zZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgYz0gKnArKzsKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoYyA9PSAnXDAnKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJvclN0ciA9IHAgLSAz
OyAvLyBSZXdpbmQgdG8gJSBpbiAiJUorXDAiCisgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFu
ZGxlRXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgIC8vICVKcyAtIFdURjo6U3RyaW5nKgorICAgICAg
ICAgICAgY2FzZSAncyc6IHsKKyAgICAgICAgICAgICAgICBwcmludFdURlN0cmluZyhhcmdzLCB2
ZXJib3NlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gLy8gRU5EIHN3aXRjaC4KKworICAgICAgICAvLyBDaGVjayBmb3Igbm9uLUpTIGV4
dGVuc2lvbnM6CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnYicpIHsKKyAgICAgICAgICAgIGlu
dCB2YWx1ZSA9IHZhX2FyZyhhcmdzLCBpbnQpOworICAgICAgICAgICAgcHJpbnRBcmcoIiVzIiwg
dmFsdWUgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gSWYgd2UgZGlkbid0IGhhbmRsZSB0aGUgZm9ybWF0IGluIG9uZSBv
ZiB0aGUgYWJvdmUgY2FzZXMsCisgICAgICAgIC8vIHJld2luZCBwIGFuZCBsZXQgdGhlIHN0YW5k
YXJkIGZvcm1hdHRpbmcgY2hlY2sgaGFuZGxlIGl0CisgICAgICAgIC8vIGlmIHBvc3NpYmxlOgor
ICAgICAgICBwID0gc3RhcnRPZkZvcm1hdFNwZWNpZmllcjsKKyAgICAgICAgQVNTRVJUKCpwID09
ICclJyk7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIHN0YW5kYXJkIGZvcm1hdHRpbmc6CisgICAg
ICAgIC8vIEEgZm9ybWF0IHNwZWNpZmllciBhbHdheXMgc3RhcnRzIHdpdGggYSAlIGFuZCBlbmRz
IHdpdGggc29tZQorICAgICAgICAvLyBhbHBoYWJldC4gV2UnbGwgZG8gdGhlIHNpbXBsZSB0aGlu
ZyBhbmQgc2NhbiB1bnRpbCB0aGUgbmV4dAorICAgICAgICAvLyBhbHBoYWJldCwgb3IgdGhlIGVu
ZCBvZiBzdHJpbmcuCisKKyAgICAgICAgLy8gSW4gdGhlIGZvbGxvd2luZywgd2UncmUgZ29pbmcg
dG8gdXNlIGJ1ZmZlciBhcyBzdG9yYWdlIGZvciBhIGNvcHkKKyAgICAgICAgLy8gb2YgYSBzaW5n
bGUgZm9ybWF0IHNwZWNpZmllci4gSGVuY2UsIGNvbmNlcHR1YWxseSwgd2UgY2FuIHRoaW5rIG9m
CisgICAgICAgIC8vICdidWZmZXInIGFzIHN5bm9ueW1vdXMgd2l0aCAnYXJnRm9ybWF0JyBoZXJl
OgorCisjZGVmaW5lIEFCT1JUX0lGX0ZPUk1BVF9UT09fTE9ORyhjdXJyKSBcCisgICAgICAgIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
Y3VyciA+PSBlbmQpKSBcCisgICAgICAgICAgICAgICAgZ290byBmb3JtYXRUb29Mb25nOyAgICBc
CisgICAgICAgIH0gd2hpbGUgKGZhbHNlKQorICAgICAgICAKKyAgICAgICAgY3VyciA9IGJ1ZmZl
cjsKKyAgICAgICAgKmN1cnIrKyA9ICpwKys7IC8vIE91dHB1dCB0aGUgZmlyc3QgJSBpbiB0aGUg
Zm9ybWF0IHNwZWNpZmllci4KKyAgICAgICAgYyA9ICpwKys7IC8vIEdyYWIgdGhlIG5leHQgY2hh
ciBpbiB0aGUgZm9ybWF0IHNwZWNpZmllci4KKworICAgICAgICAvLyBDaGVja3MgZm9yIGxlYWRp
bmcgbW9kaWZpZXJzIGUuZy4gIiUtZCI6CisgICAgICAgIC8vICAgICAwLCAtLCAnICcsICssICdc
JycKKyAgICAgICAgaWYgKGMgPT0gJzAnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJyAnIHx8IGMgPT0g
JysnIHx8IGMgPT0gJ1wnJykgeworICAgICAgICAgICAgQUJPUlRfSUZfRk9STUFUX1RPT19MT05H
KGN1cnIpOworICAgICAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgICAgICBjID0gKnArKzsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrcyBmb3IgZGVjaW1hbCBkaWdpdCBmaWVsZCB3
aWR0aCBtb2RpZmllcnMgZS5nLiAiJTJmIjoKKyAgICAgICAgd2hpbGUgKGMgPj0gJzAnICYmIGMg
PD0gJzknKSB7CisgICAgICAgICAgICBBQk9SVF9JRl9GT1JNQVRfVE9PX0xPTkcoY3Vycik7Cisg
ICAgICAgICAgICAqY3VycisrID0gYzsKKyAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICB9
CisKKyAgICAgICAgLy8gQ2hlY2tzIGZvciAnLicgZS5nLiAiJTIuZiI6CisgICAgICAgIGlmIChj
ID09ICcuJykgeworICAgICAgICAgICAgQUJPUlRfSUZfRk9STUFUX1RPT19MT05HKGN1cnIpOwor
ICAgICAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgICAgICBjID0gKnArKzsKKworICAgICAg
ICAgICAgLy8gQ2hlY2tzIGZvciBkZWNpbWFsIGRpZ2l0IHByZWNpc2lvbiBtb2RpZmllcnMgIGUu
Zy4gIiUuMmYiOgorICAgICAgICAgICAgd2hpbGUgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Cisg
ICAgICAgICAgICAgICAgQUJPUlRfSUZfRk9STUFUX1RPT19MT05HKGN1cnIpOworICAgICAgICAg
ICAgICAgICpjdXJyKysgPSBjOworICAgICAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2tzIGZvciB0aGUgbW9kaWZpZXIgPG0+
IHdoZXJlIDxtPiBjYW4gYmU6CisgICAgICAgIC8vICAgICBsLCBoLCBqLCB0LCB6CisgICAgICAg
IC8vIGUuZy4gIiVsZCIKKyAgICAgICAgaWYgKGMgPT0gJ2wnIHx8IGMgPT0gJ2gnIHx8IGMgPT0g
J2onIHx8IGMgPT0gJ3QnIHx8IGMgPT0gJ3onKSB7CisgICAgICAgICAgICBBQk9SVF9JRl9GT1JN
QVRfVE9PX0xPTkcoY3Vycik7CisgICAgICAgICAgICAqY3VycisrID0gYzsKKyAgICAgICAgICAg
IGNoYXIgcHJldkNoYXIgPSBjOworICAgICAgICAgICAgYyA9ICpwKys7CisKKyAgICAgICAgICAg
IC8vIENoZWNrcyBmb3IgdGhlIG1vZGlmaWVyIGxsIG9yIGhoIGluICU8eD48bT46CisgICAgICAg
ICAgICBpZiAoKHByZXZDaGFyID09ICdsJyB8fCBwcmV2Q2hhciA9PSAnaCcpICYmIGMgPT0gcHJl
dkNoYXIpIHsKKyAgICAgICAgICAgICAgICBBQk9SVF9JRl9GT1JNQVRfVE9PX0xPTkcoY3Vycik7
CisgICAgICAgICAgICAgICAgKmN1cnIrKyA9IGM7CisgICAgICAgICAgICAgICAgYyA9ICpwKys7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVja3MgZm9yICU8eD4g
d2hlcmUgPHg+IGNhbiBiZToKKyAgICAgICAgLy8gICAgIGQsIGksIG4sIG8sIHUsIHgsIFgKKyAg
ICAgICAgLy8gQnV0IGhleSwgd2UncmUganVzdCBnb2luZyB0byBkbyB0aGUgc2ltcGxlIHRoaW5n
IGFuZCBhbGxvdyBhbnkKKyAgICAgICAgLy8gYWxwaGFiZXQuIFRoZSB1c2VyIGlzIGV4cGVjdGVk
IHRvIHBhc3MgY29ycmVjdCBmb3JtYXQgc3BlY2lmaWVycy4KKyAgICAgICAgLy8gV2Ugd29uJ3Qg
ZG8gYW55IGZvcm1hdCBjaGVja2luZyBoZXJlLiBXZSdsbCBqdXN0IHBhc3MgaXQgb24sIGFuZCB0
aGUKKyAgICAgICAgLy8gdW5kZXJseWluZyAuLi5wcmludGYoKSBpbXBsZW1lbnRhdGlvbiBtYXkg
ZG8gdGhlIG5lZWRlZCBjaGVja2luZworICAgICAgICAvLyBhdCBpdHMgZGlzY3JldGlvbi4KKyAg
ICAgICAgd2hpbGUgKGMgIT0gJ1wwJyAmJiAhaXNBU0NJSUFscGhhKGMpKSB7CisgICAgICAgICAg
ICBBQk9SVF9JRl9GT1JNQVRfVE9PX0xPTkcoY3Vycik7CisgICAgICAgICAgICAqY3VycisrID0g
YzsKKyAgICAgICAgICAgIGMgPSAqcCsrOworICAgICAgICB9CisKKyAgICAgICAgQUJPUlRfSUZf
Rk9STUFUX1RPT19MT05HKGN1cnIpOworICAgICAgICAqY3VycisrID0gYzsKKyAgICAgICAgaWYg
KGMgPT0gJ1wwJykgeworICAgICAgICAgICAgLy8gVWggb2guIEJhZCBmb3JtYXQuIFdlIHNob3Vs
ZCBoYXZlIGdvdHRlbiBhbiBhbHBoYWJldCBpbnN0ZWFkLgorICAgICAgICAgICAgLy8gUHJpbnQg
dGhlIHN1cHBvc2VkIGZvcm1hdCBhcyBhIHN0cmluZyBpbnN0ZWFkOgorICAgICAgICAgICAgZXJy
b3JTdHIgPSBidWZmZXI7CisgICAgICAgICAgICBnb3RvIGhhbmRsZUVycm9yOworICAgICAgICB9
CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRoZSBhbHBoYSB0aGF0IHRlcm1pbmF0
ZXMgdGhlIGZvcm1hdC4KKyAgICAgICAgLy8gVGVybWluYXRlIHRoZSBidWZmZXIgKGkuZS4gYXJn
Rm9ybWF0KSBzdHJpbmc6CisgICAgICAgIEFTU0VSVChpc0FTQ0lJQWxwaGEoYykpOworICAgICAg
ICBBQk9SVF9JRl9GT1JNQVRfVE9PX0xPTkcoY3Vycik7CisgICAgICAgICpjdXJyID0gJ1wwJzsK
KworICAgICAgICBib29sIHN1Y2Nlc3MgPSBwcmludEFyZyhidWZmZXIsIGFyZ3MpOworICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGVycm9yU3RyID0gYnVmZmVyOworICAgICAg
ICAgICAgZ290byBoYW5kbGVFcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyN1bmRlZiBBQk9SVF9J
Rl9GT1JNQVRfVE9PX0xPTkcKKworICAgIHJldHVybjsKKworZm9ybWF0VG9vTG9uZzoKKyAgICAv
LyBQcmludCB0aGUgZXJyb3Igc3RyaW5nOgorICAgIEFTU0VSVCghIXN0YXJ0T2ZGb3JtYXRTcGVj
aWZpZXIpOworICAgIHAgPSBzdGFydE9mRm9ybWF0U3BlY2lmaWVyOworICAgIEFTU0VSVChwID49
IGZvcm1hdCk7CisgICAgcHJpbnRBcmcoIkVSUk9SIEAgRm9ybWF0IHRvbyBsb25nIGF0IFwiJXNc
IlxuIiwgcCk7CisgICAgcmV0dXJuOworCitoYW5kbGVFcnJvcjoKKyAgICAvLyBXZSd2ZSBnb3Qg
YW4gZXJyb3IuIENhbid0IGRvIGFueSBtb3JlIHdvcmsuIFByaW50IGFuIGVycm9yIG1lc3NhZ2Ug
aWYKKyAgICAvLyBwb3NzaWJsZSBhbmQgdGhlbiBqdXN0IHJldHVybi4KKworICAgIC8vIFRoZSBl
cnJvclN0ciBtYXkgYmUgcG9pbnRpbmcgaW50byB0aGUgbWlkZGxlIG9mIGJ1ZmZlciwgb3IgdGhl
IG9yaWdpbmFsCisgICAgLy8gZm9ybWF0IHN0cmluZy4gTW92ZSB0aGUgc3RyaW5nIHRvIGJ1ZmZl
ciBmb3IgY29uc2lzdGVuY3ksIGFuZCBhbHNvIHNvCisgICAgLy8gdGhhdCB3ZSBjYW4gc3RyaXAg
aXQgb2YgbmV3bGluZXMgYmVsb3cuCisgICAgaWYgKGVycm9yU3RyICE9IGJ1ZmZlcikgeworICAg
ICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKGVycm9yU3RyKTsKKyAgICAgICAgaWYgKGxlbmd0
aCA+IHNpemVvZihidWZmZXIpIC0gMSkKKyAgICAgICAgICAgIGxlbmd0aCA9IHNpemVvZihidWZm
ZXIpIC0gMTsKKyAgICAgICAgbWVtbW92ZShidWZmZXIsIGVycm9yU3RyLCBsZW5ndGgpOworICAg
ICAgICBidWZmZXJbbGVuZ3RoXSA9ICdcMCc7IC8vIFRlcm1pbmF0ZSB0aGUgbW92ZWQgZXJyb3Ig
c3RyaW5nLgorICAgIH0KKyAgICAvLyBTdHJpcCB0aGUgbmV3bGluZXM6CisgICAgY2hhciogY3Ag
PSBidWZmZXI7CisgICAgd2hpbGUgKCpjcCkgeworICAgICAgICBpZiAoKmNwID09ICdcbicpCisg
ICAgICAgICAgICAqY3AgPSAnICc7CisgICAgICAgIGNwKys7CisgICAgfQorICAgIC8vIFByaW50
IHRoZSBlcnJvciBzdHJpbmc6CisgICAgcHJpbnRBcmcoIkVSUk9SIEAgXCIlc1wiXG4iLCBidWZm
ZXIpOworfQorCisKK2Jvb2wgRm9ybWF0UHJpbnRlcjo6cHJpbnRBcmcoY29uc3QgY2hhciogZm9y
bWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1h
dCk7CisgICAgYm9vbCBzdWNjZXNzID0gcHJpbnRBcmcoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9l
bmQoYXJncyk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgRm9ybWF0UHJpbnRlcjo6
cHJpbnRBcmcoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgICAgaW50IGNv
dW50ID0gOjp2cHJpbnRmKGZvcm1hdCwgYXJncyk7CisgICAgcmV0dXJuIChjb3VudCA+PSAwKTsg
Ly8gRmFpbCBpZiBsZXNzIHRoYW4gMCBjaGFycyBwcmludGVkLgorfQorCisKKy8vICVKcyAtIFdU
Rjo6U3RyaW5nKgorLy8gdmVyYm9zZSBtb2RlIHByaW50czogV1RGOjpTdHJpbmcgIjx5b3VyIHN0
cmluZz4iCit2b2lkIEZvcm1hdFByaW50ZXI6OnByaW50V1RGU3RyaW5nKHZhX2xpc3QgYXJncywg
Ym9vbCB2ZXJib3NlKQoreworICAgIGNvbnN0IFN0cmluZyogc3RyID0gdmFfYXJnKGFyZ3MsIGNv
bnN0IFN0cmluZyopOworCisgICAgLy8gUHJpbnQgdmVyYm9zZSBoZWFkZXIgaWYgYXBwcm9wcmlh
dGU6CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50QXJnKCJXVEY6OlN0cmluZyBcIiIp
OworCisgICAgLy8gUHJpbnQgdGhlIHN0cmluZyBpdHNlbGY6CisgICAgaWYgKCFzdHItPmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoc3RyLT5pczhCaXQoKSkgeworICAgICAgICAgICAgY29uc3Qg
TENoYXIqIGNoYXJzID0gc3RyLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgcHJpbnRBcmco
IiVzIiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hhcnMpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IHN0ci0+Y2hhcmFjdGVyczE2
KCk7CisgICAgICAgICAgICBwcmludEFyZygiJVMiLCByZWludGVycHJldF9jYXN0PGNvbnN0IHdj
aGFyX3QqPihjaGFycykpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHJpbnQgdmVyYm9z
ZSBmb290ZXIgaWYgYXBwcm9wcmlhdGU6CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50
QXJnKCJcIiIpOworfQorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIGNsYXNzIEZpbGVG
b3JtYXRQcmludGVyCisvLyAgICAtIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSB0byBzdXBwb3J0
IGZwcmludGYuCisKK2NsYXNzIEZpbGVGb3JtYXRQcmludGVyOiBwdWJsaWMgRm9ybWF0UHJpbnRl
ciB7CitwdWJsaWM6CisgICAgRmlsZUZvcm1hdFByaW50ZXIoRklMRSopOworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIGJvb2wgcHJpbnRBcmcoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3Mp
OworCisgICAgRklMRSogbV9maWxlOworfTsKKworRmlsZUZvcm1hdFByaW50ZXI6OkZpbGVGb3Jt
YXRQcmludGVyKEZJTEUqIGZpbGUpCisgICAgOiBtX2ZpbGUoZmlsZSkKK3sgCit9CisKK2Jvb2wg
RmlsZUZvcm1hdFByaW50ZXI6OnByaW50QXJnKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBh
cmdzKQoreworICAgIGludCBjb3VudCA9IDo6dmZwcmludGYobV9maWxlLCBmb3JtYXQsIGFyZ3Mp
OworICAgIHJldHVybiAoY291bnQgPj0gMCk7IC8vIEZhaWwgaWYgbGVzcyB0aGFuIDAgY2hhcnMg
cHJpbnRlZC4KK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBjbGFzcyBTdHJpbmdG
b3JtYXRQcmludGVyCisvLyAgICAtIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSB0byBzdXBwb3J0
IHNwcmludGYuCisKK2NsYXNzIFN0cmluZ0Zvcm1hdFByaW50ZXI6IHB1YmxpYyBGb3JtYXRQcmlu
dGVyIHsKK3B1YmxpYzoKKyAgICBTdHJpbmdGb3JtYXRQcmludGVyKGNoYXIqIGJ1ZmZlcik7Citw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBwcmludEFyZyhjb25zdCBjaGFyKiBmb3JtYXQsIHZh
X2xpc3QgYXJncyk7CisKKyAgICBjaGFyKiBtX2J1ZmZlcjsKK307CisKK1N0cmluZ0Zvcm1hdFBy
aW50ZXI6OlN0cmluZ0Zvcm1hdFByaW50ZXIoY2hhciogYnVmZmVyKQorICAgIDogbV9idWZmZXIo
YnVmZmVyKQoreyAKK30KKworYm9vbCBTdHJpbmdGb3JtYXRQcmludGVyOjpwcmludEFyZyhjb25z
dCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpbnQgY291bnQgPSA6OnZzcHJp
bnRmKG1fYnVmZmVyLCBmb3JtYXQsIGFyZ3MpOworICAgIG1fYnVmZmVyICs9IGNvdW50OworICAg
IHJldHVybiAoY291bnQgPj0gMCk7IC8vIEZhaWwgaWYgbGVzcyB0aGFuIDAgY2hhcnMgcHJpbnRl
ZC4KK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBjbGFzcyBTdHJpbmdORm9ybWF0
UHJpbnRlcgorLy8gICAgLSBpbXBsZW1lbnRzIGZ1bmN0aW9uYWxpdHkgdG8gc3VwcG9ydCBzbnBy
aW50Zi4KKworY2xhc3MgU3RyaW5nTkZvcm1hdFByaW50ZXI6IHB1YmxpYyBGb3JtYXRQcmludGVy
IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdORm9ybWF0UHJpbnRlcihjaGFyKiBidWZmZXIsIHNpemVf
dCk7Citwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBwcmludEFyZyhjb25zdCBjaGFyKiBmb3Jt
YXQsIHZhX2xpc3QgYXJncyk7CisKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICBzaXplX3QgbV9z
aXplOworfTsKKworCitTdHJpbmdORm9ybWF0UHJpbnRlcjo6U3RyaW5nTkZvcm1hdFByaW50ZXIo
Y2hhciogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAs
IG1fc2l6ZShzaXplKQoreworfQorCitib29sIFN0cmluZ05Gb3JtYXRQcmludGVyOjpwcmludEFy
Zyhjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpZiAobV9zaXplID4g
MCkgeworICAgICAgICBpbnQgY291bnQgPSA6OnZzbnByaW50ZihtX2J1ZmZlciwgbV9zaXplLCBm
b3JtYXQsIGFyZ3MpOworCisgICAgICAgIC8vIEFjY29yZGluZyB0byB2c25wcmludGYgc3BlY3Ms
IC4uLgorICAgICAgICBib29sIHN1Y2Nlc3MgPSAoY291bnQgPj0gMCk7CisgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvdW50KSA+PSBtX3NpemUpIHsKKyAgICAgICAgICAgIC8vIElm
IGNvdW50ID4gc2l6ZSwgdGhlbiB3ZSBkaWRuJ3QgaGF2ZSBlbm91Z2ggYnVmZmVyIHNwYWNlLgor
ICAgICAgICAgICAgY291bnQgPSBtX3NpemU7CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGp1
c3QgdGhlIGJ1ZmZlciB0byB3aGF0J3MgbGVmdCBpZiBhcHByb3ByaWF0ZToKKyAgICAgICAgaWYg
KHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIG1fYnVmZmVyICs9IGNvdW50OworICAgICAgICAgICAg
bV9zaXplIC09IGNvdW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAg
IH0KKyAgICAvLyBObyBtb3JlIHJvb20gdG8gcHJpbnQuIERlY2xhcmUgaXQgYSBmYWlsOgorICAg
IHJldHVybiBmYWxzZTsKK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBWTUluc3Bl
Y3RvciBwcmludGYgZmFtaWx5IG9mIG1ldGhvZHM6CisKK3ZvaWQgVk1JbnNwZWN0b3I6OmZwcmlu
dGYoRklMRSogZmlsZSwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBh
cmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgRmlsZUZvcm1hdFByaW50ZXIo
ZmlsZSkucHJpbnQoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQg
Vk1JbnNwZWN0b3I6OnByaW50Zihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9s
aXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBGb3JtYXRQcmludGVy
KCkucHJpbnQoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQgVk1J
bnNwZWN0b3I6OnNwcmludGYoY2hhciogYnVmZmVyLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikK
K3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBT
dHJpbmdGb3JtYXRQcmludGVyKGJ1ZmZlcikucHJpbnQoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9l
bmQoYXJncyk7Cit9CisKK3ZvaWQgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGNoYXIqIGJ1ZmZlciwg
c2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJn
czsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIFN0cmluZ05Gb3JtYXRQcmludGVy
KGJ1ZmZlciwgc2l6ZSkucHJpbnQoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFZNSU5TUEVDVE9SKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNSW5zcGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNSW5zcGVjdG9y
LmgJKHJldmlzaW9uIDEzMjk3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9WTUluc3BlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMyArMjgsNjIgQEAKIAogI2Rl
ZmluZSBFTkFCTEVfVk1JTlNQRUNUT1IgMAogCi0jaWYgRU5BQkxFKFZNSU5TUEVDVE9SKQotCiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgPHN0
ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCisjaWYgRU5BQkxFKFZNSU5TUEVDVE9SKQorCiBjbGFz
cyBWTUluc3BlY3RvciB7CiBwdWJsaWM6ICAgIAogICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBjaGFyKiBnZXRUeXBlTmFtZShKU1ZhbHVlKTsKICAgICBzdGF0aWMgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdW1wRnJhbWUwKENhbGxGcmFtZSopOwogICAgIHN0YXRpYyBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGR1bXBGcmFtZShDYWxsRnJhbWUqLCBjb25zdCBjaGFyKiBwcmVmaXgg
PSAwLCBjb25zdCBjaGFyKiBmdW5jTmFtZSA9IDAsIGNvbnN0IGNoYXIqIGZpbGUgPSAwLCBpbnQg
bGluZSA9IC0xKTsKICAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGNvdW50RnJhbWVz
KENhbGxGcmFtZSopOwotfTsKIAotfSAvLyBuYW1lc3BhY2UgSlNDCisgICAgLy8gU3BlY2lhbCBm
YW1pbHkgb2YgLi4ucHJpbnRmKCkgZnVuY3Rpb25zIHRoYXQgc3VwcG9ydCwgaW4gYWRkaXRpb24g
dG8gdGhlCisgICAgLy8gc3RhbmRhcmQgJSBmb3JtYXRzIChlLmcuICVkLCAlcywgZXRjKSwgdGhl
IGZvbGxvd2luZyBleHRyYSBKU0MgZm9ybWF0dGluZworICAgIC8vIG9wdGlvbnMsICVKPHg+LCB3
aGVyZSA8eD4gY29uc2lzdHMgb2Y6CisgICAgLy8KKyAgICAvLyAgICsgICAgLSB2ZXJib3NlIG1v
ZGUgbW9kaWZpZXIuCisgICAgLy8gICAgICAgICAgVXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG90
aGVyIG9wdGlvbnMuIE11c3QgY29tZSBhZnRlciB0aGUgJUouCisgICAgLy8gICBzICAgIC0gV1RG
OjpTdHJpbmcqCisgICAgLy8KKyAgICAvLyBFeGFtcGxlcyBvZiB1c2FnZToKKyAgICAvLworICAg
IC8vICAgIFdURjo6U3RyaW5nIHN0cigiTXkgV1RGIFN0cmluZyIpOworICAgIC8vCisgICAgLy8g
ICAgLy8gUHJpbnRpbmcgdGhlIHN0cmluZy4gV2lsbCBwcmludDoKKyAgICAvLyAgICAvLyBUaGUg
d3RmIHN0cmluZyBzYXlzOiAiTXkgV1RGIFN0cmluZyIgYW5kIGlzIE5PVCBFTVBUWS4KKyAgICAv
LworICAgIC8vICAgIFZNSW5zcGVjdG9yOjpwcmludGYoIlRoZSB3dGYgc3RyaW5nIHNheXM6IFwi
JUpzXCIgYW5kIGlzICVzXG4iLAorICAgIC8vICAgICAgICAmc3RyLCBzdHIuaXNFbXB0eSgpPyJF
TVBUWSI6Ik5PVCBFTVBUWSIpOworICAgIC8vCisgICAgLy8gICAgLy8gUHJpbnRpbmcgdGhlIHN0
cmluZyB3aXRoIHZlcmJvc2UgbW9kZS4gV2lsbCBwcmludDoKKyAgICAvLyAgICAvLyA8V1RGOjpT
dHJpbmcgIk15IFdURiBTdHJpbmciPgorICAgIC8vCisgICAgLy8gICAgVk1JbnNwZWN0b3I6OnBy
aW50ZigiPCVKK3M+XG4iLCAmc3RyKTsKKyAgICAvLworICAgIC8vIEFsc28gYWRkZWQgc29tZSBj
b252ZW5pZW5jZSBub24tSlMgZm9ybWF0czoKKyAgICAvLworICAgIC8vICAgJWIgICAgLSBib29s
ZWFuICh2YV9hcmdzIHdpbGwgbG9vayBmb3IgYW4gaW50KS4KKyAgICAvLyAgICAgICAgICAgUHJp
bnRzIFRSVUUgaWYgbm9uLXplcm8sIGVsc2UgcHJpbnRzIEZBTFNFLgorICAgIC8vCisgICAgLy8g
Q2F1dGlvbjogdGhlIHVzZXIgaXMgZXhwZWN0ZWQgdG8gcGFzcyB0aGUgY29ycmVjdGx5IG1hdGNo
ZWQgYXJndW1lbnRzCisgICAgLy8gdG8gcGFpciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nICUgZm9t
YXR0aW5nLgorCisgICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZnByaW50ZihGSUxF
KiwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHByaW50Zihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7CisgICAgc3RhdGljIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgc3ByaW50ZihjaGFyKiwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4p
OworICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNucHJpbnRmKGNoYXIqLCBzaXpl
X3QsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKK307CiAKICNlbmRpZiAvLyBFTkFCTEUoVk1J
TlNQRUNUT1IpCiAKK30gLy8gbmFtZXNwYWNlIEpTQworCiAjZW5kaWYgLy8gVk1JbnNwZWN0b3Iu
aApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyOTc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTAtMzAgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEEgSlNDIHByaW50ZiAoc3VwcG9y
dCBmb3IgJUorcyBhbmQgJWIpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAwNTY2LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIGZvcndhcmRpbmcgaGVhZGVyIGZvciBWTUluc3BlY3Rvci5oLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBuZWVkZWQgZm9yIHRoaXMuCisKKyAgICAgICAgKiBGb3J3
YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9WTUluc3BlY3Rvci5oOiBBZGRlZC4KKwogMjAxMi0x
MC0zMCAgQ2hhcmxlcyBXZWkgIDxjaGFybGVzLndlaUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAg
ICAgICAgW0JsYWNrQmVycnldIFB1cmdlQ3JlZGVudGlhbCBzaG91bGQgYWxzbyBwdXJnZSB0aGUg
cGVyc2lzdGVkIGNyZWRlbnRpYWwgc3RvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL2ludGVycHJldGVyL1ZNSW5zcGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVy
L1ZNSW5zcGVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJDb3JlX0ZXRF9W
TUluc3BlY3Rvcl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX1ZNSW5zcGVjdG9yX2gKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9WTUluc3BlY3Rvci5oPgorI2VuZGlmCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzI5NzkpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0x
MC0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQSBKU0MgcHJp
bnRmIChzdXBwb3J0IGZvciAlSitzIGFuZCAlYikuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA1NjYuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgVk1JbnNw
ZWN0b3I6OmZwcmludGYoKSBzcHJpbnRmKCkgYW5kIHNucHJpbnRmKCkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlOiBBZGRlZC4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL1ZNSW5zcGVjdG9yLmNwcDog
QWRkZWQuCisgICAgICAgIChURVNUKToKKwogMjAxMi0xMC0zMCAgRGlyayBQcmFua2UgIDxkcHJh
bmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICB3ZWJraXQtcGF0Y2ggcmViYXNlbGluZSo6IGFk
ZCBtb3JlIGhlbHBmdWwgbG9nZ2luZwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDEzMjk3OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAKIAkJ
RjZGNDlDNkIxNTU0NUNBNzAwMDdGMzlEIC8qIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVu
ZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2
RjQ5QzY2MTU1NDVDOEQwMDA3RjM5RCAvKiBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRs
ZS5jcHAgKi87IH07CiAJCUY2RkREREQzMTQyNDFBRDQwMDRGMTcyOSAvKiBQcml2YXRlQnJvd3Np
bmdQdXNoU3RhdGVOb0hpc3RvcnlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNkZEREREMjE0MjQxQUQ0MDA0RjE3MjkgLyogUHJpdmF0
ZUJyb3dzaW5nUHVzaFN0YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwICovOyB9OwogCQlGNkZERERE
NjE0MjQxQzZGMDA0RjE3MjkgLyogcHVzaC1zdGF0ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2RkREREQ1MTQyNDFDNDgwMDRGMTcy
OSAvKiBwdXNoLXN0YXRlLmh0bWwgKi87IH07CisJCUZFMjE3RUNEMTY0MEE1NEEwMDUyOTg4QiAv
KiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTIxN0VDQzE2NDBBNTRBMDA1Mjk4OEIgLyogVk1JbnNwZWN0b3IuY3BwICovOyB9
OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5l
ckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC00MzgsNiArNDM5LDcgQEAKIAkJRjZGNDlDNjcxNTU0
NUM4RDAwMDdGMzlEIC8qIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2RkREREQyMTQyNDFBRDQwMDRGMTcyOSAv
KiBQcml2YXRlQnJvd3NpbmdQdXNoU3RhdGVOb0hpc3RvcnlDYWxsYmFjay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcml2YXRlQnJvd3NpbmdQdXNoU3RhdGVOb0hp
c3RvcnlDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2RkREREQ1
MTQyNDFDNDgwMDRGMTcyOSAvKiBwdXNoLXN0YXRlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSAicHVzaC1zdGF0ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkUyMTdFQ0MxNjQwQTU0QTAwNTI5ODhCIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtNzE4LDYgKzcyMCw3IEBA
CiAJCUJDQjlFQjY2MTEyMzY2RDgwMEExMzdFMCAvKiBUZXN0cyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkUyMTdFQ0IxNjQwQTU0QTAwNTI5ODhCIC8q
IEphdmFTY3JpcHRDb3JlICovLAogCQkJCUMwODU4N0Y5MTNGRUMzOUIwMDFFRjRFNSAvKiBUZXN0
V2ViS2l0QVBJICovLAogCQkJCUMwN0U2Q0FEMTNGRDY3NjUwMDM4QjIyQiAvKiBtYWMgKi8sCiAJ
CQkJNDQwQTFEMzYxNEEwMTAwMDAwOEE2NkYyIC8qIFdlYkNvcmUgKi8sCkBAIC04MTYsNiArODE5
LDE0IEBACiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJRkUyMTdFQ0IxNjQwQTU0QTAwNTI5ODhCIC8qIEphdmFTY3JpcHRDb3JlICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGRTIxN0VDQzE2NDBBNTRBMDA1
Mjk4OEIgLyogVk1JbnNwZWN0b3IuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBKYXZhU2NyaXB0
Q29yZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAvKiBFbmQgUEJYR3JvdXAg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtMTAw
NCw2ICsxMDE1LDcgQEAKIAkJCQkyOTQzQkU4NjE2MURGRUI4MDA5OTlFM0QgLyogVXNlckNvbnRl
bnRUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNEY0RDJDMEUxNjI2RkUyNzAwMzIwRkUxIC8q
IE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc4RTY0
NzMxNjMyNjQ2RDAwQjZDNjc2IC8qIEluamVjdGVkQnVuZGxlRnJhbWVIaXRUZXN0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZFMjE3RUNEMTY0MEE1NEEwMDUyOTg4QiAvKiBWTUluc3BlY3Rvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNj
cmlwdENvcmUvVk1JbnNwZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvVk1JbnNwZWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9WTUluc3BlY3Rvci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuaD4KKyNpbmNsdWRl
IDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CisvLyBUaGVyZSdzIG5vdCBtdWNoIHdlIGNhbiB0ZXN0IGZvciB0aGUgVk1JbnNwZWN0b3I6OnBy
aW50ZigpIGNhc2UgZXhjZXB0IHRvCisvLyBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY3Jhc2guIFVu
Zm9ydHVuYXRlbHksIHdlIGFsc28gZG9uJ3Qgd2FudCBhbGwgdGhlCisvLyB0ZXN0IHN0cmluZ3Mg
Y3Jvd2Rpbmcgb3V0IHN0ZG91dC4gU28sIHdlIGZvcmVnbyB0aGUgcHJpbnRmIHRlc3RzLgorLy8g
Tk9URSB0aGF0IHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgb2YgVk1JbnNwZWN0b3I6OnByaW50
ZigpIGlzIHRoZQorLy8gZm9ybWF0dGluZyBmdW5jdGlvbmFsaXR5LCBhbmQgaXQgaXMgYXJlIGFs
cmVhZHkgYmVpbmcgdGVzdGVkIGJ5IHRoZQorLy8gZnByaW50ZigpIGFuZCBzcHJpbnRmKCkgY2Fz
ZXMuCisKKworLy8gVGhlIFZNSW5zcGVjdG9yOjpmcHJpbnRmKCkgdGVzdCB3b3JrcyBieSBwcmlu
dGluZyB0aGUgc3RyaW5nIHRvIGEgdGVtcCBmaWxlLAorLy8gYW5kIHRoZW4gcmVhZGluZyB0aGUg
ZmlsZSBjb250ZW50IGJhY2sgaW50byBhIGJ1ZmZlciwgd2hpY2ggd2UsIGluIHR1cm4sCisvLyBj
b21wYXJlIGFnYWluc3QgdGhlIGV4cGVjdGVkIHN0cmluZy4KKworVEVTVChKU0MsIFZNSW5zcGVj
dG9yRnByaW50ZikKK3sKKyNpZiBFTkFCTEUoVk1JTlNQRUNUT1IpCisgICAgY2hhciBhY3R1YWxb
MTAyNF07CisgICAgY2hhciBleHBlY3RlZFsxMDI0XTsKKyAgICBjb25zdCBjaGFyKiBmb3JtYXQ7
CisgICAgY29uc3QgY2hhciogZXhwZWN0ZWRMaXRlcmFsOworICAgIEZJTEUqIGZpbGU7CisgICAg
Y29uc3QgY2hhciogZmlsZW5hbWUgPSAiL3RtcC9WTUluc3BlY3RvckZwcmludGZUZXN0LnR4dCI7
CisgICAgc2l6ZV90IHNpemU7CisKKyNkZWZpbmUgT1BFTl9GSUxFKGZpbGUpICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOyAgICAgICAgICAg
IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBSRUFEX0FORF9DTE9TRV9GSUxFKGZp
bGUsIGFjdHVhbCkgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBmY2xvc2UoZmlsZSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyIik7ICAgICAgICAgICAg
XAorICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7ICAgICAgICAgICAgICAgXAorICAg
ICAgICBzaXplID0gZnRlbGwoZmlsZSk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBy
ZXdpbmQoZmlsZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmcmVhZChh
Y3R1YWwsIDEsIHNpemUsIGZpbGUpOyAgICAgICAgICAgXAorICAgICAgICBhY3R1YWxbc2l6ZV0g
PSAnXDAnOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmY2xvc2UoZmlsZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgLy8gVGVz
dGluZyBzdGFuZGFyZCBkZWZhdWx0IGZvcm1hdCBzcGVjaWZpZXJzOgorICAgIC8vIE5vdGU6IHNo
b3VsZCB3b3JrIGp1c3QgbGlrZSBzcHJpbnRmLiBTbywgd2UganVzdCBjb21wYXJlIGFnYWluc3Qg
dGhhdC4KKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICAvLyBU
aGUgY29tcGlsZXIgd2FybmluZyBmbGFncyBhcmUgY29uZmlndXJlZCB0byBleHBlY3QgYSBsaXRl
cmFsIHN0cmluZyBmb3IKKyAgICAvLyA6OnNwcmludGYgYmVsb3cuIFNvLCB1c2UgYSAjZGVmaW5l
IGZvciB0aGlzIG9uZSBjYXNlIHRvIGtlZXAgdGhlCisgICAgLy8gY29tcGlsZXIgaGFwcHkuCisj
dW5kZWYgTElURVJBTF9GT1JNQVQKKyNkZWZpbmUgTElURVJBTF9GT1JNQVQgIiclJSUlJyAgICAg
ICAgICAgICAgICAgICAgICAgICA9PT4gJyUlJ1xuIgorCisgICAgT1BFTl9GSUxFKGZpbGUpOwor
ICAgIFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsIExJVEVSQUxfRk9STUFUKTsKKyAgICBSRUFE
X0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBM
SVRFUkFMX0ZPUk1BVCk7CisKKyN1bmRlZiBMSVRFUkFMX0ZPUk1BVAorICAgIEFTU0VSVF9FUShz
dHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBz
aXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJWMnLCAneCcgICAgICAgICAgICAgICAg
ICAgID09PiAnJWMnXG4iOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6
ZnByaW50ZihmaWxlLCBmb3JtYXQsICd4Jyk7CisgICAgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxl
LCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCAneCcpOworICAgIEFT
U0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVh
bCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJSpjJywgOCwgJ3gnICAg
ICAgICAgICAgICAgID09PiAnJSpjJ1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1J
bnNwZWN0b3I6OmZwcmludGYoZmlsZSwgZm9ybWF0LCA4LCAneCcpOworICAgIFJFQURfQU5EX0NM
T1NFX0ZJTEUoZmlsZSwgYWN0dWFsKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwg
OCwgJ3gnKTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKwor
ICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICIn
JSVzJywgXCJoZWxsbyB3b3JsZFwiICAgICAgICAgID09PiAnJXMnXG4iOworICAgIE9QRU5fRklM
RShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6ZnByaW50ZihmaWxlLCBmb3JtYXQsICJoZWxsbyB3
b3JsZCIpOworICAgIFJFQURfQU5EX0NMT1NFX0ZJTEUoZmlsZSwgYWN0dWFsKTsKKyAgICA6OnNw
cmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgImhlbGxvIHdvcmxkIik7CisgICAgQVNTRVJUX0VRKHN0
cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNp
emVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlKnMnLCA4LCBcImhlbGxvIHdvcmxkXCIg
ICAgICA9PT4gJyUqcydcbiI7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9y
OjpmcHJpbnRmKGZpbGUsIGZvcm1hdCwgOCwgImhlbGxvIHdvcmxkIik7CisgICAgUkVBRF9BTkRf
Q0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0
LCA4LCAiaGVsbG8gd29ybGQiKTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0
ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAg
IGZvcm1hdCA9ICInJSUqcycsIDgsIFwiaGVsbG9cIiAgICAgICAgICAgID09PiAnJSpzJ1xuIjsK
KyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmlsZSwgZm9y
bWF0LCA4LCAiaGVsbG8iKTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7
CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsIDgsICJoZWxsbyIpOworICAgIEFTU0VS
VF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwg
J3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJWQnLCA5ODc2NTQzMjEgICAg
ICAgICAgICAgID09PiAnJWQnXG4iOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3Bl
Y3Rvcjo6ZnByaW50ZihmaWxlLCBmb3JtYXQsIDk4NzY1NDMyMSk7CisgICAgUkVBRF9BTkRfQ0xP
U0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCA5
ODc2NTQzMjEpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOwor
CisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0g
IiclJXUnLCA0Mjc2NTQzMjEwdSAgICAgICAgICAgID09PiAnJXUnXG4iOworICAgIE9QRU5fRklM
RShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6ZnByaW50ZihmaWxlLCBmb3JtYXQsIDQyNzY1NDMy
MTB1KTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgOjpzcHJp
bnRmKGV4cGVjdGVkLCBmb3JtYXQsIDQyNzY1NDMyMTB1KTsKKyAgICBBU1NFUlRfRVEoc3RyY21w
KGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9m
KGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSV1JywgMHhmZmZmZmZmZiAgICAgICAgICAgICA9
PT4gJyV1J1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmlu
dGYoZmlsZSwgZm9ybWF0LCAweGZmZmZmZmZmKTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZp
bGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsIDB4ZmZmZmZmZmYp
OworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgbWVt
c2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJXgnLCAw
eGZmZmZmZmZmICAgICAgICAgICAgID09PiAnJXgnXG4iOworICAgIE9QRU5fRklMRShmaWxlKTsK
KyAgICBWTUluc3BlY3Rvcjo6ZnByaW50ZihmaWxlLCBmb3JtYXQsIDB4ZmZmZmZmZmYpOworICAg
IFJFQURfQU5EX0NMT1NFX0ZJTEUoZmlsZSwgYWN0dWFsKTsKKyAgICA6OnNwcmludGYoZXhwZWN0
ZWQsIGZvcm1hdCwgMHhmZmZmZmZmZik7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4
cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsK
KyAgICBmb3JtYXQgPSAiJyUlcCcsICh2b2lkKikweGFiY2RiYWJlICAgICAgPT0+ICclcCdcbiI7
CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsIGZv
cm1hdCwgKHZvaWQqKTB4YWJjZGJhYmUpOworICAgIFJFQURfQU5EX0NMT1NFX0ZJTEUoZmlsZSwg
YWN0dWFsKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgKHZvaWQqKTB4YWJjZGJh
YmUpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAg
bWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJWx1
JywgMTIzNDU2Nzg5MDk4NzY1NDMyMXVsID09PiAnJWx1J1xuIjsKKyAgICBPUEVOX0ZJTEUoZmls
ZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmlsZSwgZm9ybWF0LCAxMjM0NTY3ODkwOTg3
NjU0MzIxdWwpOworICAgIFJFQURfQU5EX0NMT1NFX0ZJTEUoZmlsZSwgYWN0dWFsKTsKKyAgICA6
OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgMTIzNDU2Nzg5MDk4NzY1NDMyMXVsKTsKKyAgICBB
U1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1
YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSVmJywgMTIzNC41Njcg
ICAgICAgICAgICAgICA9PT4gJyVmJ1xuIjsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1J
bnNwZWN0b3I6OmZwcmludGYoZmlsZSwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgUkVBRF9BTkRf
Q0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0
LCAxMjM0LjU2Nyk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7
CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQg
PSAiJyUlLjJmJywgMTIzNC41NjcgICAgICAgICAgICAgPT0+ICclLjJmJ1xuIjsKKyAgICBPUEVO
X0ZJTEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmlsZSwgZm9ybWF0LCAxMjM0
LjU2Nyk7CisgICAgUkVBRF9BTkRfQ0xPU0VfRklMRShmaWxlLCBhY3R1YWwpOworICAgIDo6c3By
aW50ZihleHBlY3RlZCwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChh
Y3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihh
Y3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlMTAuMmYnLCAxMjM0LjU2NyAgICAgICAgICAgPT0+
ICclMTAuMmYnXG4iOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6ZnBy
aW50ZihmaWxlLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZp
bGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsIDEyMzQuNTY3KTsK
KyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNl
dChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSUwMTAuMmYn
LCAxMjM0LjU2NyAgICAgICAgICA9PT4gJyUwMTAuMmYnXG4iOworICAgIE9QRU5fRklMRShmaWxl
KTsKKyAgICBWTUluc3BlY3Rvcjo6ZnByaW50ZihmaWxlLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAg
ICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4cGVj
dGVkLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhw
ZWN0ZWQpLCAwKTsKKworICAgIC8vIEJhZCAvIHdlaXJkIGZvcm1hdHM6CisgICAgbWVtc2V0KGFj
dHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJTUuNCcsIDk4NzY1
NDMyMSAgICAgICAgICAgID09PiAnJTUuNCdcbiI7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAg
IFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsIGZvcm1hdCwgOTg3NjU0MzIxKTsKKyAgICBSRUFE
X0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgZXhwZWN0ZWRMaXRlcmFsID0gIicl
NS40JywgOTg3NjU0MzIxICAgICAgICAgICAgPT0+ICdFUlJPUiBAIFwiJTUuNCcgXCJcbiI7Cisg
ICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkTGl0ZXJhbCksIDApOworCisgICAg
bWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJTUu
NCcgJyUlZCcsIDk4NzY1NDMyMSwgNCAgICA9PT4gJyU1LjQnICclZCdcbiI7CisgICAgT1BFTl9G
SUxFKGZpbGUpOworICAgIFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsIGZvcm1hdCwgOTg3NjU0
MzIxLCA0KTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgOjpz
cHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsIDk4NzY1NDMyMSwgNCk7CisgICAgQVNTRVJUX0VRKHN0
cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNp
emVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUldycgJyUlZCcsIDk4NzY1NDMyMSwgNiAg
ICAgID09PiAnJXcnICclZCdcbiI7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVj
dG9yOjpmcHJpbnRmKGZpbGUsIGZvcm1hdCwgOTg3NjU0MzIxLCA2KTsKKyAgICBSRUFEX0FORF9D
TE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQs
IDk4NzY1NDMyMSwgNik7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwg
MCk7CisKKworICAgIC8vIFRlc3RpbmcgdGhlICViIGV4dGVuc2lvbjoKKyAgICBtZW1zZXQoYWN0
dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1J
bnNwZWN0b3I6OmZwcmludGYoZmlsZSwgIiclJWInLCAwICAgICAgICAgID09PiAnJWInXG4iLCAw
KTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgQVNTRVJUX0VR
KHN0cmNtcChhY3R1YWwsICInJWInLCAwICAgICAgICAgID09PiAnRkFMU0UnXG4iKSwgMCk7CisK
KyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBPUEVOX0ZJTEUo
ZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmlsZSwgIiclJWInLCAxICAgICAgICAg
ID09PiAnJWInXG4iLCAxKTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7
CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsICInJWInLCAxICAgICAgICAgID09PiAnVFJV
RSdcbiIpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOwor
ICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rvcjo6ZnByaW50ZihmaWxlLCAiJyUl
YicsIC0xMjM0NTY3ODkgPT0+ICclYidcbiIsIC0xMjM0NTY3ODkpOworICAgIFJFQURfQU5EX0NM
T1NFX0ZJTEUoZmlsZSwgYWN0dWFsKTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgIicl
YicsIC0xMjM0NTY3ODkgPT0+ICdUUlVFJ1xuIiksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwg
J3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZNSW5zcGVj
dG9yOjpmcHJpbnRmKGZpbGUsICInJSViJywgMTIzNDU2Nzg5ICA9PT4gJyViJ1xuIiwgMTIzNDU2
Nzg5KTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgQVNTRVJU
X0VRKHN0cmNtcChhY3R1YWwsICInJWInLCAxMjM0NTY3ODkgID09PiAnVFJVRSdcbiIpLCAwKTsK
KworCisgICAgLy8gVGVzdGluZyB0aGUgJUo8eD4gZXh0ZW5zaW9uczoKKyAgICBTdHJpbmcgc3Ry
MSgiVGVzdCBXVEYgU3RyaW5nIik7CisgICAgU3RyaW5nIHN0cjIoIiIpOworCisgICAgbWVtc2V0
KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAg
IFZNSW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsICInJSVKcycgaXMgJSVzLCAmc3RyMSwgc3RyMS5p
c0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZXCIgID09PiAnJUpzJyBpcyAlc1xuIiwKKyAg
ICAgICAgJnN0cjEsIHN0cjEuaXNFbXB0eSgpID8gIkVNUFRZIiA6ICJOT1QgRU1QVFkiKTsKKyAg
ICBSRUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgZXhwZWN0ZWRMaXRlcmFs
ID0gIiclSnMnIGlzICVzLCAmc3RyMSwgc3RyMS5pc0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVN
UFRZXCIgID09PiAnVGVzdCBXVEYgU3RyaW5nJyBpcyBOT1QgRU1QVFlcbiI7CisgICAgQVNTRVJU
X0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkTGl0ZXJhbCksIDApOworCisgICAgbWVtc2V0KGFj
dHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgT1BFTl9GSUxFKGZpbGUpOworICAgIFZN
SW5zcGVjdG9yOjpmcHJpbnRmKGZpbGUsICInJSVKcycgaXMgJSVzLCAmc3RyMiwgc3RyMi5pc0Vt
cHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZXCIgID09PiAnJUpzJyBpcyAlc1xuIiwKKyAgICAg
ICAgJnN0cjIsIHN0cjIuaXNFbXB0eSgpID8gIkVNUFRZIiA6ICJOT1QgRU1QVFkiKTsKKyAgICBS
RUFEX0FORF9DTE9TRV9GSUxFKGZpbGUsIGFjdHVhbCk7CisgICAgZXhwZWN0ZWRMaXRlcmFsID0g
IiclSnMnIGlzICVzLCAmc3RyMiwgc3RyMi5pc0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZ
XCIgID09PiAnJyBpcyBFTVBUWVxuIjsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhw
ZWN0ZWRMaXRlcmFsKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1
YWwpKTsKKyAgICBPUEVOX0ZJTEUoZmlsZSk7CisgICAgVk1JbnNwZWN0b3I6OmZwcmludGYoZmls
ZSwgIiclJUorcycgaXMgJSVzLCAmc3RyMSwgc3RyMS5pc0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9U
IEVNUFRZXCIgPT0+ICclSitzJyBpcyAlc1xuIiwKKyAgICAgICAgJnN0cjEsIHN0cjEuaXNFbXB0
eSgpID8gIkVNUFRZIiA6ICJOT1QgRU1QVFkiKTsKKyAgICBSRUFEX0FORF9DTE9TRV9GSUxFKGZp
bGUsIGFjdHVhbCk7CisgICAgZXhwZWN0ZWRMaXRlcmFsID0gIiclSitzJyBpcyAlcywgJnN0cjEs
IHN0cjEuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiID09PiAnV1RGOjpTdHJpbmcg
XCJUZXN0IFdURiBTdHJpbmdcIicgaXMgTk9UIEVNUFRZXG4iOworICAgIEFTU0VSVF9FUShzdHJj
bXAoYWN0dWFsLCBleHBlY3RlZExpdGVyYWwpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6
Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIE9QRU5fRklMRShmaWxlKTsKKyAgICBWTUluc3BlY3Rv
cjo6ZnByaW50ZihmaWxlLCAiJyUlSitzJyBpcyAlJXMsICZzdHIyLCBzdHIyLmlzRW1wdHkoKT9c
IkVNUFRZXCI6XCJOT1QgRU1QVFlcIiA9PT4gJyVKK3MnIGlzICVzXG4iLAorICAgICAgICAmc3Ry
Miwgc3RyMi5pc0VtcHR5KCkgPyAiRU1QVFkiIDogIk5PVCBFTVBUWSIpOworICAgIFJFQURfQU5E
X0NMT1NFX0ZJTEUoZmlsZSwgYWN0dWFsKTsKKyAgICBleHBlY3RlZExpdGVyYWwgPSAiJyVKK3Mn
IGlzICVzLCAmc3RyMiwgc3RyMi5pc0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZXCIgPT0+
ICdXVEY6OlN0cmluZyBcIlwiJyBpcyBFTVBUWVxuIjsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFj
dHVhbCwgZXhwZWN0ZWRMaXRlcmFsKSwgMCk7CisKKyN1bmRlZiBPUEVOX0ZJTEUKKyN1bmRlZiBS
RUFEX0FORF9DTE9TRV9GSUxFCisKKyNlbmRpZgorfQorCisKK1RFU1QoSlNDLCBWTUluc3BlY3Rv
clNwcmludGYpCit7CisjaWYgRU5BQkxFKFZNSU5TUEVDVE9SKQorICAgIGNoYXIgYWN0dWFsWzEw
MjRdOworICAgIGNoYXIgZXhwZWN0ZWRbMTAyNF07CisgICAgY29uc3QgY2hhciogZm9ybWF0Owor
ICAgIGNvbnN0IGNoYXIqIGV4cGVjdGVkTGl0ZXJhbDsKKworICAgIC8vIFRlc3Rpbmcgc3RhbmRh
cmQgZGVmYXVsdCBmb3JtYXQgc3BlY2lmaWVyczoKKyAgICAvLyBOb3RlOiBzaG91bGQgd29yayBq
dXN0IGxpa2Ugc3ByaW50Zi4gU28sIHdlIGp1c3QgY29tcGFyZSBhZ2FpbnN0IHRoYXQuCisgICAg
bWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgLy8gVGhlIGNvbXBpbGVy
IHdhcm5pbmcgZmxhZ3MgYXJlIGNvbmZpZ3VyZWQgdG8gZXhwZWN0IGEgbGl0ZXJhbCBzdHJpbmcg
Zm9yCisgICAgLy8gOjpzcHJpbnRmIGJlbG93LiBTbywgdXNlIGEgI2RlZmluZSBmb3IgdGhpcyBv
bmUgY2FzZSB0byBrZWVwIHRoZQorICAgIC8vIGNvbXBpbGVyIGhhcHB5LgorI3VuZGVmIExJVEVS
QUxfRk9STUFUCisjZGVmaW5lIExJVEVSQUxfRk9STUFUICInJSUlJScgICAgICAgICAgICAgICAg
ICAgICAgICAgPT0+ICclJSdcbiIKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWwsIExJ
VEVSQUxfRk9STUFUKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIExJVEVSQUxfRk9STUFUKTsK
KyN1bmRlZiBMSVRFUkFMX0ZPUk1BVAorICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBl
Y3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7Cisg
ICAgZm9ybWF0ID0gIiclJWMnLCAneCcgICAgICAgICAgICAgICAgICAgID09PiAnJWMnXG4iOwor
ICAgIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9ybWF0LCAneCcpOworICAgIDo6c3By
aW50ZihleHBlY3RlZCwgZm9ybWF0LCAneCcpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFs
LCBleHBlY3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFs
KSk7CisgICAgZm9ybWF0ID0gIiclJSpjJywgOCwgJ3gnICAgICAgICAgICAgICAgID09PiAnJSpj
J1xuIjsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWwsIGZvcm1hdCwgOCwgJ3gnKTsK
KyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgOCwgJ3gnKTsKKyAgICBBU1NFUlRfRVEo
c3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWwsICd6Jywg
c2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSVzJywgXCJoZWxsbyB3b3JsZFwiICAg
ICAgICAgID09PiAnJXMnXG4iOworICAgIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9y
bWF0LCAiaGVsbG8gd29ybGQiKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgImhl
bGxvIHdvcmxkIik7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7
CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3JtYXQg
PSAiJyUlKnMnLCA4LCBcImhlbGxvIHdvcmxkXCIgICAgICA9PT4gJyUqcydcbiI7CisgICAgVk1J
bnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCBmb3JtYXQsIDgsICJoZWxsbyB3b3JsZCIpOworICAg
IDo6c3ByaW50ZihleHBlY3RlZCwgZm9ybWF0LCA4LCAiaGVsbG8gd29ybGQiKTsKKyAgICBBU1NF
UlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChhY3R1YWws
ICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSUqcycsIDgsIFwiaGVsbG9c
IiAgICAgICAgICAgID09PiAnJSpzJ1xuIjsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1
YWwsIGZvcm1hdCwgOCwgImhlbGxvIik7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQs
IDgsICJoZWxsbyIpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDAp
OworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0
ID0gIiclJWQnLCA5ODc2NTQzMjEgICAgICAgICAgICAgID09PiAnJWQnXG4iOworICAgIFZNSW5z
cGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9ybWF0LCA5ODc2NTQzMjEpOworICAgIDo6c3ByaW50
ZihleHBlY3RlZCwgZm9ybWF0LCA5ODc2NTQzMjEpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0
dWFsLCBleHBlY3RlZCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0
dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJXUnLCA0Mjc2NTQzMjEwdSAgICAgICAgICAgID09PiAn
JXUnXG4iOworICAgIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9ybWF0LCA0Mjc2NTQz
MjEwdSk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsIDQyNzY1NDMyMTB1KTsKKyAg
ICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChh
Y3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSV1JywgMHhmZmZm
ZmZmZiAgICAgICAgICAgICA9PT4gJyV1J1xuIjsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50Zihh
Y3R1YWwsIGZvcm1hdCwgMHhmZmZmZmZmZik7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3Jt
YXQsIDB4ZmZmZmZmZmYpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCks
IDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9y
bWF0ID0gIiclJXgnLCAweGZmZmZmZmZmICAgICAgICAgICAgID09PiAnJXgnXG4iOworICAgIFZN
SW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9ybWF0LCAweGZmZmZmZmZmKTsKKyAgICA6OnNw
cmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgMHhmZmZmZmZmZik7CisgICAgQVNTRVJUX0VRKHN0cmNt
cChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVv
ZihhY3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlcCcsICh2b2lkKikweGFiY2RiYWJlICAgICAg
PT0+ICclcCdcbiI7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCBmb3JtYXQsICh2
b2lkKikweGFiY2RiYWJlKTsKKyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgKHZvaWQq
KTB4YWJjZGJhYmUpOworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDAp
OworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0
ID0gIiclJWx1JywgMTIzNDU2Nzg5MDk4NzY1NDMyMXVsID09PiAnJWx1J1xuIjsKKyAgICBWTUlu
c3BlY3Rvcjo6c3ByaW50ZihhY3R1YWwsIGZvcm1hdCwgMTIzNDU2Nzg5MDk4NzY1NDMyMXVsKTsK
KyAgICA6OnNwcmludGYoZXhwZWN0ZWQsIGZvcm1hdCwgMTIzNDU2Nzg5MDk4NzY1NDMyMXVsKTsK
KyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNl
dChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSVmJywgMTIz
NC41NjcgICAgICAgICAgICAgICA9PT4gJyVmJ1xuIjsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50
ZihhY3R1YWwsIGZvcm1hdCwgMTIzNC41NjcpOworICAgIDo6c3ByaW50ZihleHBlY3RlZCwgZm9y
bWF0LCAxMjM0LjU2Nyk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwg
MCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBmb3Jt
YXQgPSAiJyUlLjJmJywgMTIzNC41NjcgICAgICAgICAgICAgPT0+ICclLjJmJ1xuIjsKKyAgICBW
TUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWwsIGZvcm1hdCwgMTIzNC41NjcpOworICAgIDo6c3By
aW50ZihleHBlY3RlZCwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChh
Y3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihh
Y3R1YWwpKTsKKyAgICBmb3JtYXQgPSAiJyUlMTAuMmYnLCAxMjM0LjU2NyAgICAgICAgICAgPT0+
ICclMTAuMmYnXG4iOworICAgIFZNSW5zcGVjdG9yOjpzcHJpbnRmKGFjdHVhbCwgZm9ybWF0LCAx
MjM0LjU2Nyk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAg
ICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgIG1lbXNldChh
Y3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIGZvcm1hdCA9ICInJSUwMTAuMmYnLCAx
MjM0LjU2NyAgICAgICAgICA9PT4gJyUwMTAuMmYnXG4iOworICAgIFZNSW5zcGVjdG9yOjpzcHJp
bnRmKGFjdHVhbCwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBm
b3JtYXQsIDEyMzQuNTY3KTsKKyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQp
LCAwKTsKKworICAgIC8vIEJhZCAvIHdlaXJkIGZvcm1hdHM6CisgICAgbWVtc2V0KGFjdHVhbCwg
J3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJTUuNCcsIDk4NzY1NDMyMSAg
ICAgICAgICAgID09PiAnJTUuNCdcbiI7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFs
LCBmb3JtYXQsIDk4NzY1NDMyMSk7CisgICAgZXhwZWN0ZWRMaXRlcmFsID0gIiclNS40JywgOTg3
NjU0MzIxICAgICAgICAgICAgPT0+ICdFUlJPUiBAIFwiJTUuNCcgXCJcbiI7CisgICAgQVNTRVJU
X0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkTGl0ZXJhbCksIDApOworCisgICAgbWVtc2V0KGFj
dHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgZm9ybWF0ID0gIiclJTUuNCcgJyUlZCcs
IDk4NzY1NDMyMSwgNCAgICA9PT4gJyU1LjQnICclZCdcbiI7CisgICAgVk1JbnNwZWN0b3I6OnNw
cmludGYoYWN0dWFsLCBmb3JtYXQsIDk4NzY1NDMyMSwgNCk7CisgICAgOjpzcHJpbnRmKGV4cGVj
dGVkLCBmb3JtYXQsIDk4NzY1NDMyMSwgNCk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWws
IGV4cGVjdGVkKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwp
KTsKKyAgICBmb3JtYXQgPSAiJyUldycgJyUlZCcsIDk4NzY1NDMyMSwgNiAgICAgID09PiAnJXcn
ICclZCdcbiI7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCBmb3JtYXQsIDk4NzY1
NDMyMSwgNik7CisgICAgOjpzcHJpbnRmKGV4cGVjdGVkLCBmb3JtYXQsIDk4NzY1NDMyMSwgNik7
CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKworICAgIC8v
IFRlc3RpbmcgdGhlICViIGV4dGVuc2lvbjoKKyAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVv
ZihhY3R1YWwpKTsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWwsICInJSViJywgMCAg
ICAgICAgICA9PT4gJyViJ1xuIiwgMCk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsICIn
JWInLCAwICAgICAgICAgID09PiAnRkFMU0UnXG4iKSwgMCk7CisKKyAgICBtZW1zZXQoYWN0dWFs
LCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50ZihhY3R1YWws
ICInJSViJywgMSAgICAgICAgICA9PT4gJyViJ1xuIiwgMSk7CisgICAgQVNTRVJUX0VRKHN0cmNt
cChhY3R1YWwsICInJWInLCAxICAgICAgICAgID09PiAnVFJVRSdcbiIpLCAwKTsKKworICAgIG1l
bXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIFZNSW5zcGVjdG9yOjpzcHJp
bnRmKGFjdHVhbCwgIiclJWInLCAtMTIzNDU2Nzg5ID09PiAnJWInXG4iLCAtMTIzNDU2Nzg5KTsK
KyAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgIiclYicsIC0xMjM0NTY3ODkgPT0+ICdUUlVF
J1xuIiksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7Cisg
ICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCAiJyUlYicsIDEyMzQ1Njc4OSAgPT0+ICcl
YidcbiIsIDEyMzQ1Njc4OSk7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsICInJWInLCAx
MjM0NTY3ODkgID09PiAnVFJVRSdcbiIpLCAwKTsKKworCisgICAgLy8gVGVzdGluZyB0aGUgJUo8
eD4gZXh0ZW5zaW9uczoKKyAgICBTdHJpbmcgc3RyMSgiVGVzdCBXVEYgU3RyaW5nIik7CisgICAg
U3RyaW5nIHN0cjIoIiIpOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFs
KSk7CisgICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCAiJyUlSnMnIGlzICUlcywgJnN0
cjEsIHN0cjEuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiICA9PT4gJyVKcycgaXMg
JXNcbiIsCisgICAgICAgICZzdHIxLCBzdHIxLmlzRW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVN
UFRZIik7CisgICAgZXhwZWN0ZWRMaXRlcmFsID0gIiclSnMnIGlzICVzLCAmc3RyMSwgc3RyMS5p
c0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZXCIgID09PiAnVGVzdCBXVEYgU3RyaW5nJyBp
cyBOT1QgRU1QVFlcbiI7CisgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkTGl0
ZXJhbCksIDApOworCisgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7Cisg
ICAgVk1JbnNwZWN0b3I6OnNwcmludGYoYWN0dWFsLCAiJyUlSnMnIGlzICUlcywgJnN0cjIsIHN0
cjIuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiICA9PT4gJyVKcycgaXMgJXNcbiIs
CisgICAgICAgICZzdHIyLCBzdHIyLmlzRW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVNUFRZIik7
CisgICAgZXhwZWN0ZWRMaXRlcmFsID0gIiclSnMnIGlzICVzLCAmc3RyMiwgc3RyMi5pc0VtcHR5
KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZXCIgID09PiAnJyBpcyBFTVBUWVxuIjsKKyAgICBBU1NF
UlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWRMaXRlcmFsKSwgMCk7CisKKyAgICBtZW1zZXQo
YWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICBWTUluc3BlY3Rvcjo6c3ByaW50Zihh
Y3R1YWwsICInJSVKK3MnIGlzICUlcywgJnN0cjEsIHN0cjEuaXNFbXB0eSgpP1wiRU1QVFlcIjpc
Ik5PVCBFTVBUWVwiID09PiAnJUorcycgaXMgJXNcbiIsCisgICAgICAgICZzdHIxLCBzdHIxLmlz
RW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVNUFRZIik7CisgICAgZXhwZWN0ZWRMaXRlcmFsID0g
IiclSitzJyBpcyAlcywgJnN0cjEsIHN0cjEuaXNFbXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBU
WVwiID09PiAnV1RGOjpTdHJpbmcgXCJUZXN0IFdURiBTdHJpbmdcIicgaXMgTk9UIEVNUFRZXG4i
OworICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZExpdGVyYWwpLCAwKTsKKwor
ICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgIFZNSW5zcGVjdG9y
OjpzcHJpbnRmKGFjdHVhbCwgIiclJUorcycgaXMgJSVzLCAmc3RyMiwgc3RyMi5pc0VtcHR5KCk/
XCJFTVBUWVwiOlwiTk9UIEVNUFRZXCIgPT0+ICclSitzJyBpcyAlc1xuIiwKKyAgICAgICAgJnN0
cjIsIHN0cjIuaXNFbXB0eSgpID8gIkVNUFRZIiA6ICJOT1QgRU1QVFkiKTsKKyAgICBleHBlY3Rl
ZExpdGVyYWwgPSAiJyVKK3MnIGlzICVzLCAmc3RyMiwgc3RyMi5pc0VtcHR5KCk/XCJFTVBUWVwi
OlwiTk9UIEVNUFRZXCIgPT0+ICdXVEY6OlN0cmluZyBcIlwiJyBpcyBFTVBUWVxuIjsKKyAgICBB
U1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWRMaXRlcmFsKSwgMCk7CisjZW5kaWYKK30K
KworCitURVNUKEpTQywgVk1JbnNwZWN0b3JTbnByaW50ZikKK3sKKyNpZiBFTkFCTEUoVk1JTlNQ
RUNUT1IpCisgICAgY2hhciBhY3R1YWxbMTAyNF07CisgICAgY2hhciBleHBlY3RlZFsxMDI0XTsK
KyAgICBjb25zdCBjaGFyKiBmb3JtYXQ7CisgICAgY29uc3QgY2hhciogZXhwZWN0ZWRMaXRlcmFs
OworCisgICAgc2l6ZV90IHNpemUgPSAxOworICAgIHdoaWxlIChzaXplIDw9IDEwMCkgeworCisg
ICAgICAgIC8vIFRlc3Rpbmcgc3RhbmRhcmQgZGVmYXVsdCBmb3JtYXQgc3BlY2lmaWVyczoKKyAg
ICAgICAgLy8gTm90ZTogc2hvdWxkIHdvcmsganVzdCBsaWtlIHNucHJpbnRmLiBTbywgd2UganVz
dCBjb21wYXJlIGFnYWluc3QgdGhhdC4KKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXpl
b2YoYWN0dWFsKSk7CisgICAgICAgIC8vIFRoZSBjb21waWxlciB3YXJuaW5nIGZsYWdzIGFyZSBj
b25maWd1cmVkIHRvIGV4cGVjdCBhIGxpdGVyYWwgc3RyaW5nIGZvcgorICAgICAgICAvLyA6OnNu
cHJpbnRmIGJlbG93LiBTbywgdXNlIGEgI2RlZmluZSBmb3IgdGhpcyBvbmUgY2FzZSB0byBrZWVw
IHRoZQorICAgICAgICAvLyBjb21waWxlciBoYXBweS4KKyN1bmRlZiBMSVRFUkFMX0ZPUk1BVAor
I2RlZmluZSBMSVRFUkFMX0ZPUk1BVCAiJyUlJSUnICAgICAgICAgICAgICAgICAgICAgICAgID09
PiAnJSUnXG4iCisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIExJ
VEVSQUxfRk9STUFUKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgTElURVJB
TF9GT1JNQVQpOworI3VuZGVmIExJVEVSQUxfRk9STUFUCisgICAgICAgIEFTU0VSVF9FUShzdHJj
bXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywg
c2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBmb3JtYXQgPSAiJyUlYycsICd4JyAgICAgICAgICAg
ICAgICAgICAgPT0+ICclYydcbiI7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1
YWwsIHNpemUsIGZvcm1hdCwgJ3gnKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6
ZSwgZm9ybWF0LCAneCcpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0
ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsK
KyAgICAgICAgZm9ybWF0ID0gIiclJSpjJywgOCwgJ3gnICAgICAgICAgICAgICAgID09PiAnJSpj
J1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwgZm9ybWF0
LCA4LCAneCcpOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVkLCBzaXplLCBmb3JtYXQsIDgs
ICd4Jyk7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOwor
CisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBm
b3JtYXQgPSAiJyUlcycsIFwiaGVsbG8gd29ybGRcIiAgICAgICAgICA9PT4gJyVzJ1xuIjsKKyAg
ICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwgZm9ybWF0LCAiaGVsbG8g
d29ybGQiKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgZm9ybWF0LCAiaGVs
bG8gd29ybGQiKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwg
MCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAg
ICAgIGZvcm1hdCA9ICInJSUqcycsIDgsIFwiaGVsbG8gd29ybGRcIiAgICAgID09PiAnJSpzJ1xu
IjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwgZm9ybWF0LCA4
LCAiaGVsbG8gd29ybGQiKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgZm9y
bWF0LCA4LCAiaGVsbG8gd29ybGQiKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWws
IGV4cGVjdGVkKSwgMCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0
dWFsKSk7CisgICAgICAgIGZvcm1hdCA9ICInJSUqcycsIDgsIFwiaGVsbG9cIiAgICAgICAgICAg
ID09PiAnJSpzJ1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6
ZSwgZm9ybWF0LCA4LCAiaGVsbG8iKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6
ZSwgZm9ybWF0LCA4LCAiaGVsbG8iKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWws
IGV4cGVjdGVkKSwgMCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0
dWFsKSk7CisgICAgICAgIGZvcm1hdCA9ICInJSVkJywgOTg3NjU0MzIxICAgICAgICAgICAgICA9
PT4gJyVkJ1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwg
Zm9ybWF0LCA5ODc2NTQzMjEpOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVkLCBzaXplLCBm
b3JtYXQsIDk4NzY1NDMyMSk7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBl
Y3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkp
OworICAgICAgICBmb3JtYXQgPSAiJyUldScsIDQyNzY1NDMyMTB1ICAgICAgICAgICAgPT0+ICcl
dSdcbiI7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1h
dCwgNDI3NjU0MzIxMHUpOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVkLCBzaXplLCBmb3Jt
YXQsIDQyNzY1NDMyMTB1KTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVj
dGVkKSwgMCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7
CisgICAgICAgIGZvcm1hdCA9ICInJSV1JywgMHhmZmZmZmZmZiAgICAgICAgICAgICA9PT4gJyV1
J1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwgZm9ybWF0
LCAweGZmZmZmZmZmKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgZm9ybWF0
LCAweGZmZmZmZmZmKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVk
KSwgMCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7Cisg
ICAgICAgIGZvcm1hdCA9ICInJSV4JywgMHhmZmZmZmZmZiAgICAgICAgICAgICA9PT4gJyV4J1xu
IjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwgZm9ybWF0LCAw
eGZmZmZmZmZmKTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgZm9ybWF0LCAw
eGZmZmZmZmZmKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwg
MCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAg
ICAgIGZvcm1hdCA9ICInJSVwJywgKHZvaWQqKTB4YWJjZGJhYmUgICAgICA9PT4gJyVwJ1xuIjsK
KyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwgZm9ybWF0LCAodm9p
ZCopMHhhYmNkYmFiZSk7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsIGZvcm1h
dCwgKHZvaWQqKTB4YWJjZGJhYmUpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVhbCwg
ZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1
YWwpKTsKKyAgICAgICAgZm9ybWF0ID0gIiclJWx1JywgMTIzNDU2Nzg5MDk4NzY1NDMyMXVsID09
PiAnJWx1J1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6ZSwg
Zm9ybWF0LCAxMjM0NTY3ODkwOTg3NjU0MzIxdWwpOworICAgICAgICA6OnNucHJpbnRmKGV4cGVj
dGVkLCBzaXplLCBmb3JtYXQsIDEyMzQ1Njc4OTA5ODc2NTQzMjF1bCk7CisgICAgICAgIEFTU0VS
VF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1
YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBmb3JtYXQgPSAiJyUlZicsIDEyMzQu
NTY3ICAgICAgICAgICAgICAgPT0+ICclZidcbiI7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnBy
aW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgMTIzNC41NjcpOworICAgICAgICA6OnNucHJpbnRm
KGV4cGVjdGVkLCBzaXplLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAgICAgICAgQVNTRVJUX0VRKHN0
cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3on
LCBzaXplb2YoYWN0dWFsKSk7CisgICAgICAgIGZvcm1hdCA9ICInJSUuMmYnLCAxMjM0LjU2NyAg
ICAgICAgICAgICA9PT4gJyUuMmYnXG4iOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYo
YWN0dWFsLCBzaXplLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAgICAgICAgOjpzbnByaW50ZihleHBl
Y3RlZCwgc2l6ZSwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAo
YWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6
ZW9mKGFjdHVhbCkpOworICAgICAgICBmb3JtYXQgPSAiJyUlMTAuMmYnLCAxMjM0LjU2NyAgICAg
ICAgICAgPT0+ICclMTAuMmYnXG4iOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0
dWFsLCBzaXplLCBmb3JtYXQsIDEyMzQuNTY3KTsKKyAgICAgICAgOjpzbnByaW50ZihleHBlY3Rl
ZCwgc2l6ZSwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0
dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9m
KGFjdHVhbCkpOworICAgICAgICBmb3JtYXQgPSAiJyUlMDEwLjJmJywgMTIzNC41NjcgICAgICAg
ICAgPT0+ICclMDEwLjJmJ1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVh
bCwgc2l6ZSwgZm9ybWF0LCAxMjM0LjU2Nyk7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQs
IHNpemUsIGZvcm1hdCwgMTIzNC41NjcpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21wKGFjdHVh
bCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICAvLyBCYWQgLyB3ZWlyZCBmb3JtYXRzOgorICAg
ICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICAgICAgZm9ybWF0
ID0gIiclJTUuNCcsIDk4NzY1NDMyMSAgICAgICAgICAgID09PiAnJTUuNCdcbiI7CisgICAgICAg
IFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgOTg3NjU0MzIxKTsK
KyAgICAgICAgZXhwZWN0ZWRMaXRlcmFsID0gIiclNS40JywgOTg3NjU0MzIxICAgICAgICAgICAg
PT0+ICdFUlJPUiBAIFwiJTUuNCcgXCJcbiI7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQs
IHNpemUsICIlcyIsIGV4cGVjdGVkTGl0ZXJhbCk7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAo
YWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6
ZW9mKGFjdHVhbCkpOworICAgICAgICBmb3JtYXQgPSAiJyUlNS40JyAnJSVkJywgOTg3NjU0MzIx
LCA0ICAgID09PiAnJTUuNCcgJyVkJ1xuIjsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRm
KGFjdHVhbCwgc2l6ZSwgZm9ybWF0LCA5ODc2NTQzMjEsIDQpOworICAgICAgICA6OnNucHJpbnRm
KGV4cGVjdGVkLCBzaXplLCBmb3JtYXQsIDk4NzY1NDMyMSwgNCk7CisgICAgICAgIEFTU0VSVF9F
UShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1YWws
ICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBmb3JtYXQgPSAiJyUldycgJyUlZCcsIDk4
NzY1NDMyMSwgNiAgICAgID09PiAnJXcnICclZCdcbiI7CisgICAgICAgIFZNSW5zcGVjdG9yOjpz
bnByaW50ZihhY3R1YWwsIHNpemUsIGZvcm1hdCwgOTg3NjU0MzIxLCA2KTsKKyAgICAgICAgOjpz
bnByaW50ZihleHBlY3RlZCwgc2l6ZSwgZm9ybWF0LCA5ODc2NTQzMjEsIDYpOworICAgICAgICBB
U1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworCisgICAgICAgIC8vIFRl
c3RpbmcgdGhlICViIGV4dGVuc2lvbjoKKyAgICAgICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXpl
b2YoYWN0dWFsKSk7CisgICAgICAgIFZNSW5zcGVjdG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUs
ICInJSViJywgMCAgICAgICAgICA9PT4gJyViJ1xuIiwgMCk7CisgICAgICAgIGV4cGVjdGVkTGl0
ZXJhbCA9ICInJWInLCAwICAgICAgICAgID09PiAnRkFMU0UnXG4iOworICAgICAgICA6OnNucHJp
bnRmKGV4cGVjdGVkLCBzaXplLCAiJXMiLCBleHBlY3RlZExpdGVyYWwpOworICAgICAgICBBU1NF
UlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0
dWFsLCAneicsIHNpemVvZihhY3R1YWwpKTsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRm
KGFjdHVhbCwgc2l6ZSwgIiclJWInLCAxICAgICAgICAgID09PiAnJWInXG4iLCAxKTsKKyAgICAg
ICAgZXhwZWN0ZWRMaXRlcmFsID0gIiclYicsIDEgICAgICAgICAgPT0+ICdUUlVFJ1xuIjsKKyAg
ICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgIiVzIiwgZXhwZWN0ZWRMaXRlcmFsKTsK
KyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICAg
ICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgICAgIFZNSW5zcGVj
dG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsICInJSViJywgLTEyMzQ1Njc4OSA9PT4gJyViJ1xu
IiwgLTEyMzQ1Njc4OSk7CisgICAgICAgIGV4cGVjdGVkTGl0ZXJhbCA9ICInJWInLCAtMTIzNDU2
Nzg5ID09PiAnVFJVRSdcbiI7CisgICAgICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsICIl
cyIsIGV4cGVjdGVkTGl0ZXJhbCk7CisgICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBl
eHBlY3RlZCksIDApOworCisgICAgICAgIG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVh
bCkpOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0dWFsLCBzaXplLCAiJyUlYics
IDEyMzQ1Njc4OSAgPT0+ICclYidcbiIsIDEyMzQ1Njc4OSk7CisgICAgICAgIGV4cGVjdGVkTGl0
ZXJhbCA9ICInJWInLCAxMjM0NTY3ODkgID09PiAnVFJVRSdcbiI7CisgICAgICAgIDo6c25wcmlu
dGYoZXhwZWN0ZWQsIHNpemUsICIlcyIsIGV4cGVjdGVkTGl0ZXJhbCk7CisgICAgICAgIEFTU0VS
VF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAgIC8vIFRlc3Rpbmcg
dGhlICVKPHg+IGV4dGVuc2lvbnM6CisgICAgICAgIFN0cmluZyBzdHIxKCJUZXN0IFdURiBTdHJp
bmciKTsKKyAgICAgICAgU3RyaW5nIHN0cjIoIiIpOworCisgICAgICAgIG1lbXNldChhY3R1YWws
ICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBWTUluc3BlY3Rvcjo6c25wcmludGYoYWN0
dWFsLCBzaXplLCAiJyUlSnMnIGlzICUlcywgJnN0cjEsIHN0cjEuaXNFbXB0eSgpP1wiRU1QVFlc
IjpcIk5PVCBFTVBUWVwiICA9PT4gJyVKcycgaXMgJXNcbiIsCisgICAgICAgICAgICAmc3RyMSwg
c3RyMS5pc0VtcHR5KCkgPyAiRU1QVFkiIDogIk5PVCBFTVBUWSIpOworICAgICAgICBleHBlY3Rl
ZExpdGVyYWwgPSAiJyVKcycgaXMgJXMsICZzdHIxLCBzdHIxLmlzRW1wdHkoKT9cIkVNUFRZXCI6
XCJOT1QgRU1QVFlcIiAgPT0+ICdUZXN0IFdURiBTdHJpbmcnIGlzIE5PVCBFTVBUWVxuIjsKKyAg
ICAgICAgOjpzbnByaW50ZihleHBlY3RlZCwgc2l6ZSwgIiVzIiwgZXhwZWN0ZWRMaXRlcmFsKTsK
KyAgICAgICAgQVNTRVJUX0VRKHN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCk7CisKKyAgICAg
ICAgbWVtc2V0KGFjdHVhbCwgJ3onLCBzaXplb2YoYWN0dWFsKSk7CisgICAgICAgIFZNSW5zcGVj
dG9yOjpzbnByaW50ZihhY3R1YWwsIHNpemUsICInJSVKcycgaXMgJSVzLCAmc3RyMiwgc3RyMi5p
c0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9UIEVNUFRZXCIgID09PiAnJUpzJyBpcyAlc1xuIiwKKyAg
ICAgICAgICAgICZzdHIyLCBzdHIyLmlzRW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVNUFRZIik7
CisgICAgICAgIGV4cGVjdGVkTGl0ZXJhbCA9ICInJUpzJyBpcyAlcywgJnN0cjIsIHN0cjIuaXNF
bXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiICA9PT4gJycgaXMgRU1QVFlcbiI7CisgICAg
ICAgIDo6c25wcmludGYoZXhwZWN0ZWQsIHNpemUsICIlcyIsIGV4cGVjdGVkTGl0ZXJhbCk7Cisg
ICAgICAgIEFTU0VSVF9FUShzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCksIDApOworCisgICAgICAg
IG1lbXNldChhY3R1YWwsICd6Jywgc2l6ZW9mKGFjdHVhbCkpOworICAgICAgICBWTUluc3BlY3Rv
cjo6c25wcmludGYoYWN0dWFsLCBzaXplLCAiJyUlSitzJyBpcyAlJXMsICZzdHIxLCBzdHIxLmlz
RW1wdHkoKT9cIkVNUFRZXCI6XCJOT1QgRU1QVFlcIiA9PT4gJyVKK3MnIGlzICVzXG4iLAorICAg
ICAgICAgICAgJnN0cjEsIHN0cjEuaXNFbXB0eSgpID8gIkVNUFRZIiA6ICJOT1QgRU1QVFkiKTsK
KyAgICAgICAgZXhwZWN0ZWRMaXRlcmFsID0gIiclSitzJyBpcyAlcywgJnN0cjEsIHN0cjEuaXNF
bXB0eSgpP1wiRU1QVFlcIjpcIk5PVCBFTVBUWVwiID09PiAnV1RGOjpTdHJpbmcgXCJUZXN0IFdU
RiBTdHJpbmdcIicgaXMgTk9UIEVNUFRZXG4iOworICAgICAgICA6OnNucHJpbnRmKGV4cGVjdGVk
LCBzaXplLCAiJXMiLCBleHBlY3RlZExpdGVyYWwpOworICAgICAgICBBU1NFUlRfRVEoc3RyY21w
KGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICBtZW1zZXQoYWN0dWFsLCAneicsIHNp
emVvZihhY3R1YWwpKTsKKyAgICAgICAgVk1JbnNwZWN0b3I6OnNucHJpbnRmKGFjdHVhbCwgc2l6
ZSwgIiclJUorcycgaXMgJSVzLCAmc3RyMiwgc3RyMi5pc0VtcHR5KCk/XCJFTVBUWVwiOlwiTk9U
IEVNUFRZXCIgPT0+ICclSitzJyBpcyAlc1xuIiwKKyAgICAgICAgICAgICZzdHIyLCBzdHIyLmlz
RW1wdHkoKSA/ICJFTVBUWSIgOiAiTk9UIEVNUFRZIik7CisgICAgICAgIGV4cGVjdGVkTGl0ZXJh
bCA9ICInJUorcycgaXMgJXMsICZzdHIyLCBzdHIyLmlzRW1wdHkoKT9cIkVNUFRZXCI6XCJOT1Qg
RU1QVFlcIiA9PT4gJ1dURjo6U3RyaW5nIFwiXCInIGlzIEVNUFRZXG4iOworICAgICAgICA6OnNu
cHJpbnRmKGV4cGVjdGVkLCBzaXplLCAiJXMiLCBleHBlY3RlZExpdGVyYWwpOworICAgICAgICBB
U1NFUlRfRVEoc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpLCAwKTsKKworICAgICAgICAvLyBUZXN0
IGxvd2VyIHNpemVzIG1vcmUgZGVuc2VseSwgYW5kIHRoZW4gc3BhY2Ugb3V0IHRvIGxhcmdlciBz
aXplcy4KKyAgICAgICAgLy8gV2UncmUgZG9pbmcgdGhpcyBiZWNhdXNlIHRoZSBsb3dlciBzaXpl
cyBtaWdodCBiZSBpbnRlcmVzdGluZywgYnV0CisgICAgICAgIC8vIGZvciBleHBlZGllbmN5LCB3
ZSBkb24ndCB3YW50IHRvIHRlc3QgYXQgdGhpcyBmaW5lIGdyYWluIHJlc29sdXRpb24KKyAgICAg
ICAgLy8gZm9yIGFsbCBwb3NzaWJsZSBzaXplcy4gSGVuY2UsIHdlIGFjY2VsZXJhdGUgdGhlIHJh
dGUgb25jZSB3ZSdyZQorICAgICAgICAvLyBwYXNzIHRoZSBpbnRlcmVzdGluZyBzbWFsbCBzaXpl
cy4KKyAgICAgICAgaWYgKHNpemUgPD0gNSkKKyAgICAgICAgICAgIHNpemUrKzsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2l6ZSArPSA0OworICAgIH0KKyNlbmRpZgorfQo=
</data>
<flag name="review"
          id="185544"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>