<?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>87360</bug_id>
          
          <creation_ts>2012-05-24 02:24:24 -0700</creation_ts>
          <short_desc>[Platform] Introduce Decimal class for Number/Range input type.</short_desc>
          <delta_ts>2012-05-31 08:42:41 -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>Platform</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>
          <dependson>87485</dependson>
          <blocked>80009</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>gustavo</cc>
    
    <cc>jberlin</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>632546</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-05-24 02:24:24 -0700</bug_when>
    <thetext>Patch for BUG 80009 is too large, 192KB.
We split the patch into WebCore/html changes and Decimal class.
This is Decimal class part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632585</commentid>
    <comment_count>1</comment_count>
      <attachid>143778</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-24 03:33:27 -0700</bug_when>
    <thetext>Created attachment 143778
Patch 1 - Check makefile and UINT64_C macro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632619</commentid>
    <comment_count>2</comment_count>
      <attachid>143778</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-24 04:44:47 -0700</bug_when>
    <thetext>Comment on attachment 143778
Patch 1 - Check makefile and UINT64_C macro

Attachment 143778 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12802112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633432</commentid>
    <comment_count>3</comment_count>
      <attachid>143942</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-24 18:13:10 -0700</bug_when>
    <thetext>Created attachment 143942
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633473</commentid>
    <comment_count>4</comment_count>
      <attachid>143942</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-24 19:04:18 -0700</bug_when>
    <thetext>Comment on attachment 143942
Patch 2

* Build on Qt is succeeded.
* Others are seemed to be OK, because I&apos;ve just added include directive to Decimal.cpp.
** It seems Qt doesn&apos;t include ICU files.

Could you review this patch?
Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633566</commentid>
    <comment_count>5</comment_count>
      <attachid>143942</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-24 22:20:03 -0700</bug_when>
    <thetext>Comment on attachment 143942
Patch 2

All build bot is passed.

Could you review this patch?
Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633728</commentid>
    <comment_count>6</comment_count>
      <attachid>143942</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-25 02:19:23 -0700</bug_when>
    <thetext>Comment on attachment 143942
Patch 2

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

&gt; Source/WTF/wtf/MathExtras.h:313
&gt;  
&gt; +#ifndef UINT64_C
&gt; +#if COMPILER(MSVC)
&gt; +#define UINT64_C(c) c ## ui64
&gt; +#else
&gt; +#define UINT64_C(c) c ## ull
&gt; +#endif
&gt; +#endif
&gt; +
&gt;  

Please make another patch for this change with WebCore/Modules/websockes/WebSocketFrame.cpp fix.

&gt; Source/WebCore/platform/Decimal.cpp:46
&gt; +using namespace std;

We recently changed the style rule.  We should not use &quot;using namespace&quot; for std.
http://www.webkit.org/coding/coding-style.html#using-in-cpp

&gt; Source/WebCore/platform/Decimal.cpp:48
&gt; +static const uint64_t MaxCoefficient = UINT64_C(0x16345785D89FFFF); // 999999999999999999; // 18 9&apos;s

Two &apos;//&apos; in one line.

&gt; Source/WebCore/platform/Decimal.cpp:72
&gt; +        LhsIsinfinity,
&gt; +        RhsIsinfinity,

should be
  LHSIsInfinity,
  RHSIsInfinity,

http://www.webkit.org/coding/coding-style.html#names-basic

&gt; Source/WebCore/platform/Decimal.cpp:82
&gt; +        ResultIsLhs,
&gt; +        ResultIsRhs,

Should be
  ResultIsLHS,
  ResultIsRHS,

http://www.webkit.org/coding/coding-style.html#names-basic

&gt; Source/WebCore/platform/Decimal.cpp:88
&gt; +    const Decimal&amp; m_lhs;
&gt; +    Result m_result;
&gt; +    const Decimal&amp; m_rhs;

Should be reordered.
  const Decimal&amp; m_lhs;
  const Decimal&amp; m_rhs;
  Result m_result;

to minimize objects.

&gt; Source/WebCore/platform/Decimal.cpp:94
&gt; +    UInt128(uint64_t, uint64_t);

should have argument names.

&gt; Source/WebCore/platform/Decimal.cpp:101
&gt; +    static UInt128 multiply(uint64_t, uint64_t);

ditto.

&gt; Source/WebCore/platform/Decimal.cpp:790
&gt; +    #define HandleChar(ch1, next, ...) \

I prefer HandleCharAndBreak().

&gt; Source/WebCore/platform/Decimal.cpp:799
&gt; +    #define ExpectChar(ch1, next, ...) \
&gt; +        HandleChar(ch1, next, __VA_ARGS__); \
&gt; +        return nan();

Hiding non-conditional &apos;return&apos; in a macro is not good for readability.  Please remove ExpectChar.

&gt; Source/WebCore/platform/Decimal.cpp:1109
&gt; +} // WebCore

should be &quot;namespace WebCore&quot;

&gt; Source/WebCore/platform/Decimal.h:39
&gt; +// This class represents decimal base floating pointer number with 32 bit
&gt; +//  unsigend integer and 64 bit unsigned integer.

pointer -&gt; point?

The phrase &quot;with ...&quot; is an implementation detail. I think we had better make another sentence for it.

&gt; Source/WebCore/platform/Decimal.h:48
&gt; +// 76543210 76543210
&gt; +// S0000000 0000MEEE
&gt; +//  S = sign (1 bit), 0 = positive, 1 = negative
&gt; +//  E = exponent (11 bit)

The figure looks like 16 bit.
What&apos;s &apos;M&apos; in this figure?
Why three &apos;E&apos;s represent 11 bit in this figure?
Why do we need pack them? Why not bool&amp;in16_t?

&gt; Source/WebCore/platform/Decimal.h:56
&gt; +    static int const Emax = 2047; // largest exponent value
&gt; +    static int const Ebias = 1023; // subtracted from encoded exponent

should be ExponentMax or MaxExponent.
should be ExponentBias.

They can be moved to Decimal.cpp, right?

&gt; Source/WebCore/platform/Decimal.h:57
&gt; +    static int const Precision = 18;

It can be moved to Decimal.cpp.

&gt; Source/WebCore/platform/Decimal.h:64
&gt; +    enum FormatClass {
&gt; +        ClassInfinity,
&gt; +        ClassNormal,
&gt; +        ClassNaN,
&gt; +        ClassZero,
&gt; +    };

Should it be public?

&gt; Source/WebCore/platform/Decimal.h:68
&gt; +    enum Sign {
&gt; +        Plus,
&gt; +        Minus,

I prefer Positive/Negative.

&gt; Source/WebCore/platform/Decimal.h:71
&gt; +    struct EncodedData {

Should it be public?

&gt; Source/WebCore/platform/Decimal.h:73
&gt; +        explicit EncodedData(uint32_t);
&gt; +        EncodedData(uint64_t, int, Sign);

We should add argument names to uint32_t, uint64_t, and int.  Their roles are unclear.

&gt; Source/WebCore/platform/Decimal.h:89
&gt; +    Decimal();

What value does an object constructed by this?

&gt; Source/WebCore/platform/Decimal.h:91
&gt; +    Decimal(uint64_t, int, Sign);

What is &apos;int&apos;?  Need an argument name or a comment.

&gt; Source/WebCore/platform/Decimal.h:113
&gt; +    Decimal&amp; operator =(const Decimal&amp;);
&gt; +    Decimal&amp; operator +=(const Decimal&amp;);
&gt; +    Decimal&amp; operator -=(const Decimal&amp;);
&gt; +    Decimal&amp; operator *=(const Decimal&amp;);
&gt; +    Decimal&amp; operator /=(const Decimal&amp;);
&gt; +
&gt; +    Decimal operator -() const;
&gt; +
&gt; +    bool operator ==(const Decimal&amp;) const;
&gt; +    bool operator !=(const Decimal&amp;) const;
&gt; +    bool operator &lt;(const Decimal&amp;) const;
&gt; +    bool operator &lt;=(const Decimal&amp;) const;
&gt; +    bool operator &gt;(const Decimal&amp;) const;
&gt; +    bool operator &gt;=(const Decimal&amp;) const;
&gt; +
&gt; +    Decimal operator +(const Decimal&amp;) const;
&gt; +    Decimal operator -(const Decimal&amp;) const;
&gt; +    Decimal operator *(const Decimal&amp;) const;
&gt; +    Decimal operator /(const Decimal&amp;) const;

We usually don&apos;t put a space after &apos;operator&apos;

&gt; Source/WebCore/platform/Decimal.h:115
&gt; +    int exponent() const;

What&apos;s returned by this?  Is it biased?

&gt; Source/WebCore/platform/Decimal.h:116
&gt; +    FormatClass formatClass() const;

Should it be public?

&gt; Source/WebCore/platform/Decimal.h:122
&gt; +    const EncodedData&amp; value() const { return m_data; }

Should it be public?

&gt; Source/WebCore/platform/Decimal.h:152
&gt; +} // WebCore

should be &quot;namespace WebCore&quot;

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:52
&gt; +namespace DecimalTest {

I don&apos;t think we need to enclose everything with a dedicated namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634920</commentid>
    <comment_count>7</comment_count>
      <attachid>144276</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-27 23:29:04 -0700</bug_when>
    <thetext>Created attachment 144276
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634925</commentid>
    <comment_count>8</comment_count>
      <attachid>144276</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-27 23:34:23 -0700</bug_when>
    <thetext>Comment on attachment 144276
Patch 3

I updated the patch to follow reviewer&apos;s comments.

Could you review again?
Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635651</commentid>
    <comment_count>9</comment_count>
      <attachid>144276</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-29 00:02:04 -0700</bug_when>
    <thetext>Comment on attachment 144276
Patch 3

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

&gt; Source/WebCore/platform/Decimal.cpp:58
&gt; +        Bothinfinity,

should be Both*I*nfinity

&gt; Source/WebCore/platform/Decimal.cpp:61
&gt; +        LHSIsinfinity,
&gt; +        RHSIsinfinity,

should be LHSIsInfinity / RHSIsInfinity.

&gt; Source/WebCore/platform/Decimal.cpp:103
&gt; +    while (x &gt;= powerOf10) {

nit:
  for (uint64_t poweOfTen = 1; x &gt;= powerOfTen; powerOfTen += 10) {

&gt; Source/WebCore/platform/Decimal.cpp:105
&gt; +        if (powerOf10 &gt;= uint64_t(-1) / 10)

uint64_t(-1) should be std::numeric_limits&lt;uint64_t&gt;::max() for code readability.

&gt; Source/WebCore/platform/Decimal.cpp:112
&gt; +static uint64_t multiplyHigh(uint64_t u, uint64_t v)

Please make this a member of UInt128 class.

&gt; Source/WebCore/platform/Decimal.cpp:120
&gt; +    uint64_t u0 = u &amp; mask;
&gt; +    uint64_t u1 = u &gt;&gt; n2;
&gt; +    uint64_t v0 = v &amp; mask;
&gt; +    uint64_t v1 = v &gt;&gt; n2;

u0/u1/v0/v1 is not good for readability.  uLow/uHigh/vLow/vHight?
Also, we should have macros or functions like LOWORD / HIWORD provided by windows.h.

&gt; Source/WebCore/platform/Decimal.cpp:121
&gt; +    uint64_t w0 = u0 * v0;

w0 should be productLower or something.

&gt; Source/WebCore/platform/Decimal.cpp:124
&gt; +    uint64_t tt = u1 * v0 + (w0 &gt;&gt; n2);
&gt; +    uint64_t w1 = tt &amp; mask;
&gt; +    uint64_t w2 = tt &gt;&gt; n2;

I have no good idea of better names for these variables. We need a comment if we don&apos;t have good variable names.

&gt; Source/WebCore/platform/Decimal.cpp:130
&gt; +template&lt;typename T&gt;
&gt; +static T power(T const x, unsigned n)

Please fold in this function to scaleUp().
This template is used only by scaleUp(), and code readers need to be afraid this template might overflow.
If this is fold in scaleUp(), code readers can understand this is safe by ASSERT()s.

&gt; Source/WebCore/platform/Decimal.cpp:211
&gt; +UInt128::UInt128(uint64_t low, uint64_t high)

Please move this below the UInt128 class declaration.

&gt; Source/WebCore/platform/Decimal.cpp:216
&gt; +UInt128&amp; UInt128::operator/=(const uint32_t divisor)

ditto.

&gt; Source/WebCore/platform/Decimal.cpp:237
&gt; +        const uint64_t work = (uint64_t(remainder) &lt;&lt; 32) | dividend[i];
&gt; +        remainder = uint32_t(work % divisor);
&gt; +        quotient[i] = uint32_t(work / divisor);
&gt; +    }
&gt; +    m_low = quotient[0] | (uint64_t(quotient[1]) &lt;&lt; 32);
&gt; +    m_high = quotient[2] | (uint64_t(quotient[3]) &lt;&lt; 32);

We should have a macro or a function like MAKEWORD provided by windows.h.

&gt; Source/WebCore/platform/Decimal.cpp:241
&gt; +UInt128 UInt128::multiply(uint64_t u, uint64_t v)

Please move this below the UInt128 class declaration.

&gt; Source/WebCore/platform/Decimal.cpp:413
&gt; +    // Make coefficient aligned.
&gt; +    if (lhsExponent &gt; rhsExponent) {
&gt; +        const int numberOfLHSDigits = countDigits(lhsCoefficient);
&gt; +        if (numberOfLHSDigits) {
&gt; +            const int lhsShiftAmount = lhsExponent - rhsExponent;
&gt; +            const int overflow = numberOfLHSDigits + lhsShiftAmount - Precision;
&gt; +            if (overflow &lt;= 0)
&gt; +                lhsCoefficient = scaleUp(lhsCoefficient, lhsShiftAmount);
&gt; +            else {
&gt; +                lhsCoefficient = scaleUp(lhsCoefficient, lhsShiftAmount - overflow);
&gt; +                rhsCoefficient = scaleDown(rhsCoefficient, overflow);
&gt; +                resultExponent += overflow;
&gt; +            }
&gt; +        }
&gt; +
&gt; +    } if (lhsExponent &lt; rhsExponent) {
&gt; +        const int numberOfRHSDigits = countDigits(rhsCoefficient);
&gt; +        if (numberOfRHSDigits) {
&gt; +            const int rhsShiftAmount = rhsExponent - lhsExponent;
&gt; +            const int overflow = numberOfRHSDigits + rhsShiftAmount - Precision;
&gt; +            if (overflow &lt;= 0)
&gt; +                rhsCoefficient = scaleUp(rhsCoefficient, rhsShiftAmount);
&gt; +            else {
&gt; +                rhsCoefficient = scaleUp(rhsCoefficient, rhsShiftAmount - overflow);
&gt; +                lhsCoefficient = scaleDown(lhsCoefficient, overflow);
&gt; +                resultExponent += overflow;
&gt; +            }
&gt; +        }
&gt; +    }

Please make a function for this operation.

&gt; Source/WebCore/platform/Decimal.cpp:415
&gt; +    uint64_t const result = lhsSign == rhsSign ? lhsCoefficient + rhsCoefficient : lhsCoefficient - rhsCoefficient;

const uint64_t is common in WebKit.

&gt; Source/WebCore/platform/Decimal.cpp:420
&gt; +    return lhsSign == Negative &amp;&amp; rhsSign == Positive &amp;&amp; !result
&gt; +            ? Decimal(Positive, resultExponent, 0)
&gt; +            : int64_t(result) &gt;= 0
&gt; +                ? Decimal(lhsSign, resultExponent, result)
&gt; +                : Decimal(invertSign(lhsSign), resultExponent, -int64_t(result));

Nested ternary operators are confusing.  Please use &apos;if&apos; for the first condition.

&gt; Source/WebCore/platform/Decimal.cpp:512
&gt; +        while (work.high()) {
&gt; +          work /= 10;
&gt; +          ++resultExponent;
&gt; +        }

wrong indentation.

&gt; Source/WebCore/platform/Decimal.cpp:567
&gt; +        // 0/non-zero =&gt; 0

This comment looks not useful.

&gt; Source/WebCore/platform/Decimal.cpp:723
&gt; +    #define HandleCharAndBreak(ch1, next, ...) \
&gt; +        if (ch == ch1 || ch == ch1 - &apos;A&apos; + &apos;a&apos;) { \
&gt; +            __VA_ARGS__; \

You don&apos;t use HandleCharAndBreak with __VA_ARGS__.

&gt; Source/WebCore/platform/Decimal.cpp:746
&gt; +            if (ch == &apos;.&apos;) {
&gt; +                state = StateDot;
&gt; +                break;
&gt; +            }

should be HandleCharAndBreak(&apos;.&apos;, StateDot) ?

&gt; Source/WebCore/platform/Decimal.cpp:803
&gt; +                if (exponent &gt; ExponentMax + Precision)
&gt; +                    return exponentSign == Negative ? zero(Positive) : infinity(sign);

&quot;0E+9999&quot; is infinity?

&gt; Source/WebCore/platform/Decimal.cpp:823
&gt; +            if (ch == &apos;0&apos;) {
&gt; +                state = StateZero;
&gt; +                break;
&gt; +            }

HandleCharAndBreak?

&gt; Source/WebCore/platform/Decimal.cpp:838
&gt; +            if (ch == &apos;0&apos;) {
&gt; +                state = StateZero;
&gt; +                break;
&gt; +            }

HandleCharAndBreak ?

&gt; Source/WebCore/platform/Decimal.cpp:862
&gt; +            if (ch == &apos;.&apos;) {
&gt; +                state = StateDot;
&gt; +                break;
&gt; +            }

HandleCharAndBreak ?

&gt; Source/WebCore/platform/Decimal.cpp:880
&gt; +            if (ch == &apos;.&apos;) {
&gt; +                state = StateDot;
&gt; +                break;
&gt; +            }

HandleCharAndBreak?

&gt; Source/WebCore/platform/Decimal.h:51
&gt; +    // You should not use FormatClass. This is for implementation.
&gt; +    enum FormatClass {

Can you make this private?  It&apos;s ok to make SpecialValueHandler and EncodedData friends of Decimal.

&gt; Source/WebCore/platform/Decimal.h:122
&gt; +    static Decimal fromString(const String&amp;);

You should add a comment about what is supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636847</commentid>
    <comment_count>10</comment_count>
      <attachid>144700</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-29 22:11:27 -0700</bug_when>
    <thetext>Created attachment 144700
Patch 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636850</commentid>
    <comment_count>11</comment_count>
      <attachid>144700</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-29 22:13:44 -0700</bug_when>
    <thetext>Comment on attachment 144700
Patch 4

* Updated as reviewer&apos;s comment
** Introduce alignOperands function for operator+ and operator-
** Use HandleCharAndBreak for &apos;.&apos;
** Introduce HandleTwoCharsAndBreak for &apos;E&apos; and &apos;e&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636853</commentid>
    <comment_count>12</comment_count>
      <attachid>144700</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-29 22:18:29 -0700</bug_when>
    <thetext>Comment on attachment 144700
Patch 4

Attachment 144700 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12846744</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636855</commentid>
    <comment_count>13</comment_count>
      <attachid>144700</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-29 22:21:12 -0700</bug_when>
    <thetext>Comment on attachment 144700
Patch 4

Attachment 144700 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12838852</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636856</commentid>
    <comment_count>14</comment_count>
      <attachid>144700</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-29 22:22:26 -0700</bug_when>
    <thetext>Comment on attachment 144700
Patch 4

Attachment 144700 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12843723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636876</commentid>
    <comment_count>15</comment_count>
      <attachid>144700</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-29 22:52:25 -0700</bug_when>
    <thetext>Comment on attachment 144700
Patch 4

Attachment 144700 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12843726</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636879</commentid>
    <comment_count>16</comment_count>
      <attachid>144709</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-29 22:54:55 -0700</bug_when>
    <thetext>Created attachment 144709
Patch 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636880</commentid>
    <comment_count>17</comment_count>
      <attachid>144709</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-29 22:55:28 -0700</bug_when>
    <thetext>Comment on attachment 144709
Patch 5

* Fix typo... :&lt;
Could you review again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636970</commentid>
    <comment_count>18</comment_count>
      <attachid>144709</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-30 00:36:04 -0700</bug_when>
    <thetext>Comment on attachment 144709
Patch 5

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

&gt; Source/WebCore/platform/Decimal.cpp:99
&gt; +    static uint64_t makeUint64(uint32_t low, uint32_t high) { return low | (uint64_t(high) &lt;&lt; 32); }

should be renamed to makeU*I*nt64() for consistency.

&gt; Source/WebCore/platform/Decimal.cpp:107
&gt; +
&gt; +

One blank line is enough.

&gt; Source/WebCore/platform/Decimal.cpp:121
&gt; +    dividend[0] = uint32_t(m_low &amp; uint32_t(-1));
&gt; +    dividend[1] = uint32_t(m_low &gt;&gt; 32);
&gt; +    dividend[2] = uint32_t(m_high &amp; uint32_t(-1));
&gt; +    dividend[3] = uint32_t(m_high &gt;&gt; 32);

Please use highUInt32() and lowUInt32().

&gt; Source/WebCore/platform/Decimal.cpp:126
&gt; +        const uint64_t work = (uint64_t(remainder) &lt;&lt; 32) | dividend[i];

Use makeUInt64().

&gt; Source/WebCore/platform/Decimal.cpp:186
&gt; +SpecialValueHandler::SpecialValueHandler(const Decimal&amp; lhs, const Decimal&amp; rhs)

Move the definitions of SpecialValueHandler functions to the line 80, just after the declaration of SpecialValueHandler and before the declaration of UInt128.

&gt; Source/WebCore/platform/Decimal.cpp:409
&gt; +    return lhsSign == Negative &amp;&amp; rhsSign == Negative &amp;&amp; !result
&gt; +            ? Decimal(Positive, alignedOperands.exponent, 0)
&gt; +            : int64_t(result) &gt;= 0
&gt; +                ? Decimal(lhsSign, alignedOperands.exponent, result)
&gt; +                : Decimal(invertSign(lhsSign), alignedOperands.exponent, -int64_t(result));

Don&apos;t use nested ternary operators.

&gt; Source/WebCore/platform/Decimal.cpp:627
&gt; +    return result.isZero()
&gt; +            ? zero(Positive)
&gt; +            : result.isFinite()
&gt; +                    ? result
&gt; +                    : result.isNegative() ? Decimal(-1) : Decimal(1);

Please avoid nested ternary operators.

&gt; Source/WebCore/platform/Decimal.cpp:673
&gt; +    #define HandleCharAndBreak(expected, nextState) \

Preprocessor directives should start at the beginning of a line.

&gt; Source/WebCore/platform/Decimal.cpp:679
&gt; +    #define HandleTwoCharsAndBreak(expected1, expected2, nextState) \

ditto.

&gt; Source/WebCore/platform/Decimal.cpp:897
&gt; +        return sign() ? &quot;-NaN&quot; : &quot;NaN&quot;;

We don&apos;t need to support -NaN, right?

&gt; Source/WebCore/platform/Decimal.h:76
&gt; +        // You should not use FormatClass. This is for implementation.

We don&apos;t need this comment.

&gt; Source/WebCore/platform/Decimal.h:128
&gt; +    String toString() const;

Please note this supports NaN and Infinity unlike fromString().

&gt; Source/WebCore/platform/Decimal.h:136
&gt; +    // fromString supports following syntax EBNF:
&gt; +    //  number ::= sign? digit+ (&apos;.&apos; digit*) (exponent-marker sign? digit+)?
&gt; +    //          | sign? &apos;.&apos; digit+ (exponent-marker sign? digit+)?
&gt; +    //  sign ::= &apos;+&apos; | &apos;-&apos;
&gt; +    //  exponent-marker ::= &apos;e&apos; | &apos;E&apos;
&gt; +    //  digit ::= &apos;0&apos; | &apos;1&apos; | ... | &apos;9&apos;
&gt; +    static Decimal fromString(const String&amp;);

Please note NaN and Infinity.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:99
&gt; +        for (int i = 0; i &lt; numberOfStepTimes; ++i) {
&gt; +          value -= stepRange.step;
&gt; +          value = stepRange.clampValue(value);
&gt; +        }

wrong indentation.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:110
&gt; +        for (int i = 0; i &lt; numberOfStepTimes; ++i) {
&gt; +          value += stepRange.step;
&gt; +          value = stepRange.clampValue(value);
&gt; +        }

wrong indentation

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:134
&gt; +    EXPECT_EQ(encode(1, -10, Positive), encode(1, -10, Negative).abs());
&gt; +}

Add tests for Infinity and NaN.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:149
&gt; +    EXPECT_EQ(Decimal(-1), encode(19, -1, Negative).ceiling());
&gt; +}

Please add tests for
 - Infinity and NaN
 - large exponents
 - encode(std::numeric_limits&lt;uint64_t&gt;::max(), 0, Positive)

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:174
&gt; +    EXPECT_EQ(Decimal(-2), encode(19, -1, Negative).floor());
&gt; +}

Please add tests for
 - Infinity and NaN
 - large exponents

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:179
&gt; +    EXPECT_EQ(Decimal(1), Decimal(1));

should be encode(1, 0, Positive)?

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:184
&gt; +    EXPECT_EQ(encode(0x7FFFFFFF, 0, Positive), Decimal(INT_MAX));
&gt; +    EXPECT_EQ(encode(0x80000000u, 0, Negative), Decimal(INT_MIN));

should use std::numeric_limits&lt;int32_t&gt;::max() and mix() instead of INT_MAX and INT_MIN.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:229
&gt; +    EXPECT_EQ(Decimal::nan(), fromString(&quot;INF&quot;));
&gt; +}

Add &quot;Infinity&quot;, &quot;NaN&quot;

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:303
&gt; +TEST_F(DecimalTest, OpAddBigE)

BigE -&gt; BigExponent

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:310
&gt; +TEST_F(DecimalTest, OpAddSmallE)

SmallE -&gt; SmallExponent

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:340
&gt; +TEST_F(DecimalTest, OpCompare)
&gt; +{
&gt; +    EXPECT_TRUE(Decimal(0) == Decimal(0));

Need more test cases.
We know these operators were implemented by EncodedData equality and subtraction. But we need to test many cases here because someone will change the implementation in the future.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:359
&gt; +    EXPECT_TRUE(Decimal(1) &gt; Decimal::infinity(Negative));
&gt; +}

need more test cases.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:361
&gt; +TEST_F(DecimalTest, OpDiv)

Div -&gt; Division

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:372
&gt; +TEST_F(DecimalTest, OpDivBigE)

DivBigE -&gt; DivisionBigExponent

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:378
&gt; +TEST_F(DecimalTest, OpDivSmallE)

DivSmallE -&gt; DivisionSmallExponent

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:384
&gt; +TEST_F(DecimalTest, OpDivSpecialValues)

Div -&gt; Division

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:424
&gt; +TEST_F(DecimalTest, OpMul)

Mul -&gt; Multiplication

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:433
&gt; +TEST_F(DecimalTest, OpMulBigE)

MulBigE -&gt; MultiplicationBigExponent

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:439
&gt; +TEST_F(DecimalTest, OpMulSmallE)

MulSmallE -&gt; MultiplicationSmallExponent

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:445
&gt; +TEST_F(DecimalTest, OpMulSpecialValues)

Mul -&gt; Multiplication

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:483
&gt; +    EXPECT_EQ(NaN, Ten * NaN);
&gt; +}

Add NaN * Infinity

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:485
&gt; +TEST_F(DecimalTest, OpSub)

Sub -&gt; Subtraction

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:496
&gt; +TEST_F(DecimalTest, OpSubBigE)

SubBigE -&gt; SubtractionBigExponent

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:502
&gt; +TEST_F(DecimalTest, OpSubSmallE)

SubSmalleE SubtractionSmallE

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:508
&gt; +TEST_F(DecimalTest, OpSubSpecialValues)

Sub -&gt; Subtraction

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:528
&gt; +    EXPECT_EQ(NaN, Ten - NaN);
&gt; +}

Add NaN - Infinity and vice versa.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:530
&gt; +TEST_F(DecimalTest, Properties)

Merge this to Predicates.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:536
&gt; +TEST_F(DecimalTest, PropertiesSpecial)

This looks covered by PredicatesSpecialValues.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:584
&gt; +    EXPECT_EQ(encode(3, -1, Negative), encode(36, -1, Positive).remainder(encode(13, -1, Positive)));
&gt; +}

Add test cases for large exponent values.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:603
&gt; +    EXPECT_EQ(Decimal(10), (fromString(&quot;10.2&quot;) / 1).round());
&gt; +}

Add test cases for large exponent values.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:611
&gt; +TEST_F(DecimalTest, ToStringSpecial)

We should have ToString test for non-special values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637084</commentid>
    <comment_count>19</comment_count>
      <attachid>144775</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-30 03:40:33 -0700</bug_when>
    <thetext>Created attachment 144775
Patch 6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637086</commentid>
    <comment_count>20</comment_count>
      <attachid>144775</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-30 03:43:16 -0700</bug_when>
    <thetext>Comment on attachment 144775
Patch 6

* Add tests for special values
* Add tests for big/small exponent
* Change Decimal::compareTo to handle NaN.
* Change operator &lt;, &gt; to handle NaN comparison.

Could you review again?
Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637100</commentid>
    <comment_count>21</comment_count>
      <attachid>144775</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-30 04:04:44 -0700</bug_when>
    <thetext>Comment on attachment 144775
Patch 6

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

&gt; Source/WebCore/ChangeLog:25
&gt; +        (WebCore):
&gt; +        (DecimalPrivate):
&gt; +        (SpecialValueHandler):
&gt; +        (UInt128):
&gt; +        (WebCore::DecimalPrivate::UInt128::high):
&gt; +        (WebCore::DecimalPrivate::UInt128::low):

This function list is not synchronized with the real one.

&gt; Source/WebCore/platform/Decimal.cpp:522
&gt; +    if (result.isNaN())
&gt; +      return false;

wrong indentation

&gt; Source/WebCore/platform/Decimal.cpp:530
&gt; +    if (result.isNaN())
&gt; +      return false;

ditto.

&gt; Source/WebCore/platform/Decimal.cpp:540
&gt; +    if (result.isNaN())
&gt; +      return false;

ditto.

&gt; Source/WebCore/platform/Decimal.cpp:558
&gt; +    if (result.isNaN())
&gt; +      return false;

ditto.

&gt; Source/WebCore/platform/Decimal.h:30
&gt; + */
&gt; +#ifndef Decimal_h

Need a blank line between the copyright header and the first #ifndef.

&gt; Source/WebCore/platform/Decimal.h:130
&gt; +    // Note: toString method supports infinity and nan but formString not.

formString -&gt; fromString

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:612
&gt; +TEST_F(DecimalTest, FromStringLikeNumber)
&gt; +{
&gt; +    EXPECT_EQ(Decimal::nan(), fromString(&quot; 123 &quot;));
&gt; +    EXPECT_EQ(Decimal::nan(), fromString(&quot;1,234&quot;));
&gt; +    EXPECT_EQ(Decimal::nan(), fromString(&quot;INF&quot;));
&gt; +}

Needs tests for &quot;Infinity&quot; and &quot;NaN&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637903</commentid>
    <comment_count>22</comment_count>
      <attachid>144775</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-30 18:24:15 -0700</bug_when>
    <thetext>Comment on attachment 144775
Patch 6

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

&gt; Source/WebCore/platform/Decimal.cpp:143
&gt; +    static uint32_t highUInt32(uint64_t x) { return uint32_t(x &gt;&gt; 32); }
&gt; +    static uint32_t lowUInt32(uint64_t x) { return uint32_t(x &amp; ((uint64_t(1) &lt;&lt; 32) - 1)); }

Please use static_cast&lt;uint32_t&gt;() and static_cast&lt;uint64_t&gt;(1) or UIN64_C(1).

&gt; Source/WebCore/platform/Decimal.cpp:145
&gt; +    static uint64_t makeUInt64(uint32_t low, uint32_t high) { return low | (uint64_t(high) &lt;&lt; 32); }

static_cast&lt;uint64_t&gt;()

&gt; Source/WebCore/platform/Decimal.cpp:173
&gt; +        remainder = uint32_t(work % divisor);
&gt; +        quotient[i] = uint32_t(work / divisor);

static_cast&lt;&gt;()

&gt; Source/WebCore/platform/Decimal.cpp:373
&gt; +    return int64_t(result) &gt;= 0

static_cast&lt;&gt;()

&gt; Source/WebCore/platform/Decimal.cpp:375
&gt; +        : Decimal(invertSign(lhsSign), alignedOperands.exponent, -int64_t(result));

static_cast&lt;&gt;()

&gt; Source/WebCore/platform/Decimal.cpp:411
&gt; +    return int64_t(result) &gt;= 0

static_cast&lt;&gt;()

&gt; Source/WebCore/platform/Decimal.cpp:413
&gt; +        : Decimal(invertSign(lhsSign), alignedOperands.exponent, -int64_t(result));

static_cast&lt;&gt;()

&gt; Source/WebCore/platform/Decimal.cpp:548
&gt; +    if (result.isNaN())
&gt; +      return false;

wrong indentation

&gt; Source/WebCore/platform/Decimal.cpp:961
&gt; +    int coefficientLength = int(digits.length());

static_cast&lt;&gt;()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637930</commentid>
    <comment_count>23</comment_count>
      <attachid>144970</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-30 19:10:04 -0700</bug_when>
    <thetext>Created attachment 144970
Patch 7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638026</commentid>
    <comment_count>24</comment_count>
      <attachid>144970</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-30 23:37:03 -0700</bug_when>
    <thetext>Comment on attachment 144970
Patch 7

Clearing flags on attachment: 144970

Committed r119062: &lt;http://trac.webkit.org/changeset/119062&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638027</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-30 23:38:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638055</commentid>
    <comment_count>26</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-31 00:23:36 -0700</bug_when>
    <thetext>Reverted r119062 for reason:

Broke build on Lion, SnowLoepard, Chromium Windows, and Chromium Linux 32

Committed r119067: &lt;http://trac.webkit.org/changeset/119067&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638057</commentid>
    <comment_count>27</comment_count>
      <attachid>144970</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-31 00:31:42 -0700</bug_when>
    <thetext>Comment on attachment 144970
Patch 7

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

&gt; Source/WebCore/WebCore.gypi:276
&gt; +            &apos;platform/Decimal.h&apos;
&gt;              &apos;platform/DragData.h&apos;,

Need a comma

&gt; Source/WebCore/platform/Decimal.cpp:281
&gt; +Decimal::Decimal(int32_t i32)
&gt; +    : m_data(i32 &lt; 0 ? Negative : Positive, 0, i32 &lt; 0 ? static_cast&lt;uint32_t&gt;(-i32) : i32)

We need a test for Decimal(std::numeric_limits&lt;int32_t&gt;::min()).

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:165
&gt; +    EXPECT_EQ(encode(1000000000000000, 35, Positive), encode(1, 50, Positive) + Decimal(1));
&gt; +    EXPECT_EQ(encode(1000000000000000, 35, Positive), Decimal(1) + encode(1, 50, Positive));
&gt; +    EXPECT_EQ(encode(10000000001, 0, Positive), encode(1, 10, Positive) + Decimal(1));
&gt; +    EXPECT_EQ(encode(10000000001, 0, Positive), Decimal(1) + encode(1, 10, Positive));

Need to use UINT64_C().

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:454
&gt; +    EXPECT_EQ(encode(3333333333333333, -16, Positive), Decimal(1) / Decimal(3));
&gt; +    EXPECT_EQ(encode(12345678901234, -1, Positive), encode(12345678901234, 0, Positive) / Decimal(10));

ditto.

&gt; Source/WebKit/chromium/tests/DecimalTest.cpp:899
&gt; +    EXPECT_EQ(encode(1000000000000000, 35, Positive), encode(1, 50, Positive) - Decimal(1));
&gt; +    EXPECT_EQ(encode(1000000000000000, 35, Negative), Decimal(1) - encode(1, 50, Positive));

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638062</commentid>
    <comment_count>28</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-05-31 00:38:03 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; Source/WebCore/platform/Decimal.cpp:281
&gt; &gt; +Decimal::Decimal(int32_t i32)
&gt; &gt; +    : m_data(i32 &lt; 0 ? Negative : Positive, 0, i32 &lt; 0 ? static_cast&lt;uint32_t&gt;(-i32) : i32)
&gt; 
&gt; We need a test for Decimal(std::numeric_limits&lt;int32_t&gt;::min()).

We&apos;ve had it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638076</commentid>
    <comment_count>29</comment_count>
      <attachid>145009</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-31 00:54:45 -0700</bug_when>
    <thetext>Created attachment 145009
Patch 8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638085</commentid>
    <comment_count>30</comment_count>
      <attachid>145009</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-31 01:03:51 -0700</bug_when>
    <thetext>Comment on attachment 145009
Patch 8

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

&gt; Source/WebCore/platform/Decimal.cpp:281
&gt; +    : m_data(i32 &lt; 0 ? Negative : Positive, 0, static_cast&lt;uint32_t&gt;(i32 &lt; 0 ? -i32 : i32))

I think -i32 for std::numeric_limits&lt;int32_t&gt;::min() is a undefined behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638103</commentid>
    <comment_count>31</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-05-31 01:20:15 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 145009 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145009&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/Decimal.cpp:281
&gt; &gt; +    : m_data(i32 &lt; 0 ? Negative : Positive, 0, static_cast&lt;uint32_t&gt;(i32 &lt; 0 ? -i32 : i32))
&gt; 
&gt; I think -i32 for std::numeric_limits&lt;int32_t&gt;::min() is a undefined behavior.

You&apos;re right.

I changed to:

Decimal::Decimal(int32_t i32)
    : m_data(i32 &lt; 0 ? Negative : Positive, 0, i32 &lt; 0 ? (UINT64_C(1) &lt;&lt; 32) - static_cast&lt;uint32_t&gt;(i32) : static_cast&lt;uint64_t&gt;(i32))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638109</commentid>
    <comment_count>32</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-05-31 01:26:21 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; (From update of attachment 145009 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145009&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/Decimal.cpp:281
&gt; &gt; &gt; +    : m_data(i32 &lt; 0 ? Negative : Positive, 0, static_cast&lt;uint32_t&gt;(i32 &lt; 0 ? -i32 : i32))
&gt; &gt; 
&gt; &gt; I think -i32 for std::numeric_limits&lt;int32_t&gt;::min() is a undefined behavior.
&gt; 
&gt; You&apos;re right.
&gt; 
&gt; I changed to:
&gt; 
&gt; Decimal::Decimal(int32_t i32)
&gt;     : m_data(i32 &lt; 0 ? Negative : Positive, 0, i32 &lt; 0 ? (UINT64_C(1) &lt;&lt; 32) - static_cast&lt;uint32_t&gt;(i32) : static_cast&lt;uint64_t&gt;(i32))

2^32 - uint(x) doesn&apos;t work, if CPU uses one&apos;s complement.

Let&apos;s make 0x80000000 as special case:

Decimal::Decimal(int32_t i32)
    : m_data(i32 &lt; 0 ? Negative : Positive, 0, static_cast&lt;uint32_t&gt;(static_cast&lt;uint32_t&gt;(i32) == 0x80000000u || i32 &gt;=0 0 ? i32 : -i32))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638110</commentid>
    <comment_count>33</comment_count>
      <attachid>145009</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-31 01:28:47 -0700</bug_when>
    <thetext>Comment on attachment 145009
Patch 8

Clearing flags on attachment: 145009

Committed r119073: &lt;http://trac.webkit.org/changeset/119073&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638111</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-31 01:28:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638113</commentid>
    <comment_count>35</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-31 01:30:41 -0700</bug_when>
    <thetext>Oops, it was already landed.  Please make another patch.

&gt; &gt; Decimal::Decimal(int32_t i32)
&gt; &gt;     : m_data(i32 &lt; 0 ? Negative : Positive, 0, i32 &lt; 0 ? (UINT64_C(1) &lt;&lt; 32) - static_cast&lt;uint32_t&gt;(i32) : static_cast&lt;uint64_t&gt;(i32))
&gt; 
&gt; 2^32 - uint(x) doesn&apos;t work, if CPU uses one&apos;s complement.
&gt; 
&gt; Let&apos;s make 0x80000000 as special case:
&gt; 
&gt; Decimal::Decimal(int32_t i32)
&gt;     : m_data(i32 &lt; 0 ? Negative : Positive, 0, static_cast&lt;uint32_t&gt;(static_cast&lt;uint32_t&gt;(i32) == 0x80000000u || i32 &gt;=0 0 ? i32 : -i32))

Looks ugly.
How about
  i32 &lt; 0 ? static_cast&lt;uint64_t&gt;(-static_cast&lt;int64_t&gt;(i32)) : static_cast&lt;uint64_t&gt;(i32)
?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638116</commentid>
    <comment_count>36</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-05-31 01:36:33 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; How about
&gt;   i32 &lt; 0 ? static_cast&lt;uint64_t&gt;(-static_cast&lt;int64_t&gt;(i32)) : static_cast&lt;uint64_t&gt;(i32)


It is better than having special case.
I filed bug 87941 for this.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638187</commentid>
    <comment_count>37</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-05-31 03:20:51 -0700</bug_when>
    <thetext>It&apos;s very unfortunate that we have WebCore/platform/Decimal.h and wtf/DecimalNumber.h now.
The wtf/*Number*.h classes are intended for xx &lt;-&gt; String conversions, while your Decimal class does much more.

Still I see no reason why this code should live in platform/ rather than WTF.
Also do you real need all of this functionality that you exposed in Decimal?

While the code reads nicely, its a huge pile of new complex code and I don&apos;t yet see users of it, nor can I imagine that you need all of the code you&apos;ve added :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638192</commentid>
    <comment_count>38</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-05-31 03:28:03 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; It&apos;s very unfortunate that we have WebCore/platform/Decimal.h and wtf/DecimalNumber.h now.
&gt; The wtf/*Number*.h classes are intended for xx &lt;-&gt; String conversions, while your Decimal class does much more.
&gt; 
&gt; Still I see no reason why this code should live in platform/ rather than WTF.
&gt; Also do you real need all of this functionality that you exposed in Decimal?
&gt; 
&gt; While the code reads nicely, its a huge pile of new complex code and I don&apos;t yet see users of it, nor can I imagine that you need all of the code you&apos;ve added :-)

Yes, we need to have decimal arithmetic for number input type and range input type to avoid rounding error in stepping numbers which aren&apos;t represent correctly in radix two floating pointer number.

For example, in HTML
  &lt;input type=range step=0.1 value=0 id=foo&gt;

Script $(&quot;foo&quot;).stepUp(6) or move slider 6 times . We would like to have $(&quot;foo&quot;).value=&quot;0.6&quot;.


Bug 80009 has more sample for double floating pointer number rounding issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638457</commentid>
    <comment_count>39</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-05-31 08:42:41 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 145009 [details])
&gt; Clearing flags on attachment: 145009
&gt; 
&gt; Committed r119073: &lt;http://trac.webkit.org/changeset/119073&gt;

This broke the Lion build (fixed in http://trac.webkit.org/changeset/119109).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143778</attachid>
            <date>2012-05-24 03:33:27 -0700</date>
            <delta_ts>2012-05-24 18:13:04 -0700</delta_ts>
            <desc>Patch 1 - Check makefile and UINT64_C macro</desc>
            <filename>bug-87360-20120524193325.patch</filename>
            <type>text/plain</type>
            <size>73900</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFhYWU0MWRiNTNjYjFkNzdkMzRmMWEy
N2UyMjNhZjAyZTgxZDJlMDkuLjhmMWVkNGU5OTBmY2QwZjQxNGM1NGI4NDE0YjkwM2MyNGVlOTg5
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDUtMjQgIFlvc2hpZnVtaSBJbm91ZSAgPHlv
c2luQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGxhdGZvcm1dIEludHJvZHVjZSBEZWNpbWFs
IGNsYXNzIGZvciBOdW1iZXIvUmFuZ2UgaW5wdXQgdHlwZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MzYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRlZCBVSU5UNjRfQyBmb3Ig
TVNWQyBhbmQgb3RoZXIgY29tcGlsZXJzLgorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDog
QWRkZWQgVUlOVDY0X0MuCisKIDIwMTItMDUtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIE9wdGltaXplIGl0ZXJhdGlvbiBvZiBlbXB0eSBoYXNoIHRhYmxlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGE1MzA5MDcyZmMwZmQzNzc4ZGY2NjQyMzNkOTdjYTJiZWU0NmU0ZTQuLmMw
OWIxZWVjMTkxNTljMjhjMjQ3NzZiNjc3NzliNjQ4NzlmNzA2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAxMi0wNS0yNCAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtQbGF0Zm9ybV0gSW50cm9kdWNlIERlY2ltYWwgY2xhc3MgZm9yIE51
bWJlci9SYW5nZSBpbnB1dCB0eXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODczNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZGVkIG5ldyBjbGFzcyBEZWNpbWFsIGZvciBkZWNp
bWFsIGFyaXRobWF0aWMuCisKKyAgICAgICAgVGVzdDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Rl
Y2ltYWxUZXN0LmNwcAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vRGVjaW1hbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWNp
bWFsUHJpdmF0ZSk6CisgICAgICAgIChTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAgICAgKFVJ
bnQxMjgpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6OmhpZ2gp
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omxvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6aXNaZXJvKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpjb3VudERpZ2l0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsUHJpdmF0ZTo6bXVsdGlwbHlIaWdoKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2lt
YWxQcml2YXRlOjpwb3dlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6c2Nh
bGVEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpzY2FsZVVwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpTcGVj
aWFsVmFsdWVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpTcGVj
aWFsVmFsdWVIYW5kbGVyOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZh
dGU6OlNwZWNpYWxWYWx1ZUhhbmRsZXI6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2lt
YWxQcml2YXRlOjpVSW50MTI4OjpVSW50MTI4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQ
cml2YXRlOjpVSW50MTI4OjpvcGVyYXRvciAvPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
UHJpdmF0ZTo6VUludDEyODo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6
RW5jb2RlZERhdGE6OkVuY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVu
Y29kZWREYXRhOjpjb2VmZmljaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNv
ZGVkRGF0YTo6ZXhwb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERh
dGE6OmlzRmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpp
c1NwZWNpYWwpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzWmVy
byk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6cmF3RXhwb25lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OnNpZ24pOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OnNldFNpZ24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGVjaW1hbDo6RGVjaW1hbCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVy
YXRvciA9KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yICs9KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yIC09KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWw6Om9wZXJhdG9yICo9KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9y
IC89KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yIC0pOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgKyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
OjpvcGVyYXRvciAqKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yIC8pOgor
ICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJh
dG9yIDwpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgPD0pOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgPik6CisgICAgICAgIChXZWJDb3JlOjpEZWNp
bWFsOjpvcGVyYXRvciA+PSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpleHBvbmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpmb3JtYXRDbGFzcyk6CisgICAgICAgIChXZWJD
b3JlOjpEZWNpbWFsOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmFicyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpjZWlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWw6OmNvbXBhcmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpmYXN0RXF1YWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmZsb29yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlY2ltYWw6OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aW5maW5p
dHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6bmFuKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlY2ltYWw6OnJlbWFpbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpyb3VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsOjp6ZXJvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9EZWNpbWFsLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWNpbWFsKToKKyAgICAgICAgKEVuY29kZWRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmlzRmluaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6OmlzTWludXMpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aXNQ
bHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmlzU3BlY2lhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNpbWFsOjppc1plcm8pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6dmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aW52ZXJ0U2lnbik6CisKIDIwMTItMDUt
MjQgIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEVs
ZW1lbnRzIGluIFNoYWRvdyBET00gYXJlIG5vdCByZXNpemFibGUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDllNjZjOWJmNGEyMTIxZWUwYzFiNzYxODdjNDcxZmI5MGVhODM2NGYuLjBh
YTQ3ZWIzYzkzMDlmMmRlOWU0OWY4YmJjZTljMDNmNjg5NTFkZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDUtMjQgIFlvc2hpZnVtaSBJbm91ZSAg
PHlvc2luQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGxhdGZvcm1dIEludHJvZHVjZSBEZWNp
bWFsIGNsYXNzIGZvciBOdW1iZXIvUmFuZ2UgaW5wdXQgdHlwZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MzYwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRlZCB1bml0IHRlc3Qg
Zm9yIERlY2ltYWwgY2xhc3MuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9EZWNpbWFsVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8
PCk6IE91dHB1dCBEZWNpbWFsIGZvciB1bml0IHRlc3QgZGVidWdnaW5nCisgICAgICAgIChEZWNp
bWFsVGVzdCk6CisgICAgICAgIChEZWNpbWFsU3RlcFJhbmdlKToKKyAgICAgICAgKERlY2ltYWxU
ZXN0OjpEZWNpbWFsU3RlcFJhbmdlOjpEZWNpbWFsU3RlcFJhbmdlKToKKyAgICAgICAgKERlY2lt
YWxUZXN0OjpEZWNpbWFsU3RlcFJhbmdlOjpjbGFtcFZhbHVlKToKKyAgICAgICAgKERlY2ltYWxU
ZXN0OjpEZWNpbWFsVGVzdDo6ZW5jb2RlKToKKyAgICAgICAgKERlY2ltYWxUZXN0OjpEZWNpbWFs
VGVzdDo6ZnJvbVN0cmluZyk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRlc3Q6OnN0
ZXBEb3duKToKKyAgICAgICAgKERlY2ltYWxUZXN0OjpEZWNpbWFsVGVzdDo6c3RlcFVwKToKKyAg
ICAgICAgKERlY2ltYWxUZXN0OjpURVNUX0YpOgorCiAyMDEyLTA1LTIzICBPamFuIFZhZmFpICA8
b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYWRkIGJhY2sgdGhlIGFiaWxpdHkgdG8gZGlz
YWJsZSBmbGV4Ym94CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmggYi9T
b3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKaW5kZXggOTU2ZmM5NGNjMGQ0M2QwOTJjMGQwZmNk
YjdlZjY4ODI3NTczMjk1OC4uMTU0Yzg4NzI1N2Y0N2JlNzk0OTJiODNjZjg1NTVlNWY3NjAzZGNm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaApAQCAtMzAyLDYgKzMwMiwxNCBAQCB1c2luZyBzdGQ6Ond0Zl9p
c25hbjsKICNkZWZpbmUgaXNuYW4oeCkgd3RmX2lzbmFuKHgpCiAjZW5kaWYKIAorI2lmbmRlZiBV
SU5UNjRfQworI2lmIENPTVBJTEVSKE1TVkMpCisjZGVmaW5lIFVJTlQ2NF9DKGMpIGMgIyMgdWk2
NAorI2Vsc2UKKyNkZWZpbmUgVUlOVDY0X0MoYykgYyAjIyB1bGwKKyNlbmRpZgorI2VuZGlmCisK
IAogLy8gZGVjb21wb3NlICdudW1iZXInIHRvIGl0cyBzaWduLCBleHBvbmVudCwgYW5kIG1hbnRp
c3NhIGNvbXBvbmVudHMuCiAvLyBUaGUgcmVzdWx0IGlzIGludGVycHJldGVkIGFzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCA0NGNhY2UxN2NiNWVkZTBhMmMzOTIxNWNiYmZkNDI4MmU5MjhkMzE1
Li5hNWIxZDdmMWM0MzM4ZDc4MTFjMGIzYTJhYTFkMjY1NzUzNjNlNjk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMTEwNiw2ICsxMTA2LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cAogICAgIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAorICAgIHBsYXRmb3JtL0RlY2ltYWwu
Y3BwCiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmNw
cAogICAgIHBsYXRmb3JtL0V2ZW50VHJhY2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggNzdjYmUyYTY4NjJkZDhjMjAyZDQ4ODFjMjYxMTVhNjdjYjcyYTM3OS4uZDI3NjQw
YzMyODk4ZmRiMjQzMGQ4OTc3NDZmZGNhNTNjZjljNDIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC0zMTE0LDYgKzMxMTQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EYXRlQ29tcG9uZW50cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21w
b25lbnRzLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdEYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAw
ODhlNzVmZDFmOGZjOGMwMjIzYWU3YWY0NjBhOTZkZGE0YzIxMDBiLi5mOWE3YjM3NzhhYTFmYmQz
ZDI3NGJjODYyYjVmZGJlODUxNWZiYjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTEwODIsNiArMTA4Miw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAgICAgcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50
cy5jcHAgXAorICAgIHBsYXRmb3JtL0RlY2ltYWwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0
YS5jcHAgXAogICAgIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL0V2ZW50
VHJhY2VyLmNwcCBcCkBAIC0yMTk3LDYgKzIxOTgsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0
Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIFwK
ICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oIFwKKyAgICBwbGF0Zm9ybS9EZWNpbWFsLmgg
XAogICAgIHBsYXRmb3JtL0RyYWdEYXRhLmggXAogICAgIHBsYXRmb3JtL0RyYWdJbWFnZS5oIFwK
ICAgICBwbGF0Zm9ybS9FdmVudFRyYWNlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmYzIyNzBm
YzVmMDJjYWNjNGU0Yjg3MDhmMmFjODExYzkzNDdmY2Q5Li5lY2RiYWE0Mzk3NTY4MDMwZTY4MTk3
Yjg3ZWIwOWI4MzFjOGMyMDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNzEsNiArMjcxLDcgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vQ3Vyc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25lbnRz
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0RlY2ltYWwuaCcKICAgICAgICAgICAgICdwbGF0
Zm9ybS9EcmFnRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFnSW1hZ2UuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vRXZlbnRUcmFjZXIuaCcsCkBAIC0zMTQ0LDYgKzMxNDUsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL0N1cnNvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21w
b25lbnRzLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vRGVjaW1hbC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL0RyYWdEYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRHJh
Z0ltYWdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRXZlbnRMb29wLmgnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAwMzIwNjUxNGUw
OGU5MGFlZDg5MGJlYjJhYjY0MDdiZDgwYzgwMmI0Li5jMDhlODU3NjY5NTRhZDA4YTUwY2I5MGVh
YjUxYjZkNWE3Y2IzNjcyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtMjc3NzgsNiArMjc3NzgsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRGVjaW1hbC5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERl
Y2ltYWwuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cRHJhZ0RhdGEuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNTNiMDZk
NjA1MmU1N2YxZGUyYzM4MmExNWFmZTdlMjU1MTEzOGU2Li5kODMxZDhkNGYzYmZmY2IxNzBkNTBl
NWZiNWM2OWU1YjdjZmY1YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTkzLDYgKzExOTMsOCBAQAogCQk0NTBDRUJGMDE1
MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkgLyog
TGFiZWxhYmxlRWxlbWVudC5jcHAgKi87IH07CiAJCTQ1MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAv
KiBMYWJlbGFibGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NTBDRUJFRjE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ1QkFD
MkIwMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUJBQzJBRjEzNjBCQkFCMDA1REEyNTggLyogSWNvblVS
TC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ1
RkVBNUNGMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBE
ZWNpbWFsLmNwcCAqLzsgfTsKKwkJNDVGRUE1RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNF
MTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDYxNEExRkUwQjIzQThENjAwNDQ2RTFDIC8qIGNvcHlD
dXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjE0QTFGRDBCMjNBOEQ2MDA0NDZFMUMgLyogY29weUN1cnNvci5wbmcgKi87IH07CiAJCTQ2
NzAwRUQwMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1
RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwICovOyB9OwogCQk0NjcwMEVEMTEyN0I5NkNCMDBGNUQ1
RDYgLyogRmlsZVdyaXRlclN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ2NzAwRUNGMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5o
ICovOyB9OwpAQCAtODE4OSw2ICs4MTkxLDggQEAKIAkJNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5
IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTGFiZWxhYmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDVCQUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvblVSTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2lt
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjaW1hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0NjE0QTFGRDBCMjNBOEQ2MDA0NDZFMUMgLyogY29weUN1
cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBpbWFnZS5wbmc7IHBhdGggPSBjb3B5Q3Vyc29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDY3MDBFQ0UxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmNwcDsg
cGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyU3luYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ2NzAwRUNGMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVy
U3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyU3luYy5o
OyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXJTeW5jLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMDMxMyw2ICsyMDMxNyw4IEBACiAJCQkJRjU4Nzg2ODQwMkRF
M0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovLAogCQkJCUE1NzMyQjA4MTM2QTE2MUQwMDVDOEQ3
QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgKi8sCiAJCQkJQTU3MzJCMDkxMzZBMTYxRDAwNUM4RDdD
IC8qIERhdGVDb21wb25lbnRzLmggKi8sCisJCQkJNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8q
IERlY2ltYWwuY3BwICovLAorCQkJCTQ1RkVBNUNFMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFs
LmggKi8sCiAJCQkJQTc5NTQ2NDIwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCAqLywK
IAkJCQlBN0I2RTY5RDBCMjkxQTk2MDBEMDUyOUYgLyogRHJhZ0RhdGEuaCAqLywKIAkJCQlBN0NG
QjNDRjBCN0VEMTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdlLmNwcCAqLywKQEAgLTIyMDY4LDYgKzIy
MDc0LDcgQEAKIAkJCQlGNTVCM0RCNjEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjgxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1l
SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCQTEyNTFGMTJEMDAzRUYyNjkg
LyogRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDVGRUE1RDAx
NTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QzIyOEEx
MTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRUNDRkMzQjE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVu
Y2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTYyQTQ1MTEwMTE0NUFFMDBERkYzRUQgLyogRGVk
aWNhdGVkV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU2MCw2ICsyNTU2Nyw3
IEBACiAJCQkJRjU1QjNEQjUxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQjcxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1lSW5w
dXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREI5MTI1MUYxMkQwMDNFRjI2OSAv
KiBEYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ1RkVBNUNG
MTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QzIy
OEEyMTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxNjJBNDUwMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRXb3Jr
ZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQw
NyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RlY2ltYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkNDg2Y2RkYTQ1Yjk2ZDliZTQ1OTNmMjll
ZTVhMzczMzRjODlmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EZWNpbWFsLmNwcApAQCAtMCwwICsxLDExMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRGVjaW1hbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGZsb2F0
Lmg+CisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgRGVjaW1hbFByaXZhdGUgeworCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCitzdGF0aWMgY29uc3QgdWludDY0X3QgTWF4Q29lZmZpY2llbnQgPSBVSU5UNjRf
QygweDE2MzQ1Nzg1RDg5RkZGRik7IC8vIDk5OTk5OTk5OTk5OTk5OTk5OTsgLy8gMTggOSdzCisK
K3N0YXRpYyBjb25zdCB1aW50MzJfdCBFeHBvbmVudE1hc2sgPSAweDdGRjsKKworc3RhdGljIGNv
bnN0IHVpbnQzMl90IE5lZ2F0aXZlSW5maW5pdHlQYXR0ZXJuID0gdWludDMyX3QoMHg4MDAwMDdG
Rik7CitzdGF0aWMgY29uc3QgdWludDMyX3QgUG9zaXRpdmVJbmZpbml0eVBhdHRlcm4gPSB1aW50
MzJfdCgweDAwMDAwN0ZGKTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IE5hTlBhdHRlcm4gPSB1
aW50MzJfdCgweDAwMDAwRkZGKTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IE5lZ2F0aXZlWmVy
b1BhdHRlcm4gPSB1aW50MzJfdCgweDgwMDAwM0ZGKTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBQ
b3NpdGl2ZVplcm9QYXR0ZXJuID0gdWludDMyX3QoMHgwMDAwMDNGRik7CisKK3N0YXRpYyBjb25z
dCB1aW50MzJfdCBOZWdhdGl2ZVBhdHRlcm4gPSB1aW50MzJfdCgweDgwMDAwMDAwKTsKK3N0YXRp
YyBjb25zdCB1aW50MzJfdCBQb3NpdGl2ZVBhdHRlcm4gPSAwOworCisvLyBUaGlzIGNsYXNzIGhh
bmRsZXMgRGVjaW1hbCBzcGVjaWFsIHZhbHVlcy4KK2NsYXNzIFNwZWNpYWxWYWx1ZUhhbmRsZXIg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWxWYWx1ZUhhbmRsZXIpOworcHVibGlj
OgorICAgIGVudW0gSGFuZGxlUmVzdWx0IHsKKyAgICAgICAgQm90aEZpbml0ZSwKKyAgICAgICAg
Qm90aGluZmluaXR5LAorICAgICAgICBFaXRoZXJOYU4sCisgICAgICAgIExoc0lzaW5maW5pdHks
CisgICAgICAgIFJoc0lzaW5maW5pdHksCisgICAgfTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRs
ZXIoY29uc3QgRGVjaW1hbCYsIGNvbnN0IERlY2ltYWwmKTsKKyAgICBIYW5kbGVSZXN1bHQgaGFu
ZGxlKCk7CisgICAgRGVjaW1hbCB2YWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGVudW0g
UmVzdWx0IHsKKyAgICAgICAgUmVzdWx0SXNMaHMsCisgICAgICAgIFJlc3VsdElzUmhzLAorICAg
ICAgICBSZXN1bHRJc1Vua25vd24sCisgICAgfTsKKworICAgIGNvbnN0IERlY2ltYWwmIG1fbGhz
OworICAgIFJlc3VsdCBtX3Jlc3VsdDsKKyAgICBjb25zdCBEZWNpbWFsJiBtX3JoczsKK307CisK
Ky8vIFRoaXMgY2xhc3MgaXMgdXNlZCBmb3IgMTI4IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFyaXRo
bWV0aWMuCitjbGFzcyBVSW50MTI4IHsKK3B1YmxpYzoKKyAgICBVSW50MTI4KHVpbnQ2NF90LCB1
aW50NjRfdCk7CisKKyAgICBVSW50MTI4JiBvcGVyYXRvciAvPSh1aW50MzJfdCk7CisKKyAgICB1
aW50NjRfdCBoaWdoKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CisgICAgdWludDY0X3QgbG93
KCkgY29uc3QgeyByZXR1cm4gbV9sb3c7IH0KKworICAgIHN0YXRpYyBVSW50MTI4IG11bHRpcGx5
KHVpbnQ2NF90LCB1aW50NjRfdCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1plcm8oKSBjb25z
dCB7IHJldHVybiAhbV9sb3cgJiYgIW1faGlnaDsgfQorCisgICAgdWludDY0X3QgbV9oaWdoOwor
ICAgIHVpbnQ2NF90IG1fbG93OworfTsKKworc3RhdGljIGludCBjb3VudERpZ2l0cyh1aW50NjRf
dCB4KQoreworICAgIGludCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgdWludDY0X3QgcG93ZXJP
ZjEwID0gMTsKKyAgICB3aGlsZSAoeCA+PSBwb3dlck9mMTApIHsKKyAgICAgICAgKytudW1iZXJP
ZkRpZ2l0czsKKyAgICAgICAgaWYgKHBvd2VyT2YxMCA+PSB1aW50NjRfdCgtMSkgLyAxMCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBwb3dlck9mMTAgKj0gMTA7CisgICAgfQorICAgIHJl
dHVybiBudW1iZXJPZkRpZ2l0czsKK30KKworc3RhdGljIHVpbnQ2NF90IG11bHRpcGx5SGlnaCh1
aW50NjRfdCB1LCB1aW50NjRfdCB2KQoreworICAgIGNvbnN0IGludCBuID0gNjQ7CisgICAgY29u
c3QgaW50IG4yID0gbiAvIDI7CisgICAgY29uc3QgdWludDY0X3QgbWFzayA9ICh1aW50NjRfdCgx
KSA8PCBuMikgLSAxOworICAgIHVpbnQ2NF90IHUwID0gdSAmIG1hc2s7CisgICAgdWludDY0X3Qg
dTEgPSB1ID4+IG4yOworICAgIHVpbnQ2NF90IHYwID0gdiAmIG1hc2s7CisgICAgdWludDY0X3Qg
djEgPSB2ID4+IG4yOworICAgIHVpbnQ2NF90IHcwID0gdTAgKiB2MDsKKyAgICB1aW50NjRfdCB0
dCA9IHUxICogdjAgKyAodzAgPj4gbjIpOworICAgIHVpbnQ2NF90IHcxID0gdHQgJiBtYXNrOwor
ICAgIHVpbnQ2NF90IHcyID0gdHQgPj4gbjI7CisgICAgdzEgPSB1MCAqIHYxICsgdzE7CisgICAg
cmV0dXJuIHUxICogdjEgKyB3MiArICh3MSA+PiBuMik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdGF0aWMgVCBwb3dlcihUIGNvbnN0IHgsIHVuc2lnbmVkIG4pCit7CisgICAgVCB5ID0g
MTsKKyAgICBUIHogPSB4OworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKG4gJiAxKQorICAg
ICAgICAgICAgeSA9IHkgKiB6OworCisgICAgICAgIG4gPj49IDE7CisgICAgICAgIGlmICghbikK
KyAgICAgICAgICAgIHJldHVybiB5OworCisgICAgICAgIHogPSB6ICogejsKKyAgICB9Cit9CisK
K3N0YXRpYyB1aW50NjRfdCBzY2FsZURvd24odWludDY0X3QgeCwgaW50IG4pCit7CisgICAgQVNT
RVJUKG4gPj0gMCk7CisgICAgd2hpbGUgKG4gPiAwICYmIHgpIHsKKyAgICAgICAgeCAvPSAxMDsK
KyAgICAgICAgLS1uOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIHVpbnQ2NF90
IHNjYWxlVXAodWludDY0X3QgeCwgaW50IG4pCit7CisgICAgQVNTRVJUKG4gPj0gMCk7CisgICAg
QVNTRVJUKG4gPCBEZWNpbWFsOjpQcmVjaXNpb24pOworICAgIHVpbnQ2NF90IHJlc3VsdCA9IHgg
KiBwb3dlcih1aW50NjRfdCgxMCksIG4pOworICAgIEFTU0VSVChyZXN1bHQgPj0geCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbFZhbHVlSGFuZGxlcjo6U3BlY2lhbFZhbHVlSGFu
ZGxlcihjb25zdCBEZWNpbWFsJiBsaHMsIGNvbnN0IERlY2ltYWwmIHJocykKKyAgICA6IG1fbGhz
KGxocyksIG1fcmVzdWx0KFJlc3VsdElzVW5rbm93biksIG1fcmhzKHJocykKK3sKK30KKworU3Bl
Y2lhbFZhbHVlSGFuZGxlcjo6SGFuZGxlUmVzdWx0IFNwZWNpYWxWYWx1ZUhhbmRsZXI6OmhhbmRs
ZSgpCit7CisgICAgaWYgKG1fbGhzLmlzRmluaXRlKCkgJiYgbV9yaHMuaXNGaW5pdGUoKSkKKyAg
ICAgICAgcmV0dXJuIEJvdGhGaW5pdGU7CisKKyAgICBjb25zdCBEZWNpbWFsOjpGb3JtYXRDbGFz
cyBsaHNDbGFzcyA9IG1fbGhzLmZvcm1hdENsYXNzKCk7CisgICAgY29uc3QgRGVjaW1hbDo6Rm9y
bWF0Q2xhc3MgcmhzQ2xhc3MgPSBtX3Jocy5mb3JtYXRDbGFzcygpOworICAgIGlmIChsaHNDbGFz
cyA9PSBEZWNpbWFsOjpDbGFzc05hTikgeworICAgICAgICBtX3Jlc3VsdCA9IFJlc3VsdElzTGhz
OworICAgICAgICByZXR1cm4gRWl0aGVyTmFOOworICAgICB9CisKKyAgICBpZiAocmhzQ2xhc3Mg
PT0gRGVjaW1hbDo6Q2xhc3NOYU4pIHsKKyAgICAgICAgbV9yZXN1bHQgPSBSZXN1bHRJc1JoczsK
KyAgICAgICAgcmV0dXJuIEVpdGhlck5hTjsKKyAgICAgfQorCisgICAgaWYgKGxoc0NsYXNzID09
IERlY2ltYWw6OkNsYXNzSW5maW5pdHkpCisgICAgICAgIHJldHVybiByaHNDbGFzcyA9PSBEZWNp
bWFsOjpDbGFzc0luZmluaXR5ID8gQm90aGluZmluaXR5IDogTGhzSXNpbmZpbml0eTsKKworICAg
IGlmIChyaHNDbGFzcyA9PSBEZWNpbWFsOjpDbGFzc0luZmluaXR5KQorICAgICAgICByZXR1cm4g
UmhzSXNpbmZpbml0eTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBC
b3RoRmluaXRlOworfQorCitEZWNpbWFsIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OnZhbHVlKCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fcmVzdWx0KSB7CisgICAgY2FzZSBSZXN1bHRJc0xoczoKKyAg
ICAgICAgcmV0dXJuIG1fbGhzOworICAgIGNhc2UgUmVzdWx0SXNSaHM6CisgICAgICAgIHJldHVy
biBtX3JoczsKKyAgICBjYXNlIFJlc3VsdElzVW5rbm93bjoKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG1fbGhzOworICAgIH0KK30K
KworVUludDEyODo6VUludDEyOCh1aW50NjRfdCBsb3csIHVpbnQ2NF90IGhpZ2gpCisgICAgOiBt
X2hpZ2goaGlnaCksIG1fbG93KGxvdykKK3sKK30KKworVUludDEyOCYgVUludDEyODo6b3BlcmF0
b3IgLz0oY29uc3QgdWludDMyX3QgZGl2aXNvcikKK3sKKyAgICBpZiAoIW1faGlnaCkgeworICAg
ICAgICBtX2xvdyAvPSBkaXZpc29yOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgdWludDMyX3QgZGl2aWRlbmRbNF07CisgICAgZGl2aWRlbmRbMF0gPSB1aW50MzJfdChtX2xv
dyAmIHVpbnQzMl90KC0xKSk7CisgICAgZGl2aWRlbmRbMV0gPSB1aW50MzJfdChtX2xvdyA+PiAz
Mik7CisgICAgZGl2aWRlbmRbMl0gPSB1aW50MzJfdChtX2hpZ2ggJiB1aW50MzJfdCgtMSkpOwor
ICAgIGRpdmlkZW5kWzNdID0gdWludDMyX3QobV9oaWdoID4+IDMyKTsKKworICAgIHVpbnQzMl90
IHF1b3RpZW50WzRdOworICAgIHVpbnQzMl90IHJlbWFpbmRlciA9IDA7CisgICAgZm9yIChpbnQg
aSA9IDM7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IHdvcmsgPSAodWlu
dDY0X3QocmVtYWluZGVyKSA8PCAzMikgfCBkaXZpZGVuZFtpXTsKKyAgICAgICAgcmVtYWluZGVy
ID0gdWludDMyX3Qod29yayAlIGRpdmlzb3IpOworICAgICAgICBxdW90aWVudFtpXSA9IHVpbnQz
Ml90KHdvcmsgLyBkaXZpc29yKTsKKyAgICB9CisgICAgbV9sb3cgPSBxdW90aWVudFswXSB8ICh1
aW50NjRfdChxdW90aWVudFsxXSkgPDwgMzIpOworICAgIG1faGlnaCA9IHF1b3RpZW50WzJdIHwg
KHVpbnQ2NF90KHF1b3RpZW50WzNdKSA8PCAzMik7CisgICAgcmV0dXJuICp0aGlzOworfQorCitV
SW50MTI4IFVJbnQxMjg6Om11bHRpcGx5KHVpbnQ2NF90IHUsIHVpbnQ2NF90IHYpCit7CisgICAg
cmV0dXJuIFVJbnQxMjgodSAqIHYsIG11bHRpcGx5SGlnaCh1LCB2KSk7Cit9CisKK30gLy8gRGVj
aW1hbFByaXZhdGUKKwordXNpbmcgbmFtZXNwYWNlIERlY2ltYWxQcml2YXRlOworCitEZWNpbWFs
OjpFbmNvZGVkRGF0YTo6RW5jb2RlZERhdGEodWludDMyX3QgcGF0dGVybikKKyAgICA6IG1fY29l
ZmZpY2llbnQoMCkKKyAgICAsIG1fcGFja2VkRmllbGQocGF0dGVybikKK3sKKyAgICBBU1NFUlQo
KHBhdHRlcm4gJiBQb3NpdGl2ZVplcm9QYXR0ZXJuKSA9PSBQb3NpdGl2ZVplcm9QYXR0ZXJuKTsK
K30KKworRGVjaW1hbDo6RW5jb2RlZERhdGE6OkVuY29kZWREYXRhKHVpbnQ2NF90IGNvZWZmaWNp
ZW50LCBjb25zdCBpbnQgZXhwb25lbnQsIGNvbnN0IFNpZ24gc2lnbikKK3sKKyAgICBpbnQgcmF3
RXhwb25lbnQgPSBleHBvbmVudCArIEViaWFzOworICAgIGlmICh1bnNpZ25lZChyYXdFeHBvbmVu
dCkgPCB1bnNpZ25lZChFbWF4KSkgeworICAgICAgICB3aGlsZSAoY29lZmZpY2llbnQgPj0gTWF4
Q29lZmZpY2llbnQpIHsKKyAgICAgICAgICAgIGNvZWZmaWNpZW50IC89IDEwOworICAgICAgICAg
ICAgKytyYXdFeHBvbmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyYXdFeHBvbmVu
dCA+PSBFbWF4KSB7CisgICAgICAgIG1fY29lZmZpY2llbnQgPSAwOworICAgICAgICBtX3BhY2tl
ZEZpZWxkID0gc2lnbiA9PSBNaW51cyA/IE5lZ2F0aXZlSW5maW5pdHlQYXR0ZXJuIDogUG9zaXRp
dmVJbmZpbml0eVBhdHRlcm47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmF3
RXhwb25lbnQgPCAwKSB7CisgICAgICAgIG1fY29lZmZpY2llbnQgPSAwOworICAgICAgICBtX3Bh
Y2tlZEZpZWxkID0gc2lnbiA9PSBNaW51cyA/IE5lZ2F0aXZlWmVyb1BhdHRlcm4gOiBQb3NpdGl2
ZVplcm9QYXR0ZXJuOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb2VmZmljaWVu
dCA9IGNvZWZmaWNpZW50OworICAgIG1fcGFja2VkRmllbGQgPSByYXdFeHBvbmVudCB8IChzaWdu
ID09IE1pbnVzID8gTmVnYXRpdmVQYXR0ZXJuIDogUG9zaXRpdmVQYXR0ZXJuKTsKK30KKwordWlu
dDY0X3QgRGVjaW1hbDo6RW5jb2RlZERhdGE6OmNvZWZmaWNpZW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb2VmZmljaWVudDsKK30KKworaW50IERlY2ltYWw6OkVuY29kZWREYXRhOjpleHBv
bmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJhd0V4cG9uZW50KCkgLSBEZWNpbWFsOjpFYmlh
czsKK30KKworYm9vbCBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNGaW5pdGUoKSBjb25zdAorewor
ICAgIHJldHVybiAhaXNTcGVjaWFsKCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6RW5jb2RlZERhdGE6
OmlzU3BlY2lhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJhd0V4cG9uZW50KCkgPT0gRGVjaW1h
bDo6RW1heDsKK30KKworYm9vbCBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNaZXJvKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaXNGaW5pdGUoKSAmJiAhbV9jb2VmZmljaWVudDsKK30KKworaW50IERl
Y2ltYWw6OkVuY29kZWREYXRhOjpyYXdFeHBvbmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlu
dChtX3BhY2tlZEZpZWxkICYgRXhwb25lbnRNYXNrKTsKK30KKworRGVjaW1hbDo6U2lnbiBEZWNp
bWFsOjpFbmNvZGVkRGF0YTo6c2lnbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGludChtX3BhY2tl
ZEZpZWxkKSA8IDAgPyBNaW51cyA6IFBsdXM7Cit9CisKK3ZvaWQgRGVjaW1hbDo6RW5jb2RlZERh
dGE6OnNldFNpZ24oY29uc3QgU2lnbiBzaWduKQoreworICAgIGlmIChzaWduID09IE1pbnVzKQor
ICAgICAgICBtX3BhY2tlZEZpZWxkIHw9IHVpbnQzMl90KDEpIDw8IDMxOworICAgIGVsc2UKKyAg
ICAgICAgbV9wYWNrZWRGaWVsZCAmPSB+KHVpbnQzMl90KDEpIDw8IDMxKTsKK30KKworRGVjaW1h
bDo6RGVjaW1hbCgpCisgICAgOiBtX2RhdGEoMCwgMCwgUGx1cykKK3sKK30KKworRGVjaW1hbDo6
RGVjaW1hbChpbnQzMl90IGkzMikKKyAgICA6IG1fZGF0YShpMzIgPCAwID8gdWludDMyX3QoLWkz
MikgOiBpMzIsIDAsIGkzMiA8IDAgPyBNaW51cyA6IFBsdXMpCit7Cit9CisKK0RlY2ltYWw6OkRl
Y2ltYWwodWludDY0X3QgY29lZmZpY2llbnQsIGludCBleHBvbmVudCwgU2lnbiBzaWduKQorICAg
IDogbV9kYXRhKGNvZWZmaWNpZW50LCBleHBvbmVudCwgc2lnbikKK3sKK30KKworRGVjaW1hbDo6
RGVjaW1hbChjb25zdCBFbmNvZGVkRGF0YSYgZGF0YSkKKyAgICA6IG1fZGF0YShkYXRhKQorewor
fQorCitEZWNpbWFsOjpEZWNpbWFsKGNvbnN0IERlY2ltYWwmIG90aGVyKQorICAgIDogbV9kYXRh
KG90aGVyLm1fZGF0YSkKK3sKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IgPShjb25z
dCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvciArPShjb25zdCBEZWNp
bWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgKyBvdGhlcikubV9kYXRhOworICAg
IHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IgLT0oY29uc3Qg
RGVjaW1hbCYgb3RoZXIpCit7CisgICAgbV9kYXRhID0gKCp0aGlzIC0gb3RoZXIpLm1fZGF0YTsK
KyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0RlY2ltYWwmIERlY2ltYWw6Om9wZXJhdG9yICo9KGNv
bnN0IERlY2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyAqIG90aGVyKS5tX2Rh
dGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvciAv
PShjb25zdCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgLyBvdGhlciku
bV9kYXRhOworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRv
ciAtKCkgY29uc3QKK3sKKyAgICBEZWNpbWFsIHJlc3VsdCgqdGhpcyk7CisgICAgcmVzdWx0Lm1f
ZGF0YS5zZXRTaWduKGludmVydFNpZ24obV9kYXRhLnNpZ24oKSkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IgKyhjb25zdCBEZWNpbWFsJiByaHMp
IGNvbnN0Cit7CisgICAgY29uc3QgRGVjaW1hbCYgbGhzID0gKnRoaXM7CisgICAgY29uc3QgU2ln
biBsaHNTaWduID0gbGhzLnNpZ24oKTsKKyAgICBjb25zdCBTaWduIHJoc1NpZ24gPSByaHMuc2ln
bigpOworCisgICAgU3BlY2lhbFZhbHVlSGFuZGxlciBoYW5kbGVyKGxocywgcmhzKTsKKyAgICBz
d2l0Y2ggKGhhbmRsZXIuaGFuZGxlKCkpIHsKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6
OkJvdGhGaW5pdGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5k
bGVyOjpCb3RoaW5maW5pdHk6CisgICAgICAgIHJldHVybiBsaHNTaWduID09IHJoc1NpZ24gPyBs
aHMgOiBuYW4oKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6RWl0aGVyTmFOOgor
ICAgICAgICByZXR1cm4gaGFuZGxlci52YWx1ZSgpOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVI
YW5kbGVyOjpMaHNJc2luZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzOworCisgICAgY2FzZSBT
cGVjaWFsVmFsdWVIYW5kbGVyOjpSaHNJc2luZmluaXR5OgorICAgICAgICByZXR1cm4gcmhzOwor
ICAgIH0KKworICAgIEFTU0VSVChsaHMuaXNGaW5pdGUoKSk7CisgICAgQVNTRVJUKHJocy5pc0Zp
bml0ZSgpKTsKKworICAgIGNvbnN0IGludCBsaHNFeHBvbmVudCA9IGxocy5leHBvbmVudCgpOwor
ICAgIGNvbnN0IGludCByaHNFeHBvbmVudCA9IHJocy5leHBvbmVudCgpOworICAgIGludCByZXN1
bHRFeHBvbmVudCA9IG1pbihsaHNFeHBvbmVudCwgcmhzRXhwb25lbnQpOworICAgIHVpbnQ2NF90
IGxoc0NvZWZmaWNpZW50ID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIHVpbnQ2NF90
IHJoc0NvZWZmaWNpZW50ID0gcmhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworCisgICAgLy8gTWFr
ZSBjb2VmZmljaWVudCBhbGlnbmVkLgorICAgIGlmIChsaHNFeHBvbmVudCA+IHJoc0V4cG9uZW50
KSB7CisgICAgICAgIGNvbnN0IGludCBudW1iZXJPZkxIU0RpZ2l0cyA9IGNvdW50RGlnaXRzKGxo
c0NvZWZmaWNpZW50KTsKKyAgICAgICAgaWYgKG51bWJlck9mTEhTRGlnaXRzKSB7CisgICAgICAg
ICAgICBjb25zdCBpbnQgbGhzU2hpZnRBbW91bnQgPSBsaHNFeHBvbmVudCAtIHJoc0V4cG9uZW50
OworICAgICAgICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0gbnVtYmVyT2ZMSFNEaWdpdHMgKyBs
aHNTaGlmdEFtb3VudCAtIFByZWNpc2lvbjsKKyAgICAgICAgICAgIGlmIChvdmVyZmxvdyA8PSAw
KQorICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVVcChsaHNDb2VmZmljaWVu
dCwgbGhzU2hpZnRBbW91bnQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
bGhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKGxoc0NvZWZmaWNpZW50LCBsaHNTaGlmdEFtb3VudCAt
IG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICByaHNDb2VmZmljaWVudCA9IHNjYWxlRG93bihy
aHNDb2VmZmljaWVudCwgb3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIHJlc3VsdEV4cG9uZW50
ICs9IG92ZXJmbG93OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9IGlmIChsaHNF
eHBvbmVudCA8IHJoc0V4cG9uZW50KSB7CisgICAgICAgIGNvbnN0IGludCBudW1iZXJPZlJIU0Rp
Z2l0cyA9IGNvdW50RGlnaXRzKHJoc0NvZWZmaWNpZW50KTsKKyAgICAgICAgaWYgKG51bWJlck9m
UkhTRGlnaXRzKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcmhzU2hpZnRBbW91bnQgPSByaHNF
eHBvbmVudCAtIGxoc0V4cG9uZW50OworICAgICAgICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0g
bnVtYmVyT2ZSSFNEaWdpdHMgKyByaHNTaGlmdEFtb3VudCAtIFByZWNpc2lvbjsKKyAgICAgICAg
ICAgIGlmIChvdmVyZmxvdyA8PSAwKQorICAgICAgICAgICAgICAgIHJoc0NvZWZmaWNpZW50ID0g
c2NhbGVVcChyaHNDb2VmZmljaWVudCwgcmhzU2hpZnRBbW91bnQpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKHJoc0NvZWZmaWNp
ZW50LCByaHNTaGlmdEFtb3VudCAtIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBsaHNDb2Vm
ZmljaWVudCA9IHNjYWxlRG93bihsaHNDb2VmZmljaWVudCwgb3ZlcmZsb3cpOworICAgICAgICAg
ICAgICAgIHJlc3VsdEV4cG9uZW50ICs9IG92ZXJmbG93OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgdWludDY0X3QgY29uc3QgcmVzdWx0ID0gbGhzU2lnbiA9PSByaHNT
aWduID8gbGhzQ29lZmZpY2llbnQgKyByaHNDb2VmZmljaWVudCA6IGxoc0NvZWZmaWNpZW50IC0g
cmhzQ29lZmZpY2llbnQ7CisgICAgcmV0dXJuIGxoc1NpZ24gPT0gTWludXMgJiYgcmhzU2lnbiA9
PSBQbHVzICYmICFyZXN1bHQKKyAgICAgICAgICAgID8gRGVjaW1hbCgwLCByZXN1bHRFeHBvbmVu
dCwgUGx1cykKKyAgICAgICAgICAgIDogaW50NjRfdChyZXN1bHQpID49IDAKKyAgICAgICAgICAg
ICAgICA/IERlY2ltYWwocmVzdWx0LCByZXN1bHRFeHBvbmVudCwgbGhzU2lnbikKKyAgICAgICAg
ICAgICAgICA6IERlY2ltYWwoLWludDY0X3QocmVzdWx0KSwgcmVzdWx0RXhwb25lbnQsIGludmVy
dFNpZ24obGhzU2lnbikpOworfQorCitEZWNpbWFsIERlY2ltYWw6Om9wZXJhdG9yIC0oY29uc3Qg
RGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9ICp0aGlzOwor
ICAgIGNvbnN0IFNpZ24gbGhzU2lnbiA9IGxocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByaHNT
aWduID0gcmhzLnNpZ24oKTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMs
IHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFs
VmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3Bl
Y2lhbFZhbHVlSGFuZGxlcjo6Qm90aGluZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzU2lnbiA9
PSByaHNTaWduID8gbmFuKCkgOiBsaHM7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6
OkVpdGhlck5hTjoKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2Ug
U3BlY2lhbFZhbHVlSGFuZGxlcjo6TGhzSXNpbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxoczsK
KworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6UmhzSXNpbmZpbml0eToKKyAgICAgICAg
cmV0dXJuIGluZmluaXR5KGludmVydFNpZ24ocmhzU2lnbikpOworICAgIH0KKworICAgIEFTU0VS
VChsaHMuaXNGaW5pdGUoKSk7CisgICAgQVNTRVJUKHJocy5pc0Zpbml0ZSgpKTsKKworICAgIHVp
bnQ2NF90IGxoc0NvZWZmaWNpZW50ID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIHVp
bnQ2NF90IHJoc0NvZWZmaWNpZW50ID0gcmhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworCisgICAg
Y29uc3QgaW50IGxoc0V4cG9uZW50ID0gbGhzLmV4cG9uZW50KCk7CisgICAgY29uc3QgaW50IHJo
c0V4cG9uZW50ID0gcmhzLmV4cG9uZW50KCk7CisgICAgaW50IHJlc3VsdEV4cG9uZW50ID0gbWlu
KGxoc0V4cG9uZW50LCByaHNFeHBvbmVudCk7CisKKyAgICAvLyBNYWtlIGNvZWZmaWNpZW50IGFs
aWduZWQuCisgICAgaWYgKGxoc0V4cG9uZW50ID4gcmhzRXhwb25lbnQpIHsKKyAgICAgICAgY29u
c3QgaW50IG51bWJlck9mTEhTRGlnaXRzID0gY291bnREaWdpdHMobGhzQ29lZmZpY2llbnQpOwor
ICAgICAgICBpZiAobnVtYmVyT2ZMSFNEaWdpdHMpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBs
aHNTaGlmdEFtb3VudCA9IGxoc0V4cG9uZW50IC0gcmhzRXhwb25lbnQ7CisgICAgICAgICAgICBj
b25zdCBpbnQgb3ZlcmZsb3cgPSBudW1iZXJPZkxIU0RpZ2l0cyArIGxoc1NoaWZ0QW1vdW50IC0g
UHJlY2lzaW9uOworICAgICAgICAgICAgaWYgKG92ZXJmbG93IDw9IDApCisgICAgICAgICAgICAg
ICAgbGhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKGxoc0NvZWZmaWNpZW50LCBsaHNTaGlmdEFtb3Vu
dCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsaHNDb2VmZmljaWVudCA9
IHNjYWxlVXAobGhzQ29lZmZpY2llbnQsIGxoc1NoaWZ0QW1vdW50IC0gb3ZlcmZsb3cpOworICAg
ICAgICAgICAgICAgIHJoc0NvZWZmaWNpZW50ID0gc2NhbGVEb3duKHJoc0NvZWZmaWNpZW50LCBv
dmVyZmxvdyk7CisgICAgICAgICAgICAgICAgcmVzdWx0RXhwb25lbnQgKz0gb3ZlcmZsb3c7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0gaWYgKGxoc0V4cG9uZW50IDwgcmhzRXhw
b25lbnQpIHsKKyAgICAgICAgY29uc3QgaW50IG51bWJlck9mUkhTRGlnaXRzID0gY291bnREaWdp
dHMocmhzQ29lZmZpY2llbnQpOworICAgICAgICBpZiAobnVtYmVyT2ZSSFNEaWdpdHMpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCByaHNTaGlmdEFtb3VudCA9IHJoc0V4cG9uZW50IC0gbGhzRXhw
b25lbnQ7CisgICAgICAgICAgICBjb25zdCBpbnQgb3ZlcmZsb3cgPSBudW1iZXJPZlJIU0RpZ2l0
cyArIHJoc1NoaWZ0QW1vdW50IC0gUHJlY2lzaW9uOworICAgICAgICAgICAgaWYgKG92ZXJmbG93
IDw9IDApCisgICAgICAgICAgICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKHJoc0NvZWZm
aWNpZW50LCByaHNTaGlmdEFtb3VudCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICByaHNDb2VmZmljaWVudCA9IHNjYWxlVXAocmhzQ29lZmZpY2llbnQsIHJoc1NoaWZ0QW1v
dW50IC0gb3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVE
b3duKGxoc0NvZWZmaWNpZW50LCBvdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgcmVzdWx0RXhw
b25lbnQgKz0gb3ZlcmZsb3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB1aW50NjRfdCByZXN1bHQgPSBsaHNTaWduID09IHJoc1NpZ24gPyBsaHNDb2VmZmljaWVudCAt
IHJoc0NvZWZmaWNpZW50IDogbGhzQ29lZmZpY2llbnQgKyByaHNDb2VmZmljaWVudDsKKyAgICBy
ZXR1cm4gbGhzU2lnbiA9PSBNaW51cyAmJiByaHNTaWduID09IE1pbnVzICYmICFyZXN1bHQKKyAg
ICAgICAgICAgID8gRGVjaW1hbCgwLCByZXN1bHRFeHBvbmVudCwgUGx1cykKKyAgICAgICAgICAg
IDogaW50NjRfdChyZXN1bHQpID49IDAKKyAgICAgICAgICAgICAgICA/IERlY2ltYWwocmVzdWx0
LCByZXN1bHRFeHBvbmVudCwgbGhzU2lnbikKKyAgICAgICAgICAgICAgICA6IERlY2ltYWwoLWlu
dDY0X3QocmVzdWx0KSwgcmVzdWx0RXhwb25lbnQsIGludmVydFNpZ24obGhzU2lnbikpOworfQor
CitEZWNpbWFsIERlY2ltYWw6Om9wZXJhdG9yICooY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAor
eworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9ICp0aGlzOworICAgIGNvbnN0IFNpZ24gbGhzU2ln
biA9IGxocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByaHNTaWduID0gcmhzLnNpZ24oKTsKKyAg
ICBTaWduIHJlc3VsdFNpZ24gPSBsaHNTaWduID09IHJoc1NpZ24gPyBQbHVzIDogTWludXM7CisK
KyAgICBTcGVjaWFsVmFsdWVIYW5kbGVyIGhhbmRsZXIobGhzLCByaHMpOworICAgIHN3aXRjaCAo
aGFuZGxlci5oYW5kbGUoKSkgeworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEZp
bml0ZTogeworICAgICAgICBjb25zdCB1aW50NjRfdCBsaHNDb2VmZmljaWVudCA9IGxocy5tX2Rh
dGEuY29lZmZpY2llbnQoKTsKKyAgICAgICAgY29uc3QgdWludDY0X3QgcmhzQ29lZmZpY2llbnQg
PSByaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgICAgIGludCByZXN1bHRFeHBvbmVudCA9
IGxocy5leHBvbmVudCgpICsgcmhzLmV4cG9uZW50KCk7CisgICAgICAgIFVJbnQxMjggd29yayhV
SW50MTI4OjptdWx0aXBseShsaHNDb2VmZmljaWVudCwgcmhzQ29lZmZpY2llbnQpKTsKKyAgICAg
ICAgd2hpbGUgKHdvcmsuaGlnaCgpKSB7CisgICAgICAgICAgd29yayAvPSAxMDsKKyAgICAgICAg
ICArK3Jlc3VsdEV4cG9uZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWNpbWFsKHdv
cmsubG93KCksIHJlc3VsdEV4cG9uZW50LCByZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBjYXNl
IFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhpbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGluZmlu
aXR5KHJlc3VsdFNpZ24pOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpFaXRoZXJO
YU46CisgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlKCk7CisKKyAgICBjYXNlIFNwZWNpYWxW
YWx1ZUhhbmRsZXI6Okxoc0lzaW5maW5pdHk6CisgICAgICAgIHJldHVybiByaHMuaXNaZXJvKCkg
PyBuYW4oKSA6IGluZmluaXR5KHJlc3VsdFNpZ24pOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVI
YW5kbGVyOjpSaHNJc2luZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzLmlzWmVybygpID8gbmFu
KCkgOiBpbmZpbml0eShyZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbmFuKCk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3Ig
Lyhjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29uc3QgRGVjaW1hbCYgbGhzID0g
KnRoaXM7CisgICAgY29uc3QgU2lnbiBsaHNTaWduID0gbGhzLnNpZ24oKTsKKyAgICBjb25zdCBT
aWduIHJoc1NpZ24gPSByaHMuc2lnbigpOworICAgIFNpZ24gcmVzdWx0U2lnbiA9IGxoc1NpZ24g
PT0gcmhzU2lnbiA/IFBsdXMgOiBNaW51czsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFu
ZGxlcihsaHMsIHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2Fz
ZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aGluZmluaXR5OgorICAgICAgICByZXR1cm4g
bmFuKCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAg
ICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxl
cjo6TGhzSXNpbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGluZmluaXR5KHJlc3VsdFNpZ24pOwor
CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSaHNJc2luZmluaXR5OgorICAgICAgICBy
ZXR1cm4gemVybyhyZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBBU1NFUlQobGhzLmlzRmluaXRl
KCkpOworICAgIEFTU0VSVChyaHMuaXNGaW5pdGUoKSk7CisKKyAgICBpZiAocmhzLmlzWmVybygp
KQorICAgICAgICByZXR1cm4gbGhzLmlzWmVybygpID8gbmFuKCkgOiBpbmZpbml0eShyZXN1bHRT
aWduKTsKKworICAgIGludCByZXN1bHRFeHBvbmVudCA9IGxocy5leHBvbmVudCgpIC0gcmhzLmV4
cG9uZW50KCk7CisKKyAgICBpZiAobGhzLmlzWmVybygpKSB7CisgICAgICAgIC8vIDAvbm9uLXpl
cm8gPT4gMAorICAgICAgICByZXR1cm4gRGVjaW1hbCgwLCByZXN1bHRFeHBvbmVudCwgcmVzdWx0
U2lnbik7CisgICAgfQorCisgICAgdWludDY0X3QgcmVtYWluZGVyID0gbGhzLm1fZGF0YS5jb2Vm
ZmljaWVudCgpOworICAgIGNvbnN0IHVpbnQ2NF90IGRpdmlzb3IgPSByaHMubV9kYXRhLmNvZWZm
aWNpZW50KCk7CisgICAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgICB3aGlsZSAocmVzdWx0IDwg
TWF4Q29lZmZpY2llbnQgLyAxMDApIHsKKyAgICAgICAgd2hpbGUgKHJlbWFpbmRlciA8IGRpdmlz
b3IpIHsKKyAgICAgICAgICAgIHJlbWFpbmRlciAqPSAxMDsKKyAgICAgICAgICAgIHJlc3VsdCAq
PSAxMDsKKyAgICAgICAgICAgIC0tcmVzdWx0RXhwb25lbnQ7CisgICAgICAgIH0KKyAgICAgICAg
cmVzdWx0ICs9IHJlbWFpbmRlciAvIGRpdmlzb3I7CisgICAgICAgIHJlbWFpbmRlciAlPSBkaXZp
c29yOworICAgICAgICBpZiAoIXJlbWFpbmRlcikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGlmIChyZW1haW5kZXIgPiBkaXZpc29yIC8gMikKKyAgICAgICAgKytyZXN1bHQ7CisK
KyAgICByZXR1cm4gRGVjaW1hbChyZXN1bHQsIHJlc3VsdEV4cG9uZW50LCByZXN1bHRTaWduKTsK
K30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvcj09KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QK
K3sKKyAgICByZXR1cm4gZmFzdEVxdWFscyhyaHMpIHx8IGNvbXBhcmVUbyhyaHMpLmlzWmVybygp
OworfQorCitib29sIERlY2ltYWw6Om9wZXJhdG9yIT0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25z
dAoreworICAgIHJldHVybiAhb3BlcmF0b3IgPT0ocmhzKTsKK30KKworYm9vbCBEZWNpbWFsOjpv
cGVyYXRvciA8KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJh
dG9yID49KHJocyk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6b3BlcmF0b3IgPD0oY29uc3QgRGVjaW1h
bCYgcmhzKSBjb25zdAoreworICAgIGlmIChmYXN0RXF1YWxzKHJocykpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNvbnN0IERlY2ltYWwgcmVzdWx0ID0gY29tcGFyZVRvKHJocyk7CisgICAg
cmV0dXJuIHJlc3VsdC5pc1plcm8oKSB8fCByZXN1bHQuaXNNaW51cygpOworfQorCitib29sIERl
Y2ltYWw6Om9wZXJhdG9yID4oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIHJldHVy
biAhb3BlcmF0b3IgPD0ocmhzKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvciA+PShjb25z
dCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgaWYgKGZhc3RFcXVhbHMocmhzKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgRGVjaW1hbCByZXN1bHQgPSBjb21wYXJlVG8ocmhz
KTsKKyAgICByZXR1cm4gcmVzdWx0LmlzWmVybygpIHx8ICFyZXN1bHQuaXNNaW51cygpOworfQor
CitpbnQgRGVjaW1hbDo6ZXhwb25lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpc0Zpbml0ZSgp
ID8gbV9kYXRhLmV4cG9uZW50KCkgOiAwOworfQorCitEZWNpbWFsOjpGb3JtYXRDbGFzcyBEZWNp
bWFsOjpmb3JtYXRDbGFzcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2RhdGEubV9wYWNrZWRG
aWVsZCkgeworICAgIGNhc2UgUG9zaXRpdmVJbmZpbml0eVBhdHRlcm46CisgICAgY2FzZSBOZWdh
dGl2ZUluZmluaXR5UGF0dGVybjoKKyAgICAgICAgcmV0dXJuIENsYXNzSW5maW5pdHk7CisgICAg
Y2FzZSBOYU5QYXR0ZXJuOgorICAgICAgICByZXR1cm4gQ2xhc3NOYU47CisgICAgfQorCisgICAg
cmV0dXJuIG1fZGF0YS5pc1plcm8oKSA/IENsYXNzWmVybyA6IENsYXNzTm9ybWFsOworfQorCitE
ZWNpbWFsOjpTaWduIERlY2ltYWw6OnNpZ24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEu
c2lnbigpOworfQorCitEZWNpbWFsIERlY2ltYWw6OmFicygpIGNvbnN0Cit7CisgICAgRGVjaW1h
bCByZXN1bHQoKnRoaXMpOworICAgIHJlc3VsdC5tX2RhdGEuc2V0U2lnbihQbHVzKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCisvLyBSb3VuZCB0b3dhcmQgcG9zaXRpdmUgaW5maW5pdHkuCisv
LyBOb3RlOiBNYWMgcG9ydHMgZGVmaW5lcyBjZWlsKHgpIGFzIHd0Zl9jZWlsKHgpLCBzbyB3ZSBj
YW4ndCB1c2UgbmFtZSAiY2VpbCIgaGVyZS4KK0RlY2ltYWwgRGVjaW1hbDo6Y2VpbGluZygpIGNv
bnN0Cit7CisgICAgaWYgKGlzU3BlY2lhbCgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAg
ICBpZiAoZXhwb25lbnQoKSA+PSAwKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICB1aW50
NjRfdCByZXN1bHQgPSBtX2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICBjb25zdCBpbnQgbnVtYmVy
T2ZEaWdpdHMgPSBjb3VudERpZ2l0cyhyZXN1bHQpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRy
b3BEaWdpdHMgPSAtZXhwb25lbnQoKTsKKyAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBudW1iZXJP
ZkRyb3BEaWdpdHMpCisgICAgICAgIHJldHVybiB6ZXJvKFBsdXMpOworCisgICAgcmVzdWx0ID0g
c2NhbGVEb3duKHJlc3VsdCwgbnVtYmVyT2ZEcm9wRGlnaXRzIC0gMSk7CisgICAgaWYgKHNpZ24o
KSA9PSBQbHVzICYmIHJlc3VsdCAlIDEwID4gMCkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAg
IHJlc3VsdCAvPSAxMDsKKyAgICByZXR1cm4gRGVjaW1hbChyZXN1bHQsIDAsIHNpZ24oKSk7Cit9
CisKK0RlY2ltYWwgRGVjaW1hbDo6Y29tcGFyZVRvKGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QK
K3sKKyAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCgqdGhpcyAtIHJocyk7CisgICAgcmV0dXJuIHJl
c3VsdC5pc1plcm8oKQorICAgICAgICAgICAgPyB6ZXJvKFBsdXMpCisgICAgICAgICAgICA6IHJl
c3VsdC5pc0Zpbml0ZSgpCisgICAgICAgICAgICAgICAgICAgID8gcmVzdWx0CisgICAgICAgICAg
ICAgICAgICAgIDogcmVzdWx0LmlzTWludXMoKSA/IERlY2ltYWwoLTEpIDogRGVjaW1hbCgxKTsK
K30KKworLy8gQ29tcGFyZXMgdHdvIERlY2ltYWwgbnVtYmVyIGFzIGJpbmFyeSBkYXRhLiBUaGlz
IG1ldGhvZCBpcworLy8gdXNlZCBmb3IgZXF1YWxpdHkgb2YgaW5maW5pdHkgb3BlcmFuZHMgd2hp
Y2ggc3Vic3RyYWN0IG9wZXJhdGlvbgorLy8gcmV0dXJucyBub24temVyby4KK2Jvb2wgRGVjaW1h
bDo6ZmFzdEVxdWFscyhjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
ZGF0YS5tX3BhY2tlZEZpZWxkID09IHJocy5tX2RhdGEubV9wYWNrZWRGaWVsZAorICAgICAgICAm
JiBtX2RhdGEubV9jb2VmZmljaWVudCA9PSByaHMubV9kYXRhLm1fY29lZmZpY2llbnQ7Cit9CisK
Ky8vIFJvdW5kIHRvd2FyZCBuZWdhdGl2ZSBpbmZpbml0eS4KK0RlY2ltYWwgRGVjaW1hbDo6Zmxv
b3IoKSBjb25zdAoreworICAgIGlmIChpc1NwZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlz
OworCisgICAgaWYgKGV4cG9uZW50KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisg
ICAgdWludDY0X3QgcmVzdWx0ID0gbV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50
IG51bWJlck9mRGlnaXRzID0gY291bnREaWdpdHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVt
YmVyT2ZEcm9wRGlnaXRzID0gLWV4cG9uZW50KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwg
bnVtYmVyT2ZEcm9wRGlnaXRzKQorICAgICAgICByZXR1cm4gemVybyhQbHVzKTsKKworICAgIHJl
c3VsdCA9IHNjYWxlRG93bihyZXN1bHQsIG51bWJlck9mRHJvcERpZ2l0cyAtIDEpOworICAgIGlm
IChpc01pbnVzKCkgJiYgcmVzdWx0ICUgMTAgPiAwKQorICAgICAgICByZXN1bHQgKz0gMTA7Cisg
ICAgcmVzdWx0IC89IDEwOworICAgIHJldHVybiBEZWNpbWFsKHJlc3VsdCwgMCwgc2lnbigpKTsK
K30KKworRGVjaW1hbCBEZWNpbWFsOjpmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQorewor
ICAgIGludCBleHBvbmVudCA9IDA7CisgICAgU2lnbiBleHBvbmVudFNpZ24gPSBQbHVzOworICAg
IGludCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgaW50IG51bWJlck9mRGlnaXRzQWZ0ZXJEb3Qg
PSAwOworICAgIGludCBudW1iZXJPZkV4dHJhRGlnaXRzID0gMDsKKyAgICBTaWduIHNpZ24gPSBQ
bHVzOworCisgICAgZW51bSB7CisgICAgICAgIFN0YXRlRGlnaXQsCisgICAgICAgIFN0YXRlRG90
LAorICAgICAgICBTdGF0ZURvdERpZ2l0LAorICAgICAgICBTdGF0ZUUsCisgICAgICAgIFN0YXRl
RURpZ2l0LAorICAgICAgICBTdGF0ZUVTaWduLAorICAgICAgICBTdGF0ZVNpZ24sCisgICAgICAg
IFN0YXRlU3RhcnQsCisgICAgICAgIFN0YXRlWmVybywKKyAgICB9IHN0YXRlID0gU3RhdGVTdGFy
dDsKKworICAgICNkZWZpbmUgSGFuZGxlQ2hhcihjaDEsIG5leHQsIC4uLikgXAorICAgICAgICBp
ZiAoY2ggPT0gY2gxIHx8IGNoID09IGNoMSAtICdBJyArICdhJykgeyBcCisgICAgICAgICAgICBf
X1ZBX0FSR1NfXzsgXAorICAgICAgICAgICAgc3RhdGUgPSBuZXh0OyBcCisgICAgICAgICAgICBi
cmVhazsgXAorICAgICAgICB9CisKKyAgICAjZGVmaW5lIEV4cGVjdENoYXIoY2gxLCBuZXh0LCAu
Li4pIFwKKyAgICAgICAgSGFuZGxlQ2hhcihjaDEsIG5leHQsIF9fVkFfQVJHU19fKTsgXAorICAg
ICAgICByZXR1cm4gbmFuKCk7CisKKyAgICB1aW50NjRfdCBhY2N1bXVsYXRvciA9IDA7CisgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgc3RyLmxlbmd0aCgpOyArK2luZGV4KSB7
CisgICAgICAgIGNvbnN0IGludCBjaCA9IHN0cltpbmRleF07CisgICAgICAgIHN3aXRjaCAoc3Rh
dGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZURpZ2l0OgorICAgICAgICAgICAgaWYgKGNoID49ICcw
JyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBE
ZWNpbWFsOjpQcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0
czsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKj0gMTA7CisgICAgICAgICAgICAg
ICAgICAgIGFjY3VtdWxhdG9yICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRXh0cmFEaWdpdHM7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLicpIHsK
KyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRG90OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBFeHBlY3RDaGFyKCdFJywgU3RhdGVFKTsK
KworICAgICAgICBjYXNlIFN0YXRlRG90OgorICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBj
aCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBEZWNpbWFs
OjpQcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAg
ICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0c0FmdGVyRG90OworICAgICAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRvciAqPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0
b3IgKz0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YXRl
ID0gU3RhdGVEb3REaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICBjYXNlIFN0YXRlRG90RGlnaXQ6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAn
ICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IERl
Y2ltYWw6OlByZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRz
OworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRzQWZ0ZXJEb3Q7CisgICAgICAg
ICAgICAgICAgICAgIGFjY3VtdWxhdG9yICo9IDEwOworICAgICAgICAgICAgICAgICAgICBhY2N1
bXVsYXRvciArPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEV4cGVjdENoYXIoJ0UnLCBTdGF0
ZUUpOworCisgICAgICAgIGNhc2UgU3RhdGVFOgorICAgICAgICAgICAgaWYgKGNoID09ICcrJykg
eworICAgICAgICAgICAgICAgIGV4cG9uZW50U2lnbiA9IFBsdXM7CisgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZUVTaWduOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgZXhwb25l
bnRTaWduID0gTWludXM7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVTaWduOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2gg
Pj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gY2ggLSAn
MCc7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisg
ICAgICAgIGNhc2UgU3RhdGVFRGlnaXQ6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNo
IDw9ICc5JykgeworICAgICAgICAgICAgICAgIGV4cG9uZW50ICo9IDEwOworICAgICAgICAgICAg
ICAgIGV4cG9uZW50ICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIGlmIChleHBvbmVudCA+
IERlY2ltYWw6OkVtYXggKyBQcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
eHBvbmVudFNpZ24gPT0gTWludXMgPyB6ZXJvKFBsdXMpIDogaW5maW5pdHkoc2lnbik7CisgICAg
ICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNh
c2UgU3RhdGVFU2lnbjoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7
CisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBz
dGF0ZSA9IFN0YXRlRURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0ZVNpZ246
CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBT
dGF0ZVplcm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChjaCA+PSAnMScgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgYWNj
dW11bGF0b3IgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRpZ2l0cyA9IDE7
CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZURpZ2l0OworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAg
ICAgY2FzZSBTdGF0ZVN0YXJ0OgorICAgICAgICAgICAgaWYgKGNoID09ICcwJykgeworICAgICAg
ICAgICAgICAgIHN0YXRlID0gU3RhdGVaZXJvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPj0gJzEnICYmIGNoIDw9ICc5Jykgewor
ICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAg
bnVtYmVyT2ZEaWdpdHMgPSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVEaWdpdDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGNoID09ICctJykgeworICAgICAgICAgICAgICAgIHNpZ24gPSBNaW51czsKKyAgICAgICAgICAg
ICAgICBzdGF0ZSA9IFN0YXRlU2lnbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09ICcrJykgeworICAgICAgICAgICAgICAgIHNp
Z24gPSBQbHVzOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTaWduOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPT0gJy4n
KSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZURvdDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAg
ICAgIGNhc2UgU3RhdGVaZXJvOgorICAgICAgICAgICAgaWYgKGNoID09ICcwJykKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKGNoID49ICcxJyAmJiBjaCA8PSAnOScp
IHsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGNoIC0gJzAnOworICAgICAgICAgICAg
ICAgIG51bWJlck9mRGlnaXRzID0gMTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRGln
aXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChjaCA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRG90OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBFeHBlY3RD
aGFyKCdFJywgU3RhdGVFKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoc3RhdGUgPT0gU3RhdGVaZXJvKQorICAgICAgICByZXR1cm4gemVybyhz
aWduKTsKKworICAgIGlmIChzdGF0ZSA9PSBTdGF0ZURpZ2l0IHx8IHN0YXRlID09IFN0YXRlRURp
Z2l0IHx8IHN0YXRlID09IFN0YXRlRG90RGlnaXQpIHsKKyAgICAgICAgaW50IHJlc3VsdEV4cG9u
ZW50ID0gZXhwb25lbnQgKiAoZXhwb25lbnRTaWduID09IE1pbnVzID8gLTEgOiAxKSAtIG51bWJl
ck9mRGlnaXRzQWZ0ZXJEb3QgKyBudW1iZXJPZkV4dHJhRGlnaXRzOworICAgICAgICBjb25zdCBp
bnQgYmlhc2VkRXhwb25lbnQgPSByZXN1bHRFeHBvbmVudCArIEViaWFzOworICAgICAgICBpZiAo
Ymlhc2VkRXhwb25lbnQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHplcm8oUGx1cyk7CisKKyAg
ICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0gYmlhc2VkRXhwb25lbnQgLSBFbWF4ICsgMTsKKyAg
ICAgICAgaWYgKG92ZXJmbG93ID4gMCkgeworICAgICAgICAgICAgaWYgKG92ZXJmbG93ICsgbnVt
YmVyT2ZEaWdpdHMgLSBudW1iZXJPZkRpZ2l0c0FmdGVyRG90ID4gUHJlY2lzaW9uKQorICAgICAg
ICAgICAgICAgIHJldHVybiBpbmZpbml0eShzaWduKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9y
ID0gc2NhbGVVcChhY2N1bXVsYXRvciwgb3ZlcmZsb3cpOworICAgICAgICAgICAgcmVzdWx0RXhw
b25lbnQgLT0gb3ZlcmZsb3c7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gRGVjaW1hbChh
Y2N1bXVsYXRvciwgcmVzdWx0RXhwb25lbnQsIHNpZ24pOworICAgIH0KKworICAgIHJldHVybiBu
YW4oKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjppbmZpbml0eShjb25zdCBTaWduIHNpZ24pCit7
CisgICAgcmV0dXJuIERlY2ltYWwoRW5jb2RlZERhdGEoc2lnbiA9PSBNaW51cyA/IE5lZ2F0aXZl
SW5maW5pdHlQYXR0ZXJuIDogUG9zaXRpdmVJbmZpbml0eVBhdHRlcm4pKTsKK30KKworRGVjaW1h
bCBEZWNpbWFsOjpuYW4oKQoreworICAgIHJldHVybiBEZWNpbWFsKEVuY29kZWREYXRhKE5hTlBh
dHRlcm4pKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpyZW1haW5kZXIoY29uc3QgRGVjaW1hbCYg
cmhzKSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwgcXVvdGllbnQgPSAoKnRoaXMgLyByaHMp
LnJvdW5kKCk7CisgICAgcmV0dXJuIHF1b3RpZW50LmlzU3BlY2lhbCgpID8gcXVvdGllbnQgOiAq
dGhpcyAtIHF1b3RpZW50ICogcmhzOworfQorCitEZWNpbWFsIERlY2ltYWw6OnJvdW5kKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNTcGVjaWFsKCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAg
IGlmIChleHBvbmVudCgpID49IDApCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIHVpbnQ2
NF90IHJlc3VsdCA9IG1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIGNvbnN0IGludCBudW1iZXJP
ZkRpZ2l0cyA9IGNvdW50RGlnaXRzKHJlc3VsdCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRHJv
cERpZ2l0cyA9IC1leHBvbmVudCgpOworICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IG51bWJlck9m
RHJvcERpZ2l0cykKKyAgICAgICAgcmV0dXJuIHplcm8oUGx1cyk7CisKKyAgICByZXN1bHQgPSBz
Y2FsZURvd24ocmVzdWx0LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBpZiAocmVzdWx0
ICUgMTAgPj0gNSkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsKKyAg
ICByZXR1cm4gRGVjaW1hbChyZXN1bHQsIDAsIHNpZ24oKSk7Cit9CisKK1N0cmluZyBEZWNpbWFs
Ojp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChmb3JtYXRDbGFzcygpKSB7CisgICAg
Y2FzZSBDbGFzc0luZmluaXR5OgorICAgICAgICByZXR1cm4gc2lnbigpID8gIi1JbmZpbml0eSIg
OiAiSW5maW5pdHkiOworCisgICAgY2FzZSBDbGFzc05hTjoKKyAgICAgICAgcmV0dXJuIHNpZ24o
KSA/ICItTmFOIiA6ICJOYU4iOworCisgICAgY2FzZSBDbGFzc05vcm1hbDoKKyAgICBjYXNlIENs
YXNzWmVybzoKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICBpZiAoc2lnbigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgn
LScpOworCisgICAgaW50IG9yaWdpbmFsRXhwb25lbnQgPSBleHBvbmVudCgpOworCisgICAgY29u
c3QgaW50IG1heERpZ2l0cyA9IERCTF9ESUc7CisgICAgdWludDY0X3QgY29lZmZpY2llbnQgPSBt
X2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICBpbnQgbGFzdERpZ2l0ID0gMDsKKyAgICB3aGlsZSAo
Y291bnREaWdpdHMoY29lZmZpY2llbnQpID4gbWF4RGlnaXRzKSB7CisgICAgICAgIGxhc3REaWdp
dCA9IGNvZWZmaWNpZW50ICUgMTA7CisgICAgICAgIGNvZWZmaWNpZW50IC89IDEwOworICAgICAg
ICArK29yaWdpbmFsRXhwb25lbnQ7CisgICAgfQorCisgICAgaWYgKGxhc3REaWdpdCA+PSA1KQor
ICAgICAgICArK2NvZWZmaWNpZW50OworCisgICAgd2hpbGUgKG9yaWdpbmFsRXhwb25lbnQgPCAw
ICYmIGNvZWZmaWNpZW50ICYmICEoY29lZmZpY2llbnQgJSAxMCkpIHsKKyAgICAgICAgY29lZmZp
Y2llbnQgLz0gMTA7CisgICAgICAgICsrb3JpZ2luYWxFeHBvbmVudDsKKyAgICB9CisKKyAgICBj
b25zdCBTdHJpbmcgZGlnaXRzID0gU3RyaW5nOjpudW1iZXIoY29lZmZpY2llbnQpOworICAgIGlu
dCBjb2VmZmljaWVudExlbmd0aCA9IGludChkaWdpdHMubGVuZ3RoKCkpOworICAgIGNvbnN0IGlu
dCBhZGp1c3RlZEV4cG9uZW50ID0gb3JpZ2luYWxFeHBvbmVudCArIGNvZWZmaWNpZW50TGVuZ3Ro
IC0gMTsKKyAgICBpZiAob3JpZ2luYWxFeHBvbmVudCA8PSAwICYmIGFkanVzdGVkRXhwb25lbnQg
Pj0gLTYpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5hbEV4cG9uZW50KSB7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChkaWdpdHMpOworICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhZGp1c3RlZEV4cG9uZW50ID49IDApIHsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29lZmZpY2llbnRMZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRpZ2l0c1tpXSk7CisgICAgICAgICAg
ICAgICAgaWYgKGkgPT0gYWRqdXN0ZWRFeHBvbmVudCkKKyAgICAgICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBidWlsZGVyLmFwcGVuZCgiMC4i
KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGFkanVzdGVkRXhwb25lbnQgKyAxOyBpIDwgMDsgKytp
KQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJzAnKTsKKworICAgICAgICBidWlsZGVyLmFw
cGVuZChkaWdpdHMpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZGln
aXRzWzBdKTsKKyAgICAgICAgd2hpbGUgKGNvZWZmaWNpZW50TGVuZ3RoID49IDIgJiYgZGlnaXRz
W2NvZWZmaWNpZW50TGVuZ3RoIC0gMV0gPT0gJzAnKQorICAgICAgICAgICAgLS1jb2VmZmljaWVu
dExlbmd0aDsKKyAgICAgICAgaWYgKGNvZWZmaWNpZW50TGVuZ3RoID49IDIpIHsKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IGNvZWZmaWNpZW50TGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
ZGlnaXRzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhZGp1c3RlZEV4cG9uZW50KSB7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChhZGp1c3RlZEV4cG9uZW50IDwgMCA/ICJlIiA6
ICJlKyIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoYWRqdXN0
ZWRFeHBvbmVudCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6emVybyhTaWduIHNpZ24pCit7CisgICAgcmV0
dXJuIERlY2ltYWwoRW5jb2RlZERhdGEoc2lnbiA9PSBNaW51cyA/IE5lZ2F0aXZlWmVyb1BhdHRl
cm4gOiBQb3NpdGl2ZVplcm9QYXR0ZXJuKSk7Cit9CisKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRGVjaW1hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2ZGYyOWE3MzYxOTU5MzIxYWI2Njc4ODlmZTg2
NDU4ZTg3MzQyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
ZWNpbWFsLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBEZWNpbWFsX2gKKyNkZWZpbmUgRGVjaW1h
bF9oCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgZGVj
aW1hbCBiYXNlIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVyIHdpdGggMzIgYml0CisvLyAgdW5zaWdl
bmQgaW50ZWdlciBhbmQgNjQgYml0IHVuc2lnbmVkIGludGVnZXIuCisvLyAgbyAxIGJpdCBzaWdu
ICgwID0gcG9zaXRpdmUgbnVtYmVyLCAxID0gbmVnYXRpdmUgbnVtYmVyKQorLy8gIG8gMTEgYml0
IGJpYXNlZCBleHBvbmVudCwgMTAgYmFzZWQuCisvLyAgbyA2NCBiaXQgY29lZmZpY2llbnQuCisv
LworLy8gRXhwb25lbnQgYW5kIHNpZ24gYml0IGFyZSBlbmNvZGVkIGFzOgorLy8gNzY1NDMyMTAg
NzY1NDMyMTAKKy8vIFMwMDAwMDAwIDAwMDBNRUVFCisvLyAgUyA9IHNpZ24gKDEgYml0KSwgMCA9
IHBvc2l0aXZlLCAxID0gbmVnYXRpdmUKKy8vICBFID0gZXhwb25lbnQgKDExIGJpdCkKKy8vCisv
LyBGSVhNRTogT25jZSBhbGwgQysrIGNvbXBpbGVyIHN1cHBvcnQgZGVjaW1hbCB0eXBlLCB3ZSBz
aG91bGQgcmVwbGFjZSB0aGlzCisvLyBjbGFzcyB0byBjb21waWxlciBzdXBwb3J0ZWQgb25lLiBT
ZWUgYmVsb3cgVVJJIGZvciBjdXJyZW50IHN0YXR1cyBvZiBkZWNpbWFsCisvLyB0eXBlIGZvciBD
Kys6IC8vIGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJz
LzIwMDYvbjE5NzcuaHRtbAorY2xhc3MgRGVjaW1hbCB7CitwdWJsaWM6CisgICAgc3RhdGljIGlu
dCBjb25zdCBFbWF4ID0gMjA0NzsgLy8gbGFyZ2VzdCBleHBvbmVudCB2YWx1ZQorICAgIHN0YXRp
YyBpbnQgY29uc3QgRWJpYXMgPSAxMDIzOyAvLyBzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBv
bmVudAorICAgIHN0YXRpYyBpbnQgY29uc3QgUHJlY2lzaW9uID0gMTg7CisKKyAgICBlbnVtIEZv
cm1hdENsYXNzIHsKKyAgICAgICAgQ2xhc3NJbmZpbml0eSwKKyAgICAgICAgQ2xhc3NOb3JtYWws
CisgICAgICAgIENsYXNzTmFOLAorICAgICAgICBDbGFzc1plcm8sCisgICAgfTsKKworICAgIGVu
dW0gU2lnbiB7CisgICAgICAgIFBsdXMsCisgICAgICAgIE1pbnVzLAorICAgIH07CisKKyAgICBz
dHJ1Y3QgRW5jb2RlZERhdGEgeworICAgICAgICBleHBsaWNpdCBFbmNvZGVkRGF0YSh1aW50MzJf
dCk7CisgICAgICAgIEVuY29kZWREYXRhKHVpbnQ2NF90LCBpbnQsIFNpZ24pOworCisgICAgICAg
IHVpbnQ2NF90IGNvZWZmaWNpZW50KCkgY29uc3Q7CisgICAgICAgIGludCBjb3VudERpZ2l0cygp
IGNvbnN0OworICAgICAgICBpbnQgZXhwb25lbnQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc0Zp
bml0ZSgpIGNvbnN0OworICAgICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0OworICAgICAgICBi
b29sIGlzWmVybygpIGNvbnN0OworICAgICAgICBpbnQgcmF3RXhwb25lbnQoKSBjb25zdDsKKyAg
ICAgICAgU2lnbiBzaWduKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0U2lnbihTaWduKTsKKwor
ICAgICAgICB1aW50NjRfdCBtX2NvZWZmaWNpZW50OworICAgICAgICB1aW50MzJfdCBtX3BhY2tl
ZEZpZWxkOworICAgIH07CisKKyAgICBEZWNpbWFsKCk7CisgICAgRGVjaW1hbChpbnQzMl90KTsK
KyAgICBEZWNpbWFsKHVpbnQ2NF90LCBpbnQsIFNpZ24pOworICAgIERlY2ltYWwoY29uc3QgRGVj
aW1hbCYpOworICAgIGV4cGxpY2l0IERlY2ltYWwoY29uc3QgRW5jb2RlZERhdGEmKTsKKworICAg
IERlY2ltYWwmIG9wZXJhdG9yID0oY29uc3QgRGVjaW1hbCYpOworICAgIERlY2ltYWwmIG9wZXJh
dG9yICs9KGNvbnN0IERlY2ltYWwmKTsKKyAgICBEZWNpbWFsJiBvcGVyYXRvciAtPShjb25zdCBE
ZWNpbWFsJik7CisgICAgRGVjaW1hbCYgb3BlcmF0b3IgKj0oY29uc3QgRGVjaW1hbCYpOworICAg
IERlY2ltYWwmIG9wZXJhdG9yIC89KGNvbnN0IERlY2ltYWwmKTsKKworICAgIERlY2ltYWwgb3Bl
cmF0b3IgLSgpIGNvbnN0OworCisgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBEZWNpbWFsJikg
Y29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciAhPShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAg
Ym9vbCBvcGVyYXRvciA8KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9y
IDw9KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yID4oY29uc3QgRGVj
aW1hbCYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IgPj0oY29uc3QgRGVjaW1hbCYpIGNvbnN0
OworCisgICAgRGVjaW1hbCBvcGVyYXRvciArKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBE
ZWNpbWFsIG9wZXJhdG9yIC0oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIERlY2ltYWwgb3Bl
cmF0b3IgKihjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCBvcGVyYXRvciAvKGNv
bnN0IERlY2ltYWwmKSBjb25zdDsKKworICAgIGludCBleHBvbmVudCgpIGNvbnN0OworICAgIEZv
cm1hdENsYXNzIGZvcm1hdENsYXNzKCkgY29uc3Q7CisgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5pc0Zpbml0ZSgpOyB9CisgICAgYm9vbCBpc01pbnVzKCkgY29uc3Qg
eyByZXR1cm4gc2lnbigpID09IE1pbnVzOyB9CisgICAgYm9vbCBpc1BsdXMoKSBjb25zdCB7IHJl
dHVybiBzaWduKCkgPT0gUGx1czsgfQorICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmlzU3BlY2lhbCgpOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVy
biBtX2RhdGEuaXNaZXJvKCk7IH0KKyAgICBjb25zdCBFbmNvZGVkRGF0YSYgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIERlY2ltYWwgYWJzKCkgY29uc3Q7CisgICAgRGVj
aW1hbCBjZWlsaW5nKCkgY29uc3Q7CisgICAgRGVjaW1hbCBmbG9vcigpIGNvbnN0OworICAgIERl
Y2ltYWwgcmVtYWluZGVyKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIHJvdW5k
KCkgY29uc3Q7CisgICAgZG91YmxlIHRvRG91YmxlKCkgY29uc3Q7CisgICAgU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgRGVjaW1hbCBmcm9tU3RyaW5nKGNvbnN0IFN0cmlu
ZyYpOworICAgIHN0YXRpYyBEZWNpbWFsIGluZmluaXR5KFNpZ24pOworICAgIHN0YXRpYyBEZWNp
bWFsIG5hbigpOworICAgIHN0YXRpYyBEZWNpbWFsIHplcm8oU2lnbik7CisKK3ByaXZhdGU6Cisg
ICAgRGVjaW1hbChkb3VibGUpOworICAgIERlY2ltYWwgY29tcGFyZVRvKGNvbnN0IERlY2ltYWwm
KSBjb25zdDsKKyAgICBib29sIGZhc3RFcXVhbHMoY29uc3QgRGVjaW1hbCYpIGNvbnN0OworCisg
ICAgc3RhdGljIGlubGluZSBTaWduIGludmVydFNpZ24oU2lnbiBzaWduKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHNpZ24gPT0gTWludXMgPyBQbHVzIDogTWludXM7CisgICAgfQorCisgICAgU2ln
biBzaWduKCkgY29uc3Q7CisKKyAgICBFbmNvZGVkRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIFdl
YkNvcmUKKworI2VuZGlmIC8vIERlY2ltYWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
aW5kZXggNzg1NGVkZjBhOTlkNmNiZDgyMTU3NGNlNmY0MTU0YmMxMTBiMDM4NC4uZGM4NzU2ZWQ2
YTNlYjVmNzllMjM4YTBlYzU0YTk3ZjQyMTMwZDBmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCkBAIC05NSw2ICs5NSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ2xpcGJvYXJkQ2hy
b21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ29tcG9zaXRvckZha2VHcmFwaGlj
c0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0ZXN0cy9Db21wb3NpdG9yRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNELmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlY2ltYWxUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0RyYXdpbmdCdWZmZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9FdmVu
dExpc3RlbmVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9EZWNpbWFsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2lt
YWxUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjYxZWUxZjNhNTA5MThkZjBkZmUwNGNmMTcyZTIyM2M2
YjNmOTlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9E
ZWNpbWFsVGVzdC5jcHAKQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRGVjaW1hbC5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCis6OnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCg6OnN0ZDo6b3N0cmVh
bSYgb3MsIGNvbnN0IERlY2ltYWwmIGRlY2ltYWwpCit7CisgICAgRGVjaW1hbDo6RW5jb2RlZERh
dGEgZGF0YSA9IGRlY2ltYWwudmFsdWUoKTsKKyAgICByZXR1cm4gb3MgCisgICAgICAgIDw8ICJE
ZWNpbWFsKCIgPDwgU3RyaW5nOjpudW1iZXIoZGF0YS5jb2VmZmljaWVudCgpKS5hc2NpaSgpLmRh
dGEoKQorICAgICAgICA8PCAiLCAiIDw8IFN0cmluZzo6bnVtYmVyKGRhdGEuZXhwb25lbnQoKSku
YXNjaWkoKS5kYXRhKCkKKyAgICAgICAgPDwgIiwgIiA8PCAoZGF0YS5zaWduKCkgPT0gRGVjaW1h
bDo6TWludXMgPyAiTWludXMiIDogIlBsdXMiKQorICAgICAgICA8PCAiKT0iIDw8IGRlY2ltYWwu
dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKTsKK30KKworfSAvLyBXZWJDb3JlCisKK25hbWVzcGFj
ZSBEZWNpbWFsVGVzdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBTaW11bGF0
ZSBXZWJDb3JlL2h0bWwvU3RlcFJhbmdlCitjbGFzcyBEZWNpbWFsU3RlcFJhbmdlIHsKK3B1Ymxp
YzoKKyAgICBEZWNpbWFsIG1heGltdW07CisgICAgRGVjaW1hbCBtaW5pbXVtOworICAgIERlY2lt
YWwgc3RlcDsKKworICAgIERlY2ltYWxTdGVwUmFuZ2UoY29uc3QgRGVjaW1hbCYgbWluaW11bSwg
Y29uc3QgRGVjaW1hbCYgbWF4aW11bSwgY29uc3QgRGVjaW1hbCYgc3RlcCkKKyAgICAgICAgOiBt
YXhpbXVtKG1heGltdW0pCisgICAgICAgICwgbWluaW11bShtaW5pbXVtKQorICAgICAgICAsIHN0
ZXAoc3RlcCkKKyAgICB7CisgICAgfQorCisgICAgRGVjaW1hbCBjbGFtcFZhbHVlKERlY2ltYWwg
dmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCA9IG1pbmlt
dW0gKyAoKHZhbHVlIC0gbWluaW11bSkgLyBzdGVwKS5yb3VuZCgpICogc3RlcDsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdC5pc0Zpbml0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCA+IG1heGlt
dW0gPyByZXN1bHQgLSBzdGVwIDogcmVzdWx0OworICAgIH0KK307CisKK2NsYXNzIERlY2ltYWxU
ZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBE
ZWNpbWFsOjpTaWduIFNpZ247CisgICAgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU2lnbiBQbHVz
ID0gRGVjaW1hbDo6UGx1czsKKyAgICBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCBTaWduIE1pbnVz
ID0gRGVjaW1hbDo6TWludXM7CisKKyAgICBEZWNpbWFsIGVuY29kZSh1aW50NjRfdCBjb2VmZmlj
aWVudCwgaW50IGV4cG9uZW50LCBTaWduIHNpZ24pCisgICAgeworICAgICAgICByZXR1cm4gRGVj
aW1hbChjb2VmZmljaWVudCwgZXhwb25lbnQsIHNpZ24pOworICAgIH0KKworICAgIHByb3RlY3Rl
ZDogRGVjaW1hbCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIERlY2ltYWw6OmZyb21TdHJpbmcoc3RyaW5nKTsKKyAgICB9CisKKyAgICBwcm90
ZWN0ZWQ6IFN0cmluZyBzdGVwRG93bihjb25zdCBTdHJpbmcmIG1pbmltdW0sIGNvbnN0IFN0cmlu
ZyYgbWF4aW11bSwgY29uc3QgU3RyaW5nJiBzdGVwLCBjb25zdCBTdHJpbmcmIHZhbHVlU3RyaW5n
LCBpbnQgbnVtYmVyT2ZTdGVwVGltZXMpCisgICAgeworICAgICAgICBEZWNpbWFsU3RlcFJhbmdl
IHN0ZXBSYW5nZShmcm9tU3RyaW5nKG1pbmltdW0pLCBmcm9tU3RyaW5nKG1heGltdW0pLCBmcm9t
U3RyaW5nKHN0ZXApKTsKKyAgICAgICAgRGVjaW1hbCB2YWx1ZSA9IGZyb21TdHJpbmcodmFsdWVT
dHJpbmcpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mU3RlcFRpbWVzOyAr
K2kpIHsKKyAgICAgICAgICB2YWx1ZSAtPSBzdGVwUmFuZ2Uuc3RlcDsKKyAgICAgICAgICB2YWx1
ZSA9IHN0ZXBSYW5nZS5jbGFtcFZhbHVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdmFsdWUudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQ6IFN0cmluZyBzdGVw
VXAoY29uc3QgU3RyaW5nJiBtaW5pbXVtLCBjb25zdCBTdHJpbmcmIG1heGltdW0sIGNvbnN0IFN0
cmluZyYgc3RlcCwgY29uc3QgU3RyaW5nJiB2YWx1ZVN0cmluZywgaW50IG51bWJlck9mU3RlcFRp
bWVzKQorICAgIHsKKyAgICAgICAgRGVjaW1hbFN0ZXBSYW5nZSBzdGVwUmFuZ2UoZnJvbVN0cmlu
ZyhtaW5pbXVtKSwgZnJvbVN0cmluZyhtYXhpbXVtKSwgZnJvbVN0cmluZyhzdGVwKSk7CisgICAg
ICAgIERlY2ltYWwgdmFsdWUgPSBmcm9tU3RyaW5nKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlN0ZXBUaW1lczsgKytpKSB7CisgICAgICAgICAgdmFs
dWUgKz0gc3RlcFJhbmdlLnN0ZXA7CisgICAgICAgICAgdmFsdWUgPSBzdGVwUmFuZ2UuY2xhbXBW
YWx1ZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7
CisgICAgfQorfTsKKworVEVTVF9GKERlY2ltYWxUZXN0LCBBYnMpCit7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgwLCAwLCBQbHVzKSwgZW5jb2RlKDAsIDAsIFBsdXMpLmFicygpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDAsIDAsIFBsdXMpLCBlbmNvZGUoMCwgMCwgTWludXMpLmFicygpKTsKKwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMTAsIFBsdXMpLCBlbmNvZGUoMCwgMTAsIFBsdXMpLmFi
cygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDEwLCBQbHVzKSwgZW5jb2RlKDAsIDEwLCBN
aW51cykuYWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAsIFBsdXMpLCBlbmNv
ZGUoMCwgLTEwLCBQbHVzKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAsIFBs
dXMpLCBlbmNvZGUoMCwgLTEwLCBNaW51cykuYWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxLCAwLCBQbHVzKSwgZW5jb2RlKDEsIDAsIFBsdXMpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEsIDAsIFBsdXMpLCBlbmNvZGUoMSwgMCwgTWludXMpLmFicygpKTsKKworICAgIEVY
UEVDVF9FUShlbmNvZGUoMSwgMTAsIFBsdXMpLCBlbmNvZGUoMSwgMTAsIFBsdXMpLmFicygpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwLCBQbHVzKSwgZW5jb2RlKDEsIDEwLCBNaW51cyku
YWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAsIFBsdXMpLCBlbmNvZGUoMSwg
LTEwLCBQbHVzKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAsIFBsdXMpLCBl
bmNvZGUoMSwgLTEwLCBNaW51cykuYWJzKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIENl
aWxpbmcpCit7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoMSkuY2VpbGluZygp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDExLCAtMSwgUGx1cykuY2VpbGlu
ZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDEzLCAtMSwgUGx1cykuY2Vp
bGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE1LCAtMSwgUGx1cyku
Y2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE5LCAtMSwgUGx1
cykuY2VpbGluZygpKTsKKworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgRGVjaW1hbCgtMSku
Y2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIGVuY29kZSgxMSwgLTEsIE1p
bnVzKS5jZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgZW5jb2RlKDEzLCAt
MSwgTWludXMpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBlbmNvZGUo
MTUsIC0xLCBNaW51cykuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIGVu
Y29kZSgxOSwgLTEsIE1pbnVzKS5jZWlsaW5nKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3Qs
IEVuY29kZWREYXRhKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUGx1cyksIGVuY29k
ZSgwLCAwLCBQbHVzKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBNaW51cyksIGVuY29k
ZSgwLCAwLCBNaW51cykpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIE1pbnVzKSwgZW5jb2RlKDEsIDAsIE1pbnVzKSk7
CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBsdXMpLCBlbmNvZGUoMSwgMjAwMCwg
UGx1cykpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjp6ZXJvKFBsdXMpLCBlbmNvZGUoMSwgLTIw
MDAsIFBsdXMpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBGbG9vcikKK3sKKyAgICBFWFBF
Q1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbCgxKSwgZW5jb2RlKDExLCAtMSwgUGx1cykuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWwoMSksIGVuY29kZSgxMywgLTEsIFBsdXMpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShE
ZWNpbWFsKDEpLCBlbmNvZGUoMTUsIC0xLCBQbHVzKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEo
RGVjaW1hbCgxKSwgZW5jb2RlKDE5LCAtMSwgUGx1cykuZmxvb3IoKSk7CisKKyAgICBFWFBFQ1Rf
RVEoRGVjaW1hbCgtMSksIERlY2ltYWwoLTEpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNp
bWFsKC0yKSwgZW5jb2RlKDExLCAtMSwgTWludXMpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShE
ZWNpbWFsKC0yKSwgZW5jb2RlKDEzLCAtMSwgTWludXMpLmZsb29yKCkpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsKC0yKSwgZW5jb2RlKDE1LCAtMSwgTWludXMpLmZsb29yKCkpOworICAgIEVYUEVD
VF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDE5LCAtMSwgTWludXMpLmZsb29yKCkpOworfQorCitU
RVNUX0YoRGVjaW1hbFRlc3QsIEZyb21JbnQzMikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAs
IDAsIFBsdXMpLCBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1h
bCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBNaW51cyksIERlY2ltYWwoLTEpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgUGx1cyksIERlY2ltYWwoMTAwKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIE1pbnVzKSwgRGVjaW1hbCgtMTAwKSk7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSgweDdGRkZGRkZGLCAwLCBQbHVzKSwgRGVjaW1hbChJTlRfTUFYKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgweDgwMDAwMDAwdSwgMCwgTWludXMpLCBEZWNpbWFsKElOVF9N
SU4pKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBGcm9tU3RyaW5nKQoreworICAgIEVYUEVD
VF9FUShlbmNvZGUoMCwgMCwgUGx1cyksIGZyb21TdHJpbmcoIjAiKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgwLCAwLCBNaW51cyksIGZyb21TdHJpbmcoIi0wIikpOworICAgIEVYUEVDVF9FUShE
ZWNpbWFsKDEpLCBmcm9tU3RyaW5nKCIxIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwg
TWludXMpLCBmcm9tU3RyaW5nKCItMSIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZnJv
bVN0cmluZygiMDEiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAwLCBQbHVzKSwgZnJvbVN0
cmluZygiKzMiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAzLCBQbHVzKSwgZnJvbVN0cmlu
ZygiMEUzIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoNSwgLTEsIFBsdXMpLCBmcm9tU3RyaW5n
KCIuNSIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgUGx1cyksIGZyb21TdHJpbmco
IjEwMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgTWludXMpLCBmcm9tU3RyaW5n
KCItMTAwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCAtMiwgUGx1cyksIGZyb21TdHJp
bmcoIjEuMjMiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0yLCBNaW51cyksIGZyb21T
dHJpbmcoIi0xLjIzIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCA4LCBQbHVzKSwgZnJv
bVN0cmluZygiMS4yM0UxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgOCwgTWludXMp
LCBmcm9tU3RyaW5nKCItMS4yM0UxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgOCwg
UGx1cyksIGZyb21TdHJpbmcoIjEuMjNFKzEwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIz
LCA4LCBNaW51cyksIGZyb21TdHJpbmcoIi0xLjIzRSsxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDEyMywgLTEyLCBQbHVzKSwgZnJvbVN0cmluZygiMS4yM0UtMTAiKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSgxMjMsIC0xMiwgTWludXMpLCBmcm9tU3RyaW5nKCItMS4yM0UtMTAiKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSg1LCAtNywgUGx1cyksIGZyb21TdHJpbmcoIjAuMDAwMDAwNSIp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgLTMsIFBsdXMpLCBmcm9tU3RyaW5nKCIwLjEy
MyIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIC0yLCBQbHVzKSwgZnJvbVN0cmluZygiMDAu
MDAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAyLCBQbHVzKSwgZnJvbVN0cmluZygiMUUy
IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQbHVzKSwgZnJvbVN0cmluZygi
MUUyMDAwMCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6emVybyhQbHVzKSwgZnJvbVN0cmlu
ZygiMUUtMjAwMDAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwLCAxMDIzLCBQbHVzKSwg
ZnJvbVN0cmluZygiMUUxMDI2IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjp6ZXJvKFBsdXMp
LCBmcm9tU3RyaW5nKCIxRS0xMDI2IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0
eShQbHVzKSwgZnJvbVN0cmluZygiMTIzNDU2Nzg5MEUxMDM2IikpOworCisgICAgLy8gMl4xMDI0
CisgICAgY29uc3QgdWludDY0X3QgbGVhZGluZ0RpZ2l0c09mMlBvd2VyT2YxMDI0ID0gVUlOVDY0
X0MoMTc5NzY5MzEzNDg2MjMxNTkpOworICAgIEVYUEVDVF9FUShlbmNvZGUobGVhZGluZ0RpZ2l0
c09mMlBvd2VyT2YxMDI0LCAyOTIsIFBsdXMpLCBmcm9tU3RyaW5nKCIxNzk3NjkzMTM0ODYyMzE1
OTA3NzI5MzA1MTkwNzg5MDI0NzMzNjE3OTc2OTc4OTQyMzA2NTcyNzM0MzAwODExNTc3MzI2NzU4
MDU1MDA5NjMxMzI3MDg0NzczMjI0MDc1MzYwMjExMjAxMTM4Nzk4NzEzOTMzNTc2NTg3ODk3Njg4
MTQ0MTY2MjI0OTI4NDc0MzA2Mzk0NzQxMjQzNzc3Njc4OTM0MjQ4NjU0ODUyNzYzMDIyMTk2MDEy
NDYwOTQxMTk0NTMwODI5NTIwODUwMDU3Njg4MzgxNTA2ODIzNDI0NjI4ODE0NzM5MTMxMTA1NDA4
MjcyMzcxNjMzNTA1MTA2ODQ1ODYyOTgyMzk5NDcyNDU5Mzg0Nzk3MTYzMDQ4MzUzNTYzMjk2MjQy
MjQxMzcyMTYiKSk7Cit9CisKKy8vIFRoZXNlIHN0cmluZ3MgYXJlIGxvb2sgbGlrZSBwcm9wZXIg
bnVtYmVyLCBidXQgd2UgZG9uJ3QgYWNjZXB0IHRoZW0uCitURVNUX0YoRGVjaW1hbFRlc3QsIEZy
b21TdHJpbmdMaWtlTnVtYmVyKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJv
bVN0cmluZygiIDEyMyAiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3Ry
aW5nKCIxLDIzNCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmco
IklORiIpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBmcm9tU3RyaW5nVHJ1bmNhdGVkKQor
eworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygieCIpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjAuIikpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiMXgiKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjFFeCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6
bmFuKCksIGZyb21TdHJpbmcoIjFFMngiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigp
LCBmcm9tU3RyaW5nKCIxRSt4IikpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wQWRkKQor
eworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUGx1cyksIERlY2ltYWwoMCkgKyBEZWNpbWFs
KDApKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSArIERlY2ltYWwoLTEp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgtMSkgKyBEZWNpbWFsKDIpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgUGx1cyksIERlY2ltYWwoOTkpICsgRGVjaW1h
bCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIE1pbnVzKSwgRGVjaW1hbCgtNTAp
ICsgRGVjaW1hbCgtNTApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAwMDAwMDAs
IDM1LCBQbHVzKSwgZW5jb2RlKDEsIDUwLCBQbHVzKSArIERlY2ltYWwoMSkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMTAwMDAwMDAwMDAwMDAwMCwgMzUsIFBsdXMpLCBEZWNpbWFsKDEpICsgZW5j
b2RlKDEsIDUwLCBQbHVzKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMSwgMCwg
UGx1cyksIGVuY29kZSgxLCAxMCwgUGx1cykgKyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEwMDAwMDAwMDAxLCAwLCBQbHVzKSwgRGVjaW1hbCgxKSArIGVuY29kZSgxLCAxMCwg
UGx1cykpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUGx1cyksIGVuY29kZSgxLCAtMTAy
MiwgUGx1cykgKyBlbmNvZGUoMSwgMCwgUGx1cykpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwg
LTEwMjIsIFBsdXMpLCBlbmNvZGUoMSwgLTEwMjIsIFBsdXMpICsgZW5jb2RlKDEsIC0xMDIyLCBQ
bHVzKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BBZGRCaWdFKQoreworICAgIEVYUEVD
VF9FUShlbmNvZGUoMSwgMTAyMiwgUGx1cyksIGVuY29kZSgxLCAxMDIyLCBQbHVzKSArIGVuY29k
ZSgxLCAwLCBQbHVzKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAxMDIyLCBQbHVzKSwgZW5j
b2RlKDEsIDEwMjIsIFBsdXMpICsgZW5jb2RlKDEsIDEwMjIsIFBsdXMpKTsKKyAgICBFWFBFQ1Rf
RVEoRGVjaW1hbDo6aW5maW5pdHkoUGx1cyksIGVuY29kZSh1aW50NjRfdCgtMSksIDEwMjIsIFBs
dXMpICsgZW5jb2RlKDEsIDAsIFBsdXMpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcEFk
ZFNtYWxsRSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBsdXMpLCBlbmNvZGUoMSwg
LTEwMjIsIFBsdXMpICsgZW5jb2RlKDEsIDAsIFBsdXMpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDIsIC0xMDIyLCBQbHVzKSwgZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSArIGVuY29kZSgxLCAtMTAy
MiwgUGx1cykpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wQWRkU3BlY2lhbFZhbHVlcykK
K3sKKyAgICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBsdXMpKTsK
KyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTWludXMp
KTsKKyAgICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVj
aW1hbCBUZW4oMTApOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSArIEluZmlu
aXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSArIE1pbnVzSW5maW5pdHkpOworICAg
IEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VR
KE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKyBNaW51c0luZmluaXR5KTsKKworICAgIEVY
UEVDVF9FUShJbmZpbml0eSwgSW5maW5pdHkgKyBUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0
eSwgVGVuICsgSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0lu
ZmluaXR5ICsgVGVuKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgVGVuICsgTWludXNJ
bmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gKyBOYU4pOworICAgIEVYUEVDVF9F
UShOYU4sIE5hTiArIFRlbik7CisgICAgRVhQRUNUX0VRKE5hTiwgVGVuICsgTmFOKTsKK30KKwor
VEVTVF9GKERlY2ltYWxUZXN0LCBPcENvbXBhcmUpCit7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1h
bCgwKSA9PSBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApICE9IERlY2lt
YWwoMSkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgPCBEZWNpbWFsKDEpKTsKKyAgICBF
WFBFQ1RfVFJVRShEZWNpbWFsKDApIDw9IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9UUlVFKERl
Y2ltYWwoMCkgPiBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKSA+PSBE
ZWNpbWFsKDApKTsKKworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpID09IERlY2ltYWwoMikp
OworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpICE9IERlY2ltYWwoMSkpOworICAgIEVYUEVD
VF9GQUxTRShEZWNpbWFsKDEpIDwgRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2lt
YWwoMSkgPD0gRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPiBEZWNp
bWFsKDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxKSA+PSBEZWNpbWFsKDIpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBPcENvbXBhcmVTcGVjaWFsVmFsdWVzKQoreworICAgIEVY
UEVDVF9UUlVFKERlY2ltYWwoMSkgPCBEZWNpbWFsOjppbmZpbml0eShQbHVzKSk7CisgICAgRVhQ
RUNUX1RSVUUoRGVjaW1hbCgxKSA+IERlY2ltYWw6OmluZmluaXR5KE1pbnVzKSk7Cit9CisKK1RF
U1RfRihEZWNpbWFsVGVzdCwgT3BEaXYpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQ
bHVzKSwgRGVjaW1hbCgwKSAvIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwg
MCwgTWludXMpLCBEZWNpbWFsKDIpIC8gRGVjaW1hbCgtMSkpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoNSwgLTEsIE1pbnVzKSwgRGVjaW1hbCgtMSkgLyBEZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDk5LCAwLCBQbHVzKSwgRGVjaW1hbCg5OSkgLyBEZWNpbWFsKDEpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgtNTApIC8gRGVjaW1hbCgtNTApKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDMzMzMzMzMzMzMzMzMzMzMsIC0xNiwgUGx1cyksIERlY2ltYWwoMSkg
LyBEZWNpbWFsKDMpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMzQ1Njc4OTAxMjM0LCAtMSwg
UGx1cyksIGVuY29kZSgxMjM0NTY3ODkwMTIzNCwgMCwgUGx1cykgLyBEZWNpbWFsKDEwKSk7Cit9
CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BEaXZCaWdFKQoreworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMSwgMTAyMiwgUGx1cyksIGVuY29kZSgxLCAxMDIyLCBQbHVzKSAvIGVuY29kZSgxLCAwLCBQ
bHVzKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQbHVzKSwgZW5jb2RlKDEsIDEwMjIs
IFBsdXMpIC8gZW5jb2RlKDEsIDEwMjIsIFBsdXMpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0
LCBPcERpdlNtYWxsRSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSwg
ZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSAvIGVuY29kZSgxLCAwLCBQbHVzKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSgxLCAwLCBQbHVzKSwgZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSAvIGVuY29kZSgx
LCAtMTAyMiwgUGx1cykpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wRGl2U3BlY2lhbFZh
bHVlcykKK3sKKyAgICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBs
dXMpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHko
TWludXMpKTsKKyAgICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29u
c3QgRGVjaW1hbCBaZXJvKERlY2ltYWw6Onplcm8oUGx1cykpOworICAgIGNvbnN0IERlY2ltYWwg
TWludXNaZXJvKERlY2ltYWw6Onplcm8oTWludXMpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigx
MCk7CisgICAgY29uc3QgRGVjaW1hbCBNaW51c1RlbigtMTApOworCisgICAgRVhQRUNUX0VRKE5h
TiwgWmVybyAvIFplcm8pOworICAgIEVYUEVDVF9FUShOYU4sIFplcm8gLyBNaW51c1plcm8pOwor
ICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzWmVybyAvIFplcm8pOworICAgIEVYUEVDVF9FUShOYU4s
IE1pbnVzWmVybyAvIE1pbnVzWmVybyk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIFRlbiAv
IFplcm8pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gLyBNaW51c1plcm8pOwor
ICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c1RlbiAvIFplcm8pOworICAgIEVYUEVD
VF9FUShJbmZpbml0eSwgTWludXNUZW4gLyBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKElu
ZmluaXR5LCBJbmZpbml0eSAvIFplcm8pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBJ
bmZpbml0eSAvIE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVz
SW5maW5pdHkgLyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVzSW5maW5pdHkg
LyBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLyBJbmZpbml0eSk7
CisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLyBNaW51c0luZmluaXR5KTsKKyAgICBFWFBF
Q1RfRVEoTmFOLCBNaW51c0luZmluaXR5IC8gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4s
IE1pbnVzSW5maW5pdHkgLyBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShaZXJvLCBU
ZW4gLyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzWmVybywgVGVuIC8gTWludXNJbmZp
bml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzWmVybywgTWludXNUZW4gLyBJbmZpbml0eSk7Cisg
ICAgRVhQRUNUX0VRKFplcm8sIE1pbnVzVGVuIC8gTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBF
Q1RfRVEoTmFOLCBOYU4gLyBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAvIFRlbik7Cisg
ICAgRVhQRUNUX0VRKE5hTiwgVGVuIC8gTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBP
cE11bCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBsdXMpLCBEZWNpbWFsKDApICog
RGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAwLCBNaW51cyksIERlY2ltYWwo
MikgKiBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAwLCBNaW51cyksIERl
Y2ltYWwoLTEpICogRGVjaW1hbCgyKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSg5OSwgMCwgUGx1
cyksIERlY2ltYWwoOTkpICogRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyNTAw
LCAwLCBQbHVzKSwgRGVjaW1hbCgtNTApICogRGVjaW1hbCgtNTApKTsKK30KKworVEVTVF9GKERl
Y2ltYWxUZXN0LCBPcE11bEJpZ0UpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQ
bHVzKSwgZW5jb2RlKDEsIDEwMjIsIFBsdXMpICogZW5jb2RlKDEsIDAsIFBsdXMpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUGx1cyksIGVuY29kZSgxLCAxMDIyLCBQbHVzKSAq
IGVuY29kZSgxLCAxMDIyLCBQbHVzKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BNdWxT
bWFsbEUpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAyMiwgUGx1cyksIGVuY29kZSgx
LCAtMTAyMiwgUGx1cykgKiBlbmNvZGUoMSwgMCwgUGx1cykpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMCwgMCwgUGx1cyksIGVuY29kZSgxLCAtMTAyMiwgUGx1cykgKiBlbmNvZGUoMSwgLTEwMjIs
IFBsdXMpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcE11bFNwZWNpYWxWYWx1ZXMpCit7
CisgICAgY29uc3QgRGVjaW1hbCBJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShQbHVzKSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE1pbnVzKSk7
CisgICAgY29uc3QgRGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERlY2lt
YWwgVGVuKDEwKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzVGVuKC0xMCk7CisgICAgY29uc3Qg
RGVjaW1hbCBaZXJvKERlY2ltYWw6Onplcm8oUGx1cykpOworICAgIGNvbnN0IERlY2ltYWwgTWlu
dXNaZXJvKERlY2ltYWw6Onplcm8oTWludXMpKTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0eSwg
SW5maW5pdHkgKiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIEluZmlu
aXR5ICogTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVz
SW5maW5pdHkgKiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBNaW51c0luZmlu
aXR5ICogTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAqIFpl
cm8pOworICAgIEVYUEVDVF9FUShOYU4sIFplcm8gKiBNaW51c0luZmluaXR5KTsKKyAgICBFWFBF
Q1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICogWmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWlu
dXNJbmZpbml0eSAqIFplcm8pOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgKiBNaW51
c1plcm8pOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzWmVybyAqIE1pbnVzSW5maW5pdHkpOwor
ICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKiBNaW51c1plcm8pOworICAgIEVYUEVD
VF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKiBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKElu
ZmluaXR5LCBJbmZpbml0eSAqIFRlbik7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gKiBJ
bmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKiBU
ZW4pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gKiBNaW51c0luZmluaXR5KTsK
KworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBJbmZpbml0eSAqIE1pbnVzVGVuKTsKKyAg
ICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNUZW4gKiBJbmZpbml0eSk7CisgICAgRVhQ
RUNUX0VRKEluZmluaXR5LCBNaW51c0luZmluaXR5ICogTWludXNUZW4pOworICAgIEVYUEVDVF9F
UShJbmZpbml0eSwgTWludXNUZW4gKiBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShO
YU4sIE5hTiAqIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOICogVGVuKTsKKyAgICBFWFBF
Q1RfRVEoTmFOLCBUZW4gKiBOYU4pOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViKQor
eworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUGx1cyksIERlY2ltYWwoMCkgLSBEZWNpbWFs
KDApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDMsIDAsIFBsdXMpLCBEZWNpbWFsKDIpIC0gRGVj
aW1hbCgtMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMywgMCwgTWludXMpLCBEZWNpbWFsKC0x
KSAtIERlY2ltYWwoMikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoOTgsIDAsIFBsdXMpLCBEZWNp
bWFsKDk5KSAtIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUGx1cyks
IERlY2ltYWwoLTUwKSAtIERlY2ltYWwoLTUwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAw
MDAwMDAwMDAwMDAwLCAzNSwgUGx1cyksIGVuY29kZSgxLCA1MCwgUGx1cykgLSBEZWNpbWFsKDEp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAwMDAwMDAsIDM1LCBNaW51cyksIERl
Y2ltYWwoMSkgLSBlbmNvZGUoMSwgNTAsIFBsdXMpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0
LCBPcFN1YkJpZ0UpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQbHVzKSwgZW5j
b2RlKDEsIDEwMjIsIFBsdXMpIC0gZW5jb2RlKDEsIDAsIFBsdXMpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDAsIDAsIFBsdXMpLCBlbmNvZGUoMSwgMTAyMiwgUGx1cykgLSBlbmNvZGUoMSwgMTAy
MiwgUGx1cykpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViU21hbGxFKQoreworICAg
IEVYUEVDVF9FUShlbmNvZGUoVUlOVDY0X0MoMTAwMDAwMDAwMDAwMDAwMDApLCAtMTYsIE1pbnVz
KSwgZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSAtIGVuY29kZSgxLCAwLCBQbHVzKSk7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSgwLCAwLCBQbHVzKSwgZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSAtIGVuY29k
ZSgxLCAtMTAyMiwgUGx1cykpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViU3BlY2lh
bFZhbHVlcykKK3sKKyAgICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5
KFBsdXMpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5p
dHkoTWludXMpKTsKKyAgICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAg
Y29uc3QgRGVjaW1hbCBUZW4oMTApOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLSBJ
bmZpbml0eSk7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSAtIE1pbnVzSW5maW5p
dHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5IC0gSW5maW5p
dHkpOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgLSBNaW51c0luZmluaXR5KTsK
KworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgSW5maW5pdHkgLSBUZW4pOworICAgIEVYUEVDVF9F
UShNaW51c0luZmluaXR5LCBUZW4gLSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5m
aW5pdHksIE1pbnVzSW5maW5pdHkgLSBUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgVGVu
IC0gTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLSBOYU4pOworICAg
IEVYUEVDVF9FUShOYU4sIE5hTiAtIFRlbik7CisgICAgRVhQRUNUX0VRKE5hTiwgVGVuIC0gTmFO
KTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBQcm9wZXJ0aWVzKQoreworICAgIEVYUEVDVF9U
UlVFKERlY2ltYWwoMCkuaXNGaW5pdGUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMCku
aXNTcGVjaWFsKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFByb3BlcnRpZXNTcGVjaWFs
KQoreworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6OmluZmluaXR5KFBsdXMpLmlzU3BlY2lhbCgp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoUGx1cykuaXNGaW5pdGUoKSk7
CisKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjppbmZpbml0eShNaW51cykuaXNTcGVjaWFsKCkp
OworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjppbmZpbml0eShNaW51cykuaXNGaW5pdGUoKSk7
CisKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjpuYW4oKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKERlY2ltYWw6Om5hbigpLmlzRmluaXRlKCkpOworfQorCisvLyBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL251bWJlci9udW1iZXItc3RlcHVwLXN0ZXBkb3duLWZyb20tcmVuZGVyZXIK
K1RFU1RfRihEZWNpbWFsVGVzdCwgUmVhbFdvcmxkRXhhbXBsZU51bWJlclN0ZXBVcFN0ZXBEb3du
RnJvbVJlbmRlcmVyKQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEwIiksIHN0ZXBEb3duKCIw
IiwgIjEwMCIsICIxMCIsICIxOSIsIDEpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI5MCIpLCBz
dGVwVXAoIjAiLCAiOTkiLCAiMTAiLCAiODkiLCAxKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygi
MSIpLCBzdGVwVXAoIjAiLCAiMSIsICIwLjMzMzMzMzMzMzMzMzMzMzMzIiwgIjAiLCAzKSk7IC8v
IHN0ZXA9MS8zCisgICAgRVhQRUNUX0VRKFN0cmluZygiMC4wMSIpLCBzdGVwVXAoIjAiLCAiMC4w
MSIsICIwLjAwMzMzMzMzMzMzMzMzMzMzMzMiLCAiMCIsIDMpKTsgLy8gc3RlcD0xLzMwMAorICAg
IEVYUEVDVF9FUShTdHJpbmcoIjEiKSwgc3RlcFVwKCIwIiwgIjEiLCAiMC4wMDM5MjE1Njg2Mjc0
NTA5ODAiLCAiMCIsIDI1NSkpOyAvLyBzdGVwPTEvMjU1CisgICAgRVhQRUNUX0VRKFN0cmluZygi
MSIpLCBzdGVwVXAoIjAiLCAiMSIsICIwLjEiLCAiMCIsIDEwKSk7Cit9CisKK1RFU1RfRihEZWNp
bWFsVGVzdCwgUmVhbFdvcmxkRXhhbXBsZU51bWJlclN0ZXBVcFN0ZXBEb3duRnJvbVJlbmRlcmVy
Um91bmRpbmcpCit7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wMTUiKSwgc3RlcFVwKCIwIiwg
IjEwMCIsICIwLjAwNSIsICI1LjAwNSIsIDIpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjA2
IiksIHN0ZXBVcCgiMCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMSkpOworICAgIEVYUEVD
VF9FUShTdHJpbmcoIjUuMDY1IiksIHN0ZXBVcCgiMCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUi
LCAxMikpOworCisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wMTUiKSwgc3RlcFVwKCI0IiwgIjki
LCAiMC4wMDUiLCAiNS4wMDUiLCAyKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNiIpLCBz
dGVwVXAoIjQiLCAiOSIsICIwLjAwNSIsICI1LjAwNSIsIDExKSk7CisgICAgRVhQRUNUX0VRKFN0
cmluZygiNS4wNjUiKSwgc3RlcFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMikpOwor
fQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJlYWxXb3JsZEV4YW1wbGVSYW5nZVN0ZXBVcFN0ZXBE
b3duKQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIjFlKzM4IiksIHN0ZXBVcCgiMCIsICIxRTM4
IiwgIjEiLCAiMUUzOCIsIDkpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxZSszOCIpLCBzdGVw
RG93bigiMCIsICIxRTM4IiwgIjEiLCAiMUUzOCIsIDkpKTsKK30KKworVEVTVF9GKERlY2ltYWxU
ZXN0LCBSZW1haW5kZXIpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSg5LCAtMSwgTWludXMpLCBl
bmNvZGUoMjEsIC0xLCBQbHVzKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
KDEpLCBEZWNpbWFsKDEwKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwg
MCwgTWludXMpLCBEZWNpbWFsKC0xMCkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDIsIC0xLCBQbHVzKSwgZW5jb2RlKDEwMiwgLTEsIFBsdXMpLnJlbWFpbmRlcigxKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMSwgUGx1cyksIERlY2ltYWwoMTApLnJlbWFpbmRlcihl
bmNvZGUoMywgLTEsIFBsdXMpKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAtMSwgTWludXMp
LCBlbmNvZGUoMzYsIC0xLCBQbHVzKS5yZW1haW5kZXIoZW5jb2RlKDEzLCAtMSwgUGx1cykpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBSZW1haW5kZXJTcGVjaWFsVmFsdWVzKQoreworICAg
IEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQbHVzKSwgRGVjaW1hbDo6aW5maW5pdHkoUGx1
cykucmVtYWluZGVyKDEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWw6
Om5hbigpLnJlbWFpbmRlcigxKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUm91bmQpCit7
CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIChEZWNpbWFsKDkpIC8gRGVjaW1hbCgxMCkpLnJv
dW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDI1KSwgKERlY2ltYWwoNSkgLyBmcm9tU3Ry
aW5nKCIwLjIwMCIpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgzKSwgKERlY2lt
YWwoNSkgLyBEZWNpbWFsKDIpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwg
KERlY2ltYWwoMikgLyBEZWNpbWFsKDMpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1h
bCgzKSwgKERlY2ltYWwoMTApIC8gRGVjaW1hbCgzKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VR
KERlY2ltYWwoMyksIChEZWNpbWFsKDEpIC8gZnJvbVN0cmluZygiMC4zIikpLnJvdW5kKCkpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsKDEwKSwgKERlY2ltYWwoMSkgLyBmcm9tU3RyaW5nKCIwLjEi
KSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoNSksIChEZWNpbWFsKDEpIC8gZnJv
bVN0cmluZygiMC4yIikpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEwKSwgKGZy
b21TdHJpbmcoIjEwLjIiKSAvIDEpLnJvdW5kKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3Qs
IFJvdW5kU2VwY2lhbFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHko
UGx1cyksIERlY2ltYWw6OmluZmluaXR5KFBsdXMpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShE
ZWNpbWFsOjpuYW4oKSwgRGVjaW1hbDo6bmFuKCkucm91bmQoKSk7Cit9CisKK1RFU1RfRihEZWNp
bWFsVGVzdCwgVG9TdHJpbmdTcGVjaWFsKQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIkluZmlu
aXR5IiksIERlY2ltYWw6OmluZmluaXR5KFBsdXMpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9F
UShTdHJpbmcoIi1JbmZpbml0eSIpLCBEZWNpbWFsOjppbmZpbml0eShNaW51cykudG9TdHJpbmco
KSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiTmFOIiksIERlY2ltYWw6Om5hbigpLnRvU3RyaW5n
KCkpOworfQorCit9IC8vIERlY2ltYWxUZXN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143942</attachid>
            <date>2012-05-24 18:13:10 -0700</date>
            <delta_ts>2012-05-27 23:28:58 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-87360-20120525101309.patch</filename>
            <type>text/plain</type>
            <size>74002</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFhYWU0MWRiNTNjYjFkNzdkMzRmMWEy
N2UyMjNhZjAyZTgxZDJlMDkuLjhmMWVkNGU5OTBmY2QwZjQxNGM1NGI4NDE0YjkwM2MyNGVlOTg5
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDUtMjQgIFlvc2hpZnVtaSBJbm91ZSAgPHlv
c2luQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGxhdGZvcm1dIEludHJvZHVjZSBEZWNpbWFs
IGNsYXNzIGZvciBOdW1iZXIvUmFuZ2UgaW5wdXQgdHlwZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MzYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRlZCBVSU5UNjRfQyBmb3Ig
TVNWQyBhbmQgb3RoZXIgY29tcGlsZXJzLgorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDog
QWRkZWQgVUlOVDY0X0MuCisKIDIwMTItMDUtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIE9wdGltaXplIGl0ZXJhdGlvbiBvZiBlbXB0eSBoYXNoIHRhYmxlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGE1MzA5MDcyZmMwZmQzNzc4ZGY2NjQyMzNkOTdjYTJiZWU0NmU0ZTQuLmM0
NGZhM2FiODVjMjhkMTVhM2MyZTFiNGFlODcwY2ZmNTc2NjM5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MiBAQAorMjAxMi0wNS0yNCAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtQbGF0Zm9ybV0gSW50cm9kdWNlIERlY2ltYWwgY2xhc3MgZm9yIE51
bWJlci9SYW5nZSBpbnB1dCB0eXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODczNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZGVkIG5ldyBjbGFzcyBEZWNpbWFsIGZvciBkZWNp
bWFsIGFyaXRobWF0aWMgaW4gdHdvCisgICAgICAgIGZpbGVzOiBwbGF0Zm9ybS9EZWNpbWFsLmNw
cCBhbmQgRGVjaW1hbC5oIHdpdGggdW5pdCB0ZXN0LgorCisgICAgICAgIFRlc3Q6IFdlYktpdC9j
aHJvbWl1bS90ZXN0cy9EZWNpbWFsVGVzdC5jcHAKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHBsYXRmb3JtL0RlY2ltYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGVjaW1hbFByaXZhdGUpOgorICAgICAgICAoU3BlY2lhbFZhbHVlSGFuZGxl
cik6CisgICAgICAgIChVSW50MTI4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRl
OjpVSW50MTI4OjpoaWdoKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50
MTI4Ojpsb3cpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omlz
WmVybyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6Y291bnREaWdpdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6Om11bHRpcGx5SGlnaCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6cG93ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbFByaXZhdGU6OnNjYWxlRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0
ZTo6c2NhbGVVcCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6U3BlY2lhbFZh
bHVlSGFuZGxlcjo6U3BlY2lhbFZhbHVlSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNp
bWFsUHJpdmF0ZTo6U3BlY2lhbFZhbHVlSGFuZGxlcjo6aGFuZGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjp2YWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6VUludDEyOCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6b3BlcmF0b3IgLz0pOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Om11bHRpcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpFbmNvZGVkRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Y29lZmZpY2llbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWw6OkVuY29kZWREYXRhOjppc0Zpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
OjpFbmNvZGVkRGF0YTo6aXNTcGVjaWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVu
Y29kZWREYXRhOjppc1plcm8pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERh
dGE6OnJhd0V4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRh
OjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpzZXRTaWdu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkRlY2ltYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6b3BlcmF0b3IgPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVy
YXRvciArPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciAtPSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciAqPSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpvcGVyYXRvciAvPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRv
ciAtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yICspOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgKik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
OjpvcGVyYXRvciAvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsOjpvcGVyYXRvciA8KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJh
dG9yIDw9KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yID4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgPj0pOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6ZXhwb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6Zm9ybWF0Q2xhc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjphYnMpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6Y2VpbGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjpjb21wYXJlVG8pOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6ZmFzdEVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpmbG9vcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlY2ltYWw6OmluZmluaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om5hbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpyZW1haW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGVjaW1hbDo6cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6dG9TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6emVybyk6CisgICAgICAgICogcGxhdGZvcm0vRGVj
aW1hbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGVjaW1hbCk6Cisg
ICAgICAgIChFbmNvZGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc0Zpbml0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc01pbnVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWw6OmlzUGx1cyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc1NwZWNp
YWwpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmludmVydFNp
Z24pOgorCiAyMDEyLTA1LTI0ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBFbGVtZW50cyBpbiBTaGFkb3cgRE9NIGFyZSBub3QgcmVzaXphYmxlLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5ZTY2YzliZjRhMjEyMWVlMGMxYjc2MTg3YzQ3
MWZiOTBlYTgzNjRmLi4wYWE0N2ViM2M5MzA5ZjJkZTllNDlmOGJiY2U5YzAzZjY4OTUxZGRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA1LTI0ICBZ
b3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3Jt
XSBJbnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3IgTnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkZWQgdW5pdCB0ZXN0IGZvciBEZWNpbWFsIGNsYXNzLgorCisgICAgICAgICogV2ViS2l0Lmd5
cGk6CisgICAgICAgICogdGVzdHMvRGVjaW1hbFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPDwpOiBPdXRwdXQgRGVjaW1hbCBmb3IgdW5pdCB0ZXN0IGRlYnVnZ2lu
ZworICAgICAgICAoRGVjaW1hbFRlc3QpOgorICAgICAgICAoRGVjaW1hbFN0ZXBSYW5nZSk6Cisg
ICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFN0ZXBSYW5nZTo6RGVjaW1hbFN0ZXBSYW5nZSk6
CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFN0ZXBSYW5nZTo6Y2xhbXBWYWx1ZSk6Cisg
ICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRlc3Q6OmVuY29kZSk6CisgICAgICAgIChEZWNp
bWFsVGVzdDo6RGVjaW1hbFRlc3Q6OmZyb21TdHJpbmcpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6
OkRlY2ltYWxUZXN0OjpzdGVwRG93bik6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRl
c3Q6OnN0ZXBVcCk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6VEVTVF9GKToKKwogMjAxMi0wNS0y
MyAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIGFkZCBiYWNrIHRo
ZSBhYmlsaXR5IHRvIGRpc2FibGUgZmxleGJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TWF0aEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCmluZGV4IDk1NmZjOTRj
YzBkNDNkMDkyYzBkMGZjZGI3ZWY2ODgyNzU3MzI5NTguLjE1NGM4ODcyNTdmNDdiZTc5NDkyYjgz
Y2Y4NTU1ZTVmNzYwM2RjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKQEAgLTMwMiw2ICszMDIsMTQgQEAg
dXNpbmcgc3RkOjp3dGZfaXNuYW47CiAjZGVmaW5lIGlzbmFuKHgpIHd0Zl9pc25hbih4KQogI2Vu
ZGlmCiAKKyNpZm5kZWYgVUlOVDY0X0MKKyNpZiBDT01QSUxFUihNU1ZDKQorI2RlZmluZSBVSU5U
NjRfQyhjKSBjICMjIHVpNjQKKyNlbHNlCisjZGVmaW5lIFVJTlQ2NF9DKGMpIGMgIyMgdWxsCisj
ZW5kaWYKKyNlbmRpZgorCiAKIC8vIGRlY29tcG9zZSAnbnVtYmVyJyB0byBpdHMgc2lnbiwgZXhw
b25lbnQsIGFuZCBtYW50aXNzYSBjb21wb25lbnRzLgogLy8gVGhlIHJlc3VsdCBpcyBpbnRlcnBy
ZXRlZCBhczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNDRjYWNlMTdjYjVlZGUwYTJjMzkyMTVj
YmJmZDQyODJlOTI4ZDMxNS4uYTViMWQ3ZjFjNDMzOGQ3ODExYzBiM2EyYWExZDI2NTc1MzYzZTY5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTExMDYsNiArMTEwNiw3IEBAIFNFVChXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAKICAgICBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAKKyAgICBw
bGF0Zm9ybS9EZWNpbWFsLmNwcAogICAgIHBsYXRmb3JtL0RyYWdEYXRhLmNwcAogICAgIHBsYXRm
b3JtL0RyYWdJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9FdmVudFRyYWNlci5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDc3Y2JlMmE2ODYyZGQ4YzIwMmQ0ODgxYzI2MTE1YTY3
Y2I3MmEzNzkuLmQyNzY0MGMzMjg5OGZkYjI0MzBkODk3NzQ2ZmRjYTUzY2Y5YzQyMDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzExNCw2ICszMTE0LDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNp
bWFsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdEYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKaW5kZXggMDg4ZTc1ZmQxZjhmYzhjMDIyM2FlN2FmNDYwYTk2ZGRhNGMyMTAwYi4u
ZjlhN2IzNzc4YWExZmJkM2QyNzRiYzg2MmI1ZmRiZTg1MTVmYmI3OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC0xMDgyLDYgKzEwODIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlw
ZS5jcHAgXAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBcCiAgICAgcGxhdGZv
cm0vRGF0ZUNvbXBvbmVudHMuY3BwIFwKKyAgICBwbGF0Zm9ybS9EZWNpbWFsLmNwcCBcCiAgICAg
cGxhdGZvcm0vRHJhZ0RhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIFwKICAg
ICBwbGF0Zm9ybS9FdmVudFRyYWNlci5jcHAgXApAQCAtMjE5Nyw2ICsyMTk4LDcgQEAgSEVBREVS
UyArPSBcCiAgICAgcGxhdGZvcm0vQ29udGV4dE1lbnUuaCBcCiAgICAgcGxhdGZvcm0vQ3Jvc3NU
aHJlYWRDb3BpZXIuaCBcCiAgICAgcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaCBcCisgICAgcGxh
dGZvcm0vRGVjaW1hbC5oIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5oIFwKICAgICBwbGF0Zm9y
bS9EcmFnSW1hZ2UuaCBcCiAgICAgcGxhdGZvcm0vRXZlbnRUcmFjZXIuaCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggZmMyMjcwZmM1ZjAyY2FjYzRlNGI4NzA4ZjJhYzgxMWM5MzQ3ZmNkOS4uZWNkYmFh
NDM5NzU2ODAzMGU2ODE5N2I4N2ViMDliODMxYzhjMjAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MjcxLDYgKzI3MSw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5Lmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL0N1cnNvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9EYXRlQ29tcG9uZW50cy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9EZWNpbWFsLmgnCiAg
ICAgICAgICAgICAncGxhdGZvcm0vRHJhZ0RhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
RHJhZ0ltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0V2ZW50VHJhY2VyLmgnLApAQCAt
MzE0NCw2ICszMTQ1LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGll
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9DdXJzb3IuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0RlY2lt
YWwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFnRGF0YS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0V2ZW50
TG9vcC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggMDMyMDY1MTRlMDhlOTBhZWQ4OTBiZWIyYWI2NDA3YmQ4MGM4MDJiNC4uYzA4ZTg1NzY2
OTU0YWQwOGE1MGNiOTBlYWI1MWI2ZDVhN2NiMzY3MiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI3Nzc4LDYgKzI3Nzc4LDE0IEBACiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERl
Y2ltYWwuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxEZWNpbWFsLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERyYWdEYXRhLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggZjUzYjA2ZDYwNTJlNTdmMWRlMmMzODJhMTVhZmU3ZTI1NTExMzhlNi4uZDgzMWQ4
ZDRmM2JmZmNiMTcwZDUwZTVmYjVjNjllNWI3Y2ZmNWFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE5Myw2ICsxMTkzLDgg
QEAKIAkJNDUwQ0VCRjAxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUUxNTA3
M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovOyB9OwogCQk0NTBDRUJGMTE1
MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExh
YmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk0NUJBQzJCMDEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVCQUMyQUYxMzYwQkJBQjAw
NURBMjU4IC8qIEljb25VUkwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk0NUZFQTVDRjE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRDE1NkRE
RThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgKi87IH07CisJCTQ1RkVBNUQwMTU2RERFOEMwMDY1
NDEwMSAvKiBEZWNpbWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NUZFQTVDRTE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ2MTRBMUZFMEIyM0E4RDYw
MDQ0NkUxQyAvKiBjb3B5Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDYxNEExRkQwQjIzQThENjAwNDQ2RTFDIC8qIGNvcHlDdXJzb3Iu
cG5nICovOyB9OwogCQk0NjcwMEVEMDEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY3MDBF
Q0UxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLzsgfTsKIAkJNDY3MDBF
RDExMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjcwMEVDRjEyN0I5NkNCMDBGNUQ1RDYgLyog
RmlsZVdyaXRlclN5bmMuaCAqLzsgfTsKQEAgLTgxODksNiArODE5MSw4IEBACiAJCTQ1MENFQkVF
MTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NTBDRUJFRjE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYWJlbGFibGVFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1
OCAvKiBJY29uVVJMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb25VUkwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAx
IC8qIERlY2ltYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVj
aW1hbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ1RkVBNUNFMTU2RERFOEMw
MDY1NDEwMSAvKiBEZWNpbWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERl
Y2ltYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDYxNEExRkQwQjIzQThENjAw
NDQ2RTFDIC8qIGNvcHlDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gY29weUN1cnNvci5wbmc7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2NzAwRUNFMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxl
V3JpdGVyU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWxl
V3JpdGVyU3luYy5jcHA7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlclN5bmMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjcwMEVDRjEyN0I5NkNCMDBGNUQ1
RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RmlsZVdyaXRlclN5bmMuaDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyU3lu
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAzMTMsNiArMjAzMTcsOCBAQAog
CQkJCUY1ODc4Njg0MDJERTNCODYwMUVBNDEyMiAvKiBDdXJzb3IuaCAqLywKIAkJCQlBNTczMkIw
ODEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwICovLAogCQkJCUE1NzMyQjA5
MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oICovLAorCQkJCTQ1RkVBNUNEMTU2
RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAqLywKKwkJCQk0NUZFQTVDRTE1NkRERThDMDA2
NTQxMDEgLyogRGVjaW1hbC5oICovLAogCQkJCUE3OTU0NjQyMEI1QzRDQjQwMDdCNDM4RiAvKiBE
cmFnRGF0YS5jcHAgKi8sCiAJCQkJQTdCNkU2OUQwQjI5MUE5NjAwRDA1MjlGIC8qIERyYWdEYXRh
LmggKi8sCiAJCQkJQTdDRkIzQ0YwQjdFRDEwQTAwNzBDMzJEIC8qIERyYWdJbWFnZS5jcHAgKi8s
CkBAIC0yMjA2OCw2ICsyMjA3NCw3IEBACiAJCQkJRjU1QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8q
IERhdGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREI4MTI1MUYxMkQwMDNF
RjI2OSAvKiBEYXRlVGltZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQkEx
MjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1lTG9jYWxJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ1RkVBNUQwMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEMyMjhBMTExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBh
cnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VDQ0ZDM0IxNDE5NzNENTAwMkEwQUMxIC8qIERl
Y29kZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2MkE0NTExMDExNDVB
RTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAt
MjU1NjAsNiArMjU1NjcsNyBAQAogCQkJCUY1NUIzREI1MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRl
SW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREI3MTI1MUYxMkQwMDNFRjI2
OSAvKiBEYXRlVGltZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RCOTEy
NTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0NUZFQTVDRjE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEMyMjhBMjExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVu
dFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1MDEwMTE0NUFFMDBERkYzRUQg
LyogRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUEzRDU4
RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGMwNTQyMjlm
MDQ2YWI1ZjM1ZjllYTU0NTNkNDNjZGVmYTE5ZjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5jcHAKQEAgLTAsMCArMSwxMTA5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRlY2ltYWwuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4K
KyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgRGVjaW1hbFByaXZhdGUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitz
dGF0aWMgY29uc3QgdWludDY0X3QgTWF4Q29lZmZpY2llbnQgPSBVSU5UNjRfQygweDE2MzQ1Nzg1
RDg5RkZGRik7IC8vIDk5OTk5OTk5OTk5OTk5OTk5OTsgLy8gMTggOSdzCisKK3N0YXRpYyBjb25z
dCB1aW50MzJfdCBFeHBvbmVudE1hc2sgPSAweDdGRjsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90
IE5lZ2F0aXZlSW5maW5pdHlQYXR0ZXJuID0gdWludDMyX3QoMHg4MDAwMDdGRik7CitzdGF0aWMg
Y29uc3QgdWludDMyX3QgUG9zaXRpdmVJbmZpbml0eVBhdHRlcm4gPSB1aW50MzJfdCgweDAwMDAw
N0ZGKTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IE5hTlBhdHRlcm4gPSB1aW50MzJfdCgweDAw
MDAwRkZGKTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IE5lZ2F0aXZlWmVyb1BhdHRlcm4gPSB1
aW50MzJfdCgweDgwMDAwM0ZGKTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBQb3NpdGl2ZVplcm9Q
YXR0ZXJuID0gdWludDMyX3QoMHgwMDAwMDNGRik7CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBO
ZWdhdGl2ZVBhdHRlcm4gPSB1aW50MzJfdCgweDgwMDAwMDAwKTsKK3N0YXRpYyBjb25zdCB1aW50
MzJfdCBQb3NpdGl2ZVBhdHRlcm4gPSAwOworCisvLyBUaGlzIGNsYXNzIGhhbmRsZXMgRGVjaW1h
bCBzcGVjaWFsIHZhbHVlcy4KK2NsYXNzIFNwZWNpYWxWYWx1ZUhhbmRsZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNwZWNpYWxWYWx1ZUhhbmRsZXIpOworcHVibGljOgorICAgIGVudW0g
SGFuZGxlUmVzdWx0IHsKKyAgICAgICAgQm90aEZpbml0ZSwKKyAgICAgICAgQm90aGluZmluaXR5
LAorICAgICAgICBFaXRoZXJOYU4sCisgICAgICAgIExoc0lzaW5maW5pdHksCisgICAgICAgIFJo
c0lzaW5maW5pdHksCisgICAgfTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIoY29uc3QgRGVj
aW1hbCYsIGNvbnN0IERlY2ltYWwmKTsKKyAgICBIYW5kbGVSZXN1bHQgaGFuZGxlKCk7CisgICAg
RGVjaW1hbCB2YWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGVudW0gUmVzdWx0IHsKKyAg
ICAgICAgUmVzdWx0SXNMaHMsCisgICAgICAgIFJlc3VsdElzUmhzLAorICAgICAgICBSZXN1bHRJ
c1Vua25vd24sCisgICAgfTsKKworICAgIGNvbnN0IERlY2ltYWwmIG1fbGhzOworICAgIFJlc3Vs
dCBtX3Jlc3VsdDsKKyAgICBjb25zdCBEZWNpbWFsJiBtX3JoczsKK307CisKKy8vIFRoaXMgY2xh
c3MgaXMgdXNlZCBmb3IgMTI4IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFyaXRobWV0aWMuCitjbGFz
cyBVSW50MTI4IHsKK3B1YmxpYzoKKyAgICBVSW50MTI4KHVpbnQ2NF90LCB1aW50NjRfdCk7CisK
KyAgICBVSW50MTI4JiBvcGVyYXRvciAvPSh1aW50MzJfdCk7CisKKyAgICB1aW50NjRfdCBoaWdo
KCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CisgICAgdWludDY0X3QgbG93KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb3c7IH0KKworICAgIHN0YXRpYyBVSW50MTI4IG11bHRpcGx5KHVpbnQ2NF90LCB1
aW50NjRfdCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiAh
bV9sb3cgJiYgIW1faGlnaDsgfQorCisgICAgdWludDY0X3QgbV9oaWdoOworICAgIHVpbnQ2NF90
IG1fbG93OworfTsKKworc3RhdGljIGludCBjb3VudERpZ2l0cyh1aW50NjRfdCB4KQoreworICAg
IGludCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgdWludDY0X3QgcG93ZXJPZjEwID0gMTsKKyAg
ICB3aGlsZSAoeCA+PSBwb3dlck9mMTApIHsKKyAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAg
ICAgICAgaWYgKHBvd2VyT2YxMCA+PSB1aW50NjRfdCgtMSkgLyAxMCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBwb3dlck9mMTAgKj0gMTA7CisgICAgfQorICAgIHJldHVybiBudW1iZXJP
ZkRpZ2l0czsKK30KKworc3RhdGljIHVpbnQ2NF90IG11bHRpcGx5SGlnaCh1aW50NjRfdCB1LCB1
aW50NjRfdCB2KQoreworICAgIGNvbnN0IGludCBuID0gNjQ7CisgICAgY29uc3QgaW50IG4yID0g
biAvIDI7CisgICAgY29uc3QgdWludDY0X3QgbWFzayA9ICh1aW50NjRfdCgxKSA8PCBuMikgLSAx
OworICAgIHVpbnQ2NF90IHUwID0gdSAmIG1hc2s7CisgICAgdWludDY0X3QgdTEgPSB1ID4+IG4y
OworICAgIHVpbnQ2NF90IHYwID0gdiAmIG1hc2s7CisgICAgdWludDY0X3QgdjEgPSB2ID4+IG4y
OworICAgIHVpbnQ2NF90IHcwID0gdTAgKiB2MDsKKyAgICB1aW50NjRfdCB0dCA9IHUxICogdjAg
KyAodzAgPj4gbjIpOworICAgIHVpbnQ2NF90IHcxID0gdHQgJiBtYXNrOworICAgIHVpbnQ2NF90
IHcyID0gdHQgPj4gbjI7CisgICAgdzEgPSB1MCAqIHYxICsgdzE7CisgICAgcmV0dXJuIHUxICog
djEgKyB3MiArICh3MSA+PiBuMik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMg
VCBwb3dlcihUIGNvbnN0IHgsIHVuc2lnbmVkIG4pCit7CisgICAgVCB5ID0gMTsKKyAgICBUIHog
PSB4OworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKG4gJiAxKQorICAgICAgICAgICAgeSA9
IHkgKiB6OworCisgICAgICAgIG4gPj49IDE7CisgICAgICAgIGlmICghbikKKyAgICAgICAgICAg
IHJldHVybiB5OworCisgICAgICAgIHogPSB6ICogejsKKyAgICB9Cit9CisKK3N0YXRpYyB1aW50
NjRfdCBzY2FsZURvd24odWludDY0X3QgeCwgaW50IG4pCit7CisgICAgQVNTRVJUKG4gPj0gMCk7
CisgICAgd2hpbGUgKG4gPiAwICYmIHgpIHsKKyAgICAgICAgeCAvPSAxMDsKKyAgICAgICAgLS1u
OworICAgIH0KKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIHVpbnQ2NF90IHNjYWxlVXAodWlu
dDY0X3QgeCwgaW50IG4pCit7CisgICAgQVNTRVJUKG4gPj0gMCk7CisgICAgQVNTRVJUKG4gPCBE
ZWNpbWFsOjpQcmVjaXNpb24pOworICAgIHVpbnQ2NF90IHJlc3VsdCA9IHggKiBwb3dlcih1aW50
NjRfdCgxMCksIG4pOworICAgIEFTU0VSVChyZXN1bHQgPj0geCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworU3BlY2lhbFZhbHVlSGFuZGxlcjo6U3BlY2lhbFZhbHVlSGFuZGxlcihjb25zdCBE
ZWNpbWFsJiBsaHMsIGNvbnN0IERlY2ltYWwmIHJocykKKyAgICA6IG1fbGhzKGxocyksIG1fcmVz
dWx0KFJlc3VsdElzVW5rbm93biksIG1fcmhzKHJocykKK3sKK30KKworU3BlY2lhbFZhbHVlSGFu
ZGxlcjo6SGFuZGxlUmVzdWx0IFNwZWNpYWxWYWx1ZUhhbmRsZXI6OmhhbmRsZSgpCit7CisgICAg
aWYgKG1fbGhzLmlzRmluaXRlKCkgJiYgbV9yaHMuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJu
IEJvdGhGaW5pdGU7CisKKyAgICBjb25zdCBEZWNpbWFsOjpGb3JtYXRDbGFzcyBsaHNDbGFzcyA9
IG1fbGhzLmZvcm1hdENsYXNzKCk7CisgICAgY29uc3QgRGVjaW1hbDo6Rm9ybWF0Q2xhc3Mgcmhz
Q2xhc3MgPSBtX3Jocy5mb3JtYXRDbGFzcygpOworICAgIGlmIChsaHNDbGFzcyA9PSBEZWNpbWFs
OjpDbGFzc05hTikgeworICAgICAgICBtX3Jlc3VsdCA9IFJlc3VsdElzTGhzOworICAgICAgICBy
ZXR1cm4gRWl0aGVyTmFOOworICAgICB9CisKKyAgICBpZiAocmhzQ2xhc3MgPT0gRGVjaW1hbDo6
Q2xhc3NOYU4pIHsKKyAgICAgICAgbV9yZXN1bHQgPSBSZXN1bHRJc1JoczsKKyAgICAgICAgcmV0
dXJuIEVpdGhlck5hTjsKKyAgICAgfQorCisgICAgaWYgKGxoc0NsYXNzID09IERlY2ltYWw6OkNs
YXNzSW5maW5pdHkpCisgICAgICAgIHJldHVybiByaHNDbGFzcyA9PSBEZWNpbWFsOjpDbGFzc0lu
ZmluaXR5ID8gQm90aGluZmluaXR5IDogTGhzSXNpbmZpbml0eTsKKworICAgIGlmIChyaHNDbGFz
cyA9PSBEZWNpbWFsOjpDbGFzc0luZmluaXR5KQorICAgICAgICByZXR1cm4gUmhzSXNpbmZpbml0
eTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBCb3RoRmluaXRlOwor
fQorCitEZWNpbWFsIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKG1fcmVzdWx0KSB7CisgICAgY2FzZSBSZXN1bHRJc0xoczoKKyAgICAgICAgcmV0dXJu
IG1fbGhzOworICAgIGNhc2UgUmVzdWx0SXNSaHM6CisgICAgICAgIHJldHVybiBtX3JoczsKKyAg
ICBjYXNlIFJlc3VsdElzVW5rbm93bjoKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG1fbGhzOworICAgIH0KK30KKworVUludDEyODo6
VUludDEyOCh1aW50NjRfdCBsb3csIHVpbnQ2NF90IGhpZ2gpCisgICAgOiBtX2hpZ2goaGlnaCks
IG1fbG93KGxvdykKK3sKK30KKworVUludDEyOCYgVUludDEyODo6b3BlcmF0b3IgLz0oY29uc3Qg
dWludDMyX3QgZGl2aXNvcikKK3sKKyAgICBpZiAoIW1faGlnaCkgeworICAgICAgICBtX2xvdyAv
PSBkaXZpc29yOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdWludDMyX3Qg
ZGl2aWRlbmRbNF07CisgICAgZGl2aWRlbmRbMF0gPSB1aW50MzJfdChtX2xvdyAmIHVpbnQzMl90
KC0xKSk7CisgICAgZGl2aWRlbmRbMV0gPSB1aW50MzJfdChtX2xvdyA+PiAzMik7CisgICAgZGl2
aWRlbmRbMl0gPSB1aW50MzJfdChtX2hpZ2ggJiB1aW50MzJfdCgtMSkpOworICAgIGRpdmlkZW5k
WzNdID0gdWludDMyX3QobV9oaWdoID4+IDMyKTsKKworICAgIHVpbnQzMl90IHF1b3RpZW50WzRd
OworICAgIHVpbnQzMl90IHJlbWFpbmRlciA9IDA7CisgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0g
MDsgLS1pKSB7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IHdvcmsgPSAodWludDY0X3QocmVtYWlu
ZGVyKSA8PCAzMikgfCBkaXZpZGVuZFtpXTsKKyAgICAgICAgcmVtYWluZGVyID0gdWludDMyX3Qo
d29yayAlIGRpdmlzb3IpOworICAgICAgICBxdW90aWVudFtpXSA9IHVpbnQzMl90KHdvcmsgLyBk
aXZpc29yKTsKKyAgICB9CisgICAgbV9sb3cgPSBxdW90aWVudFswXSB8ICh1aW50NjRfdChxdW90
aWVudFsxXSkgPDwgMzIpOworICAgIG1faGlnaCA9IHF1b3RpZW50WzJdIHwgKHVpbnQ2NF90KHF1
b3RpZW50WzNdKSA8PCAzMik7CisgICAgcmV0dXJuICp0aGlzOworfQorCitVSW50MTI4IFVJbnQx
Mjg6Om11bHRpcGx5KHVpbnQ2NF90IHUsIHVpbnQ2NF90IHYpCit7CisgICAgcmV0dXJuIFVJbnQx
MjgodSAqIHYsIG11bHRpcGx5SGlnaCh1LCB2KSk7Cit9CisKK30gLy8gRGVjaW1hbFByaXZhdGUK
KwordXNpbmcgbmFtZXNwYWNlIERlY2ltYWxQcml2YXRlOworCitEZWNpbWFsOjpFbmNvZGVkRGF0
YTo6RW5jb2RlZERhdGEodWludDMyX3QgcGF0dGVybikKKyAgICA6IG1fY29lZmZpY2llbnQoMCkK
KyAgICAsIG1fcGFja2VkRmllbGQocGF0dGVybikKK3sKKyAgICBBU1NFUlQoKHBhdHRlcm4gJiBQ
b3NpdGl2ZVplcm9QYXR0ZXJuKSA9PSBQb3NpdGl2ZVplcm9QYXR0ZXJuKTsKK30KKworRGVjaW1h
bDo6RW5jb2RlZERhdGE6OkVuY29kZWREYXRhKHVpbnQ2NF90IGNvZWZmaWNpZW50LCBjb25zdCBp
bnQgZXhwb25lbnQsIGNvbnN0IFNpZ24gc2lnbikKK3sKKyAgICBpbnQgcmF3RXhwb25lbnQgPSBl
eHBvbmVudCArIEViaWFzOworICAgIGlmICh1bnNpZ25lZChyYXdFeHBvbmVudCkgPCB1bnNpZ25l
ZChFbWF4KSkgeworICAgICAgICB3aGlsZSAoY29lZmZpY2llbnQgPj0gTWF4Q29lZmZpY2llbnQp
IHsKKyAgICAgICAgICAgIGNvZWZmaWNpZW50IC89IDEwOworICAgICAgICAgICAgKytyYXdFeHBv
bmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyYXdFeHBvbmVudCA+PSBFbWF4KSB7
CisgICAgICAgIG1fY29lZmZpY2llbnQgPSAwOworICAgICAgICBtX3BhY2tlZEZpZWxkID0gc2ln
biA9PSBNaW51cyA/IE5lZ2F0aXZlSW5maW5pdHlQYXR0ZXJuIDogUG9zaXRpdmVJbmZpbml0eVBh
dHRlcm47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmF3RXhwb25lbnQgPCAw
KSB7CisgICAgICAgIG1fY29lZmZpY2llbnQgPSAwOworICAgICAgICBtX3BhY2tlZEZpZWxkID0g
c2lnbiA9PSBNaW51cyA/IE5lZ2F0aXZlWmVyb1BhdHRlcm4gOiBQb3NpdGl2ZVplcm9QYXR0ZXJu
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb2VmZmljaWVudCA9IGNvZWZmaWNp
ZW50OworICAgIG1fcGFja2VkRmllbGQgPSByYXdFeHBvbmVudCB8IChzaWduID09IE1pbnVzID8g
TmVnYXRpdmVQYXR0ZXJuIDogUG9zaXRpdmVQYXR0ZXJuKTsKK30KKwordWludDY0X3QgRGVjaW1h
bDo6RW5jb2RlZERhdGE6OmNvZWZmaWNpZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb2Vm
ZmljaWVudDsKK30KKworaW50IERlY2ltYWw6OkVuY29kZWREYXRhOjpleHBvbmVudCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHJhd0V4cG9uZW50KCkgLSBEZWNpbWFsOjpFYmlhczsKK30KKworYm9v
bCBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNGaW5pdGUoKSBjb25zdAoreworICAgIHJldHVybiAh
aXNTcGVjaWFsKCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzU3BlY2lhbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHJhd0V4cG9uZW50KCkgPT0gRGVjaW1hbDo6RW1heDsKK30K
KworYm9vbCBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNaZXJvKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaXNGaW5pdGUoKSAmJiAhbV9jb2VmZmljaWVudDsKK30KKworaW50IERlY2ltYWw6OkVuY29k
ZWREYXRhOjpyYXdFeHBvbmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGludChtX3BhY2tlZEZp
ZWxkICYgRXhwb25lbnRNYXNrKTsKK30KKworRGVjaW1hbDo6U2lnbiBEZWNpbWFsOjpFbmNvZGVk
RGF0YTo6c2lnbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGludChtX3BhY2tlZEZpZWxkKSA8IDAg
PyBNaW51cyA6IFBsdXM7Cit9CisKK3ZvaWQgRGVjaW1hbDo6RW5jb2RlZERhdGE6OnNldFNpZ24o
Y29uc3QgU2lnbiBzaWduKQoreworICAgIGlmIChzaWduID09IE1pbnVzKQorICAgICAgICBtX3Bh
Y2tlZEZpZWxkIHw9IHVpbnQzMl90KDEpIDw8IDMxOworICAgIGVsc2UKKyAgICAgICAgbV9wYWNr
ZWRGaWVsZCAmPSB+KHVpbnQzMl90KDEpIDw8IDMxKTsKK30KKworRGVjaW1hbDo6RGVjaW1hbCgp
CisgICAgOiBtX2RhdGEoMCwgMCwgUGx1cykKK3sKK30KKworRGVjaW1hbDo6RGVjaW1hbChpbnQz
Ml90IGkzMikKKyAgICA6IG1fZGF0YShpMzIgPCAwID8gdWludDMyX3QoLWkzMikgOiBpMzIsIDAs
IGkzMiA8IDAgPyBNaW51cyA6IFBsdXMpCit7Cit9CisKK0RlY2ltYWw6OkRlY2ltYWwodWludDY0
X3QgY29lZmZpY2llbnQsIGludCBleHBvbmVudCwgU2lnbiBzaWduKQorICAgIDogbV9kYXRhKGNv
ZWZmaWNpZW50LCBleHBvbmVudCwgc2lnbikKK3sKK30KKworRGVjaW1hbDo6RGVjaW1hbChjb25z
dCBFbmNvZGVkRGF0YSYgZGF0YSkKKyAgICA6IG1fZGF0YShkYXRhKQoreworfQorCitEZWNpbWFs
OjpEZWNpbWFsKGNvbnN0IERlY2ltYWwmIG90aGVyKQorICAgIDogbV9kYXRhKG90aGVyLm1fZGF0
YSkKK3sKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IgPShjb25zdCBEZWNpbWFsJiBv
dGhlcikKK3sKKyAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvciArPShjb25zdCBEZWNpbWFsJiBvdGhlcikK
K3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgKyBvdGhlcikubV9kYXRhOworICAgIHJldHVybiAqdGhp
czsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IgLT0oY29uc3QgRGVjaW1hbCYgb3Ro
ZXIpCit7CisgICAgbV9kYXRhID0gKCp0aGlzIC0gb3RoZXIpLm1fZGF0YTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK0RlY2ltYWwmIERlY2ltYWw6Om9wZXJhdG9yICo9KGNvbnN0IERlY2ltYWwm
IG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyAqIG90aGVyKS5tX2RhdGE7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvciAvPShjb25zdCBEZWNp
bWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgLyBvdGhlcikubV9kYXRhOworICAg
IHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRvciAtKCkgY29uc3QK
K3sKKyAgICBEZWNpbWFsIHJlc3VsdCgqdGhpcyk7CisgICAgcmVzdWx0Lm1fZGF0YS5zZXRTaWdu
KGludmVydFNpZ24obV9kYXRhLnNpZ24oKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Rl
Y2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IgKyhjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7Cisg
ICAgY29uc3QgRGVjaW1hbCYgbGhzID0gKnRoaXM7CisgICAgY29uc3QgU2lnbiBsaHNTaWduID0g
bGhzLnNpZ24oKTsKKyAgICBjb25zdCBTaWduIHJoc1NpZ24gPSByaHMuc2lnbigpOworCisgICAg
U3BlY2lhbFZhbHVlSGFuZGxlciBoYW5kbGVyKGxocywgcmhzKTsKKyAgICBzd2l0Y2ggKGhhbmRs
ZXIuaGFuZGxlKCkpIHsKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhGaW5pdGU6
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoaW5m
aW5pdHk6CisgICAgICAgIHJldHVybiBsaHNTaWduID09IHJoc1NpZ24gPyBsaHMgOiBuYW4oKTsK
KworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6RWl0aGVyTmFOOgorICAgICAgICByZXR1
cm4gaGFuZGxlci52YWx1ZSgpOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpMaHNJ
c2luZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVI
YW5kbGVyOjpSaHNJc2luZmluaXR5OgorICAgICAgICByZXR1cm4gcmhzOworICAgIH0KKworICAg
IEFTU0VSVChsaHMuaXNGaW5pdGUoKSk7CisgICAgQVNTRVJUKHJocy5pc0Zpbml0ZSgpKTsKKwor
ICAgIGNvbnN0IGludCBsaHNFeHBvbmVudCA9IGxocy5leHBvbmVudCgpOworICAgIGNvbnN0IGlu
dCByaHNFeHBvbmVudCA9IHJocy5leHBvbmVudCgpOworICAgIGludCByZXN1bHRFeHBvbmVudCA9
IG1pbihsaHNFeHBvbmVudCwgcmhzRXhwb25lbnQpOworICAgIHVpbnQ2NF90IGxoc0NvZWZmaWNp
ZW50ID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIHVpbnQ2NF90IHJoc0NvZWZmaWNp
ZW50ID0gcmhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworCisgICAgLy8gTWFrZSBjb2VmZmljaWVu
dCBhbGlnbmVkLgorICAgIGlmIChsaHNFeHBvbmVudCA+IHJoc0V4cG9uZW50KSB7CisgICAgICAg
IGNvbnN0IGludCBudW1iZXJPZkxIU0RpZ2l0cyA9IGNvdW50RGlnaXRzKGxoc0NvZWZmaWNpZW50
KTsKKyAgICAgICAgaWYgKG51bWJlck9mTEhTRGlnaXRzKSB7CisgICAgICAgICAgICBjb25zdCBp
bnQgbGhzU2hpZnRBbW91bnQgPSBsaHNFeHBvbmVudCAtIHJoc0V4cG9uZW50OworICAgICAgICAg
ICAgY29uc3QgaW50IG92ZXJmbG93ID0gbnVtYmVyT2ZMSFNEaWdpdHMgKyBsaHNTaGlmdEFtb3Vu
dCAtIFByZWNpc2lvbjsKKyAgICAgICAgICAgIGlmIChvdmVyZmxvdyA8PSAwKQorICAgICAgICAg
ICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVVcChsaHNDb2VmZmljaWVudCwgbGhzU2hpZnRB
bW91bnQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGhzQ29lZmZpY2ll
bnQgPSBzY2FsZVVwKGxoc0NvZWZmaWNpZW50LCBsaHNTaGlmdEFtb3VudCAtIG92ZXJmbG93KTsK
KyAgICAgICAgICAgICAgICByaHNDb2VmZmljaWVudCA9IHNjYWxlRG93bihyaHNDb2VmZmljaWVu
dCwgb3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIHJlc3VsdEV4cG9uZW50ICs9IG92ZXJmbG93
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9IGlmIChsaHNFeHBvbmVudCA8IHJo
c0V4cG9uZW50KSB7CisgICAgICAgIGNvbnN0IGludCBudW1iZXJPZlJIU0RpZ2l0cyA9IGNvdW50
RGlnaXRzKHJoc0NvZWZmaWNpZW50KTsKKyAgICAgICAgaWYgKG51bWJlck9mUkhTRGlnaXRzKSB7
CisgICAgICAgICAgICBjb25zdCBpbnQgcmhzU2hpZnRBbW91bnQgPSByaHNFeHBvbmVudCAtIGxo
c0V4cG9uZW50OworICAgICAgICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0gbnVtYmVyT2ZSSFNE
aWdpdHMgKyByaHNTaGlmdEFtb3VudCAtIFByZWNpc2lvbjsKKyAgICAgICAgICAgIGlmIChvdmVy
ZmxvdyA8PSAwKQorICAgICAgICAgICAgICAgIHJoc0NvZWZmaWNpZW50ID0gc2NhbGVVcChyaHND
b2VmZmljaWVudCwgcmhzU2hpZnRBbW91bnQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKHJoc0NvZWZmaWNpZW50LCByaHNTaGlm
dEFtb3VudCAtIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBsaHNDb2VmZmljaWVudCA9IHNj
YWxlRG93bihsaHNDb2VmZmljaWVudCwgb3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIHJlc3Vs
dEV4cG9uZW50ICs9IG92ZXJmbG93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgdWludDY0X3QgY29uc3QgcmVzdWx0ID0gbGhzU2lnbiA9PSByaHNTaWduID8gbGhzQ29l
ZmZpY2llbnQgKyByaHNDb2VmZmljaWVudCA6IGxoc0NvZWZmaWNpZW50IC0gcmhzQ29lZmZpY2ll
bnQ7CisgICAgcmV0dXJuIGxoc1NpZ24gPT0gTWludXMgJiYgcmhzU2lnbiA9PSBQbHVzICYmICFy
ZXN1bHQKKyAgICAgICAgICAgID8gRGVjaW1hbCgwLCByZXN1bHRFeHBvbmVudCwgUGx1cykKKyAg
ICAgICAgICAgIDogaW50NjRfdChyZXN1bHQpID49IDAKKyAgICAgICAgICAgICAgICA/IERlY2lt
YWwocmVzdWx0LCByZXN1bHRFeHBvbmVudCwgbGhzU2lnbikKKyAgICAgICAgICAgICAgICA6IERl
Y2ltYWwoLWludDY0X3QocmVzdWx0KSwgcmVzdWx0RXhwb25lbnQsIGludmVydFNpZ24obGhzU2ln
bikpOworfQorCitEZWNpbWFsIERlY2ltYWw6Om9wZXJhdG9yIC0oY29uc3QgRGVjaW1hbCYgcmhz
KSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9ICp0aGlzOworICAgIGNvbnN0IFNp
Z24gbGhzU2lnbiA9IGxocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByaHNTaWduID0gcmhzLnNp
Z24oKTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAg
c3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVy
OjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFu
ZGxlcjo6Qm90aGluZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzU2lnbiA9PSByaHNTaWduID8g
bmFuKCkgOiBsaHM7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoK
KyAgICAgICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVl
SGFuZGxlcjo6TGhzSXNpbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxoczsKKworICAgIGNhc2Ug
U3BlY2lhbFZhbHVlSGFuZGxlcjo6UmhzSXNpbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGluZmlu
aXR5KGludmVydFNpZ24ocmhzU2lnbikpOworICAgIH0KKworICAgIEFTU0VSVChsaHMuaXNGaW5p
dGUoKSk7CisgICAgQVNTRVJUKHJocy5pc0Zpbml0ZSgpKTsKKworICAgIHVpbnQ2NF90IGxoc0Nv
ZWZmaWNpZW50ID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIHVpbnQ2NF90IHJoc0Nv
ZWZmaWNpZW50ID0gcmhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworCisgICAgY29uc3QgaW50IGxo
c0V4cG9uZW50ID0gbGhzLmV4cG9uZW50KCk7CisgICAgY29uc3QgaW50IHJoc0V4cG9uZW50ID0g
cmhzLmV4cG9uZW50KCk7CisgICAgaW50IHJlc3VsdEV4cG9uZW50ID0gbWluKGxoc0V4cG9uZW50
LCByaHNFeHBvbmVudCk7CisKKyAgICAvLyBNYWtlIGNvZWZmaWNpZW50IGFsaWduZWQuCisgICAg
aWYgKGxoc0V4cG9uZW50ID4gcmhzRXhwb25lbnQpIHsKKyAgICAgICAgY29uc3QgaW50IG51bWJl
ck9mTEhTRGlnaXRzID0gY291bnREaWdpdHMobGhzQ29lZmZpY2llbnQpOworICAgICAgICBpZiAo
bnVtYmVyT2ZMSFNEaWdpdHMpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBsaHNTaGlmdEFtb3Vu
dCA9IGxoc0V4cG9uZW50IC0gcmhzRXhwb25lbnQ7CisgICAgICAgICAgICBjb25zdCBpbnQgb3Zl
cmZsb3cgPSBudW1iZXJPZkxIU0RpZ2l0cyArIGxoc1NoaWZ0QW1vdW50IC0gUHJlY2lzaW9uOwor
ICAgICAgICAgICAgaWYgKG92ZXJmbG93IDw9IDApCisgICAgICAgICAgICAgICAgbGhzQ29lZmZp
Y2llbnQgPSBzY2FsZVVwKGxoc0NvZWZmaWNpZW50LCBsaHNTaGlmdEFtb3VudCk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsaHNDb2VmZmljaWVudCA9IHNjYWxlVXAobGhz
Q29lZmZpY2llbnQsIGxoc1NoaWZ0QW1vdW50IC0gb3ZlcmZsb3cpOworICAgICAgICAgICAgICAg
IHJoc0NvZWZmaWNpZW50ID0gc2NhbGVEb3duKHJoc0NvZWZmaWNpZW50LCBvdmVyZmxvdyk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0RXhwb25lbnQgKz0gb3ZlcmZsb3c7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgIH0gaWYgKGxoc0V4cG9uZW50IDwgcmhzRXhwb25lbnQpIHsKKyAg
ICAgICAgY29uc3QgaW50IG51bWJlck9mUkhTRGlnaXRzID0gY291bnREaWdpdHMocmhzQ29lZmZp
Y2llbnQpOworICAgICAgICBpZiAobnVtYmVyT2ZSSFNEaWdpdHMpIHsKKyAgICAgICAgICAgIGNv
bnN0IGludCByaHNTaGlmdEFtb3VudCA9IHJoc0V4cG9uZW50IC0gbGhzRXhwb25lbnQ7CisgICAg
ICAgICAgICBjb25zdCBpbnQgb3ZlcmZsb3cgPSBudW1iZXJPZlJIU0RpZ2l0cyArIHJoc1NoaWZ0
QW1vdW50IC0gUHJlY2lzaW9uOworICAgICAgICAgICAgaWYgKG92ZXJmbG93IDw9IDApCisgICAg
ICAgICAgICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKHJoc0NvZWZmaWNpZW50LCByaHNT
aGlmdEFtb3VudCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByaHNDb2Vm
ZmljaWVudCA9IHNjYWxlVXAocmhzQ29lZmZpY2llbnQsIHJoc1NoaWZ0QW1vdW50IC0gb3ZlcmZs
b3cpOworICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVEb3duKGxoc0NvZWZm
aWNpZW50LCBvdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgcmVzdWx0RXhwb25lbnQgKz0gb3Zl
cmZsb3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1aW50NjRfdCBy
ZXN1bHQgPSBsaHNTaWduID09IHJoc1NpZ24gPyBsaHNDb2VmZmljaWVudCAtIHJoc0NvZWZmaWNp
ZW50IDogbGhzQ29lZmZpY2llbnQgKyByaHNDb2VmZmljaWVudDsKKyAgICByZXR1cm4gbGhzU2ln
biA9PSBNaW51cyAmJiByaHNTaWduID09IE1pbnVzICYmICFyZXN1bHQKKyAgICAgICAgICAgID8g
RGVjaW1hbCgwLCByZXN1bHRFeHBvbmVudCwgUGx1cykKKyAgICAgICAgICAgIDogaW50NjRfdChy
ZXN1bHQpID49IDAKKyAgICAgICAgICAgICAgICA/IERlY2ltYWwocmVzdWx0LCByZXN1bHRFeHBv
bmVudCwgbGhzU2lnbikKKyAgICAgICAgICAgICAgICA6IERlY2ltYWwoLWludDY0X3QocmVzdWx0
KSwgcmVzdWx0RXhwb25lbnQsIGludmVydFNpZ24obGhzU2lnbikpOworfQorCitEZWNpbWFsIERl
Y2ltYWw6Om9wZXJhdG9yICooY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0
IERlY2ltYWwmIGxocyA9ICp0aGlzOworICAgIGNvbnN0IFNpZ24gbGhzU2lnbiA9IGxocy5zaWdu
KCk7CisgICAgY29uc3QgU2lnbiByaHNTaWduID0gcmhzLnNpZ24oKTsKKyAgICBTaWduIHJlc3Vs
dFNpZ24gPSBsaHNTaWduID09IHJoc1NpZ24gPyBQbHVzIDogTWludXM7CisKKyAgICBTcGVjaWFs
VmFsdWVIYW5kbGVyIGhhbmRsZXIobGhzLCByaHMpOworICAgIHN3aXRjaCAoaGFuZGxlci5oYW5k
bGUoKSkgeworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEZpbml0ZTogeworICAg
ICAgICBjb25zdCB1aW50NjRfdCBsaHNDb2VmZmljaWVudCA9IGxocy5tX2RhdGEuY29lZmZpY2ll
bnQoKTsKKyAgICAgICAgY29uc3QgdWludDY0X3QgcmhzQ29lZmZpY2llbnQgPSByaHMubV9kYXRh
LmNvZWZmaWNpZW50KCk7CisgICAgICAgIGludCByZXN1bHRFeHBvbmVudCA9IGxocy5leHBvbmVu
dCgpICsgcmhzLmV4cG9uZW50KCk7CisgICAgICAgIFVJbnQxMjggd29yayhVSW50MTI4OjptdWx0
aXBseShsaHNDb2VmZmljaWVudCwgcmhzQ29lZmZpY2llbnQpKTsKKyAgICAgICAgd2hpbGUgKHdv
cmsuaGlnaCgpKSB7CisgICAgICAgICAgd29yayAvPSAxMDsKKyAgICAgICAgICArK3Jlc3VsdEV4
cG9uZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWNpbWFsKHdvcmsubG93KCksIHJl
c3VsdEV4cG9uZW50LCByZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1
ZUhhbmRsZXI6OkJvdGhpbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGluZmluaXR5KHJlc3VsdFNp
Z24pOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpFaXRoZXJOYU46CisgICAgICAg
IHJldHVybiBoYW5kbGVyLnZhbHVlKCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6
Okxoc0lzaW5maW5pdHk6CisgICAgICAgIHJldHVybiByaHMuaXNaZXJvKCkgPyBuYW4oKSA6IGlu
ZmluaXR5KHJlc3VsdFNpZ24pOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSaHNJ
c2luZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzLmlzWmVybygpID8gbmFuKCkgOiBpbmZpbml0
eShyZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gbmFuKCk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IgLyhjb25zdCBEZWNp
bWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29uc3QgRGVjaW1hbCYgbGhzID0gKnRoaXM7CisgICAg
Y29uc3QgU2lnbiBsaHNTaWduID0gbGhzLnNpZ24oKTsKKyAgICBjb25zdCBTaWduIHJoc1NpZ24g
PSByaHMuc2lnbigpOworICAgIFNpZ24gcmVzdWx0U2lnbiA9IGxoc1NpZ24gPT0gcmhzU2lnbiA/
IFBsdXMgOiBNaW51czsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJo
cyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFs
dWVIYW5kbGVyOjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3BlY2lh
bFZhbHVlSGFuZGxlcjo6Qm90aGluZmluaXR5OgorICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAg
ICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAgICAgcmV0dXJuIGhh
bmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6TGhzSXNpbmZp
bml0eToKKyAgICAgICAgcmV0dXJuIGluZmluaXR5KHJlc3VsdFNpZ24pOworCisgICAgY2FzZSBT
cGVjaWFsVmFsdWVIYW5kbGVyOjpSaHNJc2luZmluaXR5OgorICAgICAgICByZXR1cm4gemVybyhy
ZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBBU1NFUlQobGhzLmlzRmluaXRlKCkpOworICAgIEFT
U0VSVChyaHMuaXNGaW5pdGUoKSk7CisKKyAgICBpZiAocmhzLmlzWmVybygpKQorICAgICAgICBy
ZXR1cm4gbGhzLmlzWmVybygpID8gbmFuKCkgOiBpbmZpbml0eShyZXN1bHRTaWduKTsKKworICAg
IGludCByZXN1bHRFeHBvbmVudCA9IGxocy5leHBvbmVudCgpIC0gcmhzLmV4cG9uZW50KCk7CisK
KyAgICBpZiAobGhzLmlzWmVybygpKSB7CisgICAgICAgIC8vIDAvbm9uLXplcm8gPT4gMAorICAg
ICAgICByZXR1cm4gRGVjaW1hbCgwLCByZXN1bHRFeHBvbmVudCwgcmVzdWx0U2lnbik7CisgICAg
fQorCisgICAgdWludDY0X3QgcmVtYWluZGVyID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOwor
ICAgIGNvbnN0IHVpbnQ2NF90IGRpdmlzb3IgPSByaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7Cisg
ICAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgICB3aGlsZSAocmVzdWx0IDwgTWF4Q29lZmZpY2ll
bnQgLyAxMDApIHsKKyAgICAgICAgd2hpbGUgKHJlbWFpbmRlciA8IGRpdmlzb3IpIHsKKyAgICAg
ICAgICAgIHJlbWFpbmRlciAqPSAxMDsKKyAgICAgICAgICAgIHJlc3VsdCAqPSAxMDsKKyAgICAg
ICAgICAgIC0tcmVzdWx0RXhwb25lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ICs9IHJl
bWFpbmRlciAvIGRpdmlzb3I7CisgICAgICAgIHJlbWFpbmRlciAlPSBkaXZpc29yOworICAgICAg
ICBpZiAoIXJlbWFpbmRlcikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChy
ZW1haW5kZXIgPiBkaXZpc29yIC8gMikKKyAgICAgICAgKytyZXN1bHQ7CisKKyAgICByZXR1cm4g
RGVjaW1hbChyZXN1bHQsIHJlc3VsdEV4cG9uZW50LCByZXN1bHRTaWduKTsKK30KKworYm9vbCBE
ZWNpbWFsOjpvcGVyYXRvcj09KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFzdEVxdWFscyhyaHMpIHx8IGNvbXBhcmVUbyhyaHMpLmlzWmVybygpOworfQorCitib29s
IERlY2ltYWw6Om9wZXJhdG9yIT0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIHJl
dHVybiAhb3BlcmF0b3IgPT0ocmhzKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvciA8KGNv
bnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yID49KHJocyk7
Cit9CisKK2Jvb2wgRGVjaW1hbDo6b3BlcmF0b3IgPD0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25z
dAoreworICAgIGlmIChmYXN0RXF1YWxzKHJocykpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNvbnN0IERlY2ltYWwgcmVzdWx0ID0gY29tcGFyZVRvKHJocyk7CisgICAgcmV0dXJuIHJlc3Vs
dC5pc1plcm8oKSB8fCByZXN1bHQuaXNNaW51cygpOworfQorCitib29sIERlY2ltYWw6Om9wZXJh
dG9yID4oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIHJldHVybiAhb3BlcmF0b3Ig
PD0ocmhzKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvciA+PShjb25zdCBEZWNpbWFsJiBy
aHMpIGNvbnN0Cit7CisgICAgaWYgKGZhc3RFcXVhbHMocmhzKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY29uc3QgRGVjaW1hbCByZXN1bHQgPSBjb21wYXJlVG8ocmhzKTsKKyAgICByZXR1
cm4gcmVzdWx0LmlzWmVybygpIHx8ICFyZXN1bHQuaXNNaW51cygpOworfQorCitpbnQgRGVjaW1h
bDo6ZXhwb25lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpc0Zpbml0ZSgpID8gbV9kYXRhLmV4
cG9uZW50KCkgOiAwOworfQorCitEZWNpbWFsOjpGb3JtYXRDbGFzcyBEZWNpbWFsOjpmb3JtYXRD
bGFzcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2RhdGEubV9wYWNrZWRGaWVsZCkgeworICAg
IGNhc2UgUG9zaXRpdmVJbmZpbml0eVBhdHRlcm46CisgICAgY2FzZSBOZWdhdGl2ZUluZmluaXR5
UGF0dGVybjoKKyAgICAgICAgcmV0dXJuIENsYXNzSW5maW5pdHk7CisgICAgY2FzZSBOYU5QYXR0
ZXJuOgorICAgICAgICByZXR1cm4gQ2xhc3NOYU47CisgICAgfQorCisgICAgcmV0dXJuIG1fZGF0
YS5pc1plcm8oKSA/IENsYXNzWmVybyA6IENsYXNzTm9ybWFsOworfQorCitEZWNpbWFsOjpTaWdu
IERlY2ltYWw6OnNpZ24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEuc2lnbigpOworfQor
CitEZWNpbWFsIERlY2ltYWw6OmFicygpIGNvbnN0Cit7CisgICAgRGVjaW1hbCByZXN1bHQoKnRo
aXMpOworICAgIHJlc3VsdC5tX2RhdGEuc2V0U2lnbihQbHVzKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBSb3VuZCB0b3dhcmQgcG9zaXRpdmUgaW5maW5pdHkuCisvLyBOb3RlOiBNYWMg
cG9ydHMgZGVmaW5lcyBjZWlsKHgpIGFzIHd0Zl9jZWlsKHgpLCBzbyB3ZSBjYW4ndCB1c2UgbmFt
ZSAiY2VpbCIgaGVyZS4KK0RlY2ltYWwgRGVjaW1hbDo6Y2VpbGluZygpIGNvbnN0Cit7CisgICAg
aWYgKGlzU3BlY2lhbCgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoZXhwb25l
bnQoKSA+PSAwKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICB1aW50NjRfdCByZXN1bHQg
PSBtX2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEaWdpdHMgPSBj
b3VudERpZ2l0cyhyZXN1bHQpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRyb3BEaWdpdHMgPSAt
ZXhwb25lbnQoKTsKKyAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBudW1iZXJPZkRyb3BEaWdpdHMp
CisgICAgICAgIHJldHVybiB6ZXJvKFBsdXMpOworCisgICAgcmVzdWx0ID0gc2NhbGVEb3duKHJl
c3VsdCwgbnVtYmVyT2ZEcm9wRGlnaXRzIC0gMSk7CisgICAgaWYgKHNpZ24oKSA9PSBQbHVzICYm
IHJlc3VsdCAlIDEwID4gMCkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAx
MDsKKyAgICByZXR1cm4gRGVjaW1hbChyZXN1bHQsIDAsIHNpZ24oKSk7Cit9CisKK0RlY2ltYWwg
RGVjaW1hbDo6Y29tcGFyZVRvKGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25z
dCBEZWNpbWFsIHJlc3VsdCgqdGhpcyAtIHJocyk7CisgICAgcmV0dXJuIHJlc3VsdC5pc1plcm8o
KQorICAgICAgICAgICAgPyB6ZXJvKFBsdXMpCisgICAgICAgICAgICA6IHJlc3VsdC5pc0Zpbml0
ZSgpCisgICAgICAgICAgICAgICAgICAgID8gcmVzdWx0CisgICAgICAgICAgICAgICAgICAgIDog
cmVzdWx0LmlzTWludXMoKSA/IERlY2ltYWwoLTEpIDogRGVjaW1hbCgxKTsKK30KKworLy8gQ29t
cGFyZXMgdHdvIERlY2ltYWwgbnVtYmVyIGFzIGJpbmFyeSBkYXRhLiBUaGlzIG1ldGhvZCBpcwor
Ly8gdXNlZCBmb3IgZXF1YWxpdHkgb2YgaW5maW5pdHkgb3BlcmFuZHMgd2hpY2ggc3Vic3RyYWN0
IG9wZXJhdGlvbgorLy8gcmV0dXJucyBub24temVyby4KK2Jvb2wgRGVjaW1hbDo6ZmFzdEVxdWFs
cyhjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5tX3BhY2tl
ZEZpZWxkID09IHJocy5tX2RhdGEubV9wYWNrZWRGaWVsZAorICAgICAgICAmJiBtX2RhdGEubV9j
b2VmZmljaWVudCA9PSByaHMubV9kYXRhLm1fY29lZmZpY2llbnQ7Cit9CisKKy8vIFJvdW5kIHRv
d2FyZCBuZWdhdGl2ZSBpbmZpbml0eS4KK0RlY2ltYWwgRGVjaW1hbDo6Zmxvb3IoKSBjb25zdAor
eworICAgIGlmIChpc1NwZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgaWYg
KGV4cG9uZW50KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgdWludDY0X3Qg
cmVzdWx0ID0gbV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRGln
aXRzID0gY291bnREaWdpdHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEcm9wRGln
aXRzID0gLWV4cG9uZW50KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgbnVtYmVyT2ZEcm9w
RGlnaXRzKQorICAgICAgICByZXR1cm4gemVybyhQbHVzKTsKKworICAgIHJlc3VsdCA9IHNjYWxl
RG93bihyZXN1bHQsIG51bWJlck9mRHJvcERpZ2l0cyAtIDEpOworICAgIGlmIChpc01pbnVzKCkg
JiYgcmVzdWx0ICUgMTAgPiAwKQorICAgICAgICByZXN1bHQgKz0gMTA7CisgICAgcmVzdWx0IC89
IDEwOworICAgIHJldHVybiBEZWNpbWFsKHJlc3VsdCwgMCwgc2lnbigpKTsKK30KKworRGVjaW1h
bCBEZWNpbWFsOjpmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIGludCBleHBv
bmVudCA9IDA7CisgICAgU2lnbiBleHBvbmVudFNpZ24gPSBQbHVzOworICAgIGludCBudW1iZXJP
ZkRpZ2l0cyA9IDA7CisgICAgaW50IG51bWJlck9mRGlnaXRzQWZ0ZXJEb3QgPSAwOworICAgIGlu
dCBudW1iZXJPZkV4dHJhRGlnaXRzID0gMDsKKyAgICBTaWduIHNpZ24gPSBQbHVzOworCisgICAg
ZW51bSB7CisgICAgICAgIFN0YXRlRGlnaXQsCisgICAgICAgIFN0YXRlRG90LAorICAgICAgICBT
dGF0ZURvdERpZ2l0LAorICAgICAgICBTdGF0ZUUsCisgICAgICAgIFN0YXRlRURpZ2l0LAorICAg
ICAgICBTdGF0ZUVTaWduLAorICAgICAgICBTdGF0ZVNpZ24sCisgICAgICAgIFN0YXRlU3RhcnQs
CisgICAgICAgIFN0YXRlWmVybywKKyAgICB9IHN0YXRlID0gU3RhdGVTdGFydDsKKworICAgICNk
ZWZpbmUgSGFuZGxlQ2hhcihjaDEsIG5leHQsIC4uLikgXAorICAgICAgICBpZiAoY2ggPT0gY2gx
IHx8IGNoID09IGNoMSAtICdBJyArICdhJykgeyBcCisgICAgICAgICAgICBfX1ZBX0FSR1NfXzsg
XAorICAgICAgICAgICAgc3RhdGUgPSBuZXh0OyBcCisgICAgICAgICAgICBicmVhazsgXAorICAg
ICAgICB9CisKKyAgICAjZGVmaW5lIEV4cGVjdENoYXIoY2gxLCBuZXh0LCAuLi4pIFwKKyAgICAg
ICAgSGFuZGxlQ2hhcihjaDEsIG5leHQsIF9fVkFfQVJHU19fKTsgXAorICAgICAgICByZXR1cm4g
bmFuKCk7CisKKyAgICB1aW50NjRfdCBhY2N1bXVsYXRvciA9IDA7CisgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgc3RyLmxlbmd0aCgpOyArK2luZGV4KSB7CisgICAgICAgIGNv
bnN0IGludCBjaCA9IHN0cltpbmRleF07CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAg
ICAgY2FzZSBTdGF0ZURpZ2l0OgorICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAn
OScpIHsKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBEZWNpbWFsOjpQcmVj
aXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICAgICAg
ICAgICAgICAgICAgYWNjdW11bGF0b3IgKj0gMTA7CisgICAgICAgICAgICAgICAgICAgIGFjY3Vt
dWxhdG9yICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICArK251bWJlck9mRXh0cmFEaWdpdHM7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLicpIHsKKyAgICAgICAgICAg
ICAgICBzdGF0ZSA9IFN0YXRlRG90OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBFeHBlY3RDaGFyKCdFJywgU3RhdGVFKTsKKworICAgICAgICBj
YXNlIFN0YXRlRG90OgorICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsK
KyAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBEZWNpbWFsOjpQcmVjaXNpb24p
IHsKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICAgICAgICAgICAg
ICAgICAgKytudW1iZXJPZkRpZ2l0c0FmdGVyRG90OworICAgICAgICAgICAgICAgICAgICBhY2N1
bXVsYXRvciAqPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gY2ggLSAn
MCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVEb3RE
aWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICBj
YXNlIFN0YXRlRG90RGlnaXQ6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5
JykgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IERlY2ltYWw6OlByZWNp
c2lvbikgeworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRzOworICAgICAgICAg
ICAgICAgICAgICArK251bWJlck9mRGlnaXRzQWZ0ZXJEb3Q7CisgICAgICAgICAgICAgICAgICAg
IGFjY3VtdWxhdG9yICo9IDEwOworICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBj
aCAtICcwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEV4cGVjdENoYXIoJ0UnLCBTdGF0ZUUpOworCisgICAg
ICAgIGNhc2UgU3RhdGVFOgorICAgICAgICAgICAgaWYgKGNoID09ICcrJykgeworICAgICAgICAg
ICAgICAgIGV4cG9uZW50U2lnbiA9IFBsdXM7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZUVTaWduOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgZXhwb25lbnRTaWduID0gTWlu
dXM7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVTaWduOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNo
IDw9ICc5JykgeworICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gY2ggLSAnMCc7CisgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2Ug
U3RhdGVFRGlnaXQ6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykgewor
ICAgICAgICAgICAgICAgIGV4cG9uZW50ICo9IDEwOworICAgICAgICAgICAgICAgIGV4cG9uZW50
ICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIGlmIChleHBvbmVudCA+IERlY2ltYWw6OkVt
YXggKyBQcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBvbmVudFNpZ24g
PT0gTWludXMgPyB6ZXJvKFBsdXMpIDogaW5maW5pdHkoc2lnbik7CisgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVFU2ln
bjoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAg
ICAgICAgZXhwb25lbnQgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
RURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0ZVNpZ246CisgICAgICAgICAg
ICBpZiAoY2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVplcm87Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
aCA+PSAnMScgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBj
aCAtICcwJzsKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRpZ2l0cyA9IDE7CisgICAgICAgICAg
ICAgICAgc3RhdGUgPSBTdGF0ZURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0
ZVN0YXJ0OgorICAgICAgICAgICAgaWYgKGNoID09ICcwJykgeworICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGVaZXJvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoY2ggPj0gJzEnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAg
ICAgIGFjY3VtdWxhdG9yID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZEaWdp
dHMgPSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVEaWdpdDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09ICctJykg
eworICAgICAgICAgICAgICAgIHNpZ24gPSBNaW51czsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlU2lnbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGNoID09ICcrJykgeworICAgICAgICAgICAgICAgIHNpZ24gPSBQbHVzOwor
ICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTaWduOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPT0gJy4nKSB7CisgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZURvdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3Rh
dGVaZXJvOgorICAgICAgICAgICAgaWYgKGNoID09ICcwJykKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgaWYgKGNoID49ICcxJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRvciA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIG51bWJlck9m
RGlnaXRzID0gMTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRGlnaXQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAn
LicpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRG90OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBFeHBlY3RDaGFyKCdFJywgU3Rh
dGVFKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoc3RhdGUgPT0gU3RhdGVaZXJvKQorICAgICAgICByZXR1cm4gemVybyhzaWduKTsKKworICAg
IGlmIChzdGF0ZSA9PSBTdGF0ZURpZ2l0IHx8IHN0YXRlID09IFN0YXRlRURpZ2l0IHx8IHN0YXRl
ID09IFN0YXRlRG90RGlnaXQpIHsKKyAgICAgICAgaW50IHJlc3VsdEV4cG9uZW50ID0gZXhwb25l
bnQgKiAoZXhwb25lbnRTaWduID09IE1pbnVzID8gLTEgOiAxKSAtIG51bWJlck9mRGlnaXRzQWZ0
ZXJEb3QgKyBudW1iZXJPZkV4dHJhRGlnaXRzOworICAgICAgICBjb25zdCBpbnQgYmlhc2VkRXhw
b25lbnQgPSByZXN1bHRFeHBvbmVudCArIEViaWFzOworICAgICAgICBpZiAoYmlhc2VkRXhwb25l
bnQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHplcm8oUGx1cyk7CisKKyAgICAgICAgY29uc3Qg
aW50IG92ZXJmbG93ID0gYmlhc2VkRXhwb25lbnQgLSBFbWF4ICsgMTsKKyAgICAgICAgaWYgKG92
ZXJmbG93ID4gMCkgeworICAgICAgICAgICAgaWYgKG92ZXJmbG93ICsgbnVtYmVyT2ZEaWdpdHMg
LSBudW1iZXJPZkRpZ2l0c0FmdGVyRG90ID4gUHJlY2lzaW9uKQorICAgICAgICAgICAgICAgIHJl
dHVybiBpbmZpbml0eShzaWduKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gc2NhbGVVcChh
Y2N1bXVsYXRvciwgb3ZlcmZsb3cpOworICAgICAgICAgICAgcmVzdWx0RXhwb25lbnQgLT0gb3Zl
cmZsb3c7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gRGVjaW1hbChhY2N1bXVsYXRvciwg
cmVzdWx0RXhwb25lbnQsIHNpZ24pOworICAgIH0KKworICAgIHJldHVybiBuYW4oKTsKK30KKwor
RGVjaW1hbCBEZWNpbWFsOjppbmZpbml0eShjb25zdCBTaWduIHNpZ24pCit7CisgICAgcmV0dXJu
IERlY2ltYWwoRW5jb2RlZERhdGEoc2lnbiA9PSBNaW51cyA/IE5lZ2F0aXZlSW5maW5pdHlQYXR0
ZXJuIDogUG9zaXRpdmVJbmZpbml0eVBhdHRlcm4pKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpu
YW4oKQoreworICAgIHJldHVybiBEZWNpbWFsKEVuY29kZWREYXRhKE5hTlBhdHRlcm4pKTsKK30K
KworRGVjaW1hbCBEZWNpbWFsOjpyZW1haW5kZXIoY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAor
eworICAgIGNvbnN0IERlY2ltYWwgcXVvdGllbnQgPSAoKnRoaXMgLyByaHMpLnJvdW5kKCk7Cisg
ICAgcmV0dXJuIHF1b3RpZW50LmlzU3BlY2lhbCgpID8gcXVvdGllbnQgOiAqdGhpcyAtIHF1b3Rp
ZW50ICogcmhzOworfQorCitEZWNpbWFsIERlY2ltYWw6OnJvdW5kKCkgY29uc3QKK3sKKyAgICBp
ZiAoaXNTcGVjaWFsKCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlmIChleHBvbmVu
dCgpID49IDApCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIHVpbnQ2NF90IHJlc3VsdCA9
IG1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRpZ2l0cyA9IGNv
dW50RGlnaXRzKHJlc3VsdCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRHJvcERpZ2l0cyA9IC1l
eHBvbmVudCgpOworICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IG51bWJlck9mRHJvcERpZ2l0cykK
KyAgICAgICAgcmV0dXJuIHplcm8oUGx1cyk7CisKKyAgICByZXN1bHQgPSBzY2FsZURvd24ocmVz
dWx0LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBpZiAocmVzdWx0ICUgMTAgPj0gNSkK
KyAgICAgICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsKKyAgICByZXR1cm4gRGVj
aW1hbChyZXN1bHQsIDAsIHNpZ24oKSk7Cit9CisKK1N0cmluZyBEZWNpbWFsOjp0b1N0cmluZygp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChmb3JtYXRDbGFzcygpKSB7CisgICAgY2FzZSBDbGFzc0lu
ZmluaXR5OgorICAgICAgICByZXR1cm4gc2lnbigpID8gIi1JbmZpbml0eSIgOiAiSW5maW5pdHki
OworCisgICAgY2FzZSBDbGFzc05hTjoKKyAgICAgICAgcmV0dXJuIHNpZ24oKSA/ICItTmFOIiA6
ICJOYU4iOworCisgICAgY2FzZSBDbGFzc05vcm1hbDoKKyAgICBjYXNlIENsYXNzWmVybzoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKKyAgICBpZiAoc2lnbigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworCisgICAg
aW50IG9yaWdpbmFsRXhwb25lbnQgPSBleHBvbmVudCgpOworCisgICAgY29uc3QgaW50IG1heERp
Z2l0cyA9IERCTF9ESUc7CisgICAgdWludDY0X3QgY29lZmZpY2llbnQgPSBtX2RhdGEuY29lZmZp
Y2llbnQoKTsKKyAgICBpbnQgbGFzdERpZ2l0ID0gMDsKKyAgICB3aGlsZSAoY291bnREaWdpdHMo
Y29lZmZpY2llbnQpID4gbWF4RGlnaXRzKSB7CisgICAgICAgIGxhc3REaWdpdCA9IGNvZWZmaWNp
ZW50ICUgMTA7CisgICAgICAgIGNvZWZmaWNpZW50IC89IDEwOworICAgICAgICArK29yaWdpbmFs
RXhwb25lbnQ7CisgICAgfQorCisgICAgaWYgKGxhc3REaWdpdCA+PSA1KQorICAgICAgICArK2Nv
ZWZmaWNpZW50OworCisgICAgd2hpbGUgKG9yaWdpbmFsRXhwb25lbnQgPCAwICYmIGNvZWZmaWNp
ZW50ICYmICEoY29lZmZpY2llbnQgJSAxMCkpIHsKKyAgICAgICAgY29lZmZpY2llbnQgLz0gMTA7
CisgICAgICAgICsrb3JpZ2luYWxFeHBvbmVudDsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcg
ZGlnaXRzID0gU3RyaW5nOjpudW1iZXIoY29lZmZpY2llbnQpOworICAgIGludCBjb2VmZmljaWVu
dExlbmd0aCA9IGludChkaWdpdHMubGVuZ3RoKCkpOworICAgIGNvbnN0IGludCBhZGp1c3RlZEV4
cG9uZW50ID0gb3JpZ2luYWxFeHBvbmVudCArIGNvZWZmaWNpZW50TGVuZ3RoIC0gMTsKKyAgICBp
ZiAob3JpZ2luYWxFeHBvbmVudCA8PSAwICYmIGFkanVzdGVkRXhwb25lbnQgPj0gLTYpIHsKKyAg
ICAgICAgaWYgKCFvcmlnaW5hbEV4cG9uZW50KSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZChkaWdpdHMpOworICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChhZGp1c3RlZEV4cG9uZW50ID49IDApIHsKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY29lZmZpY2llbnRMZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRpZ2l0c1tpXSk7CisgICAgICAgICAgICAgICAgaWYgKGkg
PT0gYWRqdXN0ZWRFeHBvbmVudCkKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
Jy4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7CisgICAgICAgIH0KKworICAgICAgICBidWlsZGVyLmFwcGVuZCgiMC4iKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IGFkanVzdGVkRXhwb25lbnQgKyAxOyBpIDwgMDsgKytpKQorICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJzAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHMp
OworCisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZGlnaXRzWzBdKTsKKyAg
ICAgICAgd2hpbGUgKGNvZWZmaWNpZW50TGVuZ3RoID49IDIgJiYgZGlnaXRzW2NvZWZmaWNpZW50
TGVuZ3RoIC0gMV0gPT0gJzAnKQorICAgICAgICAgICAgLS1jb2VmZmljaWVudExlbmd0aDsKKyAg
ICAgICAgaWYgKGNvZWZmaWNpZW50TGVuZ3RoID49IDIpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcuJyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGNvZWZmaWNpZW50
TGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZGlnaXRzW2ldKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhZGp1c3RlZEV4cG9uZW50KSB7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChhZGp1c3RlZEV4cG9uZW50IDwgMCA/ICJlIiA6ICJlKyIpOworICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoYWRqdXN0ZWRFeHBvbmVudCkp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K0RlY2ltYWwgRGVjaW1hbDo6emVybyhTaWduIHNpZ24pCit7CisgICAgcmV0dXJuIERlY2ltYWwo
RW5jb2RlZERhdGEoc2lnbiA9PSBNaW51cyA/IE5lZ2F0aXZlWmVyb1BhdHRlcm4gOiBQb3NpdGl2
ZVplcm9QYXR0ZXJuKSk7Cit9CisKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1h
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk2ZGYyOWE3MzYxOTU5MzIxYWI2Njc4ODlmZTg2NDU4ZTg3MzQyNzMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmgKQEAg
LTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2lmbmRlZiBEZWNpbWFsX2gKKyNkZWZpbmUgRGVjaW1hbF9oCisKKyNpbmNs
dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgZGVjaW1hbCBiYXNlIGZs
b2F0aW5nIHBvaW50ZXIgbnVtYmVyIHdpdGggMzIgYml0CisvLyAgdW5zaWdlbmQgaW50ZWdlciBh
bmQgNjQgYml0IHVuc2lnbmVkIGludGVnZXIuCisvLyAgbyAxIGJpdCBzaWduICgwID0gcG9zaXRp
dmUgbnVtYmVyLCAxID0gbmVnYXRpdmUgbnVtYmVyKQorLy8gIG8gMTEgYml0IGJpYXNlZCBleHBv
bmVudCwgMTAgYmFzZWQuCisvLyAgbyA2NCBiaXQgY29lZmZpY2llbnQuCisvLworLy8gRXhwb25l
bnQgYW5kIHNpZ24gYml0IGFyZSBlbmNvZGVkIGFzOgorLy8gNzY1NDMyMTAgNzY1NDMyMTAKKy8v
IFMwMDAwMDAwIDAwMDBNRUVFCisvLyAgUyA9IHNpZ24gKDEgYml0KSwgMCA9IHBvc2l0aXZlLCAx
ID0gbmVnYXRpdmUKKy8vICBFID0gZXhwb25lbnQgKDExIGJpdCkKKy8vCisvLyBGSVhNRTogT25j
ZSBhbGwgQysrIGNvbXBpbGVyIHN1cHBvcnQgZGVjaW1hbCB0eXBlLCB3ZSBzaG91bGQgcmVwbGFj
ZSB0aGlzCisvLyBjbGFzcyB0byBjb21waWxlciBzdXBwb3J0ZWQgb25lLiBTZWUgYmVsb3cgVVJJ
IGZvciBjdXJyZW50IHN0YXR1cyBvZiBkZWNpbWFsCisvLyB0eXBlIGZvciBDKys6IC8vIGh0dHA6
Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDYvbjE5Nzcu
aHRtbAorY2xhc3MgRGVjaW1hbCB7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBjb25zdCBFbWF4
ID0gMjA0NzsgLy8gbGFyZ2VzdCBleHBvbmVudCB2YWx1ZQorICAgIHN0YXRpYyBpbnQgY29uc3Qg
RWJpYXMgPSAxMDIzOyAvLyBzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBvbmVudAorICAgIHN0
YXRpYyBpbnQgY29uc3QgUHJlY2lzaW9uID0gMTg7CisKKyAgICBlbnVtIEZvcm1hdENsYXNzIHsK
KyAgICAgICAgQ2xhc3NJbmZpbml0eSwKKyAgICAgICAgQ2xhc3NOb3JtYWwsCisgICAgICAgIENs
YXNzTmFOLAorICAgICAgICBDbGFzc1plcm8sCisgICAgfTsKKworICAgIGVudW0gU2lnbiB7Cisg
ICAgICAgIFBsdXMsCisgICAgICAgIE1pbnVzLAorICAgIH07CisKKyAgICBzdHJ1Y3QgRW5jb2Rl
ZERhdGEgeworICAgICAgICBleHBsaWNpdCBFbmNvZGVkRGF0YSh1aW50MzJfdCk7CisgICAgICAg
IEVuY29kZWREYXRhKHVpbnQ2NF90LCBpbnQsIFNpZ24pOworCisgICAgICAgIHVpbnQ2NF90IGNv
ZWZmaWNpZW50KCkgY29uc3Q7CisgICAgICAgIGludCBjb3VudERpZ2l0cygpIGNvbnN0OworICAg
ICAgICBpbnQgZXhwb25lbnQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0
OworICAgICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0OworICAgICAgICBib29sIGlzWmVybygp
IGNvbnN0OworICAgICAgICBpbnQgcmF3RXhwb25lbnQoKSBjb25zdDsKKyAgICAgICAgU2lnbiBz
aWduKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0U2lnbihTaWduKTsKKworICAgICAgICB1aW50
NjRfdCBtX2NvZWZmaWNpZW50OworICAgICAgICB1aW50MzJfdCBtX3BhY2tlZEZpZWxkOworICAg
IH07CisKKyAgICBEZWNpbWFsKCk7CisgICAgRGVjaW1hbChpbnQzMl90KTsKKyAgICBEZWNpbWFs
KHVpbnQ2NF90LCBpbnQsIFNpZ24pOworICAgIERlY2ltYWwoY29uc3QgRGVjaW1hbCYpOworICAg
IGV4cGxpY2l0IERlY2ltYWwoY29uc3QgRW5jb2RlZERhdGEmKTsKKworICAgIERlY2ltYWwmIG9w
ZXJhdG9yID0oY29uc3QgRGVjaW1hbCYpOworICAgIERlY2ltYWwmIG9wZXJhdG9yICs9KGNvbnN0
IERlY2ltYWwmKTsKKyAgICBEZWNpbWFsJiBvcGVyYXRvciAtPShjb25zdCBEZWNpbWFsJik7Cisg
ICAgRGVjaW1hbCYgb3BlcmF0b3IgKj0oY29uc3QgRGVjaW1hbCYpOworICAgIERlY2ltYWwmIG9w
ZXJhdG9yIC89KGNvbnN0IERlY2ltYWwmKTsKKworICAgIERlY2ltYWwgb3BlcmF0b3IgLSgpIGNv
bnN0OworCisgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAg
Ym9vbCBvcGVyYXRvciAhPShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRv
ciA8KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIDw9KGNvbnN0IERl
Y2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yID4oY29uc3QgRGVjaW1hbCYpIGNvbnN0
OworICAgIGJvb2wgb3BlcmF0b3IgPj0oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworCisgICAgRGVj
aW1hbCBvcGVyYXRvciArKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIG9wZXJh
dG9yIC0oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIERlY2ltYWwgb3BlcmF0b3IgKihjb25z
dCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCBvcGVyYXRvciAvKGNvbnN0IERlY2ltYWwm
KSBjb25zdDsKKworICAgIGludCBleHBvbmVudCgpIGNvbnN0OworICAgIEZvcm1hdENsYXNzIGZv
cm1hdENsYXNzKCkgY29uc3Q7CisgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5pc0Zpbml0ZSgpOyB9CisgICAgYm9vbCBpc01pbnVzKCkgY29uc3QgeyByZXR1cm4gc2ln
bigpID09IE1pbnVzOyB9CisgICAgYm9vbCBpc1BsdXMoKSBjb25zdCB7IHJldHVybiBzaWduKCkg
PT0gUGx1czsgfQorICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlz
U3BlY2lhbCgpOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNa
ZXJvKCk7IH0KKyAgICBjb25zdCBFbmNvZGVkRGF0YSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X2RhdGE7IH0KKworICAgIERlY2ltYWwgYWJzKCkgY29uc3Q7CisgICAgRGVjaW1hbCBjZWlsaW5n
KCkgY29uc3Q7CisgICAgRGVjaW1hbCBmbG9vcigpIGNvbnN0OworICAgIERlY2ltYWwgcmVtYWlu
ZGVyKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIHJvdW5kKCkgY29uc3Q7Cisg
ICAgZG91YmxlIHRvRG91YmxlKCkgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7
CisKKyAgICBzdGF0aWMgRGVjaW1hbCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgIHN0
YXRpYyBEZWNpbWFsIGluZmluaXR5KFNpZ24pOworICAgIHN0YXRpYyBEZWNpbWFsIG5hbigpOwor
ICAgIHN0YXRpYyBEZWNpbWFsIHplcm8oU2lnbik7CisKK3ByaXZhdGU6CisgICAgRGVjaW1hbChk
b3VibGUpOworICAgIERlY2ltYWwgY29tcGFyZVRvKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAg
ICBib29sIGZhc3RFcXVhbHMoY29uc3QgRGVjaW1hbCYpIGNvbnN0OworCisgICAgc3RhdGljIGlu
bGluZSBTaWduIGludmVydFNpZ24oU2lnbiBzaWduKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNp
Z24gPT0gTWludXMgPyBQbHVzIDogTWludXM7CisgICAgfQorCisgICAgU2lnbiBzaWduKCkgY29u
c3Q7CisKKyAgICBFbmNvZGVkRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIERlY2ltYWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNzg1NGVk
ZjBhOTlkNmNiZDgyMTU3NGNlNmY0MTU0YmMxMTBiMDM4NC4uZGM4NzU2ZWQ2YTNlYjVmNzllMjM4
YTBlYzU0YTk3ZjQyMTMwZDBmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC05
NSw2ICs5NSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ2xpcGJvYXJkQ2hyb21pdW1UZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5o
JywKICAgICAgICAgICAgICd0ZXN0cy9Db21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
LmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlY2ltYWxUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYXdpbmdCdWZm
ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9FdmVudExpc3RlbmVyVGVz
dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWNpbWFs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kMjYxZWUxZjNhNTA5MThkZjBkZmUwNGNmMTcyZTIyM2M2YjNmOTlkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWNpbWFsVGVzdC5j
cHAKQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVjaW1h
bC5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCis6OnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCg6OnN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0
IERlY2ltYWwmIGRlY2ltYWwpCit7CisgICAgRGVjaW1hbDo6RW5jb2RlZERhdGEgZGF0YSA9IGRl
Y2ltYWwudmFsdWUoKTsKKyAgICByZXR1cm4gb3MgCisgICAgICAgIDw8ICJEZWNpbWFsKCIgPDwg
U3RyaW5nOjpudW1iZXIoZGF0YS5jb2VmZmljaWVudCgpKS5hc2NpaSgpLmRhdGEoKQorICAgICAg
ICA8PCAiLCAiIDw8IFN0cmluZzo6bnVtYmVyKGRhdGEuZXhwb25lbnQoKSkuYXNjaWkoKS5kYXRh
KCkKKyAgICAgICAgPDwgIiwgIiA8PCAoZGF0YS5zaWduKCkgPT0gRGVjaW1hbDo6TWludXMgPyAi
TWludXMiIDogIlBsdXMiKQorICAgICAgICA8PCAiKT0iIDw8IGRlY2ltYWwudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKTsKK30KKworfSAvLyBXZWJDb3JlCisKK25hbWVzcGFjZSBEZWNpbWFsVGVz
dCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBTaW11bGF0ZSBXZWJDb3JlL2h0
bWwvU3RlcFJhbmdlCitjbGFzcyBEZWNpbWFsU3RlcFJhbmdlIHsKK3B1YmxpYzoKKyAgICBEZWNp
bWFsIG1heGltdW07CisgICAgRGVjaW1hbCBtaW5pbXVtOworICAgIERlY2ltYWwgc3RlcDsKKwor
ICAgIERlY2ltYWxTdGVwUmFuZ2UoY29uc3QgRGVjaW1hbCYgbWluaW11bSwgY29uc3QgRGVjaW1h
bCYgbWF4aW11bSwgY29uc3QgRGVjaW1hbCYgc3RlcCkKKyAgICAgICAgOiBtYXhpbXVtKG1heGlt
dW0pCisgICAgICAgICwgbWluaW11bShtaW5pbXVtKQorICAgICAgICAsIHN0ZXAoc3RlcCkKKyAg
ICB7CisgICAgfQorCisgICAgRGVjaW1hbCBjbGFtcFZhbHVlKERlY2ltYWwgdmFsdWUpIGNvbnN0
CisgICAgeworICAgICAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCA9IG1pbmltdW0gKyAoKHZhbHVl
IC0gbWluaW11bSkgLyBzdGVwKS5yb3VuZCgpICogc3RlcDsKKyAgICAgICAgQVNTRVJUKHJlc3Vs
dC5pc0Zpbml0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCA+IG1heGltdW0gPyByZXN1bHQg
LSBzdGVwIDogcmVzdWx0OworICAgIH0KK307CisKK2NsYXNzIERlY2ltYWxUZXN0IDogcHVibGlj
IDo6dGVzdGluZzo6VGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBEZWNpbWFsOjpTaWdu
IFNpZ247CisgICAgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU2lnbiBQbHVzID0gRGVjaW1hbDo6
UGx1czsKKyAgICBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCBTaWduIE1pbnVzID0gRGVjaW1hbDo6
TWludXM7CisKKyAgICBEZWNpbWFsIGVuY29kZSh1aW50NjRfdCBjb2VmZmljaWVudCwgaW50IGV4
cG9uZW50LCBTaWduIHNpZ24pCisgICAgeworICAgICAgICByZXR1cm4gRGVjaW1hbChjb2VmZmlj
aWVudCwgZXhwb25lbnQsIHNpZ24pOworICAgIH0KKworICAgIHByb3RlY3RlZDogRGVjaW1hbCBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERl
Y2ltYWw6OmZyb21TdHJpbmcoc3RyaW5nKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQ6IFN0cmlu
ZyBzdGVwRG93bihjb25zdCBTdHJpbmcmIG1pbmltdW0sIGNvbnN0IFN0cmluZyYgbWF4aW11bSwg
Y29uc3QgU3RyaW5nJiBzdGVwLCBjb25zdCBTdHJpbmcmIHZhbHVlU3RyaW5nLCBpbnQgbnVtYmVy
T2ZTdGVwVGltZXMpCisgICAgeworICAgICAgICBEZWNpbWFsU3RlcFJhbmdlIHN0ZXBSYW5nZShm
cm9tU3RyaW5nKG1pbmltdW0pLCBmcm9tU3RyaW5nKG1heGltdW0pLCBmcm9tU3RyaW5nKHN0ZXAp
KTsKKyAgICAgICAgRGVjaW1hbCB2YWx1ZSA9IGZyb21TdHJpbmcodmFsdWVTdHJpbmcpOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mU3RlcFRpbWVzOyArK2kpIHsKKyAgICAg
ICAgICB2YWx1ZSAtPSBzdGVwUmFuZ2Uuc3RlcDsKKyAgICAgICAgICB2YWx1ZSA9IHN0ZXBSYW5n
ZS5jbGFtcFZhbHVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9T
dHJpbmcoKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQ6IFN0cmluZyBzdGVwVXAoY29uc3QgU3Ry
aW5nJiBtaW5pbXVtLCBjb25zdCBTdHJpbmcmIG1heGltdW0sIGNvbnN0IFN0cmluZyYgc3RlcCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZVN0cmluZywgaW50IG51bWJlck9mU3RlcFRpbWVzKQorICAgIHsK
KyAgICAgICAgRGVjaW1hbFN0ZXBSYW5nZSBzdGVwUmFuZ2UoZnJvbVN0cmluZyhtaW5pbXVtKSwg
ZnJvbVN0cmluZyhtYXhpbXVtKSwgZnJvbVN0cmluZyhzdGVwKSk7CisgICAgICAgIERlY2ltYWwg
dmFsdWUgPSBmcm9tU3RyaW5nKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1iZXJPZlN0ZXBUaW1lczsgKytpKSB7CisgICAgICAgICAgdmFsdWUgKz0gc3RlcFJh
bmdlLnN0ZXA7CisgICAgICAgICAgdmFsdWUgPSBzdGVwUmFuZ2UuY2xhbXBWYWx1ZSh2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CisgICAgfQorfTsK
KworVEVTVF9GKERlY2ltYWxUZXN0LCBBYnMpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAw
LCBQbHVzKSwgZW5jb2RlKDAsIDAsIFBsdXMpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDAsIDAsIFBsdXMpLCBlbmNvZGUoMCwgMCwgTWludXMpLmFicygpKTsKKworICAgIEVYUEVDVF9F
UShlbmNvZGUoMCwgMTAsIFBsdXMpLCBlbmNvZGUoMCwgMTAsIFBsdXMpLmFicygpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDAsIDEwLCBQbHVzKSwgZW5jb2RlKDAsIDEwLCBNaW51cykuYWJzKCkp
OworCisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAsIFBsdXMpLCBlbmNvZGUoMCwgLTEwLCBQ
bHVzKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAsIFBsdXMpLCBlbmNvZGUo
MCwgLTEwLCBNaW51cykuYWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQbHVz
KSwgZW5jb2RlKDEsIDAsIFBsdXMpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAs
IFBsdXMpLCBlbmNvZGUoMSwgMCwgTWludXMpLmFicygpKTsKKworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMSwgMTAsIFBsdXMpLCBlbmNvZGUoMSwgMTAsIFBsdXMpLmFicygpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEsIDEwLCBQbHVzKSwgZW5jb2RlKDEsIDEwLCBNaW51cykuYWJzKCkpOworCisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAsIFBsdXMpLCBlbmNvZGUoMSwgLTEwLCBQbHVzKS5h
YnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAsIFBsdXMpLCBlbmNvZGUoMSwgLTEw
LCBNaW51cykuYWJzKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIENlaWxpbmcpCit7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoMSkuY2VpbGluZygpKTsKKyAgICBFWFBF
Q1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDExLCAtMSwgUGx1cykuY2VpbGluZygpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDEzLCAtMSwgUGx1cykuY2VpbGluZygpKTsKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE1LCAtMSwgUGx1cykuY2VpbGluZygpKTsK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE5LCAtMSwgUGx1cykuY2VpbGluZygp
KTsKKworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgRGVjaW1hbCgtMSkuY2VpbGluZygpKTsK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIGVuY29kZSgxMSwgLTEsIE1pbnVzKS5jZWlsaW5n
KCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgZW5jb2RlKDEzLCAtMSwgTWludXMpLmNl
aWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBlbmNvZGUoMTUsIC0xLCBNaW51
cykuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIGVuY29kZSgxOSwgLTEs
IE1pbnVzKS5jZWlsaW5nKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEVuY29kZWREYXRh
KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUGx1cyksIGVuY29kZSgwLCAwLCBQbHVz
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBNaW51cyksIGVuY29kZSgwLCAwLCBNaW51
cykpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEsIDAsIE1pbnVzKSwgZW5jb2RlKDEsIDAsIE1pbnVzKSk7CisgICAgRVhQRUNU
X0VRKERlY2ltYWw6OmluZmluaXR5KFBsdXMpLCBlbmNvZGUoMSwgMjAwMCwgUGx1cykpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsOjp6ZXJvKFBsdXMpLCBlbmNvZGUoMSwgLTIwMDAsIFBsdXMpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBGbG9vcikKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1h
bCgxKSwgRGVjaW1hbCgxKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZW5j
b2RlKDExLCAtMSwgUGx1cykuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIGVu
Y29kZSgxMywgLTEsIFBsdXMpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBl
bmNvZGUoMTUsIC0xLCBQbHVzKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwg
ZW5jb2RlKDE5LCAtMSwgUGx1cykuZmxvb3IoKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgt
MSksIERlY2ltYWwoLTEpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5j
b2RlKDExLCAtMSwgTWludXMpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwg
ZW5jb2RlKDEzLCAtMSwgTWludXMpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0y
KSwgZW5jb2RlKDE1LCAtMSwgTWludXMpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
KC0yKSwgZW5jb2RlKDE5LCAtMSwgTWludXMpLmZsb29yKCkpOworfQorCitURVNUX0YoRGVjaW1h
bFRlc3QsIEZyb21JbnQzMikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBsdXMpLCBE
ZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxLCAwLCBNaW51cyksIERlY2ltYWwoLTEpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEwMCwgMCwgUGx1cyksIERlY2ltYWwoMTAwKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxMDAsIDAsIE1pbnVzKSwgRGVjaW1hbCgtMTAwKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgweDdGRkZGRkZGLCAwLCBQbHVzKSwgRGVjaW1hbChJTlRfTUFYKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgweDgwMDAwMDAwdSwgMCwgTWludXMpLCBEZWNpbWFsKElOVF9NSU4pKTsKK30KKwor
VEVTVF9GKERlY2ltYWxUZXN0LCBGcm9tU3RyaW5nKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUo
MCwgMCwgUGx1cyksIGZyb21TdHJpbmcoIjAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAw
LCBNaW51cyksIGZyb21TdHJpbmcoIi0wIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBm
cm9tU3RyaW5nKCIxIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgTWludXMpLCBmcm9t
U3RyaW5nKCItMSIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZnJvbVN0cmluZygiMDEi
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAwLCBQbHVzKSwgZnJvbVN0cmluZygiKzMiKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAzLCBQbHVzKSwgZnJvbVN0cmluZygiMEUzIikpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoNSwgLTEsIFBsdXMpLCBmcm9tU3RyaW5nKCIuNSIpKTsKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgUGx1cyksIGZyb21TdHJpbmcoIjEwMCIpKTsKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgTWludXMpLCBmcm9tU3RyaW5nKCItMTAwIikpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCAtMiwgUGx1cyksIGZyb21TdHJpbmcoIjEuMjMiKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0yLCBNaW51cyksIGZyb21TdHJpbmcoIi0xLjIz
IikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCA4LCBQbHVzKSwgZnJvbVN0cmluZygiMS4y
M0UxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgOCwgTWludXMpLCBmcm9tU3RyaW5n
KCItMS4yM0UxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgOCwgUGx1cyksIGZyb21T
dHJpbmcoIjEuMjNFKzEwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCA4LCBNaW51cyks
IGZyb21TdHJpbmcoIi0xLjIzRSsxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgLTEy
LCBQbHVzKSwgZnJvbVN0cmluZygiMS4yM0UtMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgx
MjMsIC0xMiwgTWludXMpLCBmcm9tU3RyaW5nKCItMS4yM0UtMTAiKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSg1LCAtNywgUGx1cyksIGZyb21TdHJpbmcoIjAuMDAwMDAwNSIpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDEyMywgLTMsIFBsdXMpLCBmcm9tU3RyaW5nKCIwLjEyMyIpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDAsIC0yLCBQbHVzKSwgZnJvbVN0cmluZygiMDAuMDAiKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxLCAyLCBQbHVzKSwgZnJvbVN0cmluZygiMUUyIikpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQbHVzKSwgZnJvbVN0cmluZygiMUUyMDAwMCIpKTsK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6emVybyhQbHVzKSwgZnJvbVN0cmluZygiMUUtMjAwMDAi
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwLCAxMDIzLCBQbHVzKSwgZnJvbVN0cmluZygi
MUUxMDI2IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjp6ZXJvKFBsdXMpLCBmcm9tU3RyaW5n
KCIxRS0xMDI2IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQbHVzKSwgZnJv
bVN0cmluZygiMTIzNDU2Nzg5MEUxMDM2IikpOworCisgICAgLy8gMl4xMDI0CisgICAgY29uc3Qg
dWludDY0X3QgbGVhZGluZ0RpZ2l0c09mMlBvd2VyT2YxMDI0ID0gVUlOVDY0X0MoMTc5NzY5MzEz
NDg2MjMxNTkpOworICAgIEVYUEVDVF9FUShlbmNvZGUobGVhZGluZ0RpZ2l0c09mMlBvd2VyT2Yx
MDI0LCAyOTIsIFBsdXMpLCBmcm9tU3RyaW5nKCIxNzk3NjkzMTM0ODYyMzE1OTA3NzI5MzA1MTkw
Nzg5MDI0NzMzNjE3OTc2OTc4OTQyMzA2NTcyNzM0MzAwODExNTc3MzI2NzU4MDU1MDA5NjMxMzI3
MDg0NzczMjI0MDc1MzYwMjExMjAxMTM4Nzk4NzEzOTMzNTc2NTg3ODk3Njg4MTQ0MTY2MjI0OTI4
NDc0MzA2Mzk0NzQxMjQzNzc3Njc4OTM0MjQ4NjU0ODUyNzYzMDIyMTk2MDEyNDYwOTQxMTk0NTMw
ODI5NTIwODUwMDU3Njg4MzgxNTA2ODIzNDI0NjI4ODE0NzM5MTMxMTA1NDA4MjcyMzcxNjMzNTA1
MTA2ODQ1ODYyOTgyMzk5NDcyNDU5Mzg0Nzk3MTYzMDQ4MzUzNTYzMjk2MjQyMjQxMzcyMTYiKSk7
Cit9CisKKy8vIFRoZXNlIHN0cmluZ3MgYXJlIGxvb2sgbGlrZSBwcm9wZXIgbnVtYmVyLCBidXQg
d2UgZG9uJ3QgYWNjZXB0IHRoZW0uCitURVNUX0YoRGVjaW1hbFRlc3QsIEZyb21TdHJpbmdMaWtl
TnVtYmVyKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiIDEy
MyAiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIxLDIzNCIp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIklORiIpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBmcm9tU3RyaW5nVHJ1bmNhdGVkKQoreworICAgIEVYUEVD
VF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygieCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjAuIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpu
YW4oKSwgZnJvbVN0cmluZygiMXgiKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCks
IGZyb21TdHJpbmcoIjFFeCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21T
dHJpbmcoIjFFMngiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5n
KCIxRSt4IikpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wQWRkKQoreworICAgIEVYUEVD
VF9FUShlbmNvZGUoMCwgMCwgUGx1cyksIERlY2ltYWwoMCkgKyBEZWNpbWFsKDApKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSArIERlY2ltYWwoLTEpKTsKKyAgICBFWFBF
Q1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgtMSkgKyBEZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEwMCwgMCwgUGx1cyksIERlY2ltYWwoOTkpICsgRGVjaW1hbCgxKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIE1pbnVzKSwgRGVjaW1hbCgtNTApICsgRGVjaW1hbCgt
NTApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAwMDAwMDAsIDM1LCBQbHVzKSwg
ZW5jb2RlKDEsIDUwLCBQbHVzKSArIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUo
MTAwMDAwMDAwMDAwMDAwMCwgMzUsIFBsdXMpLCBEZWNpbWFsKDEpICsgZW5jb2RlKDEsIDUwLCBQ
bHVzKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMSwgMCwgUGx1cyksIGVuY29k
ZSgxLCAxMCwgUGx1cykgKyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAw
MDAwMDAxLCAwLCBQbHVzKSwgRGVjaW1hbCgxKSArIGVuY29kZSgxLCAxMCwgUGx1cykpOworICAg
IEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUGx1cyksIGVuY29kZSgxLCAtMTAyMiwgUGx1cykgKyBl
bmNvZGUoMSwgMCwgUGx1cykpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgLTEwMjIsIFBsdXMp
LCBlbmNvZGUoMSwgLTEwMjIsIFBsdXMpICsgZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSk7Cit9CisK
K1RFU1RfRihEZWNpbWFsVGVzdCwgT3BBZGRCaWdFKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUo
MSwgMTAyMiwgUGx1cyksIGVuY29kZSgxLCAxMDIyLCBQbHVzKSArIGVuY29kZSgxLCAwLCBQbHVz
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAxMDIyLCBQbHVzKSwgZW5jb2RlKDEsIDEwMjIs
IFBsdXMpICsgZW5jb2RlKDEsIDEwMjIsIFBsdXMpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6
aW5maW5pdHkoUGx1cyksIGVuY29kZSh1aW50NjRfdCgtMSksIDEwMjIsIFBsdXMpICsgZW5jb2Rl
KDEsIDAsIFBsdXMpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcEFkZFNtYWxsRSkKK3sK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBsdXMpLCBlbmNvZGUoMSwgLTEwMjIsIFBsdXMp
ICsgZW5jb2RlKDEsIDAsIFBsdXMpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDIsIC0xMDIyLCBQ
bHVzKSwgZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSArIGVuY29kZSgxLCAtMTAyMiwgUGx1cykpOwor
fQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wQWRkU3BlY2lhbFZhbHVlcykKK3sKKyAgICBjb25z
dCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBsdXMpKTsKKyAgICBjb25zdCBE
ZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTWludXMpKTsKKyAgICBjb25z
dCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVjaW1hbCBUZW4oMTAp
OworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSArIEluZmluaXR5KTsKKyAgICBF
WFBFQ1RfRVEoTmFOLCBJbmZpbml0eSArIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShO
YU4sIE1pbnVzSW5maW5pdHkgKyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5p
dHksIE1pbnVzSW5maW5pdHkgKyBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShJbmZp
bml0eSwgSW5maW5pdHkgKyBUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgVGVuICsgSW5m
aW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5ICsgVGVu
KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgVGVuICsgTWludXNJbmZpbml0eSk7CisK
KyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gKyBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAr
IFRlbik7CisgICAgRVhQRUNUX0VRKE5hTiwgVGVuICsgTmFOKTsKK30KKworVEVTVF9GKERlY2lt
YWxUZXN0LCBPcENvbXBhcmUpCit7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKSA9PSBEZWNp
bWFsKDApKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApICE9IERlY2ltYWwoMSkpOworICAg
IEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgPCBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfVFJVRShE
ZWNpbWFsKDApIDw9IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgPiBE
ZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKSA+PSBEZWNpbWFsKDApKTsK
KworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpID09IERlY2ltYWwoMikpOworICAgIEVYUEVD
VF9GQUxTRShEZWNpbWFsKDEpICE9IERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9GQUxTRShEZWNp
bWFsKDEpIDwgRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPD0gRGVj
aW1hbCgwKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPiBEZWNpbWFsKDIpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxKSA+PSBEZWNpbWFsKDIpKTsKK30KKworVEVTVF9GKERl
Y2ltYWxUZXN0LCBPcENvbXBhcmVTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9UUlVFKERl
Y2ltYWwoMSkgPCBEZWNpbWFsOjppbmZpbml0eShQbHVzKSk7CisgICAgRVhQRUNUX1RSVUUoRGVj
aW1hbCgxKSA+IERlY2ltYWw6OmluZmluaXR5KE1pbnVzKSk7Cit9CisKK1RFU1RfRihEZWNpbWFs
VGVzdCwgT3BEaXYpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQbHVzKSwgRGVjaW1h
bCgwKSAvIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgMCwgTWludXMpLCBE
ZWNpbWFsKDIpIC8gRGVjaW1hbCgtMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoNSwgLTEsIE1p
bnVzKSwgRGVjaW1hbCgtMSkgLyBEZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDk5
LCAwLCBQbHVzKSwgRGVjaW1hbCg5OSkgLyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbCgxKSwgRGVjaW1hbCgtNTApIC8gRGVjaW1hbCgtNTApKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDMzMzMzMzMzMzMzMzMzMzMsIC0xNiwgUGx1cyksIERlY2ltYWwoMSkgLyBEZWNpbWFsKDMp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMzQ1Njc4OTAxMjM0LCAtMSwgUGx1cyksIGVuY29k
ZSgxMjM0NTY3ODkwMTIzNCwgMCwgUGx1cykgLyBEZWNpbWFsKDEwKSk7Cit9CisKK1RFU1RfRihE
ZWNpbWFsVGVzdCwgT3BEaXZCaWdFKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAyMiwg
UGx1cyksIGVuY29kZSgxLCAxMDIyLCBQbHVzKSAvIGVuY29kZSgxLCAwLCBQbHVzKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQbHVzKSwgZW5jb2RlKDEsIDEwMjIsIFBsdXMpIC8gZW5j
b2RlKDEsIDEwMjIsIFBsdXMpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcERpdlNtYWxs
RSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSwgZW5jb2RlKDEsIC0x
MDIyLCBQbHVzKSAvIGVuY29kZSgxLCAwLCBQbHVzKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgx
LCAwLCBQbHVzKSwgZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSAvIGVuY29kZSgxLCAtMTAyMiwgUGx1
cykpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wRGl2U3BlY2lhbFZhbHVlcykKK3sKKyAg
ICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBsdXMpKTsKKyAgICBj
b25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTWludXMpKTsKKyAg
ICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVjaW1hbCBa
ZXJvKERlY2ltYWw6Onplcm8oUGx1cykpOworICAgIGNvbnN0IERlY2ltYWwgTWludXNaZXJvKERl
Y2ltYWw6Onplcm8oTWludXMpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigxMCk7CisgICAgY29u
c3QgRGVjaW1hbCBNaW51c1RlbigtMTApOworCisgICAgRVhQRUNUX0VRKE5hTiwgWmVybyAvIFpl
cm8pOworICAgIEVYUEVDVF9FUShOYU4sIFplcm8gLyBNaW51c1plcm8pOworICAgIEVYUEVDVF9F
UShOYU4sIE1pbnVzWmVybyAvIFplcm8pOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzWmVybyAv
IE1pbnVzWmVybyk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIFRlbiAvIFplcm8pOworICAg
IEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gLyBNaW51c1plcm8pOworICAgIEVYUEVDVF9F
UShNaW51c0luZmluaXR5LCBNaW51c1RlbiAvIFplcm8pOworICAgIEVYUEVDVF9FUShJbmZpbml0
eSwgTWludXNUZW4gLyBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZp
bml0eSAvIFplcm8pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBJbmZpbml0eSAvIE1p
bnVzWmVybyk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgLyBa
ZXJvKTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVzSW5maW5pdHkgLyBNaW51c1plcm8p
OworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLyBJbmZpbml0eSk7CisgICAgRVhQRUNU
X0VRKE5hTiwgSW5maW5pdHkgLyBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBN
aW51c0luZmluaXR5IC8gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5p
dHkgLyBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShaZXJvLCBUZW4gLyBJbmZpbml0
eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzWmVybywgVGVuIC8gTWludXNJbmZpbml0eSk7CisgICAg
RVhQRUNUX0VRKE1pbnVzWmVybywgTWludXNUZW4gLyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VR
KFplcm8sIE1pbnVzVGVuIC8gTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBO
YU4gLyBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAvIFRlbik7CisgICAgRVhQRUNUX0VR
KE5hTiwgVGVuIC8gTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcE11bCkKK3sKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBsdXMpLCBEZWNpbWFsKDApICogRGVjaW1hbCgwKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAwLCBNaW51cyksIERlY2ltYWwoMikgKiBEZWNpbWFs
KC0xKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAwLCBNaW51cyksIERlY2ltYWwoLTEpICog
RGVjaW1hbCgyKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSg5OSwgMCwgUGx1cyksIERlY2ltYWwo
OTkpICogRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyNTAwLCAwLCBQbHVzKSwg
RGVjaW1hbCgtNTApICogRGVjaW1hbCgtNTApKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBP
cE11bEJpZ0UpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQbHVzKSwgZW5jb2Rl
KDEsIDEwMjIsIFBsdXMpICogZW5jb2RlKDEsIDAsIFBsdXMpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6aW5maW5pdHkoUGx1cyksIGVuY29kZSgxLCAxMDIyLCBQbHVzKSAqIGVuY29kZSgxLCAx
MDIyLCBQbHVzKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BNdWxTbWFsbEUpCit7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAyMiwgUGx1cyksIGVuY29kZSgxLCAtMTAyMiwgUGx1
cykgKiBlbmNvZGUoMSwgMCwgUGx1cykpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUGx1
cyksIGVuY29kZSgxLCAtMTAyMiwgUGx1cykgKiBlbmNvZGUoMSwgLTEwMjIsIFBsdXMpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBPcE11bFNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29uc3Qg
RGVjaW1hbCBJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShQbHVzKSk7CisgICAgY29uc3QgRGVj
aW1hbCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE1pbnVzKSk7CisgICAgY29uc3Qg
RGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERlY2ltYWwgVGVuKDEwKTsK
KyAgICBjb25zdCBEZWNpbWFsIE1pbnVzVGVuKC0xMCk7CisgICAgY29uc3QgRGVjaW1hbCBaZXJv
KERlY2ltYWw6Onplcm8oUGx1cykpOworICAgIGNvbnN0IERlY2ltYWwgTWludXNaZXJvKERlY2lt
YWw6Onplcm8oTWludXMpKTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgSW5maW5pdHkgKiBJ
bmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIEluZmluaXR5ICogTWludXNJ
bmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKiBJ
bmZpbml0eSk7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBNaW51c0luZmluaXR5ICogTWludXNJ
bmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAqIFplcm8pOworICAgIEVY
UEVDVF9FUShOYU4sIFplcm8gKiBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBN
aW51c0luZmluaXR5ICogWmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0eSAq
IFplcm8pOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgKiBNaW51c1plcm8pOworICAg
IEVYUEVDVF9FUShOYU4sIE1pbnVzWmVybyAqIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9F
UShOYU4sIE1pbnVzSW5maW5pdHkgKiBNaW51c1plcm8pOworICAgIEVYUEVDVF9FUShOYU4sIE1p
bnVzSW5maW5pdHkgKiBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZp
bml0eSAqIFRlbik7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gKiBJbmZpbml0eSk7Cisg
ICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKiBUZW4pOworICAgIEVY
UEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gKiBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVD
VF9FUShNaW51c0luZmluaXR5LCBJbmZpbml0eSAqIE1pbnVzVGVuKTsKKyAgICBFWFBFQ1RfRVEo
TWludXNJbmZpbml0eSwgTWludXNUZW4gKiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKEluZmlu
aXR5LCBNaW51c0luZmluaXR5ICogTWludXNUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwg
TWludXNUZW4gKiBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAqIE5h
Tik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOICogVGVuKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBU
ZW4gKiBOYU4pOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViKQoreworICAgIEVYUEVD
VF9FUShlbmNvZGUoMCwgMCwgUGx1cyksIERlY2ltYWwoMCkgLSBEZWNpbWFsKDApKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDMsIDAsIFBsdXMpLCBEZWNpbWFsKDIpIC0gRGVjaW1hbCgtMSkpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMywgMCwgTWludXMpLCBEZWNpbWFsKC0xKSAtIERlY2ltYWwo
MikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoOTgsIDAsIFBsdXMpLCBEZWNpbWFsKDk5KSAtIERl
Y2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUGx1cyksIERlY2ltYWwoLTUw
KSAtIERlY2ltYWwoLTUwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMDAwMDAw
LCAzNSwgUGx1cyksIGVuY29kZSgxLCA1MCwgUGx1cykgLSBEZWNpbWFsKDEpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAwMDAwMDAsIDM1LCBNaW51cyksIERlY2ltYWwoMSkgLSBl
bmNvZGUoMSwgNTAsIFBsdXMpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcFN1YkJpZ0Up
Cit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQbHVzKSwgZW5jb2RlKDEsIDEwMjIs
IFBsdXMpIC0gZW5jb2RlKDEsIDAsIFBsdXMpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAs
IFBsdXMpLCBlbmNvZGUoMSwgMTAyMiwgUGx1cykgLSBlbmNvZGUoMSwgMTAyMiwgUGx1cykpOwor
fQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViU21hbGxFKQoreworICAgIEVYUEVDVF9FUShl
bmNvZGUoVUlOVDY0X0MoMTAwMDAwMDAwMDAwMDAwMDApLCAtMTYsIE1pbnVzKSwgZW5jb2RlKDEs
IC0xMDIyLCBQbHVzKSAtIGVuY29kZSgxLCAwLCBQbHVzKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgwLCAwLCBQbHVzKSwgZW5jb2RlKDEsIC0xMDIyLCBQbHVzKSAtIGVuY29kZSgxLCAtMTAyMiwg
UGx1cykpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViU3BlY2lhbFZhbHVlcykKK3sK
KyAgICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBsdXMpKTsKKyAg
ICBjb25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTWludXMpKTsK
KyAgICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVjaW1h
bCBUZW4oMTApOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLSBJbmZpbml0eSk7Cisg
ICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSAtIE1pbnVzSW5maW5pdHkpOworICAgIEVY
UEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5IC0gSW5maW5pdHkpOworICAgIEVY
UEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgLSBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVD
VF9FUShJbmZpbml0eSwgSW5maW5pdHkgLSBUZW4pOworICAgIEVYUEVDVF9FUShNaW51c0luZmlu
aXR5LCBUZW4gLSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVz
SW5maW5pdHkgLSBUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgVGVuIC0gTWludXNJbmZp
bml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLSBOYU4pOworICAgIEVYUEVDVF9FUShO
YU4sIE5hTiAtIFRlbik7CisgICAgRVhQRUNUX0VRKE5hTiwgVGVuIC0gTmFOKTsKK30KKworVEVT
VF9GKERlY2ltYWxUZXN0LCBQcm9wZXJ0aWVzKQoreworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwo
MCkuaXNGaW5pdGUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMCkuaXNTcGVjaWFsKCkp
OworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFByb3BlcnRpZXNTcGVjaWFsKQoreworICAgIEVY
UEVDVF9UUlVFKERlY2ltYWw6OmluZmluaXR5KFBsdXMpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoUGx1cykuaXNGaW5pdGUoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShEZWNpbWFsOjppbmZpbml0eShNaW51cykuaXNTcGVjaWFsKCkpOworICAgIEVYUEVD
VF9GQUxTRShEZWNpbWFsOjppbmZpbml0eShNaW51cykuaXNGaW5pdGUoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShEZWNpbWFsOjpuYW4oKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERl
Y2ltYWw6Om5hbigpLmlzRmluaXRlKCkpOworfQorCisvLyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L251bWJlci9udW1iZXItc3RlcHVwLXN0ZXBkb3duLWZyb20tcmVuZGVyZXIKK1RFU1RfRihEZWNp
bWFsVGVzdCwgUmVhbFdvcmxkRXhhbXBsZU51bWJlclN0ZXBVcFN0ZXBEb3duRnJvbVJlbmRlcmVy
KQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEwIiksIHN0ZXBEb3duKCIwIiwgIjEwMCIsICIx
MCIsICIxOSIsIDEpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI5MCIpLCBzdGVwVXAoIjAiLCAi
OTkiLCAiMTAiLCAiODkiLCAxKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMSIpLCBzdGVwVXAo
IjAiLCAiMSIsICIwLjMzMzMzMzMzMzMzMzMzMzMzIiwgIjAiLCAzKSk7IC8vIHN0ZXA9MS8zCisg
ICAgRVhQRUNUX0VRKFN0cmluZygiMC4wMSIpLCBzdGVwVXAoIjAiLCAiMC4wMSIsICIwLjAwMzMz
MzMzMzMzMzMzMzMzMzMiLCAiMCIsIDMpKTsgLy8gc3RlcD0xLzMwMAorICAgIEVYUEVDVF9FUShT
dHJpbmcoIjEiKSwgc3RlcFVwKCIwIiwgIjEiLCAiMC4wMDM5MjE1Njg2Mjc0NTA5ODAiLCAiMCIs
IDI1NSkpOyAvLyBzdGVwPTEvMjU1CisgICAgRVhQRUNUX0VRKFN0cmluZygiMSIpLCBzdGVwVXAo
IjAiLCAiMSIsICIwLjEiLCAiMCIsIDEwKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUmVh
bFdvcmxkRXhhbXBsZU51bWJlclN0ZXBVcFN0ZXBEb3duRnJvbVJlbmRlcmVyUm91bmRpbmcpCit7
CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wMTUiKSwgc3RlcFVwKCIwIiwgIjEwMCIsICIwLjAw
NSIsICI1LjAwNSIsIDIpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjA2IiksIHN0ZXBVcCgi
MCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMSkpOworICAgIEVYUEVDVF9FUShTdHJpbmco
IjUuMDY1IiksIHN0ZXBVcCgiMCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMikpOworCisg
ICAgRVhQRUNUX0VRKFN0cmluZygiNS4wMTUiKSwgc3RlcFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAi
NS4wMDUiLCAyKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNiIpLCBzdGVwVXAoIjQiLCAi
OSIsICIwLjAwNSIsICI1LjAwNSIsIDExKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNjUi
KSwgc3RlcFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMikpOworfQorCitURVNUX0Yo
RGVjaW1hbFRlc3QsIFJlYWxXb3JsZEV4YW1wbGVSYW5nZVN0ZXBVcFN0ZXBEb3duKQoreworICAg
IEVYUEVDVF9FUShTdHJpbmcoIjFlKzM4IiksIHN0ZXBVcCgiMCIsICIxRTM4IiwgIjEiLCAiMUUz
OCIsIDkpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxZSszOCIpLCBzdGVwRG93bigiMCIsICIx
RTM4IiwgIjEiLCAiMUUzOCIsIDkpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBSZW1haW5k
ZXIpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSg5LCAtMSwgTWludXMpLCBlbmNvZGUoMjEsIC0x
LCBQbHVzKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFs
KDEwKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgTWludXMpLCBE
ZWNpbWFsKC0xMCkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDIsIC0xLCBQ
bHVzKSwgZW5jb2RlKDEwMiwgLTEsIFBsdXMpLnJlbWFpbmRlcigxKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgxLCAtMSwgUGx1cyksIERlY2ltYWwoMTApLnJlbWFpbmRlcihlbmNvZGUoMywgLTEs
IFBsdXMpKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAtMSwgTWludXMpLCBlbmNvZGUoMzYs
IC0xLCBQbHVzKS5yZW1haW5kZXIoZW5jb2RlKDEzLCAtMSwgUGx1cykpKTsKK30KKworVEVTVF9G
KERlY2ltYWxUZXN0LCBSZW1haW5kZXJTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9FUShE
ZWNpbWFsOjppbmZpbml0eShQbHVzKSwgRGVjaW1hbDo6aW5maW5pdHkoUGx1cykucmVtYWluZGVy
KDEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWw6Om5hbigpLnJlbWFp
bmRlcigxKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUm91bmQpCit7CisgICAgRVhQRUNU
X0VRKERlY2ltYWwoMSksIChEZWNpbWFsKDkpIC8gRGVjaW1hbCgxMCkpLnJvdW5kKCkpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsKDI1KSwgKERlY2ltYWwoNSkgLyBmcm9tU3RyaW5nKCIwLjIwMCIp
KS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgzKSwgKERlY2ltYWwoNSkgLyBEZWNp
bWFsKDIpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgKERlY2ltYWwoMikg
LyBEZWNpbWFsKDMpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgzKSwgKERlY2lt
YWwoMTApIC8gRGVjaW1hbCgzKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMyks
IChEZWNpbWFsKDEpIC8gZnJvbVN0cmluZygiMC4zIikpLnJvdW5kKCkpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsKDEwKSwgKERlY2ltYWwoMSkgLyBmcm9tU3RyaW5nKCIwLjEiKSkucm91bmQoKSk7
CisgICAgRVhQRUNUX0VRKERlY2ltYWwoNSksIChEZWNpbWFsKDEpIC8gZnJvbVN0cmluZygiMC4y
IikpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEwKSwgKGZyb21TdHJpbmcoIjEw
LjIiKSAvIDEpLnJvdW5kKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJvdW5kU2VwY2lh
bFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUGx1cyksIERlY2lt
YWw6OmluZmluaXR5KFBsdXMpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4o
KSwgRGVjaW1hbDo6bmFuKCkucm91bmQoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgVG9T
dHJpbmdTcGVjaWFsKQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIkluZmluaXR5IiksIERlY2lt
YWw6OmluZmluaXR5KFBsdXMpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi1J
bmZpbml0eSIpLCBEZWNpbWFsOjppbmZpbml0eShNaW51cykudG9TdHJpbmcoKSk7CisgICAgRVhQ
RUNUX0VRKFN0cmluZygiTmFOIiksIERlY2ltYWw6Om5hbigpLnRvU3RyaW5nKCkpOworfQorCit9
IC8vIERlY2ltYWxUZXN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144276</attachid>
            <date>2012-05-27 23:29:04 -0700</date>
            <delta_ts>2012-05-29 22:11:21 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-87360-20120528152903.patch</filename>
            <type>text/plain</type>
            <size>73653</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI0NmI3ZWY4MDk1NGU1
MWVmNWIyMWY5OWIzY2Y3MzhmOWU4MGQwNC4uOWYzMWU3ZmZkMDk4M2Q3MDgwMDQ0ZGI2OTJlODJl
ZmJlZWRhYTJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDEyLTA1LTI0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3IgTnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRk
ZWQgbmV3IGNsYXNzIERlY2ltYWwgZm9yIGRlY2ltYWwgYXJpdGhtYXRpYyBpbiB0d28KKyAgICAg
ICAgZmlsZXM6IHBsYXRmb3JtL0RlY2ltYWwuY3BwIGFuZCBEZWNpbWFsLmggd2l0aCB1bml0IHRl
c3QuCisKKyAgICAgICAgVGVzdDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNw
cAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGVjaW1hbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWNpbWFsUHJpdmF0ZSk6
CisgICAgICAgIChTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAgICAgKFVJbnQxMjgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6OmhpZ2gpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWxQcml2YXRlOjpjb3VudERpZ2l0cyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJp
dmF0ZTo6bXVsdGlwbHlIaWdoKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpw
b3dlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6c2NhbGVEb3duKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpzY2FsZVVwKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpTcGVjaWFsVmFsdWVIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5k
bGVyOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlNwZWNpYWxW
YWx1ZUhhbmRsZXI6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpV
SW50MTI4OjpVSW50MTI4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50
MTI4OjpvcGVyYXRvciAvPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUlu
dDEyODo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6
OkVuY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpj
b2VmZmljaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Zm9y
bWF0Q2xhc3MpCisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6ZXhwb25l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzRmluaXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjppc1NwZWNpYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzWmVybyk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpFbmNvZGVkRGF0YTo6c2V0U2lnbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
OjpEZWNpbWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yID0pOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgKz0pOgorICAgICAgICAoV2ViQ29yZTo6
RGVjaW1hbDo6b3BlcmF0b3IgLT0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0
b3IgKj0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLz0pOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNp
bWFsOjpvcGVyYXRvciArKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yICop
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLyk6CisgICAgICAgIChXZWJD
b3JlOjpEZWNpbWFsOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgPCk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciA8PSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpvcGVyYXRvciA+KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9y
ID49KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmV4cG9uZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6YWJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmNlaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RGVjaW1hbDo6Y29tcGFyZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmZhc3RFcXVh
bHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6Zmxvb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppbmZp
bml0eSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpuYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6cmVtYWluZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OnJvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWw6Onplcm8pOgorICAgICAgICAqIHBsYXRmb3JtL0RlY2ltYWwuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc0Zpbml0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsOjppc05lZ2F0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmlzUG9z
aXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aXNTcGVjaWFsKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlY2ltYWw6OmlzWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjp2
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppbnZlcnRTaWduKToKKwogMjAxMi0w
NS0yNyAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtX
VEZdIEludHJvZHVjZSBVSU5UNjRfQyB0byBNYXRoRXh0cmFzLmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggMmJhYThlY2MxZWIyMjAyZmI4MWIyMDgxNzgyMDYyM2E0ZDdjOTllYi4uZTU1
OWM3NzhkNjY5NzNhYTZiMzVmMGUyMjFkNWY5MmUwODVjOWQ4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wNS0yNCAgWW9zaGlmdW1pIElub3VlICA8
eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtQbGF0Zm9ybV0gSW50cm9kdWNlIERlY2lt
YWwgY2xhc3MgZm9yIE51bWJlci9SYW5nZSBpbnB1dCB0eXBlLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODczNjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZGVkIHVuaXQgdGVzdCBm
b3IgRGVjaW1hbCBjbGFzcy4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRl
c3RzL0RlY2ltYWxUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KTogT3V0cHV0IERlY2ltYWwgZm9yIHVuaXQgdGVzdCBkZWJ1Z2dpbmcKKyAgICAgICAgKERlY2lt
YWxUZXN0KToKKyAgICAgICAgKERlY2ltYWxTdGVwUmFuZ2UpOgorICAgICAgICAoRGVjaW1hbFRl
c3Q6OkRlY2ltYWxTdGVwUmFuZ2U6OkRlY2ltYWxTdGVwUmFuZ2UpOgorICAgICAgICAoRGVjaW1h
bFRlc3Q6OkRlY2ltYWxTdGVwUmFuZ2U6OmNsYW1wVmFsdWUpOgorICAgICAgICAoRGVjaW1hbFRl
c3Q6OkRlY2ltYWxUZXN0OjplbmNvZGUpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OkRlY2ltYWxU
ZXN0Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKERlY2ltYWxUZXN0OjpEZWNpbWFsVGVzdDo6c3Rl
cERvd24pOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OkRlY2ltYWxUZXN0OjpzdGVwVXApOgorICAg
ICAgICAoRGVjaW1hbFRlc3Q6OlRFU1RfRik6CisKIDIwMTItMDUtMjUgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUm9sbCBjaHJvbWl1bSBERVBTIGZyb20gcjEz
OTE1NiB0byByMTM5MTg0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5NGZmN2JjOGMwMTJlNTZl
Njk3MmE0MzQ0N2I0NDllYjVhMzczYzlmLi4zNzNmMjU5ZmNjZjk5OTFiMmJjMzhkMjE1MzA3NWE5
YjViNWMzZWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTEwNyw2ICsxMTA3LDcgQEAgU0VU
KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogICAgIHBsYXRm
b3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNw
cAorICAgIHBsYXRmb3JtL0RlY2ltYWwuY3BwCiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCiAg
ICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAogICAgIHBsYXRmb3JtL0V2ZW50VHJhY2VyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZjg4ZTY1NjNiNTJkYWMyZGJhYTM1YTli
ODJmY2UzNGQ1YzcxYmIyZi4uN2YyY2Q5MjFkMDg0NGNmMWRlM2M1MjY1ZmNiMjBjZGI2NWY0ODk3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zMTE1LDYgKzMxMTUsOCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RlY2ltYWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRHJhZ0RhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdl
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQppbmRleCBkMzkxYWZlMmY1ZmQyZjhlNWE0MDBlMjMzZWQ1OTA2ZjQ2
YmZlYTk5Li44Y2YxYjNlYzIzMjg2ZTkwODkxNWYxOTI0YzZiNmEzZWMwYWM1ZmVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKQEAgLTEwODMsNiArMTA4Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL0Nv
bnRlbnRUeXBlLmNwcCBcCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKICAg
ICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAgXAorICAgIHBsYXRmb3JtL0RlY2ltYWwuY3Bw
IFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL0RyYWdJbWFnZS5j
cHAgXAogICAgIHBsYXRmb3JtL0V2ZW50VHJhY2VyLmNwcCBcCkBAIC0yMjAwLDYgKzIyMDEsNyBA
QCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0Zm9y
bS9Dcm9zc1RocmVhZENvcGllci5oIFwKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oIFwK
KyAgICBwbGF0Zm9ybS9EZWNpbWFsLmggXAogICAgIHBsYXRmb3JtL0RyYWdEYXRhLmggXAogICAg
IHBsYXRmb3JtL0RyYWdJbWFnZS5oIFwKICAgICBwbGF0Zm9ybS9FdmVudFRyYWNlci5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBkZmI1NzlhZjA5OTUzZjEwNWU4ODE4YzQwZDdjMzdkMmJkM2M0Mzk0
Li4wYmM1ZmIxNDExNTc2MTljYzBjNjM0MmM0ODEyYmRlZGEzM2Y4Mjk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0yNzEsNiArMjcxLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWVzU3Ry
YXRlZ3kuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ3Vyc29yLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0RlY2lt
YWwuaCcKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFnRGF0YS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9EcmFnSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRXZlbnRUcmFjZXIu
aCcsCkBAIC0zMTQ5LDYgKzMxNTAsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL0Nyb3NzVGhy
ZWFkQ29waWVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0N1cnNvci5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vRGVjaW1hbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RyYWdEYXRhLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vRXZlbnRMb29wLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCA4NDRiOGQzZDA5OWUyZjFlMjNkOGQ0MTBkMmZkMDI0NTY2NGYzNzA1Li40
NWY5OTVmNmExNTliYTI3NzY5Nzk1MmQ1NzNhMWU1MGU0ODBlMWJhIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjc4MzUsNiArMjc4MzUsMTQg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cRGVjaW1hbC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERlY2ltYWwuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRHJhZ0RhdGEuY3BwIgogCQkJCT4K
IAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA3NDFiYzczZjc4ZDUyZTAzNTc3OGJlMmFjNTEwZTcwZThkNDE5YTIw
Li5kNGIyYjFiNzUzM2NhYzkwMjQxNTE2YTQ2NTVhYzIwNmQ4YTZjODZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTk0LDYg
KzExOTQsOCBAQAogCQk0NTBDRUJGMDE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBD
RUJFRTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi87IH07CiAJCTQ1
MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRjE1MDczQkJFMDAyQkIx
NDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQ1QkFDMkIwMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJMLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUJBQzJBRjEz
NjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTQ1RkVBNUNGMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVB
NUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAqLzsgfTsKKwkJNDVGRUE1RDAxNTZE
REU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNFMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDYxNEExRkUw
QjIzQThENjAwNDQ2RTFDIC8qIGNvcHlDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjE0QTFGRDBCMjNBOEQ2MDA0NDZFMUMgLyogY29w
eUN1cnNvci5wbmcgKi87IH07CiAJCTQ2NzAwRUQwMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3Jp
dGVyU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwICovOyB9Owog
CQk0NjcwMEVEMTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzAwRUNGMTI3Qjk2Q0IwMEY1
RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oICovOyB9OwpAQCAtODE5NSw2ICs4MTk3LDggQEAKIAkJ
NDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJl
bGFibGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhYmVsYWJs
ZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDVCQUMyQUYxMzYwQkJB
QjAwNURBMjU4IC8qIEljb25VUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SWNvblVSTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NUZFQTVDRDE1NkRERThD
MDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZWNpbWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDVGRUE1Q0Ux
NTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVjaW1hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjE0QTFGRDBC
MjNBOEQ2MDA0NDZFMUMgLyogY29weUN1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSBjb3B5Q3Vyc29yLnBu
Zzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3MDBFQ0UxMjdCOTZDQjAwRjVENUQ2
IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZpbGVXcml0ZXJTeW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3Jp
dGVyU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2NzAwRUNGMTI3Qjk2
Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGaWxlV3JpdGVyU3luYy5oOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVX
cml0ZXJTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDMyNCw2ICsyMDMy
OCw4IEBACiAJCQkJRjU4Nzg2ODQwMkRFM0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovLAogCQkJ
CUE1NzMyQjA4MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgKi8sCiAJCQkJ
QTU3MzJCMDkxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmggKi8sCisJCQkJNDVG
RUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwICovLAorCQkJCTQ1RkVBNUNFMTU2
RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggKi8sCiAJCQkJQTc5NTQ2NDIwQjVDNENCNDAwN0I0
MzhGIC8qIERyYWdEYXRhLmNwcCAqLywKIAkJCQlBN0I2RTY5RDBCMjkxQTk2MDBEMDUyOUYgLyog
RHJhZ0RhdGEuaCAqLywKIAkJCQlBN0NGQjNDRjBCN0VEMTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdl
LmNwcCAqLywKQEAgLTIyMDgzLDYgKzIyMDg5LDcgQEAKIAkJCQlGNTVCM0RCNjEyNTFGMTJEMDAz
RUYyNjkgLyogRGF0ZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjgxMjUx
RjEyRDAwM0VGMjY5IC8qIERhdGVUaW1lSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
NTVCM0RCQTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNDVGRUE1RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QzIyOEExMTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURv
Y3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRUNDRkMzQjE0MTk3M0Q1MDAyQTBB
QzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTYyQTQ1
MTEwMTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNTU3Nyw2ICsyNTU4NCw3IEBACiAJCQkJRjU1QjNEQjUxMjUxRjEyRDAwM0VGMjY5
IC8qIERhdGVJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQjcxMjUxRjEy
RDAwM0VGMjY5IC8qIERhdGVUaW1lSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1
NUIzREI5MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQ1RkVBNUNGMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4QzIyOEEyMTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0
YURvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDUwMTAxMTQ1QUUw
MERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMy
YjMyZGE1OWVlMTE2NzI5YzQ0MmMxMWRmZDkzM2RhNmUxOTMwNDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmNwcApAQCAtMCwwICsxLDEwMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVjaW1hbC5oIgorCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBEZWNpbWFsUHJpdmF0ZSB7CisKK3N0YXRpYyBpbnQgY29uc3Qg
RXhwb25lbnRNYXggPSAxMDIzOworc3RhdGljIGludCBjb25zdCBFeHBvbmVudE1pbiA9IC0xMDIz
Oworc3RhdGljIGludCBjb25zdCBQcmVjaXNpb24gPSAxODsKKworc3RhdGljIGNvbnN0IHVpbnQ2
NF90IE1heENvZWZmaWNpZW50ID0gVUlOVDY0X0MoMHgxNjM0NTc4NUQ4OUZGRkYpOyAvLyA5OTk5
OTk5OTk5OTk5OTk5OTkgPT0gMTggOSdzCisKKy8vIFRoaXMgY2xhc3MgaGFuZGxlcyBEZWNpbWFs
IHNwZWNpYWwgdmFsdWVzLgorY2xhc3MgU3BlY2lhbFZhbHVlSGFuZGxlciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU3BlY2lhbFZhbHVlSGFuZGxlcik7CitwdWJsaWM6CisgICAgZW51bSBI
YW5kbGVSZXN1bHQgeworICAgICAgICBCb3RoRmluaXRlLAorICAgICAgICBCb3RoaW5maW5pdHks
CisgICAgICAgIEVpdGhlck5hTiwKKyAgICAgICAgTEhTSXNpbmZpbml0eSwKKyAgICAgICAgUkhT
SXNpbmZpbml0eSwKKyAgICB9OworCisgICAgU3BlY2lhbFZhbHVlSGFuZGxlcihjb25zdCBEZWNp
bWFsJiBsaHMsIGNvbnN0IERlY2ltYWwmIHJocyk7CisgICAgSGFuZGxlUmVzdWx0IGhhbmRsZSgp
OworICAgIERlY2ltYWwgdmFsdWUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtIFJlc3Vs
dCB7CisgICAgICAgIFJlc3VsdElzTEhTLAorICAgICAgICBSZXN1bHRJc1JIUywKKyAgICAgICAg
UmVzdWx0SXNVbmtub3duLAorICAgIH07CisKKyAgICBjb25zdCBEZWNpbWFsJiBtX2xoczsKKyAg
ICBjb25zdCBEZWNpbWFsJiBtX3JoczsKKyAgICBSZXN1bHQgbV9yZXN1bHQ7Cit9OworCisvLyBU
aGlzIGNsYXNzIGlzIHVzZWQgZm9yIDEyOCBiaXQgdW5zaWduZWQgaW50ZWdlciBhcml0aG1ldGlj
LgorY2xhc3MgVUludDEyOCB7CitwdWJsaWM6CisgICAgVUludDEyOCh1aW50NjRfdCBsb3csIHVp
bnQ2NF90IGhpZ2gpOworCisgICAgVUludDEyOCYgb3BlcmF0b3IvPSh1aW50MzJfdCk7CisKKyAg
ICB1aW50NjRfdCBoaWdoKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CisgICAgdWludDY0X3Qg
bG93KCkgY29uc3QgeyByZXR1cm4gbV9sb3c7IH0KKworICAgIHN0YXRpYyBVSW50MTI4IG11bHRp
cGx5KHVpbnQ2NF90IGxvdywgdWludDY0X3QgaGlnaCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBp
c1plcm8oKSBjb25zdCB7IHJldHVybiAhbV9sb3cgJiYgIW1faGlnaDsgfQorCisgICAgdWludDY0
X3QgbV9oaWdoOworICAgIHVpbnQ2NF90IG1fbG93OworfTsKKworc3RhdGljIGludCBjb3VudERp
Z2l0cyh1aW50NjRfdCB4KQoreworICAgIGludCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgdWlu
dDY0X3QgcG93ZXJPZjEwID0gMTsKKyAgICB3aGlsZSAoeCA+PSBwb3dlck9mMTApIHsKKyAgICAg
ICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICAgICAgaWYgKHBvd2VyT2YxMCA+PSB1aW50NjRfdCgt
MSkgLyAxMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwb3dlck9mMTAgKj0gMTA7Cisg
ICAgfQorICAgIHJldHVybiBudW1iZXJPZkRpZ2l0czsKK30KKworc3RhdGljIHVpbnQ2NF90IG11
bHRpcGx5SGlnaCh1aW50NjRfdCB1LCB1aW50NjRfdCB2KQoreworICAgIGNvbnN0IGludCBuID0g
NjQ7CisgICAgY29uc3QgaW50IG4yID0gbiAvIDI7CisgICAgY29uc3QgdWludDY0X3QgbWFzayA9
ICh1aW50NjRfdCgxKSA8PCBuMikgLSAxOworICAgIHVpbnQ2NF90IHUwID0gdSAmIG1hc2s7Cisg
ICAgdWludDY0X3QgdTEgPSB1ID4+IG4yOworICAgIHVpbnQ2NF90IHYwID0gdiAmIG1hc2s7Cisg
ICAgdWludDY0X3QgdjEgPSB2ID4+IG4yOworICAgIHVpbnQ2NF90IHcwID0gdTAgKiB2MDsKKyAg
ICB1aW50NjRfdCB0dCA9IHUxICogdjAgKyAodzAgPj4gbjIpOworICAgIHVpbnQ2NF90IHcxID0g
dHQgJiBtYXNrOworICAgIHVpbnQ2NF90IHcyID0gdHQgPj4gbjI7CisgICAgdzEgPSB1MCAqIHYx
ICsgdzE7CisgICAgcmV0dXJuIHUxICogdjEgKyB3MiArICh3MSA+PiBuMik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgVCBwb3dlcihUIGNvbnN0IHgsIHVuc2lnbmVkIG4pCit7
CisgICAgVCB5ID0gMTsKKyAgICBUIHogPSB4OworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYg
KG4gJiAxKQorICAgICAgICAgICAgeSA9IHkgKiB6OworCisgICAgICAgIG4gPj49IDE7CisgICAg
ICAgIGlmICghbikKKyAgICAgICAgICAgIHJldHVybiB5OworCisgICAgICAgIHogPSB6ICogejsK
KyAgICB9Cit9CisKK3N0YXRpYyB1aW50NjRfdCBzY2FsZURvd24odWludDY0X3QgeCwgaW50IG4p
Cit7CisgICAgQVNTRVJUKG4gPj0gMCk7CisgICAgd2hpbGUgKG4gPiAwICYmIHgpIHsKKyAgICAg
ICAgeCAvPSAxMDsKKyAgICAgICAgLS1uOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKworc3Rh
dGljIHVpbnQ2NF90IHNjYWxlVXAodWludDY0X3QgeCwgaW50IG4pCit7CisgICAgQVNTRVJUKG4g
Pj0gMCk7CisgICAgQVNTRVJUKG4gPCBQcmVjaXNpb24pOworICAgIHVpbnQ2NF90IHJlc3VsdCA9
IHggKiBwb3dlcih1aW50NjRfdCgxMCksIG4pOworICAgIEFTU0VSVChyZXN1bHQgPj0geCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbFZhbHVlSGFuZGxlcjo6U3BlY2lhbFZhbHVl
SGFuZGxlcihjb25zdCBEZWNpbWFsJiBsaHMsIGNvbnN0IERlY2ltYWwmIHJocykKKyAgICA6IG1f
bGhzKGxocyksIG1fcmhzKHJocyksIG1fcmVzdWx0KFJlc3VsdElzVW5rbm93bikKK3sKK30KKwor
U3BlY2lhbFZhbHVlSGFuZGxlcjo6SGFuZGxlUmVzdWx0IFNwZWNpYWxWYWx1ZUhhbmRsZXI6Omhh
bmRsZSgpCit7CisgICAgaWYgKG1fbGhzLmlzRmluaXRlKCkgJiYgbV9yaHMuaXNGaW5pdGUoKSkK
KyAgICAgICAgcmV0dXJuIEJvdGhGaW5pdGU7CisKKyAgICBjb25zdCBEZWNpbWFsOjpGb3JtYXRD
bGFzcyBsaHNDbGFzcyA9IG1fbGhzLnZhbHVlKCkuZm9ybWF0Q2xhc3MoKTsKKyAgICBjb25zdCBE
ZWNpbWFsOjpGb3JtYXRDbGFzcyByaHNDbGFzcyA9IG1fcmhzLnZhbHVlKCkuZm9ybWF0Q2xhc3Mo
KTsKKyAgICBpZiAobGhzQ2xhc3MgPT0gRGVjaW1hbDo6Q2xhc3NOYU4pIHsKKyAgICAgICAgbV9y
ZXN1bHQgPSBSZXN1bHRJc0xIUzsKKyAgICAgICAgcmV0dXJuIEVpdGhlck5hTjsKKyAgICAgfQor
CisgICAgaWYgKHJoc0NsYXNzID09IERlY2ltYWw6OkNsYXNzTmFOKSB7CisgICAgICAgIG1fcmVz
dWx0ID0gUmVzdWx0SXNSSFM7CisgICAgICAgIHJldHVybiBFaXRoZXJOYU47CisgICAgIH0KKwor
ICAgIGlmIChsaHNDbGFzcyA9PSBEZWNpbWFsOjpDbGFzc0luZmluaXR5KQorICAgICAgICByZXR1
cm4gcmhzQ2xhc3MgPT0gRGVjaW1hbDo6Q2xhc3NJbmZpbml0eSA/IEJvdGhpbmZpbml0eSA6IExI
U0lzaW5maW5pdHk7CisKKyAgICBpZiAocmhzQ2xhc3MgPT0gRGVjaW1hbDo6Q2xhc3NJbmZpbml0
eSkKKyAgICAgICAgcmV0dXJuIFJIU0lzaW5maW5pdHk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gQm90aEZpbml0ZTsKK30KKworRGVjaW1hbCBTcGVjaWFsVmFsdWVI
YW5kbGVyOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3Jlc3VsdCkgeworICAgIGNh
c2UgUmVzdWx0SXNMSFM6CisgICAgICAgIHJldHVybiBtX2xoczsKKyAgICBjYXNlIFJlc3VsdElz
UkhTOgorICAgICAgICByZXR1cm4gbV9yaHM7CisgICAgY2FzZSBSZXN1bHRJc1Vua25vd246Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBtX2xoczsKKyAgICB9Cit9CisKK1VJbnQxMjg6OlVJbnQxMjgodWludDY0X3QgbG93LCB1aW50
NjRfdCBoaWdoKQorICAgIDogbV9oaWdoKGhpZ2gpLCBtX2xvdyhsb3cpCit7Cit9CisKK1VJbnQx
MjgmIFVJbnQxMjg6Om9wZXJhdG9yLz0oY29uc3QgdWludDMyX3QgZGl2aXNvcikKK3sKKyAgICBp
ZiAoIW1faGlnaCkgeworICAgICAgICBtX2xvdyAvPSBkaXZpc29yOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCisgICAgdWludDMyX3QgZGl2aWRlbmRbNF07CisgICAgZGl2aWRlbmRb
MF0gPSB1aW50MzJfdChtX2xvdyAmIHVpbnQzMl90KC0xKSk7CisgICAgZGl2aWRlbmRbMV0gPSB1
aW50MzJfdChtX2xvdyA+PiAzMik7CisgICAgZGl2aWRlbmRbMl0gPSB1aW50MzJfdChtX2hpZ2gg
JiB1aW50MzJfdCgtMSkpOworICAgIGRpdmlkZW5kWzNdID0gdWludDMyX3QobV9oaWdoID4+IDMy
KTsKKworICAgIHVpbnQzMl90IHF1b3RpZW50WzRdOworICAgIHVpbnQzMl90IHJlbWFpbmRlciA9
IDA7CisgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IHVp
bnQ2NF90IHdvcmsgPSAodWludDY0X3QocmVtYWluZGVyKSA8PCAzMikgfCBkaXZpZGVuZFtpXTsK
KyAgICAgICAgcmVtYWluZGVyID0gdWludDMyX3Qod29yayAlIGRpdmlzb3IpOworICAgICAgICBx
dW90aWVudFtpXSA9IHVpbnQzMl90KHdvcmsgLyBkaXZpc29yKTsKKyAgICB9CisgICAgbV9sb3cg
PSBxdW90aWVudFswXSB8ICh1aW50NjRfdChxdW90aWVudFsxXSkgPDwgMzIpOworICAgIG1faGln
aCA9IHF1b3RpZW50WzJdIHwgKHVpbnQ2NF90KHF1b3RpZW50WzNdKSA8PCAzMik7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitVSW50MTI4IFVJbnQxMjg6Om11bHRpcGx5KHVpbnQ2NF90IHUsIHVp
bnQ2NF90IHYpCit7CisgICAgcmV0dXJuIFVJbnQxMjgodSAqIHYsIG11bHRpcGx5SGlnaCh1LCB2
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERlY2ltYWxQcml2YXRlCisKK3VzaW5nIG5hbWVzcGFj
ZSBEZWNpbWFsUHJpdmF0ZTsKKworRGVjaW1hbDo6RW5jb2RlZERhdGE6OkVuY29kZWREYXRhKFNp
Z24gc2lnbiwgRm9ybWF0Q2xhc3MgZm9ybWF0Q2xhc3MpCisgICAgOiBtX2NvZWZmaWNpZW50KDAp
CisgICAgLCBtX2V4cG9uZW50KDApCisgICAgLCBtX2Zvcm1hdENsYXNzKGZvcm1hdENsYXNzKQor
ICAgICwgbV9zaWduKHNpZ24pCit7Cit9CisKK0RlY2ltYWw6OkVuY29kZWREYXRhOjpFbmNvZGVk
RGF0YShTaWduIHNpZ24sIGludCBleHBvbmVudCwgdWludDY0X3QgY29lZmZpY2llbnQpCisgICAg
OiBtX2Zvcm1hdENsYXNzKGNvZWZmaWNpZW50ID8gQ2xhc3NOb3JtYWwgOiBDbGFzc1plcm8pCisg
ICAgLCBtX3NpZ24oc2lnbikKK3sKKyAgICBpZiAoZXhwb25lbnQgPj0gRXhwb25lbnRNaW4gJiYg
ZXhwb25lbnQgPD0gRXhwb25lbnRNYXgpIHsKKyAgICAgICAgd2hpbGUgKGNvZWZmaWNpZW50ID49
IE1heENvZWZmaWNpZW50KSB7CisgICAgICAgICAgICBjb2VmZmljaWVudCAvPSAxMDsKKyAgICAg
ICAgICAgICsrZXhwb25lbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZXhwb25lbnQg
PiBFeHBvbmVudE1heCkgeworICAgICAgICBtX2NvZWZmaWNpZW50ID0gMDsKKyAgICAgICAgbV9l
eHBvbmVudCA9IDA7CisgICAgICAgIG1fZm9ybWF0Q2xhc3MgPSBDbGFzc0luZmluaXR5OworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV4cG9uZW50IDwgRXhwb25lbnRNaW4pIHsK
KyAgICAgICAgbV9jb2VmZmljaWVudCA9IDA7CisgICAgICAgIG1fZXhwb25lbnQgPSAwOworICAg
ICAgICBtX2Zvcm1hdENsYXNzID0gQ2xhc3NaZXJvOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9jb2VmZmljaWVudCA9IGNvZWZmaWNpZW50OworICAgIG1fZXhwb25lbnQgPSBpbnQx
Nl90KGV4cG9uZW50KTsKK30KKworYm9vbCBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6b3BlcmF0b3I9
PShjb25zdCBFbmNvZGVkRGF0YSYgYW5vdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaWdu
ID09IGFub3RoZXIubV9zaWduCisgICAgICAgICYmIG1fZm9ybWF0Q2xhc3MgPT0gYW5vdGhlci5t
X2Zvcm1hdENsYXNzCisgICAgICAgICYmIG1fZXhwb25lbnQgPT0gYW5vdGhlci5tX2V4cG9uZW50
CisgICAgICAgICYmIG1fY29lZmZpY2llbnQgPT0gYW5vdGhlci5tX2NvZWZmaWNpZW50OworfQor
CitEZWNpbWFsOjpEZWNpbWFsKGludDMyX3QgaTMyKQorICAgIDogbV9kYXRhKGkzMiA8IDAgPyBO
ZWdhdGl2ZSA6IFBvc2l0aXZlLCAwLCBpMzIgPCAwID8gdWludDMyX3QoLWkzMikgOiBpMzIpCit7
Cit9CisKK0RlY2ltYWw6OkRlY2ltYWwoU2lnbiBzaWduLCBpbnQgZXhwb25lbnQsIHVpbnQ2NF90
IGNvZWZmaWNpZW50KQorICAgIDogbV9kYXRhKHNpZ24sIGV4cG9uZW50LCBjb2VmZmljaWVudCkK
K3sKK30KKworRGVjaW1hbDo6RGVjaW1hbChjb25zdCBFbmNvZGVkRGF0YSYgZGF0YSkKKyAgICA6
IG1fZGF0YShkYXRhKQoreworfQorCitEZWNpbWFsOjpEZWNpbWFsKGNvbnN0IERlY2ltYWwmIG90
aGVyKQorICAgIDogbV9kYXRhKG90aGVyLm1fZGF0YSkKK3sKK30KKworRGVjaW1hbCYgRGVjaW1h
bDo6b3BlcmF0b3I9KGNvbnN0IERlY2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9IG90aGVy
Lm1fZGF0YTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0RlY2ltYWwmIERlY2ltYWw6Om9wZXJh
dG9yKz0oY29uc3QgRGVjaW1hbCYgb3RoZXIpCit7CisgICAgbV9kYXRhID0gKCp0aGlzICsgb3Ro
ZXIpLm1fZGF0YTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0RlY2ltYWwmIERlY2ltYWw6Om9w
ZXJhdG9yLT0oY29uc3QgRGVjaW1hbCYgb3RoZXIpCit7CisgICAgbV9kYXRhID0gKCp0aGlzIC0g
b3RoZXIpLm1fZGF0YTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0RlY2ltYWwmIERlY2ltYWw6
Om9wZXJhdG9yKj0oY29uc3QgRGVjaW1hbCYgb3RoZXIpCit7CisgICAgbV9kYXRhID0gKCp0aGlz
ICogb3RoZXIpLm1fZGF0YTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0RlY2ltYWwmIERlY2lt
YWw6Om9wZXJhdG9yLz0oY29uc3QgRGVjaW1hbCYgb3RoZXIpCit7CisgICAgbV9kYXRhID0gKCp0
aGlzIC8gb3RoZXIpLm1fZGF0YTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0RlY2ltYWwgRGVj
aW1hbDo6b3BlcmF0b3ItKCkgY29uc3QKK3sKKyAgICBEZWNpbWFsIHJlc3VsdCgqdGhpcyk7Cisg
ICAgcmVzdWx0Lm1fZGF0YS5zZXRTaWduKGludmVydFNpZ24obV9kYXRhLnNpZ24oKSkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IrKGNvbnN0IERl
Y2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsJiBsaHMgPSAqdGhpczsKKyAg
ICBjb25zdCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24gcmhzU2ln
biA9IHJocy5zaWduKCk7CisKKyAgICBTcGVjaWFsVmFsdWVIYW5kbGVyIGhhbmRsZXIobGhzLCBy
aHMpOworICAgIHN3aXRjaCAoaGFuZGxlci5oYW5kbGUoKSkgeworICAgIGNhc2UgU3BlY2lhbFZh
bHVlSGFuZGxlcjo6Qm90aEZpbml0ZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNwZWNp
YWxWYWx1ZUhhbmRsZXI6OkJvdGhpbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxoc1NpZ24gPT0g
cmhzU2lnbiA/IGxocyA6IG5hbigpOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpF
aXRoZXJOYU46CisgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlKCk7CisKKyAgICBjYXNlIFNw
ZWNpYWxWYWx1ZUhhbmRsZXI6OkxIU0lzaW5maW5pdHk6CisgICAgICAgIHJldHVybiBsaHM7CisK
KyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OlJIU0lzaW5maW5pdHk6CisgICAgICAgIHJl
dHVybiByaHM7CisgICAgfQorCisgICAgQVNTRVJUKGxocy5pc0Zpbml0ZSgpKTsKKyAgICBBU1NF
UlQocmhzLmlzRmluaXRlKCkpOworCisgICAgY29uc3QgaW50IGxoc0V4cG9uZW50ID0gbGhzLmV4
cG9uZW50KCk7CisgICAgY29uc3QgaW50IHJoc0V4cG9uZW50ID0gcmhzLmV4cG9uZW50KCk7Cisg
ICAgaW50IHJlc3VsdEV4cG9uZW50ID0gc3RkOjptaW4obGhzRXhwb25lbnQsIHJoc0V4cG9uZW50
KTsKKyAgICB1aW50NjRfdCBsaHNDb2VmZmljaWVudCA9IGxocy5tX2RhdGEuY29lZmZpY2llbnQo
KTsKKyAgICB1aW50NjRfdCByaHNDb2VmZmljaWVudCA9IHJocy5tX2RhdGEuY29lZmZpY2llbnQo
KTsKKworICAgIC8vIE1ha2UgY29lZmZpY2llbnQgYWxpZ25lZC4KKyAgICBpZiAobGhzRXhwb25l
bnQgPiByaHNFeHBvbmVudCkgeworICAgICAgICBjb25zdCBpbnQgbnVtYmVyT2ZMSFNEaWdpdHMg
PSBjb3VudERpZ2l0cyhsaHNDb2VmZmljaWVudCk7CisgICAgICAgIGlmIChudW1iZXJPZkxIU0Rp
Z2l0cykgeworICAgICAgICAgICAgY29uc3QgaW50IGxoc1NoaWZ0QW1vdW50ID0gbGhzRXhwb25l
bnQgLSByaHNFeHBvbmVudDsKKyAgICAgICAgICAgIGNvbnN0IGludCBvdmVyZmxvdyA9IG51bWJl
ck9mTEhTRGlnaXRzICsgbGhzU2hpZnRBbW91bnQgLSBQcmVjaXNpb247CisgICAgICAgICAgICBp
ZiAob3ZlcmZsb3cgPD0gMCkKKyAgICAgICAgICAgICAgICBsaHNDb2VmZmljaWVudCA9IHNjYWxl
VXAobGhzQ29lZmZpY2llbnQsIGxoc1NoaWZ0QW1vdW50KTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVVcChsaHNDb2VmZmljaWVudCwg
bGhzU2hpZnRBbW91bnQgLSBvdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgcmhzQ29lZmZpY2ll
bnQgPSBzY2FsZURvd24ocmhzQ29lZmZpY2llbnQsIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAg
ICByZXN1bHRFeHBvbmVudCArPSBvdmVyZmxvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgfSBpZiAobGhzRXhwb25lbnQgPCByaHNFeHBvbmVudCkgeworICAgICAgICBjb25zdCBp
bnQgbnVtYmVyT2ZSSFNEaWdpdHMgPSBjb3VudERpZ2l0cyhyaHNDb2VmZmljaWVudCk7CisgICAg
ICAgIGlmIChudW1iZXJPZlJIU0RpZ2l0cykgeworICAgICAgICAgICAgY29uc3QgaW50IHJoc1No
aWZ0QW1vdW50ID0gcmhzRXhwb25lbnQgLSBsaHNFeHBvbmVudDsKKyAgICAgICAgICAgIGNvbnN0
IGludCBvdmVyZmxvdyA9IG51bWJlck9mUkhTRGlnaXRzICsgcmhzU2hpZnRBbW91bnQgLSBQcmVj
aXNpb247CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPD0gMCkKKyAgICAgICAgICAgICAgICBy
aHNDb2VmZmljaWVudCA9IHNjYWxlVXAocmhzQ29lZmZpY2llbnQsIHJoc1NoaWZ0QW1vdW50KTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJoc0NvZWZmaWNpZW50ID0gc2Nh
bGVVcChyaHNDb2VmZmljaWVudCwgcmhzU2hpZnRBbW91bnQgLSBvdmVyZmxvdyk7CisgICAgICAg
ICAgICAgICAgbGhzQ29lZmZpY2llbnQgPSBzY2FsZURvd24obGhzQ29lZmZpY2llbnQsIG92ZXJm
bG93KTsKKyAgICAgICAgICAgICAgICByZXN1bHRFeHBvbmVudCArPSBvdmVyZmxvdzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHVpbnQ2NF90IGNvbnN0IHJlc3VsdCA9
IGxoc1NpZ24gPT0gcmhzU2lnbiA/IGxoc0NvZWZmaWNpZW50ICsgcmhzQ29lZmZpY2llbnQgOiBs
aHNDb2VmZmljaWVudCAtIHJoc0NvZWZmaWNpZW50OworICAgIHJldHVybiBsaHNTaWduID09IE5l
Z2F0aXZlICYmIHJoc1NpZ24gPT0gUG9zaXRpdmUgJiYgIXJlc3VsdAorICAgICAgICAgICAgPyBE
ZWNpbWFsKFBvc2l0aXZlLCByZXN1bHRFeHBvbmVudCwgMCkKKyAgICAgICAgICAgIDogaW50NjRf
dChyZXN1bHQpID49IDAKKyAgICAgICAgICAgICAgICA/IERlY2ltYWwobGhzU2lnbiwgcmVzdWx0
RXhwb25lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICA6IERlY2ltYWwoaW52ZXJ0U2lnbihs
aHNTaWduKSwgcmVzdWx0RXhwb25lbnQsIC1pbnQ2NF90KHJlc3VsdCkpOworfQorCitEZWNpbWFs
IERlY2ltYWw6Om9wZXJhdG9yLShjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29u
c3QgRGVjaW1hbCYgbGhzID0gKnRoaXM7CisgICAgY29uc3QgU2lnbiBsaHNTaWduID0gbGhzLnNp
Z24oKTsKKyAgICBjb25zdCBTaWduIHJoc1NpZ24gPSByaHMuc2lnbigpOworCisgICAgU3BlY2lh
bFZhbHVlSGFuZGxlciBoYW5kbGVyKGxocywgcmhzKTsKKyAgICBzd2l0Y2ggKGhhbmRsZXIuaGFu
ZGxlKCkpIHsKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhGaW5pdGU6CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoaW5maW5pdHk6
CisgICAgICAgIHJldHVybiBsaHNTaWduID09IHJoc1NpZ24gPyBuYW4oKSA6IGxoczsKKworICAg
IGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6RWl0aGVyTmFOOgorICAgICAgICByZXR1cm4gaGFu
ZGxlci52YWx1ZSgpOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpMSFNJc2luZmlu
aXR5OgorICAgICAgICByZXR1cm4gbGhzOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVy
OjpSSFNJc2luZmluaXR5OgorICAgICAgICByZXR1cm4gaW5maW5pdHkoaW52ZXJ0U2lnbihyaHNT
aWduKSk7CisgICAgfQorCisgICAgQVNTRVJUKGxocy5pc0Zpbml0ZSgpKTsKKyAgICBBU1NFUlQo
cmhzLmlzRmluaXRlKCkpOworCisgICAgdWludDY0X3QgbGhzQ29lZmZpY2llbnQgPSBsaHMubV9k
YXRhLmNvZWZmaWNpZW50KCk7CisgICAgdWludDY0X3QgcmhzQ29lZmZpY2llbnQgPSByaHMubV9k
YXRhLmNvZWZmaWNpZW50KCk7CisKKyAgICBjb25zdCBpbnQgbGhzRXhwb25lbnQgPSBsaHMuZXhw
b25lbnQoKTsKKyAgICBjb25zdCBpbnQgcmhzRXhwb25lbnQgPSByaHMuZXhwb25lbnQoKTsKKyAg
ICBpbnQgcmVzdWx0RXhwb25lbnQgPSBzdGQ6Om1pbihsaHNFeHBvbmVudCwgcmhzRXhwb25lbnQp
OworCisgICAgLy8gTWFrZSBjb2VmZmljaWVudCBhbGlnbmVkLgorICAgIGlmIChsaHNFeHBvbmVu
dCA+IHJoc0V4cG9uZW50KSB7CisgICAgICAgIGNvbnN0IGludCBudW1iZXJPZkxIU0RpZ2l0cyA9
IGNvdW50RGlnaXRzKGxoc0NvZWZmaWNpZW50KTsKKyAgICAgICAgaWYgKG51bWJlck9mTEhTRGln
aXRzKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgbGhzU2hpZnRBbW91bnQgPSBsaHNFeHBvbmVu
dCAtIHJoc0V4cG9uZW50OworICAgICAgICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0gbnVtYmVy
T2ZMSFNEaWdpdHMgKyBsaHNTaGlmdEFtb3VudCAtIFByZWNpc2lvbjsKKyAgICAgICAgICAgIGlm
IChvdmVyZmxvdyA8PSAwKQorICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVV
cChsaHNDb2VmZmljaWVudCwgbGhzU2hpZnRBbW91bnQpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgbGhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKGxoc0NvZWZmaWNpZW50LCBs
aHNTaGlmdEFtb3VudCAtIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICByaHNDb2VmZmljaWVu
dCA9IHNjYWxlRG93bihyaHNDb2VmZmljaWVudCwgb3ZlcmZsb3cpOworICAgICAgICAgICAgICAg
IHJlc3VsdEV4cG9uZW50ICs9IG92ZXJmbG93OworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICB9IGlmIChsaHNFeHBvbmVudCA8IHJoc0V4cG9uZW50KSB7CisgICAgICAgIGNvbnN0IGlu
dCBudW1iZXJPZlJIU0RpZ2l0cyA9IGNvdW50RGlnaXRzKHJoc0NvZWZmaWNpZW50KTsKKyAgICAg
ICAgaWYgKG51bWJlck9mUkhTRGlnaXRzKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcmhzU2hp
ZnRBbW91bnQgPSByaHNFeHBvbmVudCAtIGxoc0V4cG9uZW50OworICAgICAgICAgICAgY29uc3Qg
aW50IG92ZXJmbG93ID0gbnVtYmVyT2ZSSFNEaWdpdHMgKyByaHNTaGlmdEFtb3VudCAtIFByZWNp
c2lvbjsKKyAgICAgICAgICAgIGlmIChvdmVyZmxvdyA8PSAwKQorICAgICAgICAgICAgICAgIHJo
c0NvZWZmaWNpZW50ID0gc2NhbGVVcChyaHNDb2VmZmljaWVudCwgcmhzU2hpZnRBbW91bnQpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2Fs
ZVVwKHJoc0NvZWZmaWNpZW50LCByaHNTaGlmdEFtb3VudCAtIG92ZXJmbG93KTsKKyAgICAgICAg
ICAgICAgICBsaHNDb2VmZmljaWVudCA9IHNjYWxlRG93bihsaHNDb2VmZmljaWVudCwgb3ZlcmZs
b3cpOworICAgICAgICAgICAgICAgIHJlc3VsdEV4cG9uZW50ICs9IG92ZXJmbG93OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdWludDY0X3QgcmVzdWx0ID0gbGhzU2ln
biA9PSByaHNTaWduID8gbGhzQ29lZmZpY2llbnQgLSByaHNDb2VmZmljaWVudCA6IGxoc0NvZWZm
aWNpZW50ICsgcmhzQ29lZmZpY2llbnQ7CisgICAgcmV0dXJuIGxoc1NpZ24gPT0gTmVnYXRpdmUg
JiYgcmhzU2lnbiA9PSBOZWdhdGl2ZSAmJiAhcmVzdWx0CisgICAgICAgICAgICA/IERlY2ltYWwo
UG9zaXRpdmUsIHJlc3VsdEV4cG9uZW50LCAwKQorICAgICAgICAgICAgOiBpbnQ2NF90KHJlc3Vs
dCkgPj0gMAorICAgICAgICAgICAgICAgID8gRGVjaW1hbChsaHNTaWduLCByZXN1bHRFeHBvbmVu
dCwgcmVzdWx0KQorICAgICAgICAgICAgICAgIDogRGVjaW1hbChpbnZlcnRTaWduKGxoc1NpZ24p
LCByZXN1bHRFeHBvbmVudCwgLWludDY0X3QocmVzdWx0KSk7Cit9CisKK0RlY2ltYWwgRGVjaW1h
bDo6b3BlcmF0b3IqKGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNp
bWFsJiBsaHMgPSAqdGhpczsKKyAgICBjb25zdCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOwor
ICAgIGNvbnN0IFNpZ24gcmhzU2lnbiA9IHJocy5zaWduKCk7CisgICAgU2lnbiByZXN1bHRTaWdu
ID0gbGhzU2lnbiA9PSByaHNTaWduID8gUG9zaXRpdmUgOiBOZWdhdGl2ZTsKKworICAgIFNwZWNp
YWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhh
bmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOiB7Cisg
ICAgICAgIGNvbnN0IHVpbnQ2NF90IGxoc0NvZWZmaWNpZW50ID0gbGhzLm1fZGF0YS5jb2VmZmlj
aWVudCgpOworICAgICAgICBjb25zdCB1aW50NjRfdCByaHNDb2VmZmljaWVudCA9IHJocy5tX2Rh
dGEuY29lZmZpY2llbnQoKTsKKyAgICAgICAgaW50IHJlc3VsdEV4cG9uZW50ID0gbGhzLmV4cG9u
ZW50KCkgKyByaHMuZXhwb25lbnQoKTsKKyAgICAgICAgVUludDEyOCB3b3JrKFVJbnQxMjg6Om11
bHRpcGx5KGxoc0NvZWZmaWNpZW50LCByaHNDb2VmZmljaWVudCkpOworICAgICAgICB3aGlsZSAo
d29yay5oaWdoKCkpIHsKKyAgICAgICAgICB3b3JrIC89IDEwOworICAgICAgICAgICsrcmVzdWx0
RXhwb25lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIERlY2ltYWwocmVzdWx0U2lnbiwg
cmVzdWx0RXhwb25lbnQsIHdvcmsubG93KCkpOworICAgIH0KKworICAgIGNhc2UgU3BlY2lhbFZh
bHVlSGFuZGxlcjo6Qm90aGluZmluaXR5OgorICAgICAgICByZXR1cm4gaW5maW5pdHkocmVzdWx0
U2lnbik7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAg
ICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxl
cjo6TEhTSXNpbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHJocy5pc1plcm8oKSA/IG5hbigpIDog
aW5maW5pdHkocmVzdWx0U2lnbik7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OlJI
U0lzaW5maW5pdHk6CisgICAgICAgIHJldHVybiBsaHMuaXNaZXJvKCkgPyBuYW4oKSA6IGluZmlu
aXR5KHJlc3VsdFNpZ24pOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBuYW4oKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRvci8oY29uc3QgRGVj
aW1hbCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9ICp0aGlzOworICAg
IGNvbnN0IFNpZ24gbGhzU2lnbiA9IGxocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByaHNTaWdu
ID0gcmhzLnNpZ24oKTsKKyAgICBTaWduIHJlc3VsdFNpZ24gPSBsaHNTaWduID09IHJoc1NpZ24g
PyBQb3NpdGl2ZSA6IE5lZ2F0aXZlOworCisgICAgU3BlY2lhbFZhbHVlSGFuZGxlciBoYW5kbGVy
KGxocywgcmhzKTsKKyAgICBzd2l0Y2ggKGhhbmRsZXIuaGFuZGxlKCkpIHsKKyAgICBjYXNlIFNw
ZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhGaW5pdGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoaW5maW5pdHk6CisgICAgICAgIHJldHVybiBuYW4o
KTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6RWl0aGVyTmFOOgorICAgICAgICBy
ZXR1cm4gaGFuZGxlci52YWx1ZSgpOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpM
SFNJc2luZmluaXR5OgorICAgICAgICByZXR1cm4gaW5maW5pdHkocmVzdWx0U2lnbik7CisKKyAg
ICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OlJIU0lzaW5maW5pdHk6CisgICAgICAgIHJldHVy
biB6ZXJvKHJlc3VsdFNpZ24pOworICAgIH0KKworICAgIEFTU0VSVChsaHMuaXNGaW5pdGUoKSk7
CisgICAgQVNTRVJUKHJocy5pc0Zpbml0ZSgpKTsKKworICAgIGlmIChyaHMuaXNaZXJvKCkpCisg
ICAgICAgIHJldHVybiBsaHMuaXNaZXJvKCkgPyBuYW4oKSA6IGluZmluaXR5KHJlc3VsdFNpZ24p
OworCisgICAgaW50IHJlc3VsdEV4cG9uZW50ID0gbGhzLmV4cG9uZW50KCkgLSByaHMuZXhwb25l
bnQoKTsKKworICAgIGlmIChsaHMuaXNaZXJvKCkpIHsKKyAgICAgICAgLy8gMC9ub24temVybyA9
PiAwCisgICAgICAgIHJldHVybiBEZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3VsdEV4cG9uZW50LCAw
KTsKKyAgICB9CisKKyAgICB1aW50NjRfdCByZW1haW5kZXIgPSBsaHMubV9kYXRhLmNvZWZmaWNp
ZW50KCk7CisgICAgY29uc3QgdWludDY0X3QgZGl2aXNvciA9IHJocy5tX2RhdGEuY29lZmZpY2ll
bnQoKTsKKyAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgIHdoaWxlIChyZXN1bHQgPCBNYXhD
b2VmZmljaWVudCAvIDEwMCkgeworICAgICAgICB3aGlsZSAocmVtYWluZGVyIDwgZGl2aXNvcikg
eworICAgICAgICAgICAgcmVtYWluZGVyICo9IDEwOworICAgICAgICAgICAgcmVzdWx0ICo9IDEw
OworICAgICAgICAgICAgLS1yZXN1bHRFeHBvbmVudDsKKyAgICAgICAgfQorICAgICAgICByZXN1
bHQgKz0gcmVtYWluZGVyIC8gZGl2aXNvcjsKKyAgICAgICAgcmVtYWluZGVyICU9IGRpdmlzb3I7
CisgICAgICAgIGlmICghcmVtYWluZGVyKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKHJlbWFpbmRlciA+IGRpdmlzb3IgLyAyKQorICAgICAgICArK3Jlc3VsdDsKKworICAg
IHJldHVybiBEZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3VsdEV4cG9uZW50LCByZXN1bHQpOworfQor
Citib29sIERlY2ltYWw6Om9wZXJhdG9yPT0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAorewor
ICAgIHJldHVybiBtX2RhdGEgPT0gcmhzLm1fZGF0YSB8fCBjb21wYXJlVG8ocmhzKS5pc1plcm8o
KTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvciE9KGNvbnN0IERlY2ltYWwmIHJocykgY29u
c3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmhzKTsKK30KKworYm9vbCBEZWNpbWFsOjpv
cGVyYXRvcjwoY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIHJldHVybiAhb3BlcmF0
b3I+PShyaHMpOworfQorCitib29sIERlY2ltYWw6Om9wZXJhdG9yPD0oY29uc3QgRGVjaW1hbCYg
cmhzKSBjb25zdAoreworICAgIGlmIChtX2RhdGEgPT0gcmhzLm1fZGF0YSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgY29uc3QgRGVjaW1hbCByZXN1bHQgPSBjb21wYXJlVG8ocmhzKTsKKyAg
ICByZXR1cm4gcmVzdWx0LmlzWmVybygpIHx8IHJlc3VsdC5pc05lZ2F0aXZlKCk7Cit9CisKK2Jv
b2wgRGVjaW1hbDo6b3BlcmF0b3I+KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIW9wZXJhdG9yPD0ocmhzKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvcj49KGNv
bnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBpZiAobV9kYXRhID09IHJocy5tX2RhdGEp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IERlY2ltYWwgcmVzdWx0ID0gY29tcGFy
ZVRvKHJocyk7CisgICAgcmV0dXJuIHJlc3VsdC5pc1plcm8oKSB8fCAhcmVzdWx0LmlzTmVnYXRp
dmUoKTsKK30KKworaW50IERlY2ltYWw6OmV4cG9uZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aXNGaW5pdGUoKSA/IG1fZGF0YS5leHBvbmVudCgpIDogMDsKK30KKworRGVjaW1hbDo6U2lnbiBE
ZWNpbWFsOjpzaWduKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLnNpZ24oKTsKK30KKwor
RGVjaW1hbCBEZWNpbWFsOjphYnMoKSBjb25zdAoreworICAgIERlY2ltYWwgcmVzdWx0KCp0aGlz
KTsKKyAgICByZXN1bHQubV9kYXRhLnNldFNpZ24oUG9zaXRpdmUpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKy8vIFJvdW5kIHRvd2FyZCBwb3NpdGl2ZSBpbmZpbml0eS4KKy8vIE5vdGU6IE1h
YyBwb3J0cyBkZWZpbmVzIGNlaWwoeCkgYXMgd3RmX2NlaWwoeCksIHNvIHdlIGNhbid0IHVzZSBu
YW1lICJjZWlsIiBoZXJlLgorRGVjaW1hbCBEZWNpbWFsOjpjZWlsaW5nKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNTcGVjaWFsKCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlmIChleHBv
bmVudCgpID49IDApCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIHVpbnQ2NF90IHJlc3Vs
dCA9IG1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRpZ2l0cyA9
IGNvdW50RGlnaXRzKHJlc3VsdCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRHJvcERpZ2l0cyA9
IC1leHBvbmVudCgpOworICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IG51bWJlck9mRHJvcERpZ2l0
cykKKyAgICAgICAgcmV0dXJuIHplcm8oUG9zaXRpdmUpOworCisgICAgcmVzdWx0ID0gc2NhbGVE
b3duKHJlc3VsdCwgbnVtYmVyT2ZEcm9wRGlnaXRzIC0gMSk7CisgICAgaWYgKHNpZ24oKSA9PSBQ
b3NpdGl2ZSAmJiByZXN1bHQgJSAxMCA+IDApCisgICAgICAgIHJlc3VsdCArPSAxMDsKKyAgICBy
ZXN1bHQgLz0gMTA7CisgICAgcmV0dXJuIERlY2ltYWwoc2lnbigpLCAwLCByZXN1bHQpOworfQor
CitEZWNpbWFsIERlY2ltYWw6OmNvbXBhcmVUbyhjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7
CisgICAgY29uc3QgRGVjaW1hbCByZXN1bHQoKnRoaXMgLSByaHMpOworICAgIHJldHVybiByZXN1
bHQuaXNaZXJvKCkKKyAgICAgICAgICAgID8gemVybyhQb3NpdGl2ZSkKKyAgICAgICAgICAgIDog
cmVzdWx0LmlzRmluaXRlKCkKKyAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQKKyAgICAgICAg
ICAgICAgICAgICAgOiByZXN1bHQuaXNOZWdhdGl2ZSgpID8gRGVjaW1hbCgtMSkgOiBEZWNpbWFs
KDEpOworfQorCisvLyBSb3VuZCB0b3dhcmQgbmVnYXRpdmUgaW5maW5pdHkuCitEZWNpbWFsIERl
Y2ltYWw6OmZsb29yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNTcGVjaWFsKCkpCisgICAgICAgIHJl
dHVybiAqdGhpczsKKworICAgIGlmIChleHBvbmVudCgpID49IDApCisgICAgICAgIHJldHVybiAq
dGhpczsKKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IG1fZGF0YS5jb2VmZmljaWVudCgpOworICAg
IGNvbnN0IGludCBudW1iZXJPZkRpZ2l0cyA9IGNvdW50RGlnaXRzKHJlc3VsdCk7CisgICAgY29u
c3QgaW50IG51bWJlck9mRHJvcERpZ2l0cyA9IC1leHBvbmVudCgpOworICAgIGlmIChudW1iZXJP
ZkRpZ2l0cyA8IG51bWJlck9mRHJvcERpZ2l0cykKKyAgICAgICAgcmV0dXJuIHplcm8oUG9zaXRp
dmUpOworCisgICAgcmVzdWx0ID0gc2NhbGVEb3duKHJlc3VsdCwgbnVtYmVyT2ZEcm9wRGlnaXRz
IC0gMSk7CisgICAgaWYgKGlzTmVnYXRpdmUoKSAmJiByZXN1bHQgJSAxMCA+IDApCisgICAgICAg
IHJlc3VsdCArPSAxMDsKKyAgICByZXN1bHQgLz0gMTA7CisgICAgcmV0dXJuIERlY2ltYWwoc2ln
bigpLCAwLCByZXN1bHQpOworfQorCitEZWNpbWFsIERlY2ltYWw6OmZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHIpCit7CisgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICBTaWduIGV4cG9uZW50
U2lnbiA9IFBvc2l0aXZlOworICAgIGludCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgaW50IG51
bWJlck9mRGlnaXRzQWZ0ZXJEb3QgPSAwOworICAgIGludCBudW1iZXJPZkV4dHJhRGlnaXRzID0g
MDsKKyAgICBTaWduIHNpZ24gPSBQb3NpdGl2ZTsKKworICAgIGVudW0geworICAgICAgICBTdGF0
ZURpZ2l0LAorICAgICAgICBTdGF0ZURvdCwKKyAgICAgICAgU3RhdGVEb3REaWdpdCwKKyAgICAg
ICAgU3RhdGVFLAorICAgICAgICBTdGF0ZUVEaWdpdCwKKyAgICAgICAgU3RhdGVFU2lnbiwKKyAg
ICAgICAgU3RhdGVTaWduLAorICAgICAgICBTdGF0ZVN0YXJ0LAorICAgICAgICBTdGF0ZVplcm8s
CisgICAgfSBzdGF0ZSA9IFN0YXRlU3RhcnQ7CisKKyAgICAjZGVmaW5lIEhhbmRsZUNoYXJBbmRC
cmVhayhjaDEsIG5leHQsIC4uLikgXAorICAgICAgICBpZiAoY2ggPT0gY2gxIHx8IGNoID09IGNo
MSAtICdBJyArICdhJykgeyBcCisgICAgICAgICAgICBfX1ZBX0FSR1NfXzsgXAorICAgICAgICAg
ICAgc3RhdGUgPSBuZXh0OyBcCisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9CisKKyAg
ICB1aW50NjRfdCBhY2N1bXVsYXRvciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgc3RyLmxlbmd0aCgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IGludCBjaCA9
IHN0cltpbmRleF07CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0
ZURpZ2l0OgorICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBQcmVjaXNpb24pIHsKKyAgICAgICAgICAg
ICAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0
b3IgKj0gMTA7CisgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGNoIC0gJzAnOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRXh0
cmFEaWdpdHM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChjaCA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRG90
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBI
YW5kbGVDaGFyQW5kQnJlYWsoJ0UnLCBTdGF0ZUUpOworICAgICAgICAgICAgcmV0dXJuIG5hbigp
OworCisgICAgICAgIGNhc2UgU3RhdGVEb3Q6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYm
IGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IFByZWNp
c2lvbikgeworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRzOworICAgICAgICAg
ICAgICAgICAgICArK251bWJlck9mRGlnaXRzQWZ0ZXJEb3Q7CisgICAgICAgICAgICAgICAgICAg
IGFjY3VtdWxhdG9yICo9IDEwOworICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBj
aCAtICcwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZURvdERpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgU3RhdGVEb3REaWdpdDoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2gg
PD0gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgUHJlY2lzaW9u
KSB7CisgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7CisgICAgICAgICAgICAg
ICAgICAgICsrbnVtYmVyT2ZEaWdpdHNBZnRlckRvdDsKKyAgICAgICAgICAgICAgICAgICAgYWNj
dW11bGF0b3IgKj0gMTA7CisgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGNoIC0g
JzAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgSGFuZGxlQ2hhckFuZEJyZWFrKCdFJywgU3RhdGVFKTsKKyAg
ICAgICAgICAgIHJldHVybiBuYW4oKTsKKworICAgICAgICBjYXNlIFN0YXRlRToKKyAgICAgICAg
ICAgIGlmIChjaCA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICBleHBvbmVudFNpZ24gPSBQb3Np
dGl2ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRVNpZ247CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLScpIHsK
KyAgICAgICAgICAgICAgICBleHBvbmVudFNpZ24gPSBOZWdhdGl2ZTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlRVNpZ247CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAg
ICAgICAgICAgZXhwb25lbnQgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlRURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0ZUVEaWdpdDoKKyAgICAg
ICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZXhw
b25lbnQgKj0gMTA7CisgICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gY2ggLSAnMCc7CisgICAg
ICAgICAgICAgICAgaWYgKGV4cG9uZW50ID4gRXhwb25lbnRNYXggKyBQcmVjaXNpb24pCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBleHBvbmVudFNpZ24gPT0gTmVnYXRpdmUgPyB6ZXJvKFBv
c2l0aXZlKSA6IGluZmluaXR5KHNpZ24pOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVF
RGlnaXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBuYW4oKTsKKworICAgICAgICBjYXNlIFN0YXRlRVNpZ246CisgICAgICAgICAg
ICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGV4cG9uZW50
ID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5h
bigpOworCisgICAgICAgIGNhc2UgU3RhdGVTaWduOgorICAgICAgICAgICAgaWYgKGNoID09ICcw
JykgeworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVaZXJvOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPj0gJzEnICYmIGNo
IDw9ICc5JykgeworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2ggLSAnMCc7CisgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZEaWdpdHMgPSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVTdGFydDoKKyAgICAg
ICAgICAgIGlmIChjaCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlWmVy
bzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGNoID49ICcxJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRv
ciA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIG51bWJlck9mRGlnaXRzID0gMTsKKyAgICAg
ICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRGlnaXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLScpIHsKKyAgICAgICAgICAg
ICAgICBzaWduID0gTmVnYXRpdmU7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVNpZ247
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChjaCA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICBzaWduID0gUG9zaXRpdmU7CisgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZVNpZ247CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLicpIHsKKyAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlRG90OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0ZVplcm86
CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBpZiAoY2ggPj0gJzEnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAg
IGFjY3VtdWxhdG9yID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZEaWdpdHMg
PSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVEaWdpdDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09ICcuJykgewor
ICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVEb3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEhhbmRsZUNoYXJBbmRCcmVhaygnRScsIFN0
YXRlRSk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIG5hbigp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXRlID09IFN0YXRlWmVybykKKyAgICAg
ICAgcmV0dXJuIHplcm8oc2lnbik7CisKKyAgICBpZiAoc3RhdGUgPT0gU3RhdGVEaWdpdCB8fCBz
dGF0ZSA9PSBTdGF0ZUVEaWdpdCB8fCBzdGF0ZSA9PSBTdGF0ZURvdERpZ2l0KSB7CisgICAgICAg
IGludCByZXN1bHRFeHBvbmVudCA9IGV4cG9uZW50ICogKGV4cG9uZW50U2lnbiA9PSBOZWdhdGl2
ZSA/IC0xIDogMSkgLSBudW1iZXJPZkRpZ2l0c0FmdGVyRG90ICsgbnVtYmVyT2ZFeHRyYURpZ2l0
czsKKyAgICAgICAgaWYgKHJlc3VsdEV4cG9uZW50IDwgRXhwb25lbnRNaW4pCisgICAgICAgICAg
ICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0g
cmVzdWx0RXhwb25lbnQgLSBFeHBvbmVudE1heCArIDE7CisgICAgICAgIGlmIChvdmVyZmxvdyA+
IDApIHsKKyAgICAgICAgICAgIGlmIChvdmVyZmxvdyArIG51bWJlck9mRGlnaXRzIC0gbnVtYmVy
T2ZEaWdpdHNBZnRlckRvdCA+IFByZWNpc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5m
aW5pdHkoc2lnbik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IHNjYWxlVXAoYWNjdW11bGF0
b3IsIG92ZXJmbG93KTsKKyAgICAgICAgICAgIHJlc3VsdEV4cG9uZW50IC09IG92ZXJmbG93Owor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIERlY2ltYWwoc2lnbiwgcmVzdWx0RXhwb25lbnQs
IGFjY3VtdWxhdG9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFuKCk7Cit9CisKK0RlY2ltYWwg
RGVjaW1hbDo6aW5maW5pdHkoY29uc3QgU2lnbiBzaWduKQoreworICAgIHJldHVybiBEZWNpbWFs
KEVuY29kZWREYXRhKHNpZ24sIENsYXNzSW5maW5pdHkpKTsKK30KKworRGVjaW1hbCBEZWNpbWFs
OjpuYW4oKQoreworICAgIHJldHVybiBEZWNpbWFsKEVuY29kZWREYXRhKFBvc2l0aXZlLCBDbGFz
c05hTikpOworfQorCitEZWNpbWFsIERlY2ltYWw6OnJlbWFpbmRlcihjb25zdCBEZWNpbWFsJiBy
aHMpIGNvbnN0Cit7CisgICAgY29uc3QgRGVjaW1hbCBxdW90aWVudCA9ICgqdGhpcyAvIHJocyku
cm91bmQoKTsKKyAgICByZXR1cm4gcXVvdGllbnQuaXNTcGVjaWFsKCkgPyBxdW90aWVudCA6ICp0
aGlzIC0gcXVvdGllbnQgKiByaHM7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6cm91bmQoKSBjb25z
dAoreworICAgIGlmIChpc1NwZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAg
aWYgKGV4cG9uZW50KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgdWludDY0
X3QgcmVzdWx0ID0gbV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50IG51bWJlck9m
RGlnaXRzID0gY291bnREaWdpdHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEcm9w
RGlnaXRzID0gLWV4cG9uZW50KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgbnVtYmVyT2ZE
cm9wRGlnaXRzKQorICAgICAgICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICByZXN1bHQg
PSBzY2FsZURvd24ocmVzdWx0LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBpZiAocmVz
dWx0ICUgMTAgPj0gNSkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsK
KyAgICByZXR1cm4gRGVjaW1hbChzaWduKCksIDAsIHJlc3VsdCk7Cit9CisKK1N0cmluZyBEZWNp
bWFsOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2RhdGEuZm9ybWF0Q2xhc3Mo
KSkgeworICAgIGNhc2UgQ2xhc3NJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHNpZ24oKSA/ICIt
SW5maW5pdHkiIDogIkluZmluaXR5IjsKKworICAgIGNhc2UgQ2xhc3NOYU46CisgICAgICAgIHJl
dHVybiBzaWduKCkgPyAiLU5hTiIgOiAiTmFOIjsKKworICAgIGNhc2UgQ2xhc3NOb3JtYWw6Cisg
ICAgY2FzZSBDbGFzc1plcm86CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgaWYgKHNpZ24oKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJy0nKTsKKworICAgIGludCBvcmlnaW5hbEV4cG9uZW50ID0gZXhwb25lbnQoKTsK
KworICAgIGNvbnN0IGludCBtYXhEaWdpdHMgPSBEQkxfRElHOworICAgIHVpbnQ2NF90IGNvZWZm
aWNpZW50ID0gbV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgaW50IGxhc3REaWdpdCA9IDA7Cisg
ICAgd2hpbGUgKGNvdW50RGlnaXRzKGNvZWZmaWNpZW50KSA+IG1heERpZ2l0cykgeworICAgICAg
ICBsYXN0RGlnaXQgPSBjb2VmZmljaWVudCAlIDEwOworICAgICAgICBjb2VmZmljaWVudCAvPSAx
MDsKKyAgICAgICAgKytvcmlnaW5hbEV4cG9uZW50OworICAgIH0KKworICAgIGlmIChsYXN0RGln
aXQgPj0gNSkKKyAgICAgICAgKytjb2VmZmljaWVudDsKKworICAgIHdoaWxlIChvcmlnaW5hbEV4
cG9uZW50IDwgMCAmJiBjb2VmZmljaWVudCAmJiAhKGNvZWZmaWNpZW50ICUgMTApKSB7CisgICAg
ICAgIGNvZWZmaWNpZW50IC89IDEwOworICAgICAgICArK29yaWdpbmFsRXhwb25lbnQ7CisgICAg
fQorCisgICAgY29uc3QgU3RyaW5nIGRpZ2l0cyA9IFN0cmluZzo6bnVtYmVyKGNvZWZmaWNpZW50
KTsKKyAgICBpbnQgY29lZmZpY2llbnRMZW5ndGggPSBpbnQoZGlnaXRzLmxlbmd0aCgpKTsKKyAg
ICBjb25zdCBpbnQgYWRqdXN0ZWRFeHBvbmVudCA9IG9yaWdpbmFsRXhwb25lbnQgKyBjb2VmZmlj
aWVudExlbmd0aCAtIDE7CisgICAgaWYgKG9yaWdpbmFsRXhwb25lbnQgPD0gMCAmJiBhZGp1c3Rl
ZEV4cG9uZW50ID49IC02KSB7CisgICAgICAgIGlmICghb3JpZ2luYWxFeHBvbmVudCkgeworICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoZGlnaXRzKTsKKyAgICAgICAgICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWRqdXN0ZWRFeHBvbmVu
dCA+PSAwKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvZWZmaWNpZW50TGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHNbaV0pOwor
ICAgICAgICAgICAgICAgIGlmIChpID09IGFkanVzdGVkRXhwb25lbnQpCisgICAgICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIjAuIik7CisgICAgICAgIGZvciAoaW50IGkgPSBhZGp1c3RlZEV4cG9uZW50ICsgMTsg
aSA8IDA7ICsraSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcwJyk7CisKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoZGlnaXRzKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGRpZ2l0c1swXSk7CisgICAgICAgIHdoaWxlIChjb2VmZmljaWVudExlbmd0aCA+PSAy
ICYmIGRpZ2l0c1tjb2VmZmljaWVudExlbmd0aCAtIDFdID09ICcwJykKKyAgICAgICAgICAgIC0t
Y29lZmZpY2llbnRMZW5ndGg7CisgICAgICAgIGlmIChjb2VmZmljaWVudExlbmd0aCA+PSAyKSB7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPCBjb2VmZmljaWVudExlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGRpZ2l0c1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWRqdXN0ZWRF
eHBvbmVudCkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYWRqdXN0ZWRFeHBvbmVudCA8
IDAgPyAiZSIgOiAiZSsiKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVt
YmVyKGFkanVzdGVkRXhwb25lbnQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOworfQorCitEZWNpbWFsIERlY2ltYWw6Onplcm8oU2lnbiBzaWduKQor
eworICAgIHJldHVybiBEZWNpbWFsKEVuY29kZWREYXRhKHNpZ24sIENsYXNzWmVybykpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9EZWNpbWFsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODJkZjM2YzkxYjFkZDEwMDllNzQyNDg3ZDE0OWExNGRiNzJkOWUwMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuaApAQCAtMCwwICsxLDE0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaWZuZGVmIERlY2ltYWxfaAorI2RlZmluZSBEZWNpbWFsX2gKKworI2luY2x1ZGUgPHN0ZGlu
dC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBkZWNpbWFsIGJhc2UgZmxvYXRpbmcgcG9p
bnQgbnVtYmVyLgorLy8KKy8vIEZJWE1FOiBPbmNlIGFsbCBDKysgY29tcGlsZXIgc3VwcG9ydCBk
ZWNpbWFsIHR5cGUsIHdlIHNob3VsZCByZXBsYWNlIHRoaXMKKy8vIGNsYXNzIHRvIGNvbXBpbGVy
IHN1cHBvcnRlZCBvbmUuIFNlZSBiZWxvdyBVUkkgZm9yIGN1cnJlbnQgc3RhdHVzIG9mIGRlY2lt
YWwKKy8vIHR5cGUgZm9yIEMrKzogLy8gaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIy
L3dnMjEvZG9jcy9wYXBlcnMvMjAwNi9uMTk3Ny5odG1sCitjbGFzcyBEZWNpbWFsIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFNpZ24geworICAgICAgICBQb3NpdGl2ZSwKKyAgICAgICAgTmVnYXRpdmUs
CisgICAgfTsKKworICAgIC8vIFlvdSBzaG91bGQgbm90IHVzZSBGb3JtYXRDbGFzcy4gVGhpcyBp
cyBmb3IgaW1wbGVtZW50YXRpb24uCisgICAgZW51bSBGb3JtYXRDbGFzcyB7CisgICAgICAgIENs
YXNzSW5maW5pdHksCisgICAgICAgIENsYXNzTm9ybWFsLAorICAgICAgICBDbGFzc05hTiwKKyAg
ICAgICAgQ2xhc3NaZXJvLAorICAgIH07CisKKyAgICAvLyBZb3Ugc2hvdWxkIG5vdCB1c2UgRW5j
b2RlZERhdGEgb3RoZXIgdGhhbiB1bml0IHRlc3RpbmcuCisgICAgY2xhc3MgRW5jb2RlZERhdGEg
eworICAgIHB1YmxpYzoKKyAgICAgICAgRW5jb2RlZERhdGEoU2lnbiwgRm9ybWF0Q2xhc3MpOwor
ICAgICAgICBFbmNvZGVkRGF0YShTaWduLCBpbnQgZXhwb25lbnQsIHVpbnQ2NF90IGNvZWZmaWNp
ZW50KTsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRW5jb2RlZERhdGEmKSBjb25z
dDsKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEVuY29kZWREYXRhJiBhbm90aGVyKSBj
b25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShhbm90aGVyKTsgfQorCisgICAgICAgIHVpbnQ2NF90
IGNvZWZmaWNpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb2VmZmljaWVudDsgfQorICAgICAgICBp
bnQgY291bnREaWdpdHMoKSBjb25zdDsKKyAgICAgICAgaW50IGV4cG9uZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBvbmVudDsgfQorICAgICAgICBGb3JtYXRDbGFzcyBmb3JtYXRDbGFzcygpIGNv
bnN0IHsgcmV0dXJuIG1fZm9ybWF0Q2xhc3M7IH0KKyAgICAgICAgYm9vbCBpc0Zpbml0ZSgpIGNv
bnN0IHsgcmV0dXJuICFpc1NwZWNpYWwoKTsgfQorICAgICAgICBib29sIGlzU3BlY2lhbCgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9ybWF0Q2xhc3MgPT0gQ2xhc3NJbmZpbml0eSB8fCBtX2Zvcm1hdENs
YXNzID09IENsYXNzTmFOOyB9CisgICAgICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4g
bV9mb3JtYXRDbGFzcyA9PSBDbGFzc1plcm87IH0KKyAgICAgICAgU2lnbiBzaWduKCkgY29uc3Qg
eyByZXR1cm4gbV9zaWduOyB9CisgICAgICAgIHZvaWQgc2V0U2lnbihTaWduIHNpZ24pIHsgbV9z
aWduID0gc2lnbjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdWludDY0X3QgbV9jb2VmZmlj
aWVudDsKKyAgICAgICAgaW50MTZfdCBtX2V4cG9uZW50OworICAgICAgICBGb3JtYXRDbGFzcyBt
X2Zvcm1hdENsYXNzOworICAgICAgICBTaWduIG1fc2lnbjsKKyAgICB9OworCisgICAgRGVjaW1h
bChpbnQzMl90ID0gMCk7CisgICAgRGVjaW1hbChTaWduLCBpbnQgZXhwb25lbnQsIHVpbnQ2NF90
IGNvZWZmaWNpZW50KTsKKyAgICBEZWNpbWFsKGNvbnN0IERlY2ltYWwmKTsKKworICAgIERlY2lt
YWwmIG9wZXJhdG9yPShjb25zdCBEZWNpbWFsJik7CisgICAgRGVjaW1hbCYgb3BlcmF0b3IrPShj
b25zdCBEZWNpbWFsJik7CisgICAgRGVjaW1hbCYgb3BlcmF0b3ItPShjb25zdCBEZWNpbWFsJik7
CisgICAgRGVjaW1hbCYgb3BlcmF0b3IqPShjb25zdCBEZWNpbWFsJik7CisgICAgRGVjaW1hbCYg
b3BlcmF0b3IvPShjb25zdCBEZWNpbWFsJik7CisKKyAgICBEZWNpbWFsIG9wZXJhdG9yLSgpIGNv
bnN0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgRGVjaW1h
bCYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAg
ICBib29sIG9wZXJhdG9yPj0oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworCisgICAgRGVjaW1hbCBv
cGVyYXRvcisoY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIERlY2ltYWwgb3BlcmF0b3ItKGNv
bnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIG9wZXJhdG9yKihjb25zdCBEZWNpbWFs
JikgY29uc3Q7CisgICAgRGVjaW1hbCBvcGVyYXRvci8oY29uc3QgRGVjaW1hbCYpIGNvbnN0Owor
CisgICAgaW50IGV4cG9uZW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YS5pc0Zpbml0ZSgpOyB9CisgICAgYm9vbCBpc05lZ2F0aXZlKCkgY29uc3Qg
eyByZXR1cm4gc2lnbigpID09IE5lZ2F0aXZlOyB9CisgICAgYm9vbCBpc1Bvc2l0aXZlKCkgY29u
c3QgeyByZXR1cm4gc2lnbigpID09IFBvc2l0aXZlOyB9CisgICAgYm9vbCBpc1NwZWNpYWwoKSBj
b25zdCB7IHJldHVybiBtX2RhdGEuaXNTcGVjaWFsKCk7IH0KKyAgICBib29sIGlzWmVybygpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS5pc1plcm8oKTsgfQorCisgICAgRGVjaW1hbCBhYnMoKSBjb25z
dDsKKyAgICBEZWNpbWFsIGNlaWxpbmcoKSBjb25zdDsKKyAgICBEZWNpbWFsIGZsb29yKCkgY29u
c3Q7CisgICAgRGVjaW1hbCByZW1haW5kZXIoY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIERl
Y2ltYWwgcm91bmQoKSBjb25zdDsKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAg
IHN0YXRpYyBEZWNpbWFsIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIERl
Y2ltYWwgaW5maW5pdHkoU2lnbik7CisgICAgc3RhdGljIERlY2ltYWwgbmFuKCk7CisgICAgc3Rh
dGljIERlY2ltYWwgemVybyhTaWduKTsKKworICAgIC8vIFlvdSBzaG91bGQgbm90IHVzZSBiZWxv
dyBtZXRob2RzLiBXZSBleHBvc2UgdGhlbSBmb3IgdW5pdCB0ZXN0aW5nLgorICAgIGV4cGxpY2l0
IERlY2ltYWwoY29uc3QgRW5jb2RlZERhdGEmKTsKKyAgICBjb25zdCBFbmNvZGVkRGF0YSYgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworcHJpdmF0ZToKKyAgICBEZWNpbWFsKGRv
dWJsZSk7CisgICAgRGVjaW1hbCBjb21wYXJlVG8oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworCisg
ICAgc3RhdGljIGlubGluZSBTaWduIGludmVydFNpZ24oU2lnbiBzaWduKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHNpZ24gPT0gTmVnYXRpdmUgPyBQb3NpdGl2ZSA6IE5lZ2F0aXZlOworICAgIH0K
KworICAgIFNpZ24gc2lnbigpIGNvbnN0OworCisgICAgRW5jb2RlZERhdGEgbV9kYXRhOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGVjaW1hbF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCAxYTY4OGJiY2NjMmJhYjhkMDdjZmNlNTM4ZmRjNTcw
MGQzNGViMmI5Li4zMGM1MzEzYzIzMTMxNWIzNDViNzg1YjE2ZjViMDNmM2QwMTUxYjczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTk1LDYgKzk1LDcgQEAKICAgICAgICAgICAg
ICd0ZXN0cy9DbGlwYm9hcmRDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
b21wb3NpdG9yRmFrZUdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Nv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCcsCisgICAgICAgICAgICAndGVzdHMv
RGVjaW1hbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvRHJhd2luZ0J1ZmZlckNocm9taXVtVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0V2ZW50TGlzdGVuZXJUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvRGVjaW1hbFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NDhlYzQ1ZmZmYWRl
ZDU4ZTcxN2FiZDQwNDRiZTRmNTE4ZmEzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcApAQCAtMCwwICsxLDYxNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZWNpbWFsLmgiCisKKyNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0
b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBEZWNpbWFsJiBkZWNpbWFsKQoreworICAgIERl
Y2ltYWw6OkVuY29kZWREYXRhIGRhdGEgPSBkZWNpbWFsLnZhbHVlKCk7CisgICAgcmV0dXJuIG9z
IAorICAgICAgICA8PCAiZW5jb2RlKCIgPDwgU3RyaW5nOjpudW1iZXIoZGF0YS5jb2VmZmljaWVu
dCgpKS5hc2NpaSgpLmRhdGEoKQorICAgICAgICA8PCAiLCAiIDw8IFN0cmluZzo6bnVtYmVyKGRh
dGEuZXhwb25lbnQoKSkuYXNjaWkoKS5kYXRhKCkKKyAgICAgICAgPDwgIiwgIiA8PCAoZGF0YS5z
aWduKCkgPT0gRGVjaW1hbDo6TmVnYXRpdmUgPyAiTmVnYXRpdmUiIDogIlBvc2l0aXZlIikKKyAg
ICAgICAgPDwgIik9IiA8PCBkZWNpbWFsLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8v
IFNpbXVsYXRlIFdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UKK2NsYXNzIERlY2ltYWxTdGVwUmFuZ2Ug
eworcHVibGljOgorICAgIERlY2ltYWwgbWF4aW11bTsKKyAgICBEZWNpbWFsIG1pbmltdW07Cisg
ICAgRGVjaW1hbCBzdGVwOworCisgICAgRGVjaW1hbFN0ZXBSYW5nZShjb25zdCBEZWNpbWFsJiBt
aW5pbXVtLCBjb25zdCBEZWNpbWFsJiBtYXhpbXVtLCBjb25zdCBEZWNpbWFsJiBzdGVwKQorICAg
ICAgICA6IG1heGltdW0obWF4aW11bSkKKyAgICAgICAgLCBtaW5pbXVtKG1pbmltdW0pCisgICAg
ICAgICwgc3RlcChzdGVwKQorICAgIHsKKyAgICB9CisKKyAgICBEZWNpbWFsIGNsYW1wVmFsdWUo
RGVjaW1hbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IERlY2ltYWwgcmVzdWx0
ID0gbWluaW11bSArICgodmFsdWUgLSBtaW5pbXVtKSAvIHN0ZXApLnJvdW5kKCkgKiBzdGVwOwor
ICAgICAgICBBU1NFUlQocmVzdWx0LmlzRmluaXRlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0
ID4gbWF4aW11bSA/IHJlc3VsdCAtIHN0ZXAgOiByZXN1bHQ7CisgICAgfQorfTsKKworY2xhc3Mg
RGVjaW1hbFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICB0
eXBlZGVmIERlY2ltYWw6OlNpZ24gU2lnbjsKKyAgICBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCBT
aWduIFBvc2l0aXZlID0gRGVjaW1hbDo6UG9zaXRpdmU7CisgICAgcHJvdGVjdGVkOiBzdGF0aWMg
Y29uc3QgU2lnbiBOZWdhdGl2ZSA9IERlY2ltYWw6Ok5lZ2F0aXZlOworCisgICAgRGVjaW1hbCBl
bmNvZGUodWludDY0X3QgY29lZmZpY2llbnQsIGludCBleHBvbmVudCwgU2lnbiBzaWduKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIERlY2ltYWwoc2lnbiwgZXhwb25lbnQsIGNvZWZmaWNpZW50KTsK
KyAgICB9CisKKyAgICBwcm90ZWN0ZWQ6IERlY2ltYWwgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZykKKyAgICB7CisgICAgICAgIHJldHVybiBEZWNpbWFsOjpmcm9tU3RyaW5nKHN0cmlu
Zyk7CisgICAgfQorCisgICAgcHJvdGVjdGVkOiBTdHJpbmcgc3RlcERvd24oY29uc3QgU3RyaW5n
JiBtaW5pbXVtLCBjb25zdCBTdHJpbmcmIG1heGltdW0sIGNvbnN0IFN0cmluZyYgc3RlcCwgY29u
c3QgU3RyaW5nJiB2YWx1ZVN0cmluZywgaW50IG51bWJlck9mU3RlcFRpbWVzKQorICAgIHsKKyAg
ICAgICAgRGVjaW1hbFN0ZXBSYW5nZSBzdGVwUmFuZ2UoZnJvbVN0cmluZyhtaW5pbXVtKSwgZnJv
bVN0cmluZyhtYXhpbXVtKSwgZnJvbVN0cmluZyhzdGVwKSk7CisgICAgICAgIERlY2ltYWwgdmFs
dWUgPSBmcm9tU3RyaW5nKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1iZXJPZlN0ZXBUaW1lczsgKytpKSB7CisgICAgICAgICAgdmFsdWUgLT0gc3RlcFJhbmdl
LnN0ZXA7CisgICAgICAgICAgdmFsdWUgPSBzdGVwUmFuZ2UuY2xhbXBWYWx1ZSh2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAg
cHJvdGVjdGVkOiBTdHJpbmcgc3RlcFVwKGNvbnN0IFN0cmluZyYgbWluaW11bSwgY29uc3QgU3Ry
aW5nJiBtYXhpbXVtLCBjb25zdCBTdHJpbmcmIHN0ZXAsIGNvbnN0IFN0cmluZyYgdmFsdWVTdHJp
bmcsIGludCBudW1iZXJPZlN0ZXBUaW1lcykKKyAgICB7CisgICAgICAgIERlY2ltYWxTdGVwUmFu
Z2Ugc3RlcFJhbmdlKGZyb21TdHJpbmcobWluaW11bSksIGZyb21TdHJpbmcobWF4aW11bSksIGZy
b21TdHJpbmcoc3RlcCkpOworICAgICAgICBEZWNpbWFsIHZhbHVlID0gZnJvbVN0cmluZyh2YWx1
ZVN0cmluZyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGVwVGltZXM7
ICsraSkgeworICAgICAgICAgIHZhbHVlICs9IHN0ZXBSYW5nZS5zdGVwOworICAgICAgICAgIHZh
bHVlID0gc3RlcFJhbmdlLmNsYW1wVmFsdWUodmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB2YWx1ZS50b1N0cmluZygpOworICAgIH0KK307CisKK1RFU1RfRihEZWNpbWFsVGVzdCwg
QWJzKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMCwg
MCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZl
KSwgZW5jb2RlKDAsIDAsIE5lZ2F0aXZlKS5hYnMoKSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDAsIDEwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAxMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDAsIDEwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAxMCwgTmVnYXRpdmUp
LmFicygpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgLTEwLCBQb3NpdGl2ZSksIGVuY29k
ZSgwLCAtMTAsIFBvc2l0aXZlKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAs
IFBvc2l0aXZlKSwgZW5jb2RlKDAsIC0xMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAgIEVYUEVD
VF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLmFicygp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDAsIE5l
Z2F0aXZlKS5hYnMoKSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSks
IGVuY29kZSgxLCAxMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEs
IDEwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAgIEVY
UEVDVF9FUShlbmNvZGUoMSwgLTEwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAsIFBvc2l0aXZl
KS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAsIFBvc2l0aXZlKSwgZW5jb2Rl
KDEsIC0xMCwgTmVnYXRpdmUpLmFicygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDZWls
aW5nKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpLmNlaWxpbmcoKSk7
CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMiksIGVuY29kZSgxMSwgLTEsIFBvc2l0aXZlKS5jZWls
aW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDIpLCBlbmNvZGUoMTMsIC0xLCBQb3NpdGl2
ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE1LCAtMSwg
UG9zaXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMiksIGVuY29kZSgx
OSwgLTEsIFBvc2l0aXZlKS5jZWlsaW5nKCkpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEp
LCBEZWNpbWFsKC0xKS5jZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgZW5j
b2RlKDExLCAtMSwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwo
LTEpLCBlbmNvZGUoMTMsIC0xLCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEo
RGVjaW1hbCgtMSksIGVuY29kZSgxNSwgLTEsIE5lZ2F0aXZlKS5jZWlsaW5nKCkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsKC0xKSwgZW5jb2RlKDE5LCAtMSwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7
Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgRW5jb2RlZERhdGEpCit7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAwLCBQb3NpdGl2ZSkpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMCwgMCwgTmVnYXRpdmUpLCBlbmNvZGUoMCwgMCwgTmVnYXRpdmUpKTsK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxLCAwLCBOZWdhdGl2ZSksIGVuY29kZSgxLCAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVD
VF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGVuY29kZSgxLCAyMDAwLCBQb3NpdGl2
ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0y
MDAwLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEZsb29yKQoreworICAg
IEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpLmZsb29yKCkpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsKDEpLCBlbmNvZGUoMTEsIC0xLCBQb3NpdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWwoMSksIGVuY29kZSgxMywgLTEsIFBvc2l0aXZlKS5mbG9vcigpKTsKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZW5jb2RlKDE1LCAtMSwgUG9zaXRpdmUpLmZsb29yKCkp
OworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBlbmNvZGUoMTksIC0xLCBQb3NpdGl2ZSkuZmxv
b3IoKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIERlY2ltYWwoLTEpLmZsb29yKCkp
OworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDExLCAtMSwgTmVnYXRpdmUpLmZs
b29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDEzLCAtMSwgTmVnYXRp
dmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDE1LCAtMSwg
TmVnYXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDE5
LCAtMSwgTmVnYXRpdmUpLmZsb29yKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEZyb21J
bnQzMikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgw
KSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMSwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxMDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgxMDApKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDEwMCwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKC0xMDApKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDB4N0ZGRkZGRkYsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbChJTlRfTUFYKSk7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSgweDgwMDAwMDAwdSwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKElOVF9NSU4p
KTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBGcm9tU3RyaW5nKQoreworICAgIEVYUEVDVF9F
UShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwIikpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMCwgMCwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMCIpKTsKKyAgICBFWFBFQ1Rf
RVEoRGVjaW1hbCgxKSwgZnJvbVN0cmluZygiMSIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEs
IDAsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTEiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwo
MSksIGZyb21TdHJpbmcoIjAxIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMywgMCwgUG9zaXRp
dmUpLCBmcm9tU3RyaW5nKCIrMyIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDMsIFBvc2l0
aXZlKSwgZnJvbVN0cmluZygiMEUzIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoNSwgLTEsIFBv
c2l0aXZlKSwgZnJvbVN0cmluZygiLjUiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAs
IFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMTAwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAw
LCAwLCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0xMDAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxMjMsIC0yLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjEuMjMiKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgxMjMsIC0yLCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0xLjIzIikpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMTIzLCA4LCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjEuMjNFMTAiKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIDgsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTEu
MjNFMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIDgsIFBvc2l0aXZlKSwgZnJvbVN0
cmluZygiMS4yM0UrMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIDgsIE5lZ2F0aXZl
KSwgZnJvbVN0cmluZygiLTEuMjNFKzEwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCAt
MTIsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMS4yM0UtMTAiKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxMjMsIC0xMiwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMS4yM0UtMTAiKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSg1LCAtNywgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwLjAwMDAwMDUi
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0zLCBQb3NpdGl2ZSksIGZyb21TdHJpbmco
IjAuMTIzIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgLTIsIFBvc2l0aXZlKSwgZnJvbVN0
cmluZygiMDAuMDAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAyLCBQb3NpdGl2ZSksIGZy
b21TdHJpbmcoIjFFMiIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRp
dmUpLCBmcm9tU3RyaW5nKCIxRTIwMDAwIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjp6ZXJv
KFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMUUtMjAwMDAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxMDAwLCAxMDIzLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjFFMTAyNiIpKTsKKyAgICBFWFBF
Q1RfRVEoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjFFLTEwMjYiKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMTIz
NDU2Nzg5MEUxMDM2IikpOworCisgICAgLy8gMl4xMDI0CisgICAgY29uc3QgdWludDY0X3QgbGVh
ZGluZ0RpZ2l0c09mMlBvd2VyT2YxMDI0ID0gVUlOVDY0X0MoMTc5NzY5MzEzNDg2MjMxNTkpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUobGVhZGluZ0RpZ2l0c09mMlBvd2VyT2YxMDI0LCAyOTIsIFBv
c2l0aXZlKSwgZnJvbVN0cmluZygiMTc5NzY5MzEzNDg2MjMxNTkwNzcyOTMwNTE5MDc4OTAyNDcz
MzYxNzk3Njk3ODk0MjMwNjU3MjczNDMwMDgxMTU3NzMyNjc1ODA1NTAwOTYzMTMyNzA4NDc3MzIy
NDA3NTM2MDIxMTIwMTEzODc5ODcxMzkzMzU3NjU4Nzg5NzY4ODE0NDE2NjIyNDkyODQ3NDMwNjM5
NDc0MTI0Mzc3NzY3ODkzNDI0ODY1NDg1Mjc2MzAyMjE5NjAxMjQ2MDk0MTE5NDUzMDgyOTUyMDg1
MDA1NzY4ODM4MTUwNjgyMzQyNDYyODgxNDczOTEzMTEwNTQwODI3MjM3MTYzMzUwNTEwNjg0NTg2
Mjk4MjM5OTQ3MjQ1OTM4NDc5NzE2MzA0ODM1MzU2MzI5NjI0MjI0MTM3MjE2IikpOworfQorCisv
LyBUaGVzZSBzdHJpbmdzIGFyZSBsb29rIGxpa2UgcHJvcGVyIG51bWJlciwgYnV0IHdlIGRvbid0
IGFjY2VwdCB0aGVtLgorVEVTVF9GKERlY2ltYWxUZXN0LCBGcm9tU3RyaW5nTGlrZU51bWJlcikK
K3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIiAxMjMgIikpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiMSwyMzQiKSk7CisgICAg
RVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCJJTkYiKSk7Cit9CisKK1RFU1Rf
RihEZWNpbWFsVGVzdCwgZnJvbVN0cmluZ1RydW5jYXRlZCkKK3sKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIngiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5h
bigpLCBmcm9tU3RyaW5nKCIwLiIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZy
b21TdHJpbmcoIjF4IikpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3Ry
aW5nKCIxRXgiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIx
RTJ4IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiMUUreCIp
KTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBQcmVkaWNhdGVzKQoreworICAgIEVYUEVDVF9U
UlVFKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9UUlVF
KERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShE
ZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKS5pc1plcm8oKSk7CisKKyAgICBFWFBFQ1RfVFJVRShEZWNp
bWFsOjp6ZXJvKE5lZ2F0aXZlKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1h
bDo6emVybyhOZWdhdGl2ZSkuaXNQb3NpdGl2ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFs
Ojp6ZXJvKE5lZ2F0aXZlKS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFs
Ojp6ZXJvKE5lZ2F0aXZlKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6
emVybyhOZWdhdGl2ZSkuaXNaZXJvKCkpOworCisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgxMjMp
LmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMTIzKS5pc1Bvc2l0aXZlKCkp
OworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEyMykuaXNOZWdhdGl2ZSgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRGVjaW1hbCgxMjMpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVj
aW1hbCgxMjMpLmlzWmVybygpKTsKKworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoLTEyMykuaXNG
aW5pdGUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoLTEyMykuaXNQb3NpdGl2ZSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKC0xMjMpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKERlY2ltYWwoLTEyMykuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNp
bWFsKC0xMjMpLmlzWmVybygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBQcmVkaWNhdGVz
U3BlY2lhbFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoUG9z
aXRpdmUpLmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6OmluZmluaXR5KFBv
c2l0aXZlKS5pc1Bvc2l0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjppbmZpbml0
eShQb3NpdGl2ZSkuaXNOZWdhdGl2ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjppbmZp
bml0eShQb3NpdGl2ZSkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjpp
bmZpbml0eShQb3NpdGl2ZSkuaXNaZXJvKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6
OmluZmluaXR5KE5lZ2F0aXZlKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1h
bDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVj
aW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNUX1RSVUUo
RGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzWmVybygpKTsKKworICAgIEVYUEVDVF9G
QUxTRShEZWNpbWFsOjpuYW4oKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFs
OjpuYW4oKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6Om5hbigpLmlz
WmVybygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcEFkZCkKK3sKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgwKSArIERlY2ltYWwoMCkpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpICsgRGVjaW1hbCgtMSkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKC0xKSArIERlY2ltYWwoMikpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMTAwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoOTkpICsgRGVjaW1hbCgxKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgtNTApICsg
RGVjaW1hbCgtNTApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAwMDAwMDAsIDM1
LCBQb3NpdGl2ZSksIGVuY29kZSgxLCA1MCwgUG9zaXRpdmUpICsgRGVjaW1hbCgxKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMDAwMDAwLCAzNSwgUG9zaXRpdmUpLCBEZWNpbWFs
KDEpICsgZW5jb2RlKDEsIDUwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAw
MDAwMDAwMDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSkgKyBEZWNpbWFs
KDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAxLCAwLCBQb3NpdGl2ZSksIERl
Y2ltYWwoMSkgKyBlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEs
IDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAtMTAyMiwgUG9zaXRpdmUp
LCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUp
KTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcEFkZEJpZ0UpCit7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgKyBl
bmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDIsIDEwMjIsIFBv
c2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAxMDIyLCBQb3Np
dGl2ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGVuY29k
ZSh1aW50NjRfdCgtMSksIDEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkp
OworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wQWRkU21hbGxFKQoreworICAgIEVYUEVDVF9F
UShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSArIGVu
Y29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgLTEwMjIsIFBv
c2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgLTEwMjIsIFBv
c2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BBZGRTcGVjaWFsVmFsdWVzKQor
eworICAgIGNvbnN0IERlY2ltYWwgSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUp
KTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTmVn
YXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29u
c3QgRGVjaW1hbCBUZW4oMTApOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSAr
IEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSArIE1pbnVzSW5maW5pdHkp
OworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKyBJbmZpbml0eSk7CisgICAgRVhQ
RUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKyBNaW51c0luZmluaXR5KTsKKwor
ICAgIEVYUEVDVF9FUShJbmZpbml0eSwgSW5maW5pdHkgKyBUZW4pOworICAgIEVYUEVDVF9FUShJ
bmZpbml0eSwgVGVuICsgSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBN
aW51c0luZmluaXR5ICsgVGVuKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgVGVuICsg
TWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gKyBOYU4pOworICAgIEVY
UEVDVF9FUShOYU4sIE5hTiArIFRlbik7CisgICAgRVhQRUNUX0VRKE5hTiwgVGVuICsgTmFOKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcENvbXBhcmUpCit7CisgICAgRVhQRUNUX1RSVUUo
RGVjaW1hbCgwKSA9PSBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApICE9
IERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgPCBEZWNpbWFsKDEpKTsK
KyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApIDw9IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9U
UlVFKERlY2ltYWwoMCkgPiBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgw
KSA+PSBEZWNpbWFsKDApKTsKKworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpID09IERlY2lt
YWwoMikpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpICE9IERlY2ltYWwoMSkpOworICAg
IEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpIDwgRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0ZBTFNF
KERlY2ltYWwoMSkgPD0gRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkg
PiBEZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxKSA+PSBEZWNpbWFsKDIp
KTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcENvbXBhcmVTcGVjaWFsVmFsdWVzKQorewor
ICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMSkgPCBEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkp
OworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMSkgPiBEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2
ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wRGl2KQoreworICAgIEVYUEVDVF9FUShl
bmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDApIC8gRGVjaW1hbCgxKSk7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSgyLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoMikgLyBEZWNpbWFsKC0xKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSg1LCAtMSwgTmVnYXRpdmUpLCBEZWNpbWFsKC0xKSAvIERl
Y2ltYWwoMikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoOTksIDAsIFBvc2l0aXZlKSwgRGVjaW1h
bCg5OSkgLyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgt
NTApIC8gRGVjaW1hbCgtNTApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDMzMzMzMzMzMzMzMzMz
MzMsIC0xNiwgUG9zaXRpdmUpLCBEZWNpbWFsKDEpIC8gRGVjaW1hbCgzKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSgxMjM0NTY3ODkwMTIzNCwgLTEsIFBvc2l0aXZlKSwgZW5jb2RlKDEyMzQ1Njc4
OTAxMjM0LCAwLCBQb3NpdGl2ZSkgLyBEZWNpbWFsKDEwKSk7Cit9CisKK1RFU1RfRihEZWNpbWFs
VGVzdCwgT3BEaXZCaWdFKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAyMiwgUG9zaXRp
dmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpIC8gZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQ
b3NpdGl2ZSkgLyBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2lt
YWxUZXN0LCBPcERpdlNtYWxsRSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMDIyLCBQ
b3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpIC8gZW5jb2RlKDEsIDAsIFBvc2l0
aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAt
MTAyMiwgUG9zaXRpdmUpIC8gZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkpOworfQorCitURVNU
X0YoRGVjaW1hbFRlc3QsIE9wRGl2U3BlY2lhbFZhbHVlcykKK3sKKyAgICBjb25zdCBEZWNpbWFs
IEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSk7CisgICAgY29uc3QgRGVjaW1h
bCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSk7CisgICAgY29uc3Qg
RGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERlY2ltYWwgWmVybyhEZWNp
bWFsOjp6ZXJvKFBvc2l0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBNaW51c1plcm8oRGVjaW1h
bDo6emVybyhOZWdhdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgVGVuKDEwKTsKKyAgICBjb25z
dCBEZWNpbWFsIE1pbnVzVGVuKC0xMCk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBaZXJvIC8gWmVy
byk7CisgICAgRVhQRUNUX0VRKE5hTiwgWmVybyAvIE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0VR
KE5hTiwgTWludXNaZXJvIC8gWmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNaZXJvIC8g
TWludXNaZXJvKTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgVGVuIC8gWmVybyk7CisgICAg
RVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIFRlbiAvIE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0VR
KE1pbnVzSW5maW5pdHksIE1pbnVzVGVuIC8gWmVybyk7CisgICAgRVhQRUNUX0VRKEluZmluaXR5
LCBNaW51c1RlbiAvIE1pbnVzWmVybyk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIEluZmlu
aXR5IC8gWmVybyk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIEluZmluaXR5IC8gTWlu
dXNaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZpbml0eSAvIFpl
cm8pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgTWludXNJbmZpbml0eSAvIE1pbnVzWmVybyk7
CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAvIEluZmluaXR5KTsKKyAgICBFWFBFQ1Rf
RVEoTmFOLCBJbmZpbml0eSAvIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE1p
bnVzSW5maW5pdHkgLyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0
eSAvIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKFplcm8sIFRlbiAvIEluZmluaXR5
KTsKKyAgICBFWFBFQ1RfRVEoTWludXNaZXJvLCBUZW4gLyBNaW51c0luZmluaXR5KTsKKyAgICBF
WFBFQ1RfRVEoTWludXNaZXJvLCBNaW51c1RlbiAvIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEo
WmVybywgTWludXNUZW4gLyBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShOYU4sIE5h
TiAvIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC8gVGVuKTsKKyAgICBFWFBFQ1RfRVEo
TmFOLCBUZW4gLyBOYU4pOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wTXVsKQoreworICAg
IEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDApICogRGVjaW1hbCgw
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoMikgKiBE
ZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAwLCBOZWdhdGl2ZSksIERlY2lt
YWwoLTEpICogRGVjaW1hbCgyKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSg5OSwgMCwgUG9zaXRp
dmUpLCBEZWNpbWFsKDk5KSAqIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMjUw
MCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKC01MCkgKiBEZWNpbWFsKC01MCkpOworfQorCitURVNU
X0YoRGVjaW1hbFRlc3QsIE9wTXVsQmlnRSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEw
MjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAqIGVuY29kZSgxLCAwLCBQ
b3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGVu
Y29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgKiBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBPcE11bFNtYWxsRSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpICogZW5j
b2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2
ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpICogZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2
ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wTXVsU3BlY2lhbFZhbHVlcykKK3sKKyAg
ICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZl
KSk7CisgICAgY29uc3QgRGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERl
Y2ltYWwgVGVuKDEwKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzVGVuKC0xMCk7CisgICAgY29u
c3QgRGVjaW1hbCBaZXJvKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpKTsKKyAgICBjb25zdCBEZWNp
bWFsIE1pbnVzWmVybyhEZWNpbWFsOjp6ZXJvKE5lZ2F0aXZlKSk7CisKKyAgICBFWFBFQ1RfRVEo
SW5maW5pdHksIEluZmluaXR5ICogSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmlu
aXR5LCBJbmZpbml0eSAqIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmlu
aXR5LCBNaW51c0luZmluaXR5ICogSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwg
TWludXNJbmZpbml0eSAqIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5m
aW5pdHkgKiBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBaZXJvICogTWludXNJbmZpbml0eSk7
CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0eSAqIFplcm8pOworICAgIEVYUEVDVF9F
UShOYU4sIE1pbnVzSW5maW5pdHkgKiBaZXJvKTsKKworICAgIEVYUEVDVF9FUShOYU4sIEluZmlu
aXR5ICogTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c1plcm8gKiBNaW51c0lu
ZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICogTWludXNaZXJvKTsK
KyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICogTWludXNaZXJvKTsKKworICAgIEVY
UEVDVF9FUShJbmZpbml0eSwgSW5maW5pdHkgKiBUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0
eSwgVGVuICogSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0lu
ZmluaXR5ICogVGVuKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgVGVuICogTWludXNJ
bmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgSW5maW5pdHkgKiBNaW51
c1Rlbik7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzVGVuICogSW5maW5pdHkp
OworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgTWludXNJbmZpbml0eSAqIE1pbnVzVGVuKTsKKyAg
ICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVzVGVuICogTWludXNJbmZpbml0eSk7CisKKyAgICBF
WFBFQ1RfRVEoTmFOLCBOYU4gKiBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAqIFRlbik7
CisgICAgRVhQRUNUX0VRKE5hTiwgVGVuICogTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0
LCBPcFN1YikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1h
bCgwKSAtIERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMywgMCwgUG9zaXRpdmUp
LCBEZWNpbWFsKDIpIC0gRGVjaW1hbCgtMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMywgMCwg
TmVnYXRpdmUpLCBEZWNpbWFsKC0xKSAtIERlY2ltYWwoMikpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoOTgsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCg5OSkgLSBEZWNpbWFsKDEpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgtNTApIC0gRGVjaW1hbCgtNTAp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAwMDAwMDAsIDM1LCBQb3NpdGl2ZSks
IGVuY29kZSgxLCA1MCwgUG9zaXRpdmUpIC0gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxMDAwMDAwMDAwMDAwMDAwLCAzNSwgTmVnYXRpdmUpLCBEZWNpbWFsKDEpIC0gZW5jb2Rl
KDEsIDUwLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViQmlnRSkK
K3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEw
MjIsIFBvc2l0aXZlKSAtIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShl
bmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpIC0gZW5jb2Rl
KDEsIDEwMjIsIFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BTdWJTbWFs
bEUpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZShVSU5UNjRfQygxMDAwMDAwMDAwMDAwMDAwMCks
IC0xNiwgTmVnYXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAtIGVuY29kZSgxLCAw
LCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNv
ZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAtIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBPcFN1YlNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29uc3Qg
RGVjaW1hbCBJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNvbnN0
IERlY2ltYWwgTWludXNJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOworICAg
IGNvbnN0IERlY2ltYWwgTmFOKERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRl
bigxMCk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAtIEluZmluaXR5KTsKKyAgICBF
WFBFQ1RfRVEoSW5maW5pdHksIEluZmluaXR5IC0gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNU
X0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgLSBJbmZpbml0eSk7CisgICAgRVhQRUNU
X0VRKE5hTiwgTWludXNJbmZpbml0eSAtIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VR
KEluZmluaXR5LCBJbmZpbml0eSAtIFRlbik7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHks
IFRlbiAtIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZp
bml0eSAtIFRlbik7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gLSBNaW51c0luZmluaXR5
KTsKKworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAtIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwg
TmFOIC0gVGVuKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBUZW4gLSBOYU4pOworfQorCitURVNUX0Yo
RGVjaW1hbFRlc3QsIFByb3BlcnRpZXMpCit7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKS5p
c0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgwKS5pc1NwZWNpYWwoKSk7Cit9
CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUHJvcGVydGllc1NwZWNpYWwpCit7CisgICAgRVhQRUNU
X1RSVUUoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLmlzRmluaXRlKCkpOworCisgICAg
RVhQRUNUX1RSVUUoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzRmluaXRlKCkpOwor
CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6bmFuKCkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVD
VF9GQUxTRShEZWNpbWFsOjpuYW4oKS5pc0Zpbml0ZSgpKTsKK30KKworLy8gTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9udW1iZXIvbnVtYmVyLXN0ZXB1cC1zdGVwZG93bi1mcm9tLXJlbmRlcmVyCitU
RVNUX0YoRGVjaW1hbFRlc3QsIFJlYWxXb3JsZEV4YW1wbGVOdW1iZXJTdGVwVXBTdGVwRG93bkZy
b21SZW5kZXJlcikKK3sKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxMCIpLCBzdGVwRG93bigiMCIs
ICIxMDAiLCAiMTAiLCAiMTkiLCAxKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiOTAiKSwgc3Rl
cFVwKCIwIiwgIjk5IiwgIjEwIiwgIjg5IiwgMSkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEi
KSwgc3RlcFVwKCIwIiwgIjEiLCAiMC4zMzMzMzMzMzMzMzMzMzMzMyIsICIwIiwgMykpOyAvLyBz
dGVwPTEvMworICAgIEVYUEVDVF9FUShTdHJpbmcoIjAuMDEiKSwgc3RlcFVwKCIwIiwgIjAuMDEi
LCAiMC4wMDMzMzMzMzMzMzMzMzMzMzMzIiwgIjAiLCAzKSk7IC8vIHN0ZXA9MS8zMDAKKyAgICBF
WFBFQ1RfRVEoU3RyaW5nKCIxIiksIHN0ZXBVcCgiMCIsICIxIiwgIjAuMDAzOTIxNTY4NjI3NDUw
OTgwIiwgIjAiLCAyNTUpKTsgLy8gc3RlcD0xLzI1NQorICAgIEVYUEVDVF9FUShTdHJpbmcoIjEi
KSwgc3RlcFVwKCIwIiwgIjEiLCAiMC4xIiwgIjAiLCAxMCkpOworfQorCitURVNUX0YoRGVjaW1h
bFRlc3QsIFJlYWxXb3JsZEV4YW1wbGVOdW1iZXJTdGVwVXBTdGVwRG93bkZyb21SZW5kZXJlclJv
dW5kaW5nKQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIjUuMDE1IiksIHN0ZXBVcCgiMCIsICIx
MDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAyKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNiIp
LCBzdGVwVXAoIjAiLCAiMTAwIiwgIjAuMDA1IiwgIjUuMDA1IiwgMTEpKTsKKyAgICBFWFBFQ1Rf
RVEoU3RyaW5nKCI1LjA2NSIpLCBzdGVwVXAoIjAiLCAiMTAwIiwgIjAuMDA1IiwgIjUuMDA1Iiwg
MTIpKTsKKworICAgIEVYUEVDVF9FUShTdHJpbmcoIjUuMDE1IiksIHN0ZXBVcCgiNCIsICI5Iiwg
IjAuMDA1IiwgIjUuMDA1IiwgMikpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjUuMDYiKSwgc3Rl
cFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMSkpOworICAgIEVYUEVDVF9FUShTdHJp
bmcoIjUuMDY1IiksIHN0ZXBVcCgiNCIsICI5IiwgIjAuMDA1IiwgIjUuMDA1IiwgMTIpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBSZWFsV29ybGRFeGFtcGxlUmFuZ2VTdGVwVXBTdGVwRG93
bikKK3sKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxZSszOCIpLCBzdGVwVXAoIjAiLCAiMUUzOCIs
ICIxIiwgIjFFMzgiLCA5KSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMWUrMzgiKSwgc3RlcERv
d24oIjAiLCAiMUUzOCIsICIxIiwgIjFFMzgiLCA5KSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVz
dCwgUmVtYWluZGVyKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoOSwgLTEsIE5lZ2F0aXZlKSwg
ZW5jb2RlKDIxLCAtMSwgUG9zaXRpdmUpLnJlbWFpbmRlcigzKSk7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWwoMSksIERlY2ltYWwoMTApLnJlbWFpbmRlcigzKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoLTEwKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMiwgLTEsIFBvc2l0aXZlKSwgZW5jb2RlKDEwMiwgLTEsIFBvc2l0aXZlKS5y
ZW1haW5kZXIoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEsIFBvc2l0aXZlKSwgRGVj
aW1hbCgxMCkucmVtYWluZGVyKGVuY29kZSgzLCAtMSwgUG9zaXRpdmUpKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSgzLCAtMSwgTmVnYXRpdmUpLCBlbmNvZGUoMzYsIC0xLCBQb3NpdGl2ZSkucmVt
YWluZGVyKGVuY29kZSgxMywgLTEsIFBvc2l0aXZlKSkpOworfQorCitURVNUX0YoRGVjaW1hbFRl
c3QsIFJlbWFpbmRlclNwZWNpYWxWYWx1ZXMpCit7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Omlu
ZmluaXR5KFBvc2l0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLnJlbWFpbmRlcigx
KSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBEZWNpbWFsOjpuYW4oKS5yZW1haW5k
ZXIoMSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJvdW5kKQoreworICAgIEVYUEVDVF9F
UShEZWNpbWFsKDEpLCAoRGVjaW1hbCg5KSAvIERlY2ltYWwoMTApKS5yb3VuZCgpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbCgyNSksIChEZWNpbWFsKDUpIC8gZnJvbVN0cmluZygiMC4yMDAiKSku
cm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMyksIChEZWNpbWFsKDUpIC8gRGVjaW1h
bCgyKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIChEZWNpbWFsKDIpIC8g
RGVjaW1hbCgzKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMyksIChEZWNpbWFs
KDEwKSAvIERlY2ltYWwoMykpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDMpLCAo
RGVjaW1hbCgxKSAvIGZyb21TdHJpbmcoIjAuMyIpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEo
RGVjaW1hbCgxMCksIChEZWNpbWFsKDEpIC8gZnJvbVN0cmluZygiMC4xIikpLnJvdW5kKCkpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsKDUpLCAoRGVjaW1hbCgxKSAvIGZyb21TdHJpbmcoIjAuMiIp
KS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxMCksIChmcm9tU3RyaW5nKCIxMC4y
IikgLyAxKS5yb3VuZCgpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBSb3VuZFNlcGNpYWxW
YWx1ZXMpCit7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgRGVj
aW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
OjpuYW4oKSwgRGVjaW1hbDo6bmFuKCkucm91bmQoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVz
dCwgVG9TdHJpbmdTcGVjaWFsKQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIkluZmluaXR5Iiks
IERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEo
U3RyaW5nKCItSW5maW5pdHkiKSwgRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLnRvU3RyaW5n
KCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIk5hTiIpLCBEZWNpbWFsOjpuYW4oKS50b1N0cmlu
ZygpKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144700</attachid>
            <date>2012-05-29 22:11:27 -0700</date>
            <delta_ts>2012-05-29 22:54:48 -0700</delta_ts>
            <desc>Patch 4</desc>
            <filename>bug-87360-20120530141125.patch</filename>
            <type>text/plain</type>
            <size>73700</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmYzNiY2MyMGRlNGRm
YzZiNTFmMGY2YTE4NjY1NTgzYTczMmJkYS4uMDhhYzNiY2QwZDhhZWNhM2RlN2VlNGE2ODM1OTAx
MDRiMTFiYzgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEyLTA1LTI0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3IgTnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRk
ZWQgbmV3IGNsYXNzIERlY2ltYWwgZm9yIGRlY2ltYWwgYXJpdGhtYXRpYyBpbiB0d28KKyAgICAg
ICAgZmlsZXM6IHBsYXRmb3JtL0RlY2ltYWwuY3BwIGFuZCBEZWNpbWFsLmggd2l0aCB1bml0IHRl
c3QuCisKKyAgICAgICAgVGVzdDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNw
cAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGVjaW1hbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWNpbWFsUHJpdmF0ZSk6
CisgICAgICAgIChTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAgICAgKFVJbnQxMjgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6OmhpZ2gpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWxQcml2YXRlOjpjb3VudERpZ2l0cyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJp
dmF0ZTo6bXVsdGlwbHlIaWdoKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpw
b3dlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6c2NhbGVEb3duKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpzY2FsZVVwKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpTcGVjaWFsVmFsdWVIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5k
bGVyOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlNwZWNpYWxW
YWx1ZUhhbmRsZXI6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpV
SW50MTI4OjpVSW50MTI4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50
MTI4OjpvcGVyYXRvciAvPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUlu
dDEyODo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6
OkVuY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpj
b2VmZmljaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Zm9y
bWF0Q2xhc3MpCisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6ZXhwb25l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzRmluaXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjppc1NwZWNpYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzWmVybyk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpFbmNvZGVkRGF0YTo6c2V0U2lnbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
OjpEZWNpbWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yID0pOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgKz0pOgorICAgICAgICAoV2ViQ29yZTo6
RGVjaW1hbDo6b3BlcmF0b3IgLT0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0
b3IgKj0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLz0pOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNp
bWFsOjpvcGVyYXRvciArKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yICop
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLyk6CisgICAgICAgIChXZWJD
b3JlOjpEZWNpbWFsOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgPCk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciA8PSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpvcGVyYXRvciA+KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9y
ID49KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmV4cG9uZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6YWJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmFsaWduT3BlcmFuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVjaW1hbDo6Y2VpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpjb21w
YXJlVG8pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6ZmFzdEVxdWFscyk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjpmbG9vcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpm
cm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmluZmluaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6Om5hbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpy
ZW1haW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6cm91bmQpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbDo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6
emVybyk6CisgICAgICAgICogcGxhdGZvcm0vRGVjaW1hbC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6OmlzRmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Omlz
TmVnYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aXNQb3NpdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc1NwZWNpYWwpOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OnZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6OmludmVydFNpZ24pOgorCiAyMDEyLTA1LTI5ICBLZW50YXJv
IEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFJlbmFtZSB2OE51
bGwoKSB0byB2OE51bGxXaXRoQ2hlY2soKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5
YjM4ZDZkYmQyODBjNGY0OWFmNTY5Yzc4ZmM5M2ZlMWY0YTkwZDAzLi44MjM1YzRmOTY5YzkzNzgx
M2Q2M2QwNDI3MzUxMGI3MWQ4MGQzZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI1IEBACisyMDEyLTA1LTI0ICBZb3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJbnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3Ig
TnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkZWQgdW5pdCB0ZXN0IGZvciBEZWNpbWFsIGNs
YXNzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvRGVjaW1hbFRl
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBPdXRwdXQgRGVj
aW1hbCBmb3IgdW5pdCB0ZXN0IGRlYnVnZ2luZworICAgICAgICAoRGVjaW1hbFRlc3QpOgorICAg
ICAgICAoRGVjaW1hbFN0ZXBSYW5nZSk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFN0
ZXBSYW5nZTo6RGVjaW1hbFN0ZXBSYW5nZSk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1h
bFN0ZXBSYW5nZTo6Y2xhbXBWYWx1ZSk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRl
c3Q6OmVuY29kZSk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRlc3Q6OmZyb21TdHJp
bmcpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OkRlY2ltYWxUZXN0OjpzdGVwRG93bik6CisgICAg
ICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRlc3Q6OnN0ZXBVcCk6CisgICAgICAgIChEZWNpbWFs
VGVzdDo6VEVTVF9GKToKKwogMjAxMi0wNS0yOSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBBbGlnbiBjb2RlcyBhbmQgbmFtZXMgZm9y
IElEQi1zcGVjaWZpYyBhbmQgRE9NLXNwZWNpZmljIGVycm9ycy9leGNlcHRpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDFlMDc1Nzc1YmQyM2M5MjljYmY3NDA0OGNlOTk1N2MwYjNkOTY0NGUu
LjM2YzMyZjM5ODgyM2Q0NzlmZjE3YjI2MzM2MTUwNWY4NGNmZDBjOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xMTA3LDYgKzExMDcsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3Bw
CiAgICAgcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCisgICAgcGxhdGZvcm0vRGVjaW1hbC5j
cHAKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAKICAgICBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3Bw
CiAgICAgcGxhdGZvcm0vRXZlbnRUcmFjZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCAyYWZmMzllMTRhYTE2ZGZmODYyNTBjMzBjZmExNDIzNDlmMWRjY2MxLi4xYmRjYjI2
MDRlODA0Mjk1Y2U2ZGFlM2IwZWUzMjFlM2UxMzYxM2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTMxMTUsNiArMzExNSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RhdGVDb21wb25lbnRzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBv
bmVudHMuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0RhdGEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGU3
Njc0ZmE4ZDBiYmViNTBiNmVmNmI3NGUwOTAwNjc5MWM4ZmUxOWYuLmMzMTAxZTQ4ZTgwNmVjNzNi
M2ZhNWY2YWI3MGUxOWY4NDM3ZDYzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTA4Myw2ICsxMDgzLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKICAgICBwbGF0
Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAogICAgIHBsYXRmb3JtL0RhdGVDb21wb25lbnRz
LmNwcCBcCisgICAgcGxhdGZvcm0vRGVjaW1hbC5jcHAgXAogICAgIHBsYXRmb3JtL0RyYWdEYXRh
LmNwcCBcCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vRXZlbnRU
cmFjZXIuY3BwIFwKQEAgLTIyMDAsNiArMjIwMSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRm
b3JtL0NvbnRleHRNZW51LmggXAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAog
ICAgIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmggXAorICAgIHBsYXRmb3JtL0RlY2ltYWwuaCBc
CiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuaCBcCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmggXAog
ICAgIHBsYXRmb3JtL0V2ZW50VHJhY2VyLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNlYzEzOTMz
NjU1MzcwNjY3YjU3Y2QwOWRmMzgxNTkzN2YyYmMxNmIuLjA2Yjk2NTdhZTVjYjdiZWQ4N2M2OGZj
MDM5OWI4NDUzMjFiYjRjMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI3MSw2ICsyNzEsNyBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9DdXJzb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vRGVjaW1hbC5oJwogICAgICAgICAgICAgJ3BsYXRm
b3JtL0RyYWdEYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RyYWdJbWFnZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9FdmVudFRyYWNlci5oJywKQEAgLTMxNDgsNiArMzE0OSw3IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ3Vyc29yLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRGF0ZUNvbXBv
bmVudHMuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9EZWNpbWFsLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vRHJhZ0RhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFn
SW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9FdmVudExvb3AuaCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDQwZmUwOWFkMjkw
ZjBkZDg3NGRlN2ZkOWZhYWZiNzY2YzcyZjA1YzQuLjM0NTViNjMxZTQwOWRhOTc1OGRhMzdiMDBi
MzNmMjgwNTk4NjRiNjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC0yNzg5MSw2ICsyNzg5MSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxEZWNpbWFsLmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRGVj
aW1hbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxEcmFnRGF0YS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNmOWVkZTQy
NTliYTdhNDkxM2M2ZjQ5N2U0NDJkNTM1NTFjMzhjNmIuLjBhY2Y3YzcyNjU0MWZhNTk1YWI3ZDBh
OTdiZjI3OGM1MjIwMmE2YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExOTMsNiArMTE5Myw4IEBACiAJCTQ1MENFQkYwMTUw
NzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBM
YWJlbGFibGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8q
IExhYmVsYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDVCQUMy
QjAxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJM
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDVG
RUE1Q0YxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERl
Y2ltYWwuY3BwICovOyB9OworCQk0NUZFQTVEMDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0Ux
NTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0NjE0QTFGRTBCMjNBOEQ2MDA0NDZFMUMgLyogY29weUN1
cnNvci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ2MTRBMUZEMEIyM0E4RDYwMDQ0NkUxQyAvKiBjb3B5Q3Vyc29yLnBuZyAqLzsgfTsKIAkJNDY3
MDBFRDAxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzAwRUNFMTI3Qjk2Q0IwMEY1RDVE
NiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgKi87IH07CiAJCTQ2NzAwRUQxMTI3Qjk2Q0IwMEY1RDVE
NiAvKiBGaWxlV3JpdGVyU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDY3MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmgg
Ki87IH07CkBAIC04MjAxLDYgKzgyMDMsOCBAQAogCQk0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkg
LyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NUJBQzJBRjEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY29uVVJMLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ1RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NUZFQTVDRTE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNpbWFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2MTRBMUZEMEIyM0E4RDYwMDQ0NkUxQyAvKiBjb3B5Q3Vy
c29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGltYWdlLnBuZzsgcGF0aCA9IGNvcHlDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVdyaXRlclN5bmMuY3BwOyBw
YXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXJTeW5jLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDY3MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJT
eW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmg7
IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlclN5bmMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMzM3LDYgKzIwMzQxLDggQEAKIAkJCQlGNTg3ODY4NDAyREUz
Qjg2MDFFQTQxMjIgLyogQ3Vyc29yLmggKi8sCiAJCQkJQTU3MzJCMDgxMzZBMTYxRDAwNUM4RDdD
IC8qIERhdGVDb21wb25lbnRzLmNwcCAqLywKIAkJCQlBNTczMkIwOTEzNkExNjFEMDA1QzhEN0Mg
LyogRGF0ZUNvbXBvbmVudHMuaCAqLywKKwkJCQk0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyog
RGVjaW1hbC5jcHAgKi8sCisJCQkJNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwu
aCAqLywKIAkJCQlBNzk1NDY0MjBCNUM0Q0I0MDA3QjQzOEYgLyogRHJhZ0RhdGEuY3BwICovLAog
CQkJCUE3QjZFNjlEMEIyOTFBOTYwMEQwNTI5RiAvKiBEcmFnRGF0YS5oICovLAogCQkJCUE3Q0ZC
M0NGMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuY3BwICovLApAQCAtMjIwOTYsNiArMjIx
MDIsNyBAQAogCQkJCUY1NUIzREI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCODEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREJBMTI1MUYxMkQwMDNFRjI2OSAv
KiBEYXRlVGltZUxvY2FsSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NUZFQTVEMDE1
NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDMjI4QTEx
MUQ1NzIyRTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNFQ0NGQzNCMTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5j
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjJBNDUxMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTkxLDYgKzI1NTk4LDcg
QEAKIAkJCQlGNTVCM0RCNTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGNTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1
dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQjkxMjUxRjEyRDAwM0VGMjY5IC8q
IERhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDVGRUE1Q0Yx
NTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDMjI4
QTIxMUQ1NzIyRTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDE2MkE0NTAxMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtl
ckNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFBM0Q1OEUxMDFDMTUyRDAwMzE2RDA3
IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRGVjaW1hbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTViMWI2NTI5NTQ0ODg3ZjJmZmE2YWY1YzZm
OWRjYzUxMWZmYzQ2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RlY2ltYWwuY3BwCkBAIC0wLDAgKzEsOTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRlY2ltYWwuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxmbG9hdC5o
PgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgRGVjaW1h
bFByaXZhdGUgeworCitzdGF0aWMgaW50IGNvbnN0IEV4cG9uZW50TWF4ID0gMTAyMzsKK3N0YXRp
YyBpbnQgY29uc3QgRXhwb25lbnRNaW4gPSAtMTAyMzsKK3N0YXRpYyBpbnQgY29uc3QgUHJlY2lz
aW9uID0gMTg7CisKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBNYXhDb2VmZmljaWVudCA9IFVJTlQ2
NF9DKDB4MTYzNDU3ODVEODlGRkZGKTsgLy8gOTk5OTk5OTk5OTk5OTk5OTk5ID09IDE4IDkncwor
CisvLyBUaGlzIGNsYXNzIGhhbmRsZXMgRGVjaW1hbCBzcGVjaWFsIHZhbHVlcy4KK2NsYXNzIFNw
ZWNpYWxWYWx1ZUhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWxWYWx1
ZUhhbmRsZXIpOworcHVibGljOgorICAgIGVudW0gSGFuZGxlUmVzdWx0IHsKKyAgICAgICAgQm90
aEZpbml0ZSwKKyAgICAgICAgQm90aEluZmluaXR5LAorICAgICAgICBFaXRoZXJOYU4sCisgICAg
ICAgIExIU0lzSW5maW5pdHksCisgICAgICAgIFJIU0lzSW5maW5pdHksCisgICAgfTsKKworICAg
IFNwZWNpYWxWYWx1ZUhhbmRsZXIoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBEZWNpbWFsJiBy
aHMpOworICAgIEhhbmRsZVJlc3VsdCBoYW5kbGUoKTsKKyAgICBEZWNpbWFsIHZhbHVlKCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZW51bSBSZXN1bHQgeworICAgICAgICBSZXN1bHRJc0xIUywK
KyAgICAgICAgUmVzdWx0SXNSSFMsCisgICAgICAgIFJlc3VsdElzVW5rbm93biwKKyAgICB9Owor
CisgICAgY29uc3QgRGVjaW1hbCYgbV9saHM7CisgICAgY29uc3QgRGVjaW1hbCYgbV9yaHM7Cisg
ICAgUmVzdWx0IG1fcmVzdWx0OworfTsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGZvciAxMjgg
Yml0IHVuc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYy4KK2NsYXNzIFVJbnQxMjggeworcHVibGlj
OgorICAgIFVJbnQxMjgodWludDY0X3QgbG93LCB1aW50NjRfdCBoaWdoKQorICAgICAgICA6IG1f
aGlnaChoaWdoKSwgbV9sb3cobG93KQorICAgIHsKKyAgICB9CisKKyAgICBVSW50MTI4JiBvcGVy
YXRvci89KHVpbnQzMl90KTsKKworICAgIHVpbnQ2NF90IGhpZ2goKSBjb25zdCB7IHJldHVybiBt
X2hpZ2g7IH0KKyAgICB1aW50NjRfdCBsb3coKSBjb25zdCB7IHJldHVybiBtX2xvdzsgfQorCisg
ICAgc3RhdGljIFVJbnQxMjggbXVsdGlwbHkodWludDY0X3QgdSwgdWludDY0X3QgdikgeyByZXR1
cm4gVUludDEyOCh1ICogdiwgbXVsdGlwbHlIaWdoKHUsIHYpKTsgfQorCitwcml2YXRlOgorICAg
IHN0YXRpYyB1aW50MzJfdCBoaWdoVUludDMyKHVpbnQ2NF90IHgpIHsgcmV0dXJuIHVpbnQzMl90
KHggPj4gMzIpOyB9CisgICAgc3RhdGljIHVpbnQzMl90IGxvd1VJbnQzMih1aW50NjRfdCB4KSB7
IHJldHVybiB1aW50MzJfdCh4ICYgKCh1aW50NjRfdCgxKSA8PCAzMikgLSAxKSk7IH0KKyAgICBi
b29sIGlzWmVybygpIGNvbnN0IHsgcmV0dXJuICFtX2xvdyAmJiAhbV9oaWdoOyB9CisgICAgc3Rh
dGljIHVpbnQ2NF90IG1ha2VVaW50NjQodWludDMyX3QgbG93LCB1aW50MzJfdCBoaWdoKSB7IHJl
dHVybiBsb3cgfCAodWludDY0X3QoaGlnaCkgPDwgMzIpOyB9CisKKyAgICBzdGF0aWMgdWludDY0
X3QgbXVsdGlwbHlIaWdoKHVpbnQ2NF90LCB1aW50NjRfdCk7CisKKyAgICB1aW50NjRfdCBtX2hp
Z2g7CisgICAgdWludDY0X3QgbV9sb3c7Cit9OworCisKK1VJbnQxMjgmIFVJbnQxMjg6Om9wZXJh
dG9yLz0oY29uc3QgdWludDMyX3QgZGl2aXNvcikKK3sKKyAgICBBU1NFUlQoZGl2aXNvcik7CisK
KyAgICBpZiAoIW1faGlnaCkgeworICAgICAgICBtX2xvdyAvPSBkaXZpc29yOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdWludDMyX3QgZGl2aWRlbmRbNF07CisgICAgZGl2
aWRlbmRbMF0gPSB1aW50MzJfdChtX2xvdyAmIHVpbnQzMl90KC0xKSk7CisgICAgZGl2aWRlbmRb
MV0gPSB1aW50MzJfdChtX2xvdyA+PiAzMik7CisgICAgZGl2aWRlbmRbMl0gPSB1aW50MzJfdCht
X2hpZ2ggJiB1aW50MzJfdCgtMSkpOworICAgIGRpdmlkZW5kWzNdID0gdWludDMyX3QobV9oaWdo
ID4+IDMyKTsKKworICAgIHVpbnQzMl90IHF1b3RpZW50WzRdOworICAgIHVpbnQzMl90IHJlbWFp
bmRlciA9IDA7CisgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNv
bnN0IHVpbnQ2NF90IHdvcmsgPSAodWludDY0X3QocmVtYWluZGVyKSA8PCAzMikgfCBkaXZpZGVu
ZFtpXTsKKyAgICAgICAgcmVtYWluZGVyID0gdWludDMyX3Qod29yayAlIGRpdmlzb3IpOworICAg
ICAgICBxdW90aWVudFtpXSA9IHVpbnQzMl90KHdvcmsgLyBkaXZpc29yKTsKKyAgICB9CisgICAg
bV9sb3cgPSBtYWtlVWludDY0KHF1b3RpZW50WzBdLCBxdW90aWVudFsxXSk7CisgICAgbV9oaWdo
ID0gbWFrZVVpbnQ2NChxdW90aWVudFsyXSwgcXVvdGllbnRbM10pOworICAgIHJldHVybiAqdGhp
czsKK30KKworLy8gUmV0dXJucyBoaWdoIDY0Yml0IG9mIDEyOGJpdCBwcm9kdWN0LgordWludDY0
X3QgVUludDEyODo6bXVsdGlwbHlIaWdoKHVpbnQ2NF90IHUsIHVpbnQ2NF90IHYpCit7CisgICAg
Y29uc3QgdWludDY0X3QgdUxvdyA9IGxvd1VJbnQzMih1KTsKKyAgICBjb25zdCB1aW50NjRfdCB1
SGlnaCA9IGhpZ2hVSW50MzIodSk7CisgICAgY29uc3QgdWludDY0X3QgdkxvdyA9IGxvd1VJbnQz
Mih2KTsKKyAgICBjb25zdCB1aW50NjRfdCB2SGlnaCA9IGhpZ2hVSW50MzIodik7CisgICAgY29u
c3QgdWludDY0X3QgcGFydGlhbFByb2R1Y3QgPSB1SGlnaCAqIHZMb3cgKyBoaWdoVUludDMyKHVM
b3cgKiB2TG93KTsKKyAgICByZXR1cm4gdUhpZ2ggKiB2SGlnaCArIGhpZ2hVSW50MzIocGFydGlh
bFByb2R1Y3QpICsgaGlnaFVJbnQzMih1TG93ICogdkhpZ2ggKyBsb3dVSW50MzIocGFydGlhbFBy
b2R1Y3QpKTsKK30KKworc3RhdGljIGludCBjb3VudERpZ2l0cyh1aW50NjRfdCB4KQoreworICAg
IGludCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgZm9yICh1aW50NjRfdCBwb3dlck9mVGVuID0g
MTsgeCA+PSBwb3dlck9mVGVuOyBwb3dlck9mVGVuICo9IDEwKSB7CisgICAgICAgICsrbnVtYmVy
T2ZEaWdpdHM7CisgICAgICAgIGlmIChwb3dlck9mVGVuID49IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDY0X3Q+OjptYXgoKSAvIDEwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiBudW1iZXJPZkRpZ2l0czsKK30KKworc3RhdGljIHVpbnQ2NF90IHNjYWxlRG93bih1aW50
NjRfdCB4LCBpbnQgbikKK3sKKyAgICBBU1NFUlQobiA+PSAwKTsKKyAgICB3aGlsZSAobiA+IDAg
JiYgeCkgeworICAgICAgICB4IC89IDEwOworICAgICAgICAtLW47CisgICAgfQorICAgIHJldHVy
biB4OworfQorCitzdGF0aWMgdWludDY0X3Qgc2NhbGVVcCh1aW50NjRfdCB4LCBpbnQgbikKK3sK
KyAgICBBU1NFUlQobiA+PSAwKTsKKyAgICBBU1NFUlQobiA8IFByZWNpc2lvbik7CisKKyAgICB1
aW50NjRfdCB5ID0gMTsKKyAgICB1aW50NjRfdCB6ID0gMTA7CisgICAgZm9yICg7OykgeworICAg
ICAgICBpZiAobiAmIDEpCisgICAgICAgICAgICB5ID0geSAqIHo7CisKKyAgICAgICAgbiA+Pj0g
MTsKKyAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgcmV0dXJuIHggKiB5OworCisgICAgICAg
IHogPSB6ICogejsKKyAgICB9Cit9CisKK1NwZWNpYWxWYWx1ZUhhbmRsZXI6OlNwZWNpYWxWYWx1
ZUhhbmRsZXIoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBEZWNpbWFsJiByaHMpCisgICAgOiBt
X2xocyhsaHMpLCBtX3JocyhyaHMpLCBtX3Jlc3VsdChSZXN1bHRJc1Vua25vd24pCit7Cit9CisK
K1NwZWNpYWxWYWx1ZUhhbmRsZXI6OkhhbmRsZVJlc3VsdCBTcGVjaWFsVmFsdWVIYW5kbGVyOjpo
YW5kbGUoKQoreworICAgIGlmIChtX2xocy5pc0Zpbml0ZSgpICYmIG1fcmhzLmlzRmluaXRlKCkp
CisgICAgICAgIHJldHVybiBCb3RoRmluaXRlOworCisgICAgY29uc3QgRGVjaW1hbDo6RW5jb2Rl
ZERhdGE6OkZvcm1hdENsYXNzIGxoc0NsYXNzID0gbV9saHMudmFsdWUoKS5mb3JtYXRDbGFzcygp
OworICAgIGNvbnN0IERlY2ltYWw6OkVuY29kZWREYXRhOjpGb3JtYXRDbGFzcyByaHNDbGFzcyA9
IG1fcmhzLnZhbHVlKCkuZm9ybWF0Q2xhc3MoKTsKKyAgICBpZiAobGhzQ2xhc3MgPT0gRGVjaW1h
bDo6RW5jb2RlZERhdGE6OkNsYXNzTmFOKSB7CisgICAgICAgIG1fcmVzdWx0ID0gUmVzdWx0SXNM
SFM7CisgICAgICAgIHJldHVybiBFaXRoZXJOYU47CisgICAgIH0KKworICAgIGlmIChyaHNDbGFz
cyA9PSBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Q2xhc3NOYU4pIHsKKyAgICAgICAgbV9yZXN1bHQg
PSBSZXN1bHRJc1JIUzsKKyAgICAgICAgcmV0dXJuIEVpdGhlck5hTjsKKyAgICAgfQorCisgICAg
aWYgKGxoc0NsYXNzID09IERlY2ltYWw6OkVuY29kZWREYXRhOjpDbGFzc0luZmluaXR5KQorICAg
ICAgICByZXR1cm4gcmhzQ2xhc3MgPT0gRGVjaW1hbDo6RW5jb2RlZERhdGE6OkNsYXNzSW5maW5p
dHkgPyBCb3RoSW5maW5pdHkgOiBMSFNJc0luZmluaXR5OworCisgICAgaWYgKHJoc0NsYXNzID09
IERlY2ltYWw6OkVuY29kZWREYXRhOjpDbGFzc0luZmluaXR5KQorICAgICAgICByZXR1cm4gUkhT
SXNJbmZpbml0eTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBCb3Ro
RmluaXRlOworfQorCitEZWNpbWFsIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OnZhbHVlKCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG1fcmVzdWx0KSB7CisgICAgY2FzZSBSZXN1bHRJc0xIUzoKKyAgICAg
ICAgcmV0dXJuIG1fbGhzOworICAgIGNhc2UgUmVzdWx0SXNSSFM6CisgICAgICAgIHJldHVybiBt
X3JoczsKKyAgICBjYXNlIFJlc3VsdElzVW5rbm93bjoKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG1fbGhzOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgRGVjaW1hbFByaXZhdGUKKwordXNpbmcgbmFtZXNwYWNlIERlY2ltYWxQ
cml2YXRlOworCitEZWNpbWFsOjpFbmNvZGVkRGF0YTo6RW5jb2RlZERhdGEoU2lnbiBzaWduLCBG
b3JtYXRDbGFzcyBmb3JtYXRDbGFzcykKKyAgICA6IG1fY29lZmZpY2llbnQoMCkKKyAgICAsIG1f
ZXhwb25lbnQoMCkKKyAgICAsIG1fZm9ybWF0Q2xhc3MoZm9ybWF0Q2xhc3MpCisgICAgLCBtX3Np
Z24oc2lnbikKK3sKK30KKworRGVjaW1hbDo6RW5jb2RlZERhdGE6OkVuY29kZWREYXRhKFNpZ24g
c2lnbiwgaW50IGV4cG9uZW50LCB1aW50NjRfdCBjb2VmZmljaWVudCkKKyAgICA6IG1fZm9ybWF0
Q2xhc3MoY29lZmZpY2llbnQgPyBDbGFzc05vcm1hbCA6IENsYXNzWmVybykKKyAgICAsIG1fc2ln
bihzaWduKQoreworICAgIGlmIChleHBvbmVudCA+PSBFeHBvbmVudE1pbiAmJiBleHBvbmVudCA8
PSBFeHBvbmVudE1heCkgeworICAgICAgICB3aGlsZSAoY29lZmZpY2llbnQgPj0gTWF4Q29lZmZp
Y2llbnQpIHsKKyAgICAgICAgICAgIGNvZWZmaWNpZW50IC89IDEwOworICAgICAgICAgICAgKytl
eHBvbmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChleHBvbmVudCA+IEV4cG9uZW50
TWF4KSB7CisgICAgICAgIG1fY29lZmZpY2llbnQgPSAwOworICAgICAgICBtX2V4cG9uZW50ID0g
MDsKKyAgICAgICAgbV9mb3JtYXRDbGFzcyA9IENsYXNzSW5maW5pdHk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZXhwb25lbnQgPCBFeHBvbmVudE1pbikgeworICAgICAgICBt
X2NvZWZmaWNpZW50ID0gMDsKKyAgICAgICAgbV9leHBvbmVudCA9IDA7CisgICAgICAgIG1fZm9y
bWF0Q2xhc3MgPSBDbGFzc1plcm87CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Nv
ZWZmaWNpZW50ID0gY29lZmZpY2llbnQ7CisgICAgbV9leHBvbmVudCA9IGludDE2X3QoZXhwb25l
bnQpOworfQorCitib29sIERlY2ltYWw6OkVuY29kZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IEVu
Y29kZWREYXRhJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3NpZ24gPT0gYW5vdGhl
ci5tX3NpZ24KKyAgICAgICAgJiYgbV9mb3JtYXRDbGFzcyA9PSBhbm90aGVyLm1fZm9ybWF0Q2xh
c3MKKyAgICAgICAgJiYgbV9leHBvbmVudCA9PSBhbm90aGVyLm1fZXhwb25lbnQKKyAgICAgICAg
JiYgbV9jb2VmZmljaWVudCA9PSBhbm90aGVyLm1fY29lZmZpY2llbnQ7Cit9CisKK0RlY2ltYWw6
OkRlY2ltYWwoaW50MzJfdCBpMzIpCisgICAgOiBtX2RhdGEoaTMyIDwgMCA/IE5lZ2F0aXZlIDog
UG9zaXRpdmUsIDAsIGkzMiA8IDAgPyB1aW50MzJfdCgtaTMyKSA6IGkzMikKK3sKK30KKworRGVj
aW1hbDo6RGVjaW1hbChTaWduIHNpZ24sIGludCBleHBvbmVudCwgdWludDY0X3QgY29lZmZpY2ll
bnQpCisgICAgOiBtX2RhdGEoc2lnbiwgZXhwb25lbnQsIGNvZWZmaWNpZW50KQoreworfQorCitE
ZWNpbWFsOjpEZWNpbWFsKGNvbnN0IEVuY29kZWREYXRhJiBkYXRhKQorICAgIDogbV9kYXRhKGRh
dGEpCit7Cit9CisKK0RlY2ltYWw6OkRlY2ltYWwoY29uc3QgRGVjaW1hbCYgb3RoZXIpCisgICAg
OiBtX2RhdGEob3RoZXIubV9kYXRhKQoreworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRv
cj0oY29uc3QgRGVjaW1hbCYgb3RoZXIpCit7CisgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwor
ICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IrPShjb25z
dCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgKyBvdGhlcikubV9kYXRh
OworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3ItPShj
b25zdCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgLSBvdGhlcikubV9k
YXRhOworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3Iq
PShjb25zdCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgKiBvdGhlciku
bV9kYXRhOworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0
b3IvPShjb25zdCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgLyBvdGhl
cikubV9kYXRhOworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVy
YXRvci0oKSBjb25zdAoreworICAgIERlY2ltYWwgcmVzdWx0KCp0aGlzKTsKKyAgICByZXN1bHQu
bV9kYXRhLnNldFNpZ24oaW52ZXJ0U2lnbihtX2RhdGEuc2lnbigpKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRvcisoY29uc3QgRGVjaW1hbCYgcmhz
KSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9ICp0aGlzOworICAgIGNvbnN0IFNp
Z24gbGhzU2lnbiA9IGxocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByaHNTaWduID0gcmhzLnNp
Z24oKTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAg
c3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVy
OjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFu
ZGxlcjo6Qm90aEluZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzU2lnbiA9PSByaHNTaWduID8g
bGhzIDogbmFuKCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoK
KyAgICAgICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVl
SGFuZGxlcjo6TEhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxoczsKKworICAgIGNhc2Ug
U3BlY2lhbFZhbHVlSGFuZGxlcjo6UkhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHJoczsK
KyAgICB9CisKKyAgICBjb25zdCBBbGlnbmVkT3BlcmFuZHMgYWxpZ25lZE9wZXJhbmRzID0gYWxp
Z25PcGVyYW5kcyhsaHMsIHJocyk7CisKKyAgICBjb25zdCB1aW50NjRfdCByZXN1bHQgPSBsaHNT
aWduID09IHJoc1NpZ24KKyAgICAgICAgPyBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQg
KyBhbGlnbmVkT3BlcmFuZHMucmhzQ29lZmZpY2llbnQKKyAgICAgICAgOiBhbGlnbmVkT3BlcmFu
ZHMubGhzQ29lZmZpY2llbnQgLSBhbGlnbmVkT3BlcmFuZHMucmhzQ29lZmZpY2llbnQ7CisgICAg
aWYgKGxoc1NpZ24gPT0gTmVnYXRpdmUgJiYgcmhzU2lnbiA9PSBQb3NpdGl2ZSAmJiAhcmVzdWx0
KQorICAgICAgICByZXR1cm4gRGVjaW1hbChQb3NpdGl2ZSwgYWxpZ25lZE9wZXJhbmRzLmV4cG9u
ZW50LCAwKTsKKworICAgIHJldHVybiBpbnQ2NF90KHJlc3VsdCkgPj0gMAorICAgICAgICA/IERl
Y2ltYWwobGhzU2lnbiwgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50LCByZXN1bHQpCisgICAgICAg
IDogRGVjaW1hbChpbnZlcnRTaWduKGxoc1NpZ24pLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQs
IC1pbnQ2NF90KHJlc3VsdCkpOworfQorCitEZWNpbWFsIERlY2ltYWw6Om9wZXJhdG9yLShjb25z
dCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29uc3QgRGVjaW1hbCYgbGhzID0gKnRoaXM7
CisgICAgY29uc3QgU2lnbiBsaHNTaWduID0gbGhzLnNpZ24oKTsKKyAgICBjb25zdCBTaWduIHJo
c1NpZ24gPSByaHMuc2lnbigpOworCisgICAgU3BlY2lhbFZhbHVlSGFuZGxlciBoYW5kbGVyKGxo
cywgcmhzKTsKKyAgICBzd2l0Y2ggKGhhbmRsZXIuaGFuZGxlKCkpIHsKKyAgICBjYXNlIFNwZWNp
YWxWYWx1ZUhhbmRsZXI6OkJvdGhGaW5pdGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBT
cGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoSW5maW5pdHk6CisgICAgICAgIHJldHVybiBsaHNTaWdu
ID09IHJoc1NpZ24gPyBuYW4oKSA6IGxoczsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxl
cjo6RWl0aGVyTmFOOgorICAgICAgICByZXR1cm4gaGFuZGxlci52YWx1ZSgpOworCisgICAgY2Fz
ZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpMSFNJc0luZmluaXR5OgorICAgICAgICByZXR1cm4gbGhz
OworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSSFNJc0luZmluaXR5OgorICAgICAg
ICByZXR1cm4gaW5maW5pdHkoaW52ZXJ0U2lnbihyaHNTaWduKSk7CisgICAgfQorCisgICAgY29u
c3QgQWxpZ25lZE9wZXJhbmRzIGFsaWduZWRPcGVyYW5kcyA9IGFsaWduT3BlcmFuZHMobGhzLCBy
aHMpOworCisgICAgY29uc3QgdWludDY0X3QgcmVzdWx0ID0gbGhzU2lnbiA9PSByaHNTaWduCisg
ICAgICAgID8gYWxpZ25lZE9wZXJhbmRzLmxoc0NvZWZmaWNpZW50IC0gYWxpZ25lZE9wZXJhbmRz
LnJoc0NvZWZmaWNpZW50CisgICAgICAgIDogYWxpZ25lZE9wZXJhbmRzLmxoc0NvZWZmaWNpZW50
ICsgYWxpZ25lZE9wZXJhbmRzLnJoc0NvZWZmaWNpZW50OworCisgICAgcmV0dXJuIGxoc1NpZ24g
PT0gTmVnYXRpdmUgJiYgcmhzU2lnbiA9PSBOZWdhdGl2ZSAmJiAhcmVzdWx0CisgICAgICAgICAg
ICA/IERlY2ltYWwoUG9zaXRpdmUsIGFsaWduZWRPcGVyYW5kcy5leHBvbmVudCwgMCkKKyAgICAg
ICAgICAgIDogaW50NjRfdChyZXN1bHQpID49IDAKKyAgICAgICAgICAgICAgICA/IERlY2ltYWwo
bGhzU2lnbiwgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50LCByZXN1bHQpCisgICAgICAgICAgICAg
ICAgOiBEZWNpbWFsKGludmVydFNpZ24obGhzU2lnbiksIGFsaWduZWRPcGVyYW5kcy5leHBvbmVu
dCwgLWludDY0X3QocmVzdWx0KSk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IqKGNv
bnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsJiBsaHMgPSAqdGhp
czsKKyAgICBjb25zdCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24g
cmhzU2lnbiA9IHJocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByZXN1bHRTaWduID0gbGhzU2ln
biA9PSByaHNTaWduID8gUG9zaXRpdmUgOiBOZWdhdGl2ZTsKKworICAgIFNwZWNpYWxWYWx1ZUhh
bmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7
CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOiB7CisgICAgICAgIGNv
bnN0IHVpbnQ2NF90IGxoc0NvZWZmaWNpZW50ID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOwor
ICAgICAgICBjb25zdCB1aW50NjRfdCByaHNDb2VmZmljaWVudCA9IHJocy5tX2RhdGEuY29lZmZp
Y2llbnQoKTsKKyAgICAgICAgaW50IHJlc3VsdEV4cG9uZW50ID0gbGhzLmV4cG9uZW50KCkgKyBy
aHMuZXhwb25lbnQoKTsKKyAgICAgICAgVUludDEyOCB3b3JrKFVJbnQxMjg6Om11bHRpcGx5KGxo
c0NvZWZmaWNpZW50LCByaHNDb2VmZmljaWVudCkpOworICAgICAgICB3aGlsZSAod29yay5oaWdo
KCkpIHsKKyAgICAgICAgICAgIHdvcmsgLz0gMTA7CisgICAgICAgICAgICArK3Jlc3VsdEV4cG9u
ZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3Vs
dEV4cG9uZW50LCB3b3JrLmxvdygpKTsKKyAgICB9CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhh
bmRsZXI6OkJvdGhJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGluZmluaXR5KHJlc3VsdFNpZ24p
OworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpFaXRoZXJOYU46CisgICAgICAgIHJl
dHVybiBoYW5kbGVyLnZhbHVlKCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkxI
U0lzSW5maW5pdHk6CisgICAgICAgIHJldHVybiByaHMuaXNaZXJvKCkgPyBuYW4oKSA6IGluZmlu
aXR5KHJlc3VsdFNpZ24pOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSSFNJc0lu
ZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzLmlzWmVybygpID8gbmFuKCkgOiBpbmZpbml0eShy
ZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbmFuKCk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IvKGNvbnN0IERlY2ltYWwm
IHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsJiBsaHMgPSAqdGhpczsKKyAgICBjb25z
dCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24gcmhzU2lnbiA9IHJo
cy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByZXN1bHRTaWduID0gbGhzU2lnbiA9PSByaHNTaWdu
ID8gUG9zaXRpdmUgOiBOZWdhdGl2ZTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxl
cihsaHMsIHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBT
cGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAgIGNh
c2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEluZmluaXR5OgorICAgICAgICByZXR1cm4gbmFu
KCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAgICAg
cmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6
TEhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGluZmluaXR5KHJlc3VsdFNpZ24pOworCisg
ICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSSFNJc0luZmluaXR5OgorICAgICAgICByZXR1
cm4gemVybyhyZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBBU1NFUlQobGhzLmlzRmluaXRlKCkp
OworICAgIEFTU0VSVChyaHMuaXNGaW5pdGUoKSk7CisKKyAgICBpZiAocmhzLmlzWmVybygpKQor
ICAgICAgICByZXR1cm4gbGhzLmlzWmVybygpID8gbmFuKCkgOiBpbmZpbml0eShyZXN1bHRTaWdu
KTsKKworICAgIGludCByZXN1bHRFeHBvbmVudCA9IGxocy5leHBvbmVudCgpIC0gcmhzLmV4cG9u
ZW50KCk7CisKKyAgICBpZiAobGhzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gRGVjaW1hbChy
ZXN1bHRTaWduLCByZXN1bHRFeHBvbmVudCwgMCk7CisKKyAgICB1aW50NjRfdCByZW1haW5kZXIg
PSBsaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgdWludDY0X3QgZGl2aXNvciA9
IHJocy5tX2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAg
IHdoaWxlIChyZXN1bHQgPCBNYXhDb2VmZmljaWVudCAvIDEwMCkgeworICAgICAgICB3aGlsZSAo
cmVtYWluZGVyIDwgZGl2aXNvcikgeworICAgICAgICAgICAgcmVtYWluZGVyICo9IDEwOworICAg
ICAgICAgICAgcmVzdWx0ICo9IDEwOworICAgICAgICAgICAgLS1yZXN1bHRFeHBvbmVudDsKKyAg
ICAgICAgfQorICAgICAgICByZXN1bHQgKz0gcmVtYWluZGVyIC8gZGl2aXNvcjsKKyAgICAgICAg
cmVtYWluZGVyICU9IGRpdmlzb3I7CisgICAgICAgIGlmICghcmVtYWluZGVyKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJlbWFpbmRlciA+IGRpdmlzb3IgLyAyKQorICAg
ICAgICArK3Jlc3VsdDsKKworICAgIHJldHVybiBEZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3VsdEV4
cG9uZW50LCByZXN1bHQpOworfQorCitib29sIERlY2ltYWw6Om9wZXJhdG9yPT0oY29uc3QgRGVj
aW1hbCYgcmhzKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEgPT0gcmhzLm1fZGF0YSB8fCBj
b21wYXJlVG8ocmhzKS5pc1plcm8oKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvciE9KGNv
bnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmhzKTsK
K30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvcjwoY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAor
eworICAgIHJldHVybiAhb3BlcmF0b3I+PShyaHMpOworfQorCitib29sIERlY2ltYWw6Om9wZXJh
dG9yPD0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGlmIChtX2RhdGEgPT0gcmhz
Lm1fZGF0YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgRGVjaW1hbCByZXN1bHQg
PSBjb21wYXJlVG8ocmhzKTsKKyAgICByZXR1cm4gcmVzdWx0LmlzWmVybygpIHx8IHJlc3VsdC5p
c05lZ2F0aXZlKCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6b3BlcmF0b3I+KGNvbnN0IERlY2ltYWwm
IHJocykgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yPD0ocmhzKTsKK30KKworYm9vbCBE
ZWNpbWFsOjpvcGVyYXRvcj49KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBpZiAo
bV9kYXRhID09IHJocy5tX2RhdGEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IERl
Y2ltYWwgcmVzdWx0ID0gY29tcGFyZVRvKHJocyk7CisgICAgcmV0dXJuIHJlc3VsdC5pc1plcm8o
KSB8fCAhcmVzdWx0LmlzTmVnYXRpdmUoKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjphYnMoKSBj
b25zdAoreworICAgIERlY2ltYWwgcmVzdWx0KCp0aGlzKTsKKyAgICByZXN1bHQubV9kYXRhLnNl
dFNpZ24oUG9zaXRpdmUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0RlY2ltYWw6OkFsaWdu
ZWRPcGVyYW5kcyBEZWNpbWFsOjphbGlnbk9wZXJhbmRzKGNvbnN0IERlY2ltYWwmIGxocywgY29u
c3QgRGVjaW1hbCYgcmhzKQoreworICAgIEFTU0VSVChsaHMuaXNGaW5pdGUoKSk7CisgICAgQVNT
RVJUKHJocy5pc0Zpbml0ZSgpKTsKKworICAgIGNvbnN0IGludCBsaHNFeHBvbmVudCA9IGxocy5l
eHBvbmVudCgpOworICAgIGNvbnN0IGludCByaHNFeHBvbmVudCA9IHJocy5leHBvbmVudCgpOwor
ICAgIGludCBleHBvbmVudCA9IHN0ZDo6bWluKGxoc0V4cG9uZW50LCByaHNFeHBvbmVudCk7Cisg
ICAgdWludDY0X3QgbGhzQ29lZmZpY2llbnQgPSBsaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7Cisg
ICAgdWludDY0X3QgcmhzQ29lZmZpY2llbnQgPSByaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisK
KyAgICBpZiAobGhzRXhwb25lbnQgPiByaHNFeHBvbmVudCkgeworICAgICAgICBjb25zdCBpbnQg
bnVtYmVyT2ZMSFNEaWdpdHMgPSBjb3VudERpZ2l0cyhsaHNDb2VmZmljaWVudCk7CisgICAgICAg
IGlmIChudW1iZXJPZkxIU0RpZ2l0cykgeworICAgICAgICAgICAgY29uc3QgaW50IGxoc1NoaWZ0
QW1vdW50ID0gbGhzRXhwb25lbnQgLSByaHNFeHBvbmVudDsKKyAgICAgICAgICAgIGNvbnN0IGlu
dCBvdmVyZmxvdyA9IG51bWJlck9mTEhTRGlnaXRzICsgbGhzU2hpZnRBbW91bnQgLSBQcmVjaXNp
b247CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPD0gMCkKKyAgICAgICAgICAgICAgICBsaHND
b2VmZmljaWVudCA9IHNjYWxlVXAobGhzQ29lZmZpY2llbnQsIGxoc1NoaWZ0QW1vdW50KTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVV
cChsaHNDb2VmZmljaWVudCwgbGhzU2hpZnRBbW91bnQgLSBvdmVyZmxvdyk7CisgICAgICAgICAg
ICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2FsZURvd24ocmhzQ29lZmZpY2llbnQsIG92ZXJmbG93
KTsKKyAgICAgICAgICAgICAgICBleHBvbmVudCArPSBvdmVyZmxvdzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgfSBpZiAobGhzRXhwb25lbnQgPCByaHNFeHBvbmVudCkgeworICAg
ICAgICBjb25zdCBpbnQgbnVtYmVyT2ZSSFNEaWdpdHMgPSBjb3VudERpZ2l0cyhyaHNDb2VmZmlj
aWVudCk7CisgICAgICAgIGlmIChudW1iZXJPZlJIU0RpZ2l0cykgeworICAgICAgICAgICAgY29u
c3QgaW50IHJoc1NoaWZ0QW1vdW50ID0gcmhzRXhwb25lbnQgLSBsaHNFeHBvbmVudDsKKyAgICAg
ICAgICAgIGNvbnN0IGludCBvdmVyZmxvdyA9IG51bWJlck9mUkhTRGlnaXRzICsgcmhzU2hpZnRB
bW91bnQgLSBQcmVjaXNpb247CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPD0gMCkKKyAgICAg
ICAgICAgICAgICByaHNDb2VmZmljaWVudCA9IHNjYWxlVXAocmhzQ29lZmZpY2llbnQsIHJoc1No
aWZ0QW1vdW50KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJoc0NvZWZm
aWNpZW50ID0gc2NhbGVVcChyaHNDb2VmZmljaWVudCwgcmhzU2hpZnRBbW91bnQgLSBvdmVyZmxv
dyk7CisgICAgICAgICAgICAgICAgbGhzQ29lZmZpY2llbnQgPSBzY2FsZURvd24obGhzQ29lZmZp
Y2llbnQsIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBleHBvbmVudCArPSBvdmVyZmxvdzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEFsaWduZWRPcGVyYW5kcyBh
bGlnbmVkT3BlcmFuZHM7CisgICAgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50ID0gZXhwb25lbnQ7
CisgICAgYWxpZ25lZE9wZXJhbmRzLmxoc0NvZWZmaWNpZW50ID0gbGhzQ29lZmZpY2llbnQ7Cisg
ICAgYWxpZ25lZE9wZXJhbmRzLnJoc0NvZWZmaWNpZW50ID0gcmhzQ29lZmZpY2llbnQ7CisgICAg
cmV0dXJuIGFsaWduZWRPcGVyYW5kczsKK30KKworLy8gUm91bmQgdG93YXJkIHBvc2l0aXZlIGlu
ZmluaXR5LgorLy8gTm90ZTogTWFjIHBvcnRzIGRlZmluZXMgY2VpbCh4KSBhcyB3dGZfY2VpbCh4
KSwgc28gd2UgY2FuJ3QgdXNlIG5hbWUgImNlaWwiIGhlcmUuCitEZWNpbWFsIERlY2ltYWw6OmNl
aWxpbmcoKSBjb25zdAoreworICAgIGlmIChpc1NwZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0
aGlzOworCisgICAgaWYgKGV4cG9uZW50KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
CisgICAgdWludDY0X3QgcmVzdWx0ID0gbV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3Qg
aW50IG51bWJlck9mRGlnaXRzID0gY291bnREaWdpdHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQg
bnVtYmVyT2ZEcm9wRGlnaXRzID0gLWV4cG9uZW50KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRz
IDwgbnVtYmVyT2ZEcm9wRGlnaXRzKQorICAgICAgICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisK
KyAgICByZXN1bHQgPSBzY2FsZURvd24ocmVzdWx0LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsK
KyAgICBpZiAoc2lnbigpID09IFBvc2l0aXZlICYmIHJlc3VsdCAlIDEwID4gMCkKKyAgICAgICAg
cmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsKKyAgICByZXR1cm4gRGVjaW1hbChzaWdu
KCksIDAsIHJlc3VsdCk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6Y29tcGFyZVRvKGNvbnN0IERl
Y2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCgqdGhpcyAtIHJo
cyk7CisgICAgcmV0dXJuIHJlc3VsdC5pc1plcm8oKQorICAgICAgICAgICAgPyB6ZXJvKFBvc2l0
aXZlKQorICAgICAgICAgICAgOiByZXN1bHQuaXNGaW5pdGUoKQorICAgICAgICAgICAgICAgICAg
ICA/IHJlc3VsdAorICAgICAgICAgICAgICAgICAgICA6IHJlc3VsdC5pc05lZ2F0aXZlKCkgPyBE
ZWNpbWFsKC0xKSA6IERlY2ltYWwoMSk7Cit9CisKKy8vIFJvdW5kIHRvd2FyZCBuZWdhdGl2ZSBp
bmZpbml0eS4KK0RlY2ltYWwgRGVjaW1hbDo6Zmxvb3IoKSBjb25zdAoreworICAgIGlmIChpc1Nw
ZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgaWYgKGV4cG9uZW50KCkgPj0g
MCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgdWludDY0X3QgcmVzdWx0ID0gbV9kYXRh
LmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRGlnaXRzID0gY291bnREaWdp
dHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEcm9wRGlnaXRzID0gLWV4cG9uZW50
KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgbnVtYmVyT2ZEcm9wRGlnaXRzKQorICAgICAg
ICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICByZXN1bHQgPSBzY2FsZURvd24ocmVzdWx0
LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBpZiAoaXNOZWdhdGl2ZSgpICYmIHJlc3Vs
dCAlIDEwID4gMCkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsKKyAg
ICByZXR1cm4gRGVjaW1hbChzaWduKCksIDAsIHJlc3VsdCk7Cit9CisKK0RlY2ltYWwgRGVjaW1h
bDo6ZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBpbnQgZXhwb25lbnQgPSAw
OworICAgIFNpZ24gZXhwb25lbnRTaWduID0gUG9zaXRpdmU7CisgICAgaW50IG51bWJlck9mRGln
aXRzID0gMDsKKyAgICBpbnQgbnVtYmVyT2ZEaWdpdHNBZnRlckRvdCA9IDA7CisgICAgaW50IG51
bWJlck9mRXh0cmFEaWdpdHMgPSAwOworICAgIFNpZ24gc2lnbiA9IFBvc2l0aXZlOworCisgICAg
ZW51bSB7CisgICAgICAgIFN0YXRlRGlnaXQsCisgICAgICAgIFN0YXRlRG90LAorICAgICAgICBT
dGF0ZURvdERpZ2l0LAorICAgICAgICBTdGF0ZUUsCisgICAgICAgIFN0YXRlRURpZ2l0LAorICAg
ICAgICBTdGF0ZUVTaWduLAorICAgICAgICBTdGF0ZVNpZ24sCisgICAgICAgIFN0YXRlU3RhcnQs
CisgICAgICAgIFN0YXRlWmVybywKKyAgICB9IHN0YXRlID0gU3RhdGVTdGFydDsKKworICAgICNk
ZWZpbmUgSGFuZGxlQ2hhckFuZEJyZWFrKGV4cGVjdGVkLCBuZXh0U3RhdGUpIFwKKyAgICAgICAg
aWYgKGNoID09IGV4cGVjdGVkKSB7IFwKKyAgICAgICAgICAgIHN0YXRlID0gbmV4dFN0YXRlOyBc
CisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9CisKKyAgICAjZGVmaW5lIEhhbmRsZVR3
b0NoYXJzQW5kQnJlYWsoZXhwZWN0ZWQxLCBleHBlY3RlZDIsIG5leHRTdGF0ZSkgXAorICAgICAg
ICBpZiAoY2ggPT0gZXhwZWN0ZWQxIHx8IGNoID09IGV4cGVjdGVkMikgeyBcCisgICAgICAgICAg
ICBzdGF0ZSA9IG5leHQ7IFwKKyAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIH0KKworICAg
IHVpbnQ2NF90IGFjY3VtdWxhdG9yID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBzdHIubGVuZ3RoKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgaW50IGNoID0g
c3RyW2luZGV4XTsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIFN0YXRl
RGlnaXQ6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAg
ICAgICAgICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IFByZWNpc2lvbikgeworICAgICAgICAgICAg
ICAgICAgICArK251bWJlck9mRGlnaXRzOworICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRv
ciAqPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gY2ggLSAnMCc7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZFeHRy
YURpZ2l0czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgSGFuZGxlQ2hhckFuZEJyZWFrKCcuJywgU3RhdGVEb3QpOworICAgICAgICAgICAgSGFu
ZGxlVHdvQ2hhcnNBbmRCcmVhaygnRScsICdlJywgU3RhdGVFKTsKKyAgICAgICAgICAgIHJldHVy
biBuYW4oKTsKKworICAgICAgICBjYXNlIFN0YXRlRG90OgorICAgICAgICAgICAgaWYgKGNoID49
ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZEaWdpdHMg
PCBQcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAg
ICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0c0FmdGVyRG90OworICAgICAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRvciAqPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0
b3IgKz0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YXRl
ID0gU3RhdGVEb3REaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICBjYXNlIFN0YXRlRG90RGlnaXQ6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAn
ICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IFBy
ZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRzOworICAgICAg
ICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRzQWZ0ZXJEb3Q7CisgICAgICAgICAgICAgICAg
ICAgIGFjY3VtdWxhdG9yICo9IDEwOworICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciAr
PSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEhhbmRsZVR3b0NoYXJzQW5kQnJlYWsoJ0UnLCAn
ZScsIFN0YXRlRSk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBT
dGF0ZUU6CisgICAgICAgICAgICBpZiAoY2ggPT0gJysnKSB7CisgICAgICAgICAgICAgICAgZXhw
b25lbnRTaWduID0gUG9zaXRpdmU7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVTaWdu
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgZXhwb25lbnRTaWduID0gTmVnYXRpdmU7
CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVTaWduOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9
ICc5JykgeworICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gY2ggLSAnMCc7CisgICAgICAgICAg
ICAgICAgc3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3Rh
dGVFRGlnaXQ6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAg
ICAgICAgICAgICAgIGV4cG9uZW50ICo9IDEwOworICAgICAgICAgICAgICAgIGV4cG9uZW50ICs9
IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIGlmIChleHBvbmVudCA+IEV4cG9uZW50TWF4ICsg
UHJlY2lzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhY2N1bXVsYXRvcikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBvbmVudFNpZ24gPT0gTmVnYXRpdmUgPyB6ZXJv
KFBvc2l0aXZlKSA6IGluZmluaXR5KHNpZ24pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
emVybyhzaWduKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdGUgPSBT
dGF0ZUVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVFU2lnbjoKKyAgICAg
ICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZXhw
b25lbnQgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRURpZ2l0Owor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0ZVNpZ246CisgICAgICAgICAgICBpZiAoY2gg
Pj0gJzEnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2gg
LSAnMCc7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZEaWdpdHMgPSAxOworICAgICAgICAgICAg
ICAgIHN0YXRlID0gU3RhdGVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgSGFuZGxlQ2hhckFuZEJyZWFrKCcwJywgU3RhdGVaZXJvKTsK
KyAgICAgICAgICAgIHJldHVybiBuYW4oKTsKKworICAgICAgICBjYXNlIFN0YXRlU3RhcnQ6Cisg
ICAgICAgICAgICBpZiAoY2ggPj0gJzEnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAg
IGFjY3VtdWxhdG9yID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZEaWdpdHMg
PSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVEaWdpdDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09ICctJykgewor
ICAgICAgICAgICAgICAgIHNpZ24gPSBOZWdhdGl2ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlU2lnbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGNoID09ICcrJykgeworICAgICAgICAgICAgICAgIHNpZ24gPSBQb3NpdGl2
ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlU2lnbjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSGFuZGxlQ2hhckFuZEJyZWFrKCcw
JywgU3RhdGVaZXJvKTsKKyAgICAgICAgICAgIEhhbmRsZUNoYXJBbmRCcmVhaygnLicsIFN0YXRl
RG90KTsKKyAgICAgICAgICAgIHJldHVybiBuYW4oKTsKKworICAgICAgICBjYXNlIFN0YXRlWmVy
bzoKKyAgICAgICAgICAgIGlmIChjaCA9PSAnMCcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGlmIChjaCA+PSAnMScgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAg
ICAgYWNjdW11bGF0b3IgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRpZ2l0
cyA9IDE7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZURpZ2l0OworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYW5kbGVDaGFyQW5kQnJl
YWsoJy4nLCBTdGF0ZURvdCk7CisgICAgICAgICAgICBIYW5kbGVUd29DaGFyc0FuZEJyZWFrKCdF
JywgJ2UnLCBTdGF0ZUUpOworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBuYW4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdGF0ZSA9PSBTdGF0ZVpl
cm8pCisgICAgICAgIHJldHVybiB6ZXJvKHNpZ24pOworCisgICAgaWYgKHN0YXRlID09IFN0YXRl
RGlnaXQgfHwgc3RhdGUgPT0gU3RhdGVFRGlnaXQgfHwgc3RhdGUgPT0gU3RhdGVEb3REaWdpdCkg
eworICAgICAgICBpbnQgcmVzdWx0RXhwb25lbnQgPSBleHBvbmVudCAqIChleHBvbmVudFNpZ24g
PT0gTmVnYXRpdmUgPyAtMSA6IDEpIC0gbnVtYmVyT2ZEaWdpdHNBZnRlckRvdCArIG51bWJlck9m
RXh0cmFEaWdpdHM7CisgICAgICAgIGlmIChyZXN1bHRFeHBvbmVudCA8IEV4cG9uZW50TWluKQor
ICAgICAgICAgICAgcmV0dXJuIHplcm8oUG9zaXRpdmUpOworCisgICAgICAgIGNvbnN0IGludCBv
dmVyZmxvdyA9IHJlc3VsdEV4cG9uZW50IC0gRXhwb25lbnRNYXggKyAxOworICAgICAgICBpZiAo
b3ZlcmZsb3cgPiAwKSB7CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgKyBudW1iZXJPZkRpZ2l0
cyAtIG51bWJlck9mRGlnaXRzQWZ0ZXJEb3QgPiBQcmVjaXNpb24pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGluZmluaXR5KHNpZ24pOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBzY2FsZVVw
KGFjY3VtdWxhdG9yLCBvdmVyZmxvdyk7CisgICAgICAgICAgICByZXN1bHRFeHBvbmVudCAtPSBv
dmVyZmxvdzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBEZWNpbWFsKHNpZ24sIHJlc3Vs
dEV4cG9uZW50LCBhY2N1bXVsYXRvcik7CisgICAgfQorCisgICAgcmV0dXJuIG5hbigpOworfQor
CitEZWNpbWFsIERlY2ltYWw6OmluZmluaXR5KGNvbnN0IFNpZ24gc2lnbikKK3sKKyAgICByZXR1
cm4gRGVjaW1hbChFbmNvZGVkRGF0YShzaWduLCBFbmNvZGVkRGF0YTo6Q2xhc3NJbmZpbml0eSkp
OworfQorCitEZWNpbWFsIERlY2ltYWw6Om5hbigpCit7CisgICAgcmV0dXJuIERlY2ltYWwoRW5j
b2RlZERhdGEoUG9zaXRpdmUsIEVuY29kZWREYXRhOjpDbGFzc05hTikpOworfQorCitEZWNpbWFs
IERlY2ltYWw6OnJlbWFpbmRlcihjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29u
c3QgRGVjaW1hbCBxdW90aWVudCA9ICgqdGhpcyAvIHJocykucm91bmQoKTsKKyAgICByZXR1cm4g
cXVvdGllbnQuaXNTcGVjaWFsKCkgPyBxdW90aWVudCA6ICp0aGlzIC0gcXVvdGllbnQgKiByaHM7
Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6cm91bmQoKSBjb25zdAoreworICAgIGlmIChpc1NwZWNp
YWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgaWYgKGV4cG9uZW50KCkgPj0gMCkK
KyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgdWludDY0X3QgcmVzdWx0ID0gbV9kYXRhLmNv
ZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRGlnaXRzID0gY291bnREaWdpdHMo
cmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEcm9wRGlnaXRzID0gLWV4cG9uZW50KCk7
CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgbnVtYmVyT2ZEcm9wRGlnaXRzKQorICAgICAgICBy
ZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICByZXN1bHQgPSBzY2FsZURvd24ocmVzdWx0LCBu
dW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBpZiAocmVzdWx0ICUgMTAgPj0gNSkKKyAgICAg
ICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsKKyAgICByZXR1cm4gRGVjaW1hbChz
aWduKCksIDAsIHJlc3VsdCk7Cit9CisKK1N0cmluZyBEZWNpbWFsOjp0b1N0cmluZygpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChtX2RhdGEuZm9ybWF0Q2xhc3MoKSkgeworICAgIGNhc2UgRW5jb2Rl
ZERhdGE6OkNsYXNzSW5maW5pdHk6CisgICAgICAgIHJldHVybiBzaWduKCkgPyAiLUluZmluaXR5
IiA6ICJJbmZpbml0eSI7CisKKyAgICBjYXNlIEVuY29kZWREYXRhOjpDbGFzc05hTjoKKyAgICAg
ICAgcmV0dXJuIHNpZ24oKSA/ICItTmFOIiA6ICJOYU4iOworCisgICAgY2FzZSBFbmNvZGVkRGF0
YTo6Q2xhc3NOb3JtYWw6CisgICAgY2FzZSBFbmNvZGVkRGF0YTo6Q2xhc3NaZXJvOgorICAgICAg
ICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
ICAgIGlmIChzaWduKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisKKyAgICBpbnQg
b3JpZ2luYWxFeHBvbmVudCA9IGV4cG9uZW50KCk7CisKKyAgICBjb25zdCBpbnQgbWF4RGlnaXRz
ID0gREJMX0RJRzsKKyAgICB1aW50NjRfdCBjb2VmZmljaWVudCA9IG1fZGF0YS5jb2VmZmljaWVu
dCgpOworICAgIGludCBsYXN0RGlnaXQgPSAwOworICAgIHdoaWxlIChjb3VudERpZ2l0cyhjb2Vm
ZmljaWVudCkgPiBtYXhEaWdpdHMpIHsKKyAgICAgICAgbGFzdERpZ2l0ID0gY29lZmZpY2llbnQg
JSAxMDsKKyAgICAgICAgY29lZmZpY2llbnQgLz0gMTA7CisgICAgICAgICsrb3JpZ2luYWxFeHBv
bmVudDsKKyAgICB9CisKKyAgICBpZiAobGFzdERpZ2l0ID49IDUpCisgICAgICAgICsrY29lZmZp
Y2llbnQ7CisKKyAgICB3aGlsZSAob3JpZ2luYWxFeHBvbmVudCA8IDAgJiYgY29lZmZpY2llbnQg
JiYgIShjb2VmZmljaWVudCAlIDEwKSkgeworICAgICAgICBjb2VmZmljaWVudCAvPSAxMDsKKyAg
ICAgICAgKytvcmlnaW5hbEV4cG9uZW50OworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyBkaWdp
dHMgPSBTdHJpbmc6Om51bWJlcihjb2VmZmljaWVudCk7CisgICAgaW50IGNvZWZmaWNpZW50TGVu
Z3RoID0gaW50KGRpZ2l0cy5sZW5ndGgoKSk7CisgICAgY29uc3QgaW50IGFkanVzdGVkRXhwb25l
bnQgPSBvcmlnaW5hbEV4cG9uZW50ICsgY29lZmZpY2llbnRMZW5ndGggLSAxOworICAgIGlmIChv
cmlnaW5hbEV4cG9uZW50IDw9IDAgJiYgYWRqdXN0ZWRFeHBvbmVudCA+PSAtNikgeworICAgICAg
ICBpZiAoIW9yaWdpbmFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRp
Z2l0cyk7CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGFkanVzdGVkRXhwb25lbnQgPj0gMCkgeworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb2VmZmljaWVudExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoZGlnaXRzW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBh
ZGp1c3RlZEV4cG9uZW50KQorICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIwLiIpOworICAgICAgICBmb3Ig
KGludCBpID0gYWRqdXN0ZWRFeHBvbmVudCArIDE7IGkgPCAwOyArK2kpCisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgnMCcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRpZ2l0cyk7CisK
KyAgICB9IGVsc2UgeworICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHNbMF0pOworICAgICAg
ICB3aGlsZSAoY29lZmZpY2llbnRMZW5ndGggPj0gMiAmJiBkaWdpdHNbY29lZmZpY2llbnRMZW5n
dGggLSAxXSA9PSAnMCcpCisgICAgICAgICAgICAtLWNvZWZmaWNpZW50TGVuZ3RoOworICAgICAg
ICBpZiAoY29lZmZpY2llbnRMZW5ndGggPj0gMikgeworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJy4nKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY29lZmZpY2llbnRMZW5n
dGg7ICsraSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHNbaV0pOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGFkanVzdGVkRXhwb25lbnQpIHsKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGFkanVzdGVkRXhwb25lbnQgPCAwID8gImUiIDogImUrIik7CisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihhZGp1c3RlZEV4cG9uZW50KSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworRGVj
aW1hbCBEZWNpbWFsOjp6ZXJvKFNpZ24gc2lnbikKK3sKKyAgICByZXR1cm4gRGVjaW1hbChFbmNv
ZGVkRGF0YShzaWduLCBFbmNvZGVkRGF0YTo6Q2xhc3NaZXJvKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWM1Yzll
ZWY5MGI0OTFhMThiZGU3OTg1YzBkMTg3ODViOTcwMjkzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5oCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgRGVj
aW1hbF9oCisjZGVmaW5lIERlY2ltYWxfaAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgRGVjaW1hbFByaXZhdGUgeworY2xhc3Mg
U3BlY2lhbFZhbHVlSGFuZGxlcjsKK30KKworLy8gVGhpcyBjbGFzcyByZXByZXNlbnRzIGRlY2lt
YWwgYmFzZSBmbG9hdGluZyBwb2ludCBudW1iZXIuCisvLworLy8gRklYTUU6IE9uY2UgYWxsIEMr
KyBjb21waWxlciBzdXBwb3J0IGRlY2ltYWwgdHlwZSwgd2Ugc2hvdWxkIHJlcGxhY2UgdGhpcwor
Ly8gY2xhc3MgdG8gY29tcGlsZXIgc3VwcG9ydGVkIG9uZS4gU2VlIGJlbG93IFVSSSBmb3IgY3Vy
cmVudCBzdGF0dXMgb2YgZGVjaW1hbAorLy8gdHlwZSBmb3IgQysrOiAvLyBodHRwOi8vd3d3Lm9w
ZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA2L24xOTc3Lmh0bWwKK2Ns
YXNzIERlY2ltYWwgeworcHVibGljOgorICAgIGVudW0gU2lnbiB7CisgICAgICAgIFBvc2l0aXZl
LAorICAgICAgICBOZWdhdGl2ZSwKKyAgICB9OworCisgICAgLy8gWW91IHNob3VsZCBub3QgdXNl
IEVuY29kZWREYXRhIG90aGVyIHRoYW4gdW5pdCB0ZXN0aW5nLgorICAgIGNsYXNzIEVuY29kZWRE
YXRhIHsKKyAgICAgICAgLy8gRm9yIGFjY2Vzc2luZyBGb3JtYXRDbGFzcy4KKyAgICAgICAgZnJp
ZW5kIGNsYXNzIERlY2ltYWw7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWNpbWFsUHJpdmF0ZTo6
U3BlY2lhbFZhbHVlSGFuZGxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEVuY29kZWREYXRhKFNp
Z24sIGludCBleHBvbmVudCwgdWludDY0X3QgY29lZmZpY2llbnQpOworCisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFbmNvZGVkRGF0YSYpIGNvbnN0OworICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgRW5jb2RlZERhdGEmIGFub3RoZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRv
cj09KGFub3RoZXIpOyB9CisKKyAgICAgICAgdWludDY0X3QgY29lZmZpY2llbnQoKSBjb25zdCB7
IHJldHVybiBtX2NvZWZmaWNpZW50OyB9CisgICAgICAgIGludCBjb3VudERpZ2l0cygpIGNvbnN0
OworICAgICAgICBpbnQgZXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX2V4cG9uZW50OyB9Cisg
ICAgICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVybiAhaXNTcGVjaWFsKCk7IH0KKyAg
ICAgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdENsYXNzID09IENs
YXNzSW5maW5pdHkgfHwgbV9mb3JtYXRDbGFzcyA9PSBDbGFzc05hTjsgfQorICAgICAgICBib29s
IGlzWmVybygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0Q2xhc3MgPT0gQ2xhc3NaZXJvOyB9Cisg
ICAgICAgIFNpZ24gc2lnbigpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbjsgfQorICAgICAgICB2b2lk
IHNldFNpZ24oU2lnbiBzaWduKSB7IG1fc2lnbiA9IHNpZ247IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIC8vIFlvdSBzaG91bGQgbm90IHVzZSBGb3JtYXRDbGFzcy4gVGhpcyBpcyBmb3IgaW1w
bGVtZW50YXRpb24uCisgICAgICAgIGVudW0gRm9ybWF0Q2xhc3MgeworICAgICAgICAgICAgQ2xh
c3NJbmZpbml0eSwKKyAgICAgICAgICAgIENsYXNzTm9ybWFsLAorICAgICAgICAgICAgQ2xhc3NO
YU4sCisgICAgICAgICAgICBDbGFzc1plcm8sCisgICAgICAgIH07CisKKyAgICAgICAgRW5jb2Rl
ZERhdGEoU2lnbiwgRm9ybWF0Q2xhc3MpOworICAgICAgICBGb3JtYXRDbGFzcyBmb3JtYXRDbGFz
cygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0Q2xhc3M7IH0KKworICAgICAgICB1aW50NjRfdCBt
X2NvZWZmaWNpZW50OworICAgICAgICBpbnQxNl90IG1fZXhwb25lbnQ7CisgICAgICAgIEZvcm1h
dENsYXNzIG1fZm9ybWF0Q2xhc3M7CisgICAgICAgIFNpZ24gbV9zaWduOworICAgIH07CisKKyAg
ICBEZWNpbWFsKGludDMyX3QgPSAwKTsKKyAgICBEZWNpbWFsKFNpZ24sIGludCBleHBvbmVudCwg
dWludDY0X3QgY29lZmZpY2llbnQpOworICAgIERlY2ltYWwoY29uc3QgRGVjaW1hbCYpOworCisg
ICAgRGVjaW1hbCYgb3BlcmF0b3I9KGNvbnN0IERlY2ltYWwmKTsKKyAgICBEZWNpbWFsJiBvcGVy
YXRvcis9KGNvbnN0IERlY2ltYWwmKTsKKyAgICBEZWNpbWFsJiBvcGVyYXRvci09KGNvbnN0IERl
Y2ltYWwmKTsKKyAgICBEZWNpbWFsJiBvcGVyYXRvcio9KGNvbnN0IERlY2ltYWwmKTsKKyAgICBE
ZWNpbWFsJiBvcGVyYXRvci89KGNvbnN0IERlY2ltYWwmKTsKKworICAgIERlY2ltYWwgb3BlcmF0
b3ItKCkgY29uc3Q7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVjaW1hbCYpIGNvbnN0
OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgYm9vbCBv
cGVyYXRvcjwoY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBEZWNpbWFsJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgRGVjaW1hbCYpIGNv
bnN0OworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisKKyAgICBE
ZWNpbWFsIG9wZXJhdG9yKyhjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCBvcGVy
YXRvci0oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIERlY2ltYWwgb3BlcmF0b3IqKGNvbnN0
IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIG9wZXJhdG9yLyhjb25zdCBEZWNpbWFsJikg
Y29uc3Q7CisKKyAgICBib29sIGlzRmluaXRlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzRmlu
aXRlKCk7IH0KKyAgICBib29sIGlzTmVnYXRpdmUoKSBjb25zdCB7IHJldHVybiBzaWduKCkgPT0g
TmVnYXRpdmU7IH0KKyAgICBib29sIGlzUG9zaXRpdmUoKSBjb25zdCB7IHJldHVybiBzaWduKCkg
PT0gUG9zaXRpdmU7IH0KKyAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5pc1NwZWNpYWwoKTsgfQorICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
LmlzWmVybygpOyB9CisKKyAgICBEZWNpbWFsIGFicygpIGNvbnN0OworICAgIERlY2ltYWwgY2Vp
bGluZygpIGNvbnN0OworICAgIERlY2ltYWwgZmxvb3IoKSBjb25zdDsKKyAgICBEZWNpbWFsIHJl
bWFpbmRlcihjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCByb3VuZCgpIGNvbnN0
OworICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCisgICAgLy8gZnJvbVN0cmluZyBzdXBw
b3J0cyBmb2xsb3dpbmcgc3ludGF4IEVCTkY6CisgICAgLy8gIG51bWJlciA6Oj0gc2lnbj8gZGln
aXQrICgnLicgZGlnaXQqKSAoZXhwb25lbnQtbWFya2VyIHNpZ24/IGRpZ2l0Kyk/CisgICAgLy8g
ICAgICAgICAgfCBzaWduPyAnLicgZGlnaXQrIChleHBvbmVudC1tYXJrZXIgc2lnbj8gZGlnaXQr
KT8KKyAgICAvLyAgc2lnbiA6Oj0gJysnIHwgJy0nCisgICAgLy8gIGV4cG9uZW50LW1hcmtlciA6
Oj0gJ2UnIHwgJ0UnCisgICAgLy8gIGRpZ2l0IDo6PSAnMCcgfCAnMScgfCAuLi4gfCAnOScKKyAg
ICBzdGF0aWMgRGVjaW1hbCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBE
ZWNpbWFsIGluZmluaXR5KFNpZ24pOworICAgIHN0YXRpYyBEZWNpbWFsIG5hbigpOworICAgIHN0
YXRpYyBEZWNpbWFsIHplcm8oU2lnbik7CisKKyAgICAvLyBZb3Ugc2hvdWxkIG5vdCB1c2UgYmVs
b3cgbWV0aG9kcy4gV2UgZXhwb3NlIHRoZW0gZm9yIHVuaXQgdGVzdGluZy4KKyAgICBleHBsaWNp
dCBEZWNpbWFsKGNvbnN0IEVuY29kZWREYXRhJik7CisgICAgY29uc3QgRW5jb2RlZERhdGEmIHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEFs
aWduZWRPcGVyYW5kcyB7CisgICAgICAgIHVpbnQ2NF90IGxoc0NvZWZmaWNpZW50OworICAgICAg
ICB1aW50NjRfdCByaHNDb2VmZmljaWVudDsKKyAgICAgICAgaW50IGV4cG9uZW50OworICAgIH07
CisKKyAgICBEZWNpbWFsKGRvdWJsZSk7CisgICAgRGVjaW1hbCBjb21wYXJlVG8oY29uc3QgRGVj
aW1hbCYpIGNvbnN0OworCisgICAgc3RhdGljIEFsaWduZWRPcGVyYW5kcyBhbGlnbk9wZXJhbmRz
KGNvbnN0IERlY2ltYWwmIGxocywgY29uc3QgRGVjaW1hbCYgcmhzKTsKKyAgICBzdGF0aWMgaW5s
aW5lIFNpZ24gaW52ZXJ0U2lnbihTaWduIHNpZ24pIHsgcmV0dXJuIHNpZ24gPT0gTmVnYXRpdmUg
PyBQb3NpdGl2ZSA6IE5lZ2F0aXZlOyB9CisKKyAgICBpbnQgZXhwb25lbnQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzRmluaXRlKCkpOworICAgICAgICByZXR1cm4gbV9kYXRhLmV4
cG9uZW50KCk7CisgICAgfQorCisgICAgU2lnbiBzaWduKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
LnNpZ24oKTsgfQorCisgICAgRW5jb2RlZERhdGEgbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGVjaW1hbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQppbmRleCAxYTY4OGJiY2NjMmJhYjhkMDdjZmNlNTM4ZmRjNTcwMGQzNGViMmI5Li4zMGM1
MzEzYzIzMTMxNWIzNDViNzg1YjE2ZjViMDNmM2QwMTUxYjczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKQEAgLTk1LDYgKzk1LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DbGlwYm9h
cmRDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Db21wb3NpdG9yRmFrZUdy
YXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlV2Vi
R3JhcGhpY3NDb250ZXh0M0QuaCcsCisgICAgICAgICAgICAndGVzdHMvRGVjaW1hbFRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvRHJhd2luZ0J1ZmZlckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0V2ZW50TGlzdGVuZXJUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
RGVjaW1hbFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkNDUwM2U5ZTY4YmZhMzAzNDI4ZDQwMzBmMDI2
YTZkNDg1ZDdmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0RlY2ltYWxUZXN0LmNwcApAQCAtMCwwICsxLDYxNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEZWNpbWFsLmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG9zLCBjb25zdCBEZWNpbWFsJiBkZWNpbWFsKQoreworICAgIERlY2ltYWw6OkVuY29kZWRE
YXRhIGRhdGEgPSBkZWNpbWFsLnZhbHVlKCk7CisgICAgcmV0dXJuIG9zIAorICAgICAgICA8PCAi
ZW5jb2RlKCIgPDwgU3RyaW5nOjpudW1iZXIoZGF0YS5jb2VmZmljaWVudCgpKS5hc2NpaSgpLmRh
dGEoKQorICAgICAgICA8PCAiLCAiIDw8IFN0cmluZzo6bnVtYmVyKGRhdGEuZXhwb25lbnQoKSku
YXNjaWkoKS5kYXRhKCkKKyAgICAgICAgPDwgIiwgIiA8PCAoZGF0YS5zaWduKCkgPT0gRGVjaW1h
bDo6TmVnYXRpdmUgPyAiTmVnYXRpdmUiIDogIlBvc2l0aXZlIikKKyAgICAgICAgPDwgIik9IiA8
PCBkZWNpbWFsLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFNpbXVsYXRlIFdlYkNv
cmUvaHRtbC9TdGVwUmFuZ2UKK2NsYXNzIERlY2ltYWxTdGVwUmFuZ2UgeworcHVibGljOgorICAg
IERlY2ltYWwgbWF4aW11bTsKKyAgICBEZWNpbWFsIG1pbmltdW07CisgICAgRGVjaW1hbCBzdGVw
OworCisgICAgRGVjaW1hbFN0ZXBSYW5nZShjb25zdCBEZWNpbWFsJiBtaW5pbXVtLCBjb25zdCBE
ZWNpbWFsJiBtYXhpbXVtLCBjb25zdCBEZWNpbWFsJiBzdGVwKQorICAgICAgICA6IG1heGltdW0o
bWF4aW11bSkKKyAgICAgICAgLCBtaW5pbXVtKG1pbmltdW0pCisgICAgICAgICwgc3RlcChzdGVw
KQorICAgIHsKKyAgICB9CisKKyAgICBEZWNpbWFsIGNsYW1wVmFsdWUoRGVjaW1hbCB2YWx1ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IERlY2ltYWwgcmVzdWx0ID0gbWluaW11bSArICgo
dmFsdWUgLSBtaW5pbXVtKSAvIHN0ZXApLnJvdW5kKCkgKiBzdGVwOworICAgICAgICBBU1NFUlQo
cmVzdWx0LmlzRmluaXRlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0ID4gbWF4aW11bSA/IHJl
c3VsdCAtIHN0ZXAgOiByZXN1bHQ7CisgICAgfQorfTsKKworY2xhc3MgRGVjaW1hbFRlc3QgOiBw
dWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICB0eXBlZGVmIERlY2ltYWw6
OlNpZ24gU2lnbjsKKyAgICBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCBTaWduIFBvc2l0aXZlID0g
RGVjaW1hbDo6UG9zaXRpdmU7CisgICAgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU2lnbiBOZWdh
dGl2ZSA9IERlY2ltYWw6Ok5lZ2F0aXZlOworCisgICAgRGVjaW1hbCBlbmNvZGUodWludDY0X3Qg
Y29lZmZpY2llbnQsIGludCBleHBvbmVudCwgU2lnbiBzaWduKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIERlY2ltYWwoc2lnbiwgZXhwb25lbnQsIGNvZWZmaWNpZW50KTsKKyAgICB9CisKKyAgICBw
cm90ZWN0ZWQ6IERlY2ltYWwgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7
CisgICAgICAgIHJldHVybiBEZWNpbWFsOjpmcm9tU3RyaW5nKHN0cmluZyk7CisgICAgfQorCisg
ICAgcHJvdGVjdGVkOiBTdHJpbmcgc3RlcERvd24oY29uc3QgU3RyaW5nJiBtaW5pbXVtLCBjb25z
dCBTdHJpbmcmIG1heGltdW0sIGNvbnN0IFN0cmluZyYgc3RlcCwgY29uc3QgU3RyaW5nJiB2YWx1
ZVN0cmluZywgaW50IG51bWJlck9mU3RlcFRpbWVzKQorICAgIHsKKyAgICAgICAgRGVjaW1hbFN0
ZXBSYW5nZSBzdGVwUmFuZ2UoZnJvbVN0cmluZyhtaW5pbXVtKSwgZnJvbVN0cmluZyhtYXhpbXVt
KSwgZnJvbVN0cmluZyhzdGVwKSk7CisgICAgICAgIERlY2ltYWwgdmFsdWUgPSBmcm9tU3RyaW5n
KHZhbHVlU3RyaW5nKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlN0ZXBU
aW1lczsgKytpKSB7CisgICAgICAgICAgdmFsdWUgLT0gc3RlcFJhbmdlLnN0ZXA7CisgICAgICAg
ICAgdmFsdWUgPSBzdGVwUmFuZ2UuY2xhbXBWYWx1ZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkOiBTdHJp
bmcgc3RlcFVwKGNvbnN0IFN0cmluZyYgbWluaW11bSwgY29uc3QgU3RyaW5nJiBtYXhpbXVtLCBj
b25zdCBTdHJpbmcmIHN0ZXAsIGNvbnN0IFN0cmluZyYgdmFsdWVTdHJpbmcsIGludCBudW1iZXJP
ZlN0ZXBUaW1lcykKKyAgICB7CisgICAgICAgIERlY2ltYWxTdGVwUmFuZ2Ugc3RlcFJhbmdlKGZy
b21TdHJpbmcobWluaW11bSksIGZyb21TdHJpbmcobWF4aW11bSksIGZyb21TdHJpbmcoc3RlcCkp
OworICAgICAgICBEZWNpbWFsIHZhbHVlID0gZnJvbVN0cmluZyh2YWx1ZVN0cmluZyk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGVwVGltZXM7ICsraSkgeworICAgICAg
ICAgIHZhbHVlICs9IHN0ZXBSYW5nZS5zdGVwOworICAgICAgICAgIHZhbHVlID0gc3RlcFJhbmdl
LmNsYW1wVmFsdWUodmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1N0
cmluZygpOworICAgIH0KK307CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQWJzKQoreworICAgIEVY
UEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLmFi
cygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDAsIDAs
IE5lZ2F0aXZlKS5hYnMoKSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDEwLCBQb3NpdGl2
ZSksIGVuY29kZSgwLCAxMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDAsIDEwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAxMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAg
IEVYUEVDVF9FUShlbmNvZGUoMCwgLTEwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAtMTAsIFBvc2l0
aXZlKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAsIFBvc2l0aXZlKSwgZW5j
b2RlKDAsIC0xMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwg
MCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDAsIE5lZ2F0aXZlKS5hYnMoKSk7
CisKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMCwg
UG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSks
IGVuY29kZSgxLCAxMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUo
MSwgLTEwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAsIFBvc2l0aXZlKS5hYnMoKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxLCAtMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMCwgTmVnYXRp
dmUpLmFicygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDZWlsaW5nKQoreworICAgIEVY
UEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VR
KERlY2ltYWwoMiksIGVuY29kZSgxMSwgLTEsIFBvc2l0aXZlKS5jZWlsaW5nKCkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsKDIpLCBlbmNvZGUoMTMsIC0xLCBQb3NpdGl2ZSkuY2VpbGluZygpKTsK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE1LCAtMSwgUG9zaXRpdmUpLmNlaWxp
bmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMiksIGVuY29kZSgxOSwgLTEsIFBvc2l0aXZl
KS5jZWlsaW5nKCkpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBEZWNpbWFsKC0xKS5j
ZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgZW5jb2RlKDExLCAtMSwgTmVn
YXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBlbmNvZGUoMTMs
IC0xLCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIGVu
Y29kZSgxNSwgLTEsIE5lZ2F0aXZlKS5jZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
KC0xKSwgZW5jb2RlKDE5LCAtMSwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7Cit9CisKK1RFU1RfRihE
ZWNpbWFsVGVzdCwgRW5jb2RlZERhdGEpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQ
b3NpdGl2ZSksIGVuY29kZSgwLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUo
MCwgMCwgTmVnYXRpdmUpLCBlbmNvZGUoMCwgMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEo
RGVjaW1hbCgxKSwgRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBOZWdh
dGl2ZSksIGVuY29kZSgxLCAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpp
bmZpbml0eShQb3NpdGl2ZSksIGVuY29kZSgxLCAyMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVD
VF9FUShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0yMDAwLCBQb3NpdGl2ZSkp
OworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEZsb29yKQoreworICAgIEVYUEVDVF9FUShEZWNp
bWFsKDEpLCBEZWNpbWFsKDEpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBl
bmNvZGUoMTEsIC0xLCBQb3NpdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwo
MSksIGVuY29kZSgxMywgLTEsIFBvc2l0aXZlKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbCgxKSwgZW5jb2RlKDE1LCAtMSwgUG9zaXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsKDEpLCBlbmNvZGUoMTksIC0xLCBQb3NpdGl2ZSkuZmxvb3IoKSk7CisKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbCgtMSksIERlY2ltYWwoLTEpLmZsb29yKCkpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsKC0yKSwgZW5jb2RlKDExLCAtMSwgTmVnYXRpdmUpLmZsb29yKCkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDEzLCAtMSwgTmVnYXRpdmUpLmZsb29yKCkpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDE1LCAtMSwgTmVnYXRpdmUpLmZsb29y
KCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDE5LCAtMSwgTmVnYXRpdmUp
LmZsb29yKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEZyb21JbnQzMikKK3sKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgwKSk7CisgICAgRVhQRUNU
X0VRKERlY2ltYWwoMSksIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwg
TmVnYXRpdmUpLCBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIFBv
c2l0aXZlKSwgRGVjaW1hbCgxMDApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgTmVn
YXRpdmUpLCBEZWNpbWFsKC0xMDApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDB4N0ZGRkZGRkYs
IDAsIFBvc2l0aXZlKSwgRGVjaW1hbChJTlRfTUFYKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgw
eDgwMDAwMDAwdSwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKElOVF9NSU4pKTsKK30KKworVEVTVF9G
KERlY2ltYWxUZXN0LCBGcm9tU3RyaW5nKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwg
UG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwg
TmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwg
ZnJvbVN0cmluZygiMSIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIE5lZ2F0aXZlKSwg
ZnJvbVN0cmluZygiLTEiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIGZyb21TdHJpbmco
IjAxIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMywgMCwgUG9zaXRpdmUpLCBmcm9tU3RyaW5n
KCIrMyIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDMsIFBvc2l0aXZlKSwgZnJvbVN0cmlu
ZygiMEUzIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoNSwgLTEsIFBvc2l0aXZlKSwgZnJvbVN0
cmluZygiLjUiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIFBvc2l0aXZlKSwgZnJv
bVN0cmluZygiMTAwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwLCAwLCBOZWdhdGl2ZSks
IGZyb21TdHJpbmcoIi0xMDAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0yLCBQb3Np
dGl2ZSksIGZyb21TdHJpbmcoIjEuMjMiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0y
LCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0xLjIzIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUo
MTIzLCA4LCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjEuMjNFMTAiKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgxMjMsIDgsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTEuMjNFMTAiKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxMjMsIDgsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMS4yM0UrMTAi
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIDgsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygi
LTEuMjNFKzEwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCAtMTIsIFBvc2l0aXZlKSwg
ZnJvbVN0cmluZygiMS4yM0UtMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0xMiwg
TmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMS4yM0UtMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSg1LCAtNywgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwLjAwMDAwMDUiKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjBlOTk5OSIpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDEyMywgLTMsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMC4xMjMiKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMiwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwMC4w
MCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDIsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygi
MUUyIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGZyb21T
dHJpbmcoIjFFMjAwMDAiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Onplcm8oUG9zaXRpdmUp
LCBmcm9tU3RyaW5nKCIxRS0yMDAwMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAsIDEw
MjMsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMUUxMDI2IikpOworICAgIEVYUEVDVF9FUShEZWNp
bWFsOjp6ZXJvKFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMUUtMTAyNiIpKTsKKyAgICBFWFBFQ1Rf
RVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxMjM0NTY3ODkwRTEw
MzYiKSk7CisKKyAgICAvLyAyXjEwMjQKKyAgICBjb25zdCB1aW50NjRfdCBsZWFkaW5nRGlnaXRz
T2YyUG93ZXJPZjEwMjQgPSBVSU5UNjRfQygxNzk3NjkzMTM0ODYyMzE1OSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZShsZWFkaW5nRGlnaXRzT2YyUG93ZXJPZjEwMjQsIDI5MiwgUG9zaXRpdmUpLCBm
cm9tU3RyaW5nKCIxNzk3NjkzMTM0ODYyMzE1OTA3NzI5MzA1MTkwNzg5MDI0NzMzNjE3OTc2OTc4
OTQyMzA2NTcyNzM0MzAwODExNTc3MzI2NzU4MDU1MDA5NjMxMzI3MDg0NzczMjI0MDc1MzYwMjEx
MjAxMTM4Nzk4NzEzOTMzNTc2NTg3ODk3Njg4MTQ0MTY2MjI0OTI4NDc0MzA2Mzk0NzQxMjQzNzc3
Njc4OTM0MjQ4NjU0ODUyNzYzMDIyMTk2MDEyNDYwOTQxMTk0NTMwODI5NTIwODUwMDU3Njg4Mzgx
NTA2ODIzNDI0NjI4ODE0NzM5MTMxMTA1NDA4MjcyMzcxNjMzNTA1MTA2ODQ1ODYyOTgyMzk5NDcy
NDU5Mzg0Nzk3MTYzMDQ4MzUzNTYzMjk2MjQyMjQxMzcyMTYiKSk7Cit9CisKKy8vIFRoZXNlIHN0
cmluZ3MgYXJlIGxvb2sgbGlrZSBwcm9wZXIgbnVtYmVyLCBidXQgd2UgZG9uJ3QgYWNjZXB0IHRo
ZW0uCitURVNUX0YoRGVjaW1hbFRlc3QsIEZyb21TdHJpbmdMaWtlTnVtYmVyKQoreworICAgIEVY
UEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiIDEyMyAiKSk7CisgICAgRVhQRUNU
X0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIxLDIzNCIpKTsKKyAgICBFWFBFQ1RfRVEo
RGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIklORiIpKTsKK30KKworVEVTVF9GKERlY2ltYWxU
ZXN0LCBmcm9tU3RyaW5nVHJ1bmNhdGVkKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4o
KSwgZnJvbVN0cmluZygieCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21T
dHJpbmcoIjAuIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygi
MXgiKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjFFeCIp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjFFMngiKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIxRSt4IikpOworfQorCitU
RVNUX0YoRGVjaW1hbFRlc3QsIFByZWRpY2F0ZXMpCit7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1h
bDo6emVybyhQb3NpdGl2ZSkuaXNGaW5pdGUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6
emVybyhQb3NpdGl2ZSkuaXNQb3NpdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6
emVybyhQb3NpdGl2ZSkuaXNOZWdhdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6
emVybyhQb3NpdGl2ZSkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6Onpl
cm8oUG9zaXRpdmUpLmlzWmVybygpKTsKKworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6Onplcm8o
TmVnYXRpdmUpLmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjp6ZXJvKE5l
Z2F0aXZlKS5pc1Bvc2l0aXZlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6Onplcm8oTmVn
YXRpdmUpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6Onplcm8oTmVn
YXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjp6ZXJvKE5lZ2F0
aXZlKS5pc1plcm8oKSk7CisKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDEyMykuaXNGaW5pdGUo
KSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgxMjMpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKERlY2ltYWwoMTIzKS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShE
ZWNpbWFsKDEyMykuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEyMyku
aXNaZXJvKCkpOworCisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgtMTIzKS5pc0Zpbml0ZSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgtMTIzKS5pc1Bvc2l0aXZlKCkpOworICAgIEVYUEVD
VF9UUlVFKERlY2ltYWwoLTEyMykuaXNOZWdhdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVj
aW1hbCgtMTIzKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoLTEyMyku
aXNaZXJvKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFByZWRpY2F0ZXNTcGVjaWFsVmFs
dWVzKQoreworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkuaXNG
aW5pdGUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLmlz
UG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZl
KS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6OmluZmluaXR5KFBvc2l0
aXZlKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6OmluZmluaXR5KFBv
c2l0aXZlKS5pc1plcm8oKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHko
TmVnYXRpdmUpLmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjppbmZpbml0
eShOZWdhdGl2ZSkuaXNQb3NpdGl2ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjppbmZp
bml0eShOZWdhdGl2ZSkuaXNOZWdhdGl2ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjpp
bmZpbml0eShOZWdhdGl2ZSkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFs
OjppbmZpbml0eShOZWdhdGl2ZSkuaXNaZXJvKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKERlY2lt
YWw6Om5hbigpLmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6Om5hbigpLmlz
U3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6bmFuKCkuaXNaZXJvKCkpOwor
fQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wQWRkKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUo
MCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDApICsgRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0VR
KERlY2ltYWwoMSksIERlY2ltYWwoMikgKyBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWwoMSksIERlY2ltYWwoLTEpICsgRGVjaW1hbCgyKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxMDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCg5OSkgKyBEZWNpbWFsKDEpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDEwMCwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKC01MCkgKyBEZWNpbWFsKC01
MCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwMDAwMDAwMDAwMDAwMCwgMzUsIFBvc2l0aXZl
KSwgZW5jb2RlKDEsIDUwLCBQb3NpdGl2ZSkgKyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEwMDAwMDAwMDAwMDAwMDAsIDM1LCBQb3NpdGl2ZSksIERlY2ltYWwoMSkgKyBlbmNv
ZGUoMSwgNTAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMSwg
MCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKSArIERlY2ltYWwoMSkpOworICAg
IEVYUEVDVF9FUShlbmNvZGUoMTAwMDAwMDAwMDEsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgxKSAr
IGVuY29kZSgxLCAxMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBv
c2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgMCwgUG9zaXRp
dmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDIsIC0xMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgx
LCAtMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkpOworfQorCitU
RVNUX0YoRGVjaW1hbFRlc3QsIE9wQWRkQmlnRSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEs
IDEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAw
LCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgMTAyMiwgUG9zaXRpdmUpLCBl
bmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgZW5jb2RlKHVpbnQ2NF90
KC0xKSwgMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7Cit9CisKK1RF
U1RfRihEZWNpbWFsVGVzdCwgT3BBZGRTbWFsbEUpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgx
LCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIDAs
IFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAtMTAyMiwgUG9zaXRpdmUpLCBl
bmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcEFkZFNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29u
c3QgRGVjaW1hbCBJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNv
bnN0IERlY2ltYWwgTWludXNJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOwor
ICAgIGNvbnN0IERlY2ltYWwgTmFOKERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFs
IFRlbigxMCk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIEluZmluaXR5ICsgSW5maW5pdHkp
OworICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5ICsgTWludXNJbmZpbml0eSk7CisgICAgRVhQ
RUNUX0VRKE5hTiwgTWludXNJbmZpbml0eSArIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWlu
dXNJbmZpbml0eSwgTWludXNJbmZpbml0eSArIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNU
X0VRKEluZmluaXR5LCBJbmZpbml0eSArIFRlbik7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBU
ZW4gKyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5p
dHkgKyBUZW4pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gKyBNaW51c0luZmlu
aXR5KTsKKworICAgIEVYUEVDVF9FUShOYU4sIE5hTiArIE5hTik7CisgICAgRVhQRUNUX0VRKE5h
TiwgTmFOICsgVGVuKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBUZW4gKyBOYU4pOworfQorCitURVNU
X0YoRGVjaW1hbFRlc3QsIE9wQ29tcGFyZSkKK3sKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDAp
ID09IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgIT0gRGVjaW1hbCgx
KSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKSA8IERlY2ltYWwoMSkpOworICAgIEVYUEVD
VF9UUlVFKERlY2ltYWwoMCkgPD0gRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1h
bCgwKSA+IERlY2ltYWwoLTEpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApID49IERlY2lt
YWwoMCkpOworCisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPT0gRGVjaW1hbCgyKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgIT0gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0ZB
TFNFKERlY2ltYWwoMSkgPCBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgx
KSA8PSBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxKSA+IERlY2ltYWwo
MikpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpID49IERlY2ltYWwoMikpOworfQorCitU
RVNUX0YoRGVjaW1hbFRlc3QsIE9wQ29tcGFyZVNwZWNpYWxWYWx1ZXMpCit7CisgICAgRVhQRUNU
X1RSVUUoRGVjaW1hbCgxKSA8IERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSk7CisgICAgRVhQ
RUNUX1RSVUUoRGVjaW1hbCgxKSA+IERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSk7Cit9CisK
K1RFU1RfRihEZWNpbWFsVGVzdCwgT3BEaXYpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAw
LCBQb3NpdGl2ZSksIERlY2ltYWwoMCkgLyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDIsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgyKSAvIERlY2ltYWwoLTEpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDUsIC0xLCBOZWdhdGl2ZSksIERlY2ltYWwoLTEpIC8gRGVjaW1hbCgyKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSg5OSwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDk5KSAvIERl
Y2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKC01MCkgLyBEZWNp
bWFsKC01MCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMzMzMzMzMzMzMzMzMzMzMywgLTE2LCBQ
b3NpdGl2ZSksIERlY2ltYWwoMSkgLyBEZWNpbWFsKDMpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDEyMzQ1Njc4OTAxMjM0LCAtMSwgUG9zaXRpdmUpLCBlbmNvZGUoMTIzNDU2Nzg5MDEyMzQsIDAs
IFBvc2l0aXZlKSAvIERlY2ltYWwoMTApKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcERp
dkJpZ0UpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29k
ZSgxLCAxMDIyLCBQb3NpdGl2ZSkgLyBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAv
IGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9w
RGl2U21hbGxFKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSwg
ZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgLyBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3Np
dGl2ZSkgLyBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFs
VGVzdCwgT3BEaXZTcGVjaWFsVmFsdWVzKQoreworICAgIGNvbnN0IERlY2ltYWwgSW5maW5pdHko
RGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5m
aW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE5h
TihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVjaW1hbCBaZXJvKERlY2ltYWw6Onplcm8o
UG9zaXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzWmVybyhEZWNpbWFsOjp6ZXJvKE5l
Z2F0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBUZW4oMTApOworICAgIGNvbnN0IERlY2ltYWwg
TWludXNUZW4oLTEwKTsKKworICAgIEVYUEVDVF9FUShOYU4sIFplcm8gLyBaZXJvKTsKKyAgICBF
WFBFQ1RfRVEoTmFOLCBaZXJvIC8gTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51
c1plcm8gLyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c1plcm8gLyBNaW51c1plcm8p
OworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gLyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEo
TWludXNJbmZpbml0eSwgVGVuIC8gTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZp
bml0eSwgTWludXNUZW4gLyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVzVGVu
IC8gTWludXNaZXJvKTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgSW5maW5pdHkgLyBaZXJv
KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgSW5maW5pdHkgLyBNaW51c1plcm8pOwor
ICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5IC8gWmVybyk7CisgICAg
RVhQRUNUX0VRKEluZmluaXR5LCBNaW51c0luZmluaXR5IC8gTWludXNaZXJvKTsKKworICAgIEVY
UEVDVF9FUShOYU4sIEluZmluaXR5IC8gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIElu
ZmluaXR5IC8gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0
eSAvIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5IC8gTWludXNJ
bmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoWmVybywgVGVuIC8gSW5maW5pdHkpOworICAgIEVY
UEVDVF9FUShNaW51c1plcm8sIFRlbiAvIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShN
aW51c1plcm8sIE1pbnVzVGVuIC8gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShaZXJvLCBNaW51
c1RlbiAvIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC8gTmFOKTsK
KyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLyBUZW4pOworICAgIEVYUEVDVF9FUShOYU4sIFRlbiAv
IE5hTik7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BNdWwpCit7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoMCkgKiBEZWNpbWFsKDApKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDIsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgyKSAqIERlY2ltYWwoLTEp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDIsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgtMSkgKiBE
ZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDk5LCAwLCBQb3NpdGl2ZSksIERlY2lt
YWwoOTkpICogRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyNTAwLCAwLCBQb3Np
dGl2ZSksIERlY2ltYWwoLTUwKSAqIERlY2ltYWwoLTUwKSk7Cit9CisKK1RFU1RfRihEZWNpbWFs
VGVzdCwgT3BNdWxCaWdFKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAyMiwgUG9zaXRp
dmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpICogZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7
CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEw
MjIsIFBvc2l0aXZlKSAqIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0Yo
RGVjaW1hbFRlc3QsIE9wTXVsU21hbGxFKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEw
MjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKiBlbmNvZGUoMSwgMCwg
UG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZW5jb2Rl
KDEsIC0xMDIyLCBQb3NpdGl2ZSkgKiBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSk7Cit9CisK
K1RFU1RfRihEZWNpbWFsVGVzdCwgT3BNdWxTcGVjaWFsVmFsdWVzKQoreworICAgIGNvbnN0IERl
Y2ltYWwgSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpKTsKKyAgICBjb25zdCBE
ZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpKTsKKyAgICBj
b25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVjaW1hbCBUZW4o
MTApOworICAgIGNvbnN0IERlY2ltYWwgTWludXNUZW4oLTEwKTsKKyAgICBjb25zdCBEZWNpbWFs
IFplcm8oRGVjaW1hbDo6emVybyhQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWludXNa
ZXJvKERlY2ltYWw6Onplcm8oTmVnYXRpdmUpKTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0eSwg
SW5maW5pdHkgKiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIEluZmlu
aXR5ICogTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVz
SW5maW5pdHkgKiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBNaW51c0luZmlu
aXR5ICogTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAqIFpl
cm8pOworICAgIEVYUEVDVF9FUShOYU4sIFplcm8gKiBNaW51c0luZmluaXR5KTsKKyAgICBFWFBF
Q1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICogWmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWlu
dXNJbmZpbml0eSAqIFplcm8pOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgKiBNaW51
c1plcm8pOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzWmVybyAqIE1pbnVzSW5maW5pdHkpOwor
ICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKiBNaW51c1plcm8pOworICAgIEVYUEVD
VF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKiBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKElu
ZmluaXR5LCBJbmZpbml0eSAqIFRlbik7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gKiBJ
bmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKiBU
ZW4pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gKiBNaW51c0luZmluaXR5KTsK
KworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBJbmZpbml0eSAqIE1pbnVzVGVuKTsKKyAg
ICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNUZW4gKiBJbmZpbml0eSk7CisgICAgRVhQ
RUNUX0VRKEluZmluaXR5LCBNaW51c0luZmluaXR5ICogTWludXNUZW4pOworICAgIEVYUEVDVF9F
UShJbmZpbml0eSwgTWludXNUZW4gKiBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShO
YU4sIE5hTiAqIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOICogVGVuKTsKKyAgICBFWFBF
Q1RfRVEoTmFOLCBUZW4gKiBOYU4pOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViKQor
eworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDApIC0gRGVj
aW1hbCgwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwo
MikgLSBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAwLCBOZWdhdGl2ZSks
IERlY2ltYWwoLTEpIC0gRGVjaW1hbCgyKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSg5OCwgMCwg
UG9zaXRpdmUpLCBEZWNpbWFsKDk5KSAtIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKC01MCkgLSBEZWNpbWFsKC01MCkpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMTAwMDAwMDAwMDAwMDAwMCwgMzUsIFBvc2l0aXZlKSwgZW5jb2RlKDEs
IDUwLCBQb3NpdGl2ZSkgLSBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAw
MDAwMDAwMDAwMDAsIDM1LCBOZWdhdGl2ZSksIERlY2ltYWwoMSkgLSBlbmNvZGUoMSwgNTAsIFBv
c2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BTdWJCaWdFKQoreworICAgIEVY
UEVDVF9FUShlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRp
dmUpIC0gZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAw
LCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgLSBlbmNvZGUoMSwgMTAyMiwg
UG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcFN1YlNtYWxsRSkKK3sKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKFVJTlQ2NF9DKDEwMDAwMDAwMDAwMDAwMDAwKSwgLTE2LCBOZWdh
dGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpIC0gZW5jb2RlKDEsIDAsIFBvc2l0aXZl
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAy
MiwgUG9zaXRpdmUpIC0gZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0Yo
RGVjaW1hbFRlc3QsIE9wU3ViU3BlY2lhbFZhbHVlcykKK3sKKyAgICBjb25zdCBEZWNpbWFsIElu
ZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBN
aW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSk7CisgICAgY29uc3QgRGVj
aW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERlY2ltYWwgVGVuKDEwKTsKKwor
ICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5IC0gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShJ
bmZpbml0eSwgSW5maW5pdHkgLSBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJ
bmZpbml0eSwgTWludXNJbmZpbml0eSAtIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBN
aW51c0luZmluaXR5IC0gTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHks
IEluZmluaXR5IC0gVGVuKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgVGVuIC0gSW5m
aW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5IC0gVGVu
KTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIFRlbiAtIE1pbnVzSW5maW5pdHkpOworCisgICAg
RVhQRUNUX0VRKE5hTiwgTmFOIC0gTmFOKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLSBUZW4p
OworICAgIEVYUEVDVF9FUShOYU4sIFRlbiAtIE5hTik7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVz
dCwgUHJvcGVydGllcykKK3sKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApLmlzRmluaXRlKCkp
OworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDApLmlzU3BlY2lhbCgpKTsKK30KKworVEVTVF9G
KERlY2ltYWxUZXN0LCBQcm9wZXJ0aWVzU3BlY2lhbCkKK3sKKyAgICBFWFBFQ1RfVFJVRShEZWNp
bWFsOjppbmZpbml0eShQb3NpdGl2ZSkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9GQUxTRShE
ZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkuaXNGaW5pdGUoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9G
QUxTRShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuaXNGaW5pdGUoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShEZWNpbWFsOjpuYW4oKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERl
Y2ltYWw6Om5hbigpLmlzRmluaXRlKCkpOworfQorCisvLyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L251bWJlci9udW1iZXItc3RlcHVwLXN0ZXBkb3duLWZyb20tcmVuZGVyZXIKK1RFU1RfRihEZWNp
bWFsVGVzdCwgUmVhbFdvcmxkRXhhbXBsZU51bWJlclN0ZXBVcFN0ZXBEb3duRnJvbVJlbmRlcmVy
KQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEwIiksIHN0ZXBEb3duKCIwIiwgIjEwMCIsICIx
MCIsICIxOSIsIDEpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI5MCIpLCBzdGVwVXAoIjAiLCAi
OTkiLCAiMTAiLCAiODkiLCAxKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMSIpLCBzdGVwVXAo
IjAiLCAiMSIsICIwLjMzMzMzMzMzMzMzMzMzMzMzIiwgIjAiLCAzKSk7IC8vIHN0ZXA9MS8zCisg
ICAgRVhQRUNUX0VRKFN0cmluZygiMC4wMSIpLCBzdGVwVXAoIjAiLCAiMC4wMSIsICIwLjAwMzMz
MzMzMzMzMzMzMzMzMzMiLCAiMCIsIDMpKTsgLy8gc3RlcD0xLzMwMAorICAgIEVYUEVDVF9FUShT
dHJpbmcoIjEiKSwgc3RlcFVwKCIwIiwgIjEiLCAiMC4wMDM5MjE1Njg2Mjc0NTA5ODAiLCAiMCIs
IDI1NSkpOyAvLyBzdGVwPTEvMjU1CisgICAgRVhQRUNUX0VRKFN0cmluZygiMSIpLCBzdGVwVXAo
IjAiLCAiMSIsICIwLjEiLCAiMCIsIDEwKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUmVh
bFdvcmxkRXhhbXBsZU51bWJlclN0ZXBVcFN0ZXBEb3duRnJvbVJlbmRlcmVyUm91bmRpbmcpCit7
CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wMTUiKSwgc3RlcFVwKCIwIiwgIjEwMCIsICIwLjAw
NSIsICI1LjAwNSIsIDIpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjA2IiksIHN0ZXBVcCgi
MCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMSkpOworICAgIEVYUEVDVF9FUShTdHJpbmco
IjUuMDY1IiksIHN0ZXBVcCgiMCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMikpOworCisg
ICAgRVhQRUNUX0VRKFN0cmluZygiNS4wMTUiKSwgc3RlcFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAi
NS4wMDUiLCAyKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNiIpLCBzdGVwVXAoIjQiLCAi
OSIsICIwLjAwNSIsICI1LjAwNSIsIDExKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNjUi
KSwgc3RlcFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMikpOworfQorCitURVNUX0Yo
RGVjaW1hbFRlc3QsIFJlYWxXb3JsZEV4YW1wbGVSYW5nZVN0ZXBVcFN0ZXBEb3duKQoreworICAg
IEVYUEVDVF9FUShTdHJpbmcoIjFlKzM4IiksIHN0ZXBVcCgiMCIsICIxRTM4IiwgIjEiLCAiMUUz
OCIsIDkpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxZSszOCIpLCBzdGVwRG93bigiMCIsICIx
RTM4IiwgIjEiLCAiMUUzOCIsIDkpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBSZW1haW5k
ZXIpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSg5LCAtMSwgTmVnYXRpdmUpLCBlbmNvZGUoMjEs
IC0xLCBQb3NpdGl2ZSkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwg
RGVjaW1hbCgxMCkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIE5l
Z2F0aXZlKSwgRGVjaW1hbCgtMTApLnJlbWFpbmRlcigzKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgyLCAtMSwgUG9zaXRpdmUpLCBlbmNvZGUoMTAyLCAtMSwgUG9zaXRpdmUpLnJlbWFpbmRlcigx
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMSwgUG9zaXRpdmUpLCBEZWNpbWFsKDEwKS5y
ZW1haW5kZXIoZW5jb2RlKDMsIC0xLCBQb3NpdGl2ZSkpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDMsIC0xLCBOZWdhdGl2ZSksIGVuY29kZSgzNiwgLTEsIFBvc2l0aXZlKS5yZW1haW5kZXIoZW5j
b2RlKDEzLCAtMSwgUG9zaXRpdmUpKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUmVtYWlu
ZGVyU3BlY2lhbFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9z
aXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkucmVtYWluZGVyKDEpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWw6Om5hbigpLnJlbWFpbmRlcigxKSk7Cit9
CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUm91bmQpCit7CisgICAgRVhQRUNUX0VRKERlY2ltYWwo
MSksIChEZWNpbWFsKDkpIC8gRGVjaW1hbCgxMCkpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShE
ZWNpbWFsKDI1KSwgKERlY2ltYWwoNSkgLyBmcm9tU3RyaW5nKCIwLjIwMCIpKS5yb3VuZCgpKTsK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgzKSwgKERlY2ltYWwoNSkgLyBEZWNpbWFsKDIpKS5yb3Vu
ZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgKERlY2ltYWwoMikgLyBEZWNpbWFsKDMp
KS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgzKSwgKERlY2ltYWwoMTApIC8gRGVj
aW1hbCgzKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMyksIChEZWNpbWFsKDEp
IC8gZnJvbVN0cmluZygiMC4zIikpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEw
KSwgKERlY2ltYWwoMSkgLyBmcm9tU3RyaW5nKCIwLjEiKSkucm91bmQoKSk7CisgICAgRVhQRUNU
X0VRKERlY2ltYWwoNSksIChEZWNpbWFsKDEpIC8gZnJvbVN0cmluZygiMC4yIikpLnJvdW5kKCkp
OworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEwKSwgKGZyb21TdHJpbmcoIjEwLjIiKSAvIDEpLnJv
dW5kKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJvdW5kU2VwY2lhbFZhbHVlcykKK3sK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBEZWNpbWFsOjppbmZp
bml0eShQb3NpdGl2ZSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBE
ZWNpbWFsOjpuYW4oKS5yb3VuZCgpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBUb1N0cmlu
Z1NwZWNpYWwpCit7CisgICAgRVhQRUNUX0VRKFN0cmluZygiSW5maW5pdHkiKSwgRGVjaW1hbDo6
aW5maW5pdHkoUG9zaXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi1J
bmZpbml0eSIpLCBEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkudG9TdHJpbmcoKSk7CisgICAg
RVhQRUNUX0VRKFN0cmluZygiTmFOIiksIERlY2ltYWw6Om5hbigpLnRvU3RyaW5nKCkpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144709</attachid>
            <date>2012-05-29 22:54:55 -0700</date>
            <delta_ts>2012-05-30 03:40:27 -0700</delta_ts>
            <desc>Patch 5</desc>
            <filename>bug-87360-20120530145453.patch</filename>
            <type>text/plain</type>
            <size>73705</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmYzNiY2MyMGRlNGRm
YzZiNTFmMGY2YTE4NjY1NTgzYTczMmJkYS4uMDhhYzNiY2QwZDhhZWNhM2RlN2VlNGE2ODM1OTAx
MDRiMTFiYzgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEyLTA1LTI0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3IgTnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRk
ZWQgbmV3IGNsYXNzIERlY2ltYWwgZm9yIGRlY2ltYWwgYXJpdGhtYXRpYyBpbiB0d28KKyAgICAg
ICAgZmlsZXM6IHBsYXRmb3JtL0RlY2ltYWwuY3BwIGFuZCBEZWNpbWFsLmggd2l0aCB1bml0IHRl
c3QuCisKKyAgICAgICAgVGVzdDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNw
cAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGVjaW1hbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWNpbWFsUHJpdmF0ZSk6
CisgICAgICAgIChTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAgICAgKFVJbnQxMjgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6OmhpZ2gpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWxQcml2YXRlOjpjb3VudERpZ2l0cyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJp
dmF0ZTo6bXVsdGlwbHlIaWdoKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpw
b3dlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6c2NhbGVEb3duKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpzY2FsZVVwKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpTcGVjaWFsVmFsdWVIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5k
bGVyOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlNwZWNpYWxW
YWx1ZUhhbmRsZXI6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpV
SW50MTI4OjpVSW50MTI4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50
MTI4OjpvcGVyYXRvciAvPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUlu
dDEyODo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6
OkVuY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpj
b2VmZmljaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Zm9y
bWF0Q2xhc3MpCisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6ZXhwb25l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzRmluaXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjppc1NwZWNpYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzWmVybyk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpFbmNvZGVkRGF0YTo6c2V0U2lnbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
OjpEZWNpbWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yID0pOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgKz0pOgorICAgICAgICAoV2ViQ29yZTo6
RGVjaW1hbDo6b3BlcmF0b3IgLT0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0
b3IgKj0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLz0pOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNp
bWFsOjpvcGVyYXRvciArKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yICop
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgLyk6CisgICAgICAgIChXZWJD
b3JlOjpEZWNpbWFsOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgPCk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciA8PSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpvcGVyYXRvciA+KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9y
ID49KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmV4cG9uZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6YWJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmFsaWduT3BlcmFuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVjaW1hbDo6Y2VpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpjb21w
YXJlVG8pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6ZmFzdEVxdWFscyk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjpmbG9vcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpm
cm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmluZmluaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6Om5hbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpy
ZW1haW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6cm91bmQpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbDo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6
emVybyk6CisgICAgICAgICogcGxhdGZvcm0vRGVjaW1hbC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6OmlzRmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Omlz
TmVnYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aXNQb3NpdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc1NwZWNpYWwpOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OnZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6OmludmVydFNpZ24pOgorCiAyMDEyLTA1LTI5ICBLZW50YXJv
IEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFJlbmFtZSB2OE51
bGwoKSB0byB2OE51bGxXaXRoQ2hlY2soKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5
YjM4ZDZkYmQyODBjNGY0OWFmNTY5Yzc4ZmM5M2ZlMWY0YTkwZDAzLi44MjM1YzRmOTY5YzkzNzgx
M2Q2M2QwNDI3MzUxMGI3MWQ4MGQzZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI1IEBACisyMDEyLTA1LTI0ICBZb3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJbnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3Ig
TnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkZWQgdW5pdCB0ZXN0IGZvciBEZWNpbWFsIGNs
YXNzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvRGVjaW1hbFRl
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBPdXRwdXQgRGVj
aW1hbCBmb3IgdW5pdCB0ZXN0IGRlYnVnZ2luZworICAgICAgICAoRGVjaW1hbFRlc3QpOgorICAg
ICAgICAoRGVjaW1hbFN0ZXBSYW5nZSk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFN0
ZXBSYW5nZTo6RGVjaW1hbFN0ZXBSYW5nZSk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1h
bFN0ZXBSYW5nZTo6Y2xhbXBWYWx1ZSk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRl
c3Q6OmVuY29kZSk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRlc3Q6OmZyb21TdHJp
bmcpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OkRlY2ltYWxUZXN0OjpzdGVwRG93bik6CisgICAg
ICAgIChEZWNpbWFsVGVzdDo6RGVjaW1hbFRlc3Q6OnN0ZXBVcCk6CisgICAgICAgIChEZWNpbWFs
VGVzdDo6VEVTVF9GKToKKwogMjAxMi0wNS0yOSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBBbGlnbiBjb2RlcyBhbmQgbmFtZXMgZm9y
IElEQi1zcGVjaWZpYyBhbmQgRE9NLXNwZWNpZmljIGVycm9ycy9leGNlcHRpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDFlMDc1Nzc1YmQyM2M5MjljYmY3NDA0OGNlOTk1N2MwYjNkOTY0NGUu
LjM2YzMyZjM5ODgyM2Q0NzlmZjE3YjI2MzM2MTUwNWY4NGNmZDBjOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xMTA3LDYgKzExMDcsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3Bw
CiAgICAgcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwCisgICAgcGxhdGZvcm0vRGVjaW1hbC5j
cHAKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAKICAgICBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3Bw
CiAgICAgcGxhdGZvcm0vRXZlbnRUcmFjZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCAyYWZmMzllMTRhYTE2ZGZmODYyNTBjMzBjZmExNDIzNDlmMWRjY2MxLi4xYmRjYjI2
MDRlODA0Mjk1Y2U2ZGFlM2IwZWUzMjFlM2UxMzYxM2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTMxMTUsNiArMzExNSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RhdGVDb21wb25lbnRzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBv
bmVudHMuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0RhdGEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGU3
Njc0ZmE4ZDBiYmViNTBiNmVmNmI3NGUwOTAwNjc5MWM4ZmUxOWYuLmMzMTAxZTQ4ZTgwNmVjNzNi
M2ZhNWY2YWI3MGUxOWY4NDM3ZDYzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTA4Myw2ICsxMDgzLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKICAgICBwbGF0
Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAogICAgIHBsYXRmb3JtL0RhdGVDb21wb25lbnRz
LmNwcCBcCisgICAgcGxhdGZvcm0vRGVjaW1hbC5jcHAgXAogICAgIHBsYXRmb3JtL0RyYWdEYXRh
LmNwcCBcCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vRXZlbnRU
cmFjZXIuY3BwIFwKQEAgLTIyMDAsNiArMjIwMSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRm
b3JtL0NvbnRleHRNZW51LmggXAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAog
ICAgIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmggXAorICAgIHBsYXRmb3JtL0RlY2ltYWwuaCBc
CiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuaCBcCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmggXAog
ICAgIHBsYXRmb3JtL0V2ZW50VHJhY2VyLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNlYzEzOTMz
NjU1MzcwNjY3YjU3Y2QwOWRmMzgxNTkzN2YyYmMxNmIuLjA2Yjk2NTdhZTVjYjdiZWQ4N2M2OGZj
MDM5OWI4NDUzMjFiYjRjMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI3MSw2ICsyNzEsNyBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9DdXJzb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vRGVjaW1hbC5oJwogICAgICAgICAgICAgJ3BsYXRm
b3JtL0RyYWdEYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RyYWdJbWFnZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9FdmVudFRyYWNlci5oJywKQEAgLTMxNDgsNiArMzE0OSw3IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ3Vyc29yLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRGF0ZUNvbXBv
bmVudHMuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9EZWNpbWFsLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vRHJhZ0RhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFn
SW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9FdmVudExvb3AuaCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDQwZmUwOWFkMjkw
ZjBkZDg3NGRlN2ZkOWZhYWZiNzY2YzcyZjA1YzQuLjM0NTViNjMxZTQwOWRhOTc1OGRhMzdiMDBi
MzNmMjgwNTk4NjRiNjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC0yNzg5MSw2ICsyNzg5MSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxEZWNpbWFsLmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRGVj
aW1hbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxEcmFnRGF0YS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNmOWVkZTQy
NTliYTdhNDkxM2M2ZjQ5N2U0NDJkNTM1NTFjMzhjNmIuLjBhY2Y3YzcyNjU0MWZhNTk1YWI3ZDBh
OTdiZjI3OGM1MjIwMmE2YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExOTMsNiArMTE5Myw4IEBACiAJCTQ1MENFQkYwMTUw
NzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBM
YWJlbGFibGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8q
IExhYmVsYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDVCQUMy
QjAxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJM
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDVG
RUE1Q0YxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERl
Y2ltYWwuY3BwICovOyB9OworCQk0NUZFQTVEMDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0Ux
NTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0NjE0QTFGRTBCMjNBOEQ2MDA0NDZFMUMgLyogY29weUN1
cnNvci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ2MTRBMUZEMEIyM0E4RDYwMDQ0NkUxQyAvKiBjb3B5Q3Vyc29yLnBuZyAqLzsgfTsKIAkJNDY3
MDBFRDAxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzAwRUNFMTI3Qjk2Q0IwMEY1RDVE
NiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgKi87IH07CiAJCTQ2NzAwRUQxMTI3Qjk2Q0IwMEY1RDVE
NiAvKiBGaWxlV3JpdGVyU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDY3MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmgg
Ki87IH07CkBAIC04MjAxLDYgKzgyMDMsOCBAQAogCQk0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkg
LyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NUJBQzJBRjEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY29uVVJMLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ1RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NUZFQTVDRTE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNpbWFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2MTRBMUZEMEIyM0E4RDYwMDQ0NkUxQyAvKiBjb3B5Q3Vy
c29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGltYWdlLnBuZzsgcGF0aCA9IGNvcHlDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVdyaXRlclN5bmMuY3BwOyBw
YXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXJTeW5jLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDY3MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJT
eW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmg7
IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlclN5bmMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMzM3LDYgKzIwMzQxLDggQEAKIAkJCQlGNTg3ODY4NDAyREUz
Qjg2MDFFQTQxMjIgLyogQ3Vyc29yLmggKi8sCiAJCQkJQTU3MzJCMDgxMzZBMTYxRDAwNUM4RDdD
IC8qIERhdGVDb21wb25lbnRzLmNwcCAqLywKIAkJCQlBNTczMkIwOTEzNkExNjFEMDA1QzhEN0Mg
LyogRGF0ZUNvbXBvbmVudHMuaCAqLywKKwkJCQk0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyog
RGVjaW1hbC5jcHAgKi8sCisJCQkJNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwu
aCAqLywKIAkJCQlBNzk1NDY0MjBCNUM0Q0I0MDA3QjQzOEYgLyogRHJhZ0RhdGEuY3BwICovLAog
CQkJCUE3QjZFNjlEMEIyOTFBOTYwMEQwNTI5RiAvKiBEcmFnRGF0YS5oICovLAogCQkJCUE3Q0ZC
M0NGMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuY3BwICovLApAQCAtMjIwOTYsNiArMjIx
MDIsNyBAQAogCQkJCUY1NUIzREI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCODEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREJBMTI1MUYxMkQwMDNFRjI2OSAv
KiBEYXRlVGltZUxvY2FsSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NUZFQTVEMDE1
NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDMjI4QTEx
MUQ1NzIyRTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNFQ0NGQzNCMTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5j
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjJBNDUxMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTkxLDYgKzI1NTk4LDcg
QEAKIAkJCQlGNTVCM0RCNTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGNTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1
dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQjkxMjUxRjEyRDAwM0VGMjY5IC8q
IERhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDVGRUE1Q0Yx
NTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDMjI4
QTIxMUQ1NzIyRTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDE2MkE0NTAxMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtl
ckNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFBM0Q1OEUxMDFDMTUyRDAwMzE2RDA3
IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRGVjaW1hbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGViZTE2YmExMjMyZTc5NTg5MjA2ZjgzODJi
NzlhY2UxZGUzNDhmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RlY2ltYWwuY3BwCkBAIC0wLDAgKzEsOTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRlY2ltYWwuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxmbG9hdC5o
PgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgRGVjaW1h
bFByaXZhdGUgeworCitzdGF0aWMgaW50IGNvbnN0IEV4cG9uZW50TWF4ID0gMTAyMzsKK3N0YXRp
YyBpbnQgY29uc3QgRXhwb25lbnRNaW4gPSAtMTAyMzsKK3N0YXRpYyBpbnQgY29uc3QgUHJlY2lz
aW9uID0gMTg7CisKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBNYXhDb2VmZmljaWVudCA9IFVJTlQ2
NF9DKDB4MTYzNDU3ODVEODlGRkZGKTsgLy8gOTk5OTk5OTk5OTk5OTk5OTk5ID09IDE4IDkncwor
CisvLyBUaGlzIGNsYXNzIGhhbmRsZXMgRGVjaW1hbCBzcGVjaWFsIHZhbHVlcy4KK2NsYXNzIFNw
ZWNpYWxWYWx1ZUhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWxWYWx1
ZUhhbmRsZXIpOworcHVibGljOgorICAgIGVudW0gSGFuZGxlUmVzdWx0IHsKKyAgICAgICAgQm90
aEZpbml0ZSwKKyAgICAgICAgQm90aEluZmluaXR5LAorICAgICAgICBFaXRoZXJOYU4sCisgICAg
ICAgIExIU0lzSW5maW5pdHksCisgICAgICAgIFJIU0lzSW5maW5pdHksCisgICAgfTsKKworICAg
IFNwZWNpYWxWYWx1ZUhhbmRsZXIoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBEZWNpbWFsJiBy
aHMpOworICAgIEhhbmRsZVJlc3VsdCBoYW5kbGUoKTsKKyAgICBEZWNpbWFsIHZhbHVlKCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZW51bSBSZXN1bHQgeworICAgICAgICBSZXN1bHRJc0xIUywK
KyAgICAgICAgUmVzdWx0SXNSSFMsCisgICAgICAgIFJlc3VsdElzVW5rbm93biwKKyAgICB9Owor
CisgICAgY29uc3QgRGVjaW1hbCYgbV9saHM7CisgICAgY29uc3QgRGVjaW1hbCYgbV9yaHM7Cisg
ICAgUmVzdWx0IG1fcmVzdWx0OworfTsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGZvciAxMjgg
Yml0IHVuc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYy4KK2NsYXNzIFVJbnQxMjggeworcHVibGlj
OgorICAgIFVJbnQxMjgodWludDY0X3QgbG93LCB1aW50NjRfdCBoaWdoKQorICAgICAgICA6IG1f
aGlnaChoaWdoKSwgbV9sb3cobG93KQorICAgIHsKKyAgICB9CisKKyAgICBVSW50MTI4JiBvcGVy
YXRvci89KHVpbnQzMl90KTsKKworICAgIHVpbnQ2NF90IGhpZ2goKSBjb25zdCB7IHJldHVybiBt
X2hpZ2g7IH0KKyAgICB1aW50NjRfdCBsb3coKSBjb25zdCB7IHJldHVybiBtX2xvdzsgfQorCisg
ICAgc3RhdGljIFVJbnQxMjggbXVsdGlwbHkodWludDY0X3QgdSwgdWludDY0X3QgdikgeyByZXR1
cm4gVUludDEyOCh1ICogdiwgbXVsdGlwbHlIaWdoKHUsIHYpKTsgfQorCitwcml2YXRlOgorICAg
IHN0YXRpYyB1aW50MzJfdCBoaWdoVUludDMyKHVpbnQ2NF90IHgpIHsgcmV0dXJuIHVpbnQzMl90
KHggPj4gMzIpOyB9CisgICAgc3RhdGljIHVpbnQzMl90IGxvd1VJbnQzMih1aW50NjRfdCB4KSB7
IHJldHVybiB1aW50MzJfdCh4ICYgKCh1aW50NjRfdCgxKSA8PCAzMikgLSAxKSk7IH0KKyAgICBi
b29sIGlzWmVybygpIGNvbnN0IHsgcmV0dXJuICFtX2xvdyAmJiAhbV9oaWdoOyB9CisgICAgc3Rh
dGljIHVpbnQ2NF90IG1ha2VVaW50NjQodWludDMyX3QgbG93LCB1aW50MzJfdCBoaWdoKSB7IHJl
dHVybiBsb3cgfCAodWludDY0X3QoaGlnaCkgPDwgMzIpOyB9CisKKyAgICBzdGF0aWMgdWludDY0
X3QgbXVsdGlwbHlIaWdoKHVpbnQ2NF90LCB1aW50NjRfdCk7CisKKyAgICB1aW50NjRfdCBtX2hp
Z2g7CisgICAgdWludDY0X3QgbV9sb3c7Cit9OworCisKK1VJbnQxMjgmIFVJbnQxMjg6Om9wZXJh
dG9yLz0oY29uc3QgdWludDMyX3QgZGl2aXNvcikKK3sKKyAgICBBU1NFUlQoZGl2aXNvcik7CisK
KyAgICBpZiAoIW1faGlnaCkgeworICAgICAgICBtX2xvdyAvPSBkaXZpc29yOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdWludDMyX3QgZGl2aWRlbmRbNF07CisgICAgZGl2
aWRlbmRbMF0gPSB1aW50MzJfdChtX2xvdyAmIHVpbnQzMl90KC0xKSk7CisgICAgZGl2aWRlbmRb
MV0gPSB1aW50MzJfdChtX2xvdyA+PiAzMik7CisgICAgZGl2aWRlbmRbMl0gPSB1aW50MzJfdCht
X2hpZ2ggJiB1aW50MzJfdCgtMSkpOworICAgIGRpdmlkZW5kWzNdID0gdWludDMyX3QobV9oaWdo
ID4+IDMyKTsKKworICAgIHVpbnQzMl90IHF1b3RpZW50WzRdOworICAgIHVpbnQzMl90IHJlbWFp
bmRlciA9IDA7CisgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNv
bnN0IHVpbnQ2NF90IHdvcmsgPSAodWludDY0X3QocmVtYWluZGVyKSA8PCAzMikgfCBkaXZpZGVu
ZFtpXTsKKyAgICAgICAgcmVtYWluZGVyID0gdWludDMyX3Qod29yayAlIGRpdmlzb3IpOworICAg
ICAgICBxdW90aWVudFtpXSA9IHVpbnQzMl90KHdvcmsgLyBkaXZpc29yKTsKKyAgICB9CisgICAg
bV9sb3cgPSBtYWtlVWludDY0KHF1b3RpZW50WzBdLCBxdW90aWVudFsxXSk7CisgICAgbV9oaWdo
ID0gbWFrZVVpbnQ2NChxdW90aWVudFsyXSwgcXVvdGllbnRbM10pOworICAgIHJldHVybiAqdGhp
czsKK30KKworLy8gUmV0dXJucyBoaWdoIDY0Yml0IG9mIDEyOGJpdCBwcm9kdWN0LgordWludDY0
X3QgVUludDEyODo6bXVsdGlwbHlIaWdoKHVpbnQ2NF90IHUsIHVpbnQ2NF90IHYpCit7CisgICAg
Y29uc3QgdWludDY0X3QgdUxvdyA9IGxvd1VJbnQzMih1KTsKKyAgICBjb25zdCB1aW50NjRfdCB1
SGlnaCA9IGhpZ2hVSW50MzIodSk7CisgICAgY29uc3QgdWludDY0X3QgdkxvdyA9IGxvd1VJbnQz
Mih2KTsKKyAgICBjb25zdCB1aW50NjRfdCB2SGlnaCA9IGhpZ2hVSW50MzIodik7CisgICAgY29u
c3QgdWludDY0X3QgcGFydGlhbFByb2R1Y3QgPSB1SGlnaCAqIHZMb3cgKyBoaWdoVUludDMyKHVM
b3cgKiB2TG93KTsKKyAgICByZXR1cm4gdUhpZ2ggKiB2SGlnaCArIGhpZ2hVSW50MzIocGFydGlh
bFByb2R1Y3QpICsgaGlnaFVJbnQzMih1TG93ICogdkhpZ2ggKyBsb3dVSW50MzIocGFydGlhbFBy
b2R1Y3QpKTsKK30KKworc3RhdGljIGludCBjb3VudERpZ2l0cyh1aW50NjRfdCB4KQoreworICAg
IGludCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgZm9yICh1aW50NjRfdCBwb3dlck9mVGVuID0g
MTsgeCA+PSBwb3dlck9mVGVuOyBwb3dlck9mVGVuICo9IDEwKSB7CisgICAgICAgICsrbnVtYmVy
T2ZEaWdpdHM7CisgICAgICAgIGlmIChwb3dlck9mVGVuID49IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDY0X3Q+OjptYXgoKSAvIDEwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiBudW1iZXJPZkRpZ2l0czsKK30KKworc3RhdGljIHVpbnQ2NF90IHNjYWxlRG93bih1aW50
NjRfdCB4LCBpbnQgbikKK3sKKyAgICBBU1NFUlQobiA+PSAwKTsKKyAgICB3aGlsZSAobiA+IDAg
JiYgeCkgeworICAgICAgICB4IC89IDEwOworICAgICAgICAtLW47CisgICAgfQorICAgIHJldHVy
biB4OworfQorCitzdGF0aWMgdWludDY0X3Qgc2NhbGVVcCh1aW50NjRfdCB4LCBpbnQgbikKK3sK
KyAgICBBU1NFUlQobiA+PSAwKTsKKyAgICBBU1NFUlQobiA8IFByZWNpc2lvbik7CisKKyAgICB1
aW50NjRfdCB5ID0gMTsKKyAgICB1aW50NjRfdCB6ID0gMTA7CisgICAgZm9yICg7OykgeworICAg
ICAgICBpZiAobiAmIDEpCisgICAgICAgICAgICB5ID0geSAqIHo7CisKKyAgICAgICAgbiA+Pj0g
MTsKKyAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgcmV0dXJuIHggKiB5OworCisgICAgICAg
IHogPSB6ICogejsKKyAgICB9Cit9CisKK1NwZWNpYWxWYWx1ZUhhbmRsZXI6OlNwZWNpYWxWYWx1
ZUhhbmRsZXIoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBEZWNpbWFsJiByaHMpCisgICAgOiBt
X2xocyhsaHMpLCBtX3JocyhyaHMpLCBtX3Jlc3VsdChSZXN1bHRJc1Vua25vd24pCit7Cit9CisK
K1NwZWNpYWxWYWx1ZUhhbmRsZXI6OkhhbmRsZVJlc3VsdCBTcGVjaWFsVmFsdWVIYW5kbGVyOjpo
YW5kbGUoKQoreworICAgIGlmIChtX2xocy5pc0Zpbml0ZSgpICYmIG1fcmhzLmlzRmluaXRlKCkp
CisgICAgICAgIHJldHVybiBCb3RoRmluaXRlOworCisgICAgY29uc3QgRGVjaW1hbDo6RW5jb2Rl
ZERhdGE6OkZvcm1hdENsYXNzIGxoc0NsYXNzID0gbV9saHMudmFsdWUoKS5mb3JtYXRDbGFzcygp
OworICAgIGNvbnN0IERlY2ltYWw6OkVuY29kZWREYXRhOjpGb3JtYXRDbGFzcyByaHNDbGFzcyA9
IG1fcmhzLnZhbHVlKCkuZm9ybWF0Q2xhc3MoKTsKKyAgICBpZiAobGhzQ2xhc3MgPT0gRGVjaW1h
bDo6RW5jb2RlZERhdGE6OkNsYXNzTmFOKSB7CisgICAgICAgIG1fcmVzdWx0ID0gUmVzdWx0SXNM
SFM7CisgICAgICAgIHJldHVybiBFaXRoZXJOYU47CisgICAgIH0KKworICAgIGlmIChyaHNDbGFz
cyA9PSBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Q2xhc3NOYU4pIHsKKyAgICAgICAgbV9yZXN1bHQg
PSBSZXN1bHRJc1JIUzsKKyAgICAgICAgcmV0dXJuIEVpdGhlck5hTjsKKyAgICAgfQorCisgICAg
aWYgKGxoc0NsYXNzID09IERlY2ltYWw6OkVuY29kZWREYXRhOjpDbGFzc0luZmluaXR5KQorICAg
ICAgICByZXR1cm4gcmhzQ2xhc3MgPT0gRGVjaW1hbDo6RW5jb2RlZERhdGE6OkNsYXNzSW5maW5p
dHkgPyBCb3RoSW5maW5pdHkgOiBMSFNJc0luZmluaXR5OworCisgICAgaWYgKHJoc0NsYXNzID09
IERlY2ltYWw6OkVuY29kZWREYXRhOjpDbGFzc0luZmluaXR5KQorICAgICAgICByZXR1cm4gUkhT
SXNJbmZpbml0eTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBCb3Ro
RmluaXRlOworfQorCitEZWNpbWFsIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OnZhbHVlKCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG1fcmVzdWx0KSB7CisgICAgY2FzZSBSZXN1bHRJc0xIUzoKKyAgICAg
ICAgcmV0dXJuIG1fbGhzOworICAgIGNhc2UgUmVzdWx0SXNSSFM6CisgICAgICAgIHJldHVybiBt
X3JoczsKKyAgICBjYXNlIFJlc3VsdElzVW5rbm93bjoKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG1fbGhzOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgRGVjaW1hbFByaXZhdGUKKwordXNpbmcgbmFtZXNwYWNlIERlY2ltYWxQ
cml2YXRlOworCitEZWNpbWFsOjpFbmNvZGVkRGF0YTo6RW5jb2RlZERhdGEoU2lnbiBzaWduLCBG
b3JtYXRDbGFzcyBmb3JtYXRDbGFzcykKKyAgICA6IG1fY29lZmZpY2llbnQoMCkKKyAgICAsIG1f
ZXhwb25lbnQoMCkKKyAgICAsIG1fZm9ybWF0Q2xhc3MoZm9ybWF0Q2xhc3MpCisgICAgLCBtX3Np
Z24oc2lnbikKK3sKK30KKworRGVjaW1hbDo6RW5jb2RlZERhdGE6OkVuY29kZWREYXRhKFNpZ24g
c2lnbiwgaW50IGV4cG9uZW50LCB1aW50NjRfdCBjb2VmZmljaWVudCkKKyAgICA6IG1fZm9ybWF0
Q2xhc3MoY29lZmZpY2llbnQgPyBDbGFzc05vcm1hbCA6IENsYXNzWmVybykKKyAgICAsIG1fc2ln
bihzaWduKQoreworICAgIGlmIChleHBvbmVudCA+PSBFeHBvbmVudE1pbiAmJiBleHBvbmVudCA8
PSBFeHBvbmVudE1heCkgeworICAgICAgICB3aGlsZSAoY29lZmZpY2llbnQgPj0gTWF4Q29lZmZp
Y2llbnQpIHsKKyAgICAgICAgICAgIGNvZWZmaWNpZW50IC89IDEwOworICAgICAgICAgICAgKytl
eHBvbmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChleHBvbmVudCA+IEV4cG9uZW50
TWF4KSB7CisgICAgICAgIG1fY29lZmZpY2llbnQgPSAwOworICAgICAgICBtX2V4cG9uZW50ID0g
MDsKKyAgICAgICAgbV9mb3JtYXRDbGFzcyA9IENsYXNzSW5maW5pdHk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZXhwb25lbnQgPCBFeHBvbmVudE1pbikgeworICAgICAgICBt
X2NvZWZmaWNpZW50ID0gMDsKKyAgICAgICAgbV9leHBvbmVudCA9IDA7CisgICAgICAgIG1fZm9y
bWF0Q2xhc3MgPSBDbGFzc1plcm87CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Nv
ZWZmaWNpZW50ID0gY29lZmZpY2llbnQ7CisgICAgbV9leHBvbmVudCA9IGludDE2X3QoZXhwb25l
bnQpOworfQorCitib29sIERlY2ltYWw6OkVuY29kZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IEVu
Y29kZWREYXRhJiBhbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3NpZ24gPT0gYW5vdGhl
ci5tX3NpZ24KKyAgICAgICAgJiYgbV9mb3JtYXRDbGFzcyA9PSBhbm90aGVyLm1fZm9ybWF0Q2xh
c3MKKyAgICAgICAgJiYgbV9leHBvbmVudCA9PSBhbm90aGVyLm1fZXhwb25lbnQKKyAgICAgICAg
JiYgbV9jb2VmZmljaWVudCA9PSBhbm90aGVyLm1fY29lZmZpY2llbnQ7Cit9CisKK0RlY2ltYWw6
OkRlY2ltYWwoaW50MzJfdCBpMzIpCisgICAgOiBtX2RhdGEoaTMyIDwgMCA/IE5lZ2F0aXZlIDog
UG9zaXRpdmUsIDAsIGkzMiA8IDAgPyB1aW50MzJfdCgtaTMyKSA6IGkzMikKK3sKK30KKworRGVj
aW1hbDo6RGVjaW1hbChTaWduIHNpZ24sIGludCBleHBvbmVudCwgdWludDY0X3QgY29lZmZpY2ll
bnQpCisgICAgOiBtX2RhdGEoc2lnbiwgZXhwb25lbnQsIGNvZWZmaWNpZW50KQoreworfQorCitE
ZWNpbWFsOjpEZWNpbWFsKGNvbnN0IEVuY29kZWREYXRhJiBkYXRhKQorICAgIDogbV9kYXRhKGRh
dGEpCit7Cit9CisKK0RlY2ltYWw6OkRlY2ltYWwoY29uc3QgRGVjaW1hbCYgb3RoZXIpCisgICAg
OiBtX2RhdGEob3RoZXIubV9kYXRhKQoreworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRv
cj0oY29uc3QgRGVjaW1hbCYgb3RoZXIpCit7CisgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwor
ICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IrPShjb25z
dCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgKyBvdGhlcikubV9kYXRh
OworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3ItPShj
b25zdCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgLSBvdGhlcikubV9k
YXRhOworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3Iq
PShjb25zdCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgKiBvdGhlciku
bV9kYXRhOworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0
b3IvPShjb25zdCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgLyBvdGhl
cikubV9kYXRhOworICAgIHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVy
YXRvci0oKSBjb25zdAoreworICAgIERlY2ltYWwgcmVzdWx0KCp0aGlzKTsKKyAgICByZXN1bHQu
bV9kYXRhLnNldFNpZ24oaW52ZXJ0U2lnbihtX2RhdGEuc2lnbigpKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRvcisoY29uc3QgRGVjaW1hbCYgcmhz
KSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9ICp0aGlzOworICAgIGNvbnN0IFNp
Z24gbGhzU2lnbiA9IGxocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByaHNTaWduID0gcmhzLnNp
Z24oKTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAg
c3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVy
OjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFu
ZGxlcjo6Qm90aEluZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzU2lnbiA9PSByaHNTaWduID8g
bGhzIDogbmFuKCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoK
KyAgICAgICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVl
SGFuZGxlcjo6TEhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxoczsKKworICAgIGNhc2Ug
U3BlY2lhbFZhbHVlSGFuZGxlcjo6UkhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHJoczsK
KyAgICB9CisKKyAgICBjb25zdCBBbGlnbmVkT3BlcmFuZHMgYWxpZ25lZE9wZXJhbmRzID0gYWxp
Z25PcGVyYW5kcyhsaHMsIHJocyk7CisKKyAgICBjb25zdCB1aW50NjRfdCByZXN1bHQgPSBsaHNT
aWduID09IHJoc1NpZ24KKyAgICAgICAgPyBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQg
KyBhbGlnbmVkT3BlcmFuZHMucmhzQ29lZmZpY2llbnQKKyAgICAgICAgOiBhbGlnbmVkT3BlcmFu
ZHMubGhzQ29lZmZpY2llbnQgLSBhbGlnbmVkT3BlcmFuZHMucmhzQ29lZmZpY2llbnQ7CisgICAg
aWYgKGxoc1NpZ24gPT0gTmVnYXRpdmUgJiYgcmhzU2lnbiA9PSBQb3NpdGl2ZSAmJiAhcmVzdWx0
KQorICAgICAgICByZXR1cm4gRGVjaW1hbChQb3NpdGl2ZSwgYWxpZ25lZE9wZXJhbmRzLmV4cG9u
ZW50LCAwKTsKKworICAgIHJldHVybiBpbnQ2NF90KHJlc3VsdCkgPj0gMAorICAgICAgICA/IERl
Y2ltYWwobGhzU2lnbiwgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50LCByZXN1bHQpCisgICAgICAg
IDogRGVjaW1hbChpbnZlcnRTaWduKGxoc1NpZ24pLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQs
IC1pbnQ2NF90KHJlc3VsdCkpOworfQorCitEZWNpbWFsIERlY2ltYWw6Om9wZXJhdG9yLShjb25z
dCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29uc3QgRGVjaW1hbCYgbGhzID0gKnRoaXM7
CisgICAgY29uc3QgU2lnbiBsaHNTaWduID0gbGhzLnNpZ24oKTsKKyAgICBjb25zdCBTaWduIHJo
c1NpZ24gPSByaHMuc2lnbigpOworCisgICAgU3BlY2lhbFZhbHVlSGFuZGxlciBoYW5kbGVyKGxo
cywgcmhzKTsKKyAgICBzd2l0Y2ggKGhhbmRsZXIuaGFuZGxlKCkpIHsKKyAgICBjYXNlIFNwZWNp
YWxWYWx1ZUhhbmRsZXI6OkJvdGhGaW5pdGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBT
cGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoSW5maW5pdHk6CisgICAgICAgIHJldHVybiBsaHNTaWdu
ID09IHJoc1NpZ24gPyBuYW4oKSA6IGxoczsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxl
cjo6RWl0aGVyTmFOOgorICAgICAgICByZXR1cm4gaGFuZGxlci52YWx1ZSgpOworCisgICAgY2Fz
ZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpMSFNJc0luZmluaXR5OgorICAgICAgICByZXR1cm4gbGhz
OworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSSFNJc0luZmluaXR5OgorICAgICAg
ICByZXR1cm4gaW5maW5pdHkoaW52ZXJ0U2lnbihyaHNTaWduKSk7CisgICAgfQorCisgICAgY29u
c3QgQWxpZ25lZE9wZXJhbmRzIGFsaWduZWRPcGVyYW5kcyA9IGFsaWduT3BlcmFuZHMobGhzLCBy
aHMpOworCisgICAgY29uc3QgdWludDY0X3QgcmVzdWx0ID0gbGhzU2lnbiA9PSByaHNTaWduCisg
ICAgICAgID8gYWxpZ25lZE9wZXJhbmRzLmxoc0NvZWZmaWNpZW50IC0gYWxpZ25lZE9wZXJhbmRz
LnJoc0NvZWZmaWNpZW50CisgICAgICAgIDogYWxpZ25lZE9wZXJhbmRzLmxoc0NvZWZmaWNpZW50
ICsgYWxpZ25lZE9wZXJhbmRzLnJoc0NvZWZmaWNpZW50OworCisgICAgcmV0dXJuIGxoc1NpZ24g
PT0gTmVnYXRpdmUgJiYgcmhzU2lnbiA9PSBOZWdhdGl2ZSAmJiAhcmVzdWx0CisgICAgICAgICAg
ICA/IERlY2ltYWwoUG9zaXRpdmUsIGFsaWduZWRPcGVyYW5kcy5leHBvbmVudCwgMCkKKyAgICAg
ICAgICAgIDogaW50NjRfdChyZXN1bHQpID49IDAKKyAgICAgICAgICAgICAgICA/IERlY2ltYWwo
bGhzU2lnbiwgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50LCByZXN1bHQpCisgICAgICAgICAgICAg
ICAgOiBEZWNpbWFsKGludmVydFNpZ24obGhzU2lnbiksIGFsaWduZWRPcGVyYW5kcy5leHBvbmVu
dCwgLWludDY0X3QocmVzdWx0KSk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IqKGNv
bnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsJiBsaHMgPSAqdGhp
czsKKyAgICBjb25zdCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24g
cmhzU2lnbiA9IHJocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByZXN1bHRTaWduID0gbGhzU2ln
biA9PSByaHNTaWduID8gUG9zaXRpdmUgOiBOZWdhdGl2ZTsKKworICAgIFNwZWNpYWxWYWx1ZUhh
bmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7
CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOiB7CisgICAgICAgIGNv
bnN0IHVpbnQ2NF90IGxoc0NvZWZmaWNpZW50ID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOwor
ICAgICAgICBjb25zdCB1aW50NjRfdCByaHNDb2VmZmljaWVudCA9IHJocy5tX2RhdGEuY29lZmZp
Y2llbnQoKTsKKyAgICAgICAgaW50IHJlc3VsdEV4cG9uZW50ID0gbGhzLmV4cG9uZW50KCkgKyBy
aHMuZXhwb25lbnQoKTsKKyAgICAgICAgVUludDEyOCB3b3JrKFVJbnQxMjg6Om11bHRpcGx5KGxo
c0NvZWZmaWNpZW50LCByaHNDb2VmZmljaWVudCkpOworICAgICAgICB3aGlsZSAod29yay5oaWdo
KCkpIHsKKyAgICAgICAgICAgIHdvcmsgLz0gMTA7CisgICAgICAgICAgICArK3Jlc3VsdEV4cG9u
ZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3Vs
dEV4cG9uZW50LCB3b3JrLmxvdygpKTsKKyAgICB9CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhh
bmRsZXI6OkJvdGhJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGluZmluaXR5KHJlc3VsdFNpZ24p
OworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpFaXRoZXJOYU46CisgICAgICAgIHJl
dHVybiBoYW5kbGVyLnZhbHVlKCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkxI
U0lzSW5maW5pdHk6CisgICAgICAgIHJldHVybiByaHMuaXNaZXJvKCkgPyBuYW4oKSA6IGluZmlu
aXR5KHJlc3VsdFNpZ24pOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSSFNJc0lu
ZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzLmlzWmVybygpID8gbmFuKCkgOiBpbmZpbml0eShy
ZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbmFuKCk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IvKGNvbnN0IERlY2ltYWwm
IHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsJiBsaHMgPSAqdGhpczsKKyAgICBjb25z
dCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24gcmhzU2lnbiA9IHJo
cy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByZXN1bHRTaWduID0gbGhzU2lnbiA9PSByaHNTaWdu
ID8gUG9zaXRpdmUgOiBOZWdhdGl2ZTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxl
cihsaHMsIHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBT
cGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAgIGNh
c2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEluZmluaXR5OgorICAgICAgICByZXR1cm4gbmFu
KCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAgICAg
cmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6
TEhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGluZmluaXR5KHJlc3VsdFNpZ24pOworCisg
ICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSSFNJc0luZmluaXR5OgorICAgICAgICByZXR1
cm4gemVybyhyZXN1bHRTaWduKTsKKyAgICB9CisKKyAgICBBU1NFUlQobGhzLmlzRmluaXRlKCkp
OworICAgIEFTU0VSVChyaHMuaXNGaW5pdGUoKSk7CisKKyAgICBpZiAocmhzLmlzWmVybygpKQor
ICAgICAgICByZXR1cm4gbGhzLmlzWmVybygpID8gbmFuKCkgOiBpbmZpbml0eShyZXN1bHRTaWdu
KTsKKworICAgIGludCByZXN1bHRFeHBvbmVudCA9IGxocy5leHBvbmVudCgpIC0gcmhzLmV4cG9u
ZW50KCk7CisKKyAgICBpZiAobGhzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gRGVjaW1hbChy
ZXN1bHRTaWduLCByZXN1bHRFeHBvbmVudCwgMCk7CisKKyAgICB1aW50NjRfdCByZW1haW5kZXIg
PSBsaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgdWludDY0X3QgZGl2aXNvciA9
IHJocy5tX2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAg
IHdoaWxlIChyZXN1bHQgPCBNYXhDb2VmZmljaWVudCAvIDEwMCkgeworICAgICAgICB3aGlsZSAo
cmVtYWluZGVyIDwgZGl2aXNvcikgeworICAgICAgICAgICAgcmVtYWluZGVyICo9IDEwOworICAg
ICAgICAgICAgcmVzdWx0ICo9IDEwOworICAgICAgICAgICAgLS1yZXN1bHRFeHBvbmVudDsKKyAg
ICAgICAgfQorICAgICAgICByZXN1bHQgKz0gcmVtYWluZGVyIC8gZGl2aXNvcjsKKyAgICAgICAg
cmVtYWluZGVyICU9IGRpdmlzb3I7CisgICAgICAgIGlmICghcmVtYWluZGVyKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJlbWFpbmRlciA+IGRpdmlzb3IgLyAyKQorICAg
ICAgICArK3Jlc3VsdDsKKworICAgIHJldHVybiBEZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3VsdEV4
cG9uZW50LCByZXN1bHQpOworfQorCitib29sIERlY2ltYWw6Om9wZXJhdG9yPT0oY29uc3QgRGVj
aW1hbCYgcmhzKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEgPT0gcmhzLm1fZGF0YSB8fCBj
b21wYXJlVG8ocmhzKS5pc1plcm8oKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvciE9KGNv
bnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmhzKTsK
K30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvcjwoY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAor
eworICAgIHJldHVybiAhb3BlcmF0b3I+PShyaHMpOworfQorCitib29sIERlY2ltYWw6Om9wZXJh
dG9yPD0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGlmIChtX2RhdGEgPT0gcmhz
Lm1fZGF0YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgRGVjaW1hbCByZXN1bHQg
PSBjb21wYXJlVG8ocmhzKTsKKyAgICByZXR1cm4gcmVzdWx0LmlzWmVybygpIHx8IHJlc3VsdC5p
c05lZ2F0aXZlKCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6b3BlcmF0b3I+KGNvbnN0IERlY2ltYWwm
IHJocykgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yPD0ocmhzKTsKK30KKworYm9vbCBE
ZWNpbWFsOjpvcGVyYXRvcj49KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBpZiAo
bV9kYXRhID09IHJocy5tX2RhdGEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IERl
Y2ltYWwgcmVzdWx0ID0gY29tcGFyZVRvKHJocyk7CisgICAgcmV0dXJuIHJlc3VsdC5pc1plcm8o
KSB8fCAhcmVzdWx0LmlzTmVnYXRpdmUoKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjphYnMoKSBj
b25zdAoreworICAgIERlY2ltYWwgcmVzdWx0KCp0aGlzKTsKKyAgICByZXN1bHQubV9kYXRhLnNl
dFNpZ24oUG9zaXRpdmUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0RlY2ltYWw6OkFsaWdu
ZWRPcGVyYW5kcyBEZWNpbWFsOjphbGlnbk9wZXJhbmRzKGNvbnN0IERlY2ltYWwmIGxocywgY29u
c3QgRGVjaW1hbCYgcmhzKQoreworICAgIEFTU0VSVChsaHMuaXNGaW5pdGUoKSk7CisgICAgQVNT
RVJUKHJocy5pc0Zpbml0ZSgpKTsKKworICAgIGNvbnN0IGludCBsaHNFeHBvbmVudCA9IGxocy5l
eHBvbmVudCgpOworICAgIGNvbnN0IGludCByaHNFeHBvbmVudCA9IHJocy5leHBvbmVudCgpOwor
ICAgIGludCBleHBvbmVudCA9IHN0ZDo6bWluKGxoc0V4cG9uZW50LCByaHNFeHBvbmVudCk7Cisg
ICAgdWludDY0X3QgbGhzQ29lZmZpY2llbnQgPSBsaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7Cisg
ICAgdWludDY0X3QgcmhzQ29lZmZpY2llbnQgPSByaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisK
KyAgICBpZiAobGhzRXhwb25lbnQgPiByaHNFeHBvbmVudCkgeworICAgICAgICBjb25zdCBpbnQg
bnVtYmVyT2ZMSFNEaWdpdHMgPSBjb3VudERpZ2l0cyhsaHNDb2VmZmljaWVudCk7CisgICAgICAg
IGlmIChudW1iZXJPZkxIU0RpZ2l0cykgeworICAgICAgICAgICAgY29uc3QgaW50IGxoc1NoaWZ0
QW1vdW50ID0gbGhzRXhwb25lbnQgLSByaHNFeHBvbmVudDsKKyAgICAgICAgICAgIGNvbnN0IGlu
dCBvdmVyZmxvdyA9IG51bWJlck9mTEhTRGlnaXRzICsgbGhzU2hpZnRBbW91bnQgLSBQcmVjaXNp
b247CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPD0gMCkKKyAgICAgICAgICAgICAgICBsaHND
b2VmZmljaWVudCA9IHNjYWxlVXAobGhzQ29lZmZpY2llbnQsIGxoc1NoaWZ0QW1vdW50KTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVV
cChsaHNDb2VmZmljaWVudCwgbGhzU2hpZnRBbW91bnQgLSBvdmVyZmxvdyk7CisgICAgICAgICAg
ICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2FsZURvd24ocmhzQ29lZmZpY2llbnQsIG92ZXJmbG93
KTsKKyAgICAgICAgICAgICAgICBleHBvbmVudCArPSBvdmVyZmxvdzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgfSBpZiAobGhzRXhwb25lbnQgPCByaHNFeHBvbmVudCkgeworICAg
ICAgICBjb25zdCBpbnQgbnVtYmVyT2ZSSFNEaWdpdHMgPSBjb3VudERpZ2l0cyhyaHNDb2VmZmlj
aWVudCk7CisgICAgICAgIGlmIChudW1iZXJPZlJIU0RpZ2l0cykgeworICAgICAgICAgICAgY29u
c3QgaW50IHJoc1NoaWZ0QW1vdW50ID0gcmhzRXhwb25lbnQgLSBsaHNFeHBvbmVudDsKKyAgICAg
ICAgICAgIGNvbnN0IGludCBvdmVyZmxvdyA9IG51bWJlck9mUkhTRGlnaXRzICsgcmhzU2hpZnRB
bW91bnQgLSBQcmVjaXNpb247CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPD0gMCkKKyAgICAg
ICAgICAgICAgICByaHNDb2VmZmljaWVudCA9IHNjYWxlVXAocmhzQ29lZmZpY2llbnQsIHJoc1No
aWZ0QW1vdW50KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJoc0NvZWZm
aWNpZW50ID0gc2NhbGVVcChyaHNDb2VmZmljaWVudCwgcmhzU2hpZnRBbW91bnQgLSBvdmVyZmxv
dyk7CisgICAgICAgICAgICAgICAgbGhzQ29lZmZpY2llbnQgPSBzY2FsZURvd24obGhzQ29lZmZp
Y2llbnQsIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBleHBvbmVudCArPSBvdmVyZmxvdzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEFsaWduZWRPcGVyYW5kcyBh
bGlnbmVkT3BlcmFuZHM7CisgICAgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50ID0gZXhwb25lbnQ7
CisgICAgYWxpZ25lZE9wZXJhbmRzLmxoc0NvZWZmaWNpZW50ID0gbGhzQ29lZmZpY2llbnQ7Cisg
ICAgYWxpZ25lZE9wZXJhbmRzLnJoc0NvZWZmaWNpZW50ID0gcmhzQ29lZmZpY2llbnQ7CisgICAg
cmV0dXJuIGFsaWduZWRPcGVyYW5kczsKK30KKworLy8gUm91bmQgdG93YXJkIHBvc2l0aXZlIGlu
ZmluaXR5LgorLy8gTm90ZTogTWFjIHBvcnRzIGRlZmluZXMgY2VpbCh4KSBhcyB3dGZfY2VpbCh4
KSwgc28gd2UgY2FuJ3QgdXNlIG5hbWUgImNlaWwiIGhlcmUuCitEZWNpbWFsIERlY2ltYWw6OmNl
aWxpbmcoKSBjb25zdAoreworICAgIGlmIChpc1NwZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0
aGlzOworCisgICAgaWYgKGV4cG9uZW50KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
CisgICAgdWludDY0X3QgcmVzdWx0ID0gbV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3Qg
aW50IG51bWJlck9mRGlnaXRzID0gY291bnREaWdpdHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQg
bnVtYmVyT2ZEcm9wRGlnaXRzID0gLWV4cG9uZW50KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRz
IDwgbnVtYmVyT2ZEcm9wRGlnaXRzKQorICAgICAgICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisK
KyAgICByZXN1bHQgPSBzY2FsZURvd24ocmVzdWx0LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsK
KyAgICBpZiAoc2lnbigpID09IFBvc2l0aXZlICYmIHJlc3VsdCAlIDEwID4gMCkKKyAgICAgICAg
cmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsKKyAgICByZXR1cm4gRGVjaW1hbChzaWdu
KCksIDAsIHJlc3VsdCk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6Y29tcGFyZVRvKGNvbnN0IERl
Y2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCgqdGhpcyAtIHJo
cyk7CisgICAgcmV0dXJuIHJlc3VsdC5pc1plcm8oKQorICAgICAgICAgICAgPyB6ZXJvKFBvc2l0
aXZlKQorICAgICAgICAgICAgOiByZXN1bHQuaXNGaW5pdGUoKQorICAgICAgICAgICAgICAgICAg
ICA/IHJlc3VsdAorICAgICAgICAgICAgICAgICAgICA6IHJlc3VsdC5pc05lZ2F0aXZlKCkgPyBE
ZWNpbWFsKC0xKSA6IERlY2ltYWwoMSk7Cit9CisKKy8vIFJvdW5kIHRvd2FyZCBuZWdhdGl2ZSBp
bmZpbml0eS4KK0RlY2ltYWwgRGVjaW1hbDo6Zmxvb3IoKSBjb25zdAoreworICAgIGlmIChpc1Nw
ZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgaWYgKGV4cG9uZW50KCkgPj0g
MCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgdWludDY0X3QgcmVzdWx0ID0gbV9kYXRh
LmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRGlnaXRzID0gY291bnREaWdp
dHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEcm9wRGlnaXRzID0gLWV4cG9uZW50
KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgbnVtYmVyT2ZEcm9wRGlnaXRzKQorICAgICAg
ICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICByZXN1bHQgPSBzY2FsZURvd24ocmVzdWx0
LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBpZiAoaXNOZWdhdGl2ZSgpICYmIHJlc3Vs
dCAlIDEwID4gMCkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsKKyAg
ICByZXR1cm4gRGVjaW1hbChzaWduKCksIDAsIHJlc3VsdCk7Cit9CisKK0RlY2ltYWwgRGVjaW1h
bDo6ZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBpbnQgZXhwb25lbnQgPSAw
OworICAgIFNpZ24gZXhwb25lbnRTaWduID0gUG9zaXRpdmU7CisgICAgaW50IG51bWJlck9mRGln
aXRzID0gMDsKKyAgICBpbnQgbnVtYmVyT2ZEaWdpdHNBZnRlckRvdCA9IDA7CisgICAgaW50IG51
bWJlck9mRXh0cmFEaWdpdHMgPSAwOworICAgIFNpZ24gc2lnbiA9IFBvc2l0aXZlOworCisgICAg
ZW51bSB7CisgICAgICAgIFN0YXRlRGlnaXQsCisgICAgICAgIFN0YXRlRG90LAorICAgICAgICBT
dGF0ZURvdERpZ2l0LAorICAgICAgICBTdGF0ZUUsCisgICAgICAgIFN0YXRlRURpZ2l0LAorICAg
ICAgICBTdGF0ZUVTaWduLAorICAgICAgICBTdGF0ZVNpZ24sCisgICAgICAgIFN0YXRlU3RhcnQs
CisgICAgICAgIFN0YXRlWmVybywKKyAgICB9IHN0YXRlID0gU3RhdGVTdGFydDsKKworICAgICNk
ZWZpbmUgSGFuZGxlQ2hhckFuZEJyZWFrKGV4cGVjdGVkLCBuZXh0U3RhdGUpIFwKKyAgICAgICAg
aWYgKGNoID09IGV4cGVjdGVkKSB7IFwKKyAgICAgICAgICAgIHN0YXRlID0gbmV4dFN0YXRlOyBc
CisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9CisKKyAgICAjZGVmaW5lIEhhbmRsZVR3
b0NoYXJzQW5kQnJlYWsoZXhwZWN0ZWQxLCBleHBlY3RlZDIsIG5leHRTdGF0ZSkgXAorICAgICAg
ICBpZiAoY2ggPT0gZXhwZWN0ZWQxIHx8IGNoID09IGV4cGVjdGVkMikgeyBcCisgICAgICAgICAg
ICBzdGF0ZSA9IG5leHRTdGF0ZTsgXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgfQor
CisgICAgdWludDY0X3QgYWNjdW11bGF0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBpbnQg
Y2ggPSBzdHJbaW5kZXhdOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2Ug
U3RhdGVEaWdpdDoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgUHJlY2lzaW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7CisgICAgICAgICAgICAgICAgICAgIGFjY3Vt
dWxhdG9yICo9IDEwOworICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBjaCAtICcw
JzsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJP
ZkV4dHJhRGlnaXRzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBIYW5kbGVDaGFyQW5kQnJlYWsoJy4nLCBTdGF0ZURvdCk7CisgICAgICAgICAg
ICBIYW5kbGVUd29DaGFyc0FuZEJyZWFrKCdFJywgJ2UnLCBTdGF0ZUUpOworICAgICAgICAgICAg
cmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVEb3Q6CisgICAgICAgICAgICBpZiAo
Y2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkRp
Z2l0cyA8IFByZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRz
OworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRzQWZ0ZXJEb3Q7CisgICAgICAg
ICAgICAgICAgICAgIGFjY3VtdWxhdG9yICo9IDEwOworICAgICAgICAgICAgICAgICAgICBhY2N1
bXVsYXRvciArPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZURvdERpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgU3RhdGVEb3REaWdpdDoKKyAgICAgICAgICAgIGlmIChjaCA+
PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mRGlnaXRz
IDwgUHJlY2lzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7Cisg
ICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWdpdHNBZnRlckRvdDsKKyAgICAgICAgICAg
ICAgICAgICAgYWNjdW11bGF0b3IgKj0gMTA7CisgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxh
dG9yICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSGFuZGxlVHdvQ2hhcnNBbmRCcmVhaygn
RScsICdlJywgU3RhdGVFKTsKKyAgICAgICAgICAgIHJldHVybiBuYW4oKTsKKworICAgICAgICBj
YXNlIFN0YXRlRToKKyAgICAgICAgICAgIGlmIChjaCA9PSAnKycpIHsKKyAgICAgICAgICAgICAg
ICBleHBvbmVudFNpZ24gPSBQb3NpdGl2ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
RVNpZ247CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBleHBvbmVudFNpZ24gPSBOZWdh
dGl2ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRVNpZ247CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYg
Y2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBjaCAtICcwJzsKKyAgICAg
ICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2Fz
ZSBTdGF0ZUVEaWdpdDoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7
CisgICAgICAgICAgICAgICAgZXhwb25lbnQgKj0gMTA7CisgICAgICAgICAgICAgICAgZXhwb25l
bnQgKz0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50ID4gRXhwb25lbnRN
YXggKyBQcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFjY3VtdWxhdG9yKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9uZW50U2lnbiA9PSBOZWdhdGl2ZSA/
IHplcm8oUG9zaXRpdmUpIDogaW5maW5pdHkoc2lnbik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB6ZXJvKHNpZ24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0
ZSA9IFN0YXRlRURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0ZUVTaWduOgor
ICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAg
ICBleHBvbmVudCA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVFRGln
aXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiBuYW4oKTsKKworICAgICAgICBjYXNlIFN0YXRlU2lnbjoKKyAgICAgICAgICAgIGlm
IChjaCA+PSAnMScgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3Ig
PSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRpZ2l0cyA9IDE7CisgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBIYW5kbGVDaGFyQW5kQnJlYWsoJzAnLCBTdGF0ZVpl
cm8pOworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVTdGFy
dDoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMScgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAg
ICAgICAgYWNjdW11bGF0b3IgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRp
Z2l0cyA9IDE7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZURpZ2l0OworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPT0gJy0n
KSB7CisgICAgICAgICAgICAgICAgc2lnbiA9IE5lZ2F0aXZlOworICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGVTaWduOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoY2ggPT0gJysnKSB7CisgICAgICAgICAgICAgICAgc2lnbiA9IFBv
c2l0aXZlOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTaWduOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYW5kbGVDaGFyQW5kQnJl
YWsoJzAnLCBTdGF0ZVplcm8pOworICAgICAgICAgICAgSGFuZGxlQ2hhckFuZEJyZWFrKCcuJywg
U3RhdGVEb3QpOworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3Rh
dGVaZXJvOgorICAgICAgICAgICAgaWYgKGNoID09ICcwJykKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgaWYgKGNoID49ICcxJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRvciA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIG51bWJlck9m
RGlnaXRzID0gMTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRGlnaXQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEhhbmRsZUNoYXJB
bmRCcmVhaygnLicsIFN0YXRlRG90KTsKKyAgICAgICAgICAgIEhhbmRsZVR3b0NoYXJzQW5kQnJl
YWsoJ0UnLCAnZScsIFN0YXRlRSk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIG5hbigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXRlID09IFN0
YXRlWmVybykKKyAgICAgICAgcmV0dXJuIHplcm8oc2lnbik7CisKKyAgICBpZiAoc3RhdGUgPT0g
U3RhdGVEaWdpdCB8fCBzdGF0ZSA9PSBTdGF0ZUVEaWdpdCB8fCBzdGF0ZSA9PSBTdGF0ZURvdERp
Z2l0KSB7CisgICAgICAgIGludCByZXN1bHRFeHBvbmVudCA9IGV4cG9uZW50ICogKGV4cG9uZW50
U2lnbiA9PSBOZWdhdGl2ZSA/IC0xIDogMSkgLSBudW1iZXJPZkRpZ2l0c0FmdGVyRG90ICsgbnVt
YmVyT2ZFeHRyYURpZ2l0czsKKyAgICAgICAgaWYgKHJlc3VsdEV4cG9uZW50IDwgRXhwb25lbnRN
aW4pCisgICAgICAgICAgICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICAgICAgY29uc3Qg
aW50IG92ZXJmbG93ID0gcmVzdWx0RXhwb25lbnQgLSBFeHBvbmVudE1heCArIDE7CisgICAgICAg
IGlmIChvdmVyZmxvdyA+IDApIHsKKyAgICAgICAgICAgIGlmIChvdmVyZmxvdyArIG51bWJlck9m
RGlnaXRzIC0gbnVtYmVyT2ZEaWdpdHNBZnRlckRvdCA+IFByZWNpc2lvbikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaW5maW5pdHkoc2lnbik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IHNj
YWxlVXAoYWNjdW11bGF0b3IsIG92ZXJmbG93KTsKKyAgICAgICAgICAgIHJlc3VsdEV4cG9uZW50
IC09IG92ZXJmbG93OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIERlY2ltYWwoc2lnbiwg
cmVzdWx0RXhwb25lbnQsIGFjY3VtdWxhdG9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFuKCk7
Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6aW5maW5pdHkoY29uc3QgU2lnbiBzaWduKQoreworICAg
IHJldHVybiBEZWNpbWFsKEVuY29kZWREYXRhKHNpZ24sIEVuY29kZWREYXRhOjpDbGFzc0luZmlu
aXR5KSk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6bmFuKCkKK3sKKyAgICByZXR1cm4gRGVjaW1h
bChFbmNvZGVkRGF0YShQb3NpdGl2ZSwgRW5jb2RlZERhdGE6OkNsYXNzTmFOKSk7Cit9CisKK0Rl
Y2ltYWwgRGVjaW1hbDo6cmVtYWluZGVyKGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAg
ICBjb25zdCBEZWNpbWFsIHF1b3RpZW50ID0gKCp0aGlzIC8gcmhzKS5yb3VuZCgpOworICAgIHJl
dHVybiBxdW90aWVudC5pc1NwZWNpYWwoKSA/IHF1b3RpZW50IDogKnRoaXMgLSBxdW90aWVudCAq
IHJoczsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpyb3VuZCgpIGNvbnN0Cit7CisgICAgaWYgKGlz
U3BlY2lhbCgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoZXhwb25lbnQoKSA+
PSAwKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICB1aW50NjRfdCByZXN1bHQgPSBtX2Rh
dGEuY29lZmZpY2llbnQoKTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEaWdpdHMgPSBjb3VudERp
Z2l0cyhyZXN1bHQpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRyb3BEaWdpdHMgPSAtZXhwb25l
bnQoKTsKKyAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBudW1iZXJPZkRyb3BEaWdpdHMpCisgICAg
ICAgIHJldHVybiB6ZXJvKFBvc2l0aXZlKTsKKworICAgIHJlc3VsdCA9IHNjYWxlRG93bihyZXN1
bHQsIG51bWJlck9mRHJvcERpZ2l0cyAtIDEpOworICAgIGlmIChyZXN1bHQgJSAxMCA+PSA1KQor
ICAgICAgICByZXN1bHQgKz0gMTA7CisgICAgcmVzdWx0IC89IDEwOworICAgIHJldHVybiBEZWNp
bWFsKHNpZ24oKSwgMCwgcmVzdWx0KTsKK30KKworU3RyaW5nIERlY2ltYWw6OnRvU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fZGF0YS5mb3JtYXRDbGFzcygpKSB7CisgICAgY2FzZSBF
bmNvZGVkRGF0YTo6Q2xhc3NJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHNpZ24oKSA/ICItSW5m
aW5pdHkiIDogIkluZmluaXR5IjsKKworICAgIGNhc2UgRW5jb2RlZERhdGE6OkNsYXNzTmFOOgor
ICAgICAgICByZXR1cm4gc2lnbigpID8gIi1OYU4iIDogIk5hTiI7CisKKyAgICBjYXNlIEVuY29k
ZWREYXRhOjpDbGFzc05vcm1hbDoKKyAgICBjYXNlIEVuY29kZWREYXRhOjpDbGFzc1plcm86Cisg
ICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgaWYgKHNpZ24oKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKKworICAg
IGludCBvcmlnaW5hbEV4cG9uZW50ID0gZXhwb25lbnQoKTsKKworICAgIGNvbnN0IGludCBtYXhE
aWdpdHMgPSBEQkxfRElHOworICAgIHVpbnQ2NF90IGNvZWZmaWNpZW50ID0gbV9kYXRhLmNvZWZm
aWNpZW50KCk7CisgICAgaW50IGxhc3REaWdpdCA9IDA7CisgICAgd2hpbGUgKGNvdW50RGlnaXRz
KGNvZWZmaWNpZW50KSA+IG1heERpZ2l0cykgeworICAgICAgICBsYXN0RGlnaXQgPSBjb2VmZmlj
aWVudCAlIDEwOworICAgICAgICBjb2VmZmljaWVudCAvPSAxMDsKKyAgICAgICAgKytvcmlnaW5h
bEV4cG9uZW50OworICAgIH0KKworICAgIGlmIChsYXN0RGlnaXQgPj0gNSkKKyAgICAgICAgKytj
b2VmZmljaWVudDsKKworICAgIHdoaWxlIChvcmlnaW5hbEV4cG9uZW50IDwgMCAmJiBjb2VmZmlj
aWVudCAmJiAhKGNvZWZmaWNpZW50ICUgMTApKSB7CisgICAgICAgIGNvZWZmaWNpZW50IC89IDEw
OworICAgICAgICArK29yaWdpbmFsRXhwb25lbnQ7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5n
IGRpZ2l0cyA9IFN0cmluZzo6bnVtYmVyKGNvZWZmaWNpZW50KTsKKyAgICBpbnQgY29lZmZpY2ll
bnRMZW5ndGggPSBpbnQoZGlnaXRzLmxlbmd0aCgpKTsKKyAgICBjb25zdCBpbnQgYWRqdXN0ZWRF
eHBvbmVudCA9IG9yaWdpbmFsRXhwb25lbnQgKyBjb2VmZmljaWVudExlbmd0aCAtIDE7CisgICAg
aWYgKG9yaWdpbmFsRXhwb25lbnQgPD0gMCAmJiBhZGp1c3RlZEV4cG9uZW50ID49IC02KSB7Cisg
ICAgICAgIGlmICghb3JpZ2luYWxFeHBvbmVudCkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoZGlnaXRzKTsKKyAgICAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoYWRqdXN0ZWRFeHBvbmVudCA+PSAwKSB7CisgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvZWZmaWNpZW50TGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHNbaV0pOworICAgICAgICAgICAgICAgIGlmIChp
ID09IGFkanVzdGVkRXhwb25lbnQpCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCcuJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOworICAgICAgICB9CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIjAuIik7CisgICAgICAg
IGZvciAoaW50IGkgPSBhZGp1c3RlZEV4cG9uZW50ICsgMTsgaSA8IDA7ICsraSkKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcwJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZGlnaXRz
KTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRpZ2l0c1swXSk7Cisg
ICAgICAgIHdoaWxlIChjb2VmZmljaWVudExlbmd0aCA+PSAyICYmIGRpZ2l0c1tjb2VmZmljaWVu
dExlbmd0aCAtIDFdID09ICcwJykKKyAgICAgICAgICAgIC0tY29lZmZpY2llbnRMZW5ndGg7Cisg
ICAgICAgIGlmIChjb2VmZmljaWVudExlbmd0aCA+PSAyKSB7CisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgnLicpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBjb2VmZmljaWVu
dExlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRpZ2l0c1tpXSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWRqdXN0ZWRFeHBvbmVudCkgeworICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoYWRqdXN0ZWRFeHBvbmVudCA8IDAgPyAiZSIgOiAiZSsiKTsKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGFkanVzdGVkRXhwb25lbnQp
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQor
CitEZWNpbWFsIERlY2ltYWw6Onplcm8oU2lnbiBzaWduKQoreworICAgIHJldHVybiBEZWNpbWFs
KEVuY29kZWREYXRhKHNpZ24sIEVuY29kZWREYXRhOjpDbGFzc1plcm8pKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVj
aW1hbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1
YzVjOWVlZjkwYjQ5MWExOGJkZTc5ODVjMGQxODc4NWI5NzAyOTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRl
ZiBEZWNpbWFsX2gKKyNkZWZpbmUgRGVjaW1hbF9oCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBEZWNpbWFsUHJpdmF0ZSB7Citj
bGFzcyBTcGVjaWFsVmFsdWVIYW5kbGVyOworfQorCisvLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMg
ZGVjaW1hbCBiYXNlIGZsb2F0aW5nIHBvaW50IG51bWJlci4KKy8vCisvLyBGSVhNRTogT25jZSBh
bGwgQysrIGNvbXBpbGVyIHN1cHBvcnQgZGVjaW1hbCB0eXBlLCB3ZSBzaG91bGQgcmVwbGFjZSB0
aGlzCisvLyBjbGFzcyB0byBjb21waWxlciBzdXBwb3J0ZWQgb25lLiBTZWUgYmVsb3cgVVJJIGZv
ciBjdXJyZW50IHN0YXR1cyBvZiBkZWNpbWFsCisvLyB0eXBlIGZvciBDKys6IC8vIGh0dHA6Ly93
d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDYvbjE5NzcuaHRt
bAorY2xhc3MgRGVjaW1hbCB7CitwdWJsaWM6CisgICAgZW51bSBTaWduIHsKKyAgICAgICAgUG9z
aXRpdmUsCisgICAgICAgIE5lZ2F0aXZlLAorICAgIH07CisKKyAgICAvLyBZb3Ugc2hvdWxkIG5v
dCB1c2UgRW5jb2RlZERhdGEgb3RoZXIgdGhhbiB1bml0IHRlc3RpbmcuCisgICAgY2xhc3MgRW5j
b2RlZERhdGEgeworICAgICAgICAvLyBGb3IgYWNjZXNzaW5nIEZvcm1hdENsYXNzLgorICAgICAg
ICBmcmllbmQgY2xhc3MgRGVjaW1hbDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERlY2ltYWxQcml2
YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOworICAgIHB1YmxpYzoKKyAgICAgICAgRW5jb2RlZERh
dGEoU2lnbiwgaW50IGV4cG9uZW50LCB1aW50NjRfdCBjb2VmZmljaWVudCk7CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEVuY29kZWREYXRhJikgY29uc3Q7CisgICAgICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBFbmNvZGVkRGF0YSYgYW5vdGhlcikgY29uc3QgeyByZXR1cm4gIW9w
ZXJhdG9yPT0oYW5vdGhlcik7IH0KKworICAgICAgICB1aW50NjRfdCBjb2VmZmljaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29lZmZpY2llbnQ7IH0KKyAgICAgICAgaW50IGNvdW50RGlnaXRzKCkg
Y29uc3Q7CisgICAgICAgIGludCBleHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb25lbnQ7
IH0KKyAgICAgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0IHsgcmV0dXJuICFpc1NwZWNpYWwoKTsg
fQorICAgICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0Q2xhc3Mg
PT0gQ2xhc3NJbmZpbml0eSB8fCBtX2Zvcm1hdENsYXNzID09IENsYXNzTmFOOyB9CisgICAgICAg
IGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXRDbGFzcyA9PSBDbGFzc1plcm87
IH0KKyAgICAgICAgU2lnbiBzaWduKCkgY29uc3QgeyByZXR1cm4gbV9zaWduOyB9CisgICAgICAg
IHZvaWQgc2V0U2lnbihTaWduIHNpZ24pIHsgbV9zaWduID0gc2lnbjsgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgLy8gWW91IHNob3VsZCBub3QgdXNlIEZvcm1hdENsYXNzLiBUaGlzIGlzIGZv
ciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgZW51bSBGb3JtYXRDbGFzcyB7CisgICAgICAgICAg
ICBDbGFzc0luZmluaXR5LAorICAgICAgICAgICAgQ2xhc3NOb3JtYWwsCisgICAgICAgICAgICBD
bGFzc05hTiwKKyAgICAgICAgICAgIENsYXNzWmVybywKKyAgICAgICAgfTsKKworICAgICAgICBF
bmNvZGVkRGF0YShTaWduLCBGb3JtYXRDbGFzcyk7CisgICAgICAgIEZvcm1hdENsYXNzIGZvcm1h
dENsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXRDbGFzczsgfQorCisgICAgICAgIHVpbnQ2
NF90IG1fY29lZmZpY2llbnQ7CisgICAgICAgIGludDE2X3QgbV9leHBvbmVudDsKKyAgICAgICAg
Rm9ybWF0Q2xhc3MgbV9mb3JtYXRDbGFzczsKKyAgICAgICAgU2lnbiBtX3NpZ247CisgICAgfTsK
KworICAgIERlY2ltYWwoaW50MzJfdCA9IDApOworICAgIERlY2ltYWwoU2lnbiwgaW50IGV4cG9u
ZW50LCB1aW50NjRfdCBjb2VmZmljaWVudCk7CisgICAgRGVjaW1hbChjb25zdCBEZWNpbWFsJik7
CisKKyAgICBEZWNpbWFsJiBvcGVyYXRvcj0oY29uc3QgRGVjaW1hbCYpOworICAgIERlY2ltYWwm
IG9wZXJhdG9yKz0oY29uc3QgRGVjaW1hbCYpOworICAgIERlY2ltYWwmIG9wZXJhdG9yLT0oY29u
c3QgRGVjaW1hbCYpOworICAgIERlY2ltYWwmIG9wZXJhdG9yKj0oY29uc3QgRGVjaW1hbCYpOwor
ICAgIERlY2ltYWwmIG9wZXJhdG9yLz0oY29uc3QgRGVjaW1hbCYpOworCisgICAgRGVjaW1hbCBv
cGVyYXRvci0oKSBjb25zdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZWNpbWFsJikg
Y29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBi
b29sIG9wZXJhdG9yPChjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBEZWNpbWFs
JikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKwor
ICAgIERlY2ltYWwgb3BlcmF0b3IrKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFs
IG9wZXJhdG9yLShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCBvcGVyYXRvcioo
Y29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIERlY2ltYWwgb3BlcmF0b3IvKGNvbnN0IERlY2lt
YWwmKSBjb25zdDsKKworICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
aXNGaW5pdGUoKTsgfQorICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHNpZ24o
KSA9PSBOZWdhdGl2ZTsgfQorICAgIGJvb2wgaXNQb3NpdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHNp
Z24oKSA9PSBQb3NpdGl2ZTsgfQorICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmlzU3BlY2lhbCgpOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuaXNaZXJvKCk7IH0KKworICAgIERlY2ltYWwgYWJzKCkgY29uc3Q7CisgICAgRGVjaW1h
bCBjZWlsaW5nKCkgY29uc3Q7CisgICAgRGVjaW1hbCBmbG9vcigpIGNvbnN0OworICAgIERlY2lt
YWwgcmVtYWluZGVyKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIHJvdW5kKCkg
Y29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBmcm9tU3RyaW5n
IHN1cHBvcnRzIGZvbGxvd2luZyBzeW50YXggRUJORjoKKyAgICAvLyAgbnVtYmVyIDo6PSBzaWdu
PyBkaWdpdCsgKCcuJyBkaWdpdCopIChleHBvbmVudC1tYXJrZXIgc2lnbj8gZGlnaXQrKT8KKyAg
ICAvLyAgICAgICAgICB8IHNpZ24/ICcuJyBkaWdpdCsgKGV4cG9uZW50LW1hcmtlciBzaWduPyBk
aWdpdCspPworICAgIC8vICBzaWduIDo6PSAnKycgfCAnLScKKyAgICAvLyAgZXhwb25lbnQtbWFy
a2VyIDo6PSAnZScgfCAnRScKKyAgICAvLyAgZGlnaXQgOjo9ICcwJyB8ICcxJyB8IC4uLiB8ICc5
JworICAgIHN0YXRpYyBEZWNpbWFsIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgc3Rh
dGljIERlY2ltYWwgaW5maW5pdHkoU2lnbik7CisgICAgc3RhdGljIERlY2ltYWwgbmFuKCk7Cisg
ICAgc3RhdGljIERlY2ltYWwgemVybyhTaWduKTsKKworICAgIC8vIFlvdSBzaG91bGQgbm90IHVz
ZSBiZWxvdyBtZXRob2RzLiBXZSBleHBvc2UgdGhlbSBmb3IgdW5pdCB0ZXN0aW5nLgorICAgIGV4
cGxpY2l0IERlY2ltYWwoY29uc3QgRW5jb2RlZERhdGEmKTsKKyAgICBjb25zdCBFbmNvZGVkRGF0
YSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworcHJpdmF0ZToKKyAgICBzdHJ1
Y3QgQWxpZ25lZE9wZXJhbmRzIHsKKyAgICAgICAgdWludDY0X3QgbGhzQ29lZmZpY2llbnQ7Cisg
ICAgICAgIHVpbnQ2NF90IHJoc0NvZWZmaWNpZW50OworICAgICAgICBpbnQgZXhwb25lbnQ7Cisg
ICAgfTsKKworICAgIERlY2ltYWwoZG91YmxlKTsKKyAgICBEZWNpbWFsIGNvbXBhcmVUbyhjb25z
dCBEZWNpbWFsJikgY29uc3Q7CisKKyAgICBzdGF0aWMgQWxpZ25lZE9wZXJhbmRzIGFsaWduT3Bl
cmFuZHMoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBEZWNpbWFsJiByaHMpOworICAgIHN0YXRp
YyBpbmxpbmUgU2lnbiBpbnZlcnRTaWduKFNpZ24gc2lnbikgeyByZXR1cm4gc2lnbiA9PSBOZWdh
dGl2ZSA/IFBvc2l0aXZlIDogTmVnYXRpdmU7IH0KKworICAgIGludCBleHBvbmVudCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNGaW5pdGUoKSk7CisgICAgICAgIHJldHVybiBtX2Rh
dGEuZXhwb25lbnQoKTsKKyAgICB9CisKKyAgICBTaWduIHNpZ24oKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuc2lnbigpOyB9CisKKyAgICBFbmNvZGVkRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEZWNpbWFsX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCmluZGV4IDFhNjg4YmJjY2MyYmFiOGQwN2NmY2U1MzhmZGM1NzAwZDM0ZWIyYjku
LjMwYzUzMTNjMjMxMzE1YjM0NWI3ODViMTZmNWIwM2YzZDAxNTFiNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQpAQCAtOTUsNiArOTUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0Ns
aXBib2FyZENocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JG
YWtlR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAgICAgICAndGVzdHMvQ29tcG9zaXRvckZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKKyAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFsVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9EcmF3aW5nQnVmZmVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvRGVjaW1hbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9EZWNpbWFsVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ0NTAzZTllNjhiZmEzMDM0MjhkNDAz
MGYwMjZhNmQ0ODVkN2ZiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvRGVjaW1hbFRlc3QuY3BwCkBAIC0wLDAgKzEsNjE2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRlY2ltYWwuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Cisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6
b3N0cmVhbSYgb3MsIGNvbnN0IERlY2ltYWwmIGRlY2ltYWwpCit7CisgICAgRGVjaW1hbDo6RW5j
b2RlZERhdGEgZGF0YSA9IGRlY2ltYWwudmFsdWUoKTsKKyAgICByZXR1cm4gb3MgCisgICAgICAg
IDw8ICJlbmNvZGUoIiA8PCBTdHJpbmc6Om51bWJlcihkYXRhLmNvZWZmaWNpZW50KCkpLmFzY2lp
KCkuZGF0YSgpCisgICAgICAgIDw8ICIsICIgPDwgU3RyaW5nOjpudW1iZXIoZGF0YS5leHBvbmVu
dCgpKS5hc2NpaSgpLmRhdGEoKQorICAgICAgICA8PCAiLCAiIDw8IChkYXRhLnNpZ24oKSA9PSBE
ZWNpbWFsOjpOZWdhdGl2ZSA/ICJOZWdhdGl2ZSIgOiAiUG9zaXRpdmUiKQorICAgICAgICA8PCAi
KT0iIDw8IGRlY2ltYWwudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gU2ltdWxhdGUg
V2ViQ29yZS9odG1sL1N0ZXBSYW5nZQorY2xhc3MgRGVjaW1hbFN0ZXBSYW5nZSB7CitwdWJsaWM6
CisgICAgRGVjaW1hbCBtYXhpbXVtOworICAgIERlY2ltYWwgbWluaW11bTsKKyAgICBEZWNpbWFs
IHN0ZXA7CisKKyAgICBEZWNpbWFsU3RlcFJhbmdlKGNvbnN0IERlY2ltYWwmIG1pbmltdW0sIGNv
bnN0IERlY2ltYWwmIG1heGltdW0sIGNvbnN0IERlY2ltYWwmIHN0ZXApCisgICAgICAgIDogbWF4
aW11bShtYXhpbXVtKQorICAgICAgICAsIG1pbmltdW0obWluaW11bSkKKyAgICAgICAgLCBzdGVw
KHN0ZXApCisgICAgeworICAgIH0KKworICAgIERlY2ltYWwgY2xhbXBWYWx1ZShEZWNpbWFsIHZh
bHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgRGVjaW1hbCByZXN1bHQgPSBtaW5pbXVt
ICsgKCh2YWx1ZSAtIG1pbmltdW0pIC8gc3RlcCkucm91bmQoKSAqIHN0ZXA7CisgICAgICAgIEFT
U0VSVChyZXN1bHQuaXNGaW5pdGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQgPiBtYXhpbXVt
ID8gcmVzdWx0IC0gc3RlcCA6IHJlc3VsdDsKKyAgICB9Cit9OworCitjbGFzcyBEZWNpbWFsVGVz
dCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgorICAgIHR5cGVkZWYgRGVj
aW1hbDo6U2lnbiBTaWduOworICAgIHByb3RlY3RlZDogc3RhdGljIGNvbnN0IFNpZ24gUG9zaXRp
dmUgPSBEZWNpbWFsOjpQb3NpdGl2ZTsKKyAgICBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCBTaWdu
IE5lZ2F0aXZlID0gRGVjaW1hbDo6TmVnYXRpdmU7CisKKyAgICBEZWNpbWFsIGVuY29kZSh1aW50
NjRfdCBjb2VmZmljaWVudCwgaW50IGV4cG9uZW50LCBTaWduIHNpZ24pCisgICAgeworICAgICAg
ICByZXR1cm4gRGVjaW1hbChzaWduLCBleHBvbmVudCwgY29lZmZpY2llbnQpOworICAgIH0KKwor
ICAgIHByb3RlY3RlZDogRGVjaW1hbCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIERlY2ltYWw6OmZyb21TdHJpbmcoc3RyaW5nKTsKKyAgICB9
CisKKyAgICBwcm90ZWN0ZWQ6IFN0cmluZyBzdGVwRG93bihjb25zdCBTdHJpbmcmIG1pbmltdW0s
IGNvbnN0IFN0cmluZyYgbWF4aW11bSwgY29uc3QgU3RyaW5nJiBzdGVwLCBjb25zdCBTdHJpbmcm
IHZhbHVlU3RyaW5nLCBpbnQgbnVtYmVyT2ZTdGVwVGltZXMpCisgICAgeworICAgICAgICBEZWNp
bWFsU3RlcFJhbmdlIHN0ZXBSYW5nZShmcm9tU3RyaW5nKG1pbmltdW0pLCBmcm9tU3RyaW5nKG1h
eGltdW0pLCBmcm9tU3RyaW5nKHN0ZXApKTsKKyAgICAgICAgRGVjaW1hbCB2YWx1ZSA9IGZyb21T
dHJpbmcodmFsdWVTdHJpbmcpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9m
U3RlcFRpbWVzOyArK2kpIHsKKyAgICAgICAgICB2YWx1ZSAtPSBzdGVwUmFuZ2Uuc3RlcDsKKyAg
ICAgICAgICB2YWx1ZSA9IHN0ZXBSYW5nZS5jbGFtcFZhbHVlKHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQ6
IFN0cmluZyBzdGVwVXAoY29uc3QgU3RyaW5nJiBtaW5pbXVtLCBjb25zdCBTdHJpbmcmIG1heGlt
dW0sIGNvbnN0IFN0cmluZyYgc3RlcCwgY29uc3QgU3RyaW5nJiB2YWx1ZVN0cmluZywgaW50IG51
bWJlck9mU3RlcFRpbWVzKQorICAgIHsKKyAgICAgICAgRGVjaW1hbFN0ZXBSYW5nZSBzdGVwUmFu
Z2UoZnJvbVN0cmluZyhtaW5pbXVtKSwgZnJvbVN0cmluZyhtYXhpbXVtKSwgZnJvbVN0cmluZyhz
dGVwKSk7CisgICAgICAgIERlY2ltYWwgdmFsdWUgPSBmcm9tU3RyaW5nKHZhbHVlU3RyaW5nKTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlN0ZXBUaW1lczsgKytpKSB7Cisg
ICAgICAgICAgdmFsdWUgKz0gc3RlcFJhbmdlLnN0ZXA7CisgICAgICAgICAgdmFsdWUgPSBzdGVw
UmFuZ2UuY2xhbXBWYWx1ZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVl
LnRvU3RyaW5nKCk7CisgICAgfQorfTsKKworVEVTVF9GKERlY2ltYWxUZXN0LCBBYnMpCit7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAwLCBQb3NpdGl2
ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUo
MCwgMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMTAsIFBv
c2l0aXZlKSwgZW5jb2RlKDAsIDEwLCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShl
bmNvZGUoMCwgMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDAsIDEwLCBOZWdhdGl2ZSkuYWJzKCkpOwor
CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDAsIC0xMCwg
UG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIC0xMCwgUG9zaXRpdmUp
LCBlbmNvZGUoMCwgLTEwLCBOZWdhdGl2ZSkuYWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMCwgTmVnYXRpdmUpLmFi
cygpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDEs
IDEwLCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAsIFBvc2l0
aXZlKSwgZW5jb2RlKDEsIDEwLCBOZWdhdGl2ZSkuYWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxLCAtMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMCwgUG9zaXRpdmUpLmFicygpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwLCBO
ZWdhdGl2ZSkuYWJzKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIENlaWxpbmcpCit7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoMSkuY2VpbGluZygpKTsKKyAgICBFWFBF
Q1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDExLCAtMSwgUG9zaXRpdmUpLmNlaWxpbmcoKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWwoMiksIGVuY29kZSgxMywgLTEsIFBvc2l0aXZlKS5jZWlsaW5n
KCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDIpLCBlbmNvZGUoMTUsIC0xLCBQb3NpdGl2ZSku
Y2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE5LCAtMSwgUG9z
aXRpdmUpLmNlaWxpbmcoKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIERlY2ltYWwo
LTEpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBlbmNvZGUoMTEsIC0x
LCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIGVuY29k
ZSgxMywgLTEsIE5lZ2F0aXZlKS5jZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0x
KSwgZW5jb2RlKDE1LCAtMSwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWwoLTEpLCBlbmNvZGUoMTksIC0xLCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKK30KKworVEVT
VF9GKERlY2ltYWxUZXN0LCBFbmNvZGVkRGF0YSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAs
IDAsIFBvc2l0aXZlKSwgZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgwLCAwLCBOZWdhdGl2ZSksIGVuY29kZSgwLCAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVD
VF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAs
IE5lZ2F0aXZlKSwgZW5jb2RlKDEsIDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2lt
YWw6OmluZmluaXR5KFBvc2l0aXZlKSwgZW5jb2RlKDEsIDIwMDAsIFBvc2l0aXZlKSk7CisgICAg
RVhQRUNUX0VRKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTIwMDAsIFBvc2l0
aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgRmxvb3IpCit7CisgICAgRVhQRUNUX0VR
KERlY2ltYWwoMSksIERlY2ltYWwoMSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwo
MSksIGVuY29kZSgxMSwgLTEsIFBvc2l0aXZlKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbCgxKSwgZW5jb2RlKDEzLCAtMSwgUG9zaXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsKDEpLCBlbmNvZGUoMTUsIC0xLCBQb3NpdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWwoMSksIGVuY29kZSgxOSwgLTEsIFBvc2l0aXZlKS5mbG9vcigpKTsKKwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgRGVjaW1hbCgtMSkuZmxvb3IoKSk7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWwoLTIpLCBlbmNvZGUoMTEsIC0xLCBOZWdhdGl2ZSkuZmxvb3IoKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWwoLTIpLCBlbmNvZGUoMTMsIC0xLCBOZWdhdGl2ZSkuZmxvb3Io
KSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTIpLCBlbmNvZGUoMTUsIC0xLCBOZWdhdGl2ZSku
Zmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTIpLCBlbmNvZGUoMTksIC0xLCBOZWdh
dGl2ZSkuZmxvb3IoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgRnJvbUludDMyKQorewor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDApKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgx
LCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoLTEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwg
MCwgUG9zaXRpdmUpLCBEZWNpbWFsKDEwMCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwLCAw
LCBOZWdhdGl2ZSksIERlY2ltYWwoLTEwMCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMHg3RkZG
RkZGRiwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKElOVF9NQVgpKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDB4ODAwMDAwMDB1LCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoSU5UX01JTikpOworfQorCitU
RVNUX0YoRGVjaW1hbFRlc3QsIEZyb21TdHJpbmcpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgw
LCAwLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgw
LCAwLCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0wIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
KDEpLCBmcm9tU3RyaW5nKCIxIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgTmVnYXRp
dmUpLCBmcm9tU3RyaW5nKCItMSIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZnJvbVN0
cmluZygiMDEiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAwLCBQb3NpdGl2ZSksIGZyb21T
dHJpbmcoIiszIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMywgUG9zaXRpdmUpLCBmcm9t
U3RyaW5nKCIwRTMiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSg1LCAtMSwgUG9zaXRpdmUpLCBm
cm9tU3RyaW5nKCIuNSIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgUG9zaXRpdmUp
LCBmcm9tU3RyaW5nKCIxMDAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIE5lZ2F0
aXZlKSwgZnJvbVN0cmluZygiLTEwMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgLTIs
IFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMS4yMyIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEy
MywgLTIsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTEuMjMiKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxMjMsIDgsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMS4yM0UxMCIpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDEyMywgOCwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMS4yM0UxMCIpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgOCwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxLjIz
RSsxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgOCwgTmVnYXRpdmUpLCBmcm9tU3Ry
aW5nKCItMS4yM0UrMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0xMiwgUG9zaXRp
dmUpLCBmcm9tU3RyaW5nKCIxLjIzRS0xMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywg
LTEyLCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0xLjIzRS0xMCIpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDUsIC03LCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjAuMDAwMDAwNSIpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMGU5OTk5IikpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCAtMywgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwLjEy
MyIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIC0yLCBQb3NpdGl2ZSksIGZyb21TdHJpbmco
IjAwLjAwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMiwgUG9zaXRpdmUpLCBmcm9tU3Ry
aW5nKCIxRTIiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwg
ZnJvbVN0cmluZygiMUUyMDAwMCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6emVybyhQb3Np
dGl2ZSksIGZyb21TdHJpbmcoIjFFLTIwMDAwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAw
MCwgMTAyMywgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxRTEwMjYiKSk7CisgICAgRVhQRUNUX0VR
KERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxRS0xMDI2IikpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjEyMzQ1Njc4
OTBFMTAzNiIpKTsKKworICAgIC8vIDJeMTAyNAorICAgIGNvbnN0IHVpbnQ2NF90IGxlYWRpbmdE
aWdpdHNPZjJQb3dlck9mMTAyNCA9IFVJTlQ2NF9DKDE3OTc2OTMxMzQ4NjIzMTU5KTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKGxlYWRpbmdEaWdpdHNPZjJQb3dlck9mMTAyNCwgMjkyLCBQb3NpdGl2
ZSksIGZyb21TdHJpbmcoIjE3OTc2OTMxMzQ4NjIzMTU5MDc3MjkzMDUxOTA3ODkwMjQ3MzM2MTc5
NzY5Nzg5NDIzMDY1NzI3MzQzMDA4MTE1NzczMjY3NTgwNTUwMDk2MzEzMjcwODQ3NzMyMjQwNzUz
NjAyMTEyMDExMzg3OTg3MTM5MzM1NzY1ODc4OTc2ODgxNDQxNjYyMjQ5Mjg0NzQzMDYzOTQ3NDEy
NDM3Nzc2Nzg5MzQyNDg2NTQ4NTI3NjMwMjIxOTYwMTI0NjA5NDExOTQ1MzA4Mjk1MjA4NTAwNTc2
ODgzODE1MDY4MjM0MjQ2Mjg4MTQ3MzkxMzExMDU0MDgyNzIzNzE2MzM1MDUxMDY4NDU4NjI5ODIz
OTk0NzI0NTkzODQ3OTcxNjMwNDgzNTM1NjMyOTYyNDIyNDEzNzIxNiIpKTsKK30KKworLy8gVGhl
c2Ugc3RyaW5ncyBhcmUgbG9vayBsaWtlIHByb3BlciBudW1iZXIsIGJ1dCB3ZSBkb24ndCBhY2Nl
cHQgdGhlbS4KK1RFU1RfRihEZWNpbWFsVGVzdCwgRnJvbVN0cmluZ0xpa2VOdW1iZXIpCit7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIgMTIzICIpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjEsMjM0IikpOworICAgIEVYUEVD
VF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiSU5GIikpOworfQorCitURVNUX0YoRGVj
aW1hbFRlc3QsIGZyb21TdHJpbmdUcnVuY2F0ZWQpCit7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6
Om5hbigpLCBmcm9tU3RyaW5nKCJ4IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwg
ZnJvbVN0cmluZygiMC4iKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3Ry
aW5nKCIxeCIpKTsKKworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygi
MUV4IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiMUUyeCIp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjFFK3giKSk7Cit9
CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUHJlZGljYXRlcykKK3sKKyAgICBFWFBFQ1RfVFJVRShE
ZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNp
bWFsOjp6ZXJvKFBvc2l0aXZlKS5pc1Bvc2l0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNp
bWFsOjp6ZXJvKFBvc2l0aXZlKS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNp
bWFsOjp6ZXJvKFBvc2l0aXZlKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1h
bDo6emVybyhQb3NpdGl2ZSkuaXNaZXJvKCkpOworCisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6
emVybyhOZWdhdGl2ZSkuaXNGaW5pdGUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6Onpl
cm8oTmVnYXRpdmUpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6emVy
byhOZWdhdGl2ZSkuaXNOZWdhdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6emVy
byhOZWdhdGl2ZSkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6Onplcm8o
TmVnYXRpdmUpLmlzWmVybygpKTsKKworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMTIzKS5pc0Zp
bml0ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDEyMykuaXNQb3NpdGl2ZSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxMjMpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKERlY2ltYWwoMTIzKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwo
MTIzKS5pc1plcm8oKSk7CisKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKC0xMjMpLmlzRmluaXRl
KCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKC0xMjMpLmlzUG9zaXRpdmUoKSk7CisgICAg
RVhQRUNUX1RSVUUoRGVjaW1hbCgtMTIzKS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9GQUxT
RShEZWNpbWFsKC0xMjMpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgt
MTIzKS5pc1plcm8oKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUHJlZGljYXRlc1NwZWNp
YWxWYWx1ZXMpCit7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZl
KS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2
ZSkuaXNQb3NpdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoUG9z
aXRpdmUpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6aW5maW5pdHko
UG9zaXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5p
dHkoUG9zaXRpdmUpLmlzWmVybygpKTsKKworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjppbmZp
bml0eShOZWdhdGl2ZSkuaXNGaW5pdGUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6Omlu
ZmluaXR5KE5lZ2F0aXZlKS5pc1Bvc2l0aXZlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6
OmluZmluaXR5KE5lZ2F0aXZlKS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2lt
YWw6OmluZmluaXR5KE5lZ2F0aXZlKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERl
Y2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5pc1plcm8oKSk7CisKKyAgICBFWFBFQ1RfRkFMU0Uo
RGVjaW1hbDo6bmFuKCkuaXNGaW5pdGUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6bmFu
KCkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjpuYW4oKS5pc1plcm8o
KSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BBZGQpCit7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoMCkgKyBEZWNpbWFsKDApKTsKKyAgICBFWFBF
Q1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSArIERlY2ltYWwoLTEpKTsKKyAgICBFWFBFQ1Rf
RVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgtMSkgKyBEZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEwMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDk5KSArIERlY2ltYWwoMSkpOworICAg
IEVYUEVDVF9FUShlbmNvZGUoMTAwLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoLTUwKSArIERlY2lt
YWwoLTUwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMDAwMDAwLCAzNSwgUG9z
aXRpdmUpLCBlbmNvZGUoMSwgNTAsIFBvc2l0aXZlKSArIERlY2ltYWwoMSkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMTAwMDAwMDAwMDAwMDAwMCwgMzUsIFBvc2l0aXZlKSwgRGVjaW1hbCgxKSAr
IGVuY29kZSgxLCA1MCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAw
MDAxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMCwgUG9zaXRpdmUpICsgRGVjaW1hbCgxKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMSwgMCwgUG9zaXRpdmUpLCBEZWNpbWFs
KDEpICsgZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwg
MCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAwLCBQ
b3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgLTEwMjIsIFBvc2l0aXZlKSwgZW5j
b2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSk7Cit9
CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BBZGRCaWdFKQoreworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMSwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpICsgZW5jb2Rl
KDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAxMDIyLCBQb3NpdGl2
ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBlbmNvZGUodWlu
dDY0X3QoLTEpLCAxMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBPcEFkZFNtYWxsRSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUo
MSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDIsIC0xMDIyLCBQb3NpdGl2
ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2
ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wQWRkU3BlY2lhbFZhbHVlcykKK3sKKyAg
ICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZl
KSk7CisgICAgY29uc3QgRGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERl
Y2ltYWwgVGVuKDEwKTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgSW5maW5pdHkgKyBJbmZp
bml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgKyBNaW51c0luZmluaXR5KTsKKyAg
ICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICsgSW5maW5pdHkpOworICAgIEVYUEVDVF9F
UShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5ICsgTWludXNJbmZpbml0eSk7CisKKyAgICBF
WFBFQ1RfRVEoSW5maW5pdHksIEluZmluaXR5ICsgVGVuKTsKKyAgICBFWFBFQ1RfRVEoSW5maW5p
dHksIFRlbiArIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJ
bmZpbml0eSArIFRlbik7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIFRlbiArIE1pbnVz
SW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKE5hTiwgTmFOICsgTmFOKTsKKyAgICBFWFBFQ1Rf
RVEoTmFOLCBOYU4gKyBUZW4pOworICAgIEVYUEVDVF9FUShOYU4sIFRlbiArIE5hTik7Cit9CisK
K1RFU1RfRihEZWNpbWFsVGVzdCwgT3BDb21wYXJlKQoreworICAgIEVYUEVDVF9UUlVFKERlY2lt
YWwoMCkgPT0gRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKSAhPSBEZWNp
bWFsKDEpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApIDwgRGVjaW1hbCgxKSk7CisgICAg
RVhQRUNUX1RSVUUoRGVjaW1hbCgwKSA8PSBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfVFJVRShE
ZWNpbWFsKDApID4gRGVjaW1hbCgtMSkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgPj0g
RGVjaW1hbCgwKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxKSA9PSBEZWNpbWFsKDIp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxKSAhPSBEZWNpbWFsKDEpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRGVjaW1hbCgxKSA8IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNp
bWFsKDEpIDw9IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpID4gRGVj
aW1hbCgyKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPj0gRGVjaW1hbCgyKSk7Cit9
CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BDb21wYXJlU3BlY2lhbFZhbHVlcykKK3sKKyAgICBF
WFBFQ1RfVFJVRShEZWNpbWFsKDEpIDwgRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpKTsKKyAg
ICBFWFBFQ1RfVFJVRShEZWNpbWFsKDEpID4gRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcERpdikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgwKSAvIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMiwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKDIpIC8gRGVjaW1hbCgtMSkpOworICAg
IEVYUEVDVF9FUShlbmNvZGUoNSwgLTEsIE5lZ2F0aXZlKSwgRGVjaW1hbCgtMSkgLyBEZWNpbWFs
KDIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDk5LCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoOTkp
IC8gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoLTUwKSAv
IERlY2ltYWwoLTUwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzMzMzMzMzMzMzMzMzMzMzLCAt
MTYsIFBvc2l0aXZlKSwgRGVjaW1hbCgxKSAvIERlY2ltYWwoMykpOworICAgIEVYUEVDVF9FUShl
bmNvZGUoMTIzNDU2Nzg5MDEyMzQsIC0xLCBQb3NpdGl2ZSksIGVuY29kZSgxMjM0NTY3ODkwMTIz
NCwgMCwgUG9zaXRpdmUpIC8gRGVjaW1hbCgxMCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3Qs
IE9wRGl2QmlnRSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSwg
ZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAvIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAg
IEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRp
dmUpIC8gZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVz
dCwgT3BEaXZTbWFsbEUpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAyMiwgUG9zaXRp
dmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAvIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkp
OworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIs
IFBvc2l0aXZlKSAvIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERl
Y2ltYWxUZXN0LCBPcERpdlNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29uc3QgRGVjaW1hbCBJbmZp
bml0eShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWlu
dXNJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOworICAgIGNvbnN0IERlY2lt
YWwgTmFOKERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIFplcm8oRGVjaW1hbDo6
emVybyhQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWludXNaZXJvKERlY2ltYWw6Onpl
cm8oTmVnYXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigxMCk7CisgICAgY29uc3QgRGVj
aW1hbCBNaW51c1RlbigtMTApOworCisgICAgRVhQRUNUX0VRKE5hTiwgWmVybyAvIFplcm8pOwor
ICAgIEVYUEVDVF9FUShOYU4sIFplcm8gLyBNaW51c1plcm8pOworICAgIEVYUEVDVF9FUShOYU4s
IE1pbnVzWmVybyAvIFplcm8pOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzWmVybyAvIE1pbnVz
WmVybyk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIFRlbiAvIFplcm8pOworICAgIEVYUEVD
VF9FUShNaW51c0luZmluaXR5LCBUZW4gLyBNaW51c1plcm8pOworICAgIEVYUEVDVF9FUShNaW51
c0luZmluaXR5LCBNaW51c1RlbiAvIFplcm8pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgTWlu
dXNUZW4gLyBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSAv
IFplcm8pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBJbmZpbml0eSAvIE1pbnVzWmVy
byk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgLyBaZXJvKTsK
KyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVzSW5maW5pdHkgLyBNaW51c1plcm8pOworCisg
ICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5h
TiwgSW5maW5pdHkgLyBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0lu
ZmluaXR5IC8gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgLyBN
aW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShaZXJvLCBUZW4gLyBJbmZpbml0eSk7Cisg
ICAgRVhQRUNUX0VRKE1pbnVzWmVybywgVGVuIC8gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNU
X0VRKE1pbnVzWmVybywgTWludXNUZW4gLyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKFplcm8s
IE1pbnVzVGVuIC8gTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLyBO
YU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAvIFRlbik7CisgICAgRVhQRUNUX0VRKE5hTiwg
VGVuIC8gTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcE11bCkKK3sKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgwKSAqIERlY2ltYWwoMCkpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKDIpICogRGVjaW1h
bCgtMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKC0x
KSAqIERlY2ltYWwoMikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoOTksIDAsIFBvc2l0aXZlKSwg
RGVjaW1hbCg5OSkgKiBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDI1MDAsIDAs
IFBvc2l0aXZlKSwgRGVjaW1hbCgtNTApICogRGVjaW1hbCgtNTApKTsKK30KKworVEVTVF9GKERl
Y2ltYWxUZXN0LCBPcE11bEJpZ0UpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQ
b3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgKiBlbmNvZGUoMSwgMCwgUG9zaXRp
dmUpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBlbmNvZGUo
MSwgMTAyMiwgUG9zaXRpdmUpICogZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSk7Cit9CisKK1RF
U1RfRihEZWNpbWFsVGVzdCwgT3BNdWxTbWFsbEUpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgx
LCAtMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAqIGVuY29kZSgx
LCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBl
bmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAqIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcE11bFNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29u
c3QgRGVjaW1hbCBJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNv
bnN0IERlY2ltYWwgTWludXNJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOwor
ICAgIGNvbnN0IERlY2ltYWwgTmFOKERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFs
IFRlbigxMCk7CisgICAgY29uc3QgRGVjaW1hbCBNaW51c1RlbigtMTApOworICAgIGNvbnN0IERl
Y2ltYWwgWmVybyhEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBN
aW51c1plcm8oRGVjaW1hbDo6emVybyhOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0VRKEluZmlu
aXR5LCBJbmZpbml0eSAqIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwg
SW5maW5pdHkgKiBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwg
TWludXNJbmZpbml0eSAqIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVz
SW5maW5pdHkgKiBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5
ICogWmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgWmVybyAqIE1pbnVzSW5maW5pdHkpOworICAg
IEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKiBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFO
LCBNaW51c0luZmluaXR5ICogWmVybyk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAq
IE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNaZXJvICogTWludXNJbmZpbml0
eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0eSAqIE1pbnVzWmVybyk7CisgICAg
RVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0eSAqIE1pbnVzWmVybyk7CisKKyAgICBFWFBFQ1Rf
RVEoSW5maW5pdHksIEluZmluaXR5ICogVGVuKTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIFRl
biAqIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZpbml0
eSAqIFRlbik7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIFRlbiAqIE1pbnVzSW5maW5p
dHkpOworCisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIEluZmluaXR5ICogTWludXNUZW4p
OworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c1RlbiAqIEluZmluaXR5KTsKKyAg
ICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKiBNaW51c1Rlbik7CisgICAgRVhQ
RUNUX0VRKEluZmluaXR5LCBNaW51c1RlbiAqIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNU
X0VRKE5hTiwgTmFOICogTmFOKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gKiBUZW4pOworICAg
IEVYUEVDVF9FUShOYU4sIFRlbiAqIE5hTik7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgT3BT
dWIpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoMCkg
LSBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDMsIDAsIFBvc2l0aXZlKSwgRGVj
aW1hbCgyKSAtIERlY2ltYWwoLTEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDMsIDAsIE5lZ2F0
aXZlKSwgRGVjaW1hbCgtMSkgLSBEZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDk4
LCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoOTkpIC0gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoLTUwKSAtIERlY2ltYWwoLTUwKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMDAwMDAwLCAzNSwgUG9zaXRpdmUpLCBlbmNv
ZGUoMSwgNTAsIFBvc2l0aXZlKSAtIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUo
MTAwMDAwMDAwMDAwMDAwMCwgMzUsIE5lZ2F0aXZlKSwgRGVjaW1hbCgxKSAtIGVuY29kZSgxLCA1
MCwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBPcFN1YkJpZ0UpCit7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQ
b3NpdGl2ZSkgLSBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDAsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAtIGVuY29kZSgxLCAx
MDIyLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE9wU3ViU21hbGxFKQor
eworICAgIEVYUEVDVF9FUShlbmNvZGUoVUlOVDY0X0MoMTAwMDAwMDAwMDAwMDAwMDApLCAtMTYs
IE5lZ2F0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgLSBlbmNvZGUoMSwgMCwgUG9z
aXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEs
IC0xMDIyLCBQb3NpdGl2ZSkgLSBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSk7Cit9CisKK1RF
U1RfRihEZWNpbWFsVGVzdCwgT3BTdWJTcGVjaWFsVmFsdWVzKQoreworICAgIGNvbnN0IERlY2lt
YWwgSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpKTsKKyAgICBjb25zdCBEZWNp
bWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpKTsKKyAgICBjb25z
dCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVjaW1hbCBUZW4oMTAp
OworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLSBJbmZpbml0eSk7CisgICAgRVhQRUNU
X0VRKEluZmluaXR5LCBJbmZpbml0eSAtIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShN
aW51c0luZmluaXR5LCBNaW51c0luZmluaXR5IC0gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShO
YU4sIE1pbnVzSW5maW5pdHkgLSBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShJbmZp
bml0eSwgSW5maW5pdHkgLSBUZW4pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4g
LSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkg
LSBUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgVGVuIC0gTWludXNJbmZpbml0eSk7CisK
KyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLSBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAt
IFRlbik7CisgICAgRVhQRUNUX0VRKE5hTiwgVGVuIC0gTmFOKTsKK30KKworVEVTVF9GKERlY2lt
YWxUZXN0LCBQcm9wZXJ0aWVzKQoreworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkuaXNGaW5p
dGUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMCkuaXNTcGVjaWFsKCkpOworfQorCitU
RVNUX0YoRGVjaW1hbFRlc3QsIFByb3BlcnRpZXNTcGVjaWFsKQoreworICAgIEVYUEVDVF9UUlVF
KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5pc0Zpbml0ZSgpKTsKKworICAgIEVYUEVD
VF9UUlVFKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5pc0Zpbml0ZSgpKTsKKworICAg
IEVYUEVDVF9UUlVFKERlY2ltYWw6Om5hbigpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoRGVjaW1hbDo6bmFuKCkuaXNGaW5pdGUoKSk7Cit9CisKKy8vIExheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvbnVtYmVyL251bWJlci1zdGVwdXAtc3RlcGRvd24tZnJvbS1yZW5kZXJlcgorVEVTVF9G
KERlY2ltYWxUZXN0LCBSZWFsV29ybGRFeGFtcGxlTnVtYmVyU3RlcFVwU3RlcERvd25Gcm9tUmVu
ZGVyZXIpCit7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMTAiKSwgc3RlcERvd24oIjAiLCAiMTAw
IiwgIjEwIiwgIjE5IiwgMSkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjkwIiksIHN0ZXBVcCgi
MCIsICI5OSIsICIxMCIsICI4OSIsIDEpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxIiksIHN0
ZXBVcCgiMCIsICIxIiwgIjAuMzMzMzMzMzMzMzMzMzMzMzMiLCAiMCIsIDMpKTsgLy8gc3RlcD0x
LzMKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIwLjAxIiksIHN0ZXBVcCgiMCIsICIwLjAxIiwgIjAu
MDAzMzMzMzMzMzMzMzMzMzMzMyIsICIwIiwgMykpOyAvLyBzdGVwPTEvMzAwCisgICAgRVhQRUNU
X0VRKFN0cmluZygiMSIpLCBzdGVwVXAoIjAiLCAiMSIsICIwLjAwMzkyMTU2ODYyNzQ1MDk4MCIs
ICIwIiwgMjU1KSk7IC8vIHN0ZXA9MS8yNTUKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxIiksIHN0
ZXBVcCgiMCIsICIxIiwgIjAuMSIsICIwIiwgMTApKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0
LCBSZWFsV29ybGRFeGFtcGxlTnVtYmVyU3RlcFVwU3RlcERvd25Gcm9tUmVuZGVyZXJSb3VuZGlu
ZykKK3sKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjAxNSIpLCBzdGVwVXAoIjAiLCAiMTAwIiwg
IjAuMDA1IiwgIjUuMDA1IiwgMikpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjUuMDYiKSwgc3Rl
cFVwKCIwIiwgIjEwMCIsICIwLjAwNSIsICI1LjAwNSIsIDExKSk7CisgICAgRVhQRUNUX0VRKFN0
cmluZygiNS4wNjUiKSwgc3RlcFVwKCIwIiwgIjEwMCIsICIwLjAwNSIsICI1LjAwNSIsIDEyKSk7
CisKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjAxNSIpLCBzdGVwVXAoIjQiLCAiOSIsICIwLjAw
NSIsICI1LjAwNSIsIDIpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjA2IiksIHN0ZXBVcCgi
NCIsICI5IiwgIjAuMDA1IiwgIjUuMDA1IiwgMTEpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1
LjA2NSIpLCBzdGVwVXAoIjQiLCAiOSIsICIwLjAwNSIsICI1LjAwNSIsIDEyKSk7Cit9CisKK1RF
U1RfRihEZWNpbWFsVGVzdCwgUmVhbFdvcmxkRXhhbXBsZVJhbmdlU3RlcFVwU3RlcERvd24pCit7
CisgICAgRVhQRUNUX0VRKFN0cmluZygiMWUrMzgiKSwgc3RlcFVwKCIwIiwgIjFFMzgiLCAiMSIs
ICIxRTM4IiwgOSkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjFlKzM4IiksIHN0ZXBEb3duKCIw
IiwgIjFFMzgiLCAiMSIsICIxRTM4IiwgOSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJl
bWFpbmRlcikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDksIC0xLCBOZWdhdGl2ZSksIGVuY29k
ZSgyMSwgLTEsIFBvc2l0aXZlKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
KDEpLCBEZWNpbWFsKDEwKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwg
MCwgTmVnYXRpdmUpLCBEZWNpbWFsKC0xMCkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDIsIC0xLCBQb3NpdGl2ZSksIGVuY29kZSgxMDIsIC0xLCBQb3NpdGl2ZSkucmVtYWlu
ZGVyKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xLCBQb3NpdGl2ZSksIERlY2ltYWwo
MTApLnJlbWFpbmRlcihlbmNvZGUoMywgLTEsIFBvc2l0aXZlKSkpOworICAgIEVYUEVDVF9FUShl
bmNvZGUoMywgLTEsIE5lZ2F0aXZlKSwgZW5jb2RlKDM2LCAtMSwgUG9zaXRpdmUpLnJlbWFpbmRl
cihlbmNvZGUoMTMsIC0xLCBQb3NpdGl2ZSkpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBS
ZW1haW5kZXJTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0
eShQb3NpdGl2ZSksIERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5yZW1haW5kZXIoMSkpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgRGVjaW1hbDo6bmFuKCkucmVtYWluZGVyKDEp
KTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBSb3VuZCkKK3sKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbCgxKSwgKERlY2ltYWwoOSkgLyBEZWNpbWFsKDEwKSkucm91bmQoKSk7CisgICAgRVhQRUNU
X0VRKERlY2ltYWwoMjUpLCAoRGVjaW1hbCg1KSAvIGZyb21TdHJpbmcoIjAuMjAwIikpLnJvdW5k
KCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDMpLCAoRGVjaW1hbCg1KSAvIERlY2ltYWwoMikp
LnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCAoRGVjaW1hbCgyKSAvIERlY2lt
YWwoMykpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDMpLCAoRGVjaW1hbCgxMCkg
LyBEZWNpbWFsKDMpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgzKSwgKERlY2lt
YWwoMSkgLyBmcm9tU3RyaW5nKCIwLjMiKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2lt
YWwoMTApLCAoRGVjaW1hbCgxKSAvIGZyb21TdHJpbmcoIjAuMSIpKS5yb3VuZCgpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbCg1KSwgKERlY2ltYWwoMSkgLyBmcm9tU3RyaW5nKCIwLjIiKSkucm91
bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMTApLCAoZnJvbVN0cmluZygiMTAuMiIpIC8g
MSkucm91bmQoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUm91bmRTZXBjaWFsVmFsdWVz
KQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIERlY2ltYWw6
OmluZmluaXR5KFBvc2l0aXZlKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFu
KCksIERlY2ltYWw6Om5hbigpLnJvdW5kKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFRv
U3RyaW5nU3BlY2lhbCkKK3sKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJJbmZpbml0eSIpLCBEZWNp
bWFsOjppbmZpbml0eShQb3NpdGl2ZSkudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmlu
ZygiLUluZmluaXR5IiksIERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS50b1N0cmluZygpKTsK
KyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJOYU4iKSwgRGVjaW1hbDo6bmFuKCkudG9TdHJpbmcoKSk7
Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144775</attachid>
            <date>2012-05-30 03:40:33 -0700</date>
            <delta_ts>2012-05-30 19:09:57 -0700</delta_ts>
            <desc>Patch 6</desc>
            <filename>bug-87360-20120530194031.patch</filename>
            <type>text/plain</type>
            <size>89775</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmYzNiY2MyMGRlNGRm
YzZiNTFmMGY2YTE4NjY1NTgzYTczMmJkYS4uNjBiN2UyYWNkOGM1MzU4ODcyOTIyN2FkNTM4Zjk2
NGZjZGYxZDAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA1LTI0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3IgTnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRk
ZWQgbmV3IGNsYXNzIERlY2ltYWwgZm9yIGRlY2ltYWwgYXJpdGhtYXRpYyBpbiB0d28KKyAgICAg
ICAgZmlsZXM6IHBsYXRmb3JtL0RlY2ltYWwuY3BwIGFuZCBEZWNpbWFsLmggd2l0aCB1bml0IHRl
c3QuCisKKyAgICAgICAgVGVzdDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNw
cAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGVjaW1hbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWNpbWFsUHJpdmF0ZSk6
CisgICAgICAgIChTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAgICAgKFVJbnQxMjgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6OmhpZ2gpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWxQcml2YXRlOjpjb3VudERpZ2l0cyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJp
dmF0ZTo6bXVsdGlwbHlIaWdoKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpw
b3dlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6c2NhbGVEb3duKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpzY2FsZVVwKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpTcGVjaWFsVmFsdWVIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5k
bGVyOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlNwZWNpYWxW
YWx1ZUhhbmRsZXI6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpV
SW50MTI4OjpVSW50MTI4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50
MTI4OjpvcGVyYXRvciAvPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUlu
dDEyODo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6
OkVuY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpj
b2VmZmljaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Zm9y
bWF0Q2xhc3MpCisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6ZXhwb25l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzRmluaXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjppc05hTik6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNTcGVjaWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjppc1plcm8pOgorICAgICAgICAoV2ViQ29yZTo6
RGVjaW1hbDo6RW5jb2RlZERhdGE6OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6
RW5jb2RlZERhdGE6OnNldFNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RGVjaW1h
bCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciA9KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yICs9KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6
Om9wZXJhdG9yIC09KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yICo9KToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yIC89KToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY2ltYWw6Om9wZXJhdG9yIC0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3Bl
cmF0b3IgKyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciAqKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yIC8pOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yIDwpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVjaW1hbDo6b3BlcmF0b3IgPD0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6
b3BlcmF0b3IgPik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciA+PSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpleHBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmFicyk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjphbGlnbk9wZXJhbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWw6OmNlaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6Y29tcGFyZVRvKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmZhc3RFcXVhbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6Zmxvb3IpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6ZnJvbVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppbmZpbml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpEZWNpbWFsOjpuYW4pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6cmVtYWluZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OnJvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlY2ltYWw6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Onplcm8pOgor
ICAgICAgICAqIHBsYXRmb3JtL0RlY2ltYWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjppc0Zpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc05lZ2F0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmlzUG9zaXRpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVjaW1hbDo6aXNTcGVjaWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Omlz
WmVybyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjp2YWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEZWNpbWFsOjppbnZlcnRTaWduKToKKwogMjAxMi0wNS0yOSAgS2VudGFybyBIYXJhICA8
aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBSZW5hbWUgdjhOdWxsKCkgdG8g
djhOdWxsV2l0aENoZWNrKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOWIzOGQ2ZGJk
MjgwYzRmNDlhZjU2OWM3OGZjOTNmZTFmNGE5MGQwMy4uODIzNWM0Zjk2OWM5Mzc4MTNkNjNkMDQy
NzM1MTBiNzFkODBkM2Y5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NSBAQAorMjAxMi0wNS0yNCAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtQbGF0Zm9ybV0gSW50cm9kdWNlIERlY2ltYWwgY2xhc3MgZm9yIE51bWJlci9S
YW5nZSBpbnB1dCB0eXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODczNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZGVkIHVuaXQgdGVzdCBmb3IgRGVjaW1hbCBjbGFzcy4KKwor
ICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0RlY2ltYWxUZXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogT3V0cHV0IERlY2ltYWwgZm9y
IHVuaXQgdGVzdCBkZWJ1Z2dpbmcKKyAgICAgICAgKERlY2ltYWxUZXN0KToKKyAgICAgICAgKERl
Y2ltYWxTdGVwUmFuZ2UpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OkRlY2ltYWxTdGVwUmFuZ2U6
OkRlY2ltYWxTdGVwUmFuZ2UpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OkRlY2ltYWxTdGVwUmFu
Z2U6OmNsYW1wVmFsdWUpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OkRlY2ltYWxUZXN0OjplbmNv
ZGUpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OkRlY2ltYWxUZXN0Ojpmcm9tU3RyaW5nKToKKyAg
ICAgICAgKERlY2ltYWxUZXN0OjpEZWNpbWFsVGVzdDo6c3RlcERvd24pOgorICAgICAgICAoRGVj
aW1hbFRlc3Q6OkRlY2ltYWxUZXN0OjpzdGVwVXApOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OlRF
U1RfRik6CisKIDIwMTItMDUtMjkgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEluZGV4ZWREQjogQWxpZ24gY29kZXMgYW5kIG5hbWVzIGZvciBJREItc3Bl
Y2lmaWMgYW5kIERPTS1zcGVjaWZpYyBlcnJvcnMvZXhjZXB0aW9ucwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAxZTA3NTc3NWJkMjNjOTI5Y2JmNzQwNDhjZTk5NTdjMGIzZDk2NDRlLi4zNmMzMmYz
OTg4MjNkNDc5ZmYxN2IyNjMzNjE1MDVmODRjZmQwYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMTEwNyw2ICsxMTA3LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL0Nv
bnRlbnRUeXBlLmNwcAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIHBs
YXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAorICAgIHBsYXRmb3JtL0RlY2ltYWwuY3BwCiAgICAg
cGxhdGZvcm0vRHJhZ0RhdGEuY3BwCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAogICAgIHBs
YXRmb3JtL0V2ZW50VHJhY2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
MmFmZjM5ZTE0YWExNmRmZjg2MjUwYzMwY2ZhMTQyMzQ5ZjFkY2NjMS4uMWJkY2IyNjA0ZTgwNDI5
NWNlNmRhZTNiMGVlMzIxZTNlMTM2MTNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0zMTE1LDYgKzMxMTUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0N1cnNvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29t
cG9uZW50cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9EZWNpbWFsLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRh
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBlNzY3NGZhOGQw
YmJlYjUwYjZlZjZiNzRlMDkwMDY3OTFjOGZlMTlmLi5jMzEwMWU0OGU4MDZlYzczYjNmYTVmNmFi
NzBlMTlmODQzN2Q2MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTEwODMsNiArMTA4Myw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAgICAgcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAgXAor
ICAgIHBsYXRmb3JtL0RlY2ltYWwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXAog
ICAgIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL0V2ZW50VHJhY2VyLmNw
cCBcCkBAIC0yMjAwLDYgKzIyMDEsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9Db250
ZXh0TWVudS5oIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIFwKICAgICBwbGF0
Zm9ybS9EYXRlQ29tcG9uZW50cy5oIFwKKyAgICBwbGF0Zm9ybS9EZWNpbWFsLmggXAogICAgIHBs
YXRmb3JtL0RyYWdEYXRhLmggXAogICAgIHBsYXRmb3JtL0RyYWdJbWFnZS5oIFwKICAgICBwbGF0
Zm9ybS9FdmVudFRyYWNlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjZWMxMzkzMzY1NTM3MDY2
N2I1N2NkMDlkZjM4MTU5MzdmMmJjMTZiLi4wNmI5NjU3YWU1Y2I3YmVkODdjNjhmYzAzOTliODQ1
MzIxYmI0YzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNzEsNiArMjcxLDcgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Q3Vyc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL0RlY2ltYWwuaCcKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFn
RGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFnSW1hZ2UuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vRXZlbnRUcmFjZXIuaCcsCkBAIC0zMTQ4LDYgKzMxNDksNyBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL0N1cnNvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vRGVjaW1hbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL0RyYWdEYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRHJhZ0ltYWdlLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRXZlbnRMb29wLmgnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA0MGZlMDlhZDI5MGYwZGQ4NzRk
ZTdmZDlmYWFmYjc2NmM3MmYwNWM0Li4zNDU1YjYzMWU0MDlkYTk3NThkYTM3YjAwYjMzZjI4MDU5
ODY0YjYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agpAQCAtMjc4OTEsNiArMjc4OTEsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRGVjaW1hbC5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERlY2ltYWwuaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cRHJhZ0RhdGEuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZjllZGU0MjU5YmE3YTQ5
MTNjNmY0OTdlNDQyZDUzNTUxYzM4YzZiLi4wYWNmN2M3MjY1NDFmYTU5NWFiN2QwYTk3YmYyNzhj
NTIyMDJhNmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xMTkzLDYgKzExOTMsOCBAQAogCQk0NTBDRUJGMDE1MDczQkJFMDAy
QkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxl
RWxlbWVudC5jcHAgKi87IH07CiAJCTQ1MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFi
bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NTBDRUJFRjE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ1QkFDMkIwMTM2MEJC
QUIwMDVEQTI1OCAvKiBJY29uVVJMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NUJBQzJBRjEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ1RkVBNUNGMTU2
RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNw
cCAqLzsgfTsKKwkJNDVGRUE1RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNFMTU2RERFOEMw
MDY1NDEwMSAvKiBEZWNpbWFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNDYxNEExRkUwQjIzQThENjAwNDQ2RTFDIC8qIGNvcHlDdXJzb3IucG5n
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjE0QTFG
RDBCMjNBOEQ2MDA0NDZFMUMgLyogY29weUN1cnNvci5wbmcgKi87IH07CiAJCTQ2NzAwRUQwMTI3
Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1RDYgLyogRmls
ZVdyaXRlclN5bmMuY3BwICovOyB9OwogCQk0NjcwMEVEMTEyN0I5NkNCMDBGNUQ1RDYgLyogRmls
ZVdyaXRlclN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ2NzAwRUNGMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oICovOyB9OwpA
QCAtODIwMSw2ICs4MjAzLDggQEAKIAkJNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVs
YWJsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFi
ZWxhYmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MENFQkVG
MTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDVCQUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvblVSTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjaW1hbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NjE0QTFGRDBCMjNBOEQ2MDA0NDZFMUMgLyogY29weUN1cnNvci5wbmcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5w
bmc7IHBhdGggPSBjb3B5Q3Vyc29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDY3MDBFQ0UxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ2NzAwRUNGMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyU3luYy5oOyBwYXRoID0g
TW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXJTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMDMzNyw2ICsyMDM0MSw4IEBACiAJCQkJRjU4Nzg2ODQwMkRFM0I4NjAxRUE0
MTIyIC8qIEN1cnNvci5oICovLAogCQkJCUE1NzMyQjA4MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRl
Q29tcG9uZW50cy5jcHAgKi8sCiAJCQkJQTU3MzJCMDkxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVD
b21wb25lbnRzLmggKi8sCisJCQkJNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwu
Y3BwICovLAorCQkJCTQ1RkVBNUNFMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggKi8sCiAJ
CQkJQTc5NTQ2NDIwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCAqLywKIAkJCQlBN0I2
RTY5RDBCMjkxQTk2MDBEMDUyOUYgLyogRHJhZ0RhdGEuaCAqLywKIAkJCQlBN0NGQjNDRjBCN0VE
MTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdlLmNwcCAqLywKQEAgLTIyMDk2LDYgKzIyMTAyLDcgQEAK
IAkJCQlGNTVCM0RCNjEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjU1QjNEQjgxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1lSW5wdXRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCQTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRp
bWVMb2NhbElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDVGRUE1RDAxNTZEREU4QzAw
NjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QzIyOEExMTFENTcyMkUw
MEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRUNDRkMzQjE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MTYyQTQ1MTEwMTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVkV29y
a2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU5MSw2ICsyNTU5OCw3IEBACiAJCQkJ
RjU1QjNEQjUxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRjU1QjNEQjcxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1lSW5wdXRUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREI5MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGlt
ZUxvY2FsSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ1RkVBNUNGMTU2RERFOEMw
MDY1NDEwMSAvKiBEZWNpbWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QzIyOEEyMTFENTcy
MkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQxNjJBNDUwMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRp
Y2F0ZWRXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Rl
Y2ltYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjNDI2YjNhOGExNGZlMTQ1NWI0Yzc4ZDJhODRmZjY2NjBk
NDY1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFs
LmNwcApAQCAtMCwwICsxLDEwMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVj
aW1hbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBEZWNpbWFsUHJpdmF0
ZSB7CisKK3N0YXRpYyBpbnQgY29uc3QgRXhwb25lbnRNYXggPSAxMDIzOworc3RhdGljIGludCBj
b25zdCBFeHBvbmVudE1pbiA9IC0xMDIzOworc3RhdGljIGludCBjb25zdCBQcmVjaXNpb24gPSAx
ODsKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90IE1heENvZWZmaWNpZW50ID0gVUlOVDY0X0MoMHgx
NjM0NTc4NUQ4OUZGRkYpOyAvLyA5OTk5OTk5OTk5OTk5OTk5OTkgPT0gMTggOSdzCisKKy8vIFRo
aXMgY2xhc3MgaGFuZGxlcyBEZWNpbWFsIHNwZWNpYWwgdmFsdWVzLgorY2xhc3MgU3BlY2lhbFZh
bHVlSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbFZhbHVlSGFuZGxl
cik7CitwdWJsaWM6CisgICAgZW51bSBIYW5kbGVSZXN1bHQgeworICAgICAgICBCb3RoRmluaXRl
LAorICAgICAgICBCb3RoSW5maW5pdHksCisgICAgICAgIEVpdGhlck5hTiwKKyAgICAgICAgTEhT
SXNJbmZpbml0eSwKKyAgICAgICAgUkhTSXNJbmZpbml0eSwKKyAgICB9OworCisgICAgU3BlY2lh
bFZhbHVlSGFuZGxlcihjb25zdCBEZWNpbWFsJiBsaHMsIGNvbnN0IERlY2ltYWwmIHJocyk7Cisg
ICAgSGFuZGxlUmVzdWx0IGhhbmRsZSgpOworICAgIERlY2ltYWwgdmFsdWUoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBlbnVtIFJlc3VsdCB7CisgICAgICAgIFJlc3VsdElzTEhTLAorICAgICAg
ICBSZXN1bHRJc1JIUywKKyAgICAgICAgUmVzdWx0SXNVbmtub3duLAorICAgIH07CisKKyAgICBj
b25zdCBEZWNpbWFsJiBtX2xoczsKKyAgICBjb25zdCBEZWNpbWFsJiBtX3JoczsKKyAgICBSZXN1
bHQgbV9yZXN1bHQ7Cit9OworCitTcGVjaWFsVmFsdWVIYW5kbGVyOjpTcGVjaWFsVmFsdWVIYW5k
bGVyKGNvbnN0IERlY2ltYWwmIGxocywgY29uc3QgRGVjaW1hbCYgcmhzKQorICAgIDogbV9saHMo
bGhzKSwgbV9yaHMocmhzKSwgbV9yZXN1bHQoUmVzdWx0SXNVbmtub3duKQoreworfQorCitTcGVj
aWFsVmFsdWVIYW5kbGVyOjpIYW5kbGVSZXN1bHQgU3BlY2lhbFZhbHVlSGFuZGxlcjo6aGFuZGxl
KCkKK3sKKyAgICBpZiAobV9saHMuaXNGaW5pdGUoKSAmJiBtX3Jocy5pc0Zpbml0ZSgpKQorICAg
ICAgICByZXR1cm4gQm90aEZpbml0ZTsKKworICAgIGNvbnN0IERlY2ltYWw6OkVuY29kZWREYXRh
OjpGb3JtYXRDbGFzcyBsaHNDbGFzcyA9IG1fbGhzLnZhbHVlKCkuZm9ybWF0Q2xhc3MoKTsKKyAg
ICBjb25zdCBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Rm9ybWF0Q2xhc3MgcmhzQ2xhc3MgPSBtX3Jo
cy52YWx1ZSgpLmZvcm1hdENsYXNzKCk7CisgICAgaWYgKGxoc0NsYXNzID09IERlY2ltYWw6OkVu
Y29kZWREYXRhOjpDbGFzc05hTikgeworICAgICAgICBtX3Jlc3VsdCA9IFJlc3VsdElzTEhTOwor
ICAgICAgICByZXR1cm4gRWl0aGVyTmFOOworICAgICB9CisKKyAgICBpZiAocmhzQ2xhc3MgPT0g
RGVjaW1hbDo6RW5jb2RlZERhdGE6OkNsYXNzTmFOKSB7CisgICAgICAgIG1fcmVzdWx0ID0gUmVz
dWx0SXNSSFM7CisgICAgICAgIHJldHVybiBFaXRoZXJOYU47CisgICAgIH0KKworICAgIGlmIChs
aHNDbGFzcyA9PSBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Q2xhc3NJbmZpbml0eSkKKyAgICAgICAg
cmV0dXJuIHJoc0NsYXNzID09IERlY2ltYWw6OkVuY29kZWREYXRhOjpDbGFzc0luZmluaXR5ID8g
Qm90aEluZmluaXR5IDogTEhTSXNJbmZpbml0eTsKKworICAgIGlmIChyaHNDbGFzcyA9PSBEZWNp
bWFsOjpFbmNvZGVkRGF0YTo6Q2xhc3NJbmZpbml0eSkKKyAgICAgICAgcmV0dXJuIFJIU0lzSW5m
aW5pdHk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQm90aEZpbml0
ZTsKK30KKworRGVjaW1hbCBTcGVjaWFsVmFsdWVIYW5kbGVyOjp2YWx1ZSgpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtX3Jlc3VsdCkgeworICAgIGNhc2UgUmVzdWx0SXNMSFM6CisgICAgICAgIHJl
dHVybiBtX2xoczsKKyAgICBjYXNlIFJlc3VsdElzUkhTOgorICAgICAgICByZXR1cm4gbV9yaHM7
CisgICAgY2FzZSBSZXN1bHRJc1Vua25vd246CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBtX2xoczsKKyAgICB9Cit9CisKKy8vIFRo
aXMgY2xhc3MgaXMgdXNlZCBmb3IgMTI4IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFyaXRobWV0aWMu
CitjbGFzcyBVSW50MTI4IHsKK3B1YmxpYzoKKyAgICBVSW50MTI4KHVpbnQ2NF90IGxvdywgdWlu
dDY0X3QgaGlnaCkKKyAgICAgICAgOiBtX2hpZ2goaGlnaCksIG1fbG93KGxvdykKKyAgICB7Cisg
ICAgfQorCisgICAgVUludDEyOCYgb3BlcmF0b3IvPSh1aW50MzJfdCk7CisKKyAgICB1aW50NjRf
dCBoaWdoKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CisgICAgdWludDY0X3QgbG93KCkgY29u
c3QgeyByZXR1cm4gbV9sb3c7IH0KKworICAgIHN0YXRpYyBVSW50MTI4IG11bHRpcGx5KHVpbnQ2
NF90IHUsIHVpbnQ2NF90IHYpIHsgcmV0dXJuIFVJbnQxMjgodSAqIHYsIG11bHRpcGx5SGlnaCh1
LCB2KSk7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDMyX3QgaGlnaFVJbnQzMih1aW50
NjRfdCB4KSB7IHJldHVybiB1aW50MzJfdCh4ID4+IDMyKTsgfQorICAgIHN0YXRpYyB1aW50MzJf
dCBsb3dVSW50MzIodWludDY0X3QgeCkgeyByZXR1cm4gdWludDMyX3QoeCAmICgodWludDY0X3Qo
MSkgPDwgMzIpIC0gMSkpOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiAhbV9s
b3cgJiYgIW1faGlnaDsgfQorICAgIHN0YXRpYyB1aW50NjRfdCBtYWtlVUludDY0KHVpbnQzMl90
IGxvdywgdWludDMyX3QgaGlnaCkgeyByZXR1cm4gbG93IHwgKHVpbnQ2NF90KGhpZ2gpIDw8IDMy
KTsgfQorCisgICAgc3RhdGljIHVpbnQ2NF90IG11bHRpcGx5SGlnaCh1aW50NjRfdCwgdWludDY0
X3QpOworCisgICAgdWludDY0X3QgbV9oaWdoOworICAgIHVpbnQ2NF90IG1fbG93OworfTsKKwor
VUludDEyOCYgVUludDEyODo6b3BlcmF0b3IvPShjb25zdCB1aW50MzJfdCBkaXZpc29yKQorewor
ICAgIEFTU0VSVChkaXZpc29yKTsKKworICAgIGlmICghbV9oaWdoKSB7CisgICAgICAgIG1fbG93
IC89IGRpdmlzb3I7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB1aW50MzJf
dCBkaXZpZGVuZFs0XTsKKyAgICBkaXZpZGVuZFswXSA9IGxvd1VJbnQzMihtX2xvdyk7CisgICAg
ZGl2aWRlbmRbMV0gPSBoaWdoVUludDMyKG1fbG93KTsKKyAgICBkaXZpZGVuZFsyXSA9IGxvd1VJ
bnQzMihtX2hpZ2gpOworICAgIGRpdmlkZW5kWzNdID0gaGlnaFVJbnQzMihtX2hpZ2gpOworCisg
ICAgdWludDMyX3QgcXVvdGllbnRbNF07CisgICAgdWludDMyX3QgcmVtYWluZGVyID0gMDsKKyAg
ICBmb3IgKGludCBpID0gMzsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgdWludDY0X3Qg
d29yayA9IG1ha2VVSW50NjQocmVtYWluZGVyLCBkaXZpZGVuZFtpXSk7CisgICAgICAgIHJlbWFp
bmRlciA9IHVpbnQzMl90KHdvcmsgJSBkaXZpc29yKTsKKyAgICAgICAgcXVvdGllbnRbaV0gPSB1
aW50MzJfdCh3b3JrIC8gZGl2aXNvcik7CisgICAgfQorICAgIG1fbG93ID0gbWFrZVVJbnQ2NChx
dW90aWVudFswXSwgcXVvdGllbnRbMV0pOworICAgIG1faGlnaCA9IG1ha2VVSW50NjQocXVvdGll
bnRbMl0sIHF1b3RpZW50WzNdKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKKy8vIFJldHVybnMg
aGlnaCA2NGJpdCBvZiAxMjhiaXQgcHJvZHVjdC4KK3VpbnQ2NF90IFVJbnQxMjg6Om11bHRpcGx5
SGlnaCh1aW50NjRfdCB1LCB1aW50NjRfdCB2KQoreworICAgIGNvbnN0IHVpbnQ2NF90IHVMb3cg
PSBsb3dVSW50MzIodSk7CisgICAgY29uc3QgdWludDY0X3QgdUhpZ2ggPSBoaWdoVUludDMyKHUp
OworICAgIGNvbnN0IHVpbnQ2NF90IHZMb3cgPSBsb3dVSW50MzIodik7CisgICAgY29uc3QgdWlu
dDY0X3QgdkhpZ2ggPSBoaWdoVUludDMyKHYpOworICAgIGNvbnN0IHVpbnQ2NF90IHBhcnRpYWxQ
cm9kdWN0ID0gdUhpZ2ggKiB2TG93ICsgaGlnaFVJbnQzMih1TG93ICogdkxvdyk7CisgICAgcmV0
dXJuIHVIaWdoICogdkhpZ2ggKyBoaWdoVUludDMyKHBhcnRpYWxQcm9kdWN0KSArIGhpZ2hVSW50
MzIodUxvdyAqIHZIaWdoICsgbG93VUludDMyKHBhcnRpYWxQcm9kdWN0KSk7Cit9CisKK3N0YXRp
YyBpbnQgY291bnREaWdpdHModWludDY0X3QgeCkKK3sKKyAgICBpbnQgbnVtYmVyT2ZEaWdpdHMg
PSAwOworICAgIGZvciAodWludDY0X3QgcG93ZXJPZlRlbiA9IDE7IHggPj0gcG93ZXJPZlRlbjsg
cG93ZXJPZlRlbiAqPSAxMCkgeworICAgICAgICArK251bWJlck9mRGlnaXRzOworICAgICAgICBp
ZiAocG93ZXJPZlRlbiA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLyAx
MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbnVtYmVyT2ZEaWdpdHM7
Cit9CisKK3N0YXRpYyB1aW50NjRfdCBzY2FsZURvd24odWludDY0X3QgeCwgaW50IG4pCit7Cisg
ICAgQVNTRVJUKG4gPj0gMCk7CisgICAgd2hpbGUgKG4gPiAwICYmIHgpIHsKKyAgICAgICAgeCAv
PSAxMDsKKyAgICAgICAgLS1uOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIHVp
bnQ2NF90IHNjYWxlVXAodWludDY0X3QgeCwgaW50IG4pCit7CisgICAgQVNTRVJUKG4gPj0gMCk7
CisgICAgQVNTRVJUKG4gPCBQcmVjaXNpb24pOworCisgICAgdWludDY0X3QgeSA9IDE7CisgICAg
dWludDY0X3QgeiA9IDEwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKG4gJiAxKQorICAg
ICAgICAgICAgeSA9IHkgKiB6OworCisgICAgICAgIG4gPj49IDE7CisgICAgICAgIGlmICghbikK
KyAgICAgICAgICAgIHJldHVybiB4ICogeTsKKworICAgICAgICB6ID0geiAqIHo7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBEZWNpbWFsUHJpdmF0ZQorCit1c2luZyBuYW1lc3BhY2UgRGVj
aW1hbFByaXZhdGU7CisKK0RlY2ltYWw6OkVuY29kZWREYXRhOjpFbmNvZGVkRGF0YShTaWduIHNp
Z24sIEZvcm1hdENsYXNzIGZvcm1hdENsYXNzKQorICAgIDogbV9jb2VmZmljaWVudCgwKQorICAg
ICwgbV9leHBvbmVudCgwKQorICAgICwgbV9mb3JtYXRDbGFzcyhmb3JtYXRDbGFzcykKKyAgICAs
IG1fc2lnbihzaWduKQoreworfQorCitEZWNpbWFsOjpFbmNvZGVkRGF0YTo6RW5jb2RlZERhdGEo
U2lnbiBzaWduLCBpbnQgZXhwb25lbnQsIHVpbnQ2NF90IGNvZWZmaWNpZW50KQorICAgIDogbV9m
b3JtYXRDbGFzcyhjb2VmZmljaWVudCA/IENsYXNzTm9ybWFsIDogQ2xhc3NaZXJvKQorICAgICwg
bV9zaWduKHNpZ24pCit7CisgICAgaWYgKGV4cG9uZW50ID49IEV4cG9uZW50TWluICYmIGV4cG9u
ZW50IDw9IEV4cG9uZW50TWF4KSB7CisgICAgICAgIHdoaWxlIChjb2VmZmljaWVudCA+PSBNYXhD
b2VmZmljaWVudCkgeworICAgICAgICAgICAgY29lZmZpY2llbnQgLz0gMTA7CisgICAgICAgICAg
ICArK2V4cG9uZW50OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGV4cG9uZW50ID4gRXhw
b25lbnRNYXgpIHsKKyAgICAgICAgbV9jb2VmZmljaWVudCA9IDA7CisgICAgICAgIG1fZXhwb25l
bnQgPSAwOworICAgICAgICBtX2Zvcm1hdENsYXNzID0gQ2xhc3NJbmZpbml0eTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChleHBvbmVudCA8IEV4cG9uZW50TWluKSB7CisgICAg
ICAgIG1fY29lZmZpY2llbnQgPSAwOworICAgICAgICBtX2V4cG9uZW50ID0gMDsKKyAgICAgICAg
bV9mb3JtYXRDbGFzcyA9IENsYXNzWmVybzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fY29lZmZpY2llbnQgPSBjb2VmZmljaWVudDsKKyAgICBtX2V4cG9uZW50ID0gaW50MTZfdChl
eHBvbmVudCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6RW5jb2RlZERhdGE6Om9wZXJhdG9yPT0oY29u
c3QgRW5jb2RlZERhdGEmIGFub3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2lnbiA9PSBh
bm90aGVyLm1fc2lnbgorICAgICAgICAmJiBtX2Zvcm1hdENsYXNzID09IGFub3RoZXIubV9mb3Jt
YXRDbGFzcworICAgICAgICAmJiBtX2V4cG9uZW50ID09IGFub3RoZXIubV9leHBvbmVudAorICAg
ICAgICAmJiBtX2NvZWZmaWNpZW50ID09IGFub3RoZXIubV9jb2VmZmljaWVudDsKK30KKworRGVj
aW1hbDo6RGVjaW1hbChpbnQzMl90IGkzMikKKyAgICA6IG1fZGF0YShpMzIgPCAwID8gTmVnYXRp
dmUgOiBQb3NpdGl2ZSwgMCwgaTMyIDwgMCA/IHVpbnQzMl90KC1pMzIpIDogaTMyKQoreworfQor
CitEZWNpbWFsOjpEZWNpbWFsKFNpZ24gc2lnbiwgaW50IGV4cG9uZW50LCB1aW50NjRfdCBjb2Vm
ZmljaWVudCkKKyAgICA6IG1fZGF0YShzaWduLCBleHBvbmVudCwgY29lZmZpY2llbnQpCit7Cit9
CisKK0RlY2ltYWw6OkRlY2ltYWwoY29uc3QgRW5jb2RlZERhdGEmIGRhdGEpCisgICAgOiBtX2Rh
dGEoZGF0YSkKK3sKK30KKworRGVjaW1hbDo6RGVjaW1hbChjb25zdCBEZWNpbWFsJiBvdGhlcikK
KyAgICA6IG1fZGF0YShvdGhlci5tX2RhdGEpCit7Cit9CisKK0RlY2ltYWwmIERlY2ltYWw6Om9w
ZXJhdG9yPShjb25zdCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSBvdGhlci5tX2Rh
dGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvcis9
KGNvbnN0IERlY2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyArIG90aGVyKS5t
X2RhdGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRv
ci09KGNvbnN0IERlY2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyAtIG90aGVy
KS5tX2RhdGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVy
YXRvcio9KGNvbnN0IERlY2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyAqIG90
aGVyKS5tX2RhdGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpv
cGVyYXRvci89KGNvbnN0IERlY2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyAv
IG90aGVyKS5tX2RhdGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsIERlY2ltYWw6
Om9wZXJhdG9yLSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTmFOKCkpCisgICAgICAgIHJldHVybiAq
dGhpczsKKworICAgIERlY2ltYWwgcmVzdWx0KCp0aGlzKTsKKyAgICByZXN1bHQubV9kYXRhLnNl
dFNpZ24oaW52ZXJ0U2lnbihtX2RhdGEuc2lnbigpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRvcisoY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAor
eworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9ICp0aGlzOworICAgIGNvbnN0IFNpZ24gbGhzU2ln
biA9IGxocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByaHNTaWduID0gcmhzLnNpZ24oKTsKKwor
ICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAgc3dpdGNoICho
YW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmlu
aXRlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90
aEluZmluaXR5OgorICAgICAgICByZXR1cm4gbGhzU2lnbiA9PSByaHNTaWduID8gbGhzIDogbmFu
KCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAgICAg
cmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6
TEhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxoczsKKworICAgIGNhc2UgU3BlY2lhbFZh
bHVlSGFuZGxlcjo6UkhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHJoczsKKyAgICB9CisK
KyAgICBjb25zdCBBbGlnbmVkT3BlcmFuZHMgYWxpZ25lZE9wZXJhbmRzID0gYWxpZ25PcGVyYW5k
cyhsaHMsIHJocyk7CisKKyAgICBjb25zdCB1aW50NjRfdCByZXN1bHQgPSBsaHNTaWduID09IHJo
c1NpZ24KKyAgICAgICAgPyBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQgKyBhbGlnbmVk
T3BlcmFuZHMucmhzQ29lZmZpY2llbnQKKyAgICAgICAgOiBhbGlnbmVkT3BlcmFuZHMubGhzQ29l
ZmZpY2llbnQgLSBhbGlnbmVkT3BlcmFuZHMucmhzQ29lZmZpY2llbnQ7CisKKyAgICBpZiAobGhz
U2lnbiA9PSBOZWdhdGl2ZSAmJiByaHNTaWduID09IFBvc2l0aXZlICYmICFyZXN1bHQpCisgICAg
ICAgIHJldHVybiBEZWNpbWFsKFBvc2l0aXZlLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQsIDAp
OworCisgICAgcmV0dXJuIGludDY0X3QocmVzdWx0KSA+PSAwCisgICAgICAgID8gRGVjaW1hbChs
aHNTaWduLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQsIHJlc3VsdCkKKyAgICAgICAgOiBEZWNp
bWFsKGludmVydFNpZ24obGhzU2lnbiksIGFsaWduZWRPcGVyYW5kcy5leHBvbmVudCwgLWludDY0
X3QocmVzdWx0KSk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3ItKGNvbnN0IERlY2lt
YWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsJiBsaHMgPSAqdGhpczsKKyAgICBj
b25zdCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24gcmhzU2lnbiA9
IHJocy5zaWduKCk7CisKKyAgICBTcGVjaWFsVmFsdWVIYW5kbGVyIGhhbmRsZXIobGhzLCByaHMp
OworICAgIHN3aXRjaCAoaGFuZGxlci5oYW5kbGUoKSkgeworICAgIGNhc2UgU3BlY2lhbFZhbHVl
SGFuZGxlcjo6Qm90aEZpbml0ZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNwZWNpYWxW
YWx1ZUhhbmRsZXI6OkJvdGhJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxoc1NpZ24gPT0gcmhz
U2lnbiA/IG5hbigpIDogbGhzOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpFaXRo
ZXJOYU46CisgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlKCk7CisKKyAgICBjYXNlIFNwZWNp
YWxWYWx1ZUhhbmRsZXI6OkxIU0lzSW5maW5pdHk6CisgICAgICAgIHJldHVybiBsaHM7CisKKyAg
ICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OlJIU0lzSW5maW5pdHk6CisgICAgICAgIHJldHVy
biBpbmZpbml0eShpbnZlcnRTaWduKHJoc1NpZ24pKTsKKyAgICB9CisKKyAgICBjb25zdCBBbGln
bmVkT3BlcmFuZHMgYWxpZ25lZE9wZXJhbmRzID0gYWxpZ25PcGVyYW5kcyhsaHMsIHJocyk7CisK
KyAgICBjb25zdCB1aW50NjRfdCByZXN1bHQgPSBsaHNTaWduID09IHJoc1NpZ24KKyAgICAgICAg
PyBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQgLSBhbGlnbmVkT3BlcmFuZHMucmhzQ29l
ZmZpY2llbnQKKyAgICAgICAgOiBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQgKyBhbGln
bmVkT3BlcmFuZHMucmhzQ29lZmZpY2llbnQ7CisKKyAgICBpZiAobGhzU2lnbiA9PSBOZWdhdGl2
ZSAmJiByaHNTaWduID09IE5lZ2F0aXZlICYmICFyZXN1bHQpCisgICAgICAgIHJldHVybiBEZWNp
bWFsKFBvc2l0aXZlLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQsIDApOworCisgICAgcmV0dXJu
IGludDY0X3QocmVzdWx0KSA+PSAwCisgICAgICAgID8gRGVjaW1hbChsaHNTaWduLCBhbGlnbmVk
T3BlcmFuZHMuZXhwb25lbnQsIHJlc3VsdCkKKyAgICAgICAgOiBEZWNpbWFsKGludmVydFNpZ24o
bGhzU2lnbiksIGFsaWduZWRPcGVyYW5kcy5leHBvbmVudCwgLWludDY0X3QocmVzdWx0KSk7Cit9
CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3IqKGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QK
K3sKKyAgICBjb25zdCBEZWNpbWFsJiBsaHMgPSAqdGhpczsKKyAgICBjb25zdCBTaWduIGxoc1Np
Z24gPSBsaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24gcmhzU2lnbiA9IHJocy5zaWduKCk7Cisg
ICAgY29uc3QgU2lnbiByZXN1bHRTaWduID0gbGhzU2lnbiA9PSByaHNTaWduID8gUG9zaXRpdmUg
OiBOZWdhdGl2ZTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJocyk7
CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFsdWVI
YW5kbGVyOjpCb3RoRmluaXRlOiB7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IGxoc0NvZWZmaWNp
ZW50ID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworICAgICAgICBjb25zdCB1aW50NjRfdCBy
aHNDb2VmZmljaWVudCA9IHJocy5tX2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICAgICAgaW50IHJl
c3VsdEV4cG9uZW50ID0gbGhzLmV4cG9uZW50KCkgKyByaHMuZXhwb25lbnQoKTsKKyAgICAgICAg
VUludDEyOCB3b3JrKFVJbnQxMjg6Om11bHRpcGx5KGxoc0NvZWZmaWNpZW50LCByaHNDb2VmZmlj
aWVudCkpOworICAgICAgICB3aGlsZSAod29yay5oaWdoKCkpIHsKKyAgICAgICAgICAgIHdvcmsg
Lz0gMTA7CisgICAgICAgICAgICArK3Jlc3VsdEV4cG9uZW50OworICAgICAgICB9CisgICAgICAg
IHJldHVybiBEZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3VsdEV4cG9uZW50LCB3b3JrLmxvdygpKTsK
KyAgICB9CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhJbmZpbml0eToKKyAg
ICAgICAgcmV0dXJuIGluZmluaXR5KHJlc3VsdFNpZ24pOworCisgICAgY2FzZSBTcGVjaWFsVmFs
dWVIYW5kbGVyOjpFaXRoZXJOYU46CisgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlKCk7CisK
KyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkxIU0lzSW5maW5pdHk6CisgICAgICAgIHJl
dHVybiByaHMuaXNaZXJvKCkgPyBuYW4oKSA6IGluZmluaXR5KHJlc3VsdFNpZ24pOworCisgICAg
Y2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpSSFNJc0luZmluaXR5OgorICAgICAgICByZXR1cm4g
bGhzLmlzWmVybygpID8gbmFuKCkgOiBpbmZpbml0eShyZXN1bHRTaWduKTsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbmFuKCk7Cit9CisKK0RlY2ltYWwg
RGVjaW1hbDo6b3BlcmF0b3IvKGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25z
dCBEZWNpbWFsJiBsaHMgPSAqdGhpczsKKyAgICBjb25zdCBTaWduIGxoc1NpZ24gPSBsaHMuc2ln
bigpOworICAgIGNvbnN0IFNpZ24gcmhzU2lnbiA9IHJocy5zaWduKCk7CisgICAgY29uc3QgU2ln
biByZXN1bHRTaWduID0gbGhzU2lnbiA9PSByaHNTaWduID8gUG9zaXRpdmUgOiBOZWdhdGl2ZTsK
KworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAgc3dpdGNo
IChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3Ro
RmluaXRlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6
Qm90aEluZmluaXR5OgorICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICBjYXNlIFNwZWNpYWxW
YWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsK
KworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6TEhTSXNJbmZpbml0eToKKyAgICAgICAg
cmV0dXJuIGluZmluaXR5KHJlc3VsdFNpZ24pOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5k
bGVyOjpSSFNJc0luZmluaXR5OgorICAgICAgICByZXR1cm4gemVybyhyZXN1bHRTaWduKTsKKyAg
ICB9CisKKyAgICBBU1NFUlQobGhzLmlzRmluaXRlKCkpOworICAgIEFTU0VSVChyaHMuaXNGaW5p
dGUoKSk7CisKKyAgICBpZiAocmhzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbGhzLmlzWmVy
bygpID8gbmFuKCkgOiBpbmZpbml0eShyZXN1bHRTaWduKTsKKworICAgIGludCByZXN1bHRFeHBv
bmVudCA9IGxocy5leHBvbmVudCgpIC0gcmhzLmV4cG9uZW50KCk7CisKKyAgICBpZiAobGhzLmlz
WmVybygpKQorICAgICAgICByZXR1cm4gRGVjaW1hbChyZXN1bHRTaWduLCByZXN1bHRFeHBvbmVu
dCwgMCk7CisKKyAgICB1aW50NjRfdCByZW1haW5kZXIgPSBsaHMubV9kYXRhLmNvZWZmaWNpZW50
KCk7CisgICAgY29uc3QgdWludDY0X3QgZGl2aXNvciA9IHJocy5tX2RhdGEuY29lZmZpY2llbnQo
KTsKKyAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgIHdoaWxlIChyZXN1bHQgPCBNYXhDb2Vm
ZmljaWVudCAvIDEwMCkgeworICAgICAgICB3aGlsZSAocmVtYWluZGVyIDwgZGl2aXNvcikgewor
ICAgICAgICAgICAgcmVtYWluZGVyICo9IDEwOworICAgICAgICAgICAgcmVzdWx0ICo9IDEwOwor
ICAgICAgICAgICAgLS1yZXN1bHRFeHBvbmVudDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQg
Kz0gcmVtYWluZGVyIC8gZGl2aXNvcjsKKyAgICAgICAgcmVtYWluZGVyICU9IGRpdmlzb3I7Cisg
ICAgICAgIGlmICghcmVtYWluZGVyKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKHJlbWFpbmRlciA+IGRpdmlzb3IgLyAyKQorICAgICAgICArK3Jlc3VsdDsKKworICAgIHJl
dHVybiBEZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3VsdEV4cG9uZW50LCByZXN1bHQpOworfQorCiti
b29sIERlY2ltYWw6Om9wZXJhdG9yPT0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAg
IHJldHVybiBtX2RhdGEgPT0gcmhzLm1fZGF0YSB8fCBjb21wYXJlVG8ocmhzKS5pc1plcm8oKTsK
K30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvciE9KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QK
K3sKKyAgICBpZiAobV9kYXRhID09IHJocy5tX2RhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCA9IGNvbXBhcmVUbyhyaHMpOworICAgIGlmIChyZXN1
bHQuaXNOYU4oKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIXJlc3VsdC5pc1pl
cm8oKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvcjwoY29uc3QgRGVjaW1hbCYgcmhzKSBj
b25zdAoreworICAgIGNvbnN0IERlY2ltYWwgcmVzdWx0ID0gY29tcGFyZVRvKHJocyk7CisgICAg
aWYgKHJlc3VsdC5pc05hTigpKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhcmVz
dWx0LmlzWmVybygpICYmIHJlc3VsdC5pc05lZ2F0aXZlKCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6
b3BlcmF0b3I8PShjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgaWYgKG1fZGF0YSA9
PSByaHMubV9kYXRhKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBEZWNpbWFsIHJl
c3VsdCA9IGNvbXBhcmVUbyhyaHMpOworICAgIGlmIChyZXN1bHQuaXNOYU4oKSkKKyAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVzdWx0LmlzWmVybygpIHx8IHJlc3VsdC5pc05lZ2F0
aXZlKCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6b3BlcmF0b3I+KGNvbnN0IERlY2ltYWwmIHJocykg
Y29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCA9IGNvbXBhcmVUbyhyaHMpOworICAg
IGlmIChyZXN1bHQuaXNOYU4oKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIXJl
c3VsdC5pc1plcm8oKSAmJiByZXN1bHQuaXNQb3NpdGl2ZSgpOworfQorCitib29sIERlY2ltYWw6
Om9wZXJhdG9yPj0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGlmIChtX2RhdGEg
PT0gcmhzLm1fZGF0YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgRGVjaW1hbCBy
ZXN1bHQgPSBjb21wYXJlVG8ocmhzKTsKKyAgICBpZiAocmVzdWx0LmlzTmFOKCkpCisgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlc3VsdC5pc1plcm8oKSB8fCAhcmVzdWx0LmlzTmVn
YXRpdmUoKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjphYnMoKSBjb25zdAoreworICAgIERlY2lt
YWwgcmVzdWx0KCp0aGlzKTsKKyAgICByZXN1bHQubV9kYXRhLnNldFNpZ24oUG9zaXRpdmUpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0RlY2ltYWw6OkFsaWduZWRPcGVyYW5kcyBEZWNpbWFs
OjphbGlnbk9wZXJhbmRzKGNvbnN0IERlY2ltYWwmIGxocywgY29uc3QgRGVjaW1hbCYgcmhzKQor
eworICAgIEFTU0VSVChsaHMuaXNGaW5pdGUoKSk7CisgICAgQVNTRVJUKHJocy5pc0Zpbml0ZSgp
KTsKKworICAgIGNvbnN0IGludCBsaHNFeHBvbmVudCA9IGxocy5leHBvbmVudCgpOworICAgIGNv
bnN0IGludCByaHNFeHBvbmVudCA9IHJocy5leHBvbmVudCgpOworICAgIGludCBleHBvbmVudCA9
IHN0ZDo6bWluKGxoc0V4cG9uZW50LCByaHNFeHBvbmVudCk7CisgICAgdWludDY0X3QgbGhzQ29l
ZmZpY2llbnQgPSBsaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgdWludDY0X3QgcmhzQ29l
ZmZpY2llbnQgPSByaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisKKyAgICBpZiAobGhzRXhwb25l
bnQgPiByaHNFeHBvbmVudCkgeworICAgICAgICBjb25zdCBpbnQgbnVtYmVyT2ZMSFNEaWdpdHMg
PSBjb3VudERpZ2l0cyhsaHNDb2VmZmljaWVudCk7CisgICAgICAgIGlmIChudW1iZXJPZkxIU0Rp
Z2l0cykgeworICAgICAgICAgICAgY29uc3QgaW50IGxoc1NoaWZ0QW1vdW50ID0gbGhzRXhwb25l
bnQgLSByaHNFeHBvbmVudDsKKyAgICAgICAgICAgIGNvbnN0IGludCBvdmVyZmxvdyA9IG51bWJl
ck9mTEhTRGlnaXRzICsgbGhzU2hpZnRBbW91bnQgLSBQcmVjaXNpb247CisgICAgICAgICAgICBp
ZiAob3ZlcmZsb3cgPD0gMCkKKyAgICAgICAgICAgICAgICBsaHNDb2VmZmljaWVudCA9IHNjYWxl
VXAobGhzQ29lZmZpY2llbnQsIGxoc1NoaWZ0QW1vdW50KTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVVcChsaHNDb2VmZmljaWVudCwg
bGhzU2hpZnRBbW91bnQgLSBvdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgcmhzQ29lZmZpY2ll
bnQgPSBzY2FsZURvd24ocmhzQ29lZmZpY2llbnQsIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAg
ICBleHBvbmVudCArPSBvdmVyZmxvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
fSBpZiAobGhzRXhwb25lbnQgPCByaHNFeHBvbmVudCkgeworICAgICAgICBjb25zdCBpbnQgbnVt
YmVyT2ZSSFNEaWdpdHMgPSBjb3VudERpZ2l0cyhyaHNDb2VmZmljaWVudCk7CisgICAgICAgIGlm
IChudW1iZXJPZlJIU0RpZ2l0cykgeworICAgICAgICAgICAgY29uc3QgaW50IHJoc1NoaWZ0QW1v
dW50ID0gcmhzRXhwb25lbnQgLSBsaHNFeHBvbmVudDsKKyAgICAgICAgICAgIGNvbnN0IGludCBv
dmVyZmxvdyA9IG51bWJlck9mUkhTRGlnaXRzICsgcmhzU2hpZnRBbW91bnQgLSBQcmVjaXNpb247
CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPD0gMCkKKyAgICAgICAgICAgICAgICByaHNDb2Vm
ZmljaWVudCA9IHNjYWxlVXAocmhzQ29lZmZpY2llbnQsIHJoc1NoaWZ0QW1vdW50KTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJoc0NvZWZmaWNpZW50ID0gc2NhbGVVcChy
aHNDb2VmZmljaWVudCwgcmhzU2hpZnRBbW91bnQgLSBvdmVyZmxvdyk7CisgICAgICAgICAgICAg
ICAgbGhzQ29lZmZpY2llbnQgPSBzY2FsZURvd24obGhzQ29lZmZpY2llbnQsIG92ZXJmbG93KTsK
KyAgICAgICAgICAgICAgICBleHBvbmVudCArPSBvdmVyZmxvdzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIEFsaWduZWRPcGVyYW5kcyBhbGlnbmVkT3BlcmFuZHM7Cisg
ICAgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50ID0gZXhwb25lbnQ7CisgICAgYWxpZ25lZE9wZXJh
bmRzLmxoc0NvZWZmaWNpZW50ID0gbGhzQ29lZmZpY2llbnQ7CisgICAgYWxpZ25lZE9wZXJhbmRz
LnJoc0NvZWZmaWNpZW50ID0gcmhzQ29lZmZpY2llbnQ7CisgICAgcmV0dXJuIGFsaWduZWRPcGVy
YW5kczsKK30KKworLy8gUm91bmQgdG93YXJkIHBvc2l0aXZlIGluZmluaXR5LgorLy8gTm90ZTog
TWFjIHBvcnRzIGRlZmluZXMgY2VpbCh4KSBhcyB3dGZfY2VpbCh4KSwgc28gd2UgY2FuJ3QgdXNl
IG5hbWUgImNlaWwiIGhlcmUuCitEZWNpbWFsIERlY2ltYWw6OmNlaWxpbmcoKSBjb25zdAorewor
ICAgIGlmIChpc1NwZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgaWYgKGV4
cG9uZW50KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgdWludDY0X3QgcmVz
dWx0ID0gbV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRGlnaXRz
ID0gY291bnREaWdpdHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEcm9wRGlnaXRz
ID0gLWV4cG9uZW50KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgbnVtYmVyT2ZEcm9wRGln
aXRzKQorICAgICAgICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICByZXN1bHQgPSBzY2Fs
ZURvd24ocmVzdWx0LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBpZiAoc2lnbigpID09
IFBvc2l0aXZlICYmIHJlc3VsdCAlIDEwID4gMCkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAg
IHJlc3VsdCAvPSAxMDsKKyAgICByZXR1cm4gRGVjaW1hbChzaWduKCksIDAsIHJlc3VsdCk7Cit9
CisKK0RlY2ltYWwgRGVjaW1hbDo6Y29tcGFyZVRvKGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QK
K3sKKyAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCgqdGhpcyAtIHJocyk7CisgICAgc3dpdGNoIChy
ZXN1bHQubV9kYXRhLmZvcm1hdENsYXNzKCkpIHsKKyAgICBjYXNlIEVuY29kZWREYXRhOjpDbGFz
c0luZmluaXR5OgorICAgICAgICByZXR1cm4gcmVzdWx0LmlzTmVnYXRpdmUoKSA/IERlY2ltYWwo
LTEpIDogRGVjaW1hbCgxKTsKKworICAgIGNhc2UgRW5jb2RlZERhdGE6OkNsYXNzTmFOOgorICAg
IGNhc2UgRW5jb2RlZERhdGE6OkNsYXNzTm9ybWFsOgorICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgY2FzZSBFbmNvZGVkRGF0YTo6Q2xhc3NaZXJvOgorICAgICAgICByZXR1cm4gemVybyhQ
b3NpdGl2ZSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIG5hbigpOworICAgIH0KK30KKworLy8gUm91bmQgdG93YXJkIG5lZ2F0
aXZlIGluZmluaXR5LgorRGVjaW1hbCBEZWNpbWFsOjpmbG9vcigpIGNvbnN0Cit7CisgICAgaWYg
KGlzU3BlY2lhbCgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoZXhwb25lbnQo
KSA+PSAwKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICB1aW50NjRfdCByZXN1bHQgPSBt
X2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEaWdpdHMgPSBjb3Vu
dERpZ2l0cyhyZXN1bHQpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRyb3BEaWdpdHMgPSAtZXhw
b25lbnQoKTsKKyAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBudW1iZXJPZkRyb3BEaWdpdHMpCisg
ICAgICAgIHJldHVybiB6ZXJvKFBvc2l0aXZlKTsKKworICAgIHJlc3VsdCA9IHNjYWxlRG93bihy
ZXN1bHQsIG51bWJlck9mRHJvcERpZ2l0cyAtIDEpOworICAgIGlmIChpc05lZ2F0aXZlKCkgJiYg
cmVzdWx0ICUgMTAgPiAwKQorICAgICAgICByZXN1bHQgKz0gMTA7CisgICAgcmVzdWx0IC89IDEw
OworICAgIHJldHVybiBEZWNpbWFsKHNpZ24oKSwgMCwgcmVzdWx0KTsKK30KKworRGVjaW1hbCBE
ZWNpbWFsOjpmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIGludCBleHBvbmVu
dCA9IDA7CisgICAgU2lnbiBleHBvbmVudFNpZ24gPSBQb3NpdGl2ZTsKKyAgICBpbnQgbnVtYmVy
T2ZEaWdpdHMgPSAwOworICAgIGludCBudW1iZXJPZkRpZ2l0c0FmdGVyRG90ID0gMDsKKyAgICBp
bnQgbnVtYmVyT2ZFeHRyYURpZ2l0cyA9IDA7CisgICAgU2lnbiBzaWduID0gUG9zaXRpdmU7CisK
KyAgICBlbnVtIHsKKyAgICAgICAgU3RhdGVEaWdpdCwKKyAgICAgICAgU3RhdGVEb3QsCisgICAg
ICAgIFN0YXRlRG90RGlnaXQsCisgICAgICAgIFN0YXRlRSwKKyAgICAgICAgU3RhdGVFRGlnaXQs
CisgICAgICAgIFN0YXRlRVNpZ24sCisgICAgICAgIFN0YXRlU2lnbiwKKyAgICAgICAgU3RhdGVT
dGFydCwKKyAgICAgICAgU3RhdGVaZXJvLAorICAgIH0gc3RhdGUgPSBTdGF0ZVN0YXJ0OworCisj
ZGVmaW5lIEhhbmRsZUNoYXJBbmRCcmVhayhleHBlY3RlZCwgbmV4dFN0YXRlKSBcCisgICAgaWYg
KGNoID09IGV4cGVjdGVkKSB7IFwKKyAgICAgICAgc3RhdGUgPSBuZXh0U3RhdGU7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisKKyNkZWZpbmUgSGFuZGxlVHdvQ2hhcnNBbmRCcmVhayhleHBl
Y3RlZDEsIGV4cGVjdGVkMiwgbmV4dFN0YXRlKSBcCisgICAgaWYgKGNoID09IGV4cGVjdGVkMSB8
fCBjaCA9PSBleHBlY3RlZDIpIHsgXAorICAgICAgICBzdGF0ZSA9IG5leHRTdGF0ZTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKworICAgIHVpbnQ2NF90IGFjY3VtdWxhdG9yID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgY29uc3QgaW50IGNoID0gc3RyW2luZGV4XTsKKyAgICAgICAgc3dpdGNoIChz
dGF0ZSkgeworICAgICAgICBjYXNlIFN0YXRlRGlnaXQ6CisgICAgICAgICAgICBpZiAoY2ggPj0g
JzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8
IFByZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRzOworICAg
ICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciAqPSAxMDsKKyAgICAgICAgICAgICAgICAgICAg
YWNjdW11bGF0b3IgKz0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICsrbnVtYmVyT2ZFeHRyYURpZ2l0czsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSGFuZGxlQ2hhckFuZEJyZWFrKCcuJywg
U3RhdGVEb3QpOworICAgICAgICAgICAgSGFuZGxlVHdvQ2hhcnNBbmRCcmVhaygnRScsICdlJywg
U3RhdGVFKTsKKyAgICAgICAgICAgIHJldHVybiBuYW4oKTsKKworICAgICAgICBjYXNlIFN0YXRl
RG90OgorICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBQcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRp
Z2l0c0FmdGVyRG90OworICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciAqPSAxMDsKKyAg
ICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gY2ggLSAnMCc7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVEb3REaWdpdDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlRG90RGlnaXQ6
CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAg
ICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IFByZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAg
ICArK251bWJlck9mRGlnaXRzOworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRz
QWZ0ZXJEb3Q7CisgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICo9IDEwOworICAgICAg
ICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEhh
bmRsZVR3b0NoYXJzQW5kQnJlYWsoJ0UnLCAnZScsIFN0YXRlRSk7CisgICAgICAgICAgICByZXR1
cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0ZUU6CisgICAgICAgICAgICBpZiAoY2ggPT0g
JysnKSB7CisgICAgICAgICAgICAgICAgZXhwb25lbnRTaWduID0gUG9zaXRpdmU7CisgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZUVTaWduOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICAg
ICAgZXhwb25lbnRTaWduID0gTmVnYXRpdmU7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZUVTaWduOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGV4cG9u
ZW50ID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVFRGlnaXQ6CisgICAgICAgICAgICBpZiAoY2gg
Pj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGV4cG9uZW50ICo9IDEwOwor
ICAgICAgICAgICAgICAgIGV4cG9uZW50ICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIGlm
IChleHBvbmVudCA+IEV4cG9uZW50TWF4ICsgUHJlY2lzaW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChhY2N1bXVsYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBv
bmVudFNpZ24gPT0gTmVnYXRpdmUgPyB6ZXJvKFBvc2l0aXZlKSA6IGluZmluaXR5KHNpZ24pOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gemVybyhzaWduKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAg
ICAgIGNhc2UgU3RhdGVFU2lnbjoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0g
JzknKSB7CisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBjaCAtICcwJzsKKyAgICAgICAgICAg
ICAgICBzdGF0ZSA9IFN0YXRlRURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0
ZVNpZ246CisgICAgICAgICAgICBpZiAoY2ggPj0gJzEnICYmIGNoIDw9ICc5JykgeworICAgICAg
ICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgbnVtYmVy
T2ZEaWdpdHMgPSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVEaWdpdDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSGFuZGxlQ2hh
ckFuZEJyZWFrKCcwJywgU3RhdGVaZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBuYW4oKTsKKwor
ICAgICAgICBjYXNlIFN0YXRlU3RhcnQ6CisgICAgICAgICAgICBpZiAoY2ggPj0gJzEnICYmIGNo
IDw9ICc5JykgeworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2ggLSAnMCc7CisgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZEaWdpdHMgPSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGNoID09ICctJykgeworICAgICAgICAgICAgICAgIHNpZ24gPSBOZWdhdGl2
ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlU2lnbjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09ICcrJykgeworICAg
ICAgICAgICAgICAgIHNpZ24gPSBQb3NpdGl2ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlU2lnbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgSGFuZGxlQ2hhckFuZEJyZWFrKCcwJywgU3RhdGVaZXJvKTsKKyAgICAgICAgICAgIEhh
bmRsZUNoYXJBbmRCcmVhaygnLicsIFN0YXRlRG90KTsKKyAgICAgICAgICAgIHJldHVybiBuYW4o
KTsKKworICAgICAgICBjYXNlIFN0YXRlWmVybzoKKyAgICAgICAgICAgIGlmIChjaCA9PSAnMCcp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMScgJiYg
Y2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBjaCAtICcwJzsKKyAg
ICAgICAgICAgICAgICBudW1iZXJPZkRpZ2l0cyA9IDE7CisgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBIYW5kbGVDaGFyQW5kQnJlYWsoJy4nLCBTdGF0ZURvdCk7CisgICAgICAgICAg
ICBIYW5kbGVUd29DaGFyc0FuZEJyZWFrKCdFJywgJ2UnLCBTdGF0ZUUpOworICAgICAgICAgICAg
cmV0dXJuIG5hbigpOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBuYW4oKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChzdGF0ZSA9PSBTdGF0ZVplcm8pCisgICAgICAgIHJldHVybiB6ZXJvKHNpZ24p
OworCisgICAgaWYgKHN0YXRlID09IFN0YXRlRGlnaXQgfHwgc3RhdGUgPT0gU3RhdGVFRGlnaXQg
fHwgc3RhdGUgPT0gU3RhdGVEb3REaWdpdCkgeworICAgICAgICBpbnQgcmVzdWx0RXhwb25lbnQg
PSBleHBvbmVudCAqIChleHBvbmVudFNpZ24gPT0gTmVnYXRpdmUgPyAtMSA6IDEpIC0gbnVtYmVy
T2ZEaWdpdHNBZnRlckRvdCArIG51bWJlck9mRXh0cmFEaWdpdHM7CisgICAgICAgIGlmIChyZXN1
bHRFeHBvbmVudCA8IEV4cG9uZW50TWluKQorICAgICAgICAgICAgcmV0dXJuIHplcm8oUG9zaXRp
dmUpOworCisgICAgICAgIGNvbnN0IGludCBvdmVyZmxvdyA9IHJlc3VsdEV4cG9uZW50IC0gRXhw
b25lbnRNYXggKyAxOworICAgICAgICBpZiAob3ZlcmZsb3cgPiAwKSB7CisgICAgICAgICAgICBp
ZiAob3ZlcmZsb3cgKyBudW1iZXJPZkRpZ2l0cyAtIG51bWJlck9mRGlnaXRzQWZ0ZXJEb3QgPiBQ
cmVjaXNpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIGluZmluaXR5KHNpZ24pOworICAgICAg
ICAgICAgYWNjdW11bGF0b3IgPSBzY2FsZVVwKGFjY3VtdWxhdG9yLCBvdmVyZmxvdyk7CisgICAg
ICAgICAgICByZXN1bHRFeHBvbmVudCAtPSBvdmVyZmxvdzsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBEZWNpbWFsKHNpZ24sIHJlc3VsdEV4cG9uZW50LCBhY2N1bXVsYXRvcik7CisgICAg
fQorCisgICAgcmV0dXJuIG5hbigpOworfQorCitEZWNpbWFsIERlY2ltYWw6OmluZmluaXR5KGNv
bnN0IFNpZ24gc2lnbikKK3sKKyAgICByZXR1cm4gRGVjaW1hbChFbmNvZGVkRGF0YShzaWduLCBF
bmNvZGVkRGF0YTo6Q2xhc3NJbmZpbml0eSkpOworfQorCitEZWNpbWFsIERlY2ltYWw6Om5hbigp
Cit7CisgICAgcmV0dXJuIERlY2ltYWwoRW5jb2RlZERhdGEoUG9zaXRpdmUsIEVuY29kZWREYXRh
OjpDbGFzc05hTikpOworfQorCitEZWNpbWFsIERlY2ltYWw6OnJlbWFpbmRlcihjb25zdCBEZWNp
bWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29uc3QgRGVjaW1hbCBxdW90aWVudCA9ICgqdGhpcyAv
IHJocykucm91bmQoKTsKKyAgICByZXR1cm4gcXVvdGllbnQuaXNTcGVjaWFsKCkgPyBxdW90aWVu
dCA6ICp0aGlzIC0gcXVvdGllbnQgKiByaHM7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6cm91bmQo
KSBjb25zdAoreworICAgIGlmIChpc1NwZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
CisgICAgaWYgKGV4cG9uZW50KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAg
dWludDY0X3QgcmVzdWx0ID0gbV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50IG51
bWJlck9mRGlnaXRzID0gY291bnREaWdpdHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVtYmVy
T2ZEcm9wRGlnaXRzID0gLWV4cG9uZW50KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgbnVt
YmVyT2ZEcm9wRGlnaXRzKQorICAgICAgICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICBy
ZXN1bHQgPSBzY2FsZURvd24ocmVzdWx0LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBp
ZiAocmVzdWx0ICUgMTAgPj0gNSkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAv
PSAxMDsKKyAgICByZXR1cm4gRGVjaW1hbChzaWduKCksIDAsIHJlc3VsdCk7Cit9CisKK1N0cmlu
ZyBEZWNpbWFsOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2RhdGEuZm9ybWF0
Q2xhc3MoKSkgeworICAgIGNhc2UgRW5jb2RlZERhdGE6OkNsYXNzSW5maW5pdHk6CisgICAgICAg
IHJldHVybiBzaWduKCkgPyAiLUluZmluaXR5IiA6ICJJbmZpbml0eSI7CisKKyAgICBjYXNlIEVu
Y29kZWREYXRhOjpDbGFzc05hTjoKKyAgICAgICAgcmV0dXJuICJOYU4iOworCisgICAgY2FzZSBF
bmNvZGVkRGF0YTo6Q2xhc3NOb3JtYWw6CisgICAgY2FzZSBFbmNvZGVkRGF0YTo6Q2xhc3NaZXJv
OgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGlmIChzaWduKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisK
KyAgICBpbnQgb3JpZ2luYWxFeHBvbmVudCA9IGV4cG9uZW50KCk7CisKKyAgICBjb25zdCBpbnQg
bWF4RGlnaXRzID0gREJMX0RJRzsKKyAgICB1aW50NjRfdCBjb2VmZmljaWVudCA9IG1fZGF0YS5j
b2VmZmljaWVudCgpOworICAgIGludCBsYXN0RGlnaXQgPSAwOworICAgIHdoaWxlIChjb3VudERp
Z2l0cyhjb2VmZmljaWVudCkgPiBtYXhEaWdpdHMpIHsKKyAgICAgICAgbGFzdERpZ2l0ID0gY29l
ZmZpY2llbnQgJSAxMDsKKyAgICAgICAgY29lZmZpY2llbnQgLz0gMTA7CisgICAgICAgICsrb3Jp
Z2luYWxFeHBvbmVudDsKKyAgICB9CisKKyAgICBpZiAobGFzdERpZ2l0ID49IDUpCisgICAgICAg
ICsrY29lZmZpY2llbnQ7CisKKyAgICB3aGlsZSAob3JpZ2luYWxFeHBvbmVudCA8IDAgJiYgY29l
ZmZpY2llbnQgJiYgIShjb2VmZmljaWVudCAlIDEwKSkgeworICAgICAgICBjb2VmZmljaWVudCAv
PSAxMDsKKyAgICAgICAgKytvcmlnaW5hbEV4cG9uZW50OworICAgIH0KKworICAgIGNvbnN0IFN0
cmluZyBkaWdpdHMgPSBTdHJpbmc6Om51bWJlcihjb2VmZmljaWVudCk7CisgICAgaW50IGNvZWZm
aWNpZW50TGVuZ3RoID0gaW50KGRpZ2l0cy5sZW5ndGgoKSk7CisgICAgY29uc3QgaW50IGFkanVz
dGVkRXhwb25lbnQgPSBvcmlnaW5hbEV4cG9uZW50ICsgY29lZmZpY2llbnRMZW5ndGggLSAxOwor
ICAgIGlmIChvcmlnaW5hbEV4cG9uZW50IDw9IDAgJiYgYWRqdXN0ZWRFeHBvbmVudCA+PSAtNikg
eworICAgICAgICBpZiAoIW9yaWdpbmFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGRpZ2l0cyk7CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkanVzdGVkRXhwb25lbnQgPj0gMCkgeworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2VmZmljaWVudExlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZGlnaXRzW2ldKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaSA9PSBhZGp1c3RlZEV4cG9uZW50KQorICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgnLicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIwLiIpOworICAg
ICAgICBmb3IgKGludCBpID0gYWRqdXN0ZWRFeHBvbmVudCArIDE7IGkgPCAwOyArK2kpCisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnMCcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRp
Z2l0cyk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHNbMF0p
OworICAgICAgICB3aGlsZSAoY29lZmZpY2llbnRMZW5ndGggPj0gMiAmJiBkaWdpdHNbY29lZmZp
Y2llbnRMZW5ndGggLSAxXSA9PSAnMCcpCisgICAgICAgICAgICAtLWNvZWZmaWNpZW50TGVuZ3Ro
OworICAgICAgICBpZiAoY29lZmZpY2llbnRMZW5ndGggPj0gMikgeworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY29lZmZp
Y2llbnRMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHNb
aV0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkanVzdGVkRXhwb25lbnQpIHsKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFkanVzdGVkRXhwb25lbnQgPCAwID8gImUiIDogImUrIik7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihhZGp1c3RlZEV4cG9u
ZW50KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
K30KKworRGVjaW1hbCBEZWNpbWFsOjp6ZXJvKFNpZ24gc2lnbikKK3sKKyAgICByZXR1cm4gRGVj
aW1hbChFbmNvZGVkRGF0YShzaWduLCBFbmNvZGVkRGF0YTo6Q2xhc3NaZXJvKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RlY2ltYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41OWRhNGM2ZTFjMDI5NThiOWE1NTFkYjhiODFmYTJhMmRmNDIxMGUzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5oCkBAIC0wLDAgKzEsMTc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNp
Zm5kZWYgRGVjaW1hbF9oCisjZGVmaW5lIERlY2ltYWxfaAorCisjaW5jbHVkZSA8c3RkaW50Lmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgRGVjaW1hbFByaXZhdGUg
eworY2xhc3MgU3BlY2lhbFZhbHVlSGFuZGxlcjsKK30KKworLy8gVGhpcyBjbGFzcyByZXByZXNl
bnRzIGRlY2ltYWwgYmFzZSBmbG9hdGluZyBwb2ludCBudW1iZXIuCisvLworLy8gRklYTUU6IE9u
Y2UgYWxsIEMrKyBjb21waWxlciBzdXBwb3J0IGRlY2ltYWwgdHlwZSwgd2Ugc2hvdWxkIHJlcGxh
Y2UgdGhpcworLy8gY2xhc3MgdG8gY29tcGlsZXIgc3VwcG9ydGVkIG9uZS4gU2VlIGJlbG93IFVS
SSBmb3IgY3VycmVudCBzdGF0dXMgb2YgZGVjaW1hbAorLy8gdHlwZSBmb3IgQysrOiAvLyBodHRw
Oi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA2L24xOTc3
Lmh0bWwKK2NsYXNzIERlY2ltYWwgeworcHVibGljOgorICAgIGVudW0gU2lnbiB7CisgICAgICAg
IFBvc2l0aXZlLAorICAgICAgICBOZWdhdGl2ZSwKKyAgICB9OworCisgICAgLy8gWW91IHNob3Vs
ZCBub3QgdXNlIEVuY29kZWREYXRhIG90aGVyIHRoYW4gdW5pdCB0ZXN0aW5nLgorICAgIGNsYXNz
IEVuY29kZWREYXRhIHsKKyAgICAgICAgLy8gRm9yIGFjY2Vzc2luZyBGb3JtYXRDbGFzcy4KKyAg
ICAgICAgZnJpZW5kIGNsYXNzIERlY2ltYWw7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWNpbWFs
UHJpdmF0ZTo6U3BlY2lhbFZhbHVlSGFuZGxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEVuY29k
ZWREYXRhKFNpZ24sIGludCBleHBvbmVudCwgdWludDY0X3QgY29lZmZpY2llbnQpOworCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFbmNvZGVkRGF0YSYpIGNvbnN0OworICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRW5jb2RlZERhdGEmIGFub3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICFvcGVyYXRvcj09KGFub3RoZXIpOyB9CisKKyAgICAgICAgdWludDY0X3QgY29lZmZpY2llbnQo
KSBjb25zdCB7IHJldHVybiBtX2NvZWZmaWNpZW50OyB9CisgICAgICAgIGludCBjb3VudERpZ2l0
cygpIGNvbnN0OworICAgICAgICBpbnQgZXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX2V4cG9u
ZW50OyB9CisgICAgICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVybiAhaXNTcGVjaWFs
KCk7IH0KKyAgICAgICAgYm9vbCBpc05hTigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0Q2xhc3Mg
PT0gQ2xhc3NOYU47IH0KKyAgICAgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdENsYXNzID09IENsYXNzSW5maW5pdHkgfHwgbV9mb3JtYXRDbGFzcyA9PSBDbGFzc05h
TjsgfQorICAgICAgICBib29sIGlzWmVybygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0Q2xhc3Mg
PT0gQ2xhc3NaZXJvOyB9CisgICAgICAgIFNpZ24gc2lnbigpIGNvbnN0IHsgcmV0dXJuIG1fc2ln
bjsgfQorICAgICAgICB2b2lkIHNldFNpZ24oU2lnbiBzaWduKSB7IG1fc2lnbiA9IHNpZ247IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIGVudW0gRm9ybWF0Q2xhc3MgeworICAgICAgICAgICAg
Q2xhc3NJbmZpbml0eSwKKyAgICAgICAgICAgIENsYXNzTm9ybWFsLAorICAgICAgICAgICAgQ2xh
c3NOYU4sCisgICAgICAgICAgICBDbGFzc1plcm8sCisgICAgICAgIH07CisKKyAgICAgICAgRW5j
b2RlZERhdGEoU2lnbiwgRm9ybWF0Q2xhc3MpOworICAgICAgICBGb3JtYXRDbGFzcyBmb3JtYXRD
bGFzcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0Q2xhc3M7IH0KKworICAgICAgICB1aW50NjRf
dCBtX2NvZWZmaWNpZW50OworICAgICAgICBpbnQxNl90IG1fZXhwb25lbnQ7CisgICAgICAgIEZv
cm1hdENsYXNzIG1fZm9ybWF0Q2xhc3M7CisgICAgICAgIFNpZ24gbV9zaWduOworICAgIH07CisK
KyAgICBEZWNpbWFsKGludDMyX3QgPSAwKTsKKyAgICBEZWNpbWFsKFNpZ24sIGludCBleHBvbmVu
dCwgdWludDY0X3QgY29lZmZpY2llbnQpOworICAgIERlY2ltYWwoY29uc3QgRGVjaW1hbCYpOwor
CisgICAgRGVjaW1hbCYgb3BlcmF0b3I9KGNvbnN0IERlY2ltYWwmKTsKKyAgICBEZWNpbWFsJiBv
cGVyYXRvcis9KGNvbnN0IERlY2ltYWwmKTsKKyAgICBEZWNpbWFsJiBvcGVyYXRvci09KGNvbnN0
IERlY2ltYWwmKTsKKyAgICBEZWNpbWFsJiBvcGVyYXRvcio9KGNvbnN0IERlY2ltYWwmKTsKKyAg
ICBEZWNpbWFsJiBvcGVyYXRvci89KGNvbnN0IERlY2ltYWwmKTsKKworICAgIERlY2ltYWwgb3Bl
cmF0b3ItKCkgY29uc3Q7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVjaW1hbCYpIGNv
bnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgYm9v
bCBvcGVyYXRvcjwoY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgRGVjaW1hbCYp
IGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisKKyAg
ICBEZWNpbWFsIG9wZXJhdG9yKyhjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCBv
cGVyYXRvci0oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIERlY2ltYWwgb3BlcmF0b3IqKGNv
bnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIG9wZXJhdG9yLyhjb25zdCBEZWNpbWFs
JikgY29uc3Q7CisKKyAgICBib29sIGlzRmluaXRlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlz
RmluaXRlKCk7IH0KKyAgICBib29sIGlzTmFOKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzTmFO
KCk7IH0KKyAgICBib29sIGlzTmVnYXRpdmUoKSBjb25zdCB7IHJldHVybiBzaWduKCkgPT0gTmVn
YXRpdmU7IH0KKyAgICBib29sIGlzUG9zaXRpdmUoKSBjb25zdCB7IHJldHVybiBzaWduKCkgPT0g
UG9zaXRpdmU7IH0KKyAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5p
c1NwZWNpYWwoKTsgfQorICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlz
WmVybygpOyB9CisKKyAgICBEZWNpbWFsIGFicygpIGNvbnN0OworICAgIERlY2ltYWwgY2VpbGlu
ZygpIGNvbnN0OworICAgIERlY2ltYWwgZmxvb3IoKSBjb25zdDsKKyAgICBEZWNpbWFsIHJlbWFp
bmRlcihjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCByb3VuZCgpIGNvbnN0Owor
CisgICAgLy8gTm90ZTogdG9TdHJpbmcgbWV0aG9kIHN1cHBvcnRzIGluZmluaXR5IGFuZCBuYW4g
YnV0IGZvcm1TdHJpbmcgbm90LgorICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCisgICAg
Ly8gZnJvbVN0cmluZyBzdXBwb3J0cyBmb2xsb3dpbmcgc3ludGF4IEVCTkY6CisgICAgLy8gIG51
bWJlciA6Oj0gc2lnbj8gZGlnaXQrICgnLicgZGlnaXQqKSAoZXhwb25lbnQtbWFya2VyIHNpZ24/
IGRpZ2l0Kyk/CisgICAgLy8gICAgICAgICAgfCBzaWduPyAnLicgZGlnaXQrIChleHBvbmVudC1t
YXJrZXIgc2lnbj8gZGlnaXQrKT8KKyAgICAvLyAgc2lnbiA6Oj0gJysnIHwgJy0nCisgICAgLy8g
IGV4cG9uZW50LW1hcmtlciA6Oj0gJ2UnIHwgJ0UnCisgICAgLy8gIGRpZ2l0IDo6PSAnMCcgfCAn
MScgfCAuLi4gfCAnOScKKyAgICAvLyBOb3RlOiBmcm9tU3RyaW5nIGRvZXNuJ3Qgc3VwcG9ydCAi
aW5maW5pdHkiIGFuZCAibmFuIi4KKyAgICBzdGF0aWMgRGVjaW1hbCBmcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYpOworICAgIHN0YXRpYyBEZWNpbWFsIGluZmluaXR5KFNpZ24pOworICAgIHN0YXRp
YyBEZWNpbWFsIG5hbigpOworICAgIHN0YXRpYyBEZWNpbWFsIHplcm8oU2lnbik7CisKKyAgICAv
LyBZb3Ugc2hvdWxkIG5vdCB1c2UgYmVsb3cgbWV0aG9kcy4gV2UgZXhwb3NlIHRoZW0gZm9yIHVu
aXQgdGVzdGluZy4KKyAgICBleHBsaWNpdCBEZWNpbWFsKGNvbnN0IEVuY29kZWREYXRhJik7Cisg
ICAgY29uc3QgRW5jb2RlZERhdGEmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisK
K3ByaXZhdGU6CisgICAgc3RydWN0IEFsaWduZWRPcGVyYW5kcyB7CisgICAgICAgIHVpbnQ2NF90
IGxoc0NvZWZmaWNpZW50OworICAgICAgICB1aW50NjRfdCByaHNDb2VmZmljaWVudDsKKyAgICAg
ICAgaW50IGV4cG9uZW50OworICAgIH07CisKKyAgICBEZWNpbWFsKGRvdWJsZSk7CisgICAgRGVj
aW1hbCBjb21wYXJlVG8oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworCisgICAgc3RhdGljIEFsaWdu
ZWRPcGVyYW5kcyBhbGlnbk9wZXJhbmRzKGNvbnN0IERlY2ltYWwmIGxocywgY29uc3QgRGVjaW1h
bCYgcmhzKTsKKyAgICBzdGF0aWMgaW5saW5lIFNpZ24gaW52ZXJ0U2lnbihTaWduIHNpZ24pIHsg
cmV0dXJuIHNpZ24gPT0gTmVnYXRpdmUgPyBQb3NpdGl2ZSA6IE5lZ2F0aXZlOyB9CisKKyAgICBp
bnQgZXhwb25lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRmluaXRlKCkpOwor
ICAgICAgICByZXR1cm4gbV9kYXRhLmV4cG9uZW50KCk7CisgICAgfQorCisgICAgU2lnbiBzaWdu
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpZ24oKTsgfQorCisgICAgRW5jb2RlZERhdGEgbV9k
YXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGVjaW1hbF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCAxYTY4OGJiY2NjMmJhYjhkMDdjZmNl
NTM4ZmRjNTcwMGQzNGViMmI5Li4zMGM1MzEzYzIzMTMxNWIzNDViNzg1YjE2ZjViMDNmM2QwMTUx
YjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTk1LDYgKzk1LDcgQEAKICAg
ICAgICAgICAgICd0ZXN0cy9DbGlwYm9hcmRDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9Db21wb3NpdG9yRmFrZUdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0NvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCcsCisgICAgICAgICAg
ICAndGVzdHMvRGVjaW1hbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRHJhd2luZ0J1ZmZlckNocm9taXVtVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0V2ZW50TGlzdGVuZXJUZXN0LmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVjaW1hbFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4NGVj
MGZlZTM3ZjZjNWJlMjNkYjlhZTRhMTE1ODBkZWRiMjUxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcApAQCAtMCwwICsxLDk1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZWNpbWFsLmgiCisKKyNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6b3N0cmVh
bSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBEZWNpbWFsJiBkZWNpbWFsKQor
eworICAgIERlY2ltYWw6OkVuY29kZWREYXRhIGRhdGEgPSBkZWNpbWFsLnZhbHVlKCk7CisgICAg
cmV0dXJuIG9zIAorICAgICAgICA8PCAiZW5jb2RlKCIgPDwgU3RyaW5nOjpudW1iZXIoZGF0YS5j
b2VmZmljaWVudCgpKS5hc2NpaSgpLmRhdGEoKQorICAgICAgICA8PCAiLCAiIDw8IFN0cmluZzo6
bnVtYmVyKGRhdGEuZXhwb25lbnQoKSkuYXNjaWkoKS5kYXRhKCkKKyAgICAgICAgPDwgIiwgIiA8
PCAoZGF0YS5zaWduKCkgPT0gRGVjaW1hbDo6TmVnYXRpdmUgPyAiTmVnYXRpdmUiIDogIlBvc2l0
aXZlIikKKyAgICAgICAgPDwgIik9IiA8PCBkZWNpbWFsLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKKy8vIFNpbXVsYXRlIFdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UKK2NsYXNzIERlY2ltYWxT
dGVwUmFuZ2UgeworcHVibGljOgorICAgIERlY2ltYWwgbWF4aW11bTsKKyAgICBEZWNpbWFsIG1p
bmltdW07CisgICAgRGVjaW1hbCBzdGVwOworCisgICAgRGVjaW1hbFN0ZXBSYW5nZShjb25zdCBE
ZWNpbWFsJiBtaW5pbXVtLCBjb25zdCBEZWNpbWFsJiBtYXhpbXVtLCBjb25zdCBEZWNpbWFsJiBz
dGVwKQorICAgICAgICA6IG1heGltdW0obWF4aW11bSkKKyAgICAgICAgLCBtaW5pbXVtKG1pbmlt
dW0pCisgICAgICAgICwgc3RlcChzdGVwKQorICAgIHsKKyAgICB9CisKKyAgICBEZWNpbWFsIGNs
YW1wVmFsdWUoRGVjaW1hbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IERlY2lt
YWwgcmVzdWx0ID0gbWluaW11bSArICgodmFsdWUgLSBtaW5pbXVtKSAvIHN0ZXApLnJvdW5kKCkg
KiBzdGVwOworICAgICAgICBBU1NFUlQocmVzdWx0LmlzRmluaXRlKCkpOworICAgICAgICByZXR1
cm4gcmVzdWx0ID4gbWF4aW11bSA/IHJlc3VsdCAtIHN0ZXAgOiByZXN1bHQ7CisgICAgfQorfTsK
KworY2xhc3MgRGVjaW1hbFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3Rl
ZDoKKyAgICB0eXBlZGVmIERlY2ltYWw6OlNpZ24gU2lnbjsKKyAgICBwcm90ZWN0ZWQ6IHN0YXRp
YyBjb25zdCBTaWduIFBvc2l0aXZlID0gRGVjaW1hbDo6UG9zaXRpdmU7CisgICAgcHJvdGVjdGVk
OiBzdGF0aWMgY29uc3QgU2lnbiBOZWdhdGl2ZSA9IERlY2ltYWw6Ok5lZ2F0aXZlOworCisgICAg
RGVjaW1hbCBlbmNvZGUodWludDY0X3QgY29lZmZpY2llbnQsIGludCBleHBvbmVudCwgU2lnbiBz
aWduKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERlY2ltYWwoc2lnbiwgZXhwb25lbnQsIGNvZWZm
aWNpZW50KTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQ6IERlY2ltYWwgZnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIHJldHVybiBEZWNpbWFsOjpmcm9tU3Ry
aW5nKHN0cmluZyk7CisgICAgfQorCisgICAgcHJvdGVjdGVkOiBTdHJpbmcgc3RlcERvd24oY29u
c3QgU3RyaW5nJiBtaW5pbXVtLCBjb25zdCBTdHJpbmcmIG1heGltdW0sIGNvbnN0IFN0cmluZyYg
c3RlcCwgY29uc3QgU3RyaW5nJiB2YWx1ZVN0cmluZywgaW50IG51bWJlck9mU3RlcFRpbWVzKQor
ICAgIHsKKyAgICAgICAgRGVjaW1hbFN0ZXBSYW5nZSBzdGVwUmFuZ2UoZnJvbVN0cmluZyhtaW5p
bXVtKSwgZnJvbVN0cmluZyhtYXhpbXVtKSwgZnJvbVN0cmluZyhzdGVwKSk7CisgICAgICAgIERl
Y2ltYWwgdmFsdWUgPSBmcm9tU3RyaW5nKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1iZXJPZlN0ZXBUaW1lczsgKytpKSB7CisgICAgICAgICAgICB2YWx1ZSAt
PSBzdGVwUmFuZ2Uuc3RlcDsKKyAgICAgICAgICAgIHZhbHVlID0gc3RlcFJhbmdlLmNsYW1wVmFs
dWUodmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwor
ICAgIH0KKworICAgIHByb3RlY3RlZDogU3RyaW5nIHN0ZXBVcChjb25zdCBTdHJpbmcmIG1pbmlt
dW0sIGNvbnN0IFN0cmluZyYgbWF4aW11bSwgY29uc3QgU3RyaW5nJiBzdGVwLCBjb25zdCBTdHJp
bmcmIHZhbHVlU3RyaW5nLCBpbnQgbnVtYmVyT2ZTdGVwVGltZXMpCisgICAgeworICAgICAgICBE
ZWNpbWFsU3RlcFJhbmdlIHN0ZXBSYW5nZShmcm9tU3RyaW5nKG1pbmltdW0pLCBmcm9tU3RyaW5n
KG1heGltdW0pLCBmcm9tU3RyaW5nKHN0ZXApKTsKKyAgICAgICAgRGVjaW1hbCB2YWx1ZSA9IGZy
b21TdHJpbmcodmFsdWVTdHJpbmcpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJl
ck9mU3RlcFRpbWVzOyArK2kpIHsKKyAgICAgICAgICAgIHZhbHVlICs9IHN0ZXBSYW5nZS5zdGVw
OworICAgICAgICAgICAgdmFsdWUgPSBzdGVwUmFuZ2UuY2xhbXBWYWx1ZSh2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CisgICAgfQorfTsKKworVEVT
VF9GKERlY2ltYWxUZXN0LCBBYnMpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3Np
dGl2ZSksIGVuY29kZSgwLCAwLCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMCwgMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAg
IEVYUEVDVF9FUShlbmNvZGUoMCwgMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDAsIDEwLCBQb3NpdGl2
ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMTAsIFBvc2l0aXZlKSwgZW5jb2Rl
KDAsIDEwLCBOZWdhdGl2ZSkuYWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAs
IFBvc2l0aXZlKSwgZW5jb2RlKDAsIC0xMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDAsIC0xMCwgUG9zaXRpdmUpLCBlbmNvZGUoMCwgLTEwLCBOZWdhdGl2ZSkuYWJz
KCkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAw
LCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUp
LCBlbmNvZGUoMSwgMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUo
MSwgMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwLCBOZWdhdGl2ZSku
YWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAsIFBvc2l0aXZlKSwgZW5jb2Rl
KDEsIC0xMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMCwg
UG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwLCBOZWdhdGl2ZSkuYWJzKCkpOworfQorCitURVNUX0Yo
RGVjaW1hbFRlc3QsIEFic0JpZ0V4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwg
MTAwMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMDAsIE5lZ2F0
aXZlKS5hYnMoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQWJzU21hbGxFeHBvbmVudCkK
K3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAt
MTAwMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMDAwLCBQ
b3NpdGl2ZSksIGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpLmFicygpKTsKK30KKworVEVTVF9G
KERlY2ltYWxUZXN0LCBBYnNTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFs
OjppbmZpbml0eShQb3NpdGl2ZSksIERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5hYnMoKSk7
CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgRGVjaW1hbDo6aW5m
aW5pdHkoTmVnYXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERl
Y2ltYWw6Om5hbigpLmFicygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBBZGQpCit7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoMCkgKyBEZWNpbWFs
KDApKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSArIERlY2ltYWwoLTEp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgtMSkgKyBEZWNpbWFsKDIpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDk5KSArIERl
Y2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwLCAwLCBOZWdhdGl2ZSksIERlY2lt
YWwoLTUwKSArIERlY2ltYWwoLTUwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAw
MDAwMDAwLCAzNSwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgNTAsIFBvc2l0aXZlKSArIERlY2ltYWwo
MSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwMDAwMDAwMDAwMDAwMCwgMzUsIFBvc2l0aXZl
KSwgRGVjaW1hbCgxKSArIGVuY29kZSgxLCA1MCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEwMDAwMDAwMDAxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMCwgUG9zaXRpdmUp
ICsgRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMSwgMCwgUG9z
aXRpdmUpLCBEZWNpbWFsKDEpICsgZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAr
IGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgLTEwMjIs
IFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgLTEwMjIs
IFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQWRkQmlnRXhwb25lbnQpCit7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIy
LCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDIsIDEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSArIGVuY29k
ZSgxLCAxMDIyLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQ
b3NpdGl2ZSksIGVuY29kZShzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCksIDEw
MjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShl
bmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpICsgZW5j
b2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEFkZFNt
YWxsRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3NpdGl2ZSksIGVu
Y29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgyLCAtMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBv
c2l0aXZlKSArIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2lt
YWxUZXN0LCBBZGRTcGVjaWFsVmFsdWVzKQoreworICAgIGNvbnN0IERlY2ltYWwgSW5maW5pdHko
RGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5m
aW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE5h
TihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVjaW1hbCBUZW4oMTApOworCisgICAgRVhQ
RUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSArIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFO
LCBJbmZpbml0eSArIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5m
aW5pdHkgKyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5m
aW5pdHkgKyBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgSW5maW5p
dHkgKyBUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgVGVuICsgSW5maW5pdHkpOworICAg
IEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5ICsgVGVuKTsKKyAgICBFWFBF
Q1RfRVEoTWludXNJbmZpbml0eSwgVGVuICsgTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1Rf
RVEoTmFOLCBOYU4gKyBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiArIFRlbik7CisgICAg
RVhQRUNUX0VRKE5hTiwgVGVuICsgTmFOKTsKKworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAtIElu
ZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLSBNaW51c0luZmluaXR5KTsKKyAgICBF
WFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAtIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJ
bmZpbml0eSAtIE5hTik7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQ2VpbGluZykKK3sKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKS5jZWlsaW5nKCkpOworICAgIEVYUEVD
VF9FUShEZWNpbWFsKDIpLCBlbmNvZGUoMTEsIC0xLCBQb3NpdGl2ZSkuY2VpbGluZygpKTsKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDEzLCAtMSwgUG9zaXRpdmUpLmNlaWxpbmco
KSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMiksIGVuY29kZSgxNSwgLTEsIFBvc2l0aXZlKS5j
ZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDIpLCBlbmNvZGUoMTksIC0xLCBQb3Np
dGl2ZSkuY2VpbGluZygpKTsKKworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgRGVjaW1hbCgt
MSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIGVuY29kZSgxMSwgLTEs
IE5lZ2F0aXZlKS5jZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgZW5jb2Rl
KDEzLCAtMSwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEp
LCBlbmNvZGUoMTUsIC0xLCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbCgtMSksIGVuY29kZSgxOSwgLTEsIE5lZ2F0aXZlKS5jZWlsaW5nKCkpOworfQorCitURVNU
X0YoRGVjaW1hbFRlc3QsIENlaWxpbmdCaWdFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDEsIDEwMDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKS5jZWlsaW5n
KCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpLCBlbmNvZGUoMSwg
MTAwMCwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQ2Vp
bGluZ1NtYWxsRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2
ZSksIGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgwLCAwLCBOZWdhdGl2ZSksIGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpLmNlaWxp
bmcoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQ2VpbGluZ1NwZWNpYWxWYWx1ZXMpCit7
CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgRGVjaW1hbDo6aW5m
aW5pdHkoUG9zaXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmlu
aXR5KE5lZ2F0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmNlaWxpbmcoKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBEZWNpbWFsOjpuYW4oKS5jZWlsaW5nKCkpOwor
fQorCitURVNUX0YoRGVjaW1hbFRlc3QsIENvbXBhcmUpCit7CisgICAgRVhQRUNUX1RSVUUoRGVj
aW1hbCgwKSA9PSBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApICE9IERl
Y2ltYWwoMSkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgPCBEZWNpbWFsKDEpKTsKKyAg
ICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApIDw9IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9UUlVF
KERlY2ltYWwoMCkgPiBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKSA+
PSBEZWNpbWFsKDApKTsKKworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpID09IERlY2ltYWwo
MikpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpICE9IERlY2ltYWwoMSkpOworICAgIEVY
UEVDVF9GQUxTRShEZWNpbWFsKDEpIDwgRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0ZBTFNFKERl
Y2ltYWwoMSkgPD0gRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPiBE
ZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxKSA+PSBEZWNpbWFsKDIpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDb21wYXJlQmlnRXhwb25lbnQpCit7CisgICAgRVhQ
RUNUX1RSVUUoZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSA9PSBlbmNvZGUoMSwgMTAwMCwgUG9z
aXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSAhPSBl
bmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIDEw
MDAsIFBvc2l0aXZlKSA8IGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9U
UlVFKGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkgPD0gZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZl
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkgPiBlbmNvZGUo
MSwgMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMSwgMTAwMCwgUG9z
aXRpdmUpID49IGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkpOworCisgICAgRVhQRUNUX1RSVUUo
ZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSA9PSBlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSAhPSBlbmNvZGUoMSwg
MTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIDEwMDAsIE5lZ2F0
aXZlKSA8IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29k
ZSgxLCAxMDAwLCBOZWdhdGl2ZSkgPD0gZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkgPiBlbmNvZGUoMSwgMTAwMCwg
TmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpID49
IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgy
LCAxMDAwLCBQb3NpdGl2ZSkgPT0gZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQ
RUNUX1RSVUUoZW5jb2RlKDIsIDEwMDAsIFBvc2l0aXZlKSAhPSBlbmNvZGUoMSwgMTAwMCwgUG9z
aXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDIsIDEwMDAsIFBvc2l0aXZlKSA8IGVu
Y29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwgMTAw
MCwgUG9zaXRpdmUpIDw9IGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9U
UlVFKGVuY29kZSgyLCAxMDAwLCBQb3NpdGl2ZSkgPiBlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUp
KTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMiwgMTAwMCwgUG9zaXRpdmUpID49IGVuY29kZSgx
LCAxMDAwLCBQb3NpdGl2ZSkpOworCisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAxMDAwLCBO
ZWdhdGl2ZSkgPT0gZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUo
ZW5jb2RlKDIsIDEwMDAsIE5lZ2F0aXZlKSAhPSBlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpKTsK
KyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMiwgMTAwMCwgTmVnYXRpdmUpIDwgZW5jb2RlKDEsIDEw
MDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDIsIDEwMDAsIE5lZ2F0aXZl
KSA8PSBlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2Rl
KDIsIDEwMDAsIE5lZ2F0aXZlKSA+IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkpOworICAgIEVY
UEVDVF9GQUxTRShlbmNvZGUoMiwgMTAwMCwgTmVnYXRpdmUpID49IGVuY29kZSgxLCAxMDAwLCBO
ZWdhdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIENvbXBhcmVTbWFsbEV4cG9uZW50
KQoreworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpID09IGVuY29k
ZSgxLCAtMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIC0xMDAw
LCBQb3NpdGl2ZSkgIT0gZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9G
QUxTRShlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSA8IGVuY29kZSgxLCAtMTAwMCwgUG9zaXRp
dmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSA8PSBlbmNv
ZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgxLCAtMTAw
MCwgUG9zaXRpdmUpID4gZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9U
UlVFKGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpID49IGVuY29kZSgxLCAtMTAwMCwgUG9zaXRp
dmUpKTsKKworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpID09IGVu
Y29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIC0x
MDAwLCBOZWdhdGl2ZSkgIT0gZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVD
VF9GQUxTRShlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSA8IGVuY29kZSgxLCAtMTAwMCwgTmVn
YXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSA8PSBl
bmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgxLCAt
MTAwMCwgTmVnYXRpdmUpID4gZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVD
VF9UUlVFKGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpID49IGVuY29kZSgxLCAtMTAwMCwgTmVn
YXRpdmUpKTsKKworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwgLTEwMDAsIFBvc2l0aXZlKSA9
PSBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDIs
IC0xMDAwLCBQb3NpdGl2ZSkgIT0gZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworICAgIEVY
UEVDVF9GQUxTRShlbmNvZGUoMiwgLTEwMDAsIFBvc2l0aXZlKSA8IGVuY29kZSgxLCAtMTAwMCwg
UG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDIsIC0xMDAwLCBQb3NpdGl2ZSkg
PD0gZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgy
LCAtMTAwMCwgUG9zaXRpdmUpID4gZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworICAgIEVY
UEVDVF9UUlVFKGVuY29kZSgyLCAtMTAwMCwgUG9zaXRpdmUpID49IGVuY29kZSgxLCAtMTAwMCwg
UG9zaXRpdmUpKTsKKworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwgLTEwMDAsIE5lZ2F0aXZl
KSA9PSBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUoZW5jb2Rl
KDIsIC0xMDAwLCBOZWdhdGl2ZSkgIT0gZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkpOworICAg
IEVYUEVDVF9UUlVFKGVuY29kZSgyLCAtMTAwMCwgTmVnYXRpdmUpIDwgZW5jb2RlKDEsIC0xMDAw
LCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgyLCAtMTAwMCwgTmVnYXRpdmUp
IDw9IGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2Rl
KDIsIC0xMDAwLCBOZWdhdGl2ZSkgPiBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAtMTAwMCwgTmVnYXRpdmUpID49IGVuY29kZSgxLCAtMTAw
MCwgTmVnYXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDb21wYXJlU3BlY2lhbFZh
bHVlcykKK3sKKyAgICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBv
c2l0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmlu
aXR5KE5lZ2F0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOwor
ICAgIGNvbnN0IERlY2ltYWwgWmVybyhEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKSk7CisgICAgY29u
c3QgRGVjaW1hbCBNaW51c1plcm8oRGVjaW1hbDo6emVybyhOZWdhdGl2ZSkpOworICAgIGNvbnN0
IERlY2ltYWwgVGVuKDEwKTsKKworICAgIEVYUEVDVF9UUlVFKFplcm8gPT0gWmVybyk7CisgICAg
RVhQRUNUX0ZBTFNFKFplcm8gIT0gWmVybyk7CisgICAgRVhQRUNUX0ZBTFNFKFplcm8gPCBaZXJv
KTsKKyAgICBFWFBFQ1RfVFJVRShaZXJvIDw9IFplcm8pOworICAgIEVYUEVDVF9GQUxTRShaZXJv
ID4gWmVybyk7CisgICAgRVhQRUNUX1RSVUUoWmVybyA+PSBaZXJvKTsKKworICAgIEVYUEVDVF9U
UlVFKFplcm8gPT0gTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoWmVybyAhPSBNaW51c1pl
cm8pOworICAgIEVYUEVDVF9GQUxTRShaZXJvIDwgTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfVFJV
RShaZXJvIDw9IE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0ZBTFNFKFplcm8gPiBNaW51c1plcm8p
OworICAgIEVYUEVDVF9UUlVFKFplcm8gPj0gTWludXNaZXJvKTsKKworICAgIEVYUEVDVF9UUlVF
KE1pbnVzWmVybyA9PSBaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNaZXJvICE9IFplcm8p
OworICAgIEVYUEVDVF9GQUxTRShNaW51c1plcm8gPCBaZXJvKTsKKyAgICBFWFBFQ1RfVFJVRShN
aW51c1plcm8gPD0gWmVybyk7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzWmVybyA+IFplcm8pOwor
ICAgIEVYUEVDVF9UUlVFKE1pbnVzWmVybyA+PSBaZXJvKTsKKworICAgIEVYUEVDVF9UUlVFKE1p
bnVzWmVybyA9PSBNaW51c1plcm8pOworICAgIEVYUEVDVF9GQUxTRShNaW51c1plcm8gIT0gTWlu
dXNaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNaZXJvIDwgTWludXNaZXJvKTsKKyAgICBF
WFBFQ1RfVFJVRShNaW51c1plcm8gPD0gTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWlu
dXNaZXJvID4gTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfVFJVRShNaW51c1plcm8gPj0gTWludXNa
ZXJvKTsKKworICAgIEVYUEVDVF9UUlVFKEluZmluaXR5ID09IEluZmluaXR5KTsKKyAgICBFWFBF
Q1RfRkFMU0UoSW5maW5pdHkgIT0gSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0
eSA8IEluZmluaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShJbmZpbml0eSA8PSBJbmZpbml0eSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5ID4gSW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKElu
ZmluaXR5ID49IEluZmluaXR5KTsKKworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0eSA9PSBUZW4p
OworICAgIEVYUEVDVF9UUlVFKEluZmluaXR5ICE9IFRlbik7CisgICAgRVhQRUNUX0ZBTFNFKElu
ZmluaXR5IDwgVGVuKTsKKyAgICBFWFBFQ1RfRkFMU0UoSW5maW5pdHkgPD0gVGVuKTsKKyAgICBF
WFBFQ1RfVFJVRShJbmZpbml0eSA+IFRlbik7CisgICAgRVhQRUNUX1RSVUUoSW5maW5pdHkgPj0g
VGVuKTsKKworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0eSA9PSBNaW51c0luZmluaXR5KTsKKyAg
ICBFWFBFQ1RfVFJVRShJbmZpbml0eSAhPSBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFM
U0UoSW5maW5pdHkgPCBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoSW5maW5pdHkg
PD0gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX1RSVUUoSW5maW5pdHkgPiBNaW51c0luZmlu
aXR5KTsKKyAgICBFWFBFQ1RfVFJVRShJbmZpbml0eSA+PSBNaW51c0luZmluaXR5KTsKKworICAg
IEVYUEVDVF9GQUxTRShJbmZpbml0eSA9PSBOYU4pOworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0
eSAhPSBOYU4pOworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0eSA8IE5hTik7CisgICAgRVhQRUNU
X0ZBTFNFKEluZmluaXR5IDw9IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5ID4gTmFO
KTsKKyAgICBFWFBFQ1RfRkFMU0UoSW5maW5pdHkgPj0gTmFOKTsKKworICAgIEVYUEVDVF9GQUxT
RShNaW51c0luZmluaXR5ID09IEluZmluaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShNaW51c0luZmlu
aXR5ICE9IEluZmluaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShNaW51c0luZmluaXR5IDwgSW5maW5p
dHkpOworICAgIEVYUEVDVF9UUlVFKE1pbnVzSW5maW5pdHkgPD0gSW5maW5pdHkpOworICAgIEVY
UEVDVF9GQUxTRShNaW51c0luZmluaXR5ID4gSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShN
aW51c0luZmluaXR5ID49IEluZmluaXR5KTsKKworICAgIEVYUEVDVF9GQUxTRShNaW51c0luZmlu
aXR5ID09IFRlbik7CisgICAgRVhQRUNUX1RSVUUoTWludXNJbmZpbml0eSAhPSBUZW4pOworICAg
IEVYUEVDVF9UUlVFKE1pbnVzSW5maW5pdHkgPCBUZW4pOworICAgIEVYUEVDVF9UUlVFKE1pbnVz
SW5maW5pdHkgPD0gVGVuKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNJbmZpbml0eSA+IFRlbik7
CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5maW5pdHkgPj0gVGVuKTsKKworICAgIEVYUEVDVF9U
UlVFKE1pbnVzSW5maW5pdHkgPT0gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE1p
bnVzSW5maW5pdHkgIT0gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5m
aW5pdHkgPCBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShNaW51c0luZmluaXR5IDw9
IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShNaW51c0luZmluaXR5ID4gTWludXNJ
bmZpbml0eSk7CisgICAgRVhQRUNUX1RSVUUoTWludXNJbmZpbml0eSA+PSBNaW51c0luZmluaXR5
KTsKKworICAgIEVYUEVDVF9GQUxTRShNaW51c0luZmluaXR5ID09IE5hTik7CisgICAgRVhQRUNU
X0ZBTFNFKE1pbnVzSW5maW5pdHkgIT0gTmFOKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNJbmZp
bml0eSA8IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5maW5pdHkgPD0gTmFOKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoTWludXNJbmZpbml0eSA+IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKE1p
bnVzSW5maW5pdHkgPj0gTmFOKTsKKworICAgIEVYUEVDVF9GQUxTRShOYU4gPT0gSW5maW5pdHkp
OworICAgIEVYUEVDVF9GQUxTRShOYU4gIT0gSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShO
YU4gPCBJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiA8PSBJbmZpbml0eSk7CisgICAg
RVhQRUNUX0ZBTFNFKE5hTiA+IEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOID49IElu
ZmluaXR5KTsKKworICAgIEVYUEVDVF9GQUxTRShOYU4gPT0gVGVuKTsKKyAgICBFWFBFQ1RfRkFM
U0UoTmFOICE9IFRlbik7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiA8IFRlbik7CisgICAgRVhQRUNU
X0ZBTFNFKE5hTiA8PSBUZW4pOworICAgIEVYUEVDVF9GQUxTRShOYU4gPiBUZW4pOworICAgIEVY
UEVDVF9GQUxTRShOYU4gPj0gVGVuKTsKKworICAgIEVYUEVDVF9GQUxTRShOYU4gPT0gTWludXNJ
bmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiAhPSBNaW51c0luZmluaXR5KTsKKyAgICBF
WFBFQ1RfRkFMU0UoTmFOIDwgTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiA8
PSBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOID4gTWludXNJbmZpbml0eSk7
CisgICAgRVhQRUNUX0ZBTFNFKE5hTiA+PSBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9U
UlVFKE5hTiA9PSBOYU4pOworICAgIEVYUEVDVF9GQUxTRShOYU4gIT0gTmFOKTsKKyAgICBFWFBF
Q1RfRkFMU0UoTmFOIDwgTmFOKTsKKyAgICBFWFBFQ1RfVFJVRShOYU4gPD0gTmFOKTsKKyAgICBF
WFBFQ1RfRkFMU0UoTmFOID4gTmFOKTsKKyAgICBFWFBFQ1RfVFJVRShOYU4gPj0gTmFOKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBEaXZpc2lvbikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgwKSAvIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMiwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKDIpIC8gRGVjaW1hbCgtMSkpOworICAg
IEVYUEVDVF9FUShlbmNvZGUoNSwgLTEsIE5lZ2F0aXZlKSwgRGVjaW1hbCgtMSkgLyBEZWNpbWFs
KDIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDk5LCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoOTkp
IC8gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoLTUwKSAv
IERlY2ltYWwoLTUwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzMzMzMzMzMzMzMzMzMzMzLCAt
MTYsIFBvc2l0aXZlKSwgRGVjaW1hbCgxKSAvIERlY2ltYWwoMykpOworICAgIEVYUEVDVF9FUShl
bmNvZGUoMTIzNDU2Nzg5MDEyMzQsIC0xLCBQb3NpdGl2ZSksIGVuY29kZSgxMjM0NTY3ODkwMTIz
NCwgMCwgUG9zaXRpdmUpIC8gRGVjaW1hbCgxMCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3Qs
IERpdmlzaW9uQmlnRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQ
b3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgLyBlbmNvZGUoMSwgMCwgUG9zaXRp
dmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEw
MjIsIFBvc2l0aXZlKSAvIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkg
LyBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwg
RGl2aXNpb25TbWFsbEV4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEwMjIs
IFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgLyBlbmNvZGUoMSwgMCwgUG9z
aXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEs
IC0xMDIyLCBQb3NpdGl2ZSkgLyBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSk7Cit9CisKK1RF
U1RfRihEZWNpbWFsVGVzdCwgRGl2aXNpb25TcGVjaWFsVmFsdWVzKQoreworICAgIGNvbnN0IERl
Y2ltYWwgSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpKTsKKyAgICBjb25zdCBE
ZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpKTsKKyAgICBj
b25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29uc3QgRGVjaW1hbCBaZXJv
KERlY2ltYWw6Onplcm8oUG9zaXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzWmVybyhE
ZWNpbWFsOjp6ZXJvKE5lZ2F0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBUZW4oMTApOworICAg
IGNvbnN0IERlY2ltYWwgTWludXNUZW4oLTEwKTsKKworICAgIEVYUEVDVF9FUShOYU4sIFplcm8g
LyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBaZXJvIC8gTWludXNaZXJvKTsKKyAgICBFWFBF
Q1RfRVEoTmFOLCBNaW51c1plcm8gLyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c1pl
cm8gLyBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gLyBaZXJvKTsK
KyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgVGVuIC8gTWludXNaZXJvKTsKKyAgICBFWFBF
Q1RfRVEoTWludXNJbmZpbml0eSwgTWludXNUZW4gLyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoSW5m
aW5pdHksIE1pbnVzVGVuIC8gTWludXNaZXJvKTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0eSwg
SW5maW5pdHkgLyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgSW5maW5pdHkg
LyBNaW51c1plcm8pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5
IC8gWmVybyk7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBNaW51c0luZmluaXR5IC8gTWludXNa
ZXJvKTsKKworICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5IC8gSW5maW5pdHkpOworICAgIEVY
UEVDVF9FUShOYU4sIEluZmluaXR5IC8gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5h
TiwgTWludXNJbmZpbml0eSAvIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0lu
ZmluaXR5IC8gTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoWmVybywgVGVuIC8gSW5m
aW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c1plcm8sIFRlbiAvIE1pbnVzSW5maW5pdHkpOwor
ICAgIEVYUEVDVF9FUShNaW51c1plcm8sIE1pbnVzVGVuIC8gSW5maW5pdHkpOworICAgIEVYUEVD
VF9FUShaZXJvLCBNaW51c1RlbiAvIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKE5h
TiwgTmFOIC8gTmFOKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLyBUZW4pOworICAgIEVYUEVD
VF9FUShOYU4sIFRlbiAvIE5hTik7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLyBJbmZpbml0
eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC8gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNU
X0VRKE5hTiwgSW5maW5pdHkgLyBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5p
dHkgLyBOYU4pOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEVuY29kZWREYXRhKQoreworICAg
IEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMCwgMCwgUG9zaXRpdmUp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIE5lZ2F0aXZlKSwgZW5jb2RlKDAsIDAsIE5l
Z2F0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoMSkpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMSwgMCwgTmVnYXRpdmUpLCBlbmNvZGUoMSwgMCwgTmVnYXRpdmUpKTsK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBlbmNvZGUoMSwgMjAw
MCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSksIGVu
Y29kZSgxLCAtMjAwMCwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBGbG9v
cikKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKS5mbG9vcigpKTsKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZW5jb2RlKDExLCAtMSwgUG9zaXRpdmUpLmZsb29yKCkp
OworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBlbmNvZGUoMTMsIC0xLCBQb3NpdGl2ZSkuZmxv
b3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIGVuY29kZSgxNSwgLTEsIFBvc2l0aXZl
KS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZW5jb2RlKDE5LCAtMSwgUG9z
aXRpdmUpLmZsb29yKCkpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBEZWNpbWFsKC0x
KS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMiksIGVuY29kZSgxMSwgLTEsIE5l
Z2F0aXZlKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMiksIGVuY29kZSgxMywg
LTEsIE5lZ2F0aXZlKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMiksIGVuY29k
ZSgxNSwgLTEsIE5lZ2F0aXZlKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMiks
IGVuY29kZSgxOSwgLTEsIE5lZ2F0aXZlKS5mbG9vcigpKTsKK30KKworVEVTVF9GKERlY2ltYWxU
ZXN0LCBGbG9vckJpZ0V4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAwMCwg
UG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpLCBlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUp
LmZsb29yKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEZsb29yU21hbGxFeHBvbmVudCkK
K3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMDAw
LCBQb3NpdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBOZWdhdGl2
ZSksIGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpLmZsb29yKCkpOworfQorCitURVNUX0YoRGVj
aW1hbFRlc3QsIEZsb29yU3BlY2lhbFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6
aW5maW5pdHkoUG9zaXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkuZmxvb3IoKSk7
CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSwgRGVjaW1hbDo6aW5m
aW5pdHkoTmVnYXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwg
RGVjaW1hbDo6bmFuKCkuZmxvb3IoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgRnJvbUlu
dDMyKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDAp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgxKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoLTEpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDEwMCkpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMTAwLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoLTEwMCkpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMHg3RkZGRkZGRiwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgweDgw
MDAwMDAwdSwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgRnJvbVN0cmluZykKK3sKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMCIpKTsKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTAiKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIGZyb21TdHJpbmcoIjEiKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgxLCAwLCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0xIikpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsKDEpLCBmcm9tU3RyaW5nKCIwMSIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDMs
IDAsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiKzMiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgw
LCAzLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjBFMyIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDUsIC0xLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIi41IikpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMTAwLCAwLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjEwMCIpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEwMCwgMCwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMTAwIikpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMTIzLCAtMiwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxLjIzIikpOworICAg
IEVYUEVDVF9FUShlbmNvZGUoMTIzLCAtMiwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMS4yMyIp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgOCwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIx
LjIzRTEwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCA4LCBOZWdhdGl2ZSksIGZyb21T
dHJpbmcoIi0xLjIzRTEwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCA4LCBQb3NpdGl2
ZSksIGZyb21TdHJpbmcoIjEuMjNFKzEwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCA4
LCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0xLjIzRSsxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDEyMywgLTEyLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjEuMjNFLTEwIikpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMTIzLCAtMTIsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTEuMjNFLTEw
IikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoNSwgLTcsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygi
MC4wMDAwMDA1IikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBmcm9t
U3RyaW5nKCIwZTk5OTkiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0zLCBQb3NpdGl2
ZSksIGZyb21TdHJpbmcoIjAuMTIzIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgLTIsIFBv
c2l0aXZlKSwgZnJvbVN0cmluZygiMDAuMDAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAy
LCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjFFMiIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6
aW5maW5pdHkoUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxRTIwMDAwIikpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMUUtMjAwMDAiKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxMDAwLCAxMDIzLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjFFMTAy
NiIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSksIGZyb21TdHJpbmco
IjFFLTEwMjYiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwg
ZnJvbVN0cmluZygiMTIzNDU2Nzg5MEUxMDM2IikpOworCisgICAgLy8gMl4xMDI0CisgICAgY29u
c3QgdWludDY0X3QgbGVhZGluZ0RpZ2l0c09mMlBvd2VyT2YxMDI0ID0gVUlOVDY0X0MoMTc5NzY5
MzEzNDg2MjMxNTkpOworICAgIEVYUEVDVF9FUShlbmNvZGUobGVhZGluZ0RpZ2l0c09mMlBvd2Vy
T2YxMDI0LCAyOTIsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMTc5NzY5MzEzNDg2MjMxNTkwNzcy
OTMwNTE5MDc4OTAyNDczMzYxNzk3Njk3ODk0MjMwNjU3MjczNDMwMDgxMTU3NzMyNjc1ODA1NTAw
OTYzMTMyNzA4NDc3MzIyNDA3NTM2MDIxMTIwMTEzODc5ODcxMzkzMzU3NjU4Nzg5NzY4ODE0NDE2
NjIyNDkyODQ3NDMwNjM5NDc0MTI0Mzc3NzY3ODkzNDI0ODY1NDg1Mjc2MzAyMjE5NjAxMjQ2MDk0
MTE5NDUzMDgyOTUyMDg1MDA1NzY4ODM4MTUwNjgyMzQyNDYyODgxNDczOTEzMTEwNTQwODI3MjM3
MTYzMzUwNTEwNjg0NTg2Mjk4MjM5OTQ3MjQ1OTM4NDc5NzE2MzA0ODM1MzU2MzI5NjI0MjI0MTM3
MjE2IikpOworfQorCisvLyBUaGVzZSBzdHJpbmdzIGFyZSBsb29rIGxpa2UgcHJvcGVyIG51bWJl
ciwgYnV0IHdlIGRvbid0IGFjY2VwdCB0aGVtLgorVEVTVF9GKERlY2ltYWxUZXN0LCBGcm9tU3Ry
aW5nTGlrZU51bWJlcikKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJp
bmcoIiAxMjMgIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygi
MSwyMzQiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCJJTkYi
KSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgZnJvbVN0cmluZ1RydW5jYXRlZCkKK3sKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIngiKSk7CisgICAgRVhQRUNU
X0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIwLiIpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjF4IikpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWw6
Om5hbigpLCBmcm9tU3RyaW5nKCIxRXgiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigp
LCBmcm9tU3RyaW5nKCIxRTJ4IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJv
bVN0cmluZygiMUUreCIpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBNdWx0aXBsaWNhdGlv
bikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgwKSAq
IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgMCwgTmVnYXRpdmUpLCBEZWNp
bWFsKDIpICogRGVjaW1hbCgtMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgMCwgTmVnYXRp
dmUpLCBEZWNpbWFsKC0xKSAqIERlY2ltYWwoMikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoOTks
IDAsIFBvc2l0aXZlKSwgRGVjaW1hbCg5OSkgKiBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDI1MDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgtNTApICogRGVjaW1hbCgtNTApKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBNdWx0aXBsaWNhdGlvbkJpZ0V4cG9uZW50KQorewor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwg
UG9zaXRpdmUpICogZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2lt
YWw6OmluZmluaXR5KFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAqIGVuY29k
ZSgxLCAxMDIyLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMjIsIFBvc2l0
aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAqIGVuY29kZSgxLCAtMTAwMCwgUG9zaXRp
dmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBNdWx0aXBsaWNhdGlvblNtYWxsRXhwb25l
bnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUo
MSwgLTEwMjIsIFBvc2l0aXZlKSAqIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAq
IGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBN
dWx0aXBsaWNhdGlvblNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29uc3QgRGVjaW1hbCBJbmZpbml0
eShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWludXNJ
bmZpbml0eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwg
TmFOKERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigxMCk7CisgICAgY29u
c3QgRGVjaW1hbCBNaW51c1RlbigtMTApOworICAgIGNvbnN0IERlY2ltYWwgWmVybyhEZWNpbWFs
Ojp6ZXJvKFBvc2l0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBNaW51c1plcm8oRGVjaW1hbDo6
emVybyhOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSAqIElu
ZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgSW5maW5pdHkgKiBNaW51c0lu
ZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZpbml0eSAqIElu
ZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKiBNaW51c0lu
ZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5ICogWmVybyk7CisgICAgRVhQ
RUNUX0VRKE5hTiwgWmVybyAqIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE1p
bnVzSW5maW5pdHkgKiBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICog
WmVybyk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAqIE1pbnVzWmVybyk7CisgICAg
RVhQRUNUX0VRKE5hTiwgTWludXNaZXJvICogTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VR
KE5hTiwgTWludXNJbmZpbml0eSAqIE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWlu
dXNJbmZpbml0eSAqIE1pbnVzWmVybyk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIEluZmlu
aXR5ICogVGVuKTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIFRlbiAqIEluZmluaXR5KTsKKyAg
ICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZpbml0eSAqIFRlbik7CisgICAgRVhQ
RUNUX0VRKE1pbnVzSW5maW5pdHksIFRlbiAqIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNU
X0VRKE1pbnVzSW5maW5pdHksIEluZmluaXR5ICogTWludXNUZW4pOworICAgIEVYUEVDVF9FUShN
aW51c0luZmluaXR5LCBNaW51c1RlbiAqIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoSW5maW5p
dHksIE1pbnVzSW5maW5pdHkgKiBNaW51c1Rlbik7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBN
aW51c1RlbiAqIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKE5hTiwgTmFOICogTmFO
KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gKiBUZW4pOworICAgIEVYUEVDVF9FUShOYU4sIFRl
biAqIE5hTik7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gKiBJbmZpbml0eSk7CisgICAgRVhQ
RUNUX0VRKE5hTiwgTmFOICogTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgSW5m
aW5pdHkgKiBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKiBOYU4pOwor
fQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE5lZ2F0ZSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDAsIDAsIE5lZ2F0aXZlKSwgLWVuY29kZSgwLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCAtZW5jb2RlKDAsIDAsIE5lZ2F0aXZlKSk7CisKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDEwLCBOZWdhdGl2ZSksIC1lbmNvZGUoMCwgMTAsIFBvc2l0
aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAxMCwgUG9zaXRpdmUpLCAtZW5jb2RlKDAs
IDEwLCBOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAsIE5lZ2F0aXZl
KSwgLWVuY29kZSgwLCAtMTAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAt
MTAsIFBvc2l0aXZlKSwgLWVuY29kZSgwLCAtMTAsIE5lZ2F0aXZlKSk7CisKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEsIDAsIE5lZ2F0aXZlKSwgLWVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAg
IEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCAtZW5jb2RlKDEsIDAsIE5lZ2F0aXZl
KSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwLCBOZWdhdGl2ZSksIC1lbmNvZGUoMSwg
MTAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMCwgUG9zaXRpdmUpLCAt
ZW5jb2RlKDEsIDEwLCBOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAs
IE5lZ2F0aXZlKSwgLWVuY29kZSgxLCAtMTAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxLCAtMTAsIFBvc2l0aXZlKSwgLWVuY29kZSgxLCAtMTAsIE5lZ2F0aXZlKSk7Cit9CisK
K1RFU1RfRihEZWNpbWFsVGVzdCwgTmVnYXRlQmlnRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSksIC1lbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSwgLWVuY29kZSgxLCAxMDAw
LCBOZWdhdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE5lZ2F0ZVNtYWxsRXhwb25l
bnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpLCAtZW5jb2Rl
KDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEwMDAsIFBv
c2l0aXZlKSwgLWVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsKK30KKworVEVTVF9GKERlY2lt
YWxUZXN0LCBOZWdhdGVTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpp
bmZpbml0eShOZWdhdGl2ZSksIC1EZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIC1EZWNpbWFsOjppbmZpbml0eShO
ZWdhdGl2ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgLURlY2ltYWw6Om5hbigp
KTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBQcmVkaWNhdGVzKQoreworICAgIEVYUEVDVF9U
UlVFKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9UUlVF
KERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShE
ZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKS5pc1plcm8oKSk7CisKKyAgICBFWFBFQ1RfVFJVRShEZWNp
bWFsOjp6ZXJvKE5lZ2F0aXZlKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1h
bDo6emVybyhOZWdhdGl2ZSkuaXNQb3NpdGl2ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFs
Ojp6ZXJvKE5lZ2F0aXZlKS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFs
Ojp6ZXJvKE5lZ2F0aXZlKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6
emVybyhOZWdhdGl2ZSkuaXNaZXJvKCkpOworCisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgxMjMp
LmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMTIzKS5pc1Bvc2l0aXZlKCkp
OworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEyMykuaXNOZWdhdGl2ZSgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRGVjaW1hbCgxMjMpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVj
aW1hbCgxMjMpLmlzWmVybygpKTsKKworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoLTEyMykuaXNG
aW5pdGUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoLTEyMykuaXNQb3NpdGl2ZSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKC0xMjMpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKERlY2ltYWwoLTEyMykuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNp
bWFsKC0xMjMpLmlzWmVybygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBQcmVkaWNhdGVz
U3BlY2lhbFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoUG9z
aXRpdmUpLmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6OmluZmluaXR5KFBv
c2l0aXZlKS5pc1Bvc2l0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjppbmZpbml0
eShQb3NpdGl2ZSkuaXNOZWdhdGl2ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjppbmZp
bml0eShQb3NpdGl2ZSkuaXNTcGVjaWFsKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjpp
bmZpbml0eShQb3NpdGl2ZSkuaXNaZXJvKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6
OmluZmluaXR5KE5lZ2F0aXZlKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1h
bDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVj
aW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNUX1RSVUUo
RGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzWmVybygpKTsKKworICAgIEVYUEVDVF9G
QUxTRShEZWNpbWFsOjpuYW4oKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFs
OjpuYW4oKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6Om5hbigpLmlz
WmVybygpKTsKK30KKworLy8gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9udW1iZXIvbnVtYmVyLXN0
ZXB1cC1zdGVwZG93bi1mcm9tLXJlbmRlcmVyCitURVNUX0YoRGVjaW1hbFRlc3QsIFJlYWxXb3Js
ZEV4YW1wbGVOdW1iZXJTdGVwVXBTdGVwRG93bkZyb21SZW5kZXJlcikKK3sKKyAgICBFWFBFQ1Rf
RVEoU3RyaW5nKCIxMCIpLCBzdGVwRG93bigiMCIsICIxMDAiLCAiMTAiLCAiMTkiLCAxKSk7Cisg
ICAgRVhQRUNUX0VRKFN0cmluZygiOTAiKSwgc3RlcFVwKCIwIiwgIjk5IiwgIjEwIiwgIjg5Iiwg
MSkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEiKSwgc3RlcFVwKCIwIiwgIjEiLCAiMC4zMzMz
MzMzMzMzMzMzMzMzMyIsICIwIiwgMykpOyAvLyBzdGVwPTEvMworICAgIEVYUEVDVF9FUShTdHJp
bmcoIjAuMDEiKSwgc3RlcFVwKCIwIiwgIjAuMDEiLCAiMC4wMDMzMzMzMzMzMzMzMzMzMzMzIiwg
IjAiLCAzKSk7IC8vIHN0ZXA9MS8zMDAKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxIiksIHN0ZXBV
cCgiMCIsICIxIiwgIjAuMDAzOTIxNTY4NjI3NDUwOTgwIiwgIjAiLCAyNTUpKTsgLy8gc3RlcD0x
LzI1NQorICAgIEVYUEVDVF9FUShTdHJpbmcoIjEiKSwgc3RlcFVwKCIwIiwgIjEiLCAiMC4xIiwg
IjAiLCAxMCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJlYWxXb3JsZEV4YW1wbGVOdW1i
ZXJTdGVwVXBTdGVwRG93bkZyb21SZW5kZXJlclJvdW5kaW5nKQoreworICAgIEVYUEVDVF9FUShT
dHJpbmcoIjUuMDE1IiksIHN0ZXBVcCgiMCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAyKSk7
CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNiIpLCBzdGVwVXAoIjAiLCAiMTAwIiwgIjAuMDA1
IiwgIjUuMDA1IiwgMTEpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjA2NSIpLCBzdGVwVXAo
IjAiLCAiMTAwIiwgIjAuMDA1IiwgIjUuMDA1IiwgMTIpKTsKKworICAgIEVYUEVDVF9FUShTdHJp
bmcoIjUuMDE1IiksIHN0ZXBVcCgiNCIsICI5IiwgIjAuMDA1IiwgIjUuMDA1IiwgMikpOworICAg
IEVYUEVDVF9FUShTdHJpbmcoIjUuMDYiKSwgc3RlcFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAiNS4w
MDUiLCAxMSkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjUuMDY1IiksIHN0ZXBVcCgiNCIsICI5
IiwgIjAuMDA1IiwgIjUuMDA1IiwgMTIpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBSZWFs
V29ybGRFeGFtcGxlUmFuZ2VTdGVwVXBTdGVwRG93bikKK3sKKyAgICBFWFBFQ1RfRVEoU3RyaW5n
KCIxZSszOCIpLCBzdGVwVXAoIjAiLCAiMUUzOCIsICIxIiwgIjFFMzgiLCA5KSk7CisgICAgRVhQ
RUNUX0VRKFN0cmluZygiMWUrMzgiKSwgc3RlcERvd24oIjAiLCAiMUUzOCIsICIxIiwgIjFFMzgi
LCA5KSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUmVtYWluZGVyKQoreworICAgIEVYUEVD
VF9FUShlbmNvZGUoOSwgLTEsIE5lZ2F0aXZlKSwgZW5jb2RlKDIxLCAtMSwgUG9zaXRpdmUpLnJl
bWFpbmRlcigzKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoMTApLnJlbWFp
bmRlcigzKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwo
LTEwKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMiwgLTEsIFBvc2l0aXZl
KSwgZW5jb2RlKDEwMiwgLTEsIFBvc2l0aXZlKS5yZW1haW5kZXIoMSkpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMSwgLTEsIFBvc2l0aXZlKSwgRGVjaW1hbCgxMCkucmVtYWluZGVyKGVuY29kZSgz
LCAtMSwgUG9zaXRpdmUpKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAtMSwgTmVnYXRpdmUp
LCBlbmNvZGUoMzYsIC0xLCBQb3NpdGl2ZSkucmVtYWluZGVyKGVuY29kZSgxMywgLTEsIFBvc2l0
aXZlKSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgODcsIFBvc2l0aXZlKSwgKGVuY29kZSgx
MjM0LCAxMDAsIFBvc2l0aXZlKS5yZW1haW5kZXIoRGVjaW1hbCgzKSkpKTsKK30KKworVEVTVF9G
KERlY2ltYWxUZXN0LCBSZW1haW5kZXJCaWdFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDAsIDEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKS5yZW1haW5k
ZXIoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMTAy
MiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpLnJlbWFpbmRlcihlbmNvZGUo
MSwgMTAyMiwgUG9zaXRpdmUpKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBv
c2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKS5yZW1haW5kZXIoZW5jb2RlKDEsIC0x
MDAwLCBQb3NpdGl2ZSkpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBSZW1haW5kZXJTbWFs
bEV4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSwg
ZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkucmVtYWluZGVyKGVuY29kZSgxLCAwLCBQb3NpdGl2
ZSkpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIC0xMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgx
LCAtMTAyMiwgUG9zaXRpdmUpLnJlbWFpbmRlcihlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSkp
OworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJlbWFpbmRlclNwZWNpYWxWYWx1ZXMpCit7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgRGVjaW1hbDo6aW5maW5p
dHkoUG9zaXRpdmUpLnJlbWFpbmRlcigxKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmlu
aXR5KE5lZ2F0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLnJlbWFpbmRlcigxKSk7
CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBEZWNpbWFsOjpuYW4oKS5yZW1haW5kZXIo
MSkpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSwgRGVjaW1h
bDo6aW5maW5pdHkoUG9zaXRpdmUpLnJlbWFpbmRlcigtMSkpOworICAgIEVYUEVDVF9FUShEZWNp
bWFsOjppbmZpbml0eShQb3NpdGl2ZSksIERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5yZW1h
aW5kZXIoLTEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWw6Om5hbigp
LnJlbWFpbmRlcigtMSkpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0
aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLnJlbWFpbmRlcigzKSk7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoTmVn
YXRpdmUpLnJlbWFpbmRlcigzKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBEZWNp
bWFsOjpuYW4oKS5yZW1haW5kZXIoMykpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmlu
aXR5KE5lZ2F0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLnJlbWFpbmRlcigtMSkp
OworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIERlY2ltYWw6Omlu
ZmluaXR5KE5lZ2F0aXZlKS5yZW1haW5kZXIoLTEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6
bmFuKCksIERlY2ltYWw6Om5hbigpLnJlbWFpbmRlcigtMSkpOworCisgICAgRVhQRUNUX0VRKERl
Y2ltYWw6Om5hbigpLCBEZWNpbWFsKDEpLnJlbWFpbmRlcihEZWNpbWFsOjppbmZpbml0eShQb3Np
dGl2ZSkpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWwoMSkucmVtYWlu
ZGVyKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
OjpuYW4oKSwgRGVjaW1hbCgxKS5yZW1haW5kZXIoRGVjaW1hbDo6bmFuKCkpKTsKK30KKworVEVT
VF9GKERlY2ltYWxUZXN0LCBSb3VuZCkKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgKERl
Y2ltYWwoOSkgLyBEZWNpbWFsKDEwKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwo
MjUpLCAoRGVjaW1hbCg1KSAvIGZyb21TdHJpbmcoIjAuMjAwIikpLnJvdW5kKCkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsKDMpLCAoRGVjaW1hbCg1KSAvIERlY2ltYWwoMikpLnJvdW5kKCkpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCAoRGVjaW1hbCgyKSAvIERlY2ltYWwoMykpLnJvdW5k
KCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDMpLCAoRGVjaW1hbCgxMCkgLyBEZWNpbWFsKDMp
KS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgzKSwgKERlY2ltYWwoMSkgLyBmcm9t
U3RyaW5nKCIwLjMiKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMTApLCAoRGVj
aW1hbCgxKSAvIGZyb21TdHJpbmcoIjAuMSIpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbCg1KSwgKERlY2ltYWwoMSkgLyBmcm9tU3RyaW5nKCIwLjIiKSkucm91bmQoKSk7CisgICAg
RVhQRUNUX0VRKERlY2ltYWwoMTApLCAoZnJvbVN0cmluZygiMTAuMiIpIC8gMSkucm91bmQoKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjM0LCAxMDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEyMzQs
IDEwMCwgUG9zaXRpdmUpLnJvdW5kKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJvdW5k
U3BlY2lhbFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRp
dmUpLCBEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VR
KERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUp
LnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgRGVjaW1hbDo6bmFuKCku
cm91bmQoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgU3VidHJhY3QpCit7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoMCkgLSBEZWNpbWFsKDApKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDMsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgyKSAtIERlY2lt
YWwoLTEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDMsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgt
MSkgLSBEZWNpbWFsKDIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDk4LCAwLCBQb3NpdGl2ZSks
IERlY2ltYWwoOTkpIC0gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQ
b3NpdGl2ZSksIERlY2ltYWwoLTUwKSAtIERlY2ltYWwoLTUwKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxMDAwMDAwMDAwMDAwMDAwLCAzNSwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgNTAsIFBvc2l0
aXZlKSAtIERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwMDAwMDAwMDAwMDAw
MCwgMzUsIE5lZ2F0aXZlKSwgRGVjaW1hbCgxKSAtIGVuY29kZSgxLCA1MCwgUG9zaXRpdmUpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBTdWJ0cmFjdEJpZ0V4cG9uZW50KQoreworICAgIEVY
UEVDVF9FUShlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRp
dmUpIC0gZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAw
LCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgLSBlbmNvZGUoMSwgMTAyMiwg
UG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSwgZW5j
b2RlKDEsIDEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBTdWJ0cmFjdFNtYWxsRXhwb25lbnQpCit7CisgICAgRVhQ
RUNUX0VRKGVuY29kZShVSU5UNjRfQygxMDAwMDAwMDAwMDAwMDAwMCksIC0xNiwgTmVnYXRpdmUp
LCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAtIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBv
c2l0aXZlKSAtIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2lt
YWxUZXN0LCBTdWJ0cmFjdFNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29uc3QgRGVjaW1hbCBJbmZp
bml0eShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWlu
dXNJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOworICAgIGNvbnN0IERlY2lt
YWwgTmFOKERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigxMCk7CisKKyAg
ICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAtIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoSW5m
aW5pdHksIEluZmluaXR5IC0gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5m
aW5pdHksIE1pbnVzSW5maW5pdHkgLSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWlu
dXNJbmZpbml0eSAtIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJ
bmZpbml0eSAtIFRlbik7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIFRlbiAtIEluZmlu
aXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZpbml0eSAtIFRlbik7
CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gLSBNaW51c0luZmluaXR5KTsKKworICAgIEVY
UEVDVF9FUShOYU4sIE5hTiAtIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC0gVGVuKTsK
KyAgICBFWFBFQ1RfRVEoTmFOLCBUZW4gLSBOYU4pOworCisgICAgRVhQRUNUX0VRKE5hTiwgTmFO
IC0gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAtIE1pbnVzSW5maW5pdHkpOwor
ICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5IC0gTmFOKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBN
aW51c0luZmluaXR5IC0gTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBUb1N0cmluZykK
K3sKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIwIiksIERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLnRv
U3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi0wIiksIERlY2ltYWw6Onplcm8oTmVn
YXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEiKSwgRGVjaW1hbCgx
KS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCItMSIpLCBEZWNpbWFsKC0xKS50
b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxMjM0NTY3IiksIERlY2ltYWwoMTIz
NDU2NykudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiLTEyMzQ1NjciKSwgRGVj
aW1hbCgtMTIzNDU2NykudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMC41Iiks
IGVuY29kZSg1LCAtMSwgUG9zaXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJp
bmcoIi0wLjUiKSwgZW5jb2RlKDUsIC0xLCBOZWdhdGl2ZSkudG9TdHJpbmcoKSk7CisgICAgRVhQ
RUNUX0VRKFN0cmluZygiMTIuMzQ1IiksIGVuY29kZSgxMjM0NSwgLTMsIFBvc2l0aXZlKS50b1N0
cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCItMTIuMzQ1IiksIGVuY29kZSgxMjM0NSwg
LTMsIE5lZ2F0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIwLjEyMzQ1
IiksIGVuY29kZSgxMjM0NSwgLTUsIFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1Rf
RVEoU3RyaW5nKCItMC4xMjM0NSIpLCBlbmNvZGUoMTIzNDUsIC01LCBOZWdhdGl2ZSkudG9TdHJp
bmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNTAiKSwgZW5jb2RlKDUwLCAwLCBQb3NpdGl2
ZSkudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiLTUwIiksIGVuY29kZSg1MCwg
MCwgTmVnYXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjVlKzEiKSwg
ZW5jb2RlKDUsIDEsIFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5n
KCItNWUrMSIpLCBlbmNvZGUoNSwgMSwgTmVnYXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVD
VF9FUShTdHJpbmcoIjUuNjc4ZSsxMDMiKSwgZW5jb2RlKDU2NzgsIDEwMCwgUG9zaXRpdmUpLnRv
U3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi01LjY3OGUrMTAzIiksIGVuY29kZSg1
Njc4LCAxMDAsIE5lZ2F0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1
LjY3OGUtOTciKSwgZW5jb2RlKDU2NzgsIC0xMDAsIFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAg
ICBFWFBFQ1RfRVEoU3RyaW5nKCItNS42NzhlLTk3IiksIGVuY29kZSg1Njc4LCAtMTAwLCBOZWdh
dGl2ZSkudG9TdHJpbmcoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgVG9TdHJpbmdTcGVj
aWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIkluZmluaXR5IiksIERlY2ltYWw6
OmluZmluaXR5KFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIt
SW5maW5pdHkiKSwgRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLnRvU3RyaW5nKCkpOworICAg
IEVYUEVDVF9FUShTdHJpbmcoIk5hTiIpLCBEZWNpbWFsOjpuYW4oKS50b1N0cmluZygpKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144970</attachid>
            <date>2012-05-30 19:10:04 -0700</date>
            <delta_ts>2012-05-31 00:54:29 -0700</delta_ts>
            <desc>Patch 7</desc>
            <filename>bug-87360-20120531111002.patch</filename>
            <type>text/plain</type>
            <size>90989</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI5NWFhMzI5NDMyYjM2
NDlhMTNiMDUxOWE3NjZjNDg5ODBmNzMyOC4uYzllYTZhMWYzOTRhYzkxZjJhZWRkZWQ5MzQwOTg5
NDQ3YzkxYjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDEyLTA1LTMwICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3IgTnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkZWQg
bmV3IGNsYXNzIERlY2ltYWwgZm9yIGRlY2ltYWwgYXJpdGhtYXRpYyBpbiB0d28KKyAgICAgICAg
ZmlsZXM6IHBsYXRmb3JtL0RlY2ltYWwuY3BwIGFuZCBEZWNpbWFsLmggd2l0aCB1bml0IHRlc3Qu
CisKKyAgICAgICAgVGVzdDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcAor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGVjaW1hbC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWNpbWFsUHJpdmF0ZSk6Cisg
ICAgICAgIChTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQ
cml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpoYW5kbGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlNwZWNpYWxWYWx1ZUhhbmRsZXI6
OnZhbHVlKToKKyAgICAgICAgKFVJbnQxMjgpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFBy
aXZhdGU6OlVJbnQxMjg6OlVJbnQxMjgpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZh
dGU6OlVJbnQxMjg6OmhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJ
bnQxMjg6Omxvdyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6
bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omhp
Z2hVSW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omxv
d1VJbnQzMik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6aXNa
ZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50MTI4OjptYWtlVUlu
dDY0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50MTI4OjpvcGVyYXRv
ci89KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50MTI4OjptdWx0aXBs
eUhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OmNvdW50RGlnaXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpzY2FsZURvd24pOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OnNjYWxlVXApOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6RW5jb2RlZERhdGE6OkVuY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2lt
YWw6OkVuY29kZWREYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6
OkRlY2ltYWwpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yKz0pOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvcio9
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yLz0pOgorICAgICAgICAoV2Vi
Q29yZTo6RGVjaW1hbDo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9w
ZXJhdG9yKyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciopOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2lt
YWw6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvcjwpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVy
YXRvcj4pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3I+PSk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjphYnMpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6YWxp
Z25PcGVyYW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpjZWlsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6OmNvbXBhcmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNp
bWFsOjpmbG9vcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpmcm9tU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmluZmluaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWw6Om5hbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpyZW1haW5kZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1h
bDo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6emVybyk6CisgICAgICAg
ICogcGxhdGZvcm0vRGVjaW1hbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRGVjaW1hbFByaXZhdGUpOgorICAgICAgICAoRGVjaW1hbCk6CisgICAgICAgIChFbmNvZGVk
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Y29lZmZpY2llbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmV4cG9uZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjppc0Zpbml0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNOYU4pOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzU3BlY2lhbCk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6
OkVuY29kZWREYXRhOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWRE
YXRhOjpzZXRTaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpm
b3JtYXRDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc0Zpbml0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc05hTik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
Ojppc05lZ2F0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmlzUG9zaXRpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aXNTcGVjaWFsKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlY2ltYWw6OmlzWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjp2YWx1ZSk6Cisg
ICAgICAgIChBbGlnbmVkT3BlcmFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aW52
ZXJ0U2lnbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpleHBvbmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjpzaWduKToKKwogMjAxMi0wNS0zMCAgU2hhd24gU2luZ2ggIDxz
aGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTaW1wbGlmeSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCByb3RhdGlvbiBjb2RlIHRvIGltcHJvdmUgcHJlY2lzaW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGQwODEzMTU0ZTM2NWUzNmE1YWFjMDRiYjk3OTlkNzY3OWZiOGEwNjYu
LmE5ZmMwNDhiNjI5YzVhYTkwYTg4OGFjYzZlODZhNTBiNTRiZjMyYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTItMDUtMzAgIFlvc2hpZnVtaSBJbm91
ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGxhdGZvcm1dIEludHJvZHVjZSBE
ZWNpbWFsIGNsYXNzIGZvciBOdW1iZXIvUmFuZ2UgaW5wdXQgdHlwZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MzYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgS2VudCBUYW11cmEuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRlZCB1bml0IHRlc3Qg
Zm9yIERlY2ltYWwgY2xhc3MuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9EZWNpbWFsVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcjw8KTogT3V0cHV0IERlY2ltYWwgZm9yIHVuaXQgdGVzdCBkZWJ1
Z2dpbmcKKyAgICAgICAgKERlY2ltYWxTdGVwUmFuZ2UpOgorICAgICAgICAoRGVjaW1hbFN0ZXBS
YW5nZTo6RGVjaW1hbFN0ZXBSYW5nZSk6CisgICAgICAgIChEZWNpbWFsU3RlcFJhbmdlOjpjbGFt
cFZhbHVlKToKKyAgICAgICAgKERlY2ltYWxUZXN0KToKKyAgICAgICAgKERlY2ltYWxUZXN0Ojpl
bmNvZGUpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OmZyb21TdHJpbmcpOgorICAgICAgICAoRGVj
aW1hbFRlc3Q6OnN0ZXBEb3duKToKKyAgICAgICAgKERlY2ltYWxUZXN0OjpzdGVwVXApOgorICAg
ICAgICAoVEVTVF9GKToKKwogMjAxMi0wNS0zMCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBTaW1wbGlmeSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3Rh
dGlvbiBjb2RlIHRvIGltcHJvdmUgcHJlY2lzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGVm
MmQ5MzllNDk0NTNlOGI4OWE2YjU3MTU5N2EwNzYwZjczMzc2MTEuLjRkNzI0YWEzMzFjNjM4NGRl
YTFjNjA1NWQ1ZTk4ZWJkMjJkOWRlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTA5LDYg
KzExMDksNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUu
Y3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCiAgICAgcGxhdGZvcm0vRGF0
ZUNvbXBvbmVudHMuY3BwCisgICAgcGxhdGZvcm0vRGVjaW1hbC5jcHAKICAgICBwbGF0Zm9ybS9E
cmFnRGF0YS5jcHAKICAgICBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vRXZl
bnRUcmFjZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzNzg0MmFmZjM1
MTVhOGQ4NDY0YzMwNWVlYWIwMDM4Y2ZjM2M3OTMyLi45YTk4YmEwODc5YWE4MmQ5MjJlZjdmYTM3
MWI1NDBiMzQ0MzhhN2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTMxMTcs
NiArMzExNyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ3Vyc29yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RlY2ltYWwuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnSW1hZ2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDU5ZWYzOTNkMTZmZDI3OGE1MWU5
NzRjZGM1NmYyYjU4NmY5NzkxOGIuLjNlZTg1ZTc5MzQ0MzIxYzY0NWM3NDdkYWY2ODM0NWU5YmZj
YTNjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTA4NCw2ICsxMDg0LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVhZENv
cGllci5jcHAgXAogICAgIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcCBcCisgICAgcGxhdGZv
cm0vRGVjaW1hbC5jcHAgXAogICAgIHBsYXRmb3JtL0RyYWdEYXRhLmNwcCBcCiAgICAgcGxhdGZv
cm0vRHJhZ0ltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vRXZlbnRUcmFjZXIuY3BwIFwKQEAgLTIy
MDYsNiArMjIwNyw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL0NvbnRleHRNZW51Lmgg
XAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXAogICAgIHBsYXRmb3JtL0RhdGVD
b21wb25lbnRzLmggXAorICAgIHBsYXRmb3JtL0RlY2ltYWwuaCBcCiAgICAgcGxhdGZvcm0vRHJh
Z0RhdGEuaCBcCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmggXAogICAgIHBsYXRmb3JtL0V2ZW50
VHJhY2VyLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGUzNzk5YjYyYjc0OWQ0YmY5MTQxODNlZWFm
ZWU2ZTUzZDc4OGNjZTYuLjkzMjNhZDk0YTFmZWRhNzYyNGNiNDU4ZDI3ZjUxOGIxNjBkMGMyYzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTI3Miw2ICsyNzIsNyBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL0Nvb2tpZXNTdHJhdGVneS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9DdXJzb3IuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vRGVjaW1hbC5oJwogICAgICAgICAgICAgJ3BsYXRmb3JtL0RyYWdEYXRhLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL0RyYWdJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9FdmVudFRyYWNlci5oJywKQEAgLTMxNTAsNiArMzE1MSw3IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ3Vyc29y
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9EZWNpbWFsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRHJh
Z0RhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9FdmVudExvb3AuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDQwZmMzYzQyZDEwZWNlZDMzMDAzNzdmMjQxMzlj
OWRhYTdiNGUwMDQuLmIxYjFkZTcwNmRkNWI0OTEzZTlmNDdhNzQ1MzI0ZDhhMTJmODVmZGEgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNzg5
OSw2ICsyNzg5OSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxEZWNpbWFsLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRGVjaW1hbC5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxEcmFnRGF0
YS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJmMjQwZjU1YTk5MjZhYTQ4YjYxYzA5NzAw
NGY0ZTU1NGUxZTBiMDEuLjk0NjFlZjk0YWY5YjQ0ZjliMThiNzI0ZmIyMTZkODIwNzBiOGM0ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTExOTMsNiArMTE5Myw4IEBACiAJCTQ1MENFQkYwMTUwNzNCQkUwMDJCQjE0OSAvKiBM
YWJlbGFibGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNw
cCAqLzsgfTsKIAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVG
MTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDVCQUMyQjAxMzYwQkJBQjAwNURBMjU4
IC8qIEljb25VUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJMLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDVGRUE1Q0YxNTZEREU4QzAwNjU0
MTAxIC8qIERlY2ltYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwICovOyB9Owor
CQk0NUZFQTVEMDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8q
IERlY2ltYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0NjE0QTFGRTBCMjNBOEQ2MDA0NDZFMUMgLyogY29weUN1cnNvci5wbmcgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2MTRBMUZEMEIyM0E4RDYw
MDQ0NkUxQyAvKiBjb3B5Q3Vyc29yLnBuZyAqLzsgfTsKIAkJNDY3MDBFRDAxMjdCOTZDQjAwRjVE
NUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ2NzAwRUNFMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3lu
Yy5jcHAgKi87IH07CiAJCTQ2NzAwRUQxMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3lu
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY3MDBF
Q0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmggKi87IH07CkBAIC04MjAzLDYg
KzgyMDUsOCBAQAogCQk0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYWJlbGFibGVFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUYxNTA3M0JCRTAw
MkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGFiZWxhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NUJBQzJBRjEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJY29uVVJMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ1
RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0NUZFQTVDRTE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEZWNpbWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ2MTRBMUZEMEIyM0E4RDYwMDQ0NkUxQyAvKiBjb3B5Q3Vyc29yLnBuZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9
IGNvcHlDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjcwMEVDRTEy
N0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRmlsZVdyaXRlclN5bmMuY3BwOyBwYXRoID0gTW9kdWxlcy9maWxl
c3lzdGVtL0ZpbGVXcml0ZXJTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDY3MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmg7IHBhdGggPSBNb2R1bGVzL2Zp
bGVzeXN0ZW0vRmlsZVdyaXRlclN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIwMzQzLDYgKzIwMzQ3LDggQEAKIAkJCQlGNTg3ODY4NDAyREUzQjg2MDFFQTQxMjIgLyogQ3Vy
c29yLmggKi8sCiAJCQkJQTU3MzJCMDgxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRz
LmNwcCAqLywKIAkJCQlBNTczMkIwOTEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMu
aCAqLywKKwkJCQk0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgKi8sCisJ
CQkJNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLywKIAkJCQlBNzk1NDY0
MjBCNUM0Q0I0MDA3QjQzOEYgLyogRHJhZ0RhdGEuY3BwICovLAogCQkJCUE3QjZFNjlEMEIyOTFB
OTYwMEQwNTI5RiAvKiBEcmFnRGF0YS5oICovLAogCQkJCUE3Q0ZCM0NGMEI3RUQxMEEwMDcwQzMy
RCAvKiBEcmFnSW1hZ2UuY3BwICovLApAQCAtMjIxMDIsNiArMjIxMDgsNyBAQAogCQkJCUY1NUIz
REI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGNTVCM0RCODEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1dFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUY1NUIzREJBMTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUxvY2FsSW5w
dXRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NUZFQTVEMDE1NkRERThDMDA2NTQxMDEgLyog
RGVjaW1hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDMjI4QTExMUQ1NzIyRTAwRDVBN0QzIC8q
IERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFQ0NGQzNC
MTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxNjJBNDUxMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTk4LDYgKzI1NjA1LDcgQEAKIAkJCQlGNTVCM0RCNTEy
NTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
NTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1dFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjU1QjNEQjkxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1lTG9jYWxJbnB1
dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDVGRUE1Q0YxNTZEREU4QzAwNjU0MTAxIC8q
IERlY2ltYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDMjI4QTIxMUQ1NzIyRTAwRDVBN0Qz
IC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2
MkE0NTAxMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDFBM0Q1OEUxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtl
clRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RlY2ltYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2Y4Y2ZkMjZlOTY1Yjg5Yzg0MzJiMWYzY2Y3N2IzZmVkNzM4YTJhNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuY3BwCkBAIC0w
LDAgKzEsMTAwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZWNpbWFsLmgiCisK
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIERlY2ltYWxQcml2YXRlIHsKKworc3Rh
dGljIGludCBjb25zdCBFeHBvbmVudE1heCA9IDEwMjM7CitzdGF0aWMgaW50IGNvbnN0IEV4cG9u
ZW50TWluID0gLTEwMjM7CitzdGF0aWMgaW50IGNvbnN0IFByZWNpc2lvbiA9IDE4OworCitzdGF0
aWMgY29uc3QgdWludDY0X3QgTWF4Q29lZmZpY2llbnQgPSBVSU5UNjRfQygweDE2MzQ1Nzg1RDg5
RkZGRik7IC8vIDk5OTk5OTk5OTk5OTk5OTk5OSA9PSAxOCA5J3MKKworLy8gVGhpcyBjbGFzcyBo
YW5kbGVzIERlY2ltYWwgc3BlY2lhbCB2YWx1ZXMuCitjbGFzcyBTcGVjaWFsVmFsdWVIYW5kbGVy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVjaWFsVmFsdWVIYW5kbGVyKTsKK3B1Ymxp
YzoKKyAgICBlbnVtIEhhbmRsZVJlc3VsdCB7CisgICAgICAgIEJvdGhGaW5pdGUsCisgICAgICAg
IEJvdGhJbmZpbml0eSwKKyAgICAgICAgRWl0aGVyTmFOLAorICAgICAgICBMSFNJc0luZmluaXR5
LAorICAgICAgICBSSFNJc0luZmluaXR5LAorICAgIH07CisKKyAgICBTcGVjaWFsVmFsdWVIYW5k
bGVyKGNvbnN0IERlY2ltYWwmIGxocywgY29uc3QgRGVjaW1hbCYgcmhzKTsKKyAgICBIYW5kbGVS
ZXN1bHQgaGFuZGxlKCk7CisgICAgRGVjaW1hbCB2YWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGVudW0gUmVzdWx0IHsKKyAgICAgICAgUmVzdWx0SXNMSFMsCisgICAgICAgIFJlc3VsdElz
UkhTLAorICAgICAgICBSZXN1bHRJc1Vua25vd24sCisgICAgfTsKKworICAgIGNvbnN0IERlY2lt
YWwmIG1fbGhzOworICAgIGNvbnN0IERlY2ltYWwmIG1fcmhzOworICAgIFJlc3VsdCBtX3Jlc3Vs
dDsKK307CisKK1NwZWNpYWxWYWx1ZUhhbmRsZXI6OlNwZWNpYWxWYWx1ZUhhbmRsZXIoY29uc3Qg
RGVjaW1hbCYgbGhzLCBjb25zdCBEZWNpbWFsJiByaHMpCisgICAgOiBtX2xocyhsaHMpLCBtX3Jo
cyhyaHMpLCBtX3Jlc3VsdChSZXN1bHRJc1Vua25vd24pCit7Cit9CisKK1NwZWNpYWxWYWx1ZUhh
bmRsZXI6OkhhbmRsZVJlc3VsdCBTcGVjaWFsVmFsdWVIYW5kbGVyOjpoYW5kbGUoKQoreworICAg
IGlmIChtX2xocy5pc0Zpbml0ZSgpICYmIG1fcmhzLmlzRmluaXRlKCkpCisgICAgICAgIHJldHVy
biBCb3RoRmluaXRlOworCisgICAgY29uc3QgRGVjaW1hbDo6RW5jb2RlZERhdGE6OkZvcm1hdENs
YXNzIGxoc0NsYXNzID0gbV9saHMudmFsdWUoKS5mb3JtYXRDbGFzcygpOworICAgIGNvbnN0IERl
Y2ltYWw6OkVuY29kZWREYXRhOjpGb3JtYXRDbGFzcyByaHNDbGFzcyA9IG1fcmhzLnZhbHVlKCku
Zm9ybWF0Q2xhc3MoKTsKKyAgICBpZiAobGhzQ2xhc3MgPT0gRGVjaW1hbDo6RW5jb2RlZERhdGE6
OkNsYXNzTmFOKSB7CisgICAgICAgIG1fcmVzdWx0ID0gUmVzdWx0SXNMSFM7CisgICAgICAgIHJl
dHVybiBFaXRoZXJOYU47CisgICAgIH0KKworICAgIGlmIChyaHNDbGFzcyA9PSBEZWNpbWFsOjpF
bmNvZGVkRGF0YTo6Q2xhc3NOYU4pIHsKKyAgICAgICAgbV9yZXN1bHQgPSBSZXN1bHRJc1JIUzsK
KyAgICAgICAgcmV0dXJuIEVpdGhlck5hTjsKKyAgICAgfQorCisgICAgaWYgKGxoc0NsYXNzID09
IERlY2ltYWw6OkVuY29kZWREYXRhOjpDbGFzc0luZmluaXR5KQorICAgICAgICByZXR1cm4gcmhz
Q2xhc3MgPT0gRGVjaW1hbDo6RW5jb2RlZERhdGE6OkNsYXNzSW5maW5pdHkgPyBCb3RoSW5maW5p
dHkgOiBMSFNJc0luZmluaXR5OworCisgICAgaWYgKHJoc0NsYXNzID09IERlY2ltYWw6OkVuY29k
ZWREYXRhOjpDbGFzc0luZmluaXR5KQorICAgICAgICByZXR1cm4gUkhTSXNJbmZpbml0eTsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBCb3RoRmluaXRlOworfQorCitE
ZWNpbWFsIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fcmVzdWx0KSB7CisgICAgY2FzZSBSZXN1bHRJc0xIUzoKKyAgICAgICAgcmV0dXJuIG1fbGhz
OworICAgIGNhc2UgUmVzdWx0SXNSSFM6CisgICAgICAgIHJldHVybiBtX3JoczsKKyAgICBjYXNl
IFJlc3VsdElzVW5rbm93bjoKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIG1fbGhzOworICAgIH0KK30KKworLy8gVGhpcyBjbGFzcyBp
cyB1c2VkIGZvciAxMjggYml0IHVuc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYy4KK2NsYXNzIFVJ
bnQxMjggeworcHVibGljOgorICAgIFVJbnQxMjgodWludDY0X3QgbG93LCB1aW50NjRfdCBoaWdo
KQorICAgICAgICA6IG1faGlnaChoaWdoKSwgbV9sb3cobG93KQorICAgIHsKKyAgICB9CisKKyAg
ICBVSW50MTI4JiBvcGVyYXRvci89KHVpbnQzMl90KTsKKworICAgIHVpbnQ2NF90IGhpZ2goKSBj
b25zdCB7IHJldHVybiBtX2hpZ2g7IH0KKyAgICB1aW50NjRfdCBsb3coKSBjb25zdCB7IHJldHVy
biBtX2xvdzsgfQorCisgICAgc3RhdGljIFVJbnQxMjggbXVsdGlwbHkodWludDY0X3QgdSwgdWlu
dDY0X3QgdikgeyByZXR1cm4gVUludDEyOCh1ICogdiwgbXVsdGlwbHlIaWdoKHUsIHYpKTsgfQor
Citwcml2YXRlOgorICAgIHN0YXRpYyB1aW50MzJfdCBoaWdoVUludDMyKHVpbnQ2NF90IHgpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih4ID4+IDMyKTsgfQorICAgIHN0YXRpYyB1aW50
MzJfdCBsb3dVSW50MzIodWludDY0X3QgeCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHggJiAoKHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCAzMikgLSAxKSk7IH0KKyAgICBib29s
IGlzWmVybygpIGNvbnN0IHsgcmV0dXJuICFtX2xvdyAmJiAhbV9oaWdoOyB9CisgICAgc3RhdGlj
IHVpbnQ2NF90IG1ha2VVSW50NjQodWludDMyX3QgbG93LCB1aW50MzJfdCBoaWdoKSB7IHJldHVy
biBsb3cgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhpZ2gpIDw8IDMyKTsgfQorCisgICAgc3Rh
dGljIHVpbnQ2NF90IG11bHRpcGx5SGlnaCh1aW50NjRfdCwgdWludDY0X3QpOworCisgICAgdWlu
dDY0X3QgbV9oaWdoOworICAgIHVpbnQ2NF90IG1fbG93OworfTsKKworVUludDEyOCYgVUludDEy
ODo6b3BlcmF0b3IvPShjb25zdCB1aW50MzJfdCBkaXZpc29yKQoreworICAgIEFTU0VSVChkaXZp
c29yKTsKKworICAgIGlmICghbV9oaWdoKSB7CisgICAgICAgIG1fbG93IC89IGRpdmlzb3I7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB1aW50MzJfdCBkaXZpZGVuZFs0XTsK
KyAgICBkaXZpZGVuZFswXSA9IGxvd1VJbnQzMihtX2xvdyk7CisgICAgZGl2aWRlbmRbMV0gPSBo
aWdoVUludDMyKG1fbG93KTsKKyAgICBkaXZpZGVuZFsyXSA9IGxvd1VJbnQzMihtX2hpZ2gpOwor
ICAgIGRpdmlkZW5kWzNdID0gaGlnaFVJbnQzMihtX2hpZ2gpOworCisgICAgdWludDMyX3QgcXVv
dGllbnRbNF07CisgICAgdWludDMyX3QgcmVtYWluZGVyID0gMDsKKyAgICBmb3IgKGludCBpID0g
MzsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgdWludDY0X3Qgd29yayA9IG1ha2VVSW50
NjQocmVtYWluZGVyLCBkaXZpZGVuZFtpXSk7CisgICAgICAgIHJlbWFpbmRlciA9IHN0YXRpY19j
YXN0PHVpbnQzMl90Pih3b3JrICUgZGl2aXNvcik7CisgICAgICAgIHF1b3RpZW50W2ldID0gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHdvcmsgLyBkaXZpc29yKTsKKyAgICB9CisgICAgbV9sb3cgPSBt
YWtlVUludDY0KHF1b3RpZW50WzBdLCBxdW90aWVudFsxXSk7CisgICAgbV9oaWdoID0gbWFrZVVJ
bnQ2NChxdW90aWVudFsyXSwgcXVvdGllbnRbM10pOworICAgIHJldHVybiAqdGhpczsKK30KKwor
Ly8gUmV0dXJucyBoaWdoIDY0Yml0IG9mIDEyOGJpdCBwcm9kdWN0LgordWludDY0X3QgVUludDEy
ODo6bXVsdGlwbHlIaWdoKHVpbnQ2NF90IHUsIHVpbnQ2NF90IHYpCit7CisgICAgY29uc3QgdWlu
dDY0X3QgdUxvdyA9IGxvd1VJbnQzMih1KTsKKyAgICBjb25zdCB1aW50NjRfdCB1SGlnaCA9IGhp
Z2hVSW50MzIodSk7CisgICAgY29uc3QgdWludDY0X3QgdkxvdyA9IGxvd1VJbnQzMih2KTsKKyAg
ICBjb25zdCB1aW50NjRfdCB2SGlnaCA9IGhpZ2hVSW50MzIodik7CisgICAgY29uc3QgdWludDY0
X3QgcGFydGlhbFByb2R1Y3QgPSB1SGlnaCAqIHZMb3cgKyBoaWdoVUludDMyKHVMb3cgKiB2TG93
KTsKKyAgICByZXR1cm4gdUhpZ2ggKiB2SGlnaCArIGhpZ2hVSW50MzIocGFydGlhbFByb2R1Y3Qp
ICsgaGlnaFVJbnQzMih1TG93ICogdkhpZ2ggKyBsb3dVSW50MzIocGFydGlhbFByb2R1Y3QpKTsK
K30KKworc3RhdGljIGludCBjb3VudERpZ2l0cyh1aW50NjRfdCB4KQoreworICAgIGludCBudW1i
ZXJPZkRpZ2l0cyA9IDA7CisgICAgZm9yICh1aW50NjRfdCBwb3dlck9mVGVuID0gMTsgeCA+PSBw
b3dlck9mVGVuOyBwb3dlck9mVGVuICo9IDEwKSB7CisgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7
CisgICAgICAgIGlmIChwb3dlck9mVGVuID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+
OjptYXgoKSAvIDEwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBudW1i
ZXJPZkRpZ2l0czsKK30KKworc3RhdGljIHVpbnQ2NF90IHNjYWxlRG93bih1aW50NjRfdCB4LCBp
bnQgbikKK3sKKyAgICBBU1NFUlQobiA+PSAwKTsKKyAgICB3aGlsZSAobiA+IDAgJiYgeCkgewor
ICAgICAgICB4IC89IDEwOworICAgICAgICAtLW47CisgICAgfQorICAgIHJldHVybiB4OworfQor
CitzdGF0aWMgdWludDY0X3Qgc2NhbGVVcCh1aW50NjRfdCB4LCBpbnQgbikKK3sKKyAgICBBU1NF
UlQobiA+PSAwKTsKKyAgICBBU1NFUlQobiA8IFByZWNpc2lvbik7CisKKyAgICB1aW50NjRfdCB5
ID0gMTsKKyAgICB1aW50NjRfdCB6ID0gMTA7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAo
biAmIDEpCisgICAgICAgICAgICB5ID0geSAqIHo7CisKKyAgICAgICAgbiA+Pj0gMTsKKyAgICAg
ICAgaWYgKCFuKQorICAgICAgICAgICAgcmV0dXJuIHggKiB5OworCisgICAgICAgIHogPSB6ICog
ejsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIERlY2ltYWxQcml2YXRlCisKK3VzaW5nIG5h
bWVzcGFjZSBEZWNpbWFsUHJpdmF0ZTsKKworRGVjaW1hbDo6RW5jb2RlZERhdGE6OkVuY29kZWRE
YXRhKFNpZ24gc2lnbiwgRm9ybWF0Q2xhc3MgZm9ybWF0Q2xhc3MpCisgICAgOiBtX2NvZWZmaWNp
ZW50KDApCisgICAgLCBtX2V4cG9uZW50KDApCisgICAgLCBtX2Zvcm1hdENsYXNzKGZvcm1hdENs
YXNzKQorICAgICwgbV9zaWduKHNpZ24pCit7Cit9CisKK0RlY2ltYWw6OkVuY29kZWREYXRhOjpF
bmNvZGVkRGF0YShTaWduIHNpZ24sIGludCBleHBvbmVudCwgdWludDY0X3QgY29lZmZpY2llbnQp
CisgICAgOiBtX2Zvcm1hdENsYXNzKGNvZWZmaWNpZW50ID8gQ2xhc3NOb3JtYWwgOiBDbGFzc1pl
cm8pCisgICAgLCBtX3NpZ24oc2lnbikKK3sKKyAgICBpZiAoZXhwb25lbnQgPj0gRXhwb25lbnRN
aW4gJiYgZXhwb25lbnQgPD0gRXhwb25lbnRNYXgpIHsKKyAgICAgICAgd2hpbGUgKGNvZWZmaWNp
ZW50ID49IE1heENvZWZmaWNpZW50KSB7CisgICAgICAgICAgICBjb2VmZmljaWVudCAvPSAxMDsK
KyAgICAgICAgICAgICsrZXhwb25lbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZXhw
b25lbnQgPiBFeHBvbmVudE1heCkgeworICAgICAgICBtX2NvZWZmaWNpZW50ID0gMDsKKyAgICAg
ICAgbV9leHBvbmVudCA9IDA7CisgICAgICAgIG1fZm9ybWF0Q2xhc3MgPSBDbGFzc0luZmluaXR5
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV4cG9uZW50IDwgRXhwb25lbnRN
aW4pIHsKKyAgICAgICAgbV9jb2VmZmljaWVudCA9IDA7CisgICAgICAgIG1fZXhwb25lbnQgPSAw
OworICAgICAgICBtX2Zvcm1hdENsYXNzID0gQ2xhc3NaZXJvOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9jb2VmZmljaWVudCA9IGNvZWZmaWNpZW50OworICAgIG1fZXhwb25lbnQg
PSBzdGF0aWNfY2FzdDxpbnQxNl90PihleHBvbmVudCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6RW5j
b2RlZERhdGE6Om9wZXJhdG9yPT0oY29uc3QgRW5jb2RlZERhdGEmIGFub3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2lnbiA9PSBhbm90aGVyLm1fc2lnbgorICAgICAgICAmJiBtX2Zvcm1h
dENsYXNzID09IGFub3RoZXIubV9mb3JtYXRDbGFzcworICAgICAgICAmJiBtX2V4cG9uZW50ID09
IGFub3RoZXIubV9leHBvbmVudAorICAgICAgICAmJiBtX2NvZWZmaWNpZW50ID09IGFub3RoZXIu
bV9jb2VmZmljaWVudDsKK30KKworRGVjaW1hbDo6RGVjaW1hbChpbnQzMl90IGkzMikKKyAgICA6
IG1fZGF0YShpMzIgPCAwID8gTmVnYXRpdmUgOiBQb3NpdGl2ZSwgMCwgaTMyIDwgMCA/IHN0YXRp
Y19jYXN0PHVpbnQzMl90PigtaTMyKSA6IGkzMikKK3sKK30KKworRGVjaW1hbDo6RGVjaW1hbChT
aWduIHNpZ24sIGludCBleHBvbmVudCwgdWludDY0X3QgY29lZmZpY2llbnQpCisgICAgOiBtX2Rh
dGEoc2lnbiwgZXhwb25lbnQsIGNvZWZmaWNpZW50KQoreworfQorCitEZWNpbWFsOjpEZWNpbWFs
KGNvbnN0IEVuY29kZWREYXRhJiBkYXRhKQorICAgIDogbV9kYXRhKGRhdGEpCit7Cit9CisKK0Rl
Y2ltYWw6OkRlY2ltYWwoY29uc3QgRGVjaW1hbCYgb3RoZXIpCisgICAgOiBtX2RhdGEob3RoZXIu
bV9kYXRhKQoreworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvcj0oY29uc3QgRGVjaW1h
bCYgb3RoZXIpCit7CisgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOworICAgIHJldHVybiAqdGhp
czsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IrPShjb25zdCBEZWNpbWFsJiBvdGhl
cikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgKyBvdGhlcikubV9kYXRhOworICAgIHJldHVybiAq
dGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3ItPShjb25zdCBEZWNpbWFsJiBv
dGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgLSBvdGhlcikubV9kYXRhOworICAgIHJldHVy
biAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IqPShjb25zdCBEZWNpbWFs
JiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgKiBvdGhlcikubV9kYXRhOworICAgIHJl
dHVybiAqdGhpczsKK30KKworRGVjaW1hbCYgRGVjaW1hbDo6b3BlcmF0b3IvPShjb25zdCBEZWNp
bWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSAoKnRoaXMgLyBvdGhlcikubV9kYXRhOworICAg
IHJldHVybiAqdGhpczsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRvci0oKSBjb25zdAor
eworICAgIGlmIChpc05hTigpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBEZWNpbWFs
IHJlc3VsdCgqdGhpcyk7CisgICAgcmVzdWx0Lm1fZGF0YS5zZXRTaWduKGludmVydFNpZ24obV9k
YXRhLnNpZ24oKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6
b3BlcmF0b3IrKGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFs
JiBsaHMgPSAqdGhpczsKKyAgICBjb25zdCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOworICAg
IGNvbnN0IFNpZ24gcmhzU2lnbiA9IHJocy5zaWduKCk7CisKKyAgICBTcGVjaWFsVmFsdWVIYW5k
bGVyIGhhbmRsZXIobGhzLCByaHMpOworICAgIHN3aXRjaCAoaGFuZGxlci5oYW5kbGUoKSkgewor
ICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEZpbml0ZToKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhJbmZpbml0eToKKyAgICAgICAg
cmV0dXJuIGxoc1NpZ24gPT0gcmhzU2lnbiA/IGxocyA6IG5hbigpOworCisgICAgY2FzZSBTcGVj
aWFsVmFsdWVIYW5kbGVyOjpFaXRoZXJOYU46CisgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVl
KCk7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkxIU0lzSW5maW5pdHk6CisgICAg
ICAgIHJldHVybiBsaHM7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OlJIU0lzSW5m
aW5pdHk6CisgICAgICAgIHJldHVybiByaHM7CisgICAgfQorCisgICAgY29uc3QgQWxpZ25lZE9w
ZXJhbmRzIGFsaWduZWRPcGVyYW5kcyA9IGFsaWduT3BlcmFuZHMobGhzLCByaHMpOworCisgICAg
Y29uc3QgdWludDY0X3QgcmVzdWx0ID0gbGhzU2lnbiA9PSByaHNTaWduCisgICAgICAgID8gYWxp
Z25lZE9wZXJhbmRzLmxoc0NvZWZmaWNpZW50ICsgYWxpZ25lZE9wZXJhbmRzLnJoc0NvZWZmaWNp
ZW50CisgICAgICAgIDogYWxpZ25lZE9wZXJhbmRzLmxoc0NvZWZmaWNpZW50IC0gYWxpZ25lZE9w
ZXJhbmRzLnJoc0NvZWZmaWNpZW50OworCisgICAgaWYgKGxoc1NpZ24gPT0gTmVnYXRpdmUgJiYg
cmhzU2lnbiA9PSBQb3NpdGl2ZSAmJiAhcmVzdWx0KQorICAgICAgICByZXR1cm4gRGVjaW1hbChQ
b3NpdGl2ZSwgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50LCAwKTsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ2NF90PihyZXN1bHQpID49IDAKKyAgICAgICAgPyBEZWNpbWFsKGxoc1NpZ24s
IGFsaWduZWRPcGVyYW5kcy5leHBvbmVudCwgcmVzdWx0KQorICAgICAgICA6IERlY2ltYWwoaW52
ZXJ0U2lnbihsaHNTaWduKSwgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50LCAtc3RhdGljX2Nhc3Q8
aW50NjRfdD4ocmVzdWx0KSk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6b3BlcmF0b3ItKGNvbnN0
IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsJiBsaHMgPSAqdGhpczsK
KyAgICBjb25zdCBTaWduIGxoc1NpZ24gPSBsaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24gcmhz
U2lnbiA9IHJocy5zaWduKCk7CisKKyAgICBTcGVjaWFsVmFsdWVIYW5kbGVyIGhhbmRsZXIobGhz
LCByaHMpOworICAgIHN3aXRjaCAoaGFuZGxlci5oYW5kbGUoKSkgeworICAgIGNhc2UgU3BlY2lh
bFZhbHVlSGFuZGxlcjo6Qm90aEZpbml0ZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNw
ZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxoc1NpZ24g
PT0gcmhzU2lnbiA/IG5hbigpIDogbGhzOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVy
OjpFaXRoZXJOYU46CisgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlKCk7CisKKyAgICBjYXNl
IFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkxIU0lzSW5maW5pdHk6CisgICAgICAgIHJldHVybiBsaHM7
CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OlJIU0lzSW5maW5pdHk6CisgICAgICAg
IHJldHVybiBpbmZpbml0eShpbnZlcnRTaWduKHJoc1NpZ24pKTsKKyAgICB9CisKKyAgICBjb25z
dCBBbGlnbmVkT3BlcmFuZHMgYWxpZ25lZE9wZXJhbmRzID0gYWxpZ25PcGVyYW5kcyhsaHMsIHJo
cyk7CisKKyAgICBjb25zdCB1aW50NjRfdCByZXN1bHQgPSBsaHNTaWduID09IHJoc1NpZ24KKyAg
ICAgICAgPyBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQgLSBhbGlnbmVkT3BlcmFuZHMu
cmhzQ29lZmZpY2llbnQKKyAgICAgICAgOiBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQg
KyBhbGlnbmVkT3BlcmFuZHMucmhzQ29lZmZpY2llbnQ7CisKKyAgICBpZiAobGhzU2lnbiA9PSBO
ZWdhdGl2ZSAmJiByaHNTaWduID09IE5lZ2F0aXZlICYmICFyZXN1bHQpCisgICAgICAgIHJldHVy
biBEZWNpbWFsKFBvc2l0aXZlLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQsIDApOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludDY0X3Q+KHJlc3VsdCkgPj0gMAorICAgICAgICA/IERlY2lt
YWwobGhzU2lnbiwgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50LCByZXN1bHQpCisgICAgICAgIDog
RGVjaW1hbChpbnZlcnRTaWduKGxoc1NpZ24pLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQsIC1z
dGF0aWNfY2FzdDxpbnQ2NF90PihyZXN1bHQpKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVy
YXRvciooY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwmIGxo
cyA9ICp0aGlzOworICAgIGNvbnN0IFNpZ24gbGhzU2lnbiA9IGxocy5zaWduKCk7CisgICAgY29u
c3QgU2lnbiByaHNTaWduID0gcmhzLnNpZ24oKTsKKyAgICBjb25zdCBTaWduIHJlc3VsdFNpZ24g
PSBsaHNTaWduID09IHJoc1NpZ24gPyBQb3NpdGl2ZSA6IE5lZ2F0aXZlOworCisgICAgU3BlY2lh
bFZhbHVlSGFuZGxlciBoYW5kbGVyKGxocywgcmhzKTsKKyAgICBzd2l0Y2ggKGhhbmRsZXIuaGFu
ZGxlKCkpIHsKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhGaW5pdGU6IHsKKyAg
ICAgICAgY29uc3QgdWludDY0X3QgbGhzQ29lZmZpY2llbnQgPSBsaHMubV9kYXRhLmNvZWZmaWNp
ZW50KCk7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IHJoc0NvZWZmaWNpZW50ID0gcmhzLm1fZGF0
YS5jb2VmZmljaWVudCgpOworICAgICAgICBpbnQgcmVzdWx0RXhwb25lbnQgPSBsaHMuZXhwb25l
bnQoKSArIHJocy5leHBvbmVudCgpOworICAgICAgICBVSW50MTI4IHdvcmsoVUludDEyODo6bXVs
dGlwbHkobGhzQ29lZmZpY2llbnQsIHJoc0NvZWZmaWNpZW50KSk7CisgICAgICAgIHdoaWxlICh3
b3JrLmhpZ2goKSkgeworICAgICAgICAgICAgd29yayAvPSAxMDsKKyAgICAgICAgICAgICsrcmVz
dWx0RXhwb25lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIERlY2ltYWwocmVzdWx0U2ln
biwgcmVzdWx0RXhwb25lbnQsIHdvcmsubG93KCkpOworICAgIH0KKworICAgIGNhc2UgU3BlY2lh
bFZhbHVlSGFuZGxlcjo6Qm90aEluZmluaXR5OgorICAgICAgICByZXR1cm4gaW5maW5pdHkocmVz
dWx0U2lnbik7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAg
ICAgICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFu
ZGxlcjo6TEhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHJocy5pc1plcm8oKSA/IG5hbigp
IDogaW5maW5pdHkocmVzdWx0U2lnbik7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6
OlJIU0lzSW5maW5pdHk6CisgICAgICAgIHJldHVybiBsaHMuaXNaZXJvKCkgPyBuYW4oKSA6IGlu
ZmluaXR5KHJlc3VsdFNpZ24pOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBuYW4oKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRvci8oY29uc3Qg
RGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9ICp0aGlzOwor
ICAgIGNvbnN0IFNpZ24gbGhzU2lnbiA9IGxocy5zaWduKCk7CisgICAgY29uc3QgU2lnbiByaHNT
aWduID0gcmhzLnNpZ24oKTsKKyAgICBjb25zdCBTaWduIHJlc3VsdFNpZ24gPSBsaHNTaWduID09
IHJoc1NpZ24gPyBQb3NpdGl2ZSA6IE5lZ2F0aXZlOworCisgICAgU3BlY2lhbFZhbHVlSGFuZGxl
ciBoYW5kbGVyKGxocywgcmhzKTsKKyAgICBzd2l0Y2ggKGhhbmRsZXIuaGFuZGxlKCkpIHsKKyAg
ICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhGaW5pdGU6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoSW5maW5pdHk6CisgICAgICAgIHJl
dHVybiBuYW4oKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6RWl0aGVyTmFOOgor
ICAgICAgICByZXR1cm4gaGFuZGxlci52YWx1ZSgpOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVI
YW5kbGVyOjpMSFNJc0luZmluaXR5OgorICAgICAgICByZXR1cm4gaW5maW5pdHkocmVzdWx0U2ln
bik7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OlJIU0lzSW5maW5pdHk6CisgICAg
ICAgIHJldHVybiB6ZXJvKHJlc3VsdFNpZ24pOworICAgIH0KKworICAgIEFTU0VSVChsaHMuaXNG
aW5pdGUoKSk7CisgICAgQVNTRVJUKHJocy5pc0Zpbml0ZSgpKTsKKworICAgIGlmIChyaHMuaXNa
ZXJvKCkpCisgICAgICAgIHJldHVybiBsaHMuaXNaZXJvKCkgPyBuYW4oKSA6IGluZmluaXR5KHJl
c3VsdFNpZ24pOworCisgICAgaW50IHJlc3VsdEV4cG9uZW50ID0gbGhzLmV4cG9uZW50KCkgLSBy
aHMuZXhwb25lbnQoKTsKKworICAgIGlmIChsaHMuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiBE
ZWNpbWFsKHJlc3VsdFNpZ24sIHJlc3VsdEV4cG9uZW50LCAwKTsKKworICAgIHVpbnQ2NF90IHJl
bWFpbmRlciA9IGxocy5tX2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICBjb25zdCB1aW50NjRfdCBk
aXZpc29yID0gcmhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIHVpbnQ2NF90IHJlc3VsdCA9
IDA7CisgICAgd2hpbGUgKHJlc3VsdCA8IE1heENvZWZmaWNpZW50IC8gMTAwKSB7CisgICAgICAg
IHdoaWxlIChyZW1haW5kZXIgPCBkaXZpc29yKSB7CisgICAgICAgICAgICByZW1haW5kZXIgKj0g
MTA7CisgICAgICAgICAgICByZXN1bHQgKj0gMTA7CisgICAgICAgICAgICAtLXJlc3VsdEV4cG9u
ZW50OworICAgICAgICB9CisgICAgICAgIHJlc3VsdCArPSByZW1haW5kZXIgLyBkaXZpc29yOwor
ICAgICAgICByZW1haW5kZXIgJT0gZGl2aXNvcjsKKyAgICAgICAgaWYgKCFyZW1haW5kZXIpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocmVtYWluZGVyID4gZGl2aXNvciAv
IDIpCisgICAgICAgICsrcmVzdWx0OworCisgICAgcmV0dXJuIERlY2ltYWwocmVzdWx0U2lnbiwg
cmVzdWx0RXhwb25lbnQsIHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6b3BlcmF0b3I9PShj
b25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YSA9PSByaHMubV9k
YXRhIHx8IGNvbXBhcmVUbyhyaHMpLmlzWmVybygpOworfQorCitib29sIERlY2ltYWw6Om9wZXJh
dG9yIT0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGlmIChtX2RhdGEgPT0gcmhz
Lm1fZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IERlY2ltYWwgcmVzdWx0
ID0gY29tcGFyZVRvKHJocyk7CisgICAgaWYgKHJlc3VsdC5pc05hTigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuICFyZXN1bHQuaXNaZXJvKCk7Cit9CisKK2Jvb2wgRGVjaW1h
bDo6b3BlcmF0b3I8KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBjb25zdCBEZWNp
bWFsIHJlc3VsdCA9IGNvbXBhcmVUbyhyaHMpOworICAgIGlmIChyZXN1bHQuaXNOYU4oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhcmVzdWx0LmlzWmVybygpICYmIHJlc3Vs
dC5pc05lZ2F0aXZlKCk7Cit9CisKK2Jvb2wgRGVjaW1hbDo6b3BlcmF0b3I8PShjb25zdCBEZWNp
bWFsJiByaHMpIGNvbnN0Cit7CisgICAgaWYgKG1fZGF0YSA9PSByaHMubV9kYXRhKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBEZWNpbWFsIHJlc3VsdCA9IGNvbXBhcmVUbyhyaHMp
OworICAgIGlmIChyZXN1bHQuaXNOYU4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiByZXN1bHQuaXNaZXJvKCkgfHwgcmVzdWx0LmlzTmVnYXRpdmUoKTsKK30KKworYm9vbCBE
ZWNpbWFsOjpvcGVyYXRvcj4oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0
IERlY2ltYWwgcmVzdWx0ID0gY29tcGFyZVRvKHJocyk7CisgICAgaWYgKHJlc3VsdC5pc05hTigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFyZXN1bHQuaXNaZXJvKCkgJiYg
cmVzdWx0LmlzUG9zaXRpdmUoKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvcj49KGNvbnN0
IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBpZiAobV9kYXRhID09IHJocy5tX2RhdGEpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IERlY2ltYWwgcmVzdWx0ID0gY29tcGFyZVRv
KHJocyk7CisgICAgaWYgKHJlc3VsdC5pc05hTigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHJlc3VsdC5pc1plcm8oKSB8fCAhcmVzdWx0LmlzTmVnYXRpdmUoKTsKK30KKwor
RGVjaW1hbCBEZWNpbWFsOjphYnMoKSBjb25zdAoreworICAgIERlY2ltYWwgcmVzdWx0KCp0aGlz
KTsKKyAgICByZXN1bHQubV9kYXRhLnNldFNpZ24oUG9zaXRpdmUpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0RlY2ltYWw6OkFsaWduZWRPcGVyYW5kcyBEZWNpbWFsOjphbGlnbk9wZXJhbmRz
KGNvbnN0IERlY2ltYWwmIGxocywgY29uc3QgRGVjaW1hbCYgcmhzKQoreworICAgIEFTU0VSVChs
aHMuaXNGaW5pdGUoKSk7CisgICAgQVNTRVJUKHJocy5pc0Zpbml0ZSgpKTsKKworICAgIGNvbnN0
IGludCBsaHNFeHBvbmVudCA9IGxocy5leHBvbmVudCgpOworICAgIGNvbnN0IGludCByaHNFeHBv
bmVudCA9IHJocy5leHBvbmVudCgpOworICAgIGludCBleHBvbmVudCA9IHN0ZDo6bWluKGxoc0V4
cG9uZW50LCByaHNFeHBvbmVudCk7CisgICAgdWludDY0X3QgbGhzQ29lZmZpY2llbnQgPSBsaHMu
bV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgdWludDY0X3QgcmhzQ29lZmZpY2llbnQgPSByaHMu
bV9kYXRhLmNvZWZmaWNpZW50KCk7CisKKyAgICBpZiAobGhzRXhwb25lbnQgPiByaHNFeHBvbmVu
dCkgeworICAgICAgICBjb25zdCBpbnQgbnVtYmVyT2ZMSFNEaWdpdHMgPSBjb3VudERpZ2l0cyhs
aHNDb2VmZmljaWVudCk7CisgICAgICAgIGlmIChudW1iZXJPZkxIU0RpZ2l0cykgeworICAgICAg
ICAgICAgY29uc3QgaW50IGxoc1NoaWZ0QW1vdW50ID0gbGhzRXhwb25lbnQgLSByaHNFeHBvbmVu
dDsKKyAgICAgICAgICAgIGNvbnN0IGludCBvdmVyZmxvdyA9IG51bWJlck9mTEhTRGlnaXRzICsg
bGhzU2hpZnRBbW91bnQgLSBQcmVjaXNpb247CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPD0g
MCkKKyAgICAgICAgICAgICAgICBsaHNDb2VmZmljaWVudCA9IHNjYWxlVXAobGhzQ29lZmZpY2ll
bnQsIGxoc1NoaWZ0QW1vdW50KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGxoc0NvZWZmaWNpZW50ID0gc2NhbGVVcChsaHNDb2VmZmljaWVudCwgbGhzU2hpZnRBbW91bnQg
LSBvdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2FsZURvd24o
cmhzQ29lZmZpY2llbnQsIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBleHBvbmVudCArPSBv
dmVyZmxvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIChsaHNF
eHBvbmVudCA8IHJoc0V4cG9uZW50KSB7CisgICAgICAgIGNvbnN0IGludCBudW1iZXJPZlJIU0Rp
Z2l0cyA9IGNvdW50RGlnaXRzKHJoc0NvZWZmaWNpZW50KTsKKyAgICAgICAgaWYgKG51bWJlck9m
UkhTRGlnaXRzKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcmhzU2hpZnRBbW91bnQgPSByaHNF
eHBvbmVudCAtIGxoc0V4cG9uZW50OworICAgICAgICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0g
bnVtYmVyT2ZSSFNEaWdpdHMgKyByaHNTaGlmdEFtb3VudCAtIFByZWNpc2lvbjsKKyAgICAgICAg
ICAgIGlmIChvdmVyZmxvdyA8PSAwKQorICAgICAgICAgICAgICAgIHJoc0NvZWZmaWNpZW50ID0g
c2NhbGVVcChyaHNDb2VmZmljaWVudCwgcmhzU2hpZnRBbW91bnQpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgcmhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKHJoc0NvZWZmaWNp
ZW50LCByaHNTaGlmdEFtb3VudCAtIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBsaHNDb2Vm
ZmljaWVudCA9IHNjYWxlRG93bihsaHNDb2VmZmljaWVudCwgb3ZlcmZsb3cpOworICAgICAgICAg
ICAgICAgIGV4cG9uZW50ICs9IG92ZXJmbG93OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgQWxpZ25lZE9wZXJhbmRzIGFsaWduZWRPcGVyYW5kczsKKyAgICBhbGlnbmVk
T3BlcmFuZHMuZXhwb25lbnQgPSBleHBvbmVudDsKKyAgICBhbGlnbmVkT3BlcmFuZHMubGhzQ29l
ZmZpY2llbnQgPSBsaHNDb2VmZmljaWVudDsKKyAgICBhbGlnbmVkT3BlcmFuZHMucmhzQ29lZmZp
Y2llbnQgPSByaHNDb2VmZmljaWVudDsKKyAgICByZXR1cm4gYWxpZ25lZE9wZXJhbmRzOworfQor
CisvLyBSb3VuZCB0b3dhcmQgcG9zaXRpdmUgaW5maW5pdHkuCisvLyBOb3RlOiBNYWMgcG9ydHMg
ZGVmaW5lcyBjZWlsKHgpIGFzIHd0Zl9jZWlsKHgpLCBzbyB3ZSBjYW4ndCB1c2UgbmFtZSAiY2Vp
bCIgaGVyZS4KK0RlY2ltYWwgRGVjaW1hbDo6Y2VpbGluZygpIGNvbnN0Cit7CisgICAgaWYgKGlz
U3BlY2lhbCgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoZXhwb25lbnQoKSA+
PSAwKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICB1aW50NjRfdCByZXN1bHQgPSBtX2Rh
dGEuY29lZmZpY2llbnQoKTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEaWdpdHMgPSBjb3VudERp
Z2l0cyhyZXN1bHQpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRyb3BEaWdpdHMgPSAtZXhwb25l
bnQoKTsKKyAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBudW1iZXJPZkRyb3BEaWdpdHMpCisgICAg
ICAgIHJldHVybiB6ZXJvKFBvc2l0aXZlKTsKKworICAgIHJlc3VsdCA9IHNjYWxlRG93bihyZXN1
bHQsIG51bWJlck9mRHJvcERpZ2l0cyAtIDEpOworICAgIGlmIChzaWduKCkgPT0gUG9zaXRpdmUg
JiYgcmVzdWx0ICUgMTAgPiAwKQorICAgICAgICByZXN1bHQgKz0gMTA7CisgICAgcmVzdWx0IC89
IDEwOworICAgIHJldHVybiBEZWNpbWFsKHNpZ24oKSwgMCwgcmVzdWx0KTsKK30KKworRGVjaW1h
bCBEZWNpbWFsOjpjb21wYXJlVG8oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNv
bnN0IERlY2ltYWwgcmVzdWx0KCp0aGlzIC0gcmhzKTsKKyAgICBzd2l0Y2ggKHJlc3VsdC5tX2Rh
dGEuZm9ybWF0Q2xhc3MoKSkgeworICAgIGNhc2UgRW5jb2RlZERhdGE6OkNsYXNzSW5maW5pdHk6
CisgICAgICAgIHJldHVybiByZXN1bHQuaXNOZWdhdGl2ZSgpID8gRGVjaW1hbCgtMSkgOiBEZWNp
bWFsKDEpOworCisgICAgY2FzZSBFbmNvZGVkRGF0YTo6Q2xhc3NOYU46CisgICAgY2FzZSBFbmNv
ZGVkRGF0YTo6Q2xhc3NOb3JtYWw6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBjYXNl
IEVuY29kZWREYXRhOjpDbGFzc1plcm86CisgICAgICAgIHJldHVybiB6ZXJvKFBvc2l0aXZlKTsK
KworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gbmFuKCk7CisgICAgfQorfQorCisvLyBSb3VuZCB0b3dhcmQgbmVnYXRpdmUgaW5maW5p
dHkuCitEZWNpbWFsIERlY2ltYWw6OmZsb29yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNTcGVjaWFs
KCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlmIChleHBvbmVudCgpID49IDApCisg
ICAgICAgIHJldHVybiAqdGhpczsKKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IG1fZGF0YS5jb2Vm
ZmljaWVudCgpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRpZ2l0cyA9IGNvdW50RGlnaXRzKHJl
c3VsdCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRHJvcERpZ2l0cyA9IC1leHBvbmVudCgpOwor
ICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IG51bWJlck9mRHJvcERpZ2l0cykKKyAgICAgICAgcmV0
dXJuIHplcm8oUG9zaXRpdmUpOworCisgICAgcmVzdWx0ID0gc2NhbGVEb3duKHJlc3VsdCwgbnVt
YmVyT2ZEcm9wRGlnaXRzIC0gMSk7CisgICAgaWYgKGlzTmVnYXRpdmUoKSAmJiByZXN1bHQgJSAx
MCA+IDApCisgICAgICAgIHJlc3VsdCArPSAxMDsKKyAgICByZXN1bHQgLz0gMTA7CisgICAgcmV0
dXJuIERlY2ltYWwoc2lnbigpLCAwLCByZXN1bHQpOworfQorCitEZWNpbWFsIERlY2ltYWw6OmZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgaW50IGV4cG9uZW50ID0gMDsKKyAg
ICBTaWduIGV4cG9uZW50U2lnbiA9IFBvc2l0aXZlOworICAgIGludCBudW1iZXJPZkRpZ2l0cyA9
IDA7CisgICAgaW50IG51bWJlck9mRGlnaXRzQWZ0ZXJEb3QgPSAwOworICAgIGludCBudW1iZXJP
ZkV4dHJhRGlnaXRzID0gMDsKKyAgICBTaWduIHNpZ24gPSBQb3NpdGl2ZTsKKworICAgIGVudW0g
eworICAgICAgICBTdGF0ZURpZ2l0LAorICAgICAgICBTdGF0ZURvdCwKKyAgICAgICAgU3RhdGVE
b3REaWdpdCwKKyAgICAgICAgU3RhdGVFLAorICAgICAgICBTdGF0ZUVEaWdpdCwKKyAgICAgICAg
U3RhdGVFU2lnbiwKKyAgICAgICAgU3RhdGVTaWduLAorICAgICAgICBTdGF0ZVN0YXJ0LAorICAg
ICAgICBTdGF0ZVplcm8sCisgICAgfSBzdGF0ZSA9IFN0YXRlU3RhcnQ7CisKKyNkZWZpbmUgSGFu
ZGxlQ2hhckFuZEJyZWFrKGV4cGVjdGVkLCBuZXh0U3RhdGUpIFwKKyAgICBpZiAoY2ggPT0gZXhw
ZWN0ZWQpIHsgXAorICAgICAgICBzdGF0ZSA9IG5leHRTdGF0ZTsgXAorICAgICAgICBicmVhazsg
XAorICAgIH0KKworI2RlZmluZSBIYW5kbGVUd29DaGFyc0FuZEJyZWFrKGV4cGVjdGVkMSwgZXhw
ZWN0ZWQyLCBuZXh0U3RhdGUpIFwKKyAgICBpZiAoY2ggPT0gZXhwZWN0ZWQxIHx8IGNoID09IGV4
cGVjdGVkMikgeyBcCisgICAgICAgIHN0YXRlID0gbmV4dFN0YXRlOyBcCisgICAgICAgIGJyZWFr
OyBcCisgICAgfQorCisgICAgdWludDY0X3QgYWNjdW11bGF0b3IgPSAwOworICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgKytpbmRleCkgeworICAgICAg
ICBjb25zdCBpbnQgY2ggPSBzdHJbaW5kZXhdOworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgU3RhdGVEaWdpdDoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2gg
PD0gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgUHJlY2lzaW9u
KSB7CisgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7CisgICAgICAgICAgICAg
ICAgICAgIGFjY3VtdWxhdG9yICo9IDEwOworICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRv
ciArPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgKytudW1iZXJPZkV4dHJhRGlnaXRzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBIYW5kbGVDaGFyQW5kQnJlYWsoJy4nLCBTdGF0ZURvdCk7
CisgICAgICAgICAgICBIYW5kbGVUd29DaGFyc0FuZEJyZWFrKCdFJywgJ2UnLCBTdGF0ZUUpOwor
ICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVEb3Q6CisgICAg
ICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGlm
IChudW1iZXJPZkRpZ2l0cyA8IFByZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAgICArK251
bWJlck9mRGlnaXRzOworICAgICAgICAgICAgICAgICAgICArK251bWJlck9mRGlnaXRzQWZ0ZXJE
b3Q7CisgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICo9IDEwOworICAgICAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRvciArPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZURvdERpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGVEb3REaWdpdDoKKyAgICAgICAg
ICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKG51
bWJlck9mRGlnaXRzIDwgUHJlY2lzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICsrbnVtYmVy
T2ZEaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWdpdHNBZnRlckRvdDsK
KyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKj0gMTA7CisgICAgICAgICAgICAgICAg
ICAgIGFjY3VtdWxhdG9yICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSGFuZGxlVHdvQ2hh
cnNBbmRCcmVhaygnRScsICdlJywgU3RhdGVFKTsKKyAgICAgICAgICAgIHJldHVybiBuYW4oKTsK
KworICAgICAgICBjYXNlIFN0YXRlRToKKyAgICAgICAgICAgIGlmIChjaCA9PSAnKycpIHsKKyAg
ICAgICAgICAgICAgICBleHBvbmVudFNpZ24gPSBQb3NpdGl2ZTsKKyAgICAgICAgICAgICAgICBz
dGF0ZSA9IFN0YXRlRVNpZ247CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBleHBvbmVu
dFNpZ24gPSBOZWdhdGl2ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRVNpZ247Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBjaCAt
ICcwJzsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRURpZ2l0OworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisK
KyAgICAgICAgY2FzZSBTdGF0ZUVEaWdpdDoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYg
Y2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZXhwb25lbnQgKj0gMTA7CisgICAgICAgICAg
ICAgICAgZXhwb25lbnQgKz0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50
ID4gRXhwb25lbnRNYXggKyBQcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFj
Y3VtdWxhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9uZW50U2lnbiA9
PSBOZWdhdGl2ZSA/IHplcm8oUG9zaXRpdmUpIDogaW5maW5pdHkoc2lnbik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB6ZXJvKHNpZ24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlRURpZ2l0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBT
dGF0ZUVTaWduOgorICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAg
ICAgICAgICAgICAgICBleHBvbmVudCA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIHN0YXRl
ID0gU3RhdGVFRGlnaXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiBuYW4oKTsKKworICAgICAgICBjYXNlIFN0YXRlU2lnbjoKKyAg
ICAgICAgICAgIGlmIChjaCA+PSAnMScgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAg
YWNjdW11bGF0b3IgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRpZ2l0cyA9
IDE7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZURpZ2l0OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYW5kbGVDaGFyQW5kQnJlYWso
JzAnLCBTdGF0ZVplcm8pOworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNh
c2UgU3RhdGVTdGFydDoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMScgJiYgY2ggPD0gJzknKSB7
CisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAg
ICBudW1iZXJPZkRpZ2l0cyA9IDE7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZURpZ2l0
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgc2lnbiA9IE5lZ2F0aXZlOworICAgICAg
ICAgICAgICAgIHN0YXRlID0gU3RhdGVTaWduOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPT0gJysnKSB7CisgICAgICAgICAgICAg
ICAgc2lnbiA9IFBvc2l0aXZlOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTaWduOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYW5k
bGVDaGFyQW5kQnJlYWsoJzAnLCBTdGF0ZVplcm8pOworICAgICAgICAgICAgSGFuZGxlQ2hhckFu
ZEJyZWFrKCcuJywgU3RhdGVEb3QpOworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAg
ICAgIGNhc2UgU3RhdGVaZXJvOgorICAgICAgICAgICAgaWYgKGNoID09ICcwJykKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKGNoID49ICcxJyAmJiBjaCA8PSAnOScp
IHsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGNoIC0gJzAnOworICAgICAgICAgICAg
ICAgIG51bWJlck9mRGlnaXRzID0gMTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRGln
aXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IEhhbmRsZUNoYXJBbmRCcmVhaygnLicsIFN0YXRlRG90KTsKKyAgICAgICAgICAgIEhhbmRsZVR3
b0NoYXJzQW5kQnJlYWsoJ0UnLCAnZScsIFN0YXRlRSk7CisgICAgICAgICAgICByZXR1cm4gbmFu
KCk7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KHN0YXRlID09IFN0YXRlWmVybykKKyAgICAgICAgcmV0dXJuIHplcm8oc2lnbik7CisKKyAgICBp
ZiAoc3RhdGUgPT0gU3RhdGVEaWdpdCB8fCBzdGF0ZSA9PSBTdGF0ZUVEaWdpdCB8fCBzdGF0ZSA9
PSBTdGF0ZURvdERpZ2l0KSB7CisgICAgICAgIGludCByZXN1bHRFeHBvbmVudCA9IGV4cG9uZW50
ICogKGV4cG9uZW50U2lnbiA9PSBOZWdhdGl2ZSA/IC0xIDogMSkgLSBudW1iZXJPZkRpZ2l0c0Fm
dGVyRG90ICsgbnVtYmVyT2ZFeHRyYURpZ2l0czsKKyAgICAgICAgaWYgKHJlc3VsdEV4cG9uZW50
IDwgRXhwb25lbnRNaW4pCisgICAgICAgICAgICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAg
ICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0gcmVzdWx0RXhwb25lbnQgLSBFeHBvbmVudE1heCAr
IDE7CisgICAgICAgIGlmIChvdmVyZmxvdyA+IDApIHsKKyAgICAgICAgICAgIGlmIChvdmVyZmxv
dyArIG51bWJlck9mRGlnaXRzIC0gbnVtYmVyT2ZEaWdpdHNBZnRlckRvdCA+IFByZWNpc2lvbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gaW5maW5pdHkoc2lnbik7CisgICAgICAgICAgICBhY2N1
bXVsYXRvciA9IHNjYWxlVXAoYWNjdW11bGF0b3IsIG92ZXJmbG93KTsKKyAgICAgICAgICAgIHJl
c3VsdEV4cG9uZW50IC09IG92ZXJmbG93OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIERl
Y2ltYWwoc2lnbiwgcmVzdWx0RXhwb25lbnQsIGFjY3VtdWxhdG9yKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbmFuKCk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6aW5maW5pdHkoY29uc3QgU2lnbiBz
aWduKQoreworICAgIHJldHVybiBEZWNpbWFsKEVuY29kZWREYXRhKHNpZ24sIEVuY29kZWREYXRh
OjpDbGFzc0luZmluaXR5KSk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6bmFuKCkKK3sKKyAgICBy
ZXR1cm4gRGVjaW1hbChFbmNvZGVkRGF0YShQb3NpdGl2ZSwgRW5jb2RlZERhdGE6OkNsYXNzTmFO
KSk7Cit9CisKK0RlY2ltYWwgRGVjaW1hbDo6cmVtYWluZGVyKGNvbnN0IERlY2ltYWwmIHJocykg
Y29uc3QKK3sKKyAgICBjb25zdCBEZWNpbWFsIHF1b3RpZW50ID0gKCp0aGlzIC8gcmhzKS5yb3Vu
ZCgpOworICAgIHJldHVybiBxdW90aWVudC5pc1NwZWNpYWwoKSA/IHF1b3RpZW50IDogKnRoaXMg
LSBxdW90aWVudCAqIHJoczsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpyb3VuZCgpIGNvbnN0Cit7
CisgICAgaWYgKGlzU3BlY2lhbCgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAo
ZXhwb25lbnQoKSA+PSAwKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICB1aW50NjRfdCBy
ZXN1bHQgPSBtX2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEaWdp
dHMgPSBjb3VudERpZ2l0cyhyZXN1bHQpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRyb3BEaWdp
dHMgPSAtZXhwb25lbnQoKTsKKyAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBudW1iZXJPZkRyb3BE
aWdpdHMpCisgICAgICAgIHJldHVybiB6ZXJvKFBvc2l0aXZlKTsKKworICAgIHJlc3VsdCA9IHNj
YWxlRG93bihyZXN1bHQsIG51bWJlck9mRHJvcERpZ2l0cyAtIDEpOworICAgIGlmIChyZXN1bHQg
JSAxMCA+PSA1KQorICAgICAgICByZXN1bHQgKz0gMTA7CisgICAgcmVzdWx0IC89IDEwOworICAg
IHJldHVybiBEZWNpbWFsKHNpZ24oKSwgMCwgcmVzdWx0KTsKK30KKworU3RyaW5nIERlY2ltYWw6
OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fZGF0YS5mb3JtYXRDbGFzcygpKSB7
CisgICAgY2FzZSBFbmNvZGVkRGF0YTo6Q2xhc3NJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHNp
Z24oKSA/ICItSW5maW5pdHkiIDogIkluZmluaXR5IjsKKworICAgIGNhc2UgRW5jb2RlZERhdGE6
OkNsYXNzTmFOOgorICAgICAgICByZXR1cm4gIk5hTiI7CisKKyAgICBjYXNlIEVuY29kZWREYXRh
OjpDbGFzc05vcm1hbDoKKyAgICBjYXNlIEVuY29kZWREYXRhOjpDbGFzc1plcm86CisgICAgICAg
IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgaWYgKHNpZ24oKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKKworICAgIGludCBv
cmlnaW5hbEV4cG9uZW50ID0gZXhwb25lbnQoKTsKKworICAgIGNvbnN0IGludCBtYXhEaWdpdHMg
PSBEQkxfRElHOworICAgIHVpbnQ2NF90IGNvZWZmaWNpZW50ID0gbV9kYXRhLmNvZWZmaWNpZW50
KCk7CisgICAgaW50IGxhc3REaWdpdCA9IDA7CisgICAgd2hpbGUgKGNvdW50RGlnaXRzKGNvZWZm
aWNpZW50KSA+IG1heERpZ2l0cykgeworICAgICAgICBsYXN0RGlnaXQgPSBjb2VmZmljaWVudCAl
IDEwOworICAgICAgICBjb2VmZmljaWVudCAvPSAxMDsKKyAgICAgICAgKytvcmlnaW5hbEV4cG9u
ZW50OworICAgIH0KKworICAgIGlmIChsYXN0RGlnaXQgPj0gNSkKKyAgICAgICAgKytjb2VmZmlj
aWVudDsKKworICAgIHdoaWxlIChvcmlnaW5hbEV4cG9uZW50IDwgMCAmJiBjb2VmZmljaWVudCAm
JiAhKGNvZWZmaWNpZW50ICUgMTApKSB7CisgICAgICAgIGNvZWZmaWNpZW50IC89IDEwOworICAg
ICAgICArK29yaWdpbmFsRXhwb25lbnQ7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nIGRpZ2l0
cyA9IFN0cmluZzo6bnVtYmVyKGNvZWZmaWNpZW50KTsKKyAgICBpbnQgY29lZmZpY2llbnRMZW5n
dGggPSBzdGF0aWNfY2FzdDxpbnQ+KGRpZ2l0cy5sZW5ndGgoKSk7CisgICAgY29uc3QgaW50IGFk
anVzdGVkRXhwb25lbnQgPSBvcmlnaW5hbEV4cG9uZW50ICsgY29lZmZpY2llbnRMZW5ndGggLSAx
OworICAgIGlmIChvcmlnaW5hbEV4cG9uZW50IDw9IDAgJiYgYWRqdXN0ZWRFeHBvbmVudCA+PSAt
NikgeworICAgICAgICBpZiAoIW9yaWdpbmFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGRpZ2l0cyk7CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkanVzdGVkRXhwb25lbnQgPj0gMCkgeworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2VmZmljaWVudExlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZGlnaXRzW2ldKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaSA9PSBhZGp1c3RlZEV4cG9uZW50KQorICAgICAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgnLicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIwLiIpOwor
ICAgICAgICBmb3IgKGludCBpID0gYWRqdXN0ZWRFeHBvbmVudCArIDE7IGkgPCAwOyArK2kpCisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnMCcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGRpZ2l0cyk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHNb
MF0pOworICAgICAgICB3aGlsZSAoY29lZmZpY2llbnRMZW5ndGggPj0gMiAmJiBkaWdpdHNbY29l
ZmZpY2llbnRMZW5ndGggLSAxXSA9PSAnMCcpCisgICAgICAgICAgICAtLWNvZWZmaWNpZW50TGVu
Z3RoOworICAgICAgICBpZiAoY29lZmZpY2llbnRMZW5ndGggPj0gMikgeworICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY29l
ZmZpY2llbnRMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdp
dHNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkanVzdGVkRXhwb25lbnQpIHsKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFkanVzdGVkRXhwb25lbnQgPCAwID8gImUiIDogImUr
Iik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihhZGp1c3RlZEV4
cG9uZW50KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjp6ZXJvKFNpZ24gc2lnbikKK3sKKyAgICByZXR1cm4g
RGVjaW1hbChFbmNvZGVkRGF0YShzaWduLCBFbmNvZGVkRGF0YTo6Q2xhc3NaZXJvKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RlY2ltYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYzRjOGUzMTFiY2UyMDRkMjE4ZDE2MmM1MWFkOGFlYWI0MTUwODZlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5oCkBAIC0wLDAgKzEsMTc2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBEZWNpbWFsX2gKKyNkZWZpbmUgRGVjaW1hbF9oCisKKyNpbmNsdWRlIDxzdGRp
bnQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBEZWNpbWFsUHJp
dmF0ZSB7CitjbGFzcyBTcGVjaWFsVmFsdWVIYW5kbGVyOworfQorCisvLyBUaGlzIGNsYXNzIHJl
cHJlc2VudHMgZGVjaW1hbCBiYXNlIGZsb2F0aW5nIHBvaW50IG51bWJlci4KKy8vCisvLyBGSVhN
RTogT25jZSBhbGwgQysrIGNvbXBpbGVyIHN1cHBvcnQgZGVjaW1hbCB0eXBlLCB3ZSBzaG91bGQg
cmVwbGFjZSB0aGlzCisvLyBjbGFzcyB0byBjb21waWxlciBzdXBwb3J0ZWQgb25lLiBTZWUgYmVs
b3cgVVJJIGZvciBjdXJyZW50IHN0YXR1cyBvZiBkZWNpbWFsCisvLyB0eXBlIGZvciBDKys6IC8v
IGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDYv
bjE5NzcuaHRtbAorY2xhc3MgRGVjaW1hbCB7CitwdWJsaWM6CisgICAgZW51bSBTaWduIHsKKyAg
ICAgICAgUG9zaXRpdmUsCisgICAgICAgIE5lZ2F0aXZlLAorICAgIH07CisKKyAgICAvLyBZb3Ug
c2hvdWxkIG5vdCB1c2UgRW5jb2RlZERhdGEgb3RoZXIgdGhhbiB1bml0IHRlc3RpbmcuCisgICAg
Y2xhc3MgRW5jb2RlZERhdGEgeworICAgICAgICAvLyBGb3IgYWNjZXNzaW5nIEZvcm1hdENsYXNz
LgorICAgICAgICBmcmllbmQgY2xhc3MgRGVjaW1hbDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERl
Y2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOworICAgIHB1YmxpYzoKKyAgICAgICAg
RW5jb2RlZERhdGEoU2lnbiwgaW50IGV4cG9uZW50LCB1aW50NjRfdCBjb2VmZmljaWVudCk7CisK
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVuY29kZWREYXRhJikgY29uc3Q7CisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFbmNvZGVkRGF0YSYgYW5vdGhlcikgY29uc3QgeyBy
ZXR1cm4gIW9wZXJhdG9yPT0oYW5vdGhlcik7IH0KKworICAgICAgICB1aW50NjRfdCBjb2VmZmlj
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29lZmZpY2llbnQ7IH0KKyAgICAgICAgaW50IGNvdW50
RGlnaXRzKCkgY29uc3Q7CisgICAgICAgIGludCBleHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwb25lbnQ7IH0KKyAgICAgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0IHsgcmV0dXJuICFpc1Nw
ZWNpYWwoKTsgfQorICAgICAgICBib29sIGlzTmFOKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXRD
bGFzcyA9PSBDbGFzc05hTjsgfQorICAgICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9ybWF0Q2xhc3MgPT0gQ2xhc3NJbmZpbml0eSB8fCBtX2Zvcm1hdENsYXNzID09IENs
YXNzTmFOOyB9CisgICAgICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXRD
bGFzcyA9PSBDbGFzc1plcm87IH0KKyAgICAgICAgU2lnbiBzaWduKCkgY29uc3QgeyByZXR1cm4g
bV9zaWduOyB9CisgICAgICAgIHZvaWQgc2V0U2lnbihTaWduIHNpZ24pIHsgbV9zaWduID0gc2ln
bjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZW51bSBGb3JtYXRDbGFzcyB7CisgICAgICAg
ICAgICBDbGFzc0luZmluaXR5LAorICAgICAgICAgICAgQ2xhc3NOb3JtYWwsCisgICAgICAgICAg
ICBDbGFzc05hTiwKKyAgICAgICAgICAgIENsYXNzWmVybywKKyAgICAgICAgfTsKKworICAgICAg
ICBFbmNvZGVkRGF0YShTaWduLCBGb3JtYXRDbGFzcyk7CisgICAgICAgIEZvcm1hdENsYXNzIGZv
cm1hdENsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXRDbGFzczsgfQorCisgICAgICAgIHVp
bnQ2NF90IG1fY29lZmZpY2llbnQ7CisgICAgICAgIGludDE2X3QgbV9leHBvbmVudDsKKyAgICAg
ICAgRm9ybWF0Q2xhc3MgbV9mb3JtYXRDbGFzczsKKyAgICAgICAgU2lnbiBtX3NpZ247CisgICAg
fTsKKworICAgIERlY2ltYWwoaW50MzJfdCA9IDApOworICAgIERlY2ltYWwoU2lnbiwgaW50IGV4
cG9uZW50LCB1aW50NjRfdCBjb2VmZmljaWVudCk7CisgICAgRGVjaW1hbChjb25zdCBEZWNpbWFs
Jik7CisKKyAgICBEZWNpbWFsJiBvcGVyYXRvcj0oY29uc3QgRGVjaW1hbCYpOworICAgIERlY2lt
YWwmIG9wZXJhdG9yKz0oY29uc3QgRGVjaW1hbCYpOworICAgIERlY2ltYWwmIG9wZXJhdG9yLT0o
Y29uc3QgRGVjaW1hbCYpOworICAgIERlY2ltYWwmIG9wZXJhdG9yKj0oY29uc3QgRGVjaW1hbCYp
OworICAgIERlY2ltYWwmIG9wZXJhdG9yLz0oY29uc3QgRGVjaW1hbCYpOworCisgICAgRGVjaW1h
bCBvcGVyYXRvci0oKSBjb25zdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZWNpbWFs
JikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBEZWNp
bWFsJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IERlY2ltYWwmKSBjb25zdDsK
KworICAgIERlY2ltYWwgb3BlcmF0b3IrKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNp
bWFsIG9wZXJhdG9yLShjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCBvcGVyYXRv
ciooY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIERlY2ltYWwgb3BlcmF0b3IvKGNvbnN0IERl
Y2ltYWwmKSBjb25zdDsKKworICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEuaXNGaW5pdGUoKTsgfQorICAgIGJvb2wgaXNOYU4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
aXNOYU4oKTsgfQorICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHNpZ24oKSA9
PSBOZWdhdGl2ZTsgfQorICAgIGJvb2wgaXNQb3NpdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHNpZ24o
KSA9PSBQb3NpdGl2ZTsgfQorICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmlzU3BlY2lhbCgpOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEuaXNaZXJvKCk7IH0KKworICAgIERlY2ltYWwgYWJzKCkgY29uc3Q7CisgICAgRGVjaW1hbCBj
ZWlsaW5nKCkgY29uc3Q7CisgICAgRGVjaW1hbCBmbG9vcigpIGNvbnN0OworICAgIERlY2ltYWwg
cmVtYWluZGVyKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIHJvdW5kKCkgY29u
c3Q7CisKKyAgICAvLyBOb3RlOiB0b1N0cmluZyBtZXRob2Qgc3VwcG9ydHMgaW5maW5pdHkgYW5k
IG5hbiBidXQgZnJvbVN0cmluZyBub3QuCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisK
KyAgICAvLyBmcm9tU3RyaW5nIHN1cHBvcnRzIGZvbGxvd2luZyBzeW50YXggRUJORjoKKyAgICAv
LyAgbnVtYmVyIDo6PSBzaWduPyBkaWdpdCsgKCcuJyBkaWdpdCopIChleHBvbmVudC1tYXJrZXIg
c2lnbj8gZGlnaXQrKT8KKyAgICAvLyAgICAgICAgICB8IHNpZ24/ICcuJyBkaWdpdCsgKGV4cG9u
ZW50LW1hcmtlciBzaWduPyBkaWdpdCspPworICAgIC8vICBzaWduIDo6PSAnKycgfCAnLScKKyAg
ICAvLyAgZXhwb25lbnQtbWFya2VyIDo6PSAnZScgfCAnRScKKyAgICAvLyAgZGlnaXQgOjo9ICcw
JyB8ICcxJyB8IC4uLiB8ICc5JworICAgIC8vIE5vdGU6IGZyb21TdHJpbmcgZG9lc24ndCBzdXBw
b3J0ICJpbmZpbml0eSIgYW5kICJuYW4iLgorICAgIHN0YXRpYyBEZWNpbWFsIGZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIERlY2ltYWwgaW5maW5pdHkoU2lnbik7CisgICAg
c3RhdGljIERlY2ltYWwgbmFuKCk7CisgICAgc3RhdGljIERlY2ltYWwgemVybyhTaWduKTsKKwor
ICAgIC8vIFlvdSBzaG91bGQgbm90IHVzZSBiZWxvdyBtZXRob2RzLiBXZSBleHBvc2UgdGhlbSBm
b3IgdW5pdCB0ZXN0aW5nLgorICAgIGV4cGxpY2l0IERlY2ltYWwoY29uc3QgRW5jb2RlZERhdGEm
KTsKKyAgICBjb25zdCBFbmNvZGVkRGF0YSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQWxpZ25lZE9wZXJhbmRzIHsKKyAgICAgICAgdWlu
dDY0X3QgbGhzQ29lZmZpY2llbnQ7CisgICAgICAgIHVpbnQ2NF90IHJoc0NvZWZmaWNpZW50Owor
ICAgICAgICBpbnQgZXhwb25lbnQ7CisgICAgfTsKKworICAgIERlY2ltYWwoZG91YmxlKTsKKyAg
ICBEZWNpbWFsIGNvbXBhcmVUbyhjb25zdCBEZWNpbWFsJikgY29uc3Q7CisKKyAgICBzdGF0aWMg
QWxpZ25lZE9wZXJhbmRzIGFsaWduT3BlcmFuZHMoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBE
ZWNpbWFsJiByaHMpOworICAgIHN0YXRpYyBpbmxpbmUgU2lnbiBpbnZlcnRTaWduKFNpZ24gc2ln
bikgeyByZXR1cm4gc2lnbiA9PSBOZWdhdGl2ZSA/IFBvc2l0aXZlIDogTmVnYXRpdmU7IH0KKwor
ICAgIGludCBleHBvbmVudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNGaW5pdGUo
KSk7CisgICAgICAgIHJldHVybiBtX2RhdGEuZXhwb25lbnQoKTsKKyAgICB9CisKKyAgICBTaWdu
IHNpZ24oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuc2lnbigpOyB9CisKKyAgICBFbmNvZGVkRGF0
YSBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEZWNp
bWFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDFhNjg4YmJjY2MyYmFiOGQw
N2NmY2U1MzhmZGM1NzAwZDM0ZWIyYjkuLjMwYzUzMTNjMjMxMzE1YjM0NWI3ODViMTZmNWIwM2Yz
ZDAxNTFiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtOTUsNiArOTUsNyBA
QAogICAgICAgICAgICAgJ3Rlc3RzL0NsaXBib2FyZENocm9taXVtVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKKyAgICAg
ICAgICAgICd0ZXN0cy9EZWNpbWFsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJ
bWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmF3aW5nQnVmZmVyQ2hyb21pdW1U
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVjaW1hbFRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWNpbWFsVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDgzN2E2YTc5MmEzYzQ5M2IzMmYxNTZlYzViNGM0ZDUxMTI3NmJiNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVjaW1hbFRlc3QuY3BwCkBAIC0wLDAg
KzEsOTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRlY2ltYWwuaCIKKworI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IERlY2ltYWwmIGRlY2lt
YWwpCit7CisgICAgRGVjaW1hbDo6RW5jb2RlZERhdGEgZGF0YSA9IGRlY2ltYWwudmFsdWUoKTsK
KyAgICByZXR1cm4gb3MgCisgICAgICAgIDw8ICJlbmNvZGUoIiA8PCBTdHJpbmc6Om51bWJlcihk
YXRhLmNvZWZmaWNpZW50KCkpLmFzY2lpKCkuZGF0YSgpCisgICAgICAgIDw8ICIsICIgPDwgU3Ry
aW5nOjpudW1iZXIoZGF0YS5leHBvbmVudCgpKS5hc2NpaSgpLmRhdGEoKQorICAgICAgICA8PCAi
LCAiIDw8IChkYXRhLnNpZ24oKSA9PSBEZWNpbWFsOjpOZWdhdGl2ZSA/ICJOZWdhdGl2ZSIgOiAi
UG9zaXRpdmUiKQorICAgICAgICA8PCAiKT0iIDw8IGRlY2ltYWwudG9TdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworLy8gU2ltdWxhdGUgV2ViQ29yZS9odG1sL1N0ZXBSYW5nZQorY2xhc3MgRGVj
aW1hbFN0ZXBSYW5nZSB7CitwdWJsaWM6CisgICAgRGVjaW1hbCBtYXhpbXVtOworICAgIERlY2lt
YWwgbWluaW11bTsKKyAgICBEZWNpbWFsIHN0ZXA7CisKKyAgICBEZWNpbWFsU3RlcFJhbmdlKGNv
bnN0IERlY2ltYWwmIG1pbmltdW0sIGNvbnN0IERlY2ltYWwmIG1heGltdW0sIGNvbnN0IERlY2lt
YWwmIHN0ZXApCisgICAgICAgIDogbWF4aW11bShtYXhpbXVtKQorICAgICAgICAsIG1pbmltdW0o
bWluaW11bSkKKyAgICAgICAgLCBzdGVwKHN0ZXApCisgICAgeworICAgIH0KKworICAgIERlY2lt
YWwgY2xhbXBWYWx1ZShEZWNpbWFsIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3Qg
RGVjaW1hbCByZXN1bHQgPSBtaW5pbXVtICsgKCh2YWx1ZSAtIG1pbmltdW0pIC8gc3RlcCkucm91
bmQoKSAqIHN0ZXA7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXNGaW5pdGUoKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQgPiBtYXhpbXVtID8gcmVzdWx0IC0gc3RlcCA6IHJlc3VsdDsKKyAgICB9
Cit9OworCitjbGFzcyBEZWNpbWFsVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHJv
dGVjdGVkOgorICAgIHR5cGVkZWYgRGVjaW1hbDo6U2lnbiBTaWduOworICAgIHByb3RlY3RlZDog
c3RhdGljIGNvbnN0IFNpZ24gUG9zaXRpdmUgPSBEZWNpbWFsOjpQb3NpdGl2ZTsKKyAgICBwcm90
ZWN0ZWQ6IHN0YXRpYyBjb25zdCBTaWduIE5lZ2F0aXZlID0gRGVjaW1hbDo6TmVnYXRpdmU7CisK
KyAgICBEZWNpbWFsIGVuY29kZSh1aW50NjRfdCBjb2VmZmljaWVudCwgaW50IGV4cG9uZW50LCBT
aWduIHNpZ24pCisgICAgeworICAgICAgICByZXR1cm4gRGVjaW1hbChzaWduLCBleHBvbmVudCwg
Y29lZmZpY2llbnQpOworICAgIH0KKworICAgIHByb3RlY3RlZDogRGVjaW1hbCBmcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERlY2ltYWw6OmZy
b21TdHJpbmcoc3RyaW5nKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQ6IFN0cmluZyBzdGVwRG93
bihjb25zdCBTdHJpbmcmIG1pbmltdW0sIGNvbnN0IFN0cmluZyYgbWF4aW11bSwgY29uc3QgU3Ry
aW5nJiBzdGVwLCBjb25zdCBTdHJpbmcmIHZhbHVlU3RyaW5nLCBpbnQgbnVtYmVyT2ZTdGVwVGlt
ZXMpCisgICAgeworICAgICAgICBEZWNpbWFsU3RlcFJhbmdlIHN0ZXBSYW5nZShmcm9tU3RyaW5n
KG1pbmltdW0pLCBmcm9tU3RyaW5nKG1heGltdW0pLCBmcm9tU3RyaW5nKHN0ZXApKTsKKyAgICAg
ICAgRGVjaW1hbCB2YWx1ZSA9IGZyb21TdHJpbmcodmFsdWVTdHJpbmcpOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bWJlck9mU3RlcFRpbWVzOyArK2kpIHsKKyAgICAgICAgICAgIHZh
bHVlIC09IHN0ZXBSYW5nZS5zdGVwOworICAgICAgICAgICAgdmFsdWUgPSBzdGVwUmFuZ2UuY2xh
bXBWYWx1ZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5n
KCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkOiBTdHJpbmcgc3RlcFVwKGNvbnN0IFN0cmluZyYg
bWluaW11bSwgY29uc3QgU3RyaW5nJiBtYXhpbXVtLCBjb25zdCBTdHJpbmcmIHN0ZXAsIGNvbnN0
IFN0cmluZyYgdmFsdWVTdHJpbmcsIGludCBudW1iZXJPZlN0ZXBUaW1lcykKKyAgICB7CisgICAg
ICAgIERlY2ltYWxTdGVwUmFuZ2Ugc3RlcFJhbmdlKGZyb21TdHJpbmcobWluaW11bSksIGZyb21T
dHJpbmcobWF4aW11bSksIGZyb21TdHJpbmcoc3RlcCkpOworICAgICAgICBEZWNpbWFsIHZhbHVl
ID0gZnJvbVN0cmluZyh2YWx1ZVN0cmluZyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtYmVyT2ZTdGVwVGltZXM7ICsraSkgeworICAgICAgICAgICAgdmFsdWUgKz0gc3RlcFJhbmdl
LnN0ZXA7CisgICAgICAgICAgICB2YWx1ZSA9IHN0ZXBSYW5nZS5jbGFtcFZhbHVlKHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKKyAgICB9Cit9Owor
CitURVNUX0YoRGVjaW1hbFRlc3QsIEFicykKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAs
IFBvc2l0aXZlKSwgZW5jb2RlKDAsIDAsIFBvc2l0aXZlKS5hYnMoKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAwLCBOZWdhdGl2ZSkuYWJzKCkpOwor
CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAxMCwgUG9zaXRpdmUpLCBlbmNvZGUoMCwgMTAsIFBv
c2l0aXZlKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAxMCwgUG9zaXRpdmUpLCBl
bmNvZGUoMCwgMTAsIE5lZ2F0aXZlKS5hYnMoKSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAs
IC0xMCwgUG9zaXRpdmUpLCBlbmNvZGUoMCwgLTEwLCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMCwgLTEwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAtMTAsIE5lZ2F0aXZl
KS5hYnMoKSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2Rl
KDEsIDAsIFBvc2l0aXZlKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3Np
dGl2ZSksIGVuY29kZSgxLCAwLCBOZWdhdGl2ZSkuYWJzKCkpOworCisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxLCAxMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKS5hYnMoKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAsIE5lZ2F0
aXZlKS5hYnMoKSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMCwgUG9zaXRpdmUpLCBl
bmNvZGUoMSwgLTEwLCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwg
LTEwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAsIE5lZ2F0aXZlKS5hYnMoKSk7Cit9CisKK1RF
U1RfRihEZWNpbWFsVGVzdCwgQWJzQmlnRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxLCAxMDAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkuYWJzKCkpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAwMCwg
TmVnYXRpdmUpLmFicygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBBYnNTbWFsbEV4cG9u
ZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSwgZW5jb2Rl
KDEsIC0xMDAwLCBQb3NpdGl2ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEw
MDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkuYWJzKCkpOworfQorCitU
RVNUX0YoRGVjaW1hbFRlc3QsIEFic1NwZWNpYWxWYWx1ZXMpCit7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLmFi
cygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBEZWNpbWFs
OjppbmZpbml0eShOZWdhdGl2ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4o
KSwgRGVjaW1hbDo6bmFuKCkuYWJzKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEFkZCkK
K3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgwKSArIERl
Y2ltYWwoMCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpICsgRGVjaW1h
bCgtMSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKC0xKSArIERlY2ltYWwo
MikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoOTkp
ICsgRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIE5lZ2F0aXZlKSwg
RGVjaW1hbCgtNTApICsgRGVjaW1hbCgtNTApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAw
MDAwMDAwMDAwMDAsIDM1LCBQb3NpdGl2ZSksIGVuY29kZSgxLCA1MCwgUG9zaXRpdmUpICsgRGVj
aW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAwMDAwMDAwMDAwMDAwLCAzNSwgUG9z
aXRpdmUpLCBEZWNpbWFsKDEpICsgZW5jb2RlKDEsIDUwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMTAwMDAwMDAwMDEsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwLCBQb3Np
dGl2ZSkgKyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAxLCAw
LCBQb3NpdGl2ZSksIERlY2ltYWwoMSkgKyBlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRp
dmUpICsgZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAt
MTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAt
MTAyMiwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBBZGRCaWdFeHBvbmVu
dCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEs
IDEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMiwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpICsg
ZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmlu
aXR5KFBvc2l0aXZlKSwgZW5jb2RlKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgo
KSwgMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkg
KyBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwg
QWRkU21hbGxFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZl
KSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDIsIC0xMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAy
MiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0Yo
RGVjaW1hbFRlc3QsIEFkZFNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29uc3QgRGVjaW1hbCBJbmZp
bml0eShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWlu
dXNJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOworICAgIGNvbnN0IERlY2lt
YWwgTmFOKERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigxMCk7CisKKyAg
ICBFWFBFQ1RfRVEoSW5maW5pdHksIEluZmluaXR5ICsgSW5maW5pdHkpOworICAgIEVYUEVDVF9F
UShOYU4sIEluZmluaXR5ICsgTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWlu
dXNJbmZpbml0eSArIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWlu
dXNJbmZpbml0eSArIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJ
bmZpbml0eSArIFRlbik7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gKyBJbmZpbml0eSk7
CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKyBUZW4pOworICAg
IEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gKyBNaW51c0luZmluaXR5KTsKKworICAgIEVY
UEVDVF9FUShOYU4sIE5hTiArIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOICsgVGVuKTsK
KyAgICBFWFBFQ1RfRVEoTmFOLCBUZW4gKyBOYU4pOworCisgICAgRVhQRUNUX0VRKE5hTiwgTmFO
IC0gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAtIE1pbnVzSW5maW5pdHkpOwor
ICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5IC0gTmFOKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBN
aW51c0luZmluaXR5IC0gTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDZWlsaW5nKQor
eworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpLmNlaWxpbmcoKSk7CisgICAg
RVhQRUNUX0VRKERlY2ltYWwoMiksIGVuY29kZSgxMSwgLTEsIFBvc2l0aXZlKS5jZWlsaW5nKCkp
OworICAgIEVYUEVDVF9FUShEZWNpbWFsKDIpLCBlbmNvZGUoMTMsIC0xLCBQb3NpdGl2ZSkuY2Vp
bGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE1LCAtMSwgUG9zaXRp
dmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMiksIGVuY29kZSgxOSwgLTEs
IFBvc2l0aXZlKS5jZWlsaW5nKCkpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBEZWNp
bWFsKC0xKS5jZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgZW5jb2RlKDEx
LCAtMSwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBl
bmNvZGUoMTMsIC0xLCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1h
bCgtMSksIGVuY29kZSgxNSwgLTEsIE5lZ2F0aXZlKS5jZWlsaW5nKCkpOworICAgIEVYUEVDVF9F
UShEZWNpbWFsKC0xKSwgZW5jb2RlKDE5LCAtMSwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7Cit9CisK
K1RFU1RfRihEZWNpbWFsVGVzdCwgQ2VpbGluZ0JpZ0V4cG9uZW50KQoreworICAgIEVYUEVDVF9F
UShlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpLmNl
aWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSksIGVuY29k
ZSgxLCAxMDAwLCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0
LCBDZWlsaW5nU21hbGxFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBv
c2l0aXZlKSwgZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDAsIDAsIE5lZ2F0aXZlKSwgZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSku
Y2VpbGluZygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDZWlsaW5nU3BlY2lhbFZhbHVl
cykKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBEZWNpbWFs
OjppbmZpbml0eShQb3NpdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6
aW5maW5pdHkoTmVnYXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuY2VpbGluZygp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWw6Om5hbigpLmNlaWxpbmco
KSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQ29tcGFyZSkKK3sKKyAgICBFWFBFQ1RfVFJV
RShEZWNpbWFsKDApID09IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkg
IT0gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKSA8IERlY2ltYWwoMSkp
OworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgPD0gRGVjaW1hbCgwKSk7CisgICAgRVhQRUNU
X1RSVUUoRGVjaW1hbCgwKSA+IERlY2ltYWwoLTEpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFs
KDApID49IERlY2ltYWwoMCkpOworCisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPT0gRGVj
aW1hbCgyKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgIT0gRGVjaW1hbCgxKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPCBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRkFM
U0UoRGVjaW1hbCgxKSA8PSBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgx
KSA+IERlY2ltYWwoMikpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpID49IERlY2ltYWwo
MikpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIENvbXBhcmVCaWdFeHBvbmVudCkKK3sKKyAg
ICBFWFBFQ1RfVFJVRShlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpID09IGVuY29kZSgxLCAxMDAw
LCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUp
ICE9IGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUo
MSwgMTAwMCwgUG9zaXRpdmUpIDwgZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQ
RUNUX1RSVUUoZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSA8PSBlbmNvZGUoMSwgMTAwMCwgUG9z
aXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSA+IGVu
Y29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAxMDAw
LCBQb3NpdGl2ZSkgPj0gZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisKKyAgICBFWFBFQ1Rf
VFJVRShlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpID09IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2
ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpICE9IGVuY29k
ZSgxLCAxMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgMTAwMCwg
TmVnYXRpdmUpIDwgZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUo
ZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSA8PSBlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSA+IGVuY29kZSgxLCAx
MDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2
ZSkgPj0gZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoZW5j
b2RlKDIsIDEwMDAsIFBvc2l0aXZlKSA9PSBlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpKTsKKyAg
ICBFWFBFQ1RfVFJVRShlbmNvZGUoMiwgMTAwMCwgUG9zaXRpdmUpICE9IGVuY29kZSgxLCAxMDAw
LCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwgMTAwMCwgUG9zaXRpdmUp
IDwgZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgy
LCAxMDAwLCBQb3NpdGl2ZSkgPD0gZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQ
RUNUX1RSVUUoZW5jb2RlKDIsIDEwMDAsIFBvc2l0aXZlKSA+IGVuY29kZSgxLCAxMDAwLCBQb3Np
dGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgyLCAxMDAwLCBQb3NpdGl2ZSkgPj0gZW5j
b2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDIsIDEw
MDAsIE5lZ2F0aXZlKSA9PSBlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1Rf
VFJVRShlbmNvZGUoMiwgMTAwMCwgTmVnYXRpdmUpICE9IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2
ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgyLCAxMDAwLCBOZWdhdGl2ZSkgPCBlbmNvZGUo
MSwgMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMiwgMTAwMCwgTmVn
YXRpdmUpIDw9IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShl
bmNvZGUoMiwgMTAwMCwgTmVnYXRpdmUpID4gZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAxMDAwLCBOZWdhdGl2ZSkgPj0gZW5jb2RlKDEsIDEw
MDAsIE5lZ2F0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQ29tcGFyZVNtYWxsRXhw
b25lbnQpCit7CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkgPT0g
ZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwg
LTEwMDAsIFBvc2l0aXZlKSAhPSBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpIDwgZW5jb2RlKDEsIC0xMDAwLCBQ
b3NpdGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpIDw9
IGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEs
IC0xMDAwLCBQb3NpdGl2ZSkgPiBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQ
RUNUX1RSVUUoZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkgPj0gZW5jb2RlKDEsIC0xMDAwLCBQ
b3NpdGl2ZSkpOworCisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkg
PT0gZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUo
MSwgLTEwMDAsIE5lZ2F0aXZlKSAhPSBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpIDwgZW5jb2RlKDEsIC0xMDAw
LCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUp
IDw9IGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2Rl
KDEsIC0xMDAwLCBOZWdhdGl2ZSkgPiBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7CisgICAg
RVhQRUNUX1RSVUUoZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkgPj0gZW5jb2RlKDEsIC0xMDAw
LCBOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAtMTAwMCwgUG9zaXRp
dmUpID09IGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNv
ZGUoMiwgLTEwMDAsIFBvc2l0aXZlKSAhPSBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAtMTAwMCwgUG9zaXRpdmUpIDwgZW5jb2RlKDEsIC0x
MDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwgLTEwMDAsIFBvc2l0
aXZlKSA8PSBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUoZW5j
b2RlKDIsIC0xMDAwLCBQb3NpdGl2ZSkgPiBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7Cisg
ICAgRVhQRUNUX1RSVUUoZW5jb2RlKDIsIC0xMDAwLCBQb3NpdGl2ZSkgPj0gZW5jb2RlKDEsIC0x
MDAwLCBQb3NpdGl2ZSkpOworCisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAtMTAwMCwgTmVn
YXRpdmUpID09IGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShl
bmNvZGUoMiwgLTEwMDAsIE5lZ2F0aXZlKSAhPSBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7
CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDIsIC0xMDAwLCBOZWdhdGl2ZSkgPCBlbmNvZGUoMSwg
LTEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDIsIC0xMDAwLCBOZWdh
dGl2ZSkgPD0gZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShl
bmNvZGUoMiwgLTEwMDAsIE5lZ2F0aXZlKSA+IGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDIsIC0xMDAwLCBOZWdhdGl2ZSkgPj0gZW5jb2RlKDEs
IC0xMDAwLCBOZWdhdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIENvbXBhcmVTcGVj
aWFsVmFsdWVzKQoreworICAgIGNvbnN0IERlY2ltYWwgSW5maW5pdHkoRGVjaW1hbDo6aW5maW5p
dHkoUG9zaXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6
aW5maW5pdHkoTmVnYXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4o
KSk7CisgICAgY29uc3QgRGVjaW1hbCBaZXJvKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpKTsKKyAg
ICBjb25zdCBEZWNpbWFsIE1pbnVzWmVybyhEZWNpbWFsOjp6ZXJvKE5lZ2F0aXZlKSk7CisgICAg
Y29uc3QgRGVjaW1hbCBUZW4oMTApOworCisgICAgRVhQRUNUX1RSVUUoWmVybyA9PSBaZXJvKTsK
KyAgICBFWFBFQ1RfRkFMU0UoWmVybyAhPSBaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoWmVybyA8
IFplcm8pOworICAgIEVYUEVDVF9UUlVFKFplcm8gPD0gWmVybyk7CisgICAgRVhQRUNUX0ZBTFNF
KFplcm8gPiBaZXJvKTsKKyAgICBFWFBFQ1RfVFJVRShaZXJvID49IFplcm8pOworCisgICAgRVhQ
RUNUX1RSVUUoWmVybyA9PSBNaW51c1plcm8pOworICAgIEVYUEVDVF9GQUxTRShaZXJvICE9IE1p
bnVzWmVybyk7CisgICAgRVhQRUNUX0ZBTFNFKFplcm8gPCBNaW51c1plcm8pOworICAgIEVYUEVD
VF9UUlVFKFplcm8gPD0gTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoWmVybyA+IE1pbnVz
WmVybyk7CisgICAgRVhQRUNUX1RSVUUoWmVybyA+PSBNaW51c1plcm8pOworCisgICAgRVhQRUNU
X1RSVUUoTWludXNaZXJvID09IFplcm8pOworICAgIEVYUEVDVF9GQUxTRShNaW51c1plcm8gIT0g
WmVybyk7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzWmVybyA8IFplcm8pOworICAgIEVYUEVDVF9U
UlVFKE1pbnVzWmVybyA8PSBaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNaZXJvID4gWmVy
byk7CisgICAgRVhQRUNUX1RSVUUoTWludXNaZXJvID49IFplcm8pOworCisgICAgRVhQRUNUX1RS
VUUoTWludXNaZXJvID09IE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzWmVybyAh
PSBNaW51c1plcm8pOworICAgIEVYUEVDVF9GQUxTRShNaW51c1plcm8gPCBNaW51c1plcm8pOwor
ICAgIEVYUEVDVF9UUlVFKE1pbnVzWmVybyA8PSBNaW51c1plcm8pOworICAgIEVYUEVDVF9GQUxT
RShNaW51c1plcm8gPiBNaW51c1plcm8pOworICAgIEVYUEVDVF9UUlVFKE1pbnVzWmVybyA+PSBN
aW51c1plcm8pOworCisgICAgRVhQRUNUX1RSVUUoSW5maW5pdHkgPT0gSW5maW5pdHkpOworICAg
IEVYUEVDVF9GQUxTRShJbmZpbml0eSAhPSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKElu
ZmluaXR5IDwgSW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKEluZmluaXR5IDw9IEluZmluaXR5
KTsKKyAgICBFWFBFQ1RfRkFMU0UoSW5maW5pdHkgPiBJbmZpbml0eSk7CisgICAgRVhQRUNUX1RS
VUUoSW5maW5pdHkgPj0gSW5maW5pdHkpOworCisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5ID09
IFRlbik7CisgICAgRVhQRUNUX1RSVUUoSW5maW5pdHkgIT0gVGVuKTsKKyAgICBFWFBFQ1RfRkFM
U0UoSW5maW5pdHkgPCBUZW4pOworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0eSA8PSBUZW4pOwor
ICAgIEVYUEVDVF9UUlVFKEluZmluaXR5ID4gVGVuKTsKKyAgICBFWFBFQ1RfVFJVRShJbmZpbml0
eSA+PSBUZW4pOworCisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5ID09IE1pbnVzSW5maW5pdHkp
OworICAgIEVYUEVDVF9UUlVFKEluZmluaXR5ICE9IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVD
VF9GQUxTRShJbmZpbml0eSA8IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShJbmZp
bml0eSA8PSBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShJbmZpbml0eSA+IE1pbnVz
SW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKEluZmluaXR5ID49IE1pbnVzSW5maW5pdHkpOwor
CisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5ID09IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKElu
ZmluaXR5ICE9IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5IDwgTmFOKTsKKyAgICBF
WFBFQ1RfRkFMU0UoSW5maW5pdHkgPD0gTmFOKTsKKyAgICBFWFBFQ1RfRkFMU0UoSW5maW5pdHkg
PiBOYU4pOworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0eSA+PSBOYU4pOworCisgICAgRVhQRUNU
X0ZBTFNFKE1pbnVzSW5maW5pdHkgPT0gSW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKE1pbnVz
SW5maW5pdHkgIT0gSW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKE1pbnVzSW5maW5pdHkgPCBJ
bmZpbml0eSk7CisgICAgRVhQRUNUX1RSVUUoTWludXNJbmZpbml0eSA8PSBJbmZpbml0eSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5maW5pdHkgPiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZB
TFNFKE1pbnVzSW5maW5pdHkgPj0gSW5maW5pdHkpOworCisgICAgRVhQRUNUX0ZBTFNFKE1pbnVz
SW5maW5pdHkgPT0gVGVuKTsKKyAgICBFWFBFQ1RfVFJVRShNaW51c0luZmluaXR5ICE9IFRlbik7
CisgICAgRVhQRUNUX1RSVUUoTWludXNJbmZpbml0eSA8IFRlbik7CisgICAgRVhQRUNUX1RSVUUo
TWludXNJbmZpbml0eSA8PSBUZW4pOworICAgIEVYUEVDVF9GQUxTRShNaW51c0luZmluaXR5ID4g
VGVuKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNJbmZpbml0eSA+PSBUZW4pOworCisgICAgRVhQ
RUNUX1RSVUUoTWludXNJbmZpbml0eSA9PSBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFM
U0UoTWludXNJbmZpbml0eSAhPSBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTWlu
dXNJbmZpbml0eSA8IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKE1pbnVzSW5maW5p
dHkgPD0gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5maW5pdHkgPiBN
aW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShNaW51c0luZmluaXR5ID49IE1pbnVzSW5m
aW5pdHkpOworCisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5maW5pdHkgPT0gTmFOKTsKKyAgICBF
WFBFQ1RfRkFMU0UoTWludXNJbmZpbml0eSAhPSBOYU4pOworICAgIEVYUEVDVF9GQUxTRShNaW51
c0luZmluaXR5IDwgTmFOKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNJbmZpbml0eSA8PSBOYU4p
OworICAgIEVYUEVDVF9GQUxTRShNaW51c0luZmluaXR5ID4gTmFOKTsKKyAgICBFWFBFQ1RfRkFM
U0UoTWludXNJbmZpbml0eSA+PSBOYU4pOworCisgICAgRVhQRUNUX0ZBTFNFKE5hTiA9PSBJbmZp
bml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiAhPSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZB
TFNFKE5hTiA8IEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOIDw9IEluZmluaXR5KTsK
KyAgICBFWFBFQ1RfRkFMU0UoTmFOID4gSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShOYU4g
Pj0gSW5maW5pdHkpOworCisgICAgRVhQRUNUX0ZBTFNFKE5hTiA9PSBUZW4pOworICAgIEVYUEVD
VF9GQUxTRShOYU4gIT0gVGVuKTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOIDwgVGVuKTsKKyAgICBF
WFBFQ1RfRkFMU0UoTmFOIDw9IFRlbik7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiA+IFRlbik7Cisg
ICAgRVhQRUNUX0ZBTFNFKE5hTiA+PSBUZW4pOworCisgICAgRVhQRUNUX0ZBTFNFKE5hTiA9PSBN
aW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOICE9IE1pbnVzSW5maW5pdHkpOwor
ICAgIEVYUEVDVF9GQUxTRShOYU4gPCBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0Uo
TmFOIDw9IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShOYU4gPiBNaW51c0luZmlu
aXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOID49IE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQ
RUNUX1RSVUUoTmFOID09IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiAhPSBOYU4pOworICAg
IEVYUEVDVF9GQUxTRShOYU4gPCBOYU4pOworICAgIEVYUEVDVF9UUlVFKE5hTiA8PSBOYU4pOwor
ICAgIEVYUEVDVF9GQUxTRShOYU4gPiBOYU4pOworICAgIEVYUEVDVF9UUlVFKE5hTiA+PSBOYU4p
OworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIERpdmlzaW9uKQoreworICAgIEVYUEVDVF9FUShl
bmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDApIC8gRGVjaW1hbCgxKSk7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSgyLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoMikgLyBEZWNpbWFsKC0xKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSg1LCAtMSwgTmVnYXRpdmUpLCBEZWNpbWFsKC0xKSAvIERl
Y2ltYWwoMikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoOTksIDAsIFBvc2l0aXZlKSwgRGVjaW1h
bCg5OSkgLyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgt
NTApIC8gRGVjaW1hbCgtNTApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDMzMzMzMzMzMzMzMzMz
MzMsIC0xNiwgUG9zaXRpdmUpLCBEZWNpbWFsKDEpIC8gRGVjaW1hbCgzKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSgxMjM0NTY3ODkwMTIzNCwgLTEsIFBvc2l0aXZlKSwgZW5jb2RlKDEyMzQ1Njc4
OTAxMjM0LCAwLCBQb3NpdGl2ZSkgLyBEZWNpbWFsKDEwKSk7Cit9CisKK1RFU1RfRihEZWNpbWFs
VGVzdCwgRGl2aXNpb25CaWdFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEw
MjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAvIGVuY29kZSgxLCAwLCBQ
b3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBlbmNvZGUo
MSwgMTAyMiwgUG9zaXRpdmUpIC8gZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSk7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0
aXZlKSAvIGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxU
ZXN0LCBEaXZpc2lvblNtYWxsRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAt
MTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAvIGVuY29kZSgxLCAw
LCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBlbmNv
ZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAvIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBEaXZpc2lvblNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29u
c3QgRGVjaW1hbCBJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNv
bnN0IERlY2ltYWwgTWludXNJbmZpbml0eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOwor
ICAgIGNvbnN0IERlY2ltYWwgTmFOKERlY2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFs
IFplcm8oRGVjaW1hbDo6emVybyhQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWludXNa
ZXJvKERlY2ltYWw6Onplcm8oTmVnYXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigxMCk7
CisgICAgY29uc3QgRGVjaW1hbCBNaW51c1RlbigtMTApOworCisgICAgRVhQRUNUX0VRKE5hTiwg
WmVybyAvIFplcm8pOworICAgIEVYUEVDVF9FUShOYU4sIFplcm8gLyBNaW51c1plcm8pOworICAg
IEVYUEVDVF9FUShOYU4sIE1pbnVzWmVybyAvIFplcm8pOworICAgIEVYUEVDVF9FUShOYU4sIE1p
bnVzWmVybyAvIE1pbnVzWmVybyk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIFRlbiAvIFpl
cm8pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gLyBNaW51c1plcm8pOworICAg
IEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c1RlbiAvIFplcm8pOworICAgIEVYUEVDVF9F
UShJbmZpbml0eSwgTWludXNUZW4gLyBNaW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKEluZmlu
aXR5LCBJbmZpbml0eSAvIFplcm8pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBJbmZp
bml0eSAvIE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5m
aW5pdHkgLyBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIE1pbnVzSW5maW5pdHkgLyBN
aW51c1plcm8pOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLyBJbmZpbml0eSk7Cisg
ICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLyBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1Rf
RVEoTmFOLCBNaW51c0luZmluaXR5IC8gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE1p
bnVzSW5maW5pdHkgLyBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShaZXJvLCBUZW4g
LyBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzWmVybywgVGVuIC8gTWludXNJbmZpbml0
eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzWmVybywgTWludXNUZW4gLyBJbmZpbml0eSk7CisgICAg
RVhQRUNUX0VRKFplcm8sIE1pbnVzVGVuIC8gTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1Rf
RVEoTmFOLCBOYU4gLyBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAvIFRlbik7CisgICAg
RVhQRUNUX0VRKE5hTiwgVGVuIC8gTmFOKTsKKworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAvIElu
ZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gLyBNaW51c0luZmluaXR5KTsKKyAgICBF
WFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAvIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJ
bmZpbml0eSAvIE5hTik7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgRW5jb2RlZERhdGEpCit7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAwLCBQb3Np
dGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgTmVnYXRpdmUpLCBlbmNvZGUoMCwg
MCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBOZWdhdGl2ZSksIGVuY29kZSgxLCAwLCBOZWdhdGl2
ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGVuY29kZSgx
LCAyMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZl
KSwgZW5jb2RlKDEsIC0yMDAwLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3Qs
IEZsb29yKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpLmZsb29yKCkp
OworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBlbmNvZGUoMTEsIC0xLCBQb3NpdGl2ZSkuZmxv
b3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIGVuY29kZSgxMywgLTEsIFBvc2l0aXZl
KS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZW5jb2RlKDE1LCAtMSwgUG9z
aXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBlbmNvZGUoMTksIC0x
LCBQb3NpdGl2ZSkuZmxvb3IoKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIERlY2lt
YWwoLTEpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2RlKDExLCAt
MSwgTmVnYXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwgZW5jb2Rl
KDEzLCAtMSwgTmVnYXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0yKSwg
ZW5jb2RlKDE1LCAtMSwgTmVnYXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
KC0yKSwgZW5jb2RlKDE5LCAtMSwgTmVnYXRpdmUpLmZsb29yKCkpOworfQorCitURVNUX0YoRGVj
aW1hbFRlc3QsIEZsb29yQmlnRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAx
MDAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkuZmxvb3IoKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSksIGVuY29kZSgxLCAxMDAwLCBOZWdh
dGl2ZSkuZmxvb3IoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgRmxvb3JTbWFsbEV4cG9u
ZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwg
LTEwMDAsIFBvc2l0aXZlKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIE5l
Z2F0aXZlKSwgZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkuZmxvb3IoKSk7Cit9CisKK1RFU1Rf
RihEZWNpbWFsVGVzdCwgRmxvb3JTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9FUShEZWNp
bWFsOjppbmZpbml0eShQb3NpdGl2ZSksIERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5mbG9v
cigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLCBEZWNpbWFs
OjppbmZpbml0eShOZWdhdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5h
bigpLCBEZWNpbWFsOjpuYW4oKS5mbG9vcigpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBG
cm9tSW50MzIpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIERlY2lt
YWwoMCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDEp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgtMSkpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoMTAwKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgtMTAwKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgweDdGRkZGRkZGLCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDB4ODAwMDAwMDB1LCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWluKCkpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBGcm9tU3RyaW5nKQor
eworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwIikp
OworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMCIp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZnJvbVN0cmluZygiMSIpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDEsIDAsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTEiKSk7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWwoMSksIGZyb21TdHJpbmcoIjAxIikpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMywgMCwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIrMyIpKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDAsIDMsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMEUzIikpOworICAgIEVYUEVDVF9FUShl
bmNvZGUoNSwgLTEsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiLjUiKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgxMDAsIDAsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMTAwIikpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMTAwLCAwLCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0xMDAiKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSgxMjMsIC0yLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjEuMjMiKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0yLCBOZWdhdGl2ZSksIGZyb21TdHJpbmcoIi0x
LjIzIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzLCA4LCBQb3NpdGl2ZSksIGZyb21TdHJp
bmcoIjEuMjNFMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIDgsIE5lZ2F0aXZlKSwg
ZnJvbVN0cmluZygiLTEuMjNFMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIDgsIFBv
c2l0aXZlKSwgZnJvbVN0cmluZygiMS4yM0UrMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgx
MjMsIDgsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTEuMjNFKzEwIikpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMTIzLCAtMTIsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMS4yM0UtMTAiKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0xMiwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMS4y
M0UtMTAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSg1LCAtNywgUG9zaXRpdmUpLCBmcm9tU3Ry
aW5nKCIwLjAwMDAwMDUiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSks
IGZyb21TdHJpbmcoIjBlOTk5OSIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgLTMsIFBv
c2l0aXZlKSwgZnJvbVN0cmluZygiMC4xMjMiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAt
MiwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwMC4wMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDEsIDIsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMUUyIikpOworICAgIEVYUEVDVF9FUShEZWNp
bWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjFFMjAwMDAiKSk7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxRS0yMDAwMCIpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAsIDEwMjMsIFBvc2l0aXZlKSwgZnJvbVN0cmluZygi
MUUxMDI2IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKSwgZnJvbVN0
cmluZygiMUUtMTAyNiIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRp
dmUpLCBmcm9tU3RyaW5nKCIxMjM0NTY3ODkwRTEwMzYiKSk7CisKKyAgICAvLyAyXjEwMjQKKyAg
ICBjb25zdCB1aW50NjRfdCBsZWFkaW5nRGlnaXRzT2YyUG93ZXJPZjEwMjQgPSBVSU5UNjRfQygx
Nzk3NjkzMTM0ODYyMzE1OSk7CisgICAgRVhQRUNUX0VRKGVuY29kZShsZWFkaW5nRGlnaXRzT2Yy
UG93ZXJPZjEwMjQsIDI5MiwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxNzk3NjkzMTM0ODYyMzE1
OTA3NzI5MzA1MTkwNzg5MDI0NzMzNjE3OTc2OTc4OTQyMzA2NTcyNzM0MzAwODExNTc3MzI2NzU4
MDU1MDA5NjMxMzI3MDg0NzczMjI0MDc1MzYwMjExMjAxMTM4Nzk4NzEzOTMzNTc2NTg3ODk3Njg4
MTQ0MTY2MjI0OTI4NDc0MzA2Mzk0NzQxMjQzNzc3Njc4OTM0MjQ4NjU0ODUyNzYzMDIyMTk2MDEy
NDYwOTQxMTk0NTMwODI5NTIwODUwMDU3Njg4MzgxNTA2ODIzNDI0NjI4ODE0NzM5MTMxMTA1NDA4
MjcyMzcxNjMzNTA1MTA2ODQ1ODYyOTgyMzk5NDcyNDU5Mzg0Nzk3MTYzMDQ4MzUzNTYzMjk2MjQy
MjQxMzcyMTYiKSk7Cit9CisKKy8vIFRoZXNlIHN0cmluZ3MgYXJlIGxvb2sgbGlrZSBwcm9wZXIg
bnVtYmVyLCBidXQgd2UgZG9uJ3QgYWNjZXB0IHRoZW0uCitURVNUX0YoRGVjaW1hbFRlc3QsIEZy
b21TdHJpbmdMaWtlTnVtYmVyKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJv
bVN0cmluZygiIDEyMyAiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3Ry
aW5nKCIxLDIzNCIpKTsKK30KKworLy8gZnJvbVN0cmluZyBkb2Vzbid0IHN1cHBvcnQgaW5maW5p
dHkgYW5kIE5hTi4KK1RFU1RfRihEZWNpbWFsVGVzdCwgRnJvbVN0cmluZ1NwZWNpYWxWYWx1ZXMp
Cit7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCJJTkYiKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCJJbmZpbml0eSIpKTsKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoImluZmluaXR5IikpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiK0luZmluaXR5IikpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiK2luZmluaXR5IikpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiLUluZmluaXR5IikpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiLWluZmluaXR5IikpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiTmFOIikpOworICAgIEVYUEVD
VF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygibmFuIikpOworICAgIEVYUEVDVF9FUShE
ZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiK05hTiIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1h
bDo6bmFuKCksIGZyb21TdHJpbmcoIituYW4iKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5h
bigpLCBmcm9tU3RyaW5nKCItTmFOIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwg
ZnJvbVN0cmluZygiLW5hbiIpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBmcm9tU3RyaW5n
VHJ1bmNhdGVkKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygi
eCIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjAuIikpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiMXgiKSk7CisKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjFFeCIpKTsKKyAgICBFWFBFQ1Rf
RVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjFFMngiKSk7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIxRSt4IikpOworfQorCitURVNUX0YoRGVjaW1hbFRl
c3QsIE11bHRpcGxpY2F0aW9uKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRp
dmUpLCBEZWNpbWFsKDApICogRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAw
LCBOZWdhdGl2ZSksIERlY2ltYWwoMikgKiBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgyLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoLTEpICogRGVjaW1hbCgyKSk7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSg5OSwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDk5KSAqIERlY2ltYWwoMSkp
OworICAgIEVYUEVDVF9FUShlbmNvZGUoMjUwMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKC01MCkg
KiBEZWNpbWFsKC01MCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE11bHRpcGxpY2F0aW9u
QmlnRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSks
IGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgKiBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwg
UG9zaXRpdmUpICogZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxLCAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpICogZW5jb2Rl
KDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE11bHRpcGxp
Y2F0aW9uU21hbGxFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMDIyLCBQ
b3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpICogZW5jb2RlKDEsIDAsIFBvc2l0
aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAt
MTAyMiwgUG9zaXRpdmUpICogZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkpOworfQorCitURVNU
X0YoRGVjaW1hbFRlc3QsIE11bHRpcGxpY2F0aW9uU3BlY2lhbFZhbHVlcykKK3sKKyAgICBjb25z
dCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSk7CisgICAgY29u
c3QgRGVjaW1hbCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERlY2ltYWwg
VGVuKDEwKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzVGVuKC0xMCk7CisgICAgY29uc3QgRGVj
aW1hbCBaZXJvKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1p
bnVzWmVybyhEZWNpbWFsOjp6ZXJvKE5lZ2F0aXZlKSk7CisKKyAgICBFWFBFQ1RfRVEoSW5maW5p
dHksIEluZmluaXR5ICogSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBJ
bmZpbml0eSAqIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBN
aW51c0luZmluaXR5ICogSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgTWludXNJ
bmZpbml0eSAqIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkg
KiBaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBaZXJvICogTWludXNJbmZpbml0eSk7CisgICAg
RVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0eSAqIFplcm8pOworICAgIEVYUEVDVF9FUShOYU4s
IE1pbnVzSW5maW5pdHkgKiBaZXJvKTsKKworICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5ICog
TWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c1plcm8gKiBNaW51c0luZmluaXR5
KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICogTWludXNaZXJvKTsKKyAgICBF
WFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICogTWludXNaZXJvKTsKKworICAgIEVYUEVDVF9F
UShJbmZpbml0eSwgSW5maW5pdHkgKiBUZW4pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgVGVu
ICogSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51c0luZmluaXR5
ICogVGVuKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgVGVuICogTWludXNJbmZpbml0
eSk7CisKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgSW5maW5pdHkgKiBNaW51c1Rlbik7
CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzVGVuICogSW5maW5pdHkpOworICAg
IEVYUEVDVF9FUShJbmZpbml0eSwgTWludXNJbmZpbml0eSAqIE1pbnVzVGVuKTsKKyAgICBFWFBF
Q1RfRVEoSW5maW5pdHksIE1pbnVzVGVuICogTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1Rf
RVEoTmFOLCBOYU4gKiBOYU4pOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAqIFRlbik7CisgICAg
RVhQRUNUX0VRKE5hTiwgVGVuICogTmFOKTsKKworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAqIElu
ZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBOYU4gKiBNaW51c0luZmluaXR5KTsKKyAgICBF
WFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAqIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJ
bmZpbml0eSAqIE5hTik7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgTmVnYXRlKQoreworICAg
IEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgTmVnYXRpdmUpLCAtZW5jb2RlKDAsIDAsIFBvc2l0aXZl
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIC1lbmNvZGUoMCwgMCwg
TmVnYXRpdmUpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMTAsIE5lZ2F0aXZlKSwgLWVu
Y29kZSgwLCAxMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDEwLCBQb3Np
dGl2ZSksIC1lbmNvZGUoMCwgMTAsIE5lZ2F0aXZlKSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDAsIC0xMCwgTmVnYXRpdmUpLCAtZW5jb2RlKDAsIC0xMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDAsIC0xMCwgUG9zaXRpdmUpLCAtZW5jb2RlKDAsIC0xMCwgTmVnYXRpdmUp
KTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgTmVnYXRpdmUpLCAtZW5jb2RlKDEsIDAs
IFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3NpdGl2ZSksIC1lbmNv
ZGUoMSwgMCwgTmVnYXRpdmUpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAsIE5lZ2F0
aXZlKSwgLWVuY29kZSgxLCAxMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEs
IDEwLCBQb3NpdGl2ZSksIC1lbmNvZGUoMSwgMTAsIE5lZ2F0aXZlKSk7CisKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEsIC0xMCwgTmVnYXRpdmUpLCAtZW5jb2RlKDEsIC0xMCwgUG9zaXRpdmUpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMCwgUG9zaXRpdmUpLCAtZW5jb2RlKDEsIC0xMCwg
TmVnYXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBOZWdhdGVCaWdFeHBvbmVudCkK
K3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSwgLWVuY29kZSgxLCAx
MDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUp
LCAtZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwg
TmVnYXRlU21hbGxFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xMDAwLCBO
ZWdhdGl2ZSksIC1lbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpLCAtZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkpOwor
fQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE5lZ2F0ZVNwZWNpYWxWYWx1ZXMpCit7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSwgLURlY2ltYWw6OmluZmluaXR5KFBv
c2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgLURl
Y2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigp
LCAtRGVjaW1hbDo6bmFuKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFByZWRpY2F0ZXMp
Cit7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSkuaXNGaW5pdGUoKSk7
CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSkuaXNQb3NpdGl2ZSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSkuaXNOZWdhdGl2ZSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSkuaXNTcGVjaWFsKCkpOwor
ICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLmlzWmVybygpKTsKKworICAg
IEVYUEVDVF9UUlVFKERlY2ltYWw6Onplcm8oTmVnYXRpdmUpLmlzRmluaXRlKCkpOworICAgIEVY
UEVDVF9GQUxTRShEZWNpbWFsOjp6ZXJvKE5lZ2F0aXZlKS5pc1Bvc2l0aXZlKCkpOworICAgIEVY
UEVDVF9UUlVFKERlY2ltYWw6Onplcm8oTmVnYXRpdmUpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKERlY2ltYWw6Onplcm8oTmVnYXRpdmUpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBF
Q1RfVFJVRShEZWNpbWFsOjp6ZXJvKE5lZ2F0aXZlKS5pc1plcm8oKSk7CisKKyAgICBFWFBFQ1Rf
VFJVRShEZWNpbWFsKDEyMykuaXNGaW5pdGUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgx
MjMpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMTIzKS5pc05lZ2F0
aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEyMykuaXNTcGVjaWFsKCkpOworICAg
IEVYUEVDVF9GQUxTRShEZWNpbWFsKDEyMykuaXNaZXJvKCkpOworCisgICAgRVhQRUNUX1RSVUUo
RGVjaW1hbCgtMTIzKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgtMTIz
KS5pc1Bvc2l0aXZlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoLTEyMykuaXNOZWdhdGl2
ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgtMTIzKS5pc1NwZWNpYWwoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKERlY2ltYWwoLTEyMykuaXNaZXJvKCkpOworfQorCitURVNUX0YoRGVjaW1h
bFRlc3QsIFByZWRpY2F0ZXNTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9GQUxTRShEZWNp
bWFsOjppbmZpbml0eShQb3NpdGl2ZSkuaXNGaW5pdGUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVj
aW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9U
UlVFKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5pc1NwZWNpYWwoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5pc1plcm8oKSk7CisKKyAgICBFWFBF
Q1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLmlzRmluaXRlKCkpOworICAgIEVY
UEVDVF9GQUxTRShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuaXNQb3NpdGl2ZSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuaXNOZWdhdGl2ZSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuaXNTcGVjaWFsKCkp
OworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuaXNaZXJvKCkp
OworCisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6Om5hbigpLmlzRmluaXRlKCkpOworICAgIEVY
UEVDVF9UUlVFKERlY2ltYWw6Om5hbigpLmlzU3BlY2lhbCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
RGVjaW1hbDo6bmFuKCkuaXNaZXJvKCkpOworfQorCisvLyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L251bWJlci9udW1iZXItc3RlcHVwLXN0ZXBkb3duLWZyb20tcmVuZGVyZXIKK1RFU1RfRihEZWNp
bWFsVGVzdCwgUmVhbFdvcmxkRXhhbXBsZU51bWJlclN0ZXBVcFN0ZXBEb3duRnJvbVJlbmRlcmVy
KQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEwIiksIHN0ZXBEb3duKCIwIiwgIjEwMCIsICIx
MCIsICIxOSIsIDEpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI5MCIpLCBzdGVwVXAoIjAiLCAi
OTkiLCAiMTAiLCAiODkiLCAxKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMSIpLCBzdGVwVXAo
IjAiLCAiMSIsICIwLjMzMzMzMzMzMzMzMzMzMzMzIiwgIjAiLCAzKSk7IC8vIHN0ZXA9MS8zCisg
ICAgRVhQRUNUX0VRKFN0cmluZygiMC4wMSIpLCBzdGVwVXAoIjAiLCAiMC4wMSIsICIwLjAwMzMz
MzMzMzMzMzMzMzMzMzMiLCAiMCIsIDMpKTsgLy8gc3RlcD0xLzMwMAorICAgIEVYUEVDVF9FUShT
dHJpbmcoIjEiKSwgc3RlcFVwKCIwIiwgIjEiLCAiMC4wMDM5MjE1Njg2Mjc0NTA5ODAiLCAiMCIs
IDI1NSkpOyAvLyBzdGVwPTEvMjU1CisgICAgRVhQRUNUX0VRKFN0cmluZygiMSIpLCBzdGVwVXAo
IjAiLCAiMSIsICIwLjEiLCAiMCIsIDEwKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUmVh
bFdvcmxkRXhhbXBsZU51bWJlclN0ZXBVcFN0ZXBEb3duRnJvbVJlbmRlcmVyUm91bmRpbmcpCit7
CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wMTUiKSwgc3RlcFVwKCIwIiwgIjEwMCIsICIwLjAw
NSIsICI1LjAwNSIsIDIpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjA2IiksIHN0ZXBVcCgi
MCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMSkpOworICAgIEVYUEVDVF9FUShTdHJpbmco
IjUuMDY1IiksIHN0ZXBVcCgiMCIsICIxMDAiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMikpOworCisg
ICAgRVhQRUNUX0VRKFN0cmluZygiNS4wMTUiKSwgc3RlcFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAi
NS4wMDUiLCAyKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNiIpLCBzdGVwVXAoIjQiLCAi
OSIsICIwLjAwNSIsICI1LjAwNSIsIDExKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS4wNjUi
KSwgc3RlcFVwKCI0IiwgIjkiLCAiMC4wMDUiLCAiNS4wMDUiLCAxMikpOworfQorCitURVNUX0Yo
RGVjaW1hbFRlc3QsIFJlYWxXb3JsZEV4YW1wbGVSYW5nZVN0ZXBVcFN0ZXBEb3duKQoreworICAg
IEVYUEVDVF9FUShTdHJpbmcoIjFlKzM4IiksIHN0ZXBVcCgiMCIsICIxRTM4IiwgIjEiLCAiMUUz
OCIsIDkpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxZSszOCIpLCBzdGVwRG93bigiMCIsICIx
RTM4IiwgIjEiLCAiMUUzOCIsIDkpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBSZW1haW5k
ZXIpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSg5LCAtMSwgTmVnYXRpdmUpLCBlbmNvZGUoMjEs
IC0xLCBQb3NpdGl2ZSkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwg
RGVjaW1hbCgxMCkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIE5l
Z2F0aXZlKSwgRGVjaW1hbCgtMTApLnJlbWFpbmRlcigzKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgyLCAtMSwgUG9zaXRpdmUpLCBlbmNvZGUoMTAyLCAtMSwgUG9zaXRpdmUpLnJlbWFpbmRlcigx
KSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMSwgUG9zaXRpdmUpLCBEZWNpbWFsKDEwKS5y
ZW1haW5kZXIoZW5jb2RlKDMsIC0xLCBQb3NpdGl2ZSkpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDMsIC0xLCBOZWdhdGl2ZSksIGVuY29kZSgzNiwgLTEsIFBvc2l0aXZlKS5yZW1haW5kZXIoZW5j
b2RlKDEzLCAtMSwgUG9zaXRpdmUpKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCA4NywgUG9z
aXRpdmUpLCAoZW5jb2RlKDEyMzQsIDEwMCwgUG9zaXRpdmUpLnJlbWFpbmRlcihEZWNpbWFsKDMp
KSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJlbWFpbmRlckJpZ0V4cG9uZW50KQorewor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwg
UG9zaXRpdmUpLnJlbWFpbmRlcihlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSgwLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSku
cmVtYWluZGVyKGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpLnJlbWFp
bmRlcihlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSkpOworfQorCitURVNUX0YoRGVjaW1hbFRl
c3QsIFJlbWFpbmRlclNtYWxsRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAt
MTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKS5yZW1haW5kZXIoZW5j
b2RlKDEsIDAsIFBvc2l0aXZlKSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgLTEwMjIsIFBv
c2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkucmVtYWluZGVyKGVuY29kZSgxLCAt
MTAyMiwgUG9zaXRpdmUpKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUmVtYWluZGVyU3Bl
Y2lhbFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUp
LCBEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkucmVtYWluZGVyKDEpKTsKKyAgICBFWFBFQ1Rf
RVEoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2
ZSkucmVtYWluZGVyKDEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWw6
Om5hbigpLnJlbWFpbmRlcigxKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHko
TmVnYXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkucmVtYWluZGVyKC0xKSk7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgRGVjaW1hbDo6aW5maW5p
dHkoTmVnYXRpdmUpLnJlbWFpbmRlcigtMSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4o
KSwgRGVjaW1hbDo6bmFuKCkucmVtYWluZGVyKC0xKSk7CisKKyAgICBFWFBFQ1RfRVEoRGVjaW1h
bDo6aW5maW5pdHkoUG9zaXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkucmVtYWlu
ZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLCBEZWNp
bWFsOjppbmZpbml0eShOZWdhdGl2ZSkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6bmFuKCksIERlY2ltYWw6Om5hbigpLnJlbWFpbmRlcigzKSk7CisKKyAgICBFWFBFQ1Rf
RVEoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2
ZSkucmVtYWluZGVyKC0xKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0
aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLnJlbWFpbmRlcigtMSkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgRGVjaW1hbDo6bmFuKCkucmVtYWluZGVyKC0xKSk7CisK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWwoMSkucmVtYWluZGVyKERlY2lt
YWw6OmluZmluaXR5KFBvc2l0aXZlKSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwg
RGVjaW1hbCgxKS5yZW1haW5kZXIoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpKSk7CisgICAg
RVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBEZWNpbWFsKDEpLnJlbWFpbmRlcihEZWNpbWFsOjpu
YW4oKSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFJvdW5kKQoreworICAgIEVYUEVDVF9F
UShEZWNpbWFsKDEpLCAoRGVjaW1hbCg5KSAvIERlY2ltYWwoMTApKS5yb3VuZCgpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbCgyNSksIChEZWNpbWFsKDUpIC8gZnJvbVN0cmluZygiMC4yMDAiKSku
cm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMyksIChEZWNpbWFsKDUpIC8gRGVjaW1h
bCgyKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIChEZWNpbWFsKDIpIC8g
RGVjaW1hbCgzKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMyksIChEZWNpbWFs
KDEwKSAvIERlY2ltYWwoMykpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDMpLCAo
RGVjaW1hbCgxKSAvIGZyb21TdHJpbmcoIjAuMyIpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEo
RGVjaW1hbCgxMCksIChEZWNpbWFsKDEpIC8gZnJvbVN0cmluZygiMC4xIikpLnJvdW5kKCkpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsKDUpLCAoRGVjaW1hbCgxKSAvIGZyb21TdHJpbmcoIjAuMiIp
KS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxMCksIChmcm9tU3RyaW5nKCIxMC4y
IikgLyAxKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMzQsIDEwMCwgUG9zaXRp
dmUpLCBlbmNvZGUoMTIzNCwgMTAwLCBQb3NpdGl2ZSkucm91bmQoKSk7Cit9CisKK1RFU1RfRihE
ZWNpbWFsVGVzdCwgUm91bmRTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFs
OjppbmZpbml0eShQb3NpdGl2ZSksIERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5yb3VuZCgp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLCBEZWNpbWFsOjpp
bmZpbml0eShOZWdhdGl2ZSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigp
LCBEZWNpbWFsOjpuYW4oKS5yb3VuZCgpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBTdWJ0
cmFjdCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgw
KSAtIERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMywgMCwgUG9zaXRpdmUpLCBE
ZWNpbWFsKDIpIC0gRGVjaW1hbCgtMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMywgMCwgTmVn
YXRpdmUpLCBEZWNpbWFsKC0xKSAtIERlY2ltYWwoMikpOworICAgIEVYUEVDVF9FUShlbmNvZGUo
OTgsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCg5OSkgLSBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCgtNTApIC0gRGVjaW1hbCgtNTApKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMDAwMDAwMDAwMDAwMDAsIDM1LCBQb3NpdGl2ZSksIGVu
Y29kZSgxLCA1MCwgUG9zaXRpdmUpIC0gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxMDAwMDAwMDAwMDAwMDAwLCAzNSwgTmVnYXRpdmUpLCBEZWNpbWFsKDEpIC0gZW5jb2RlKDEs
IDUwLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFN1YnRyYWN0QmlnRXhw
b25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29k
ZSgxLCAxMDIyLCBQb3NpdGl2ZSkgLSBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAt
IGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAy
MiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEsIC0xMDAw
LCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFN1YnRyYWN0U21hbGxFeHBv
bmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKFVJTlQ2NF9DKDEwMDAwMDAwMDAwMDAwMDAw
KSwgLTE2LCBOZWdhdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpIC0gZW5jb2RlKDEs
IDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGVu
Y29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpIC0gZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkpOwor
fQorCitURVNUX0YoRGVjaW1hbFRlc3QsIFN1YnRyYWN0U3BlY2lhbFZhbHVlcykKK3sKKyAgICBj
b25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSk7CisgICAg
Y29uc3QgRGVjaW1hbCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKSk7
CisgICAgY29uc3QgRGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERlY2lt
YWwgVGVuKDEwKTsKKworICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5IC0gSW5maW5pdHkpOwor
ICAgIEVYUEVDVF9FUShJbmZpbml0eSwgSW5maW5pdHkgLSBNaW51c0luZmluaXR5KTsKKyAgICBF
WFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZpbml0eSAtIEluZmluaXR5KTsKKyAgICBF
WFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5IC0gTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBF
Q1RfRVEoSW5maW5pdHksIEluZmluaXR5IC0gVGVuKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZp
bml0eSwgVGVuIC0gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBNaW51
c0luZmluaXR5IC0gVGVuKTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIFRlbiAtIE1pbnVzSW5m
aW5pdHkpOworCisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC0gTmFOKTsKKyAgICBFWFBFQ1RfRVEo
TmFOLCBOYU4gLSBUZW4pOworICAgIEVYUEVDVF9FUShOYU4sIFRlbiAtIE5hTik7CisKKyAgICBF
WFBFQ1RfRVEoTmFOLCBOYU4gLSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC0g
TWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgSW5maW5pdHkgLSBOYU4pOworICAg
IEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgLSBOYU4pOworfQorCitURVNUX0YoRGVjaW1h
bFRlc3QsIFRvU3RyaW5nKQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIjAiKSwgRGVjaW1hbDo6
emVybyhQb3NpdGl2ZSkudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiLTAiKSwg
RGVjaW1hbDo6emVybyhOZWdhdGl2ZSkudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmlu
ZygiMSIpLCBEZWNpbWFsKDEpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi0x
IiksIERlY2ltYWwoLTEpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEyMzQ1
NjciKSwgRGVjaW1hbCgxMjM0NTY3KS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5n
KCItMTIzNDU2NyIpLCBEZWNpbWFsKC0xMjM0NTY3KS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1Rf
RVEoU3RyaW5nKCIwLjUiKSwgZW5jb2RlKDUsIC0xLCBQb3NpdGl2ZSkudG9TdHJpbmcoKSk7Cisg
ICAgRVhQRUNUX0VRKFN0cmluZygiLTAuNSIpLCBlbmNvZGUoNSwgLTEsIE5lZ2F0aXZlKS50b1N0
cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxMi4zNDUiKSwgZW5jb2RlKDEyMzQ1LCAt
MywgUG9zaXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi0xMi4zNDUi
KSwgZW5jb2RlKDEyMzQ1LCAtMywgTmVnYXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9F
UShTdHJpbmcoIjAuMTIzNDUiKSwgZW5jb2RlKDEyMzQ1LCAtNSwgUG9zaXRpdmUpLnRvU3RyaW5n
KCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi0wLjEyMzQ1IiksIGVuY29kZSgxMjM0NSwgLTUs
IE5lZ2F0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1MCIpLCBlbmNv
ZGUoNTAsIDAsIFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIt
NTAiKSwgZW5jb2RlKDUwLCAwLCBOZWdhdGl2ZSkudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VR
KFN0cmluZygiNWUrMSIpLCBlbmNvZGUoNSwgMSwgUG9zaXRpdmUpLnRvU3RyaW5nKCkpOworICAg
IEVYUEVDVF9FUShTdHJpbmcoIi01ZSsxIiksIGVuY29kZSg1LCAxLCBOZWdhdGl2ZSkudG9TdHJp
bmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiNS42NzhlKzEwMyIpLCBlbmNvZGUoNTY3OCwg
MTAwLCBQb3NpdGl2ZSkudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiLTUuNjc4
ZSsxMDMiKSwgZW5jb2RlKDU2NzgsIDEwMCwgTmVnYXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVY
UEVDVF9FUShTdHJpbmcoIjUuNjc4ZS05NyIpLCBlbmNvZGUoNTY3OCwgLTEwMCwgUG9zaXRpdmUp
LnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi01LjY3OGUtOTciKSwgZW5jb2Rl
KDU2NzgsIC0xMDAsIE5lZ2F0aXZlKS50b1N0cmluZygpKTsKK30KKworVEVTVF9GKERlY2ltYWxU
ZXN0LCBUb1N0cmluZ1NwZWNpYWxWYWx1ZXMpCit7CisgICAgRVhQRUNUX0VRKFN0cmluZygiSW5m
aW5pdHkiKSwgRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVY
UEVDVF9FUShTdHJpbmcoIi1JbmZpbml0eSIpLCBEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSku
dG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiTmFOIiksIERlY2ltYWw6Om5hbigp
LnRvU3RyaW5nKCkpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145009</attachid>
            <date>2012-05-31 00:54:45 -0700</date>
            <delta_ts>2012-05-31 01:28:47 -0700</delta_ts>
            <desc>Patch 8</desc>
            <filename>bug-87360-20120531165444.patch</filename>
            <type>text/plain</type>
            <size>91020</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg5YWE3Mzk0MjU5NTg5
OGIxMjA4YWU1NGQ4YWJiOGFjNDEwOGU1NS4uOGExOTJlMWJhNmJkNWNkZTY5YjRjMTM2NTAwZThj
ZjJmMmIwN2IzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDEyLTA1LTMwICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1BsYXRmb3JtXSBJ
bnRyb2R1Y2UgRGVjaW1hbCBjbGFzcyBmb3IgTnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzM2MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkZWQg
bmV3IGNsYXNzIERlY2ltYWwgZm9yIGRlY2ltYWwgYXJpdGhtYXRpYyBpbiB0d28KKyAgICAgICAg
ZmlsZXM6IHBsYXRmb3JtL0RlY2ltYWwuY3BwIGFuZCBEZWNpbWFsLmggd2l0aCB1bml0IHRlc3Qu
CisKKyAgICAgICAgVGVzdDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcAor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGVjaW1hbC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWNpbWFsUHJpdmF0ZSk6Cisg
ICAgICAgIChTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQ
cml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpTcGVjaWFsVmFsdWVIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpTcGVjaWFsVmFsdWVIYW5kbGVyOjpoYW5kbGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlNwZWNpYWxWYWx1ZUhhbmRsZXI6
OnZhbHVlKToKKyAgICAgICAgKFVJbnQxMjgpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFBy
aXZhdGU6OlVJbnQxMjg6OlVJbnQxMjgpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZh
dGU6OlVJbnQxMjg6OmhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJ
bnQxMjg6Omxvdyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6
bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omhp
Z2hVSW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OlVJbnQxMjg6Omxv
d1VJbnQzMik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsUHJpdmF0ZTo6VUludDEyODo6aXNa
ZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50MTI4OjptYWtlVUlu
dDY0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50MTI4OjpvcGVyYXRv
ci89KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpVSW50MTI4OjptdWx0aXBs
eUhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OmNvdW50RGlnaXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWxQcml2YXRlOjpzY2FsZURvd24pOgorICAgICAgICAo
V2ViQ29yZTo6RGVjaW1hbFByaXZhdGU6OnNjYWxlVXApOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6RW5jb2RlZERhdGE6OkVuY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2lt
YWw6OkVuY29kZWREYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6
OkRlY2ltYWwpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yKz0pOgorICAgICAgICAoV2ViQ29yZTo6RGVj
aW1hbDo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvcio9
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9wZXJhdG9yLz0pOgorICAgICAgICAoV2Vi
Q29yZTo6RGVjaW1hbDo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6Om9w
ZXJhdG9yKyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvciopOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2lt
YWw6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVyYXRvcjwpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpvcGVy
YXRvcj4pOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6b3BlcmF0b3I+PSk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjphYnMpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6YWxp
Z25PcGVyYW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpjZWlsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY2ltYWw6OmNvbXBhcmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNp
bWFsOjpmbG9vcik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpmcm9tU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmluZmluaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
Y2ltYWw6Om5hbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpyZW1haW5kZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1h
bDo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6emVybyk6CisgICAgICAg
ICogcGxhdGZvcm0vRGVjaW1hbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRGVjaW1hbFByaXZhdGUpOgorICAgICAgICAoRGVjaW1hbCk6CisgICAgICAgIChFbmNvZGVk
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Y29lZmZpY2llbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmV4cG9uZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjppc0Zpbml0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNOYU4pOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjaW1hbDo6RW5jb2RlZERhdGE6OmlzU3BlY2lhbCk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNpbWFsOjpFbmNvZGVkRGF0YTo6aXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6
OkVuY29kZWREYXRhOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWRE
YXRhOjpzZXRTaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OkVuY29kZWREYXRhOjpm
b3JtYXRDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc0Zpbml0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNpbWFsOjppc05hTik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFs
Ojppc05lZ2F0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY2ltYWw6OmlzUG9zaXRpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aXNTcGVjaWFsKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlY2ltYWw6OmlzWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjp2YWx1ZSk6Cisg
ICAgICAgIChBbGlnbmVkT3BlcmFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVjaW1hbDo6aW52
ZXJ0U2lnbik6CisgICAgICAgIChXZWJDb3JlOjpEZWNpbWFsOjpleHBvbmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNpbWFsOjpzaWduKToKKwogMjAxMi0wNS0zMSAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEx
OTA2MiBhbmQgcjExOTA2NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzZiYmQwZTE2
MGE0ZjU0ZDdjYWVmNDBhYTlmNTlmMTUyYjA1M2MwZS4uMGFlOWY2NWViN2MxZWFmZmUzOGFkMTY4
NjA4ZWU2YWIzN2E2MmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NiBAQAorMjAxMi0wNS0zMCAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtQbGF0Zm9ybV0gSW50cm9kdWNlIERlY2ltYWwgY2xhc3MgZm9yIE51bWJlci9S
YW5nZSBpbnB1dCB0eXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODczNjAKKworICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGFkZGVkIHVuaXQgdGVzdCBmb3IgRGVjaW1hbCBjbGFzcy4KKworICAg
ICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0RlY2ltYWxUZXN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBP
dXRwdXQgRGVjaW1hbCBmb3IgdW5pdCB0ZXN0IGRlYnVnZ2luZworICAgICAgICAoRGVjaW1hbFN0
ZXBSYW5nZSk6CisgICAgICAgIChEZWNpbWFsU3RlcFJhbmdlOjpEZWNpbWFsU3RlcFJhbmdlKToK
KyAgICAgICAgKERlY2ltYWxTdGVwUmFuZ2U6OmNsYW1wVmFsdWUpOgorICAgICAgICAoRGVjaW1h
bFRlc3QpOgorICAgICAgICAoRGVjaW1hbFRlc3Q6OmVuY29kZSk6CisgICAgICAgIChEZWNpbWFs
VGVzdDo6ZnJvbVN0cmluZyk6CisgICAgICAgIChEZWNpbWFsVGVzdDo6c3RlcERvd24pOgorICAg
ICAgICAoRGVjaW1hbFRlc3Q6OnN0ZXBVcCk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTA1
LTMxICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTE5MDYyIGFuZCByMTE5MDY0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCBlZjJkOTM5ZTQ5NDUzZThiODlhNmI1NzE1OTdhMDc2MGY3MzM3NjExLi40ZDcyNGFhMzMx
YzYzODRkZWExYzYwNTVkNWU5OGViZDIyZDlkZWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MTEwOSw2ICsxMTA5LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL0NvbnRl
bnRUeXBlLmNwcAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIHBsYXRm
b3JtL0RhdGVDb21wb25lbnRzLmNwcAorICAgIHBsYXRmb3JtL0RlY2ltYWwuY3BwCiAgICAgcGxh
dGZvcm0vRHJhZ0RhdGEuY3BwCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAogICAgIHBsYXRm
b3JtL0V2ZW50VHJhY2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzc4
NDJhZmYzNTE1YThkODQ2NGMzMDVlZWFiMDAzOGNmYzNjNzkzMi4uOWE5OGJhMDg3OWFhODJkOTIy
ZWY3ZmEzNzFiNTQwYjM0NDM4YTdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC0zMTE3LDYgKzMxMTcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0N1cnNvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9u
ZW50cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlY2ltYWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EZWNpbWFsLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA1OWVmMzkzZDE2ZmQy
NzhhNTFlOTc0Y2RjNTZmMmI1ODZmOTc5MThiLi4zZWU4NWU3OTM0NDMyMWM2NDVjNzQ3ZGFmNjgz
NDVlOWJmY2EzYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTEwODQsNiArMTA4NCw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAgICAgcGxhdGZvcm0vQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAgXAorICAg
IHBsYXRmb3JtL0RlY2ltYWwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXAogICAg
IHBsYXRmb3JtL0RyYWdJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL0V2ZW50VHJhY2VyLmNwcCBc
CkBAIC0yMjA2LDYgKzIyMDcsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9Db250ZXh0
TWVudS5oIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIFwKICAgICBwbGF0Zm9y
bS9EYXRlQ29tcG9uZW50cy5oIFwKKyAgICBwbGF0Zm9ybS9EZWNpbWFsLmggXAogICAgIHBsYXRm
b3JtL0RyYWdEYXRhLmggXAogICAgIHBsYXRmb3JtL0RyYWdJbWFnZS5oIFwKICAgICBwbGF0Zm9y
bS9FdmVudFRyYWNlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2MWVmYWIxYWQ0NDU3NGI2MjI3
Y2NmMDJlM2NmNDc4YjcyNWQ5MjE0Li41MmVlOGM2OTA4ZWQ1MDMyNDUyZGUwNWM1Yjc3NDJhZTYx
MGU5NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNzIsNiArMjcyLDcgQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ3Vy
c29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL0RlY2ltYWwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRHJhZ0Rh
dGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRHJhZ0ltYWdlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL0V2ZW50VHJhY2VyLmgnLApAQCAtMzE0OSw2ICszMTUwLDcgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9DdXJzb3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL0RlY2ltYWwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9EcmFnRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL0V2ZW50TG9vcC5oJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNDBmYzNjNDJkMTBlY2VkMzMwMDM3
N2YyNDEzOWM5ZGFhN2I0ZTAwNC4uYjFiMWRlNzA2ZGQ1YjQ5MTNlOWY0N2E3NDUzMjRkOGExMmY4
NWZkYSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTI3ODk5LDYgKzI3ODk5LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERlY2ltYWwuY3BwIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxEZWNpbWFsLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XERyYWdEYXRhLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmYyNDBmNTVhOTkyNmFhNDhi
NjFjMDk3MDA0ZjRlNTU0ZTFlMGIwMS4uOTQ2MWVmOTRhZjliNDRmOWIxOGI3MjRmYjIxNmQ4MjA3
MGI4YzQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTE5Myw2ICsxMTkzLDggQEAKIAkJNDUwQ0VCRjAxNTA3M0JCRTAwMkJC
MTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVs
ZW1lbnQuY3BwICovOyB9OwogCQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxl
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NUJBQzJCMDEzNjBCQkFC
MDA1REEyNTggLyogSWNvblVSTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDVCQUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NUZFQTVDRjE1NkRE
RThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAg
Ki87IH07CisJCTQ1RkVBNUQwMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRTE1NkRERThDMDA2
NTQxMDEgLyogRGVjaW1hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQ2MTRBMUZFMEIyM0E4RDYwMDQ0NkUxQyAvKiBjb3B5Q3Vyc29yLnBuZyBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDYxNEExRkQw
QjIzQThENjAwNDQ2RTFDIC8qIGNvcHlDdXJzb3IucG5nICovOyB9OwogCQk0NjcwMEVEMDEyN0I5
NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY3MDBFQ0UxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVX
cml0ZXJTeW5jLmNwcCAqLzsgfTsKIAkJNDY3MDBFRDExMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVX
cml0ZXJTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjcwMEVDRjEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLzsgfTsKQEAg
LTgyMDMsNiArODIwNSw4IEBACiAJCTQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFi
bGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhYmVs
YWJsZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRjE1
MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMYWJlbGFibGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJMLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb25VUkwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1hbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQ1RkVBNUNFMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY2ltYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDYxNEExRkQwQjIzQThENjAwNDQ2RTFDIC8qIGNvcHlDdXJzb3IucG5nICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5n
OyBwYXRoID0gY29weUN1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2
NzAwRUNFMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWxlV3JpdGVyU3luYy5jcHA7IHBhdGggPSBNb2R1
bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlclN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0NjcwMEVDRjEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVdyaXRlclN5bmMuaDsgcGF0aCA9IE1v
ZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjAzNDMsNiArMjAzNDcsOCBAQAogCQkJCUY1ODc4Njg0MDJERTNCODYwMUVBNDEy
MiAvKiBDdXJzb3IuaCAqLywKIAkJCQlBNTczMkIwODEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNv
bXBvbmVudHMuY3BwICovLAogCQkJCUE1NzMyQjA5MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29t
cG9uZW50cy5oICovLAorCQkJCTQ1RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNw
cCAqLywKKwkJCQk0NUZFQTVDRTE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oICovLAogCQkJ
CUE3OTU0NjQyMEI1QzRDQjQwMDdCNDM4RiAvKiBEcmFnRGF0YS5jcHAgKi8sCiAJCQkJQTdCNkU2
OUQwQjI5MUE5NjAwRDA1MjlGIC8qIERyYWdEYXRhLmggKi8sCiAJCQkJQTdDRkIzQ0YwQjdFRDEw
QTAwNzBDMzJEIC8qIERyYWdJbWFnZS5jcHAgKi8sCkBAIC0yMjEwMiw2ICsyMjEwOCw3IEBACiAJ
CQkJRjU1QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY1NUIzREI4MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUlucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQkExMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1l
TG9jYWxJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ1RkVBNUQwMTU2RERFOEMwMDY1
NDEwMSAvKiBEZWNpbWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEMyMjhBMTExRDU3MjJFMDBE
NUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0VDQ0ZDM0IxNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDE2MkE0NTExMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtl
ckNvbnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU1OTgsNiArMjU2MDUsNyBAQAogCQkJCUY1
NUIzREI1MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUY1NUIzREI3MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUlucHV0VHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RCOTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVM
b2NhbElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NUZFQTVDRjE1NkRERThDMDA2
NTQxMDEgLyogRGVjaW1hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEMyMjhBMjExRDU3MjJF
MDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MTYyQTQ1MDEwMTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVkV29ya2VyQ29udGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNh
dGVkV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNp
bWFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yMDYxZGVkMDc1OWE4MTE4ZWYwMWJmZjJmM2IzNjRmMzVkNWJi
YjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5j
cHAKQEAgLTAsMCArMSwxMDA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRlY2lt
YWwuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgRGVjaW1hbFByaXZhdGUg
eworCitzdGF0aWMgaW50IGNvbnN0IEV4cG9uZW50TWF4ID0gMTAyMzsKK3N0YXRpYyBpbnQgY29u
c3QgRXhwb25lbnRNaW4gPSAtMTAyMzsKK3N0YXRpYyBpbnQgY29uc3QgUHJlY2lzaW9uID0gMTg7
CisKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBNYXhDb2VmZmljaWVudCA9IFVJTlQ2NF9DKDB4MTYz
NDU3ODVEODlGRkZGKTsgLy8gOTk5OTk5OTk5OTk5OTk5OTk5ID09IDE4IDkncworCisvLyBUaGlz
IGNsYXNzIGhhbmRsZXMgRGVjaW1hbCBzcGVjaWFsIHZhbHVlcy4KK2NsYXNzIFNwZWNpYWxWYWx1
ZUhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWxWYWx1ZUhhbmRsZXIp
OworcHVibGljOgorICAgIGVudW0gSGFuZGxlUmVzdWx0IHsKKyAgICAgICAgQm90aEZpbml0ZSwK
KyAgICAgICAgQm90aEluZmluaXR5LAorICAgICAgICBFaXRoZXJOYU4sCisgICAgICAgIExIU0lz
SW5maW5pdHksCisgICAgICAgIFJIU0lzSW5maW5pdHksCisgICAgfTsKKworICAgIFNwZWNpYWxW
YWx1ZUhhbmRsZXIoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBEZWNpbWFsJiByaHMpOworICAg
IEhhbmRsZVJlc3VsdCBoYW5kbGUoKTsKKyAgICBEZWNpbWFsIHZhbHVlKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgZW51bSBSZXN1bHQgeworICAgICAgICBSZXN1bHRJc0xIUywKKyAgICAgICAg
UmVzdWx0SXNSSFMsCisgICAgICAgIFJlc3VsdElzVW5rbm93biwKKyAgICB9OworCisgICAgY29u
c3QgRGVjaW1hbCYgbV9saHM7CisgICAgY29uc3QgRGVjaW1hbCYgbV9yaHM7CisgICAgUmVzdWx0
IG1fcmVzdWx0OworfTsKKworU3BlY2lhbFZhbHVlSGFuZGxlcjo6U3BlY2lhbFZhbHVlSGFuZGxl
cihjb25zdCBEZWNpbWFsJiBsaHMsIGNvbnN0IERlY2ltYWwmIHJocykKKyAgICA6IG1fbGhzKGxo
cyksIG1fcmhzKHJocyksIG1fcmVzdWx0KFJlc3VsdElzVW5rbm93bikKK3sKK30KKworU3BlY2lh
bFZhbHVlSGFuZGxlcjo6SGFuZGxlUmVzdWx0IFNwZWNpYWxWYWx1ZUhhbmRsZXI6OmhhbmRsZSgp
Cit7CisgICAgaWYgKG1fbGhzLmlzRmluaXRlKCkgJiYgbV9yaHMuaXNGaW5pdGUoKSkKKyAgICAg
ICAgcmV0dXJuIEJvdGhGaW5pdGU7CisKKyAgICBjb25zdCBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6
Rm9ybWF0Q2xhc3MgbGhzQ2xhc3MgPSBtX2xocy52YWx1ZSgpLmZvcm1hdENsYXNzKCk7CisgICAg
Y29uc3QgRGVjaW1hbDo6RW5jb2RlZERhdGE6OkZvcm1hdENsYXNzIHJoc0NsYXNzID0gbV9yaHMu
dmFsdWUoKS5mb3JtYXRDbGFzcygpOworICAgIGlmIChsaHNDbGFzcyA9PSBEZWNpbWFsOjpFbmNv
ZGVkRGF0YTo6Q2xhc3NOYU4pIHsKKyAgICAgICAgbV9yZXN1bHQgPSBSZXN1bHRJc0xIUzsKKyAg
ICAgICAgcmV0dXJuIEVpdGhlck5hTjsKKyAgICAgfQorCisgICAgaWYgKHJoc0NsYXNzID09IERl
Y2ltYWw6OkVuY29kZWREYXRhOjpDbGFzc05hTikgeworICAgICAgICBtX3Jlc3VsdCA9IFJlc3Vs
dElzUkhTOworICAgICAgICByZXR1cm4gRWl0aGVyTmFOOworICAgICB9CisKKyAgICBpZiAobGhz
Q2xhc3MgPT0gRGVjaW1hbDo6RW5jb2RlZERhdGE6OkNsYXNzSW5maW5pdHkpCisgICAgICAgIHJl
dHVybiByaHNDbGFzcyA9PSBEZWNpbWFsOjpFbmNvZGVkRGF0YTo6Q2xhc3NJbmZpbml0eSA/IEJv
dGhJbmZpbml0eSA6IExIU0lzSW5maW5pdHk7CisKKyAgICBpZiAocmhzQ2xhc3MgPT0gRGVjaW1h
bDo6RW5jb2RlZERhdGE6OkNsYXNzSW5maW5pdHkpCisgICAgICAgIHJldHVybiBSSFNJc0luZmlu
aXR5OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEJvdGhGaW5pdGU7
Cit9CisKK0RlY2ltYWwgU3BlY2lhbFZhbHVlSGFuZGxlcjo6dmFsdWUoKSBjb25zdAoreworICAg
IHN3aXRjaCAobV9yZXN1bHQpIHsKKyAgICBjYXNlIFJlc3VsdElzTEhTOgorICAgICAgICByZXR1
cm4gbV9saHM7CisgICAgY2FzZSBSZXN1bHRJc1JIUzoKKyAgICAgICAgcmV0dXJuIG1fcmhzOwor
ICAgIGNhc2UgUmVzdWx0SXNVbmtub3duOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbV9saHM7CisgICAgfQorfQorCisvLyBUaGlz
IGNsYXNzIGlzIHVzZWQgZm9yIDEyOCBiaXQgdW5zaWduZWQgaW50ZWdlciBhcml0aG1ldGljLgor
Y2xhc3MgVUludDEyOCB7CitwdWJsaWM6CisgICAgVUludDEyOCh1aW50NjRfdCBsb3csIHVpbnQ2
NF90IGhpZ2gpCisgICAgICAgIDogbV9oaWdoKGhpZ2gpLCBtX2xvdyhsb3cpCisgICAgeworICAg
IH0KKworICAgIFVJbnQxMjgmIG9wZXJhdG9yLz0odWludDMyX3QpOworCisgICAgdWludDY0X3Qg
aGlnaCgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaDsgfQorICAgIHVpbnQ2NF90IGxvdygpIGNvbnN0
IHsgcmV0dXJuIG1fbG93OyB9CisKKyAgICBzdGF0aWMgVUludDEyOCBtdWx0aXBseSh1aW50NjRf
dCB1LCB1aW50NjRfdCB2KSB7IHJldHVybiBVSW50MTI4KHUgKiB2LCBtdWx0aXBseUhpZ2godSwg
dikpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQzMl90IGhpZ2hVSW50MzIodWludDY0
X3QgeCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHggPj4gMzIpOyB9CisgICAgc3Rh
dGljIHVpbnQzMl90IGxvd1VJbnQzMih1aW50NjRfdCB4KSB7IHJldHVybiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oeCAmICgoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IDMyKSAtIDEpKTsgfQor
ICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gIW1fbG93ICYmICFtX2hpZ2g7IH0KKyAg
ICBzdGF0aWMgdWludDY0X3QgbWFrZVVJbnQ2NCh1aW50MzJfdCBsb3csIHVpbnQzMl90IGhpZ2gp
IHsgcmV0dXJuIGxvdyB8IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGlnaCkgPDwgMzIpOyB9CisK
KyAgICBzdGF0aWMgdWludDY0X3QgbXVsdGlwbHlIaWdoKHVpbnQ2NF90LCB1aW50NjRfdCk7CisK
KyAgICB1aW50NjRfdCBtX2hpZ2g7CisgICAgdWludDY0X3QgbV9sb3c7Cit9OworCitVSW50MTI4
JiBVSW50MTI4OjpvcGVyYXRvci89KGNvbnN0IHVpbnQzMl90IGRpdmlzb3IpCit7CisgICAgQVNT
RVJUKGRpdmlzb3IpOworCisgICAgaWYgKCFtX2hpZ2gpIHsKKyAgICAgICAgbV9sb3cgLz0gZGl2
aXNvcjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHVpbnQzMl90IGRpdmlk
ZW5kWzRdOworICAgIGRpdmlkZW5kWzBdID0gbG93VUludDMyKG1fbG93KTsKKyAgICBkaXZpZGVu
ZFsxXSA9IGhpZ2hVSW50MzIobV9sb3cpOworICAgIGRpdmlkZW5kWzJdID0gbG93VUludDMyKG1f
aGlnaCk7CisgICAgZGl2aWRlbmRbM10gPSBoaWdoVUludDMyKG1faGlnaCk7CisKKyAgICB1aW50
MzJfdCBxdW90aWVudFs0XTsKKyAgICB1aW50MzJfdCByZW1haW5kZXIgPSAwOworICAgIGZvciAo
aW50IGkgPSAzOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCB1aW50NjRfdCB3b3JrID0g
bWFrZVVJbnQ2NChyZW1haW5kZXIsIGRpdmlkZW5kW2ldKTsKKyAgICAgICAgcmVtYWluZGVyID0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdvcmsgJSBkaXZpc29yKTsKKyAgICAgICAgcXVvdGllbnRb
aV0gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4od29yayAvIGRpdmlzb3IpOworICAgIH0KKyAgICBt
X2xvdyA9IG1ha2VVSW50NjQocXVvdGllbnRbMF0sIHF1b3RpZW50WzFdKTsKKyAgICBtX2hpZ2gg
PSBtYWtlVUludDY0KHF1b3RpZW50WzJdLCBxdW90aWVudFszXSk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCisvLyBSZXR1cm5zIGhpZ2ggNjRiaXQgb2YgMTI4Yml0IHByb2R1Y3QuCit1aW50NjRf
dCBVSW50MTI4OjptdWx0aXBseUhpZ2godWludDY0X3QgdSwgdWludDY0X3QgdikKK3sKKyAgICBj
b25zdCB1aW50NjRfdCB1TG93ID0gbG93VUludDMyKHUpOworICAgIGNvbnN0IHVpbnQ2NF90IHVI
aWdoID0gaGlnaFVJbnQzMih1KTsKKyAgICBjb25zdCB1aW50NjRfdCB2TG93ID0gbG93VUludDMy
KHYpOworICAgIGNvbnN0IHVpbnQ2NF90IHZIaWdoID0gaGlnaFVJbnQzMih2KTsKKyAgICBjb25z
dCB1aW50NjRfdCBwYXJ0aWFsUHJvZHVjdCA9IHVIaWdoICogdkxvdyArIGhpZ2hVSW50MzIodUxv
dyAqIHZMb3cpOworICAgIHJldHVybiB1SGlnaCAqIHZIaWdoICsgaGlnaFVJbnQzMihwYXJ0aWFs
UHJvZHVjdCkgKyBoaWdoVUludDMyKHVMb3cgKiB2SGlnaCArIGxvd1VJbnQzMihwYXJ0aWFsUHJv
ZHVjdCkpOworfQorCitzdGF0aWMgaW50IGNvdW50RGlnaXRzKHVpbnQ2NF90IHgpCit7CisgICAg
aW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAgICBmb3IgKHVpbnQ2NF90IHBvd2VyT2ZUZW4gPSAx
OyB4ID49IHBvd2VyT2ZUZW47IHBvd2VyT2ZUZW4gKj0gMTApIHsKKyAgICAgICAgKytudW1iZXJP
ZkRpZ2l0czsKKyAgICAgICAgaWYgKHBvd2VyT2ZUZW4gPj0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50NjRfdD46Om1heCgpIC8gMTApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIG51bWJlck9mRGlnaXRzOworfQorCitzdGF0aWMgdWludDY0X3Qgc2NhbGVEb3duKHVpbnQ2
NF90IHgsIGludCBuKQoreworICAgIEFTU0VSVChuID49IDApOworICAgIHdoaWxlIChuID4gMCAm
JiB4KSB7CisgICAgICAgIHggLz0gMTA7CisgICAgICAgIC0tbjsKKyAgICB9CisgICAgcmV0dXJu
IHg7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBzY2FsZVVwKHVpbnQ2NF90IHgsIGludCBuKQorewor
ICAgIEFTU0VSVChuID49IDApOworICAgIEFTU0VSVChuIDwgUHJlY2lzaW9uKTsKKworICAgIHVp
bnQ2NF90IHkgPSAxOworICAgIHVpbnQ2NF90IHogPSAxMDsKKyAgICBmb3IgKDs7KSB7CisgICAg
ICAgIGlmIChuICYgMSkKKyAgICAgICAgICAgIHkgPSB5ICogejsKKworICAgICAgICBuID4+PSAx
OworICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICByZXR1cm4geCAqIHk7CisKKyAgICAgICAg
eiA9IHogKiB6OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgRGVjaW1hbFByaXZhdGUKKwor
dXNpbmcgbmFtZXNwYWNlIERlY2ltYWxQcml2YXRlOworCitEZWNpbWFsOjpFbmNvZGVkRGF0YTo6
RW5jb2RlZERhdGEoU2lnbiBzaWduLCBGb3JtYXRDbGFzcyBmb3JtYXRDbGFzcykKKyAgICA6IG1f
Y29lZmZpY2llbnQoMCkKKyAgICAsIG1fZXhwb25lbnQoMCkKKyAgICAsIG1fZm9ybWF0Q2xhc3Mo
Zm9ybWF0Q2xhc3MpCisgICAgLCBtX3NpZ24oc2lnbikKK3sKK30KKworRGVjaW1hbDo6RW5jb2Rl
ZERhdGE6OkVuY29kZWREYXRhKFNpZ24gc2lnbiwgaW50IGV4cG9uZW50LCB1aW50NjRfdCBjb2Vm
ZmljaWVudCkKKyAgICA6IG1fZm9ybWF0Q2xhc3MoY29lZmZpY2llbnQgPyBDbGFzc05vcm1hbCA6
IENsYXNzWmVybykKKyAgICAsIG1fc2lnbihzaWduKQoreworICAgIGlmIChleHBvbmVudCA+PSBF
eHBvbmVudE1pbiAmJiBleHBvbmVudCA8PSBFeHBvbmVudE1heCkgeworICAgICAgICB3aGlsZSAo
Y29lZmZpY2llbnQgPj0gTWF4Q29lZmZpY2llbnQpIHsKKyAgICAgICAgICAgIGNvZWZmaWNpZW50
IC89IDEwOworICAgICAgICAgICAgKytleHBvbmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChleHBvbmVudCA+IEV4cG9uZW50TWF4KSB7CisgICAgICAgIG1fY29lZmZpY2llbnQgPSAw
OworICAgICAgICBtX2V4cG9uZW50ID0gMDsKKyAgICAgICAgbV9mb3JtYXRDbGFzcyA9IENsYXNz
SW5maW5pdHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXhwb25lbnQgPCBF
eHBvbmVudE1pbikgeworICAgICAgICBtX2NvZWZmaWNpZW50ID0gMDsKKyAgICAgICAgbV9leHBv
bmVudCA9IDA7CisgICAgICAgIG1fZm9ybWF0Q2xhc3MgPSBDbGFzc1plcm87CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2NvZWZmaWNpZW50ID0gY29lZmZpY2llbnQ7CisgICAgbV9l
eHBvbmVudCA9IHN0YXRpY19jYXN0PGludDE2X3Q+KGV4cG9uZW50KTsKK30KKworYm9vbCBEZWNp
bWFsOjpFbmNvZGVkRGF0YTo6b3BlcmF0b3I9PShjb25zdCBFbmNvZGVkRGF0YSYgYW5vdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zaWduID09IGFub3RoZXIubV9zaWduCisgICAgICAgICYm
IG1fZm9ybWF0Q2xhc3MgPT0gYW5vdGhlci5tX2Zvcm1hdENsYXNzCisgICAgICAgICYmIG1fZXhw
b25lbnQgPT0gYW5vdGhlci5tX2V4cG9uZW50CisgICAgICAgICYmIG1fY29lZmZpY2llbnQgPT0g
YW5vdGhlci5tX2NvZWZmaWNpZW50OworfQorCitEZWNpbWFsOjpEZWNpbWFsKGludDMyX3QgaTMy
KQorICAgIDogbV9kYXRhKGkzMiA8IDAgPyBOZWdhdGl2ZSA6IFBvc2l0aXZlLCAwLCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oaTMyIDwgMCA/IC1pMzIgOiBpMzIpKQoreworfQorCitEZWNpbWFsOjpE
ZWNpbWFsKFNpZ24gc2lnbiwgaW50IGV4cG9uZW50LCB1aW50NjRfdCBjb2VmZmljaWVudCkKKyAg
ICA6IG1fZGF0YShzaWduLCBleHBvbmVudCwgY29lZmZpY2llbnQpCit7Cit9CisKK0RlY2ltYWw6
OkRlY2ltYWwoY29uc3QgRW5jb2RlZERhdGEmIGRhdGEpCisgICAgOiBtX2RhdGEoZGF0YSkKK3sK
K30KKworRGVjaW1hbDo6RGVjaW1hbChjb25zdCBEZWNpbWFsJiBvdGhlcikKKyAgICA6IG1fZGF0
YShvdGhlci5tX2RhdGEpCit7Cit9CisKK0RlY2ltYWwmIERlY2ltYWw6Om9wZXJhdG9yPShjb25z
dCBEZWNpbWFsJiBvdGhlcikKK3sKKyAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvcis9KGNvbnN0IERlY2lt
YWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyArIG90aGVyKS5tX2RhdGE7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvci09KGNvbnN0IERl
Y2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyAtIG90aGVyKS5tX2RhdGE7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvcio9KGNvbnN0
IERlY2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyAqIG90aGVyKS5tX2RhdGE7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsJiBEZWNpbWFsOjpvcGVyYXRvci89KGNv
bnN0IERlY2ltYWwmIG90aGVyKQoreworICAgIG1fZGF0YSA9ICgqdGhpcyAvIG90aGVyKS5tX2Rh
dGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCitEZWNpbWFsIERlY2ltYWw6Om9wZXJhdG9yLSgp
IGNvbnN0Cit7CisgICAgaWYgKGlzTmFOKCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAg
IERlY2ltYWwgcmVzdWx0KCp0aGlzKTsKKyAgICByZXN1bHQubV9kYXRhLnNldFNpZ24oaW52ZXJ0
U2lnbihtX2RhdGEuc2lnbigpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRGVjaW1hbCBE
ZWNpbWFsOjpvcGVyYXRvcisoY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0
IERlY2ltYWwmIGxocyA9ICp0aGlzOworICAgIGNvbnN0IFNpZ24gbGhzU2lnbiA9IGxocy5zaWdu
KCk7CisgICAgY29uc3QgU2lnbiByaHNTaWduID0gcmhzLnNpZ24oKTsKKworICAgIFNwZWNpYWxW
YWx1ZUhhbmRsZXIgaGFuZGxlcihsaHMsIHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRs
ZSgpKSB7CisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOgorICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEluZmluaXR5Ogor
ICAgICAgICByZXR1cm4gbGhzU2lnbiA9PSByaHNTaWduID8gbGhzIDogbmFuKCk7CisKKyAgICBj
YXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZXIudmFsdWUoKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6TEhTSXNJbmZpbml0
eToKKyAgICAgICAgcmV0dXJuIGxoczsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6
UkhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIHJoczsKKyAgICB9CisKKyAgICBjb25zdCBB
bGlnbmVkT3BlcmFuZHMgYWxpZ25lZE9wZXJhbmRzID0gYWxpZ25PcGVyYW5kcyhsaHMsIHJocyk7
CisKKyAgICBjb25zdCB1aW50NjRfdCByZXN1bHQgPSBsaHNTaWduID09IHJoc1NpZ24KKyAgICAg
ICAgPyBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQgKyBhbGlnbmVkT3BlcmFuZHMucmhz
Q29lZmZpY2llbnQKKyAgICAgICAgOiBhbGlnbmVkT3BlcmFuZHMubGhzQ29lZmZpY2llbnQgLSBh
bGlnbmVkT3BlcmFuZHMucmhzQ29lZmZpY2llbnQ7CisKKyAgICBpZiAobGhzU2lnbiA9PSBOZWdh
dGl2ZSAmJiByaHNTaWduID09IFBvc2l0aXZlICYmICFyZXN1bHQpCisgICAgICAgIHJldHVybiBE
ZWNpbWFsKFBvc2l0aXZlLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQsIDApOworCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludDY0X3Q+KHJlc3VsdCkgPj0gMAorICAgICAgICA/IERlY2ltYWwo
bGhzU2lnbiwgYWxpZ25lZE9wZXJhbmRzLmV4cG9uZW50LCByZXN1bHQpCisgICAgICAgIDogRGVj
aW1hbChpbnZlcnRTaWduKGxoc1NpZ24pLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQsIC1zdGF0
aWNfY2FzdDxpbnQ2NF90PihyZXN1bHQpKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpvcGVyYXRv
ci0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwmIGxocyA9
ICp0aGlzOworICAgIGNvbnN0IFNpZ24gbGhzU2lnbiA9IGxocy5zaWduKCk7CisgICAgY29uc3Qg
U2lnbiByaHNTaWduID0gcmhzLnNpZ24oKTsKKworICAgIFNwZWNpYWxWYWx1ZUhhbmRsZXIgaGFu
ZGxlcihsaHMsIHJocyk7CisgICAgc3dpdGNoIChoYW5kbGVyLmhhbmRsZSgpKSB7CisgICAgY2Fz
ZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoRmluaXRlOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEluZmluaXR5OgorICAgICAgICByZXR1cm4g
bGhzU2lnbiA9PSByaHNTaWduID8gbmFuKCkgOiBsaHM7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1
ZUhhbmRsZXI6OkVpdGhlck5hTjoKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIudmFsdWUoKTsKKwor
ICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6TEhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0
dXJuIGxoczsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6UkhTSXNJbmZpbml0eToK
KyAgICAgICAgcmV0dXJuIGluZmluaXR5KGludmVydFNpZ24ocmhzU2lnbikpOworICAgIH0KKwor
ICAgIGNvbnN0IEFsaWduZWRPcGVyYW5kcyBhbGlnbmVkT3BlcmFuZHMgPSBhbGlnbk9wZXJhbmRz
KGxocywgcmhzKTsKKworICAgIGNvbnN0IHVpbnQ2NF90IHJlc3VsdCA9IGxoc1NpZ24gPT0gcmhz
U2lnbgorICAgICAgICA/IGFsaWduZWRPcGVyYW5kcy5saHNDb2VmZmljaWVudCAtIGFsaWduZWRP
cGVyYW5kcy5yaHNDb2VmZmljaWVudAorICAgICAgICA6IGFsaWduZWRPcGVyYW5kcy5saHNDb2Vm
ZmljaWVudCArIGFsaWduZWRPcGVyYW5kcy5yaHNDb2VmZmljaWVudDsKKworICAgIGlmIChsaHNT
aWduID09IE5lZ2F0aXZlICYmIHJoc1NpZ24gPT0gTmVnYXRpdmUgJiYgIXJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIERlY2ltYWwoUG9zaXRpdmUsIGFsaWduZWRPcGVyYW5kcy5leHBvbmVudCwgMCk7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVzdWx0KSA+PSAwCisgICAgICAg
ID8gRGVjaW1hbChsaHNTaWduLCBhbGlnbmVkT3BlcmFuZHMuZXhwb25lbnQsIHJlc3VsdCkKKyAg
ICAgICAgOiBEZWNpbWFsKGludmVydFNpZ24obGhzU2lnbiksIGFsaWduZWRPcGVyYW5kcy5leHBv
bmVudCwgLXN0YXRpY19jYXN0PGludDY0X3Q+KHJlc3VsdCkpOworfQorCitEZWNpbWFsIERlY2lt
YWw6Om9wZXJhdG9yKihjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29uc3QgRGVj
aW1hbCYgbGhzID0gKnRoaXM7CisgICAgY29uc3QgU2lnbiBsaHNTaWduID0gbGhzLnNpZ24oKTsK
KyAgICBjb25zdCBTaWduIHJoc1NpZ24gPSByaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24gcmVz
dWx0U2lnbiA9IGxoc1NpZ24gPT0gcmhzU2lnbiA/IFBvc2l0aXZlIDogTmVnYXRpdmU7CisKKyAg
ICBTcGVjaWFsVmFsdWVIYW5kbGVyIGhhbmRsZXIobGhzLCByaHMpOworICAgIHN3aXRjaCAoaGFu
ZGxlci5oYW5kbGUoKSkgeworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEZpbml0
ZTogeworICAgICAgICBjb25zdCB1aW50NjRfdCBsaHNDb2VmZmljaWVudCA9IGxocy5tX2RhdGEu
Y29lZmZpY2llbnQoKTsKKyAgICAgICAgY29uc3QgdWludDY0X3QgcmhzQ29lZmZpY2llbnQgPSBy
aHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgICAgIGludCByZXN1bHRFeHBvbmVudCA9IGxo
cy5leHBvbmVudCgpICsgcmhzLmV4cG9uZW50KCk7CisgICAgICAgIFVJbnQxMjggd29yayhVSW50
MTI4OjptdWx0aXBseShsaHNDb2VmZmljaWVudCwgcmhzQ29lZmZpY2llbnQpKTsKKyAgICAgICAg
d2hpbGUgKHdvcmsuaGlnaCgpKSB7CisgICAgICAgICAgICB3b3JrIC89IDEwOworICAgICAgICAg
ICAgKytyZXN1bHRFeHBvbmVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRGVjaW1hbChy
ZXN1bHRTaWduLCByZXN1bHRFeHBvbmVudCwgd29yay5sb3coKSk7CisgICAgfQorCisgICAgY2Fz
ZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpCb3RoSW5maW5pdHk6CisgICAgICAgIHJldHVybiBpbmZp
bml0eShyZXN1bHRTaWduKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6RWl0aGVy
TmFOOgorICAgICAgICByZXR1cm4gaGFuZGxlci52YWx1ZSgpOworCisgICAgY2FzZSBTcGVjaWFs
VmFsdWVIYW5kbGVyOjpMSFNJc0luZmluaXR5OgorICAgICAgICByZXR1cm4gcmhzLmlzWmVybygp
ID8gbmFuKCkgOiBpbmZpbml0eShyZXN1bHRTaWduKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVl
SGFuZGxlcjo6UkhTSXNJbmZpbml0eToKKyAgICAgICAgcmV0dXJuIGxocy5pc1plcm8oKSA/IG5h
bigpIDogaW5maW5pdHkocmVzdWx0U2lnbik7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIG5hbigpOworfQorCitEZWNpbWFsIERlY2ltYWw6Om9wZXJhdG9y
Lyhjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgY29uc3QgRGVjaW1hbCYgbGhzID0g
KnRoaXM7CisgICAgY29uc3QgU2lnbiBsaHNTaWduID0gbGhzLnNpZ24oKTsKKyAgICBjb25zdCBT
aWduIHJoc1NpZ24gPSByaHMuc2lnbigpOworICAgIGNvbnN0IFNpZ24gcmVzdWx0U2lnbiA9IGxo
c1NpZ24gPT0gcmhzU2lnbiA/IFBvc2l0aXZlIDogTmVnYXRpdmU7CisKKyAgICBTcGVjaWFsVmFs
dWVIYW5kbGVyIGhhbmRsZXIobGhzLCByaHMpOworICAgIHN3aXRjaCAoaGFuZGxlci5oYW5kbGUo
KSkgeworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6Qm90aEZpbml0ZToKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIFNwZWNpYWxWYWx1ZUhhbmRsZXI6OkJvdGhJbmZpbml0eToKKyAg
ICAgICAgcmV0dXJuIG5hbigpOworCisgICAgY2FzZSBTcGVjaWFsVmFsdWVIYW5kbGVyOjpFaXRo
ZXJOYU46CisgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlKCk7CisKKyAgICBjYXNlIFNwZWNp
YWxWYWx1ZUhhbmRsZXI6OkxIU0lzSW5maW5pdHk6CisgICAgICAgIHJldHVybiBpbmZpbml0eShy
ZXN1bHRTaWduKTsKKworICAgIGNhc2UgU3BlY2lhbFZhbHVlSGFuZGxlcjo6UkhTSXNJbmZpbml0
eToKKyAgICAgICAgcmV0dXJuIHplcm8ocmVzdWx0U2lnbik7CisgICAgfQorCisgICAgQVNTRVJU
KGxocy5pc0Zpbml0ZSgpKTsKKyAgICBBU1NFUlQocmhzLmlzRmluaXRlKCkpOworCisgICAgaWYg
KHJocy5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIGxocy5pc1plcm8oKSA/IG5hbigpIDogaW5m
aW5pdHkocmVzdWx0U2lnbik7CisKKyAgICBpbnQgcmVzdWx0RXhwb25lbnQgPSBsaHMuZXhwb25l
bnQoKSAtIHJocy5leHBvbmVudCgpOworCisgICAgaWYgKGxocy5pc1plcm8oKSkKKyAgICAgICAg
cmV0dXJuIERlY2ltYWwocmVzdWx0U2lnbiwgcmVzdWx0RXhwb25lbnQsIDApOworCisgICAgdWlu
dDY0X3QgcmVtYWluZGVyID0gbGhzLm1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIGNvbnN0IHVp
bnQ2NF90IGRpdmlzb3IgPSByaHMubV9kYXRhLmNvZWZmaWNpZW50KCk7CisgICAgdWludDY0X3Qg
cmVzdWx0ID0gMDsKKyAgICB3aGlsZSAocmVzdWx0IDwgTWF4Q29lZmZpY2llbnQgLyAxMDApIHsK
KyAgICAgICAgd2hpbGUgKHJlbWFpbmRlciA8IGRpdmlzb3IpIHsKKyAgICAgICAgICAgIHJlbWFp
bmRlciAqPSAxMDsKKyAgICAgICAgICAgIHJlc3VsdCAqPSAxMDsKKyAgICAgICAgICAgIC0tcmVz
dWx0RXhwb25lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ICs9IHJlbWFpbmRlciAvIGRp
dmlzb3I7CisgICAgICAgIHJlbWFpbmRlciAlPSBkaXZpc29yOworICAgICAgICBpZiAoIXJlbWFp
bmRlcikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChyZW1haW5kZXIgPiBk
aXZpc29yIC8gMikKKyAgICAgICAgKytyZXN1bHQ7CisKKyAgICByZXR1cm4gRGVjaW1hbChyZXN1
bHRTaWduLCByZXN1bHRFeHBvbmVudCwgcmVzdWx0KTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVy
YXRvcj09KGNvbnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhID09
IHJocy5tX2RhdGEgfHwgY29tcGFyZVRvKHJocykuaXNaZXJvKCk7Cit9CisKK2Jvb2wgRGVjaW1h
bDo6b3BlcmF0b3IhPShjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7CisgICAgaWYgKG1fZGF0
YSA9PSByaHMubV9kYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgRGVjaW1h
bCByZXN1bHQgPSBjb21wYXJlVG8ocmhzKTsKKyAgICBpZiAocmVzdWx0LmlzTmFOKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIXJlc3VsdC5pc1plcm8oKTsKK30KKworYm9v
bCBEZWNpbWFsOjpvcGVyYXRvcjwoY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGNv
bnN0IERlY2ltYWwgcmVzdWx0ID0gY29tcGFyZVRvKHJocyk7CisgICAgaWYgKHJlc3VsdC5pc05h
TigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFyZXN1bHQuaXNaZXJvKCkg
JiYgcmVzdWx0LmlzTmVnYXRpdmUoKTsKK30KKworYm9vbCBEZWNpbWFsOjpvcGVyYXRvcjw9KGNv
bnN0IERlY2ltYWwmIHJocykgY29uc3QKK3sKKyAgICBpZiAobV9kYXRhID09IHJocy5tX2RhdGEp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IERlY2ltYWwgcmVzdWx0ID0gY29tcGFy
ZVRvKHJocyk7CisgICAgaWYgKHJlc3VsdC5pc05hTigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHJlc3VsdC5pc1plcm8oKSB8fCByZXN1bHQuaXNOZWdhdGl2ZSgpOworfQor
Citib29sIERlY2ltYWw6Om9wZXJhdG9yPihjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7Cisg
ICAgY29uc3QgRGVjaW1hbCByZXN1bHQgPSBjb21wYXJlVG8ocmhzKTsKKyAgICBpZiAocmVzdWx0
LmlzTmFOKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIXJlc3VsdC5pc1pl
cm8oKSAmJiByZXN1bHQuaXNQb3NpdGl2ZSgpOworfQorCitib29sIERlY2ltYWw6Om9wZXJhdG9y
Pj0oY29uc3QgRGVjaW1hbCYgcmhzKSBjb25zdAoreworICAgIGlmIChtX2RhdGEgPT0gcmhzLm1f
ZGF0YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgRGVjaW1hbCByZXN1bHQgPSBj
b21wYXJlVG8ocmhzKTsKKyAgICBpZiAocmVzdWx0LmlzTmFOKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gcmVzdWx0LmlzWmVybygpIHx8ICFyZXN1bHQuaXNOZWdhdGl2ZSgp
OworfQorCitEZWNpbWFsIERlY2ltYWw6OmFicygpIGNvbnN0Cit7CisgICAgRGVjaW1hbCByZXN1
bHQoKnRoaXMpOworICAgIHJlc3VsdC5tX2RhdGEuc2V0U2lnbihQb3NpdGl2ZSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworRGVjaW1hbDo6QWxpZ25lZE9wZXJhbmRzIERlY2ltYWw6OmFsaWdu
T3BlcmFuZHMoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBEZWNpbWFsJiByaHMpCit7CisgICAg
QVNTRVJUKGxocy5pc0Zpbml0ZSgpKTsKKyAgICBBU1NFUlQocmhzLmlzRmluaXRlKCkpOworCisg
ICAgY29uc3QgaW50IGxoc0V4cG9uZW50ID0gbGhzLmV4cG9uZW50KCk7CisgICAgY29uc3QgaW50
IHJoc0V4cG9uZW50ID0gcmhzLmV4cG9uZW50KCk7CisgICAgaW50IGV4cG9uZW50ID0gc3RkOjpt
aW4obGhzRXhwb25lbnQsIHJoc0V4cG9uZW50KTsKKyAgICB1aW50NjRfdCBsaHNDb2VmZmljaWVu
dCA9IGxocy5tX2RhdGEuY29lZmZpY2llbnQoKTsKKyAgICB1aW50NjRfdCByaHNDb2VmZmljaWVu
dCA9IHJocy5tX2RhdGEuY29lZmZpY2llbnQoKTsKKworICAgIGlmIChsaHNFeHBvbmVudCA+IHJo
c0V4cG9uZW50KSB7CisgICAgICAgIGNvbnN0IGludCBudW1iZXJPZkxIU0RpZ2l0cyA9IGNvdW50
RGlnaXRzKGxoc0NvZWZmaWNpZW50KTsKKyAgICAgICAgaWYgKG51bWJlck9mTEhTRGlnaXRzKSB7
CisgICAgICAgICAgICBjb25zdCBpbnQgbGhzU2hpZnRBbW91bnQgPSBsaHNFeHBvbmVudCAtIHJo
c0V4cG9uZW50OworICAgICAgICAgICAgY29uc3QgaW50IG92ZXJmbG93ID0gbnVtYmVyT2ZMSFNE
aWdpdHMgKyBsaHNTaGlmdEFtb3VudCAtIFByZWNpc2lvbjsKKyAgICAgICAgICAgIGlmIChvdmVy
ZmxvdyA8PSAwKQorICAgICAgICAgICAgICAgIGxoc0NvZWZmaWNpZW50ID0gc2NhbGVVcChsaHND
b2VmZmljaWVudCwgbGhzU2hpZnRBbW91bnQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgbGhzQ29lZmZpY2llbnQgPSBzY2FsZVVwKGxoc0NvZWZmaWNpZW50LCBsaHNTaGlm
dEFtb3VudCAtIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICByaHNDb2VmZmljaWVudCA9IHNj
YWxlRG93bihyaHNDb2VmZmljaWVudCwgb3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGV4cG9u
ZW50ICs9IG92ZXJmbG93OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9IGVsc2Ug
aWYgKGxoc0V4cG9uZW50IDwgcmhzRXhwb25lbnQpIHsKKyAgICAgICAgY29uc3QgaW50IG51bWJl
ck9mUkhTRGlnaXRzID0gY291bnREaWdpdHMocmhzQ29lZmZpY2llbnQpOworICAgICAgICBpZiAo
bnVtYmVyT2ZSSFNEaWdpdHMpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCByaHNTaGlmdEFtb3Vu
dCA9IHJoc0V4cG9uZW50IC0gbGhzRXhwb25lbnQ7CisgICAgICAgICAgICBjb25zdCBpbnQgb3Zl
cmZsb3cgPSBudW1iZXJPZlJIU0RpZ2l0cyArIHJoc1NoaWZ0QW1vdW50IC0gUHJlY2lzaW9uOwor
ICAgICAgICAgICAgaWYgKG92ZXJmbG93IDw9IDApCisgICAgICAgICAgICAgICAgcmhzQ29lZmZp
Y2llbnQgPSBzY2FsZVVwKHJoc0NvZWZmaWNpZW50LCByaHNTaGlmdEFtb3VudCk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByaHNDb2VmZmljaWVudCA9IHNjYWxlVXAocmhz
Q29lZmZpY2llbnQsIHJoc1NoaWZ0QW1vdW50IC0gb3ZlcmZsb3cpOworICAgICAgICAgICAgICAg
IGxoc0NvZWZmaWNpZW50ID0gc2NhbGVEb3duKGxoc0NvZWZmaWNpZW50LCBvdmVyZmxvdyk7Cisg
ICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gb3ZlcmZsb3c7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBbGlnbmVkT3BlcmFuZHMgYWxpZ25lZE9wZXJhbmRzOworICAg
IGFsaWduZWRPcGVyYW5kcy5leHBvbmVudCA9IGV4cG9uZW50OworICAgIGFsaWduZWRPcGVyYW5k
cy5saHNDb2VmZmljaWVudCA9IGxoc0NvZWZmaWNpZW50OworICAgIGFsaWduZWRPcGVyYW5kcy5y
aHNDb2VmZmljaWVudCA9IHJoc0NvZWZmaWNpZW50OworICAgIHJldHVybiBhbGlnbmVkT3BlcmFu
ZHM7Cit9CisKKy8vIFJvdW5kIHRvd2FyZCBwb3NpdGl2ZSBpbmZpbml0eS4KKy8vIE5vdGU6IE1h
YyBwb3J0cyBkZWZpbmVzIGNlaWwoeCkgYXMgd3RmX2NlaWwoeCksIHNvIHdlIGNhbid0IHVzZSBu
YW1lICJjZWlsIiBoZXJlLgorRGVjaW1hbCBEZWNpbWFsOjpjZWlsaW5nKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNTcGVjaWFsKCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlmIChleHBv
bmVudCgpID49IDApCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIHVpbnQ2NF90IHJlc3Vs
dCA9IG1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIGNvbnN0IGludCBudW1iZXJPZkRpZ2l0cyA9
IGNvdW50RGlnaXRzKHJlc3VsdCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRHJvcERpZ2l0cyA9
IC1leHBvbmVudCgpOworICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IG51bWJlck9mRHJvcERpZ2l0
cykKKyAgICAgICAgcmV0dXJuIHplcm8oUG9zaXRpdmUpOworCisgICAgcmVzdWx0ID0gc2NhbGVE
b3duKHJlc3VsdCwgbnVtYmVyT2ZEcm9wRGlnaXRzIC0gMSk7CisgICAgaWYgKHNpZ24oKSA9PSBQ
b3NpdGl2ZSAmJiByZXN1bHQgJSAxMCA+IDApCisgICAgICAgIHJlc3VsdCArPSAxMDsKKyAgICBy
ZXN1bHQgLz0gMTA7CisgICAgcmV0dXJuIERlY2ltYWwoc2lnbigpLCAwLCByZXN1bHQpOworfQor
CitEZWNpbWFsIERlY2ltYWw6OmNvbXBhcmVUbyhjb25zdCBEZWNpbWFsJiByaHMpIGNvbnN0Cit7
CisgICAgY29uc3QgRGVjaW1hbCByZXN1bHQoKnRoaXMgLSByaHMpOworICAgIHN3aXRjaCAocmVz
dWx0Lm1fZGF0YS5mb3JtYXRDbGFzcygpKSB7CisgICAgY2FzZSBFbmNvZGVkRGF0YTo6Q2xhc3NJ
bmZpbml0eToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pc05lZ2F0aXZlKCkgPyBEZWNpbWFsKC0x
KSA6IERlY2ltYWwoMSk7CisKKyAgICBjYXNlIEVuY29kZWREYXRhOjpDbGFzc05hTjoKKyAgICBj
YXNlIEVuY29kZWREYXRhOjpDbGFzc05vcm1hbDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwor
ICAgIGNhc2UgRW5jb2RlZERhdGE6OkNsYXNzWmVybzoKKyAgICAgICAgcmV0dXJuIHplcm8oUG9z
aXRpdmUpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBuYW4oKTsKKyAgICB9Cit9CisKKy8vIFJvdW5kIHRvd2FyZCBuZWdhdGl2
ZSBpbmZpbml0eS4KK0RlY2ltYWwgRGVjaW1hbDo6Zmxvb3IoKSBjb25zdAoreworICAgIGlmIChp
c1NwZWNpYWwoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgaWYgKGV4cG9uZW50KCkg
Pj0gMCkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgdWludDY0X3QgcmVzdWx0ID0gbV9k
YXRhLmNvZWZmaWNpZW50KCk7CisgICAgY29uc3QgaW50IG51bWJlck9mRGlnaXRzID0gY291bnRE
aWdpdHMocmVzdWx0KTsKKyAgICBjb25zdCBpbnQgbnVtYmVyT2ZEcm9wRGlnaXRzID0gLWV4cG9u
ZW50KCk7CisgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgbnVtYmVyT2ZEcm9wRGlnaXRzKQorICAg
ICAgICByZXR1cm4gemVybyhQb3NpdGl2ZSk7CisKKyAgICByZXN1bHQgPSBzY2FsZURvd24ocmVz
dWx0LCBudW1iZXJPZkRyb3BEaWdpdHMgLSAxKTsKKyAgICBpZiAoaXNOZWdhdGl2ZSgpICYmIHJl
c3VsdCAlIDEwID4gMCkKKyAgICAgICAgcmVzdWx0ICs9IDEwOworICAgIHJlc3VsdCAvPSAxMDsK
KyAgICByZXR1cm4gRGVjaW1hbChzaWduKCksIDAsIHJlc3VsdCk7Cit9CisKK0RlY2ltYWwgRGVj
aW1hbDo6ZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBpbnQgZXhwb25lbnQg
PSAwOworICAgIFNpZ24gZXhwb25lbnRTaWduID0gUG9zaXRpdmU7CisgICAgaW50IG51bWJlck9m
RGlnaXRzID0gMDsKKyAgICBpbnQgbnVtYmVyT2ZEaWdpdHNBZnRlckRvdCA9IDA7CisgICAgaW50
IG51bWJlck9mRXh0cmFEaWdpdHMgPSAwOworICAgIFNpZ24gc2lnbiA9IFBvc2l0aXZlOworCisg
ICAgZW51bSB7CisgICAgICAgIFN0YXRlRGlnaXQsCisgICAgICAgIFN0YXRlRG90LAorICAgICAg
ICBTdGF0ZURvdERpZ2l0LAorICAgICAgICBTdGF0ZUUsCisgICAgICAgIFN0YXRlRURpZ2l0LAor
ICAgICAgICBTdGF0ZUVTaWduLAorICAgICAgICBTdGF0ZVNpZ24sCisgICAgICAgIFN0YXRlU3Rh
cnQsCisgICAgICAgIFN0YXRlWmVybywKKyAgICB9IHN0YXRlID0gU3RhdGVTdGFydDsKKworI2Rl
ZmluZSBIYW5kbGVDaGFyQW5kQnJlYWsoZXhwZWN0ZWQsIG5leHRTdGF0ZSkgXAorICAgIGlmIChj
aCA9PSBleHBlY3RlZCkgeyBcCisgICAgICAgIHN0YXRlID0gbmV4dFN0YXRlOyBcCisgICAgICAg
IGJyZWFrOyBcCisgICAgfQorCisjZGVmaW5lIEhhbmRsZVR3b0NoYXJzQW5kQnJlYWsoZXhwZWN0
ZWQxLCBleHBlY3RlZDIsIG5leHRTdGF0ZSkgXAorICAgIGlmIChjaCA9PSBleHBlY3RlZDEgfHwg
Y2ggPT0gZXhwZWN0ZWQyKSB7IFwKKyAgICAgICAgc3RhdGUgPSBuZXh0U3RhdGU7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisKKyAgICB1aW50NjRfdCBhY2N1bXVsYXRvciA9IDA7CisgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgc3RyLmxlbmd0aCgpOyArK2luZGV4KSB7
CisgICAgICAgIGNvbnN0IGludCBjaCA9IHN0cltpbmRleF07CisgICAgICAgIHN3aXRjaCAoc3Rh
dGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZURpZ2l0OgorICAgICAgICAgICAgaWYgKGNoID49ICcw
JyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBQ
cmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICAg
ICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKj0gMTA7CisgICAgICAgICAgICAgICAgICAgIGFj
Y3VtdWxhdG9yICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICArK251bWJlck9mRXh0cmFEaWdpdHM7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEhhbmRsZUNoYXJBbmRCcmVhaygnLicsIFN0
YXRlRG90KTsKKyAgICAgICAgICAgIEhhbmRsZVR3b0NoYXJzQW5kQnJlYWsoJ0UnLCAnZScsIFN0
YXRlRSk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAgICAgICAgY2FzZSBTdGF0ZURv
dDoKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG51bWJlck9mRGlnaXRzIDwgUHJlY2lzaW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgICsrbnVtYmVyT2ZEaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWdp
dHNBZnRlckRvdDsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKj0gMTA7CisgICAg
ICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRG90RGlnaXQ7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZURvdERpZ2l0Ogor
ICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobnVtYmVyT2ZEaWdpdHMgPCBQcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
KytudW1iZXJPZkRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkRpZ2l0c0Fm
dGVyRG90OworICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciAqPSAxMDsKKyAgICAgICAg
ICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYW5k
bGVUd29DaGFyc0FuZEJyZWFrKCdFJywgJ2UnLCBTdGF0ZUUpOworICAgICAgICAgICAgcmV0dXJu
IG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVFOgorICAgICAgICAgICAgaWYgKGNoID09ICcr
JykgeworICAgICAgICAgICAgICAgIGV4cG9uZW50U2lnbiA9IFBvc2l0aXZlOworICAgICAgICAg
ICAgICAgIHN0YXRlID0gU3RhdGVFU2lnbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09ICctJykgeworICAgICAgICAgICAgICAg
IGV4cG9uZW50U2lnbiA9IE5lZ2F0aXZlOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVF
U2lnbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBleHBvbmVu
dCA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVFRGlnaXQ7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBu
YW4oKTsKKworICAgICAgICBjYXNlIFN0YXRlRURpZ2l0OgorICAgICAgICAgICAgaWYgKGNoID49
ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBleHBvbmVudCAqPSAxMDsKKyAg
ICAgICAgICAgICAgICBleHBvbmVudCArPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBpZiAo
ZXhwb25lbnQgPiBFeHBvbmVudE1heCArIFByZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoYWNjdW11bGF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwb25l
bnRTaWduID09IE5lZ2F0aXZlID8gemVybyhQb3NpdGl2ZSkgOiBpbmZpbml0eShzaWduKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHplcm8oc2lnbik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVFRGlnaXQ7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuYW4oKTsKKworICAgICAg
ICBjYXNlIFN0YXRlRVNpZ246CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5
JykgeworICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gY2ggLSAnMCc7CisgICAgICAgICAgICAg
ICAgc3RhdGUgPSBTdGF0ZUVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbigpOworCisgICAgICAgIGNhc2UgU3RhdGVT
aWduOgorICAgICAgICAgICAgaWYgKGNoID49ICcxJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRvciA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIG51bWJlck9m
RGlnaXRzID0gMTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlRGlnaXQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEhhbmRsZUNoYXJB
bmRCcmVhaygnMCcsIFN0YXRlWmVybyk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisKKyAg
ICAgICAgY2FzZSBTdGF0ZVN0YXJ0OgorICAgICAgICAgICAgaWYgKGNoID49ICcxJyAmJiBjaCA8
PSAnOScpIHsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGNoIC0gJzAnOworICAgICAg
ICAgICAgICAgIG51bWJlck9mRGlnaXRzID0gMTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlRGlnaXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBzaWduID0gTmVnYXRpdmU7
CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVNpZ247CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnKycpIHsKKyAgICAg
ICAgICAgICAgICBzaWduID0gUG9zaXRpdmU7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZVNpZ247CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEhhbmRsZUNoYXJBbmRCcmVhaygnMCcsIFN0YXRlWmVybyk7CisgICAgICAgICAgICBIYW5k
bGVDaGFyQW5kQnJlYWsoJy4nLCBTdGF0ZURvdCk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7
CisKKyAgICAgICAgY2FzZSBTdGF0ZVplcm86CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoY2ggPj0gJzEnICYmIGNo
IDw9ICc5JykgeworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2ggLSAnMCc7CisgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZEaWdpdHMgPSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGVEaWdpdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgSGFuZGxlQ2hhckFuZEJyZWFrKCcuJywgU3RhdGVEb3QpOworICAgICAgICAgICAg
SGFuZGxlVHdvQ2hhcnNBbmRCcmVhaygnRScsICdlJywgU3RhdGVFKTsKKyAgICAgICAgICAgIHJl
dHVybiBuYW4oKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbmFuKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoc3RhdGUgPT0gU3RhdGVaZXJvKQorICAgICAgICByZXR1cm4gemVybyhzaWduKTsK
KworICAgIGlmIChzdGF0ZSA9PSBTdGF0ZURpZ2l0IHx8IHN0YXRlID09IFN0YXRlRURpZ2l0IHx8
IHN0YXRlID09IFN0YXRlRG90RGlnaXQpIHsKKyAgICAgICAgaW50IHJlc3VsdEV4cG9uZW50ID0g
ZXhwb25lbnQgKiAoZXhwb25lbnRTaWduID09IE5lZ2F0aXZlID8gLTEgOiAxKSAtIG51bWJlck9m
RGlnaXRzQWZ0ZXJEb3QgKyBudW1iZXJPZkV4dHJhRGlnaXRzOworICAgICAgICBpZiAocmVzdWx0
RXhwb25lbnQgPCBFeHBvbmVudE1pbikKKyAgICAgICAgICAgIHJldHVybiB6ZXJvKFBvc2l0aXZl
KTsKKworICAgICAgICBjb25zdCBpbnQgb3ZlcmZsb3cgPSByZXN1bHRFeHBvbmVudCAtIEV4cG9u
ZW50TWF4ICsgMTsKKyAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgeworICAgICAgICAgICAgaWYg
KG92ZXJmbG93ICsgbnVtYmVyT2ZEaWdpdHMgLSBudW1iZXJPZkRpZ2l0c0FmdGVyRG90ID4gUHJl
Y2lzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmZpbml0eShzaWduKTsKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yID0gc2NhbGVVcChhY2N1bXVsYXRvciwgb3ZlcmZsb3cpOworICAgICAg
ICAgICAgcmVzdWx0RXhwb25lbnQgLT0gb3ZlcmZsb3c7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gRGVjaW1hbChzaWduLCByZXN1bHRFeHBvbmVudCwgYWNjdW11bGF0b3IpOworICAgIH0K
KworICAgIHJldHVybiBuYW4oKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjppbmZpbml0eShjb25z
dCBTaWduIHNpZ24pCit7CisgICAgcmV0dXJuIERlY2ltYWwoRW5jb2RlZERhdGEoc2lnbiwgRW5j
b2RlZERhdGE6OkNsYXNzSW5maW5pdHkpKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpuYW4oKQor
eworICAgIHJldHVybiBEZWNpbWFsKEVuY29kZWREYXRhKFBvc2l0aXZlLCBFbmNvZGVkRGF0YTo6
Q2xhc3NOYU4pKTsKK30KKworRGVjaW1hbCBEZWNpbWFsOjpyZW1haW5kZXIoY29uc3QgRGVjaW1h
bCYgcmhzKSBjb25zdAoreworICAgIGNvbnN0IERlY2ltYWwgcXVvdGllbnQgPSAoKnRoaXMgLyBy
aHMpLnJvdW5kKCk7CisgICAgcmV0dXJuIHF1b3RpZW50LmlzU3BlY2lhbCgpID8gcXVvdGllbnQg
OiAqdGhpcyAtIHF1b3RpZW50ICogcmhzOworfQorCitEZWNpbWFsIERlY2ltYWw6OnJvdW5kKCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNTcGVjaWFsKCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKwor
ICAgIGlmIChleHBvbmVudCgpID49IDApCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIHVp
bnQ2NF90IHJlc3VsdCA9IG1fZGF0YS5jb2VmZmljaWVudCgpOworICAgIGNvbnN0IGludCBudW1i
ZXJPZkRpZ2l0cyA9IGNvdW50RGlnaXRzKHJlc3VsdCk7CisgICAgY29uc3QgaW50IG51bWJlck9m
RHJvcERpZ2l0cyA9IC1leHBvbmVudCgpOworICAgIGlmIChudW1iZXJPZkRpZ2l0cyA8IG51bWJl
ck9mRHJvcERpZ2l0cykKKyAgICAgICAgcmV0dXJuIHplcm8oUG9zaXRpdmUpOworCisgICAgcmVz
dWx0ID0gc2NhbGVEb3duKHJlc3VsdCwgbnVtYmVyT2ZEcm9wRGlnaXRzIC0gMSk7CisgICAgaWYg
KHJlc3VsdCAlIDEwID49IDUpCisgICAgICAgIHJlc3VsdCArPSAxMDsKKyAgICByZXN1bHQgLz0g
MTA7CisgICAgcmV0dXJuIERlY2ltYWwoc2lnbigpLCAwLCByZXN1bHQpOworfQorCitTdHJpbmcg
RGVjaW1hbDo6dG9TdHJpbmcoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9kYXRhLmZvcm1hdENs
YXNzKCkpIHsKKyAgICBjYXNlIEVuY29kZWREYXRhOjpDbGFzc0luZmluaXR5OgorICAgICAgICBy
ZXR1cm4gc2lnbigpID8gIi1JbmZpbml0eSIgOiAiSW5maW5pdHkiOworCisgICAgY2FzZSBFbmNv
ZGVkRGF0YTo6Q2xhc3NOYU46CisgICAgICAgIHJldHVybiAiTmFOIjsKKworICAgIGNhc2UgRW5j
b2RlZERhdGE6OkNsYXNzTm9ybWFsOgorICAgIGNhc2UgRW5jb2RlZERhdGE6OkNsYXNzWmVybzoK
KyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKKyAgICBpZiAoc2lnbigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworCisg
ICAgaW50IG9yaWdpbmFsRXhwb25lbnQgPSBleHBvbmVudCgpOworCisgICAgY29uc3QgaW50IG1h
eERpZ2l0cyA9IERCTF9ESUc7CisgICAgdWludDY0X3QgY29lZmZpY2llbnQgPSBtX2RhdGEuY29l
ZmZpY2llbnQoKTsKKyAgICBpbnQgbGFzdERpZ2l0ID0gMDsKKyAgICB3aGlsZSAoY291bnREaWdp
dHMoY29lZmZpY2llbnQpID4gbWF4RGlnaXRzKSB7CisgICAgICAgIGxhc3REaWdpdCA9IGNvZWZm
aWNpZW50ICUgMTA7CisgICAgICAgIGNvZWZmaWNpZW50IC89IDEwOworICAgICAgICArK29yaWdp
bmFsRXhwb25lbnQ7CisgICAgfQorCisgICAgaWYgKGxhc3REaWdpdCA+PSA1KQorICAgICAgICAr
K2NvZWZmaWNpZW50OworCisgICAgd2hpbGUgKG9yaWdpbmFsRXhwb25lbnQgPCAwICYmIGNvZWZm
aWNpZW50ICYmICEoY29lZmZpY2llbnQgJSAxMCkpIHsKKyAgICAgICAgY29lZmZpY2llbnQgLz0g
MTA7CisgICAgICAgICsrb3JpZ2luYWxFeHBvbmVudDsKKyAgICB9CisKKyAgICBjb25zdCBTdHJp
bmcgZGlnaXRzID0gU3RyaW5nOjpudW1iZXIoY29lZmZpY2llbnQpOworICAgIGludCBjb2VmZmlj
aWVudExlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oZGlnaXRzLmxlbmd0aCgpKTsKKyAgICBjb25z
dCBpbnQgYWRqdXN0ZWRFeHBvbmVudCA9IG9yaWdpbmFsRXhwb25lbnQgKyBjb2VmZmljaWVudExl
bmd0aCAtIDE7CisgICAgaWYgKG9yaWdpbmFsRXhwb25lbnQgPD0gMCAmJiBhZGp1c3RlZEV4cG9u
ZW50ID49IC02KSB7CisgICAgICAgIGlmICghb3JpZ2luYWxFeHBvbmVudCkgeworICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoZGlnaXRzKTsKKyAgICAgICAgICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWRqdXN0ZWRFeHBvbmVudCA+PSAw
KSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvZWZmaWNpZW50TGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChkaWdpdHNbaV0pOworICAgICAg
ICAgICAgICAgIGlmIChpID09IGFkanVzdGVkRXhwb25lbnQpCisgICAgICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
IjAuIik7CisgICAgICAgIGZvciAoaW50IGkgPSBhZGp1c3RlZEV4cG9uZW50ICsgMTsgaSA8IDA7
ICsraSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcwJyk7CisKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoZGlnaXRzKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGRpZ2l0c1swXSk7CisgICAgICAgIHdoaWxlIChjb2VmZmljaWVudExlbmd0aCA+PSAyICYmIGRp
Z2l0c1tjb2VmZmljaWVudExlbmd0aCAtIDFdID09ICcwJykKKyAgICAgICAgICAgIC0tY29lZmZp
Y2llbnRMZW5ndGg7CisgICAgICAgIGlmIChjb2VmZmljaWVudExlbmd0aCA+PSAyKSB7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7
IGkgPCBjb2VmZmljaWVudExlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGRpZ2l0c1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWRqdXN0ZWRFeHBvbmVu
dCkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYWRqdXN0ZWRFeHBvbmVudCA8IDAgPyAi
ZSIgOiAiZSsiKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGFk
anVzdGVkRXhwb25lbnQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworfQorCitEZWNpbWFsIERlY2ltYWw6Onplcm8oU2lnbiBzaWduKQoreworICAg
IHJldHVybiBEZWNpbWFsKEVuY29kZWREYXRhKHNpZ24sIEVuY29kZWREYXRhOjpDbGFzc1plcm8p
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRGVjaW1hbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVjaW1hbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjJlZjg4NjIwMDJmZGY5ZTU1MjBjODY2M2ZkODQwYmQzOTkxYzFkNzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EZWNpbWFsLmgKQEAgLTAs
MCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERlY2ltYWxfaAorI2RlZmluZSBEZWNpbWFsX2gKKworI2luY2x1
ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIERl
Y2ltYWxQcml2YXRlIHsKK2NsYXNzIFNwZWNpYWxWYWx1ZUhhbmRsZXI7Cit9CisKKy8vIFRoaXMg
Y2xhc3MgcmVwcmVzZW50cyBkZWNpbWFsIGJhc2UgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgorLy8K
Ky8vIEZJWE1FOiBPbmNlIGFsbCBDKysgY29tcGlsZXIgc3VwcG9ydCBkZWNpbWFsIHR5cGUsIHdl
IHNob3VsZCByZXBsYWNlIHRoaXMKKy8vIGNsYXNzIHRvIGNvbXBpbGVyIHN1cHBvcnRlZCBvbmUu
IFNlZSBiZWxvdyBVUkkgZm9yIGN1cnJlbnQgc3RhdHVzIG9mIGRlY2ltYWwKKy8vIHR5cGUgZm9y
IEMrKzogLy8gaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBl
cnMvMjAwNi9uMTk3Ny5odG1sCitjbGFzcyBEZWNpbWFsIHsKK3B1YmxpYzoKKyAgICBlbnVtIFNp
Z24geworICAgICAgICBQb3NpdGl2ZSwKKyAgICAgICAgTmVnYXRpdmUsCisgICAgfTsKKworICAg
IC8vIFlvdSBzaG91bGQgbm90IHVzZSBFbmNvZGVkRGF0YSBvdGhlciB0aGFuIHVuaXQgdGVzdGlu
Zy4KKyAgICBjbGFzcyBFbmNvZGVkRGF0YSB7CisgICAgICAgIC8vIEZvciBhY2Nlc3NpbmcgRm9y
bWF0Q2xhc3MuCisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWNpbWFsOworICAgICAgICBmcmllbmQg
Y2xhc3MgRGVjaW1hbFByaXZhdGU6OlNwZWNpYWxWYWx1ZUhhbmRsZXI7CisgICAgcHVibGljOgor
ICAgICAgICBFbmNvZGVkRGF0YShTaWduLCBpbnQgZXhwb25lbnQsIHVpbnQ2NF90IGNvZWZmaWNp
ZW50KTsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRW5jb2RlZERhdGEmKSBjb25z
dDsKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEVuY29kZWREYXRhJiBhbm90aGVyKSBj
b25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShhbm90aGVyKTsgfQorCisgICAgICAgIHVpbnQ2NF90
IGNvZWZmaWNpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb2VmZmljaWVudDsgfQorICAgICAgICBp
bnQgY291bnREaWdpdHMoKSBjb25zdDsKKyAgICAgICAgaW50IGV4cG9uZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBvbmVudDsgfQorICAgICAgICBib29sIGlzRmluaXRlKCkgY29uc3QgeyByZXR1
cm4gIWlzU3BlY2lhbCgpOyB9CisgICAgICAgIGJvb2wgaXNOYU4oKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdENsYXNzID09IENsYXNzTmFOOyB9CisgICAgICAgIGJvb2wgaXNTcGVjaWFsKCkgY29u
c3QgeyByZXR1cm4gbV9mb3JtYXRDbGFzcyA9PSBDbGFzc0luZmluaXR5IHx8IG1fZm9ybWF0Q2xh
c3MgPT0gQ2xhc3NOYU47IH0KKyAgICAgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdENsYXNzID09IENsYXNzWmVybzsgfQorICAgICAgICBTaWduIHNpZ24oKSBjb25zdCB7
IHJldHVybiBtX3NpZ247IH0KKyAgICAgICAgdm9pZCBzZXRTaWduKFNpZ24gc2lnbikgeyBtX3Np
Z24gPSBzaWduOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBlbnVtIEZvcm1hdENsYXNzIHsK
KyAgICAgICAgICAgIENsYXNzSW5maW5pdHksCisgICAgICAgICAgICBDbGFzc05vcm1hbCwKKyAg
ICAgICAgICAgIENsYXNzTmFOLAorICAgICAgICAgICAgQ2xhc3NaZXJvLAorICAgICAgICB9Owor
CisgICAgICAgIEVuY29kZWREYXRhKFNpZ24sIEZvcm1hdENsYXNzKTsKKyAgICAgICAgRm9ybWF0
Q2xhc3MgZm9ybWF0Q2xhc3MoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdENsYXNzOyB9CisKKyAg
ICAgICAgdWludDY0X3QgbV9jb2VmZmljaWVudDsKKyAgICAgICAgaW50MTZfdCBtX2V4cG9uZW50
OworICAgICAgICBGb3JtYXRDbGFzcyBtX2Zvcm1hdENsYXNzOworICAgICAgICBTaWduIG1fc2ln
bjsKKyAgICB9OworCisgICAgRGVjaW1hbChpbnQzMl90ID0gMCk7CisgICAgRGVjaW1hbChTaWdu
LCBpbnQgZXhwb25lbnQsIHVpbnQ2NF90IGNvZWZmaWNpZW50KTsKKyAgICBEZWNpbWFsKGNvbnN0
IERlY2ltYWwmKTsKKworICAgIERlY2ltYWwmIG9wZXJhdG9yPShjb25zdCBEZWNpbWFsJik7Cisg
ICAgRGVjaW1hbCYgb3BlcmF0b3IrPShjb25zdCBEZWNpbWFsJik7CisgICAgRGVjaW1hbCYgb3Bl
cmF0b3ItPShjb25zdCBEZWNpbWFsJik7CisgICAgRGVjaW1hbCYgb3BlcmF0b3IqPShjb25zdCBE
ZWNpbWFsJik7CisgICAgRGVjaW1hbCYgb3BlcmF0b3IvPShjb25zdCBEZWNpbWFsJik7CisKKyAg
ICBEZWNpbWFsIG9wZXJhdG9yLSgpIGNvbnN0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVjaW1hbCYpIGNv
bnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29s
IG9wZXJhdG9yPD0oY29uc3QgRGVjaW1hbCYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgRGVjaW1hbCYp
IGNvbnN0OworCisgICAgRGVjaW1hbCBvcGVyYXRvcisoY29uc3QgRGVjaW1hbCYpIGNvbnN0Owor
ICAgIERlY2ltYWwgb3BlcmF0b3ItKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFs
IG9wZXJhdG9yKihjb25zdCBEZWNpbWFsJikgY29uc3Q7CisgICAgRGVjaW1hbCBvcGVyYXRvci8o
Y29uc3QgRGVjaW1hbCYpIGNvbnN0OworCisgICAgaW50IGV4cG9uZW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0Zpbml0ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5leHBv
bmVudCgpOworICAgIH0KKworICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEuaXNGaW5pdGUoKTsgfQorICAgIGJvb2wgaXNOYU4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
aXNOYU4oKTsgfQorICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHNpZ24oKSA9
PSBOZWdhdGl2ZTsgfQorICAgIGJvb2wgaXNQb3NpdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHNpZ24o
KSA9PSBQb3NpdGl2ZTsgfQorICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmlzU3BlY2lhbCgpOyB9CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEuaXNaZXJvKCk7IH0KKworICAgIERlY2ltYWwgYWJzKCkgY29uc3Q7CisgICAgRGVjaW1hbCBj
ZWlsaW5nKCkgY29uc3Q7CisgICAgRGVjaW1hbCBmbG9vcigpIGNvbnN0OworICAgIERlY2ltYWwg
cmVtYWluZGVyKGNvbnN0IERlY2ltYWwmKSBjb25zdDsKKyAgICBEZWNpbWFsIHJvdW5kKCkgY29u
c3Q7CisKKyAgICAvLyBOb3RlOiB0b1N0cmluZyBtZXRob2Qgc3VwcG9ydHMgaW5maW5pdHkgYW5k
IG5hbiBidXQgZnJvbVN0cmluZyBub3QuCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisK
KyAgICAvLyBmcm9tU3RyaW5nIHN1cHBvcnRzIGZvbGxvd2luZyBzeW50YXggRUJORjoKKyAgICAv
LyAgbnVtYmVyIDo6PSBzaWduPyBkaWdpdCsgKCcuJyBkaWdpdCopIChleHBvbmVudC1tYXJrZXIg
c2lnbj8gZGlnaXQrKT8KKyAgICAvLyAgICAgICAgICB8IHNpZ24/ICcuJyBkaWdpdCsgKGV4cG9u
ZW50LW1hcmtlciBzaWduPyBkaWdpdCspPworICAgIC8vICBzaWduIDo6PSAnKycgfCAnLScKKyAg
ICAvLyAgZXhwb25lbnQtbWFya2VyIDo6PSAnZScgfCAnRScKKyAgICAvLyAgZGlnaXQgOjo9ICcw
JyB8ICcxJyB8IC4uLiB8ICc5JworICAgIC8vIE5vdGU6IGZyb21TdHJpbmcgZG9lc24ndCBzdXBw
b3J0ICJpbmZpbml0eSIgYW5kICJuYW4iLgorICAgIHN0YXRpYyBEZWNpbWFsIGZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIERlY2ltYWwgaW5maW5pdHkoU2lnbik7CisgICAg
c3RhdGljIERlY2ltYWwgbmFuKCk7CisgICAgc3RhdGljIERlY2ltYWwgemVybyhTaWduKTsKKwor
ICAgIC8vIFlvdSBzaG91bGQgbm90IHVzZSBiZWxvdyBtZXRob2RzLiBXZSBleHBvc2UgdGhlbSBm
b3IgdW5pdCB0ZXN0aW5nLgorICAgIGV4cGxpY2l0IERlY2ltYWwoY29uc3QgRW5jb2RlZERhdGEm
KTsKKyAgICBjb25zdCBFbmNvZGVkRGF0YSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQWxpZ25lZE9wZXJhbmRzIHsKKyAgICAgICAgdWlu
dDY0X3QgbGhzQ29lZmZpY2llbnQ7CisgICAgICAgIHVpbnQ2NF90IHJoc0NvZWZmaWNpZW50Owor
ICAgICAgICBpbnQgZXhwb25lbnQ7CisgICAgfTsKKworICAgIERlY2ltYWwoZG91YmxlKTsKKyAg
ICBEZWNpbWFsIGNvbXBhcmVUbyhjb25zdCBEZWNpbWFsJikgY29uc3Q7CisKKyAgICBzdGF0aWMg
QWxpZ25lZE9wZXJhbmRzIGFsaWduT3BlcmFuZHMoY29uc3QgRGVjaW1hbCYgbGhzLCBjb25zdCBE
ZWNpbWFsJiByaHMpOworICAgIHN0YXRpYyBpbmxpbmUgU2lnbiBpbnZlcnRTaWduKFNpZ24gc2ln
bikgeyByZXR1cm4gc2lnbiA9PSBOZWdhdGl2ZSA/IFBvc2l0aXZlIDogTmVnYXRpdmU7IH0KKwor
ICAgIFNpZ24gc2lnbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaWduKCk7IH0KKworICAgIEVu
Y29kZWREYXRhIG1fZGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIERlY2ltYWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMWE2ODhiYmNj
YzJiYWI4ZDA3Y2ZjZTUzOGZkYzU3MDBkMzRlYjJiOS4uMzBjNTMxM2MyMzEzMTViMzQ1Yjc4NWIx
NmY1YjAzZjNkMDE1MWI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC05NSw2
ICs5NSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ2xpcGJvYXJkQ2hyb21pdW1UZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oJywK
ICAgICAgICAgICAgICd0ZXN0cy9Db21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgn
LAorICAgICAgICAgICAgJ3Rlc3RzL0RlY2ltYWxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYXdpbmdCdWZmZXJD
aHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWNpbWFsVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlY2ltYWxUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yMDgyZWQ5MTljNTc0MjIwYmIwNGYyMjMyYWY5NmI5MWUwYjM5YTBiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWNpbWFsVGVzdC5jcHAK
QEAgLTAsMCArMSw5NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVjaW1hbC5o
IgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgRGVjaW1h
bCYgZGVjaW1hbCkKK3sKKyAgICBEZWNpbWFsOjpFbmNvZGVkRGF0YSBkYXRhID0gZGVjaW1hbC52
YWx1ZSgpOworICAgIHJldHVybiBvcyAKKyAgICAgICAgPDwgImVuY29kZSgiIDw8IFN0cmluZzo6
bnVtYmVyKGRhdGEuY29lZmZpY2llbnQoKSkuYXNjaWkoKS5kYXRhKCkKKyAgICAgICAgPDwgIiwg
IiA8PCBTdHJpbmc6Om51bWJlcihkYXRhLmV4cG9uZW50KCkpLmFzY2lpKCkuZGF0YSgpCisgICAg
ICAgIDw8ICIsICIgPDwgKGRhdGEuc2lnbigpID09IERlY2ltYWw6Ok5lZ2F0aXZlID8gIk5lZ2F0
aXZlIiA6ICJQb3NpdGl2ZSIpCisgICAgICAgIDw8ICIpPSIgPDwgZGVjaW1hbC50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCisvLyBTaW11bGF0ZSBXZWJDb3JlL2h0bWwvU3RlcFJhbmdlCitj
bGFzcyBEZWNpbWFsU3RlcFJhbmdlIHsKK3B1YmxpYzoKKyAgICBEZWNpbWFsIG1heGltdW07Cisg
ICAgRGVjaW1hbCBtaW5pbXVtOworICAgIERlY2ltYWwgc3RlcDsKKworICAgIERlY2ltYWxTdGVw
UmFuZ2UoY29uc3QgRGVjaW1hbCYgbWluaW11bSwgY29uc3QgRGVjaW1hbCYgbWF4aW11bSwgY29u
c3QgRGVjaW1hbCYgc3RlcCkKKyAgICAgICAgOiBtYXhpbXVtKG1heGltdW0pCisgICAgICAgICwg
bWluaW11bShtaW5pbXVtKQorICAgICAgICAsIHN0ZXAoc3RlcCkKKyAgICB7CisgICAgfQorCisg
ICAgRGVjaW1hbCBjbGFtcFZhbHVlKERlY2ltYWwgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAg
ICBjb25zdCBEZWNpbWFsIHJlc3VsdCA9IG1pbmltdW0gKyAoKHZhbHVlIC0gbWluaW11bSkgLyBz
dGVwKS5yb3VuZCgpICogc3RlcDsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0Zpbml0ZSgpKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdCA+IG1heGltdW0gPyByZXN1bHQgLSBzdGVwIDogcmVzdWx0
OworICAgIH0KK307CisKK2NsYXNzIERlY2ltYWxUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVz
dCB7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBEZWNpbWFsOjpTaWduIFNpZ247CisgICAgcHJv
dGVjdGVkOiBzdGF0aWMgY29uc3QgU2lnbiBQb3NpdGl2ZSA9IERlY2ltYWw6OlBvc2l0aXZlOwor
ICAgIHByb3RlY3RlZDogc3RhdGljIGNvbnN0IFNpZ24gTmVnYXRpdmUgPSBEZWNpbWFsOjpOZWdh
dGl2ZTsKKworICAgIERlY2ltYWwgZW5jb2RlKHVpbnQ2NF90IGNvZWZmaWNpZW50LCBpbnQgZXhw
b25lbnQsIFNpZ24gc2lnbikKKyAgICB7CisgICAgICAgIHJldHVybiBEZWNpbWFsKHNpZ24sIGV4
cG9uZW50LCBjb2VmZmljaWVudCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkOiBEZWNpbWFsIGZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gRGVj
aW1hbDo6ZnJvbVN0cmluZyhzdHJpbmcpOworICAgIH0KKworICAgIHByb3RlY3RlZDogU3RyaW5n
IHN0ZXBEb3duKGNvbnN0IFN0cmluZyYgbWluaW11bSwgY29uc3QgU3RyaW5nJiBtYXhpbXVtLCBj
b25zdCBTdHJpbmcmIHN0ZXAsIGNvbnN0IFN0cmluZyYgdmFsdWVTdHJpbmcsIGludCBudW1iZXJP
ZlN0ZXBUaW1lcykKKyAgICB7CisgICAgICAgIERlY2ltYWxTdGVwUmFuZ2Ugc3RlcFJhbmdlKGZy
b21TdHJpbmcobWluaW11bSksIGZyb21TdHJpbmcobWF4aW11bSksIGZyb21TdHJpbmcoc3RlcCkp
OworICAgICAgICBEZWNpbWFsIHZhbHVlID0gZnJvbVN0cmluZyh2YWx1ZVN0cmluZyk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGVwVGltZXM7ICsraSkgeworICAgICAg
ICAgICAgdmFsdWUgLT0gc3RlcFJhbmdlLnN0ZXA7CisgICAgICAgICAgICB2YWx1ZSA9IHN0ZXBS
YW5nZS5jbGFtcFZhbHVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUu
dG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQ6IFN0cmluZyBzdGVwVXAoY29uc3Qg
U3RyaW5nJiBtaW5pbXVtLCBjb25zdCBTdHJpbmcmIG1heGltdW0sIGNvbnN0IFN0cmluZyYgc3Rl
cCwgY29uc3QgU3RyaW5nJiB2YWx1ZVN0cmluZywgaW50IG51bWJlck9mU3RlcFRpbWVzKQorICAg
IHsKKyAgICAgICAgRGVjaW1hbFN0ZXBSYW5nZSBzdGVwUmFuZ2UoZnJvbVN0cmluZyhtaW5pbXVt
KSwgZnJvbVN0cmluZyhtYXhpbXVtKSwgZnJvbVN0cmluZyhzdGVwKSk7CisgICAgICAgIERlY2lt
YWwgdmFsdWUgPSBmcm9tU3RyaW5nKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1iZXJPZlN0ZXBUaW1lczsgKytpKSB7CisgICAgICAgICAgICB2YWx1ZSArPSBz
dGVwUmFuZ2Uuc3RlcDsKKyAgICAgICAgICAgIHZhbHVlID0gc3RlcFJhbmdlLmNsYW1wVmFsdWUo
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOworICAg
IH0KK307CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQWJzKQoreworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZW5jb2RlKDAsIDAsIE5lZ2F0aXZlKS5h
YnMoKSk7CisKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDEwLCBQb3NpdGl2ZSksIGVuY29kZSgw
LCAxMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDEwLCBQb3Np
dGl2ZSksIGVuY29kZSgwLCAxMCwgTmVnYXRpdmUpLmFicygpKTsKKworICAgIEVYUEVDVF9FUShl
bmNvZGUoMCwgLTEwLCBQb3NpdGl2ZSksIGVuY29kZSgwLCAtMTAsIFBvc2l0aXZlKS5hYnMoKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAtMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDAsIC0xMCwg
TmVnYXRpdmUpLmFicygpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgUG9zaXRpdmUp
LCBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpLmFicygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEs
IDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDAsIE5lZ2F0aXZlKS5hYnMoKSk7CisKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMCwgUG9zaXRpdmUpLmFi
cygpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAx
MCwgTmVnYXRpdmUpLmFicygpKTsKKworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEwLCBQb3Np
dGl2ZSksIGVuY29kZSgxLCAtMTAsIFBvc2l0aXZlKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgxLCAtMTAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMCwgTmVnYXRpdmUpLmFicygpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBBYnNCaWdFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKS5h
YnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSksIGVuY29kZSgx
LCAxMDAwLCBOZWdhdGl2ZSkuYWJzKCkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEFic1Nt
YWxsRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUp
LCBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxLCAtMTAwMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKS5hYnMoKSk7
Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQWJzU3BlY2lhbFZhbHVlcykKK3sKKyAgICBFWFBF
Q1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShQb3Np
dGl2ZSkuYWJzKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSks
IERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5hYnMoKSk7CisgICAgRVhQRUNUX0VRKERlY2lt
YWw6Om5hbigpLCBEZWNpbWFsOjpuYW4oKS5hYnMoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVz
dCwgQWRkKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFs
KDApICsgRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoMikg
KyBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwoLTEpICsg
RGVjaW1hbCgyKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIFBvc2l0aXZlKSwgRGVj
aW1hbCg5OSkgKyBEZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgTmVn
YXRpdmUpLCBEZWNpbWFsKC01MCkgKyBEZWNpbWFsKC01MCkpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoVUlOVDY0X0MoMTAwMDAwMDAwMDAwMDAwMCksIDM1LCBQb3NpdGl2ZSksIGVuY29kZSgxLCA1
MCwgUG9zaXRpdmUpICsgRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZShVSU5UNjRf
QygxMDAwMDAwMDAwMDAwMDAwKSwgMzUsIFBvc2l0aXZlKSwgRGVjaW1hbCgxKSArIGVuY29kZSgx
LCA1MCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKFVJTlQ2NF9DKDEwMDAwMDAw
MDAxKSwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKSArIERlY2ltYWwoMSkp
OworICAgIEVYUEVDVF9FUShlbmNvZGUoVUlOVDY0X0MoMTAwMDAwMDAwMDEpLCAwLCBQb3NpdGl2
ZSksIERlY2ltYWwoMSkgKyBlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VR
KGVuY29kZSgxLCAwLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpICsgZW5j
b2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyLCAtMTAyMiwgUG9z
aXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAtMTAyMiwgUG9z
aXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBBZGRCaWdFeHBvbmVudCkKK3sKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBv
c2l0aXZlKSArIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUo
MiwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpICsgZW5jb2RlKDEs
IDEwMjIsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0
aXZlKSwgZW5jb2RlKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSwgMTAyMiwg
UG9zaXRpdmUpICsgZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgxLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUo
MSwgLTEwMDAsIFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQWRkU21hbGxF
eHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSwgZW5jb2Rl
KDEsIC0xMDIyLCBQb3NpdGl2ZSkgKyBlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDIsIC0xMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRp
dmUpICsgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRl
c3QsIEFkZFNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29uc3QgRGVjaW1hbCBJbmZpbml0eShEZWNp
bWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWludXNJbmZpbml0
eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTmFOKERl
Y2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigxMCk7CisKKyAgICBFWFBFQ1Rf
RVEoSW5maW5pdHksIEluZmluaXR5ICsgSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIElu
ZmluaXR5ICsgTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0
eSArIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZpbml0
eSArIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSAr
IFRlbik7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBUZW4gKyBJbmZpbml0eSk7CisgICAgRVhQ
RUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzSW5maW5pdHkgKyBUZW4pOworICAgIEVYUEVDVF9F
UShNaW51c0luZmluaXR5LCBUZW4gKyBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShO
YU4sIE5hTiArIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOICsgVGVuKTsKKyAgICBFWFBF
Q1RfRVEoTmFOLCBUZW4gKyBOYU4pOworCisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC0gSW5maW5p
dHkpOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAtIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVD
VF9FUShOYU4sIEluZmluaXR5IC0gTmFOKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmlu
aXR5IC0gTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDZWlsaW5nKQoreworICAgIEVY
UEVDVF9FUShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VR
KERlY2ltYWwoMiksIGVuY29kZSgxMSwgLTEsIFBvc2l0aXZlKS5jZWlsaW5nKCkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsKDIpLCBlbmNvZGUoMTMsIC0xLCBQb3NpdGl2ZSkuY2VpbGluZygpKTsK
KyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgyKSwgZW5jb2RlKDE1LCAtMSwgUG9zaXRpdmUpLmNlaWxp
bmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMiksIGVuY29kZSgxOSwgLTEsIFBvc2l0aXZl
KS5jZWlsaW5nKCkpOworCisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBEZWNpbWFsKC0xKS5j
ZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKC0xKSwgZW5jb2RlKDExLCAtMSwgTmVn
YXRpdmUpLmNlaWxpbmcoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTEpLCBlbmNvZGUoMTMs
IC0xLCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgtMSksIGVu
Y29kZSgxNSwgLTEsIE5lZ2F0aXZlKS5jZWlsaW5nKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFs
KC0xKSwgZW5jb2RlKDE5LCAtMSwgTmVnYXRpdmUpLmNlaWxpbmcoKSk7Cit9CisKK1RFU1RfRihE
ZWNpbWFsVGVzdCwgQ2VpbGluZ0JpZ0V4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUo
MSwgMTAwMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpLmNlaWxpbmcoKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSksIGVuY29kZSgxLCAxMDAw
LCBOZWdhdGl2ZSkuY2VpbGluZygpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDZWlsaW5n
U21hbGxFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwg
ZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoZW5j
b2RlKDAsIDAsIE5lZ2F0aXZlKSwgZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkuY2VpbGluZygp
KTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBDZWlsaW5nU3BlY2lhbFZhbHVlcykKK3sKKyAg
ICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBEZWNpbWFsOjppbmZpbml0
eShQb3NpdGl2ZSkuY2VpbGluZygpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHko
TmVnYXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuY2VpbGluZygpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWw6Om5hbigpLmNlaWxpbmcoKSk7Cit9CisK
K1RFU1RfRihEZWNpbWFsVGVzdCwgQ29tcGFyZSkKK3sKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFs
KDApID09IERlY2ltYWwoMCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMCkgIT0gRGVjaW1h
bCgxKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgwKSA8IERlY2ltYWwoMSkpOworICAgIEVY
UEVDVF9UUlVFKERlY2ltYWwoMCkgPD0gRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX1RSVUUoRGVj
aW1hbCgwKSA+IERlY2ltYWwoLTEpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsKDApID49IERl
Y2ltYWwoMCkpOworCisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgPT0gRGVjaW1hbCgyKSk7
CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMSkgIT0gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNU
X0ZBTFNFKERlY2ltYWwoMSkgPCBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1h
bCgxKSA8PSBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgxKSA+IERlY2lt
YWwoMikpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKDEpID49IERlY2ltYWwoMikpOworfQor
CitURVNUX0YoRGVjaW1hbFRlc3QsIENvbXBhcmVCaWdFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1Rf
VFJVRShlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpID09IGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2
ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpICE9IGVuY29k
ZSgxLCAxMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgMTAwMCwg
UG9zaXRpdmUpIDwgZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUo
ZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSA8PSBlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSA+IGVuY29kZSgxLCAx
MDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2
ZSkgPj0gZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisKKyAgICBFWFBFQ1RfVFJVRShlbmNv
ZGUoMSwgMTAwMCwgTmVnYXRpdmUpID09IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkpOworICAg
IEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpICE9IGVuY29kZSgxLCAxMDAw
LCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUp
IDwgZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDEs
IDEwMDAsIE5lZ2F0aXZlKSA8PSBlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSA+IGVuY29kZSgxLCAxMDAwLCBOZWdh
dGl2ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkgPj0gZW5j
b2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDIsIDEw
MDAsIFBvc2l0aXZlKSA9PSBlbmNvZGUoMSwgMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1Rf
VFJVRShlbmNvZGUoMiwgMTAwMCwgUG9zaXRpdmUpICE9IGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2
ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwgMTAwMCwgUG9zaXRpdmUpIDwgZW5jb2Rl
KDEsIDEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAxMDAwLCBQ
b3NpdGl2ZSkgPD0gZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUo
ZW5jb2RlKDIsIDEwMDAsIFBvc2l0aXZlKSA+IGVuY29kZSgxLCAxMDAwLCBQb3NpdGl2ZSkpOwor
ICAgIEVYUEVDVF9UUlVFKGVuY29kZSgyLCAxMDAwLCBQb3NpdGl2ZSkgPj0gZW5jb2RlKDEsIDEw
MDAsIFBvc2l0aXZlKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDIsIDEwMDAsIE5lZ2F0
aXZlKSA9PSBlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNv
ZGUoMiwgMTAwMCwgTmVnYXRpdmUpICE9IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkpOworICAg
IEVYUEVDVF9UUlVFKGVuY29kZSgyLCAxMDAwLCBOZWdhdGl2ZSkgPCBlbmNvZGUoMSwgMTAwMCwg
TmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMiwgMTAwMCwgTmVnYXRpdmUpIDw9
IGVuY29kZSgxLCAxMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwg
MTAwMCwgTmVnYXRpdmUpID4gZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGVuY29kZSgyLCAxMDAwLCBOZWdhdGl2ZSkgPj0gZW5jb2RlKDEsIDEwMDAsIE5lZ2F0
aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgQ29tcGFyZVNtYWxsRXhwb25lbnQpCit7
CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkgPT0gZW5jb2RlKDEs
IC0xMDAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgLTEwMDAsIFBv
c2l0aXZlKSAhPSBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0ZBTFNF
KGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpIDwgZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkp
OworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpIDw9IGVuY29kZSgx
LCAtMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIC0xMDAwLCBQ
b3NpdGl2ZSkgPiBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUo
ZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkgPj0gZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkp
OworCisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkgPT0gZW5jb2Rl
KDEsIC0xMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMSwgLTEwMDAs
IE5lZ2F0aXZlKSAhPSBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpIDwgZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2
ZSkpOworICAgIEVYUEVDVF9UUlVFKGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpIDw9IGVuY29k
ZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZW5jb2RlKDEsIC0xMDAw
LCBOZWdhdGl2ZSkgPiBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX1RS
VUUoZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkgPj0gZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2
ZSkpOworCisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAtMTAwMCwgUG9zaXRpdmUpID09IGVu
Y29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMiwgLTEw
MDAsIFBvc2l0aXZlKSAhPSBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGVuY29kZSgyLCAtMTAwMCwgUG9zaXRpdmUpIDwgZW5jb2RlKDEsIC0xMDAwLCBQb3Np
dGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwgLTEwMDAsIFBvc2l0aXZlKSA8PSBl
bmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDIsIC0x
MDAwLCBQb3NpdGl2ZSkgPiBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNU
X1RSVUUoZW5jb2RlKDIsIC0xMDAwLCBQb3NpdGl2ZSkgPj0gZW5jb2RlKDEsIC0xMDAwLCBQb3Np
dGl2ZSkpOworCisgICAgRVhQRUNUX0ZBTFNFKGVuY29kZSgyLCAtMTAwMCwgTmVnYXRpdmUpID09
IGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRShlbmNvZGUoMiwg
LTEwMDAsIE5lZ2F0aXZlKSAhPSBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQ
RUNUX1RSVUUoZW5jb2RlKDIsIC0xMDAwLCBOZWdhdGl2ZSkgPCBlbmNvZGUoMSwgLTEwMDAsIE5l
Z2F0aXZlKSk7CisgICAgRVhQRUNUX1RSVUUoZW5jb2RlKDIsIC0xMDAwLCBOZWdhdGl2ZSkgPD0g
ZW5jb2RlKDEsIC0xMDAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9GQUxTRShlbmNvZGUoMiwg
LTEwMDAsIE5lZ2F0aXZlKSA+IGVuY29kZSgxLCAtMTAwMCwgTmVnYXRpdmUpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoZW5jb2RlKDIsIC0xMDAwLCBOZWdhdGl2ZSkgPj0gZW5jb2RlKDEsIC0xMDAwLCBO
ZWdhdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIENvbXBhcmVTcGVjaWFsVmFsdWVz
KQoreworICAgIGNvbnN0IERlY2ltYWwgSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRp
dmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHko
TmVnYXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAg
Y29uc3QgRGVjaW1hbCBaZXJvKERlY2ltYWw6Onplcm8oUG9zaXRpdmUpKTsKKyAgICBjb25zdCBE
ZWNpbWFsIE1pbnVzWmVybyhEZWNpbWFsOjp6ZXJvKE5lZ2F0aXZlKSk7CisgICAgY29uc3QgRGVj
aW1hbCBUZW4oMTApOworCisgICAgRVhQRUNUX1RSVUUoWmVybyA9PSBaZXJvKTsKKyAgICBFWFBF
Q1RfRkFMU0UoWmVybyAhPSBaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoWmVybyA8IFplcm8pOwor
ICAgIEVYUEVDVF9UUlVFKFplcm8gPD0gWmVybyk7CisgICAgRVhQRUNUX0ZBTFNFKFplcm8gPiBa
ZXJvKTsKKyAgICBFWFBFQ1RfVFJVRShaZXJvID49IFplcm8pOworCisgICAgRVhQRUNUX1RSVUUo
WmVybyA9PSBNaW51c1plcm8pOworICAgIEVYUEVDVF9GQUxTRShaZXJvICE9IE1pbnVzWmVybyk7
CisgICAgRVhQRUNUX0ZBTFNFKFplcm8gPCBNaW51c1plcm8pOworICAgIEVYUEVDVF9UUlVFKFpl
cm8gPD0gTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoWmVybyA+IE1pbnVzWmVybyk7Cisg
ICAgRVhQRUNUX1RSVUUoWmVybyA+PSBNaW51c1plcm8pOworCisgICAgRVhQRUNUX1RSVUUoTWlu
dXNaZXJvID09IFplcm8pOworICAgIEVYUEVDVF9GQUxTRShNaW51c1plcm8gIT0gWmVybyk7Cisg
ICAgRVhQRUNUX0ZBTFNFKE1pbnVzWmVybyA8IFplcm8pOworICAgIEVYUEVDVF9UUlVFKE1pbnVz
WmVybyA8PSBaZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNaZXJvID4gWmVybyk7CisgICAg
RVhQRUNUX1RSVUUoTWludXNaZXJvID49IFplcm8pOworCisgICAgRVhQRUNUX1RSVUUoTWludXNa
ZXJvID09IE1pbnVzWmVybyk7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzWmVybyAhPSBNaW51c1pl
cm8pOworICAgIEVYUEVDVF9GQUxTRShNaW51c1plcm8gPCBNaW51c1plcm8pOworICAgIEVYUEVD
VF9UUlVFKE1pbnVzWmVybyA8PSBNaW51c1plcm8pOworICAgIEVYUEVDVF9GQUxTRShNaW51c1pl
cm8gPiBNaW51c1plcm8pOworICAgIEVYUEVDVF9UUlVFKE1pbnVzWmVybyA+PSBNaW51c1plcm8p
OworCisgICAgRVhQRUNUX1RSVUUoSW5maW5pdHkgPT0gSW5maW5pdHkpOworICAgIEVYUEVDVF9G
QUxTRShJbmZpbml0eSAhPSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5IDwg
SW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKEluZmluaXR5IDw9IEluZmluaXR5KTsKKyAgICBF
WFBFQ1RfRkFMU0UoSW5maW5pdHkgPiBJbmZpbml0eSk7CisgICAgRVhQRUNUX1RSVUUoSW5maW5p
dHkgPj0gSW5maW5pdHkpOworCisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5ID09IFRlbik7Cisg
ICAgRVhQRUNUX1RSVUUoSW5maW5pdHkgIT0gVGVuKTsKKyAgICBFWFBFQ1RfRkFMU0UoSW5maW5p
dHkgPCBUZW4pOworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0eSA8PSBUZW4pOworICAgIEVYUEVD
VF9UUlVFKEluZmluaXR5ID4gVGVuKTsKKyAgICBFWFBFQ1RfVFJVRShJbmZpbml0eSA+PSBUZW4p
OworCisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5ID09IE1pbnVzSW5maW5pdHkpOworICAgIEVY
UEVDVF9UUlVFKEluZmluaXR5ICE9IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShJ
bmZpbml0eSA8IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShJbmZpbml0eSA8PSBN
aW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShJbmZpbml0eSA+IE1pbnVzSW5maW5pdHkp
OworICAgIEVYUEVDVF9UUlVFKEluZmluaXR5ID49IE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQ
RUNUX0ZBTFNFKEluZmluaXR5ID09IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5ICE9
IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKEluZmluaXR5IDwgTmFOKTsKKyAgICBFWFBFQ1RfRkFM
U0UoSW5maW5pdHkgPD0gTmFOKTsKKyAgICBFWFBFQ1RfRkFMU0UoSW5maW5pdHkgPiBOYU4pOwor
ICAgIEVYUEVDVF9GQUxTRShJbmZpbml0eSA+PSBOYU4pOworCisgICAgRVhQRUNUX0ZBTFNFKE1p
bnVzSW5maW5pdHkgPT0gSW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKE1pbnVzSW5maW5pdHkg
IT0gSW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKE1pbnVzSW5maW5pdHkgPCBJbmZpbml0eSk7
CisgICAgRVhQRUNUX1RSVUUoTWludXNJbmZpbml0eSA8PSBJbmZpbml0eSk7CisgICAgRVhQRUNU
X0ZBTFNFKE1pbnVzSW5maW5pdHkgPiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVz
SW5maW5pdHkgPj0gSW5maW5pdHkpOworCisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5maW5pdHkg
PT0gVGVuKTsKKyAgICBFWFBFQ1RfVFJVRShNaW51c0luZmluaXR5ICE9IFRlbik7CisgICAgRVhQ
RUNUX1RSVUUoTWludXNJbmZpbml0eSA8IFRlbik7CisgICAgRVhQRUNUX1RSVUUoTWludXNJbmZp
bml0eSA8PSBUZW4pOworICAgIEVYUEVDVF9GQUxTRShNaW51c0luZmluaXR5ID4gVGVuKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoTWludXNJbmZpbml0eSA+PSBUZW4pOworCisgICAgRVhQRUNUX1RSVUUo
TWludXNJbmZpbml0eSA9PSBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNJ
bmZpbml0eSAhPSBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNJbmZpbml0
eSA8IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9UUlVFKE1pbnVzSW5maW5pdHkgPD0gTWlu
dXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5maW5pdHkgPiBNaW51c0luZmlu
aXR5KTsKKyAgICBFWFBFQ1RfVFJVRShNaW51c0luZmluaXR5ID49IE1pbnVzSW5maW5pdHkpOwor
CisgICAgRVhQRUNUX0ZBTFNFKE1pbnVzSW5maW5pdHkgPT0gTmFOKTsKKyAgICBFWFBFQ1RfRkFM
U0UoTWludXNJbmZpbml0eSAhPSBOYU4pOworICAgIEVYUEVDVF9GQUxTRShNaW51c0luZmluaXR5
IDwgTmFOKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNJbmZpbml0eSA8PSBOYU4pOworICAgIEVY
UEVDVF9GQUxTRShNaW51c0luZmluaXR5ID4gTmFOKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWludXNJ
bmZpbml0eSA+PSBOYU4pOworCisgICAgRVhQRUNUX0ZBTFNFKE5hTiA9PSBJbmZpbml0eSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKE5hTiAhPSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiA8
IEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOIDw9IEluZmluaXR5KTsKKyAgICBFWFBF
Q1RfRkFMU0UoTmFOID4gSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShOYU4gPj0gSW5maW5p
dHkpOworCisgICAgRVhQRUNUX0ZBTFNFKE5hTiA9PSBUZW4pOworICAgIEVYUEVDVF9GQUxTRShO
YU4gIT0gVGVuKTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOIDwgVGVuKTsKKyAgICBFWFBFQ1RfRkFM
U0UoTmFOIDw9IFRlbik7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiA+IFRlbik7CisgICAgRVhQRUNU
X0ZBTFNFKE5hTiA+PSBUZW4pOworCisgICAgRVhQRUNUX0ZBTFNFKE5hTiA9PSBNaW51c0luZmlu
aXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOICE9IE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVD
VF9GQUxTRShOYU4gPCBNaW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRkFMU0UoTmFOIDw9IE1p
bnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9GQUxTRShOYU4gPiBNaW51c0luZmluaXR5KTsKKyAg
ICBFWFBFQ1RfRkFMU0UoTmFOID49IE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX1RSVUUo
TmFOID09IE5hTik7CisgICAgRVhQRUNUX0ZBTFNFKE5hTiAhPSBOYU4pOworICAgIEVYUEVDVF9G
QUxTRShOYU4gPCBOYU4pOworICAgIEVYUEVDVF9UUlVFKE5hTiA8PSBOYU4pOworICAgIEVYUEVD
VF9GQUxTRShOYU4gPiBOYU4pOworICAgIEVYUEVDVF9UUlVFKE5hTiA+PSBOYU4pOworfQorCitU
RVNUX0YoRGVjaW1hbFRlc3QsIERpdmlzaW9uKQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwg
MCwgUG9zaXRpdmUpLCBEZWNpbWFsKDApIC8gRGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVu
Y29kZSgyLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoMikgLyBEZWNpbWFsKC0xKSk7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSg1LCAtMSwgTmVnYXRpdmUpLCBEZWNpbWFsKC0xKSAvIERlY2ltYWwoMikp
OworICAgIEVYUEVDVF9FUShlbmNvZGUoOTksIDAsIFBvc2l0aXZlKSwgRGVjaW1hbCg5OSkgLyBE
ZWNpbWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgRGVjaW1hbCgtNTApIC8gRGVj
aW1hbCgtNTApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKFVJTlQ2NF9DKDMzMzMzMzMzMzMzMzMz
MzMpLCAtMTYsIFBvc2l0aXZlKSwgRGVjaW1hbCgxKSAvIERlY2ltYWwoMykpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoVUlOVDY0X0MoMTIzNDU2Nzg5MDEyMzQpLCAtMSwgUG9zaXRpdmUpLCBlbmNv
ZGUoMTIzNDU2Nzg5MDEyMzQsIDAsIFBvc2l0aXZlKSAvIERlY2ltYWwoMTApKTsKK30KKworVEVT
VF9GKERlY2ltYWxUZXN0LCBEaXZpc2lvbkJpZ0V4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShl
bmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpIC8gZW5j
b2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3NpdGl2
ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgLyBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBlbmNvZGUoMSwg
MTAyMiwgUG9zaXRpdmUpIC8gZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSkpOworfQorCitURVNU
X0YoRGVjaW1hbFRlc3QsIERpdmlzaW9uU21hbGxFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpIC8g
ZW5jb2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3Np
dGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpIC8gZW5jb2RlKDEsIC0xMDIyLCBQb3Np
dGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIERpdmlzaW9uU3BlY2lhbFZhbHVlcykK
K3sKKyAgICBjb25zdCBEZWNpbWFsIEluZmluaXR5KERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZl
KSk7CisgICAgY29uc3QgRGVjaW1hbCBNaW51c0luZmluaXR5KERlY2ltYWw6OmluZmluaXR5KE5l
Z2F0aXZlKSk7CisgICAgY29uc3QgRGVjaW1hbCBOYU4oRGVjaW1hbDo6bmFuKCkpOworICAgIGNv
bnN0IERlY2ltYWwgWmVybyhEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKSk7CisgICAgY29uc3QgRGVj
aW1hbCBNaW51c1plcm8oRGVjaW1hbDo6emVybyhOZWdhdGl2ZSkpOworICAgIGNvbnN0IERlY2lt
YWwgVGVuKDEwKTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzVGVuKC0xMCk7CisKKyAgICBFWFBF
Q1RfRVEoTmFOLCBaZXJvIC8gWmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgWmVybyAvIE1pbnVz
WmVybyk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNaZXJvIC8gWmVybyk7CisgICAgRVhQRUNU
X0VRKE5hTiwgTWludXNaZXJvIC8gTWludXNaZXJvKTsKKworICAgIEVYUEVDVF9FUShJbmZpbml0
eSwgVGVuIC8gWmVybyk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIFRlbiAvIE1pbnVz
WmVybyk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1pbnVzVGVuIC8gWmVybyk7Cisg
ICAgRVhQRUNUX0VRKEluZmluaXR5LCBNaW51c1RlbiAvIE1pbnVzWmVybyk7CisKKyAgICBFWFBF
Q1RfRVEoSW5maW5pdHksIEluZmluaXR5IC8gWmVybyk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5m
aW5pdHksIEluZmluaXR5IC8gTWludXNaZXJvKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0
eSwgTWludXNJbmZpbml0eSAvIFplcm8pOworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgTWludXNJ
bmZpbml0eSAvIE1pbnVzWmVybyk7CisKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAvIElu
ZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBJbmZpbml0eSAvIE1pbnVzSW5maW5pdHkpOwor
ICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgLyBJbmZpbml0eSk7CisgICAgRVhQRUNU
X0VRKE5hTiwgTWludXNJbmZpbml0eSAvIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VR
KFplcm8sIFRlbiAvIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNaZXJvLCBUZW4gLyBN
aW51c0luZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoTWludXNaZXJvLCBNaW51c1RlbiAvIEluZmlu
aXR5KTsKKyAgICBFWFBFQ1RfRVEoWmVybywgTWludXNUZW4gLyBNaW51c0luZmluaXR5KTsKKwor
ICAgIEVYUEVDVF9FUShOYU4sIE5hTiAvIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC8g
VGVuKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBUZW4gLyBOYU4pOworCisgICAgRVhQRUNUX0VRKE5h
TiwgTmFOIC8gSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAvIE1pbnVzSW5maW5p
dHkpOworICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5IC8gTmFOKTsKKyAgICBFWFBFQ1RfRVEo
TmFOLCBNaW51c0luZmluaXR5IC8gTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBFbmNv
ZGVkRGF0YSkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgZW5jb2Rl
KDAsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBOZWdhdGl2ZSks
IGVuY29kZSgwLCAwLCBOZWdhdGl2ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBEZWNp
bWFsKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIE5lZ2F0aXZlKSwgZW5jb2RlKDEs
IDAsIE5lZ2F0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZl
KSwgZW5jb2RlKDEsIDIwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Onpl
cm8oUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTIwMDAsIFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihE
ZWNpbWFsVGVzdCwgRmxvb3IpCit7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIERlY2ltYWwo
MSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIGVuY29kZSgxMSwgLTEsIFBv
c2l0aXZlKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZW5jb2RlKDEzLCAt
MSwgUG9zaXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBlbmNvZGUo
MTUsIC0xLCBQb3NpdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIGVu
Y29kZSgxOSwgLTEsIFBvc2l0aXZlKS5mbG9vcigpKTsKKworICAgIEVYUEVDVF9FUShEZWNpbWFs
KC0xKSwgRGVjaW1hbCgtMSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoLTIpLCBl
bmNvZGUoMTEsIC0xLCBOZWdhdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwo
LTIpLCBlbmNvZGUoMTMsIC0xLCBOZWdhdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWwoLTIpLCBlbmNvZGUoMTUsIC0xLCBOZWdhdGl2ZSkuZmxvb3IoKSk7CisgICAgRVhQRUNU
X0VRKERlY2ltYWwoLTIpLCBlbmNvZGUoMTksIC0xLCBOZWdhdGl2ZSkuZmxvb3IoKSk7Cit9CisK
K1RFU1RfRihEZWNpbWFsVGVzdCwgRmxvb3JCaWdFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKS5mbG9v
cigpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMDAsIE5lZ2F0aXZlKSwgZW5jb2RlKDEs
IDEwMDAsIE5lZ2F0aXZlKS5mbG9vcigpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBGbG9v
clNtYWxsRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSks
IGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMCwgMCwgTmVnYXRpdmUpLCBlbmNvZGUoMSwgLTEwMDAsIE5lZ2F0aXZlKS5mbG9vcigpKTsK
K30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBGbG9vclNwZWNpYWxWYWx1ZXMpCit7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoUG9z
aXRpdmUpLmZsb29yKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2
ZSksIERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5mbG9vcigpKTsKKyAgICBFWFBFQ1RfRVEo
RGVjaW1hbDo6bmFuKCksIERlY2ltYWw6Om5hbigpLmZsb29yKCkpOworfQorCitURVNUX0YoRGVj
aW1hbFRlc3QsIEZyb21JbnQzMikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0
aXZlKSwgRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBQb3NpdGl2ZSks
IERlY2ltYWwoMSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgTmVnYXRpdmUpLCBEZWNp
bWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIFBvc2l0aXZlKSwgRGVjaW1h
bCgxMDApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgTmVnYXRpdmUpLCBEZWNpbWFs
KC0xMDApKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDB4N0ZGRkZGRkYsIDAsIFBvc2l0aXZlKSwg
RGVjaW1hbChzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMHg4MDAwMDAwMHUsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbChzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIEZy
b21TdHJpbmcpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2ZSksIGZyb21T
dHJpbmcoIjAiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBOZWdhdGl2ZSksIGZyb21T
dHJpbmcoIi0wIikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEpLCBmcm9tU3RyaW5nKCIxIikp
OworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMCwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMSIp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgZnJvbVN0cmluZygiMDEiKSk7CisgICAgRVhQ
RUNUX0VRKGVuY29kZSgzLCAwLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIiszIikpOworICAgIEVY
UEVDVF9FUShlbmNvZGUoMCwgMywgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwRTMiKSk7CisgICAg
RVhQRUNUX0VRKGVuY29kZSg1LCAtMSwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIuNSIpKTsKKyAg
ICBFWFBFQ1RfRVEoZW5jb2RlKDEwMCwgMCwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxMDAiKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMDAsIDAsIE5lZ2F0aXZlKSwgZnJvbVN0cmluZygiLTEw
MCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgLTIsIFBvc2l0aXZlKSwgZnJvbVN0cmlu
ZygiMS4yMyIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgLTIsIE5lZ2F0aXZlKSwgZnJv
bVN0cmluZygiLTEuMjMiKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIDgsIFBvc2l0aXZl
KSwgZnJvbVN0cmluZygiMS4yM0UxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgOCwg
TmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMS4yM0UxMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDEyMywgOCwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxLjIzRSsxMCIpKTsKKyAgICBFWFBFQ1Rf
RVEoZW5jb2RlKDEyMywgOCwgTmVnYXRpdmUpLCBmcm9tU3RyaW5nKCItMS4yM0UrMTAiKSk7Cisg
ICAgRVhQRUNUX0VRKGVuY29kZSgxMjMsIC0xMiwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxLjIz
RS0xMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEyMywgLTEyLCBOZWdhdGl2ZSksIGZyb21T
dHJpbmcoIi0xLjIzRS0xMCIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDUsIC03LCBQb3NpdGl2
ZSksIGZyb21TdHJpbmcoIjAuMDAwMDAwNSIpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAs
IFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMGU5OTk5IikpOworICAgIEVYUEVDVF9FUShlbmNvZGUo
MTIzLCAtMywgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIwLjEyMyIpKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDAsIC0yLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjAwLjAwIikpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMSwgMiwgUG9zaXRpdmUpLCBmcm9tU3RyaW5nKCIxRTIiKSk7CisgICAgRVhQ
RUNUX0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgZnJvbVN0cmluZygiMUUyMDAwMCIp
KTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjFF
LTIwMDAwIikpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTAwMCwgMTAyMywgUG9zaXRpdmUpLCBm
cm9tU3RyaW5nKCIxRTEwMjYiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Onplcm8oUG9zaXRp
dmUpLCBmcm9tU3RyaW5nKCIxRS0xMDI2IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZp
bml0eShQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjEyMzQ1Njc4OTBFMTAzNiIpKTsKKworICAgIC8v
IDJeMTAyNAorICAgIGNvbnN0IHVpbnQ2NF90IGxlYWRpbmdEaWdpdHNPZjJQb3dlck9mMTAyNCA9
IFVJTlQ2NF9DKDE3OTc2OTMxMzQ4NjIzMTU5KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKGxlYWRp
bmdEaWdpdHNPZjJQb3dlck9mMTAyNCwgMjkyLCBQb3NpdGl2ZSksIGZyb21TdHJpbmcoIjE3OTc2
OTMxMzQ4NjIzMTU5MDc3MjkzMDUxOTA3ODkwMjQ3MzM2MTc5NzY5Nzg5NDIzMDY1NzI3MzQzMDA4
MTE1NzczMjY3NTgwNTUwMDk2MzEzMjcwODQ3NzMyMjQwNzUzNjAyMTEyMDExMzg3OTg3MTM5MzM1
NzY1ODc4OTc2ODgxNDQxNjYyMjQ5Mjg0NzQzMDYzOTQ3NDEyNDM3Nzc2Nzg5MzQyNDg2NTQ4NTI3
NjMwMjIxOTYwMTI0NjA5NDExOTQ1MzA4Mjk1MjA4NTAwNTc2ODgzODE1MDY4MjM0MjQ2Mjg4MTQ3
MzkxMzExMDU0MDgyNzIzNzE2MzM1MDUxMDY4NDU4NjI5ODIzOTk0NzI0NTkzODQ3OTcxNjMwNDgz
NTM1NjMyOTYyNDIyNDEzNzIxNiIpKTsKK30KKworLy8gVGhlc2Ugc3RyaW5ncyBhcmUgbG9vayBs
aWtlIHByb3BlciBudW1iZXIsIGJ1dCB3ZSBkb24ndCBhY2NlcHQgdGhlbS4KK1RFU1RfRihEZWNp
bWFsVGVzdCwgRnJvbVN0cmluZ0xpa2VOdW1iZXIpCit7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6
Om5hbigpLCBmcm9tU3RyaW5nKCIgMTIzICIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFu
KCksIGZyb21TdHJpbmcoIjEsMjM0IikpOworfQorCisvLyBmcm9tU3RyaW5nIGRvZXNuJ3Qgc3Vw
cG9ydCBpbmZpbml0eSBhbmQgTmFOLgorVEVTVF9GKERlY2ltYWxUZXN0LCBGcm9tU3RyaW5nU3Bl
Y2lhbFZhbHVlcykKK3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmco
IklORiIpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIkluZmlu
aXR5IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiaW5maW5p
dHkiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIrSW5maW5p
dHkiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIraW5maW5p
dHkiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCItSW5maW5p
dHkiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCItaW5maW5p
dHkiKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCJOYU4iKSk7
CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCJuYW4iKSk7CisgICAg
RVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIrTmFOIikpOworICAgIEVYUEVD
VF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiK25hbiIpKTsKKyAgICBFWFBFQ1RfRVEo
RGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIi1OYU4iKSk7CisgICAgRVhQRUNUX0VRKERlY2lt
YWw6Om5hbigpLCBmcm9tU3RyaW5nKCItbmFuIikpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3Qs
IGZyb21TdHJpbmdUcnVuY2F0ZWQpCit7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBm
cm9tU3RyaW5nKCJ4IikpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmlu
ZygiMC4iKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBmcm9tU3RyaW5nKCIxeCIp
KTsKKworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiMUV4IikpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgZnJvbVN0cmluZygiMUUyeCIpKTsKKyAgICBF
WFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIGZyb21TdHJpbmcoIjFFK3giKSk7Cit9CisKK1RFU1Rf
RihEZWNpbWFsVGVzdCwgTXVsdGlwbGljYXRpb24pCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgw
LCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoMCkgKiBEZWNpbWFsKDApKTsKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDIsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgyKSAqIERlY2ltYWwoLTEpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDIsIDAsIE5lZ2F0aXZlKSwgRGVjaW1hbCgtMSkgKiBEZWNpbWFsKDIp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDk5LCAwLCBQb3NpdGl2ZSksIERlY2ltYWwoOTkpICog
RGVjaW1hbCgxKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgyNTAwLCAwLCBQb3NpdGl2ZSksIERl
Y2ltYWwoLTUwKSAqIERlY2ltYWwoLTUwKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgTXVs
dGlwbGljYXRpb25CaWdFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMjIs
IFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSAqIGVuY29kZSgxLCAwLCBQb3Np
dGl2ZSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGVuY29k
ZSgxLCAxMDIyLCBQb3NpdGl2ZSkgKiBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDEsIDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2
ZSkgKiBlbmNvZGUoMSwgLTEwMDAsIFBvc2l0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVz
dCwgTXVsdGlwbGljYXRpb25TbWFsbEV4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUo
MSwgLTEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKiBlbmNvZGUo
MSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwg
ZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkgKiBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSk7
Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgTXVsdGlwbGljYXRpb25TcGVjaWFsVmFsdWVzKQor
eworICAgIGNvbnN0IERlY2ltYWwgSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUp
KTsKKyAgICBjb25zdCBEZWNpbWFsIE1pbnVzSW5maW5pdHkoRGVjaW1hbDo6aW5maW5pdHkoTmVn
YXRpdmUpKTsKKyAgICBjb25zdCBEZWNpbWFsIE5hTihEZWNpbWFsOjpuYW4oKSk7CisgICAgY29u
c3QgRGVjaW1hbCBUZW4oMTApOworICAgIGNvbnN0IERlY2ltYWwgTWludXNUZW4oLTEwKTsKKyAg
ICBjb25zdCBEZWNpbWFsIFplcm8oRGVjaW1hbDo6emVybyhQb3NpdGl2ZSkpOworICAgIGNvbnN0
IERlY2ltYWwgTWludXNaZXJvKERlY2ltYWw6Onplcm8oTmVnYXRpdmUpKTsKKworICAgIEVYUEVD
VF9FUShJbmZpbml0eSwgSW5maW5pdHkgKiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVz
SW5maW5pdHksIEluZmluaXR5ICogTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVz
SW5maW5pdHksIE1pbnVzSW5maW5pdHkgKiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKEluZmlu
aXR5LCBNaW51c0luZmluaXR5ICogTWludXNJbmZpbml0eSk7CisKKyAgICBFWFBFQ1RfRVEoTmFO
LCBJbmZpbml0eSAqIFplcm8pOworICAgIEVYUEVDVF9FUShOYU4sIFplcm8gKiBNaW51c0luZmlu
aXR5KTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmluaXR5ICogWmVybyk7CisgICAgRVhQ
RUNUX0VRKE5hTiwgTWludXNJbmZpbml0eSAqIFplcm8pOworCisgICAgRVhQRUNUX0VRKE5hTiwg
SW5maW5pdHkgKiBNaW51c1plcm8pOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzWmVybyAqIE1p
bnVzSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKiBNaW51c1pl
cm8pOworICAgIEVYUEVDVF9FUShOYU4sIE1pbnVzSW5maW5pdHkgKiBNaW51c1plcm8pOworCisg
ICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSAqIFRlbik7CisgICAgRVhQRUNUX0VRKElu
ZmluaXR5LCBUZW4gKiBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1p
bnVzSW5maW5pdHkgKiBUZW4pOworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBUZW4gKiBN
aW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShNaW51c0luZmluaXR5LCBJbmZpbml0eSAq
IE1pbnVzVGVuKTsKKyAgICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNUZW4gKiBJbmZp
bml0eSk7CisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBNaW51c0luZmluaXR5ICogTWludXNUZW4p
OworICAgIEVYUEVDVF9FUShJbmZpbml0eSwgTWludXNUZW4gKiBNaW51c0luZmluaXR5KTsKKwor
ICAgIEVYUEVDVF9FUShOYU4sIE5hTiAqIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOICog
VGVuKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBUZW4gKiBOYU4pOworCisgICAgRVhQRUNUX0VRKE5h
TiwgTmFOICogSW5maW5pdHkpOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAqIE1pbnVzSW5maW5p
dHkpOworICAgIEVYUEVDVF9FUShOYU4sIEluZmluaXR5ICogTmFOKTsKKyAgICBFWFBFQ1RfRVEo
TmFOLCBNaW51c0luZmluaXR5ICogTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBOZWdh
dGUpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBOZWdhdGl2ZSksIC1lbmNvZGUoMCwg
MCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDAsIFBvc2l0aXZlKSwgLWVu
Y29kZSgwLCAwLCBOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAxMCwgTmVn
YXRpdmUpLCAtZW5jb2RlKDAsIDEwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUo
MCwgMTAsIFBvc2l0aXZlKSwgLWVuY29kZSgwLCAxMCwgTmVnYXRpdmUpKTsKKworICAgIEVYUEVD
VF9FUShlbmNvZGUoMCwgLTEwLCBOZWdhdGl2ZSksIC1lbmNvZGUoMCwgLTEwLCBQb3NpdGl2ZSkp
OworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgLTEwLCBQb3NpdGl2ZSksIC1lbmNvZGUoMCwgLTEw
LCBOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAwLCBOZWdhdGl2ZSksIC1l
bmNvZGUoMSwgMCwgUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDAsIFBvc2l0
aXZlKSwgLWVuY29kZSgxLCAwLCBOZWdhdGl2ZSkpOworCisgICAgRVhQRUNUX0VRKGVuY29kZSgx
LCAxMCwgTmVnYXRpdmUpLCAtZW5jb2RlKDEsIDEwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVDVF9F
UShlbmNvZGUoMSwgMTAsIFBvc2l0aXZlKSwgLWVuY29kZSgxLCAxMCwgTmVnYXRpdmUpKTsKKwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEwLCBOZWdhdGl2ZSksIC1lbmNvZGUoMSwgLTEwLCBQ
b3NpdGl2ZSkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgLTEwLCBQb3NpdGl2ZSksIC1lbmNv
ZGUoMSwgLTEwLCBOZWdhdGl2ZSkpOworfQorCitURVNUX0YoRGVjaW1hbFRlc3QsIE5lZ2F0ZUJp
Z0V4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpLCAt
ZW5jb2RlKDEsIDEwMDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgxLCAxMDAw
LCBQb3NpdGl2ZSksIC1lbmNvZGUoMSwgMTAwMCwgTmVnYXRpdmUpKTsKK30KKworVEVTVF9GKERl
Y2ltYWxUZXN0LCBOZWdhdGVTbWFsbEV4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUo
MSwgLTEwMDAsIE5lZ2F0aXZlKSwgLWVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpKTsKKyAgICBF
WFBFQ1RfRVEoZW5jb2RlKDEsIC0xMDAwLCBQb3NpdGl2ZSksIC1lbmNvZGUoMSwgLTEwMDAsIE5l
Z2F0aXZlKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgTmVnYXRlU3BlY2lhbFZhbHVlcykK
K3sKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLCAtRGVjaW1hbDo6
aW5maW5pdHkoUG9zaXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9z
aXRpdmUpLCAtRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6bmFuKCksIC1EZWNpbWFsOjpuYW4oKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwg
UHJlZGljYXRlcykKK3sKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKS5p
c0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKS5pc1Bv
c2l0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKS5pc05l
Z2F0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjp6ZXJvKFBvc2l0aXZlKS5pc1Nw
ZWNpYWwoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6emVybyhQb3NpdGl2ZSkuaXNaZXJv
KCkpOworCisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6emVybyhOZWdhdGl2ZSkuaXNGaW5pdGUo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6Onplcm8oTmVnYXRpdmUpLmlzUG9zaXRpdmUo
KSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6emVybyhOZWdhdGl2ZSkuaXNOZWdhdGl2ZSgp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6emVybyhOZWdhdGl2ZSkuaXNTcGVjaWFsKCkp
OworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6Onplcm8oTmVnYXRpdmUpLmlzWmVybygpKTsKKwor
ICAgIEVYUEVDVF9UUlVFKERlY2ltYWwoMTIzKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShEZWNpbWFsKDEyMykuaXNQb3NpdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgx
MjMpLmlzTmVnYXRpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMTIzKS5pc1NwZWNp
YWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWwoMTIzKS5pc1plcm8oKSk7CisKKyAgICBF
WFBFQ1RfVFJVRShEZWNpbWFsKC0xMjMpLmlzRmluaXRlKCkpOworICAgIEVYUEVDVF9GQUxTRShE
ZWNpbWFsKC0xMjMpLmlzUG9zaXRpdmUoKSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbCgtMTIz
KS5pc05lZ2F0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsKC0xMjMpLmlzU3BlY2lh
bCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbCgtMTIzKS5pc1plcm8oKSk7Cit9CisKK1RF
U1RfRihEZWNpbWFsVGVzdCwgUHJlZGljYXRlc1NwZWNpYWxWYWx1ZXMpCit7CisgICAgRVhQRUNU
X0ZBTFNFKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5pc0Zpbml0ZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSkuaXNQb3NpdGl2ZSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLmlzTmVnYXRpdmUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLmlzU3BlY2lhbCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLmlzWmVybygpKTsK
KworICAgIEVYUEVDVF9GQUxTRShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkuaXNGaW5pdGUo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5pc1Bvc2l0
aXZlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5pc05l
Z2F0aXZlKCkpOworICAgIEVYUEVDVF9UUlVFKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5p
c1NwZWNpYWwoKSk7CisgICAgRVhQRUNUX0ZBTFNFKERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZl
KS5pc1plcm8oKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoRGVjaW1hbDo6bmFuKCkuaXNGaW5pdGUo
KSk7CisgICAgRVhQRUNUX1RSVUUoRGVjaW1hbDo6bmFuKCkuaXNTcGVjaWFsKCkpOworICAgIEVY
UEVDVF9GQUxTRShEZWNpbWFsOjpuYW4oKS5pc1plcm8oKSk7Cit9CisKKy8vIExheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvbnVtYmVyL251bWJlci1zdGVwdXAtc3RlcGRvd24tZnJvbS1yZW5kZXJlcgor
VEVTVF9GKERlY2ltYWxUZXN0LCBSZWFsV29ybGRFeGFtcGxlTnVtYmVyU3RlcFVwU3RlcERvd25G
cm9tUmVuZGVyZXIpCit7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMTAiKSwgc3RlcERvd24oIjAi
LCAiMTAwIiwgIjEwIiwgIjE5IiwgMSkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjkwIiksIHN0
ZXBVcCgiMCIsICI5OSIsICIxMCIsICI4OSIsIDEpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIx
IiksIHN0ZXBVcCgiMCIsICIxIiwgIjAuMzMzMzMzMzMzMzMzMzMzMzMiLCAiMCIsIDMpKTsgLy8g
c3RlcD0xLzMKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIwLjAxIiksIHN0ZXBVcCgiMCIsICIwLjAx
IiwgIjAuMDAzMzMzMzMzMzMzMzMzMzMzMyIsICIwIiwgMykpOyAvLyBzdGVwPTEvMzAwCisgICAg
RVhQRUNUX0VRKFN0cmluZygiMSIpLCBzdGVwVXAoIjAiLCAiMSIsICIwLjAwMzkyMTU2ODYyNzQ1
MDk4MCIsICIwIiwgMjU1KSk7IC8vIHN0ZXA9MS8yNTUKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIx
IiksIHN0ZXBVcCgiMCIsICIxIiwgIjAuMSIsICIwIiwgMTApKTsKK30KKworVEVTVF9GKERlY2lt
YWxUZXN0LCBSZWFsV29ybGRFeGFtcGxlTnVtYmVyU3RlcFVwU3RlcERvd25Gcm9tUmVuZGVyZXJS
b3VuZGluZykKK3sKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjAxNSIpLCBzdGVwVXAoIjAiLCAi
MTAwIiwgIjAuMDA1IiwgIjUuMDA1IiwgMikpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjUuMDYi
KSwgc3RlcFVwKCIwIiwgIjEwMCIsICIwLjAwNSIsICI1LjAwNSIsIDExKSk7CisgICAgRVhQRUNU
X0VRKFN0cmluZygiNS4wNjUiKSwgc3RlcFVwKCIwIiwgIjEwMCIsICIwLjAwNSIsICI1LjAwNSIs
IDEyKSk7CisKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjAxNSIpLCBzdGVwVXAoIjQiLCAiOSIs
ICIwLjAwNSIsICI1LjAwNSIsIDIpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjA2IiksIHN0
ZXBVcCgiNCIsICI5IiwgIjAuMDA1IiwgIjUuMDA1IiwgMTEpKTsKKyAgICBFWFBFQ1RfRVEoU3Ry
aW5nKCI1LjA2NSIpLCBzdGVwVXAoIjQiLCAiOSIsICIwLjAwNSIsICI1LjAwNSIsIDEyKSk7Cit9
CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUmVhbFdvcmxkRXhhbXBsZVJhbmdlU3RlcFVwU3RlcERv
d24pCit7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMWUrMzgiKSwgc3RlcFVwKCIwIiwgIjFFMzgi
LCAiMSIsICIxRTM4IiwgOSkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjFlKzM4IiksIHN0ZXBE
b3duKCIwIiwgIjFFMzgiLCAiMSIsICIxRTM4IiwgOSkpOworfQorCitURVNUX0YoRGVjaW1hbFRl
c3QsIFJlbWFpbmRlcikKK3sKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDksIC0xLCBOZWdhdGl2ZSks
IGVuY29kZSgyMSwgLTEsIFBvc2l0aXZlKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShE
ZWNpbWFsKDEpLCBEZWNpbWFsKDEwKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShlbmNv
ZGUoMSwgMCwgTmVnYXRpdmUpLCBEZWNpbWFsKC0xMCkucmVtYWluZGVyKDMpKTsKKyAgICBFWFBF
Q1RfRVEoZW5jb2RlKDIsIC0xLCBQb3NpdGl2ZSksIGVuY29kZSgxMDIsIC0xLCBQb3NpdGl2ZSku
cmVtYWluZGVyKDEpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIC0xLCBQb3NpdGl2ZSksIERl
Y2ltYWwoMTApLnJlbWFpbmRlcihlbmNvZGUoMywgLTEsIFBvc2l0aXZlKSkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMywgLTEsIE5lZ2F0aXZlKSwgZW5jb2RlKDM2LCAtMSwgUG9zaXRpdmUpLnJl
bWFpbmRlcihlbmNvZGUoMTMsIC0xLCBQb3NpdGl2ZSkpKTsKKyAgICBFWFBFQ1RfRVEoZW5jb2Rl
KDEsIDg3LCBQb3NpdGl2ZSksIChlbmNvZGUoMTIzNCwgMTAwLCBQb3NpdGl2ZSkucmVtYWluZGVy
KERlY2ltYWwoMykpKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUmVtYWluZGVyQmlnRXhw
b25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAxMDIyLCBQb3NpdGl2ZSksIGVuY29k
ZSgxLCAxMDIyLCBQb3NpdGl2ZSkucmVtYWluZGVyKGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpKTsK
KyAgICBFWFBFQ1RfRVEoZW5jb2RlKDAsIDEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEwMjIs
IFBvc2l0aXZlKS5yZW1haW5kZXIoZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSkpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIGVuY29kZSgxLCAxMDIyLCBQb3Np
dGl2ZSkucmVtYWluZGVyKGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpKSk7Cit9CisKK1RFU1Rf
RihEZWNpbWFsVGVzdCwgUmVtYWluZGVyU21hbGxFeHBvbmVudCkKK3sKKyAgICBFWFBFQ1RfRVEo
ZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSksIGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpLnJl
bWFpbmRlcihlbmNvZGUoMSwgMCwgUG9zaXRpdmUpKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgw
LCAtMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKS5yZW1haW5kZXIo
ZW5jb2RlKDEsIC0xMDIyLCBQb3NpdGl2ZSkpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBS
ZW1haW5kZXJTcGVjaWFsVmFsdWVzKQoreworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0
eShQb3NpdGl2ZSksIERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5yZW1haW5kZXIoMSkpOwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSksIERlY2ltYWw6OmluZmlu
aXR5KE5lZ2F0aXZlKS5yZW1haW5kZXIoMSkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4o
KSwgRGVjaW1hbDo6bmFuKCkucmVtYWluZGVyKDEpKTsKKworICAgIEVYUEVDVF9FUShEZWNpbWFs
OjppbmZpbml0eShOZWdhdGl2ZSksIERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKS5yZW1haW5k
ZXIoLTEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpLCBEZWNp
bWFsOjppbmZpbml0eShOZWdhdGl2ZSkucmVtYWluZGVyKC0xKSk7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWw6Om5hbigpLCBEZWNpbWFsOjpuYW4oKS5yZW1haW5kZXIoLTEpKTsKKworICAgIEVYUEVD
VF9FUShEZWNpbWFsOjppbmZpbml0eShQb3NpdGl2ZSksIERlY2ltYWw6OmluZmluaXR5KFBvc2l0
aXZlKS5yZW1haW5kZXIoMykpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShOZWdh
dGl2ZSksIERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5yZW1haW5kZXIoMykpOworICAgIEVY
UEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgRGVjaW1hbDo6bmFuKCkucmVtYWluZGVyKDMpKTsKKwor
ICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSksIERlY2ltYWw6OmluZmlu
aXR5KFBvc2l0aXZlKS5yZW1haW5kZXIoLTEpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6aW5m
aW5pdHkoUG9zaXRpdmUpLCBEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkucmVtYWluZGVyKC0x
KSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWw6Om5hbigpLCBEZWNpbWFsOjpuYW4oKS5yZW1haW5k
ZXIoLTEpKTsKKworICAgIEVYUEVDVF9FUShEZWNpbWFsOjpuYW4oKSwgRGVjaW1hbCgxKS5yZW1h
aW5kZXIoRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRpdmUpKSk7CisgICAgRVhQRUNUX0VRKERlY2lt
YWw6Om5hbigpLCBEZWNpbWFsKDEpLnJlbWFpbmRlcihEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2
ZSkpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbDo6bmFuKCksIERlY2ltYWwoMSkucmVtYWluZGVy
KERlY2ltYWw6Om5hbigpKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgUm91bmQpCit7Cisg
ICAgRVhQRUNUX0VRKERlY2ltYWwoMSksIChEZWNpbWFsKDkpIC8gRGVjaW1hbCgxMCkpLnJvdW5k
KCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDI1KSwgKERlY2ltYWwoNSkgLyBmcm9tU3RyaW5n
KCIwLjIwMCIpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgzKSwgKERlY2ltYWwo
NSkgLyBEZWNpbWFsKDIpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgxKSwgKERl
Y2ltYWwoMikgLyBEZWNpbWFsKDMpKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVjaW1hbCgz
KSwgKERlY2ltYWwoMTApIC8gRGVjaW1hbCgzKSkucm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERl
Y2ltYWwoMyksIChEZWNpbWFsKDEpIC8gZnJvbVN0cmluZygiMC4zIikpLnJvdW5kKCkpOworICAg
IEVYUEVDVF9FUShEZWNpbWFsKDEwKSwgKERlY2ltYWwoMSkgLyBmcm9tU3RyaW5nKCIwLjEiKSku
cm91bmQoKSk7CisgICAgRVhQRUNUX0VRKERlY2ltYWwoNSksIChEZWNpbWFsKDEpIC8gZnJvbVN0
cmluZygiMC4yIikpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsKDEwKSwgKGZyb21T
dHJpbmcoIjEwLjIiKSAvIDEpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoMTIzNCwg
MTAwLCBQb3NpdGl2ZSksIGVuY29kZSgxMjM0LCAxMDAsIFBvc2l0aXZlKS5yb3VuZCgpKTsKK30K
KworVEVTVF9GKERlY2ltYWxUZXN0LCBSb3VuZFNwZWNpYWxWYWx1ZXMpCit7CisgICAgRVhQRUNU
X0VRKERlY2ltYWw6OmluZmluaXR5KFBvc2l0aXZlKSwgRGVjaW1hbDo6aW5maW5pdHkoUG9zaXRp
dmUpLnJvdW5kKCkpOworICAgIEVYUEVDVF9FUShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSks
IERlY2ltYWw6OmluZmluaXR5KE5lZ2F0aXZlKS5yb3VuZCgpKTsKKyAgICBFWFBFQ1RfRVEoRGVj
aW1hbDo6bmFuKCksIERlY2ltYWw6Om5hbigpLnJvdW5kKCkpOworfQorCitURVNUX0YoRGVjaW1h
bFRlc3QsIFN1YnRyYWN0KQoreworICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUp
LCBEZWNpbWFsKDApIC0gRGVjaW1hbCgwKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgzLCAwLCBQ
b3NpdGl2ZSksIERlY2ltYWwoMikgLSBEZWNpbWFsKC0xKSk7CisgICAgRVhQRUNUX0VRKGVuY29k
ZSgzLCAwLCBOZWdhdGl2ZSksIERlY2ltYWwoLTEpIC0gRGVjaW1hbCgyKSk7CisgICAgRVhQRUNU
X0VRKGVuY29kZSg5OCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKDk5KSAtIERlY2ltYWwoMSkpOwor
ICAgIEVYUEVDVF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBEZWNpbWFsKC01MCkgLSBEZWNp
bWFsKC01MCkpOworICAgIEVYUEVDVF9FUShlbmNvZGUoVUlOVDY0X0MoMTAwMDAwMDAwMDAwMDAw
MCksIDM1LCBQb3NpdGl2ZSksIGVuY29kZSgxLCA1MCwgUG9zaXRpdmUpIC0gRGVjaW1hbCgxKSk7
CisgICAgRVhQRUNUX0VRKGVuY29kZShVSU5UNjRfQygxMDAwMDAwMDAwMDAwMDAwKSwgMzUsIE5l
Z2F0aXZlKSwgRGVjaW1hbCgxKSAtIGVuY29kZSgxLCA1MCwgUG9zaXRpdmUpKTsKK30KKworVEVT
VF9GKERlY2ltYWxUZXN0LCBTdWJ0cmFjdEJpZ0V4cG9uZW50KQoreworICAgIEVYUEVDVF9FUShl
bmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUpIC0gZW5j
b2RlKDEsIDAsIFBvc2l0aXZlKSk7CisgICAgRVhQRUNUX0VRKGVuY29kZSgwLCAwLCBQb3NpdGl2
ZSksIGVuY29kZSgxLCAxMDIyLCBQb3NpdGl2ZSkgLSBlbmNvZGUoMSwgMTAyMiwgUG9zaXRpdmUp
KTsKKyAgICBFWFBFQ1RfRVEoZW5jb2RlKDEsIDEwMjIsIFBvc2l0aXZlKSwgZW5jb2RlKDEsIDEw
MjIsIFBvc2l0aXZlKSArIGVuY29kZSgxLCAtMTAwMCwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9G
KERlY2ltYWxUZXN0LCBTdWJ0cmFjdFNtYWxsRXhwb25lbnQpCit7CisgICAgRVhQRUNUX0VRKGVu
Y29kZShVSU5UNjRfQygxMDAwMDAwMDAwMDAwMDAwMCksIC0xNiwgTmVnYXRpdmUpLCBlbmNvZGUo
MSwgLTEwMjIsIFBvc2l0aXZlKSAtIGVuY29kZSgxLCAwLCBQb3NpdGl2ZSkpOworICAgIEVYUEVD
VF9FUShlbmNvZGUoMCwgMCwgUG9zaXRpdmUpLCBlbmNvZGUoMSwgLTEwMjIsIFBvc2l0aXZlKSAt
IGVuY29kZSgxLCAtMTAyMiwgUG9zaXRpdmUpKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBT
dWJ0cmFjdFNwZWNpYWxWYWx1ZXMpCit7CisgICAgY29uc3QgRGVjaW1hbCBJbmZpbml0eShEZWNp
bWFsOjppbmZpbml0eShQb3NpdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTWludXNJbmZpbml0
eShEZWNpbWFsOjppbmZpbml0eShOZWdhdGl2ZSkpOworICAgIGNvbnN0IERlY2ltYWwgTmFOKERl
Y2ltYWw6Om5hbigpKTsKKyAgICBjb25zdCBEZWNpbWFsIFRlbigxMCk7CisKKyAgICBFWFBFQ1Rf
RVEoTmFOLCBJbmZpbml0eSAtIEluZmluaXR5KTsKKyAgICBFWFBFQ1RfRVEoSW5maW5pdHksIElu
ZmluaXR5IC0gTWludXNJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIE1p
bnVzSW5maW5pdHkgLSBJbmZpbml0eSk7CisgICAgRVhQRUNUX0VRKE5hTiwgTWludXNJbmZpbml0
eSAtIE1pbnVzSW5maW5pdHkpOworCisgICAgRVhQRUNUX0VRKEluZmluaXR5LCBJbmZpbml0eSAt
IFRlbik7CisgICAgRVhQRUNUX0VRKE1pbnVzSW5maW5pdHksIFRlbiAtIEluZmluaXR5KTsKKyAg
ICBFWFBFQ1RfRVEoTWludXNJbmZpbml0eSwgTWludXNJbmZpbml0eSAtIFRlbik7CisgICAgRVhQ
RUNUX0VRKEluZmluaXR5LCBUZW4gLSBNaW51c0luZmluaXR5KTsKKworICAgIEVYUEVDVF9FUShO
YU4sIE5hTiAtIE5hTik7CisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC0gVGVuKTsKKyAgICBFWFBF
Q1RfRVEoTmFOLCBUZW4gLSBOYU4pOworCisgICAgRVhQRUNUX0VRKE5hTiwgTmFOIC0gSW5maW5p
dHkpOworICAgIEVYUEVDVF9FUShOYU4sIE5hTiAtIE1pbnVzSW5maW5pdHkpOworICAgIEVYUEVD
VF9FUShOYU4sIEluZmluaXR5IC0gTmFOKTsKKyAgICBFWFBFQ1RfRVEoTmFOLCBNaW51c0luZmlu
aXR5IC0gTmFOKTsKK30KKworVEVTVF9GKERlY2ltYWxUZXN0LCBUb1N0cmluZykKK3sKKyAgICBF
WFBFQ1RfRVEoU3RyaW5nKCIwIiksIERlY2ltYWw6Onplcm8oUG9zaXRpdmUpLnRvU3RyaW5nKCkp
OworICAgIEVYUEVDVF9FUShTdHJpbmcoIi0wIiksIERlY2ltYWw6Onplcm8oTmVnYXRpdmUpLnRv
U3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjEiKSwgRGVjaW1hbCgxKS50b1N0cmlu
ZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCItMSIpLCBEZWNpbWFsKC0xKS50b1N0cmluZygp
KTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIxMjM0NTY3IiksIERlY2ltYWwoMTIzNDU2NykudG9T
dHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiLTEyMzQ1NjciKSwgRGVjaW1hbCgtMTIz
NDU2NykudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiMC41IiksIGVuY29kZSg1
LCAtMSwgUG9zaXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIi0wLjUi
KSwgZW5jb2RlKDUsIC0xLCBOZWdhdGl2ZSkudG9TdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKFN0
cmluZygiMTIuMzQ1IiksIGVuY29kZSgxMjM0NSwgLTMsIFBvc2l0aXZlKS50b1N0cmluZygpKTsK
KyAgICBFWFBFQ1RfRVEoU3RyaW5nKCItMTIuMzQ1IiksIGVuY29kZSgxMjM0NSwgLTMsIE5lZ2F0
aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCIwLjEyMzQ1IiksIGVuY29k
ZSgxMjM0NSwgLTUsIFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5n
KCItMC4xMjM0NSIpLCBlbmNvZGUoMTIzNDUsIC01LCBOZWdhdGl2ZSkudG9TdHJpbmcoKSk7Cisg
ICAgRVhQRUNUX0VRKFN0cmluZygiNTAiKSwgZW5jb2RlKDUwLCAwLCBQb3NpdGl2ZSkudG9TdHJp
bmcoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiLTUwIiksIGVuY29kZSg1MCwgMCwgTmVnYXRp
dmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIjVlKzEiKSwgZW5jb2RlKDUs
IDEsIFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCItNWUrMSIp
LCBlbmNvZGUoNSwgMSwgTmVnYXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9FUShTdHJp
bmcoIjUuNjc4ZSsxMDMiKSwgZW5jb2RlKDU2NzgsIDEwMCwgUG9zaXRpdmUpLnRvU3RyaW5nKCkp
OworICAgIEVYUEVDVF9FUShTdHJpbmcoIi01LjY3OGUrMTAzIiksIGVuY29kZSg1Njc4LCAxMDAs
IE5lZ2F0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCI1LjY3OGUtOTci
KSwgZW5jb2RlKDU2NzgsIC0xMDAsIFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1Rf
RVEoU3RyaW5nKCItNS42NzhlLTk3IiksIGVuY29kZSg1Njc4LCAtMTAwLCBOZWdhdGl2ZSkudG9T
dHJpbmcoKSk7Cit9CisKK1RFU1RfRihEZWNpbWFsVGVzdCwgVG9TdHJpbmdTcGVjaWFsVmFsdWVz
KQoreworICAgIEVYUEVDVF9FUShTdHJpbmcoIkluZmluaXR5IiksIERlY2ltYWw6OmluZmluaXR5
KFBvc2l0aXZlKS50b1N0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCItSW5maW5pdHki
KSwgRGVjaW1hbDo6aW5maW5pdHkoTmVnYXRpdmUpLnRvU3RyaW5nKCkpOworICAgIEVYUEVDVF9F
UShTdHJpbmcoIk5hTiIpLCBEZWNpbWFsOjpuYW4oKS50b1N0cmluZygpKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>