<?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>127127</bug_id>
          
          <creation_ts>2014-01-16 11:53:17 -0800</creation_ts>
          <short_desc>JSC: Adding UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn().</short_desc>
          <delta_ts>2014-01-18 09:51:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>eflews.bot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ltilve+ews</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>968841</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-16 11:53:17 -0800</bug_when>
    <thetext>In order to implement bytecode level breakpoints, we need a mechanism for computing the best fit op_debug bytecode offset for any valid given line and column value in the source.  The “best fit” in this case is the nearest preceding op_debug bytecode relative to the position specified by the line and column.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968844</commentid>
    <comment_count>1</comment_count>
      <attachid>221397</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-16 12:07:18 -0800</bug_when>
    <thetext>Created attachment 221397
patch for a white box test.

It&apos;s difficult to test UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn() in a generic way without a full blown bytecode level breakpoint system available.  However, we don&apos;t want to wait till we have the full system before validating that this line and column to op_debug bytecode mapping does work properly.  So, this patch hacks up the existing Debugger.cpp&apos;s pauseIfNeeded() to always call UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn() with its line and column args, and perform sanity check assertions on the returned bytecodeOffset, actualLine, and actualColumn.  Since the best fit op_debug is the nearest preceding one, the following assertions should be true:

1. The returned bytecodeOffset should point to an op_debug bytecode.
2. The returned bytecodeOffset should be less or equal to the current executing bytecode offset (corresponding to the current line and column).
3. The returned line should be less than the current line, or the returned line should equal the current line and the returned column should be less ot equal to the current column.

The test in this patch asserts these 3 conditions.  The test also bypasses the optimization that allows debug hook callbacks to not be called when no breakpoints are set.  With this bypass, we&apos;ll be calling the debug hook callbacks and exercising the test on every op_debug bytecode we encounter.

To exercise the test, I ran the layout tests&apos; inspector-protocol tests which exercises the debugger in various ways and on various types of JS source.  I also stepped through the code in UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn() a few times to get a sense of how the code actually behaves and confirm that it matches my intuition and expectation of how it should behave.

While this test is not conclusive in demonstrating correctness, it does provide a lot of coverage, and did uncover several bugs in the implementation that was fixed.

I&apos;m uploading the test here for future reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968856</commentid>
    <comment_count>2</comment_count>
      <attachid>221402</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-16 12:31:55 -0800</bug_when>
    <thetext>Created attachment 221402
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968898</commentid>
    <comment_count>3</comment_count>
      <attachid>221402</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-16 13:20:03 -0800</bug_when>
    <thetext>Comment on attachment 221402
the patch.

Attachment 221402 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/6388873441574912</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968934</commentid>
    <comment_count>4</comment_count>
      <attachid>221402</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-16 14:10:25 -0800</bug_when>
    <thetext>Comment on attachment 221402
the patch.

Attachment 221402 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/6648600851382272</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968994</commentid>
    <comment_count>5</comment_count>
      <attachid>221402</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-16 16:55:26 -0800</bug_when>
    <thetext>Comment on attachment 221402
the patch.

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

r=me

Please fix the build, and a few issues below.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2578
&gt; +    if (bytecodeOffset != UINT_MAX) {

Please use WTF::notFound.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:260
&gt; +inline void UnlinkedCodeBlock::decodeExpressionRangeLineAndColumn(ExpressionRangeInfo&amp; info,

Let&apos;s call this &quot;getLineAndColumn&quot;.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:283
&gt; +// dumpExpressionRangeInfo() and dumpLineColumnInfoList() are utility functions used for
&gt; +// debugging only. They are not normally called, but we include them in the debug build
&gt; +// by default to avoid bit-rot.

I don&apos;t think this comment adds anything.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:371
&gt; +        return UINT_MAX;

Please use WTF::notFound.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:-307
&gt; +    // Find the best fit op_debug opcode for the requested line and column:
&gt; +    // The best fit op_debug will be the one that is preceding but is nearest to
&gt; +    // the specified line and column.
&gt; +    LineColumnInfo::LineColumnPair target(line, column);
&gt; +    LineColumnInfoList&amp; infoList = opDebugLineColumnInfoList();
&gt; +    int low = 0;
&gt; +    int high = infoList.size();
&gt; +    while (high - low &gt; 1) {
&gt; +        int current = low + (high - low) / 2;
&gt; +        LineColumnInfo&amp; currentInfo = infoList[current];
&gt; +        if (currentInfo &lt; target)
&gt; +            low = current;
&gt; +        else
&gt; +            high = current;
&gt;      }
&gt; -    } // switch

This looks like a binary chop algorithm. Did you consider WTF::binarySearch or std::binary_search?

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:396
&gt; +    // Find the earliest op_debug opcode that has this same best fit line and column:

It would be better to comment here *why* you&apos;re looking for the earliest item. You explained that in your ChageLog, but not in your code.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:431
&gt; +    m_rareData-&gt;m_opDebugLineColumnInfoList = std::unique_ptr&lt;LineColumnInfoList&gt;(new LineColumnInfoList());

Please use make_unique.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:559
&gt;          Vector&lt;ExpressionRangeInfo::FatPosition&gt; m_expressionInfoFatPositions;
&gt; +        std::unique_ptr&lt;LineColumnInfoList&gt; m_opDebugLineColumnInfoList;

Why is m_opDebugLineColumnInfoList a pointer to vector, while m_expressionInfoFatPositions is an inline vector? Should they both be pointers to vectors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969012</commentid>
    <comment_count>6</comment_count>
      <attachid>221402</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2014-01-16 17:45:05 -0800</bug_when>
    <thetext>Comment on attachment 221402
the patch.

Attachment 221402 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/5521117175349248</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969194</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-17 12:06:26 -0800</bug_when>
    <thetext>Thanks for the review.  My answers below.

(In reply to comment #5)
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2578
&gt; &gt; +    if (bytecodeOffset != UINT_MAX) {
&gt; 
&gt; Please use WTF::notFound.

WTF::noFound is of type size_t whereas the returned value is of type unsigned.  A comparison between the 2 would always yield false (not what we want).  So, I used static_cast&lt;unsigned&gt;(WTF::notFound) instead.

&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:260
&gt; &gt; +inline void UnlinkedCodeBlock::decodeExpressionRangeLineAndColumn(ExpressionRangeInfo&amp; info,
&gt; 
&gt; Let&apos;s call this &quot;getLineAndColumn&quot;.

Fixed.

&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:283
&gt; &gt; +// dumpExpressionRangeInfo() and dumpLineColumnInfoList() are utility functions used for
&gt; &gt; +// debugging only. They are not normally called, but we include them in the debug build
&gt; &gt; +// by default to avoid bit-rot.
&gt; 
&gt; I don&apos;t think this comment adds anything.

Removed.

&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:371
&gt; &gt; +        return UINT_MAX;
&gt; 
&gt; Please use WTF::notFound.

Fixed as above.
 
&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:-307
&gt; &gt; +    // Find the best fit op_debug opcode for the requested line and column:
&gt; &gt; +    // The best fit op_debug will be the one that is preceding but is nearest to
&gt; &gt; +    // the specified line and column.
&gt; &gt; +    LineColumnInfo::LineColumnPair target(line, column);
&gt; &gt; +    LineColumnInfoList&amp; infoList = opDebugLineColumnInfoList();
&gt; &gt; +    int low = 0;
&gt; &gt; +    int high = infoList.size();
&gt; &gt; +    while (high - low &gt; 1) {
&gt; &gt; +        int current = low + (high - low) / 2;
&gt; &gt; +        LineColumnInfo&amp; currentInfo = infoList[current];
&gt; &gt; +        if (currentInfo &lt; target)
&gt; &gt; +            low = current;
&gt; &gt; +        else
&gt; &gt; +            high = current;
&gt; &gt;      }
&gt; &gt; -    } // switch
&gt; 
&gt; This looks like a binary chop algorithm. Did you consider WTF::binarySearch or std::binary_search?

It is a binary search algorithm which I inherited from UnlinkedCodeBlock::expressionRangeForBytecodeOffset(), and modified for my needs.  In our case here, we need an algorithm that will find the nearest preceding op_debug bytecode.

Looking at WTF::binarySearch(), the closest that comes to what we need is with the ReturnAdjacentElementIfKeyIsNotPresent search mode.  However, that can return us either the preceeding or the subsequent op_debug bytecode.  And additional check will be needed after the search to ensure that we’ll referring to the preceding op_debug. 

According to https://stdcxx.apache.org/doc/stdlibug/14-4.html, std::binary_search() returns true or false depending on whether an exact match is found.  This is not what we need.  There is a std::lower_bound() that insert position for the provided value.  We can probably use std::lower_bound() and then iterate backwards by 1 from the returned position to get to the preceding entry for what we need.  However, the documentation also says that std::lower_bound() will &quot;match only when the element is not currently found in the sequence”.  So, there’s more finessing that may be needed.

So, I prefer to stick with what we have that we know will serve the exact purpose (of finding the nearest preceding result which can be a direct match as well).

One other detail: while looking thru WTF::binarySearch(), I realized that my search implementation did not provide a quick exit when an exact match is found.  While this is not strictly needed for correctness, it’s a simple to add this optimization.  Basically, I added the following before the test of (currentInfo &lt; target):

    if (currentInfo == target) {
        low = current;
        break;
    }

&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:396
&gt; &gt; +    // Find the earliest op_debug opcode that has this same best fit line and column:
&gt; 
&gt; It would be better to comment here *why* you&apos;re looking for the earliest item. You explained that in your ChageLog, but not in your code.

I imported and adapted the comment from the ChangeLog and replaced this comment.

&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:431
&gt; &gt; +    m_rareData-&gt;m_opDebugLineColumnInfoList = std::unique_ptr&lt;LineColumnInfoList&gt;(new LineColumnInfoList());
&gt; 
&gt; Please use make_unique.

Done.

&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:559
&gt; &gt;          Vector&lt;ExpressionRangeInfo::FatPosition&gt; m_expressionInfoFatPositions;
&gt; &gt; +        std::unique_ptr&lt;LineColumnInfoList&gt; m_opDebugLineColumnInfoList;
&gt; 
&gt; Why is m_opDebugLineColumnInfoList a pointer to vector, while m_expressionInfoFatPositions is an inline vector? Should they both be pointers to vectors?

m_opDebugLineColumnInfoList is a pointer because the pointer being null can serve as a marker that the list has not been initialized.  This is needed because this list is only created on demand / first use.

As for m_expressionInfoFatPositions, if the fat positions exists (due to the nature of the JS source), then this Vector will always be populated when the ClassBlock is created.  It could have been implemented as a pointer to a vector as well, but the savings would only be the size of 1 pointer at best.  I didn’t think it was worth it back when I implemented m_expressionInfoFatPositions.

Shortly, I’ll upload a new patch with the fixes above and attempt to resolve the EFL and GTK build failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969211</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-17 12:30:39 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; One other detail: while looking thru WTF::binarySearch(), I realized that my search implementation did not provide a quick exit when an exact match is found.  While this is not strictly needed for correctness, it’s a simple to add this optimization.  Basically, I added the following before the test of (currentInfo &lt; target):
&gt; 
&gt;     if (currentInfo == target) {
&gt;         low = current;
&gt;         break;
&gt;     }

This uncovered a bug in the section of UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn() that searches backwards to find the first op_debug with the same line and column value as the one found by the binary search.  That backward search was iterating as follows:

    for (int i = low - 1; i &gt; 0; i--)

Instead if should be iterating as follows:

    for (int i = low - 1; i &gt;= 0; i--)

The bug was that the entry at index 0 was being excluded as a candidate for this backward search, and it should not be excluded.  This will be fixed in my upcoming patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969250</commentid>
    <comment_count>9</comment_count>
      <attachid>221490</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-17 13:36:28 -0800</bug_when>
    <thetext>Created attachment 221490
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969304</commentid>
    <comment_count>10</comment_count>
      <attachid>221490</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-17 16:05:27 -0800</bug_when>
    <thetext>Comment on attachment 221490
patch for landing.

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

r=me, with two changes below:

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:387
&gt; +    // Find the best fit op_debug opcode for the requested line and column:
&gt; +    // The best fit op_debug will be the one that is preceding but is nearest to
&gt; +    // the specified line and column.
&gt; +    LineColumnInfo::LineColumnPair target(line, column);
&gt; +    LineColumnInfoList&amp; infoList = opDebugLineColumnInfoList();
&gt; +    int low = 0;
&gt; +    int high = infoList.size();
&gt; +    while (high - low &gt; 1) {
&gt; +        int current = low + (high - low) / 2;
&gt; +        LineColumnInfo&amp; currentInfo = infoList[current];
&gt; +        if (currentInfo == target) {
&gt; +            low = current;
&gt; +            break;
&gt; +        }
&gt; +        if (currentInfo &lt; target)
&gt; +            low = current;
&gt; +        else
&gt; +            high = current;
&gt;      }

Let&apos;s use std::lower_bound. Your understanding that it will &quot;match only when the element is not currently found in the sequence” seems to be out of date.

Specifically:
it = lower_bound()
if (target &lt; *it)
    --it;
ASSERT(it &gt;= begin &amp;&amp; it &lt; end &amp;&amp; *it &lt;= target)

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:408
&gt; +    // Search backwards from the found op_debug to see if there are any
&gt; +    // preceding op_debug bytecodes with the exact same line and column as the
&gt; +    // one we found. We want the earliest one because when we have multiple
&gt; +    // potential breakpoint targets that map to a given line and column, a
&gt; +    // debugger user would expect to break on the first one first and step
&gt; +    // through the rest thereafter if needed.
&gt; +    LineColumnInfo::LineColumnPair match(line, column);
&gt; +    for (int i = low - 1; i &gt;= 0; i--) {
&gt; +        LineColumnInfo&amp; currentInfo = infoList[i];
&gt; +        if (currentInfo != match)
&gt; +            break;
&gt; +        low = i;
&gt; +    }

Let&apos;s not do this. The Web Inspector doesn&apos;t set multiple breakpoints at the exact same line/column position.

Instead, let&apos;s ASSERT:

    ASSERT(it == begin || *(it - 1) &lt; *it);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969306</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-17 16:09:04 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Let&apos;s use std::lower_bound. Your understanding that it will &quot;match only when the element is not currently found in the sequence” seems to be out of date.
&gt; 
&gt; Specifically:
&gt; it = lower_bound()
&gt; if (target &lt; *it)
&gt;     --it;
&gt; ASSERT(it &gt;= begin &amp;&amp; it &lt; end &amp;&amp; *it &lt;= target)

OK, will fix.

&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:408
&gt; &gt; +    // Search backwards from the found op_debug to see if there are any
&gt; &gt; +    // preceding op_debug bytecodes with the exact same line and column as the
&gt; &gt; +    // one we found. We want the earliest one because when we have multiple
&gt; &gt; +    // potential breakpoint targets that map to a given line and column, a
&gt; &gt; +    // debugger user would expect to break on the first one first and step
&gt; &gt; +    // through the rest thereafter if needed.
&gt; &gt; +    LineColumnInfo::LineColumnPair match(line, column);
&gt; &gt; +    for (int i = low - 1; i &gt;= 0; i--) {
&gt; &gt; +        LineColumnInfo&amp; currentInfo = infoList[i];
&gt; &gt; +        if (currentInfo != match)
&gt; &gt; +            break;
&gt; &gt; +        low = i;
&gt; &gt; +    }
&gt; 
&gt; Let&apos;s not do this. The Web Inspector doesn&apos;t set multiple breakpoints at the exact same line/column position.
&gt; 
&gt; Instead, let&apos;s ASSERT:
&gt; 
&gt;     ASSERT(it == begin || *(it - 1) &lt; *it);

The issue isn’t that the WebInspector will set multiple breakpoints.  It is that there can be multiple op_debug bytecodes for the same given line and column values.  The WebInspector will request 1 breakpoint at that line and column value.  We need to set it on the earliest op_debug bytecode that matches that line and column.

Hence, we still need to do this backward search.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969318</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-17 16:34:14 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Let&apos;s not do this. The Web Inspector doesn&apos;t set multiple breakpoints at the exact same line/column position.
&gt; &gt; 
&gt; &gt; Instead, let&apos;s ASSERT:
&gt; &gt; 
&gt; &gt;     ASSERT(it == begin || *(it - 1) &lt; *it);
&gt; 
&gt; The issue isn’t that the WebInspector will set multiple breakpoints.  It is that there can be multiple op_debug bytecodes for the same given line and column values.  The WebInspector will request 1 breakpoint at that line and column value.  We need to set it on the earliest op_debug bytecode that matches that line and column.
&gt; 
&gt; Hence, we still need to do this backward search.

Nevermind, I think I get it.  With the use of lower_bound(), we should be at the earliest position already.  I’ll look into making this so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969427</commentid>
    <comment_count>13</comment_count>
      <attachid>221542</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-18 02:40:22 -0800</bug_when>
    <thetext>Created attachment 221542
patch 3 for landing using std::lower_bound() instead

According to the spec for std::lower_bound() at &lt;http://www.cplusplus.com/reference/algorithm/lower_bound/&gt;, “if all the element in the range compare less than val, the function returns last.”  Hence, after the lower_bound search, we need to check for it == end as well as follows:

    if (it == list.end() || *it &gt; target)
        --it;

This patch has been tested with the white box test I attached earlier, and passes without issues.  I’ll wait for the EWS bots to go green before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969456</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-18 09:51:56 -0800</bug_when>
    <thetext>Landed in r162256: &lt;http://trac.webkit.org/r162256&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221397</attachid>
            <date>2014-01-16 12:07:18 -0800</date>
            <delta_ts>2014-01-16 12:07:18 -0800</delta_ts>
            <desc>patch for a white box test.</desc>
            <filename>test-opDebugBytecodeOffsetForLineAndColumn.patch</filename>
            <type>text/plain</type>
            <size>2304</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2
aXNpb24gMTYyMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiRGVidWdn
ZXIuaCIKIAorI2luY2x1ZGUgIkNvZGVCbG9jay5oIiAvLyBURVNUIG9ubHkKICNpbmNsdWRlICJE
ZWJ1Z2dlckNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSGVhcEl0
ZXJhdGlvblNjb3BlLmgiCkBAIC0xNTEsNyArMTUyLDcgQEAKICAgICAsIG1fbGFzdEV4ZWN1dGVk
TGluZShVSU5UX01BWCkKICAgICAsIG1fbGFzdEV4ZWN1dGVkU291cmNlSUQobm9Tb3VyY2VJRCkK
ICAgICAsIG1fdG9wQnJlYWtwb2ludElEKG5vQnJlYWtwb2ludElEKQotICAgICwgbV9uZWVkc09w
RGVidWdDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcyh0cnVl
KSAvLyBURVNUIG9ubHkKICAgICAsIG1fc2hvdWxkUGF1c2UoZmFsc2UpCiB7CiB9CkBAIC0yMTAs
NyArMjExLDcgQEAKIHZvaWQgRGVidWdnZXI6OnVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tz
KCkKIHsKICAgICBzaXplX3QgbnVtYmVyT2ZCcmVha3BvaW50cyA9IG1fYnJlYWtwb2ludElEVG9C
cmVha3BvaW50LnNpemUoKTsKLSAgICBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcyA9IG1fc2hvdWxk
UGF1c2UgfHwgbnVtYmVyT2ZCcmVha3BvaW50czsKKyAgICBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNr
cyA9IG1fc2hvdWxkUGF1c2UgfHwgbnVtYmVyT2ZCcmVha3BvaW50cyB8fCB0cnVlOyAvLyBURVNU
IG9ubHkKIH0KIAogQnJlYWtwb2ludElEIERlYnVnZ2VyOjpzZXRCcmVha3BvaW50KEJyZWFrcG9p
bnQgYnJlYWtwb2ludCwgdW5zaWduZWQmIGFjdHVhbExpbmUsIHVuc2lnbmVkJiBhY3R1YWxDb2x1
bW4pCkBAIC00MzgsNiArNDM5LDI5IEBACiAKIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CisgICAgLy8gVEVTVCBPbmx5CisjZGVmaW5lIEVOQUJM
RV9URVNUX0xJTkVfQ09MVU1OX01BUF9UT19CWVRFQ09ERV9PRkZTRVQgMQorI2lmIEVOQUJMRShU
RVNUX0xJTkVfQ09MVU1OX01BUF9UT19CWVRFQ09ERV9PRkZTRVQpCisgICAgeworICAgICAgICBU
ZXh0UG9zaXRpb24gcG9zaXRpb24gPSBEZWJ1Z2dlckNhbGxGcmFtZTo6cG9zaXRpb25Gb3JDYWxs
RnJhbWUobV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgICAgICB1bnNpZ25lZCBsaW5l
ID0gcG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCk7CisgICAgICAgIHVuc2lnbmVkIGNvbHVt
biA9IHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCk7CisgICAgICAgIHVuc2lnbmVkIGFj
dHVhbExpbmUgPSBsaW5lOworICAgICAgICB1bnNpZ25lZCBhY3R1YWxDb2x1bW4gPSBjb2x1bW47
CisKKyAgICAgICAgdW5zaWduZWQgZXhwZWN0ZWRCeXRlY29kZU9mZnNldCA9IG1fY3VycmVudENh
bGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSAtIDE7CisgICAgICAgIHVuc2lnbmVkIGFjdHVhbEJ5
dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2NrLT5vcERlYnVnQnl0ZWNvZGVPZmZzZXRGb3JMaW5lQW5k
Q29sdW1uKGFjdHVhbExpbmUsIGFjdHVhbENvbHVtbik7CisgICAgICAgIFZNJiB2bSA9IG1fY3Vy
cmVudENhbGxGcmFtZS0+dm0oKTsKKworICAgICAgICBPcGNvZGUgYWN0dWFsSW5zdHJ1Y3Rpb24g
PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2FjdHVhbEJ5dGVjb2RlT2Zmc2V0XS51Lm9wY29k
ZTsKKyAgICAgICAgQVNTRVJUKHZtLmludGVycHJldGVyLT5nZXRPcGNvZGVJRChhY3R1YWxJbnN0
cnVjdGlvbikgPT0gb3BfZGVidWcpOworICAgICAgICBBU1NFUlQoYWN0dWFsQnl0ZWNvZGVPZmZz
ZXQgPD0gZXhwZWN0ZWRCeXRlY29kZU9mZnNldCk7CisgICAgICAgIEFTU0VSVChhY3R1YWxMaW5l
IDwgbGluZSB8fCAoYWN0dWFsTGluZSA9PSBsaW5lICYmIGFjdHVhbENvbHVtbiA8PSBjb2x1bW4p
KTsKKyAgICB9CisjZW5kaWYKKyAgICAvLyBURVNUIG9ubHkgKi8KKwogICAgIGlmIChtX2lzUGF1
c2VkKQogICAgICAgICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221402</attachid>
            <date>2014-01-16 12:31:55 -0800</date>
            <delta_ts>2014-01-17 13:36:28 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-127127.patch</filename>
            <type>text/plain</type>
            <size>30541</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE0LTAxLTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRpbmcgVW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9mZnNldEZvckxpbmVBbmRD
b2x1bW4oKS4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjcxMjcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW4gb3JkZXIgdG8gaW1wbGVtZW50IGJ5dGVjb2RlIGxldmVsIGJyZWFrcG9pbnRzLCB3ZSBu
ZWVkIGEgbWVjaGFuaXNtCisgICAgICAgIGZvciBjb21wdXRpbmcgdGhlIGJlc3QgZml0IG9wX2Rl
YnVnIGJ5dGVjb2RlIG9mZnNldCBmb3IgYW55IHZhbGlkIGdpdmVuCisgICAgICAgIGxpbmUgYW5k
IGNvbHVtbiB2YWx1ZSBpbiB0aGUgc291cmNlLiBUaGUgImJlc3QgZml0IiBpbiB0aGlzIGNhc2Ug
aXMgdGhlCisgICAgICAgIG5lYXJlc3QgcHJlY2VkaW5nIG9wX2RlYnVnIGJ5dGVjb2RlIHJlbGF0
aXZlIHRvIHRoZSBwb3NpdGlvbiBzcGVjaWZpZWQKKyAgICAgICAgYnkgdGhlIGxpbmUgYW5kIGNv
bHVtbi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcERlYnVn
Qnl0ZWNvZGVPZmZzZXRGb3JMaW5lQW5kQ29sdW1uKToKKyAgICAgICAgLSBDb252ZXJ0IHRoZSBs
aW5lIGFuZCBjb2x1bW4gdG8gdW5saW5rZWQgbGluZSBhbmQgY29sdW1uIHZhbHVlcyBhbmQKKyAg
ICAgICAgICBwYXNzIHRoZW0gdG8gVW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9m
ZnNldEZvckxpbmVBbmRDb2x1bW4oKQorICAgICAgICAgIHRvIGRvIHRoZSByZWFsIHdvcmsuCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9MaW5l
Q29sdW1uSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJh
dG9yIDwpOgorICAgICAgICAoSlNDOjpMaW5lQ29sdW1uSW5mbzo6TGluZUNvbHVtblBhaXI6Okxp
bmVDb2x1bW5QYWlyKToKKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yID09
KToKKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yICE9KToKKyAgICAgICAg
KEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yIDw9KToKKyAgICAgICAgKEpTQzo6TGluZUNv
bHVtbkluZm86Om9wZXJhdG9yID4pOgorICAgICAgICAoSlNDOjpMaW5lQ29sdW1uSW5mbzo6b3Bl
cmF0b3IgPj0pOgorICAgICAgICAqIGJ5dGVjb2RlL0xpbmVJbmZvLmg6IFJlbW92ZWQuCisKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpkZWNvZGVFeHByZXNzaW9uUmFuZ2VMaW5lQW5kQ29sdW1uKToKKyAg
ICAgICAgLSBGYWN0b3JlZCB0aGlzIG91dCBvZiBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9m
ZnNldCgpIHNvIHRoYXQgaXQgY2FuCisgICAgICAgICAgYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUg
cGxhY2VzLgorICAgICAgICAoSlNDOjpkdW1wTGluZUNvbHVtbkVudHJ5KToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmR1bXBPcERlYnVnTGluZUNvbHVtbkluZm9MaXN0KToK
KyAgICAgICAgLSBTb21lIGR1bXBlcnMgZm9yIGRlYnVnZ2luZyB1c2Ugb25seS4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9mZnNl
dEZvckxpbmVBbmRDb2x1bW4pOgorICAgICAgICAtIEZpbmRzIHRoZSBiZXN0IGZpdCBvcF9kZWJ1
ZyBmb3IgdGhlIHNwZWNpZmllZCBsaW5lIGFuZCBjb2x1bW4gdmFsdWVzLgorICAgICAgICAgIFRo
aXMgImZpbmQiIGlzIHBlcmZvcm1lZCBhcyBmb2xsb3dzOgorICAgICAgICAgIDEuIERvIGEgYmlu
YXJ5IHNlYXJjaCBvbiB0aGUgc29ydGVkIG9wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3QgdG8gZmlu
ZAorICAgICAgICAgICAgIHRoZSBuZWFyZXN0IHByZWNlZGluZyBvcF9kZWJ1Zy4KKyAgICAgICAg
ICAyLiBTZWFyY2ggYmFja3dhcmRzIGZyb20gdGhhdCBvcF9kZWJ1ZyB0byBzZWUgaWYgdGhlcmUg
YXJlIGFueSBwcmVjZWRpbmcKKyAgICAgICAgICAgICBvcF9kZWJ1ZyBieXRlY29kZXMgd2l0aCB0
aGUgZXhhY3Qgc2FtZSBsaW5lIGFuZCBjb2x1bW4gYXMgdGhlIG9uZSB3ZQorICAgICAgICAgICAg
IGZvdW5kLiBXZSB3YW50IHRoZSBlYXJsaWVzdCBvbmUgYmVjYXVzZSB3aGVuIHdlIGhhdmUgbXVs
dGlwbGUKKyAgICAgICAgICAgICBwb3RlbnRpYWwgYnJlYWtwb2ludCB0YXJnZXRzIHRoYXQgbWFw
IHRvIGEgZ2l2ZW4gbGluZSBhbmQgY29sdW1uLCBhCisgICAgICAgICAgICAgZGVidWdnZXIgdXNl
ciB3b3VsZCBleHBlY3QgdG8gYnJlYWsgb24gdGhlIGZpcnN0IG9uZSBmaXJzdCBhbmQgc3RlcAor
ICAgICAgICAgICAgIHRocm91Z2ggdGhlIHJlc3QgdGhlcmVhZnRlciBpZiBuZWVkZWQuCisgICAg
ICAgIChKU0M6OmNvbXBhcmVMaW5lQ29sdW1uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjpvcERlYnVnTGluZUNvbHVtbkluZm9MaXN0KToKKyAgICAgICAgLSBDcmVhdGVz
IHRoZSBzb3J0ZWQgb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCBvbiBkZW1hbmQuIFRoaXMgbGlz
dCBpcworICAgICAgICAgIHN0b3JlZCBpbiB0aGUgVW5saW5rZWRDb2RlQmxvY2sncyByYXJlRGF0
YS4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorCiAyMDE0LTAxLTE2
ICBQZXRlciBNb2xuYXIgIDxwbW9sbmFyLnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIHdvcmthcm91bmQgZm9yIGNvbXBpbGVycyBub3Qgc3VwcG9ydGluZyBl
eHBsaWNpdCBvdmVycmlkZSBjb250cm9sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTYyMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MaW5lSW5mby5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTGluZUNvbHVtbkluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2MjA3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgxNiw3ICs4MTYsNyBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSW5zdHJ1Y3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEp1bXBUYWJsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExpbmVJbmZvLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMaW5lQ29sdW1uSW5mby5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTExJbnRDYWxsTGlua0luZm8uaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wY29kZS5oIiAvPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVy
cwkocmV2aXNpb24gMTYyMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAyLDcgKzE1MDIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxMaW5lSW5mby5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExp
bmVDb2x1bW5JbmZvLmgiPgogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTExJbnRDYWxs
TGlua0luZm8uaCI+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTYyMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDYgQEAKIAkJMEYw
QjgzQTcxNEJDRjUwNzAwODg1QjRGIC8qIENvZGVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29k
ZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBOTE0QkNGNTYyMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0
RiAvKiBIYW5kbGVySW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBC
ODNBQTE0QkNGNUI5MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMEI4M0FEMTRCQ0Y2MDQw
MDg4NUI0RiAvKiBMaW5lSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwQjgzQUMxNEJDRjYwMjAwODg1QjRGIC8qIExpbmVJbmZvLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzQjAxNEJD
RjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExp
bmtJbmZvLmNwcCAqLzsgfTsKIAkJMEYwQjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5r
SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
QjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4M0I5MTRCQ0Y5NUYwMDg4NUI0
RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8q
IENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzMTMsNiArMTMxMiw3IEBACiAJCUU0OURD
MTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8q
IExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9Owog
CQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMw
IC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlGRTM3REQ1NjE4M0MxRTg4MDAxOEIyRjAgLyogTGluZUNvbHVtbkluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzdERDU1MTgz
QzFFODgwMDE4QjJGMCAvKiBMaW5lQ29sdW1uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBW
TUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovOyB9Owog
CQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFFMTVCRDJFMDcwMDZGNTRG
MyAvKiBWTUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFNTkzMkE3MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1OTMyQTUx
ODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi87IH07CkBAIC0xNDM1LDcgKzE0
MzUsNiBAQAogCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhbmRsZXJJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9u
UmFuZ2VJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25S
YW5nZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwQjgzQUMxNEJDRjYw
MjAwODg1QjRGIC8qIExpbmVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExpbmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0FFMTRCQ0Y3
MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ2FsbExpbmtJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRU
b0J5dGVjb2RlT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxS
ZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNzIzLDYgKzI3MjIsNyBAQAogCQlGNjkyQTg4NzAyNTU1OTdEMDFGRjYwRjcgLyogSlND
SlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0NKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzdERDU1MTgzQzFFODgwMDE4QjJGMCAv
KiBMaW5lQ29sdW1uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5l
Q29sdW1uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQy
RTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUVudHJ5U2NvcGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDIzMCw2ICs0MjMwLDcgQEAKIAkJOTY5QTA3OEYw
RUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlGRTM3REQ1NTE4M0MxRTg4MDAxOEIyRjAgLyogTGluZUNvbHVt
bkluZm8uaCAqLywKIAkJCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5
QWxsb2NhdGlvblByb2ZpbGUuaCAqLywKIAkJCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyog
QXJyYXlQcm9maWxlLmNwcCAqLywKQEAgLTQyODAsNyArNDI4MSw2IEBACiAJCQkJQkNGRDhDOTEw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovLAogCQkJCTBGQjU0Njc4MTRGNUM0Njgw
MDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2NzYx
NEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi8sCi0JCQkJMEYw
QjgzQUMxNEJDRjYwMjAwODg1QjRGIC8qIExpbmVJbmZvLmggKi8sCiAJCQkJMEYwRkM0NTgxNEJE
MTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8sCiAJCQkJMEZCNTQ2N0MxNEY1
Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJ
CTBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmggKi8sCkBAIC00NDcxLDYgKzQ0NzEsNyBAQAogCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MzI0Mzk0MTg1
Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBpbiBI
ZWFkZXJzICovLAogCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzdERDU2MTgzQzFFODgwMDE4QjJG
MCAvKiBMaW5lQ29sdW1uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzM1QjgxNjM5QzFF
QTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1ODQwRTI5MTg3Q0E1RTYwMDg0M0IxMCAvKiBpbmxpbmUtYW5kLW1pbmlmeS1zdHlsZXNoZWV0
cy1hbmQtc2NyaXB0cy5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQwRTJCMTg3Q0E3NUIwMDg0
M0IxMCAvKiBqc21pbi5weSBpbiBIZWFkZXJzICovLApAQCAtNDkzNiw3ICs0OTM3LDYgQEAKIAkJ
CQlCQzE4QzQzMTBFMTZGNUNEMDBCMzQ0NjAgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNTJFMEUxNkZDRTEwMEIzNDQ2MCAvKiBMZXhlci5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1MTNFNUNCMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTBGMEI4M0FEMTRCQ0Y2MDQwMDg4NUI0RiAvKiBMaW5lSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IzQzMxMDE1OUQ3RjAwMjg2NUU3IC8qIExpbmtCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0
YWJsZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTJFQTZCMEZCNDYwQ0YwMDYwMUYw
NiAvKiBMaXRlcmFsUGFyc2VyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjIwNzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3
endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNTY1LDYgKzI1NjUs
MjMgQEAgdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjbwogICAgIGxpbmUg
Kz0gbV9vd25lckV4ZWN1dGFibGUtPmxpbmVObygpOwogfQogCit1bnNpZ25lZCBDb2RlQmxvY2s6
Om9wRGVidWdCeXRlY29kZU9mZnNldEZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVu
c2lnbmVkJiBjb2x1bW4pCit7CisgICAgdW5zaWduZWQgbGluZUFkanVzdG1lbnQgPSBtX293bmVy
RXhlY3V0YWJsZS0+bGluZU5vKCk7CisgICAgQVNTRVJUKGxpbmUgPj0gbGluZUFkanVzdG1lbnQp
OworICAgIHVuc2lnbmVkIHVubGlua2VkTGluZSA9IGxpbmUgLSBsaW5lQWRqdXN0bWVudDsKKyAg
ICB1bnNpZ25lZCBjb2x1bW5BZGp1c3RtZW50ID0gdW5saW5rZWRMaW5lID8gMSA6IGZpcnN0TGlu
ZUNvbHVtbk9mZnNldCgpOworICAgIEFTU0VSVChjb2x1bW4gPj0gY29sdW1uQWRqdXN0bWVudCk7
CisgICAgdW5zaWduZWQgdW5saW5rZWRDb2x1bW4gPSBjb2x1bW4gLSBjb2x1bW5BZGp1c3RtZW50
OworCisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX3VubGlua2VkQ29kZS0+b3BEZWJ1
Z0J5dGVjb2RlT2Zmc2V0Rm9yTGluZUFuZENvbHVtbih1bmxpbmtlZExpbmUsIHVubGlua2VkQ29s
dW1uKTsKKyAgICBpZiAoYnl0ZWNvZGVPZmZzZXQgIT0gVUlOVF9NQVgpIHsKKyAgICAgICAgbGlu
ZSA9IHVubGlua2VkTGluZSArIGxpbmVBZGp1c3RtZW50OworICAgICAgICBjb2x1bW4gPSB1bmxp
bmtlZENvbHVtbiArICh1bmxpbmtlZExpbmUgPyAxIDogZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCkp
OworICAgIH0KKyAgICByZXR1cm4gYnl0ZWNvZGVPZmZzZXQ7Cit9CisKIHZvaWQgQ29kZUJsb2Nr
OjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7CiAjaWYgRU5BQkxFKEpJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE2MjA3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC02NSw3ICs2NSw2IEBACiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAjaW5j
bHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oIgotI2luY2x1ZGUgIkxpbmVJbmZvLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxh
dGlvbi5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCkBAIC0xNzUsNiArMTc0LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNvbHVt
bk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICB2
b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBpbnQmIGRpdm90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNp
Z25lZCYgY29sdW1uKTsKKyAgICB1bnNpZ25lZCBvcERlYnVnQnl0ZWNvZGVPZmZzZXRGb3JMaW5l
QW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGluZUNvbHVtbkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGluZUNvbHVtbkluZm8uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5lQ29sdW1uSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBMaW5lQ29sdW1uSW5mb19oCisjZGVmaW5l
IExpbmVDb2x1bW5JbmZvX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBMaW5lQ29sdW1u
SW5mbyB7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgdW5zaWduZWQgbGlu
ZTsKKyAgICB1bnNpZ25lZCBjb2x1bW47CisKKyAgICBib29sIG9wZXJhdG9yIDwoY29uc3QgTGlu
ZUNvbHVtbkluZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGxpbmUgPT0gb3Ro
ZXIubGluZSkgeworICAgICAgICAgICAgaWYgKGNvbHVtbiA9PSBvdGhlci5jb2x1bW4pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIuaW5zdHJ1Y3Rpb25P
ZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gY29sdW1uIDwgb3RoZXIuY29sdW1uOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBsaW5lIDwgb3RoZXIubGluZTsKKyAgICB9CisKKyAgICBzdHJ1
Y3QgTGluZUNvbHVtblBhaXIgeworICAgICAgICBMaW5lQ29sdW1uUGFpcih1bnNpZ25lZCBsaW5l
LCB1bnNpZ25lZCBjb2x1bW4pCisgICAgICAgICAgICA6IGxpbmUobGluZSksIGNvbHVtbihjb2x1
bW4pCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGxpbmU7CisgICAg
ICAgIHVuc2lnbmVkIGNvbHVtbjsKKyAgICB9OworCisgICAgYm9vbCBvcGVyYXRvciA9PShjb25z
dCBMaW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAgKGxp
bmUgPT0gcGFpci5saW5lKSAmJiAoY29sdW1uID09IHBhaXIuY29sdW1uKTsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yICE9KGNvbnN0IExpbmVDb2x1bW5QYWlyJiBwYWlyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICAobGluZSAhPSBwYWlyLmxpbmUpIHx8IChjb2x1bW4gIT0gcGFp
ci5jb2x1bW4pOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IgPChjb25zdCBMaW5lQ29sdW1u
UGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChsaW5lID09IHBhaXIubGluZSkK
KyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCBwYWlyLmNvbHVtbjsKKyAgICAgICAgcmV0dXJu
IGxpbmUgPCBwYWlyLmxpbmU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciA8PShjb25zdCBM
aW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChsaW5lID09IHBh
aXIubGluZSkKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPD0gcGFpci5jb2x1bW47CisgICAg
ICAgIHJldHVybiBsaW5lIDwgcGFpci5saW5lOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ig
Pihjb25zdCBMaW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChs
aW5lID09IHBhaXIubGluZSkKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPiBwYWlyLmNvbHVt
bjsKKyAgICAgICAgcmV0dXJuIGxpbmUgPiBwYWlyLmxpbmU7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciA+PShjb25zdCBMaW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChsaW5lID09IHBhaXIubGluZSkKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPj0g
cGFpci5jb2x1bW47CisgICAgICAgIHJldHVybiBsaW5lID4gcGFpci5saW5lOworICAgIH0KK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gTGluZUNvbHVtbkluZm9faApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmVJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmVJbmZvLmgJKHJldmlzaW9uIDE2
MjA3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5lSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMaW5lSW5mb19oCi0jZGVmaW5lIExpbmVJbmZvX2gK
LQotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0
cnVjdCBMaW5lSW5mbyB7Ci0gICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgaW50
MzJfdCBsaW5lTnVtYmVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBM
aW5lSW5mb19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYyMDc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMjU2LDYgKzI1Nyw3OCBAQCBpbnQg
VW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlCiAgICAgcmV0dXJuIGxpbmU7CiB9
CiAKK2lubGluZSB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpkZWNvZGVFeHByZXNzaW9uUmFuZ2VM
aW5lQW5kQ29sdW1uKEV4cHJlc3Npb25SYW5nZUluZm8mIGluZm8sCisgICAgdW5zaWduZWQmIGxp
bmUsIHVuc2lnbmVkJiBjb2x1bW4pCit7CisgICAgc3dpdGNoIChpbmZvLm1vZGUpIHsKKyAgICBj
YXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2RlOgorICAgICAgICBpbmZvLmRlY29k
ZUZhdExpbmVNb2RlKGxpbmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhw
cmVzc2lvblJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZToKKyAgICAgICAgaW5mby5kZWNvZGVGYXRD
b2x1bW5Nb2RlKGxpbmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVz
c2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU6IHsKKyAgICAgICAgdW5zaWduZWQg
ZmF0SW5kZXggPSBpbmZvLnBvc2l0aW9uOworICAgICAgICBFeHByZXNzaW9uUmFuZ2VJbmZvOjpG
YXRQb3NpdGlvbiYgZmF0UG9zID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0
aW9uc1tmYXRJbmRleF07CisgICAgICAgIGxpbmUgPSBmYXRQb3MubGluZTsKKyAgICAgICAgY29s
dW1uID0gZmF0UG9zLmNvbHVtbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0gLy8gc3dp
dGNoCit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygpIGFu
ZCBkdW1wTGluZUNvbHVtbkluZm9MaXN0KCkgYXJlIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgZm9y
CisvLyBkZWJ1Z2dpbmcgb25seS4gVGhleSBhcmUgbm90IG5vcm1hbGx5IGNhbGxlZCwgYnV0IHdl
IGluY2x1ZGUgdGhlbSBpbiB0aGUgZGVidWcgYnVpbGQKKy8vIGJ5IGRlZmF1bHQgdG8gYXZvaWQg
Yml0LXJvdC4KKworc3RhdGljIHZvaWQgZHVtcExpbmVDb2x1bW5FbnRyeShzaXplX3QgaW5kZXgs
IGNvbnN0IFJlZkNvdW50ZWRBcnJheTxVbmxpbmtlZEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25z
LCB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29s
dW1uKQoreworICAgIE9wY29kZUlEIG9wY29kZSA9IGluc3RydWN0aW9uc1tpbnN0cnVjdGlvbk9m
ZnNldF0udS5vcGNvZGU7CisgICAgY29uc3QgY2hhciogZXZlbnQgPSAiIjsKKyAgICBpZiAob3Bj
b2RlID09IG9wX2RlYnVnKSB7CisgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb25zW2luc3RydWN0
aW9uT2Zmc2V0ICsgMV0udS5vcGVyYW5kKSB7CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVQcm9n
cmFtOiBldmVudCA9ICIgV2lsbEV4ZWN1dGVQcm9ncmFtIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RGlkRXhlY3V0ZVByb2dyYW06IGV2ZW50ID0gIiBEaWRFeGVjdXRlUHJvZ3JhbSI7IGJyZWFrOwor
ICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOiBldmVudCA9ICIgRGlkRW50ZXJDYWxsRnJh
bWUiOyBicmVhazsKKyAgICAgICAgY2FzZSBEaWRSZWFjaEJyZWFrcG9pbnQ6IGV2ZW50ID0gIiBE
aWRSZWFjaEJyZWFrcG9pbnQiOyBicmVhazsKKyAgICAgICAgY2FzZSBXaWxsTGVhdmVDYWxsRnJh
bWU6IGV2ZW50ID0gIiBXaWxsTGVhdmVDYWxsRnJhbWUiOyBicmVhazsKKyAgICAgICAgY2FzZSBX
aWxsRXhlY3V0ZVN0YXRlbWVudDogZXZlbnQgPSAiIFdpbGxFeGVjdXRlU3RhdGVtZW50IjsgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0YoIiAgWyV6dV0gcGMgJXUgQCBsaW5l
ICV1IGNvbCAldSA6ICVzJXNcbiIsIGluZGV4LCBpbnN0cnVjdGlvbk9mZnNldCwgbGluZSwgY29s
dW1uLCBvcGNvZGVOYW1lc1tvcGNvZGVdLCBldmVudCk7Cit9CisKK3ZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKCkKK3sKKyAgICBWZWN0b3I8RXhwcmVzc2lv
blJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsKKworICAgIHNp
emVfdCBzaXplID0gbV9leHByZXNzaW9uSW5mby5zaXplKCk7CisgICAgZGF0YUxvZ0YoIlVubGlu
a2VkQ29kZUJsb2NrICVwIGV4cHJlc3Npb25SYW5nZUluZm9bJXp1XSB7XG4iLCB0aGlzLCBzaXpl
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBFeHBy
ZXNzaW9uUmFuZ2VJbmZvJiBpbmZvID0gZXhwcmVzc2lvbkluZm9baV07CisgICAgICAgIHVuc2ln
bmVkIGxpbmU7CisgICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKKyAgICAgICAgZGVjb2RlRXhwcmVz
c2lvblJhbmdlTGluZUFuZENvbHVtbihpbmZvLCBsaW5lLCBjb2x1bW4pOworICAgICAgICBkdW1w
TGluZUNvbHVtbkVudHJ5KGksIGluc3RydWN0aW9ucygpLCBpbmZvLmluc3RydWN0aW9uT2Zmc2V0
LCBsaW5lLCBjb2x1bW4pOworICAgIH0KKyAgICBkYXRhTG9nKCJ9XG4iKTsKK30KKwordm9pZCBV
bmxpbmtlZENvZGVCbG9jazo6ZHVtcE9wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3QoKQoreworICAg
IExpbmVDb2x1bW5JbmZvTGlzdCYgaW5mb0xpc3QgPSB0aGlzLT5vcERlYnVnTGluZUNvbHVtbklu
Zm9MaXN0KCk7CisgICAgc2l6ZV90IHNpemUgPSBpbmZvTGlzdC5zaXplKCk7CisKKyAgICBkYXRh
TG9nRigiVW5saW5rZWRDb2RlQmxvY2sgJXAgb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdFslenVd
IHtcbiIsIHRoaXMsIHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgIExpbmVDb2x1bW5JbmZvJiBpbmZvID0gaW5mb0xpc3RbaV07CisgICAgICAg
IGR1bXBMaW5lQ29sdW1uRW50cnkoaSwgaW5zdHJ1Y3Rpb25zKCksIGluZm8uaW5zdHJ1Y3Rpb25P
ZmZzZXQsIGluZm8ubGluZSwgaW5mby5jb2x1bW4pOworICAgIH0KKyAgICBkYXRhTG9nKCJ9XG4i
KTsKK30KKyNlbmRpZgorCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VG
b3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKICAgICBpbnQmIGRpdm90
LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2ln
bmVkJiBjb2x1bW4pCiB7CkBAIC0yODksMjIgKzM2Miw5MSBAQCB2b2lkIFVubGlua2VkQ29kZUJs
b2NrOjpleHByZXNzaW9uUmFuZ2VGCiAgICAgc3RhcnRPZmZzZXQgPSBpbmZvLnN0YXJ0T2Zmc2V0
OwogICAgIGVuZE9mZnNldCA9IGluZm8uZW5kT2Zmc2V0OwogICAgIGRpdm90ID0gaW5mby5kaXZv
dFBvaW50OworICAgIGRlY29kZUV4cHJlc3Npb25SYW5nZUxpbmVBbmRDb2x1bW4oaW5mbywgbGlu
ZSwgY29sdW1uKTsKK30KIAotICAgIHN3aXRjaCAoaW5mby5tb2RlKSB7Ci0gICAgY2FzZSBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKLSAgICAgICAgaW5mby5kZWNvZGVGYXRMaW5l
TW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25S
YW5nZUluZm86OkZhdENvbHVtbk1vZGU6Ci0gICAgICAgIGluZm8uZGVjb2RlRmF0Q29sdW1uTW9k
ZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5n
ZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGZhdEluZGV4
ID0gaW5mby5wb3NpdGlvbjsKLSAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRp
b24mIGZhdFBvcyA9IG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnNbZmF0
SW5kZXhdOwotICAgICAgICBsaW5lID0gZmF0UG9zLmxpbmU7Ci0gICAgICAgIGNvbHVtbiA9IGZh
dFBvcy5jb2x1bW47Ci0gICAgICAgIGJyZWFrOwordW5zaWduZWQgVW5saW5rZWRDb2RlQmxvY2s6
Om9wRGVidWdCeXRlY29kZU9mZnNldEZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVu
c2lnbmVkJiBjb2x1bW4pCit7CisgICAgaWYgKCFtX2V4cHJlc3Npb25JbmZvLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIFVJTlRfTUFYOworCisgICAgLy8gRmluZCB0aGUgYmVzdCBmaXQgb3BfZGVi
dWcgb3Bjb2RlIGZvciB0aGUgcmVxdWVzdGVkIGxpbmUgYW5kIGNvbHVtbjoKKyAgICAvLyBUaGUg
YmVzdCBmaXQgb3BfZGVidWcgd2lsbCBiZSB0aGUgb25lIHRoYXQgaXMgcHJlY2VkaW5nIGJ1dCBp
cyBuZWFyZXN0IHRvCisgICAgLy8gdGhlIHNwZWNpZmllZCBsaW5lIGFuZCBjb2x1bW4uCisgICAg
TGluZUNvbHVtbkluZm86OkxpbmVDb2x1bW5QYWlyIHRhcmdldChsaW5lLCBjb2x1bW4pOworICAg
IExpbmVDb2x1bW5JbmZvTGlzdCYgaW5mb0xpc3QgPSBvcERlYnVnTGluZUNvbHVtbkluZm9MaXN0
KCk7CisgICAgaW50IGxvdyA9IDA7CisgICAgaW50IGhpZ2ggPSBpbmZvTGlzdC5zaXplKCk7Cisg
ICAgd2hpbGUgKGhpZ2ggLSBsb3cgPiAxKSB7CisgICAgICAgIGludCBjdXJyZW50ID0gbG93ICsg
KGhpZ2ggLSBsb3cpIC8gMjsKKyAgICAgICAgTGluZUNvbHVtbkluZm8mIGN1cnJlbnRJbmZvID0g
aW5mb0xpc3RbY3VycmVudF07CisgICAgICAgIGlmIChjdXJyZW50SW5mbyA8IHRhcmdldCkKKyAg
ICAgICAgICAgIGxvdyA9IGN1cnJlbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhpZ2gg
PSBjdXJyZW50OwogICAgIH0KLSAgICB9IC8vIHN3aXRjaAorCisgICAgQVNTRVJUKGxvdyA+PSAw
KTsKKyAgICBMaW5lQ29sdW1uSW5mbyYgaW5mbyA9IGluZm9MaXN0W2xvd107CisgICAgQVNTRVJU
KGluZm8gPD0gdGFyZ2V0KTsKKworICAgIGxpbmUgPSBpbmZvLmxpbmU7CisgICAgY29sdW1uID0g
aW5mby5jb2x1bW47CisKKyAgICAvLyBGaW5kIHRoZSBlYXJsaWVzdCBvcF9kZWJ1ZyBvcGNvZGUg
dGhhdCBoYXMgdGhpcyBzYW1lIGJlc3QgZml0IGxpbmUgYW5kIGNvbHVtbjoKKyAgICBMaW5lQ29s
dW1uSW5mbzo6TGluZUNvbHVtblBhaXIgbWF0Y2gobGluZSwgY29sdW1uKTsKKyAgICBmb3IgKGlu
dCBpID0gbG93IC0gMTsgaSA+IDA7IGktLSkgeworICAgICAgICBMaW5lQ29sdW1uSW5mbyYgY3Vy
cmVudEluZm8gPSBpbmZvTGlzdFtpXTsKKyAgICAgICAgaWYgKGN1cnJlbnRJbmZvICE9IG1hdGNo
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGxvdyA9IGk7CisgICAgfQorCisgICAgaW5m
byA9IGluZm9MaXN0W2xvd107CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gaW5mby5pbnN0cnVjdGlv
bk9mZnNldDsKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKClbb2Zmc2V0XS51Lm9wY29kZSA9PSBv
cF9kZWJ1Zyk7CisgICAgQVNTRVJUKGluZm8ubGluZSA8PSBsaW5lKTsKKyAgICBBU1NFUlQoaW5m
by5jb2x1bW4gPT0gY29sdW1uKTsKKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3N0YXRpYyBi
b29sIGNvbXBhcmVMaW5lQ29sdW1uSW5mbyhMaW5lQ29sdW1uSW5mbyYgZmlyc3QsIExpbmVDb2x1
bW5JbmZvJiBzZWNvbmQpCit7CisgICAgcmV0dXJuIGZpcnN0IDwgc2Vjb25kOworfQorCitVbmxp
bmtlZENvZGVCbG9jazo6TGluZUNvbHVtbkluZm9MaXN0JiBVbmxpbmtlZENvZGVCbG9jazo6b3BE
ZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCgpCit7CisgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOworCisgICAgaWYgKG1fcmFyZURhdGEtPm1fb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCkg
eworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YS0+bV9vcERlYnVnTGluZUNvbHVtbkluZm9MaXN0
LT5zaXplKCkgPD0gbV9leHByZXNzaW9uSW5mby5zaXplKCkpOworICAgICAgICByZXR1cm4gKm1f
cmFyZURhdGEtPm1fb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdDsKKyAgICB9CisKKyAgICBWZWN0
b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5m
bzsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworCisgICAgbV9y
YXJlRGF0YS0+bV9vcERlYnVnTGluZUNvbHVtbkluZm9MaXN0ID0gc3RkOjp1bmlxdWVfcHRyPExp
bmVDb2x1bW5JbmZvTGlzdD4obmV3IExpbmVDb2x1bW5JbmZvTGlzdCgpKTsKKyAgICBMaW5lQ29s
dW1uSW5mb0xpc3QmIGluZm9MaXN0ID0gKm1fcmFyZURhdGEtPm1fb3BEZWJ1Z0xpbmVDb2x1bW5J
bmZvTGlzdDsKKworICAgIGZvciAoc2l6ZV90IHNyYyA9IDA7IHNyYyA8IHNpemU7IHNyYysrKSB7
CisgICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm8mIGV4cHJJbmZvID0gZXhwcmVzc2lvbkluZm9b
c3JjXTsKKyAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBleHBySW5mby5pbnN0
cnVjdGlvbk9mZnNldDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlID0gaW5zdHJ1Y3Rpb25zKClb
aW5zdHJ1Y3Rpb25PZmZzZXRdLnUub3Bjb2RlOworICAgICAgICBpZiAob3Bjb2RlID09IG9wX2Rl
YnVnKSB7CisgICAgICAgICAgICBMaW5lQ29sdW1uSW5mbyBpbmZvOworICAgICAgICAgICAgaW5m
by5pbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9uT2Zmc2V0OworICAgICAgICAgICAgZGVj
b2RlRXhwcmVzc2lvblJhbmdlTGluZUFuZENvbHVtbihleHBySW5mbywgaW5mby5saW5lLCBpbmZv
LmNvbHVtbik7CisgICAgICAgICAgICBpbmZvTGlzdC5hcHBlbmQoaW5mbyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgaW5mb0xpc3Quc2hyaW5rVG9GaXQoKTsKKworICAgIHN0ZDo6c29ydChpbmZv
TGlzdC5iZWdpbigpLCBpbmZvTGlzdC5lbmQoKSwgY29tcGFyZUxpbmVDb2x1bW5JbmZvKTsKKwor
ICAgIHJldHVybiAqbV9yYXJlRGF0YS0+bV9vcERlYnVnTGluZUNvbHVtbkluZm9MaXN0LmdldCgp
OwogfQogCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25l
ZCBpbnN0cnVjdGlvbk9mZnNldCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxNjIwNzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIkxpbmVJbmZvLmgi
CisjaW5jbHVkZSAiTGluZUNvbHVtbkluZm8uaCIKICNpbmNsdWRlICJQYXJzZXJNb2Rlcy5oIgog
I2luY2x1ZGUgIlJlZ0V4cC5oIgogI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCkBAIC00Miw2
ICs0Miw3IEBACiAKICNpbmNsdWRlIDx3dGYvQ29tcHJlc3Npb24uaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZEFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00NDQsNiArNDQ1LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwKICAgICAgICAgaW50JiBzdGFydE9mZnNl
dCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKKyAg
ICB1bnNpZ25lZCBvcERlYnVnQnl0ZWNvZGVPZmZzZXRGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVk
JiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKIAogICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZl
YXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCB1bnNpZ25lZCBmaXJz
dExpbmUsIHVuc2lnbmVkIGxpbmVDb3VudCwgdW5zaWduZWQgZW5kQ29sdW1uKQogICAgIHsKQEAg
LTQ2Miw2ICs0NjQsOSBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBzdGFy
dENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBj
b25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCisgICAgdm9pZCBkdW1wRXhwcmVzc2lvblJh
bmdlSW5mbygpOyAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seS4KKyAgICB2b2lkIGR1bXBP
cERlYnVnTGluZUNvbHVtbkluZm9MaXN0KCk7IC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5
LgorCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBD
b2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mKTsKICAgICB+VW5saW5rZWRDb2RlQmxvY2so
KTsKQEAgLTQ4Miw2ICs0ODcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fcmFyZURhdGEg
PSBhZG9wdFB0cihuZXcgUmFyZURhdGEpOwogICAgIH0KIAorICAgIHZvaWQgZGVjb2RlRXhwcmVz
c2lvblJhbmdlTGluZUFuZENvbHVtbihFeHByZXNzaW9uUmFuZ2VJbmZvJiwgdW5zaWduZWQmIGxp
bmUsIHVuc2lnbmVkJiBjb2x1bW4pOworCisgICAgdHlwZWRlZiBWZWN0b3I8TGluZUNvbHVtbklu
Zm8+IExpbmVDb2x1bW5JbmZvTGlzdDsKKyAgICBMaW5lQ29sdW1uSW5mb0xpc3QmIG9wRGVidWdM
aW5lQ29sdW1uSW5mb0xpc3QoKTsKKwogICAgIFJlZkNvdW50ZWRBcnJheTxVbmxpbmtlZEluc3Ry
dWN0aW9uPiBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zOwogCiAgICAgaW50IG1fbnVtUGFyYW1ldGVy
czsKQEAgLTU0Niw2ICs1NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZlY3RvcjxVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCiAgICAgICAgIFZlY3Rv
cjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNzaW9uSW5mb0ZhdFBv
c2l0aW9uczsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPExpbmVDb2x1bW5JbmZvTGlzdD4gbV9v
cERlYnVnTGluZUNvbHVtbkluZm9MaXN0OwogICAgIH07CiAKIHByaXZhdGU6Cg==
</data>
<flag name="review"
          id="245308"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="245316"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221490</attachid>
            <date>2014-01-17 13:36:28 -0800</date>
            <delta_ts>2014-01-18 02:40:22 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-127127.patch</filename>
            <type>text/plain</type>
            <size>30707</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMTcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE0LTAxLTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRpbmcgVW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9mZnNldEZvckxpbmVBbmRD
b2x1bW4oKS4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjcxMjcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAg
ICAgSW4gb3JkZXIgdG8gaW1wbGVtZW50IGJ5dGVjb2RlIGxldmVsIGJyZWFrcG9pbnRzLCB3ZSBu
ZWVkIGEgbWVjaGFuaXNtCisgICAgICAgIGZvciBjb21wdXRpbmcgdGhlIGJlc3QgZml0IG9wX2Rl
YnVnIGJ5dGVjb2RlIG9mZnNldCBmb3IgYW55IHZhbGlkIGdpdmVuCisgICAgICAgIGxpbmUgYW5k
IGNvbHVtbiB2YWx1ZSBpbiB0aGUgc291cmNlLiBUaGUgImJlc3QgZml0IiBpbiB0aGlzIGNhc2Ug
aXMgdGhlCisgICAgICAgIG5lYXJlc3QgcHJlY2VkaW5nIG9wX2RlYnVnIGJ5dGVjb2RlIHJlbGF0
aXZlIHRvIHRoZSBwb3NpdGlvbiBzcGVjaWZpZWQKKyAgICAgICAgYnkgdGhlIGxpbmUgYW5kIGNv
bHVtbi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcERlYnVn
Qnl0ZWNvZGVPZmZzZXRGb3JMaW5lQW5kQ29sdW1uKToKKyAgICAgICAgLSBDb252ZXJ0IHRoZSBs
aW5lIGFuZCBjb2x1bW4gdG8gdW5saW5rZWQgbGluZSBhbmQgY29sdW1uIHZhbHVlcyBhbmQKKyAg
ICAgICAgICBwYXNzIHRoZW0gdG8gVW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9m
ZnNldEZvckxpbmVBbmRDb2x1bW4oKQorICAgICAgICAgIHRvIGRvIHRoZSByZWFsIHdvcmsuCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9MaW5l
Q29sdW1uSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJh
dG9yIDwpOgorICAgICAgICAoSlNDOjpMaW5lQ29sdW1uSW5mbzo6TGluZUNvbHVtblBhaXI6Okxp
bmVDb2x1bW5QYWlyKToKKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yID09
KToKKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yICE9KToKKyAgICAgICAg
KEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yIDw9KToKKyAgICAgICAgKEpTQzo6TGluZUNv
bHVtbkluZm86Om9wZXJhdG9yID4pOgorICAgICAgICAoSlNDOjpMaW5lQ29sdW1uSW5mbzo6b3Bl
cmF0b3IgPj0pOgorICAgICAgICAqIGJ5dGVjb2RlL0xpbmVJbmZvLmg6IFJlbW92ZWQuCisKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpkZWNvZGVFeHByZXNzaW9uUmFuZ2VMaW5lQW5kQ29sdW1uKToKKyAg
ICAgICAgLSBGYWN0b3JlZCB0aGlzIG91dCBvZiBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9m
ZnNldCgpIHNvIHRoYXQgaXQgY2FuCisgICAgICAgICAgYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUg
cGxhY2VzLgorICAgICAgICAoSlNDOjpkdW1wTGluZUNvbHVtbkVudHJ5KToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmR1bXBPcERlYnVnTGluZUNvbHVtbkluZm9MaXN0KToK
KyAgICAgICAgLSBTb21lIGR1bXBlcnMgZm9yIGRlYnVnZ2luZyB1c2Ugb25seS4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9mZnNl
dEZvckxpbmVBbmRDb2x1bW4pOgorICAgICAgICAtIEZpbmRzIHRoZSBiZXN0IGZpdCBvcF9kZWJ1
ZyBmb3IgdGhlIHNwZWNpZmllZCBsaW5lIGFuZCBjb2x1bW4gdmFsdWVzLgorICAgICAgICAgIFRo
aXMgImZpbmQiIGlzIHBlcmZvcm1lZCBhcyBmb2xsb3dzOgorICAgICAgICAgIDEuIERvIGEgYmlu
YXJ5IHNlYXJjaCBvbiB0aGUgc29ydGVkIG9wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3QgdG8gZmlu
ZAorICAgICAgICAgICAgIHRoZSBuZWFyZXN0IHByZWNlZGluZyBvcF9kZWJ1Zy4KKyAgICAgICAg
ICAyLiBTZWFyY2ggYmFja3dhcmRzIGZyb20gdGhhdCBvcF9kZWJ1ZyB0byBzZWUgaWYgdGhlcmUg
YXJlIGFueSBwcmVjZWRpbmcKKyAgICAgICAgICAgICBvcF9kZWJ1ZyBieXRlY29kZXMgd2l0aCB0
aGUgZXhhY3Qgc2FtZSBsaW5lIGFuZCBjb2x1bW4gYXMgdGhlIG9uZSB3ZQorICAgICAgICAgICAg
IGZvdW5kLiBXZSB3YW50IHRoZSBlYXJsaWVzdCBvbmUgYmVjYXVzZSB3aGVuIHdlIGhhdmUgbXVs
dGlwbGUKKyAgICAgICAgICAgICBwb3RlbnRpYWwgYnJlYWtwb2ludCB0YXJnZXRzIHRoYXQgbWFw
IHRvIGEgZ2l2ZW4gbGluZSBhbmQgY29sdW1uLCBhCisgICAgICAgICAgICAgZGVidWdnZXIgdXNl
ciB3b3VsZCBleHBlY3QgdG8gYnJlYWsgb24gdGhlIGZpcnN0IG9uZSBmaXJzdCBhbmQgc3RlcAor
ICAgICAgICAgICAgIHRocm91Z2ggdGhlIHJlc3QgdGhlcmVhZnRlciBpZiBuZWVkZWQuCisgICAg
ICAgIChKU0M6OmNvbXBhcmVMaW5lQ29sdW1uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjpvcERlYnVnTGluZUNvbHVtbkluZm9MaXN0KToKKyAgICAgICAgLSBDcmVhdGVz
IHRoZSBzb3J0ZWQgb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCBvbiBkZW1hbmQuIFRoaXMgbGlz
dCBpcworICAgICAgICAgIHN0b3JlZCBpbiB0aGUgVW5saW5rZWRDb2RlQmxvY2sncyByYXJlRGF0
YS4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorCiAyMDE0LTAxLTE2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdl
IGFsbCB1c2VzIG9mIEZJTkFMIHRvIGZpbmFsIG5vdyB0aGF0IGFsbCBvdXIgY29tcGlsZXJzIHN1
cHBvcnQgaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CShyZXZpc2lvbiAxNjIxNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxM
aW5rSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmVJbmZvLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5lQ29sdW1uSW5m
by5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTYyMTcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtODE2LDcgKzgxNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxJbnN0cnVjdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcSnVtcFRhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcTGluZUluZm8uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXExpbmVDb2x1bW5JbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxMTEludENhbGxMaW5rSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNjIx
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTE1MDIsNyArMTUw
Miw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExpbmVJbmZvLmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTGluZUNvbHVtbkluZm8uaCI+
CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMTEludENhbGxMaW5rSW5mby5oIj4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjIxNzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNiBAQAogCQkwRjBCODNBNzE0QkNGNTA3MDA4
ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4M0E5MTRCQ0Y1
NjIwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYw
QjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0FBMTRCQ0Y1QjkwMDg4
NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYwQjgzQUQxNEJDRjYwNDAwODg1QjRGIC8qIExpbmVJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBC
ODNBQzE0QkNGNjAyMDA4ODVCNEYgLyogTGluZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyog
Q2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovOyB9
OwogCQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNBRjE0QkNGNzE0MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzQjkxNEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5P
ZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNl
dFRvQnl0ZWNvZGVPZmZzZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTMxMyw2ICsxMzEyLDcgQEAKIAkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QjE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi87IH07CiAJCUZFMjBDRTlFMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMzdE
RDU2MTgzQzFFODgwMDE4QjJGMCAvKiBMaW5lQ29sdW1uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzN0RENTUxODNDMUU4ODAwMThCMkYwIC8q
IExpbmVDb2x1bW5JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFEMTVC
RDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgKi87IH07CiAJCUZFNEEzMzIwMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUUxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU1
OTMyQTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0Mg
LyogVk1FbnRyeVNjb3BlLmNwcCAqLzsgfTsKQEAgLTE0MzUsNyArMTQzNSw2IEBACiAJCTBGMEI4
M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBC
ODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGFuZGxlckluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwQjgzQUExNEJDRjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblJhbmdlSW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBCODNBQzE0QkNGNjAyMDA4ODVCNEYgLyogTGlu
ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGluZUluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENh
bGxMaW5rSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxs
TGlua0luZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODNBRjE0QkNG
NzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENhbGxMaW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBC
ODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFJldHVybk9mZnNldFRvQnl0
ZWNvZGVPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MjMsNiArMjcy
Miw3IEBACiAJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pT
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUZF
MjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50Q0xvb3AuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRD
TG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlDMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkUzN0RENTUxODNDMUU4ODAwMThCMkYwIC8qIExpbmVDb2x1bW5JbmZv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVDb2x1bW5JbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEEzMzFEMTVCRDJFMDcwMDZGNTRGMyAvKiBW
TUluc3BlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUlu
c3BlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEEzMzFFMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWTUluc3BlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJB
NTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00MjMwLDYgKzQyMzAsNyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEg
LyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCUZFMzdERDU1MTgzQzFFODgwMDE4QjJGMCAvKiBMaW5lQ29sdW1uSW5mby5oICovLAogCQkJ
CTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAq
LywKIAkJCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5oICovLAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3Bw
ICovLApAQCAtNDI4MCw3ICs0MjgxLDYgQEAKIAkJCQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggKi8sCiAJCQkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkg
LyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLywKLQkJCQkwRjBCODNBQzE0QkNGNjAyMDA4
ODVCNEYgLyogTGluZUluZm8uaCAqLywKIAkJCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyog
TExJbnRDYWxsTGlua0luZm8uaCAqLywKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyog
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1QzdE
NDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTQ0NzEs
NiArNDQ3MSw3IEBACiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFz
aWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8q
IGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkUzN0RENTYxODNDMUU4ODAwMThCMkYwIC8qIExpbmVDb2x1bW5J
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjkxODdDQTVF
NjAwODQzQjEwIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMkIxODdDQTc1QjAwODQzQjEwIC8qIGpzbWluLnB5
IGluIEhlYWRlcnMgKi8sCkBAIC00OTM2LDcgKzQ5MzcsNiBAQAogCQkJCUJDMThDNDMxMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkUwRTE2RkNF
MTAwQjM0NDYwIC8qIExleGVyLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1Q0IxODVG
OTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEYwQjgzQUQxNEJDRjYwNDAwODg1QjRGIC8qIExpbmVJbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkQzQjNDMzEwMTU5RDdGMDAyODY1RTcgLyogTGlua0J1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MzE3MzgxNDZCQUM2OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE2MjE3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxv
by5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI1NjUsNiArMjU2NSwyMyBAQCB2b2lkIENvZGVC
bG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvCiAgICAgbGluZSArPSBtX293bmVyRXhlY3V0
YWJsZS0+bGluZU5vKCk7CiB9CiAKK3Vuc2lnbmVkIENvZGVCbG9jazo6b3BEZWJ1Z0J5dGVjb2Rl
T2Zmc2V0Rm9yTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikK
K3sKKyAgICB1bnNpZ25lZCBsaW5lQWRqdXN0bWVudCA9IG1fb3duZXJFeGVjdXRhYmxlLT5saW5l
Tm8oKTsKKyAgICBBU1NFUlQobGluZSA+PSBsaW5lQWRqdXN0bWVudCk7CisgICAgdW5zaWduZWQg
dW5saW5rZWRMaW5lID0gbGluZSAtIGxpbmVBZGp1c3RtZW50OworICAgIHVuc2lnbmVkIGNvbHVt
bkFkanVzdG1lbnQgPSB1bmxpbmtlZExpbmUgPyAxIDogZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCk7
CisgICAgQVNTRVJUKGNvbHVtbiA+PSBjb2x1bW5BZGp1c3RtZW50KTsKKyAgICB1bnNpZ25lZCB1
bmxpbmtlZENvbHVtbiA9IGNvbHVtbiAtIGNvbHVtbkFkanVzdG1lbnQ7CisKKyAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IG1fdW5saW5rZWRDb2RlLT5vcERlYnVnQnl0ZWNvZGVPZmZzZXRG
b3JMaW5lQW5kQ29sdW1uKHVubGlua2VkTGluZSwgdW5saW5rZWRDb2x1bW4pOworICAgIGlmIChi
eXRlY29kZU9mZnNldCAhPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV1RGOjpub3RGb3VuZCkpIHsK
KyAgICAgICAgbGluZSA9IHVubGlua2VkTGluZSArIGxpbmVBZGp1c3RtZW50OworICAgICAgICBj
b2x1bW4gPSB1bmxpbmtlZENvbHVtbiArICh1bmxpbmtlZExpbmUgPyAxIDogZmlyc3RMaW5lQ29s
dW1uT2Zmc2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gYnl0ZWNvZGVPZmZzZXQ7Cit9CisKIHZv
aWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7CiAjaWYg
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE2MjE3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28u
Y2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02NSw3ICs2NSw2IEBACiAjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCiAjaW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5oIgotI2luY2x1ZGUgIkxpbmVJbmZvLmgiCiAjaW5jbHVkZSAiUHJv
ZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCkBAIC0xNzUsNiArMTc0LDcgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIGNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KTsKICAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVk
JiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKKyAgICB1bnNpZ25lZCBvcERlYnVnQnl0ZWNvZGVP
ZmZzZXRGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsK
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGluZUNvbHVtbkluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGluZUNvbHVtbklu
Zm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5l
Q29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBMaW5lQ29sdW1uSW5m
b19oCisjZGVmaW5lIExpbmVDb2x1bW5JbmZvX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVj
dCBMaW5lQ29sdW1uSW5mbyB7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAg
dW5zaWduZWQgbGluZTsKKyAgICB1bnNpZ25lZCBjb2x1bW47CisKKyAgICBib29sIG9wZXJhdG9y
IDwoY29uc3QgTGluZUNvbHVtbkluZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGxpbmUgPT0gb3RoZXIubGluZSkgeworICAgICAgICAgICAgaWYgKGNvbHVtbiA9PSBvdGhlci5j
b2x1bW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIu
aW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gY29sdW1uIDwgb3RoZXIuY29s
dW1uOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaW5lIDwgb3RoZXIubGluZTsKKyAgICB9
CisKKyAgICBzdHJ1Y3QgTGluZUNvbHVtblBhaXIgeworICAgICAgICBMaW5lQ29sdW1uUGFpcih1
bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pCisgICAgICAgICAgICA6IGxpbmUobGluZSks
IGNvbHVtbihjb2x1bW4pCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVk
IGxpbmU7CisgICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKKyAgICB9OworCisgICAgYm9vbCBvcGVy
YXRvciA9PShjb25zdCBMaW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAgKGxpbmUgPT0gcGFpci5saW5lKSAmJiAoY29sdW1uID09IHBhaXIuY29sdW1uKTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IExpbmVDb2x1bW5QYWlyJiBwYWly
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICAobGluZSAhPSBwYWlyLmxpbmUpIHx8IChj
b2x1bW4gIT0gcGFpci5jb2x1bW4pOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IgPChjb25z
dCBMaW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChsaW5lID09
IHBhaXIubGluZSkKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCBwYWlyLmNvbHVtbjsKKyAg
ICAgICAgcmV0dXJuIGxpbmUgPCBwYWlyLmxpbmU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
ciA8PShjb25zdCBMaW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChsaW5lID09IHBhaXIubGluZSkKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPD0gcGFpci5j
b2x1bW47CisgICAgICAgIHJldHVybiBsaW5lIDwgcGFpci5saW5lOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IgPihjb25zdCBMaW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChsaW5lID09IHBhaXIubGluZSkKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4g
PiBwYWlyLmNvbHVtbjsKKyAgICAgICAgcmV0dXJuIGxpbmUgPiBwYWlyLmxpbmU7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvciA+PShjb25zdCBMaW5lQ29sdW1uUGFpciYgcGFpcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChsaW5lID09IHBhaXIubGluZSkKKyAgICAgICAgICAgIHJldHVy
biBjb2x1bW4gPj0gcGFpci5jb2x1bW47CisgICAgICAgIHJldHVybiBsaW5lID4gcGFpci5saW5l
OworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gTGluZUNvbHVt
bkluZm9faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmVJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmVJbmZvLmgJ
KHJldmlzaW9uIDE2MjE3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5l
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMaW5lSW5mb19oCi0jZGVmaW5l
IExpbmVJbmZvX2gKLQotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLXN0cnVjdCBMaW5lSW5mbyB7Ci0gICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25PZmZz
ZXQ7Ci0gICAgaW50MzJfdCBsaW5lTnVtYmVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBMaW5lSW5mb19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYyMTcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVy
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKKyNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMjU2LDYgKzI1
Nyw3NCBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlCiAgICAgcmV0
dXJuIGxpbmU7CiB9CiAKK2lubGluZSB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpnZXRMaW5lQW5k
Q29sdW1uKEV4cHJlc3Npb25SYW5nZUluZm8mIGluZm8sCisgICAgdW5zaWduZWQmIGxpbmUsIHVu
c2lnbmVkJiBjb2x1bW4pCit7CisgICAgc3dpdGNoIChpbmZvLm1vZGUpIHsKKyAgICBjYXNlIEV4
cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2RlOgorICAgICAgICBpbmZvLmRlY29kZUZhdExp
bmVNb2RlKGxpbmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVzc2lv
blJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZToKKyAgICAgICAgaW5mby5kZWNvZGVGYXRDb2x1bW5N
b2RlKGxpbmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVzc2lvblJh
bmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU6IHsKKyAgICAgICAgdW5zaWduZWQgZmF0SW5k
ZXggPSBpbmZvLnBvc2l0aW9uOworICAgICAgICBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3Np
dGlvbiYgZmF0UG9zID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9uc1tm
YXRJbmRleF07CisgICAgICAgIGxpbmUgPSBmYXRQb3MubGluZTsKKyAgICAgICAgY29sdW1uID0g
ZmF0UG9zLmNvbHVtbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0gLy8gc3dpdGNoCit9
CisKKyNpZm5kZWYgTkRFQlVHCitzdGF0aWMgdm9pZCBkdW1wTGluZUNvbHVtbkVudHJ5KHNpemVf
dCBpbmRleCwgY29uc3QgUmVmQ291bnRlZEFycmF5PFVubGlua2VkSW5zdHJ1Y3Rpb24+JiBpbnN0
cnVjdGlvbnMsIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNp
Z25lZCBjb2x1bW4pCit7CisgICAgT3Bjb2RlSUQgb3Bjb2RlID0gaW5zdHJ1Y3Rpb25zW2luc3Ry
dWN0aW9uT2Zmc2V0XS51Lm9wY29kZTsKKyAgICBjb25zdCBjaGFyKiBldmVudCA9ICIiOworICAg
IGlmIChvcGNvZGUgPT0gb3BfZGVidWcpIHsKKyAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbnNb
aW5zdHJ1Y3Rpb25PZmZzZXQgKyAxXS51Lm9wZXJhbmQpIHsKKyAgICAgICAgY2FzZSBXaWxsRXhl
Y3V0ZVByb2dyYW06IGV2ZW50ID0gIiBXaWxsRXhlY3V0ZVByb2dyYW0iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBEaWRFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIERpZEV4ZWN1dGVQcm9ncmFtIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6IGV2ZW50ID0gIiBEaWRFbnRl
ckNhbGxGcmFtZSI7IGJyZWFrOworICAgICAgICBjYXNlIERpZFJlYWNoQnJlYWtwb2ludDogZXZl
bnQgPSAiIERpZFJlYWNoQnJlYWtwb2ludCI7IGJyZWFrOworICAgICAgICBjYXNlIFdpbGxMZWF2
ZUNhbGxGcmFtZTogZXZlbnQgPSAiIFdpbGxMZWF2ZUNhbGxGcmFtZSI7IGJyZWFrOworICAgICAg
ICBjYXNlIFdpbGxFeGVjdXRlU3RhdGVtZW50OiBldmVudCA9ICIgV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQiOyBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBkYXRhTG9nRigiICBbJXp1XSBwYyAl
dSBAIGxpbmUgJXUgY29sICV1IDogJXMlc1xuIiwgaW5kZXgsIGluc3RydWN0aW9uT2Zmc2V0LCBs
aW5lLCBjb2x1bW4sIG9wY29kZU5hbWVzW29wY29kZV0sIGV2ZW50KTsKK30KKwordm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6ZHVtcEV4cHJlc3Npb25SYW5nZUluZm8oKQoreworICAgIFZlY3RvcjxF
eHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOwor
CisgICAgc2l6ZV90IHNpemUgPSBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsKKyAgICBkYXRhTG9n
RigiVW5saW5rZWRDb2RlQmxvY2sgJXAgZXhwcmVzc2lvblJhbmdlSW5mb1slenVdIHtcbiIsIHRo
aXMsIHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
ICAgIEV4cHJlc3Npb25SYW5nZUluZm8mIGluZm8gPSBleHByZXNzaW9uSW5mb1tpXTsKKyAgICAg
ICAgdW5zaWduZWQgbGluZTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1uOworICAgICAgICBnZXRM
aW5lQW5kQ29sdW1uKGluZm8sIGxpbmUsIGNvbHVtbik7CisgICAgICAgIGR1bXBMaW5lQ29sdW1u
RW50cnkoaSwgaW5zdHJ1Y3Rpb25zKCksIGluZm8uaW5zdHJ1Y3Rpb25PZmZzZXQsIGxpbmUsIGNv
bHVtbik7CisgICAgfQorICAgIGRhdGFMb2coIn1cbiIpOworfQorCit2b2lkIFVubGlua2VkQ29k
ZUJsb2NrOjpkdW1wT3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCgpCit7CisgICAgTGluZUNvbHVt
bkluZm9MaXN0JiBpbmZvTGlzdCA9IHRoaXMtPm9wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3QoKTsK
KyAgICBzaXplX3Qgc2l6ZSA9IGluZm9MaXN0LnNpemUoKTsKKworICAgIGRhdGFMb2dGKCJVbmxp
bmtlZENvZGVCbG9jayAlcCBvcERlYnVnTGluZUNvbHVtbkluZm9MaXN0WyV6dV0ge1xuIiwgdGhp
cywgc2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAg
ICAgTGluZUNvbHVtbkluZm8mIGluZm8gPSBpbmZvTGlzdFtpXTsKKyAgICAgICAgZHVtcExpbmVD
b2x1bW5FbnRyeShpLCBpbnN0cnVjdGlvbnMoKSwgaW5mby5pbnN0cnVjdGlvbk9mZnNldCwgaW5m
by5saW5lLCBpbmZvLmNvbHVtbik7CisgICAgfQorICAgIGRhdGFMb2coIn1cbiIpOworfQorI2Vu
ZGlmCisKIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2Rl
T2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAogICAgIGludCYgZGl2b3QsIGludCYgc3Rh
cnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVt
bikKIHsKQEAgLTI4OSwyMiArMzU4LDEwMCBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHBy
ZXNzaW9uUmFuZ2VGCiAgICAgc3RhcnRPZmZzZXQgPSBpbmZvLnN0YXJ0T2Zmc2V0OwogICAgIGVu
ZE9mZnNldCA9IGluZm8uZW5kT2Zmc2V0OwogICAgIGRpdm90ID0gaW5mby5kaXZvdFBvaW50Owor
ICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwgY29sdW1uKTsKK30KIAotICAgIHN3aXRj
aCAoaW5mby5tb2RlKSB7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9k
ZToKLSAgICAgICAgaW5mby5kZWNvZGVGYXRMaW5lTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGU6Ci0g
ICAgICAgIGluZm8uZGVjb2RlRmF0Q29sdW1uTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2Rl
OiB7Ci0gICAgICAgIHVuc2lnbmVkIGZhdEluZGV4ID0gaW5mby5wb3NpdGlvbjsKLSAgICAgICAg
RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24mIGZhdFBvcyA9IG1fcmFyZURhdGEtPm1f
ZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnNbZmF0SW5kZXhdOwotICAgICAgICBsaW5lID0gZmF0
UG9zLmxpbmU7Ci0gICAgICAgIGNvbHVtbiA9IGZhdFBvcy5jb2x1bW47Ci0gICAgICAgIGJyZWFr
OwordW5zaWduZWQgVW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9mZnNldEZvckxp
bmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pCit7CisgICAgaWYg
KCFtX2V4cHJlc3Npb25JbmZvLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihXVEY6Om5vdEZvdW5kKTsKKworICAgIC8vIEZpbmQgdGhlIGJlc3QgZml0IG9wX2Rl
YnVnIG9wY29kZSBmb3IgdGhlIHJlcXVlc3RlZCBsaW5lIGFuZCBjb2x1bW46CisgICAgLy8gVGhl
IGJlc3QgZml0IG9wX2RlYnVnIHdpbGwgYmUgdGhlIG9uZSB0aGF0IGlzIHByZWNlZGluZyBidXQg
aXMgbmVhcmVzdCB0bworICAgIC8vIHRoZSBzcGVjaWZpZWQgbGluZSBhbmQgY29sdW1uLgorICAg
IExpbmVDb2x1bW5JbmZvOjpMaW5lQ29sdW1uUGFpciB0YXJnZXQobGluZSwgY29sdW1uKTsKKyAg
ICBMaW5lQ29sdW1uSW5mb0xpc3QmIGluZm9MaXN0ID0gb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlz
dCgpOworICAgIGludCBsb3cgPSAwOworICAgIGludCBoaWdoID0gaW5mb0xpc3Quc2l6ZSgpOwor
ICAgIHdoaWxlIChoaWdoIC0gbG93ID4gMSkgeworICAgICAgICBpbnQgY3VycmVudCA9IGxvdyAr
IChoaWdoIC0gbG93KSAvIDI7CisgICAgICAgIExpbmVDb2x1bW5JbmZvJiBjdXJyZW50SW5mbyA9
IGluZm9MaXN0W2N1cnJlbnRdOworICAgICAgICBpZiAoY3VycmVudEluZm8gPT0gdGFyZ2V0KSB7
CisgICAgICAgICAgICBsb3cgPSBjdXJyZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGN1cnJlbnRJbmZvIDwgdGFyZ2V0KQorICAgICAgICAgICAgbG93ID0g
Y3VycmVudDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGlnaCA9IGN1cnJlbnQ7CiAgICAg
fQotICAgIH0gLy8gc3dpdGNoCisKKyAgICBBU1NFUlQobG93ID49IDApOworICAgIExpbmVDb2x1
bW5JbmZvJiBpbmZvID0gaW5mb0xpc3RbbG93XTsKKyAgICBBU1NFUlQoaW5mbyA8PSB0YXJnZXQp
OworCisgICAgbGluZSA9IGluZm8ubGluZTsKKyAgICBjb2x1bW4gPSBpbmZvLmNvbHVtbjsKKwor
ICAgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSB0aGUgZm91bmQgb3BfZGVidWcgdG8gc2VlIGlm
IHRoZXJlIGFyZSBhbnkKKyAgICAvLyBwcmVjZWRpbmcgb3BfZGVidWcgYnl0ZWNvZGVzIHdpdGgg
dGhlIGV4YWN0IHNhbWUgbGluZSBhbmQgY29sdW1uIGFzIHRoZQorICAgIC8vIG9uZSB3ZSBmb3Vu
ZC4gV2Ugd2FudCB0aGUgZWFybGllc3Qgb25lIGJlY2F1c2Ugd2hlbiB3ZSBoYXZlIG11bHRpcGxl
CisgICAgLy8gcG90ZW50aWFsIGJyZWFrcG9pbnQgdGFyZ2V0cyB0aGF0IG1hcCB0byBhIGdpdmVu
IGxpbmUgYW5kIGNvbHVtbiwgYQorICAgIC8vIGRlYnVnZ2VyIHVzZXIgd291bGQgZXhwZWN0IHRv
IGJyZWFrIG9uIHRoZSBmaXJzdCBvbmUgZmlyc3QgYW5kIHN0ZXAKKyAgICAvLyB0aHJvdWdoIHRo
ZSByZXN0IHRoZXJlYWZ0ZXIgaWYgbmVlZGVkLgorICAgIExpbmVDb2x1bW5JbmZvOjpMaW5lQ29s
dW1uUGFpciBtYXRjaChsaW5lLCBjb2x1bW4pOworICAgIGZvciAoaW50IGkgPSBsb3cgLSAxOyBp
ID49IDA7IGktLSkgeworICAgICAgICBMaW5lQ29sdW1uSW5mbyYgY3VycmVudEluZm8gPSBpbmZv
TGlzdFtpXTsKKyAgICAgICAgaWYgKGN1cnJlbnRJbmZvICE9IG1hdGNoKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGxvdyA9IGk7CisgICAgfQorCisgICAgaW5mbyA9IGluZm9MaXN0W2xv
d107CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gaW5mby5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICBB
U1NFUlQoaW5zdHJ1Y3Rpb25zKClbb2Zmc2V0XS51Lm9wY29kZSA9PSBvcF9kZWJ1Zyk7CisgICAg
QVNTRVJUKGluZm8ubGluZSA8PSBsaW5lKTsKKyAgICBBU1NFUlQoaW5mby5jb2x1bW4gPT0gY29s
dW1uKTsKKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3N0YXRpYyBib29sIGNvbXBhcmVMaW5l
Q29sdW1uSW5mbyhjb25zdCBMaW5lQ29sdW1uSW5mbyYgZmlyc3QsIGNvbnN0IExpbmVDb2x1bW5J
bmZvJiBzZWNvbmQpCit7CisgICAgcmV0dXJuIGZpcnN0IDwgc2Vjb25kOworfQorCitVbmxpbmtl
ZENvZGVCbG9jazo6TGluZUNvbHVtbkluZm9MaXN0JiBVbmxpbmtlZENvZGVCbG9jazo6b3BEZWJ1
Z0xpbmVDb2x1bW5JbmZvTGlzdCgpCit7CisgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OworCisgICAgaWYgKG1fcmFyZURhdGEtPm1fb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCkgewor
ICAgICAgICBBU1NFUlQobV9yYXJlRGF0YS0+bV9vcERlYnVnTGluZUNvbHVtbkluZm9MaXN0LT5z
aXplKCkgPD0gbV9leHByZXNzaW9uSW5mby5zaXplKCkpOworICAgICAgICByZXR1cm4gKm1fcmFy
ZURhdGEtPm1fb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdDsKKyAgICB9CisKKyAgICBWZWN0b3I8
RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsK
KyAgICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworCisgICAgbV9yYXJl
RGF0YS0+bV9vcERlYnVnTGluZUNvbHVtbkluZm9MaXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5l
Q29sdW1uSW5mb0xpc3Q+KCk7CisgICAgTGluZUNvbHVtbkluZm9MaXN0JiBpbmZvTGlzdCA9ICpt
X3JhcmVEYXRhLT5tX29wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3Q7CisKKyAgICBmb3IgKHNpemVf
dCBzcmMgPSAwOyBzcmMgPCBzaXplOyBzcmMrKykgeworICAgICAgICBFeHByZXNzaW9uUmFuZ2VJ
bmZvJiBleHBySW5mbyA9IGV4cHJlc3Npb25JbmZvW3NyY107CisgICAgICAgIHVuc2lnbmVkIGlu
c3RydWN0aW9uT2Zmc2V0ID0gZXhwckluZm8uaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIE9w
Y29kZUlEIG9wY29kZSA9IGluc3RydWN0aW9ucygpW2luc3RydWN0aW9uT2Zmc2V0XS51Lm9wY29k
ZTsKKyAgICAgICAgaWYgKG9wY29kZSA9PSBvcF9kZWJ1ZykgeworICAgICAgICAgICAgTGluZUNv
bHVtbkluZm8gaW5mbzsKKyAgICAgICAgICAgIGluZm8uaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpbnN0
cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIGdldExpbmVBbmRDb2x1bW4oZXhwckluZm8sIGlu
Zm8ubGluZSwgaW5mby5jb2x1bW4pOworICAgICAgICAgICAgaW5mb0xpc3QuYXBwZW5kKGluZm8p
OworICAgICAgICB9CisgICAgfQorICAgIGluZm9MaXN0LnNocmlua1RvRml0KCk7CisKKyAgICBz
dGQ6OnNvcnQoaW5mb0xpc3QuYmVnaW4oKSwgaW5mb0xpc3QuZW5kKCksIGNvbXBhcmVMaW5lQ29s
dW1uSW5mbyk7CisKKyAgICByZXR1cm4gKm1fcmFyZURhdGEtPm1fb3BEZWJ1Z0xpbmVDb2x1bW5J
bmZvTGlzdC5nZXQoKTsKIH0KIAogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWRkRXhwcmVzc2lv
bkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTYy
MTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJJZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRl
ICJMaW5lSW5mby5oIgorI2luY2x1ZGUgIkxpbmVDb2x1bW5JbmZvLmgiCiAjaW5jbHVkZSAiUGFy
c2VyTW9kZXMuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIKICNpbmNsdWRlICJTcGVjaWFsUG9pbnRl
ci5oIgpAQCAtNDIsNiArNDIsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0NvbXByZXNzaW9uLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQ0
LDYgKzQ0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCiAgICAgICAgIGlu
dCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQm
IGNvbHVtbik7CisgICAgdW5zaWduZWQgb3BEZWJ1Z0J5dGVjb2RlT2Zmc2V0Rm9yTGluZUFuZENv
bHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAKICAgICB2b2lkIHJlY29y
ZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywg
dW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQsIHVuc2lnbmVkIGVuZENvbHVt
bikKICAgICB7CkBAIC00NjIsNiArNDY0LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdW5zaWduZWQg
ZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KIAorICAgIHZvaWQgZHVt
cEV4cHJlc3Npb25SYW5nZUluZm8oKTsgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkuCisg
ICAgdm9pZCBkdW1wT3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCgpOyAvLyBGb3IgZGVidWdnaW5n
IHB1cnBvc2Ugb25seS4KKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwg
U3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJik7CiAgICAgflVubGlu
a2VkQ29kZUJsb2NrKCk7CkBAIC00ODIsNiArNDg3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX3JhcmVEYXRhID0gYWRvcHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAKKyAgICB2b2lk
IGdldExpbmVBbmRDb2x1bW4oRXhwcmVzc2lvblJhbmdlSW5mbyYsIHVuc2lnbmVkJiBsaW5lLCB1
bnNpZ25lZCYgY29sdW1uKTsKKworICAgIHR5cGVkZWYgVmVjdG9yPExpbmVDb2x1bW5JbmZvPiBM
aW5lQ29sdW1uSW5mb0xpc3Q7CisgICAgTGluZUNvbHVtbkluZm9MaXN0JiBvcERlYnVnTGluZUNv
bHVtbkluZm9MaXN0KCk7CisKICAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlv
bj4gbV91bmxpbmtlZEluc3RydWN0aW9uczsKIAogICAgIGludCBtX251bVBhcmFtZXRlcnM7CkBA
IC01NDYsNiArNTU2LDcgQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAogICAgICAgICBWZWN0b3I8RXhw
cmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlv
bnM7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5lQ29sdW1uSW5mb0xpc3Q+IG1fb3BEZWJ1
Z0xpbmVDb2x1bW5JbmZvTGlzdDsKICAgICB9OwogCiBwcml2YXRlOgo=
</data>
<flag name="review"
          id="245437"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221542</attachid>
            <date>2014-01-18 02:40:22 -0800</date>
            <delta_ts>2014-01-18 02:40:22 -0800</delta_ts>
            <desc>patch 3 for landing using std::lower_bound() instead</desc>
            <filename>bug-127127.patch</filename>
            <type>text/plain</type>
            <size>30153</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMjUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDE0LTAxLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRpbmcgVW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9mZnNldEZvckxpbmVBbmRD
b2x1bW4oKS4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjcxMjcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAg
ICAgSW4gb3JkZXIgdG8gaW1wbGVtZW50IGJ5dGVjb2RlIGxldmVsIGJyZWFrcG9pbnRzLCB3ZSBu
ZWVkIGEgbWVjaGFuaXNtCisgICAgICAgIGZvciBjb21wdXRpbmcgdGhlIGJlc3QgZml0IG9wX2Rl
YnVnIGJ5dGVjb2RlIG9mZnNldCBmb3IgYW55IHZhbGlkIGdpdmVuCisgICAgICAgIGxpbmUgYW5k
IGNvbHVtbiB2YWx1ZSBpbiB0aGUgc291cmNlLiBUaGUgImJlc3QgZml0IiBpbiB0aGlzIGNhc2Ug
aXMgdGhlCisgICAgICAgIG5lYXJlc3QgcHJlY2VkaW5nIG9wX2RlYnVnIGJ5dGVjb2RlIHJlbGF0
aXZlIHRvIHRoZSBwb3NpdGlvbiBzcGVjaWZpZWQKKyAgICAgICAgYnkgdGhlIGxpbmUgYW5kIGNv
bHVtbi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcERlYnVn
Qnl0ZWNvZGVPZmZzZXRGb3JMaW5lQW5kQ29sdW1uKToKKyAgICAgICAgLSBDb252ZXJ0IHRoZSBs
aW5lIGFuZCBjb2x1bW4gdG8gdW5saW5rZWQgbGluZSBhbmQgY29sdW1uIHZhbHVlcyBhbmQKKyAg
ICAgICAgICBwYXNzIHRoZW0gdG8gVW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9m
ZnNldEZvckxpbmVBbmRDb2x1bW4oKQorICAgICAgICAgIHRvIGRvIHRoZSByZWFsIHdvcmsuCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9MaW5l
Q29sdW1uSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJh
dG9yIDwpOgorICAgICAgICAoSlNDOjpMaW5lQ29sdW1uSW5mbzo6TGluZUNvbHVtblBhaXI6Okxp
bmVDb2x1bW5QYWlyKToKKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yID09
KToKKyAgICAgICAgKEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yICE9KToKKyAgICAgICAg
KEpTQzo6TGluZUNvbHVtbkluZm86Om9wZXJhdG9yIDw9KToKKyAgICAgICAgKEpTQzo6TGluZUNv
bHVtbkluZm86Om9wZXJhdG9yID4pOgorICAgICAgICAoSlNDOjpMaW5lQ29sdW1uSW5mbzo6b3Bl
cmF0b3IgPj0pOgorICAgICAgICAqIGJ5dGVjb2RlL0xpbmVJbmZvLmg6IFJlbW92ZWQuCisKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpkZWNvZGVFeHByZXNzaW9uUmFuZ2VMaW5lQW5kQ29sdW1uKToKKyAg
ICAgICAgLSBGYWN0b3JlZCB0aGlzIG91dCBvZiBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9m
ZnNldCgpIHNvIHRoYXQgaXQgY2FuCisgICAgICAgICAgYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUg
cGxhY2VzLgorICAgICAgICAoSlNDOjpkdW1wTGluZUNvbHVtbkVudHJ5KToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmR1bXBPcERlYnVnTGluZUNvbHVtbkluZm9MaXN0KToK
KyAgICAgICAgLSBTb21lIGR1bXBlcnMgZm9yIGRlYnVnZ2luZyB1c2Ugb25seS4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdCeXRlY29kZU9mZnNl
dEZvckxpbmVBbmRDb2x1bW4pOgorICAgICAgICAtIEZpbmRzIHRoZSBlYXJsaWVzdCBvcF9kZWJ1
ZyBieXRlY29kZSB3aG9zZSBsaW5lIGFuZCBjb2x1bW4gbWF0Y2hlcyB0aGUKKyAgICAgICAgICBz
cGVjaWZpZWQgbGluZSBhbmQgY29sdW1uIHZhbHVlcy4gSWYgYW4gZXhhY3QgbWF0Y2ggaXMgbm90
IGZvdW5kLCB0aGVuCisgICAgICAgICAgZmluZHMgdGhlIG5lYXJlc3Qgb3BfZGVidWcgYnl0ZWNv
ZGUgdGhhdCBwcmVjZWRlcyB0aGUgc3BlY2lmaWVkIGxpbmUKKyAgICAgICAgICBhbmQgY29sdW1u
IHZhbHVlcy4gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgb3BfZGVidWcgYXQgdGhhdCBwcmVj
ZWRpbmcKKyAgICAgICAgICBsaW5lIGFuZCBjb2x1bW4gdmFsdWUsIHRoZW4gdGhlIGVhcmxpZXN0
IG9mIHRob3NlIG9wX2RlYnVnIGJ5dGVjb2RlcyB3aWxsCisgICAgICAgICAgYmUgYmUgc2VsZWN0
ZWQuIFRoZSBvZmZzZXQgb2YgdGhlIHNlbGVjdGVkIGJ5dGVjb2RlIHdpbGwgYmUgcmV0dXJuZWQu
CisKKyAgICAgICAgICBXZSB3YW50IHRoZSBlYXJsaWVzdCBvbmUgYmVjYXVzZSB3aGVuIHdlIGhh
dmUgbXVsdGlwbGUgb3BfZGVidWcgYnl0ZWNvZGVzCisgICAgICAgICAgdGhhdCBtYXAgdG8gYSBn
aXZlbiBsaW5lIGFuZCBjb2x1bW4sIGEgZGVidWdnZXIgdXNlciB3b3VsZCBleHBlY3QgdG8gYnJl
YWsKKyAgICAgICAgICBvbiB0aGUgZmlyc3Qgb25lIGFuZCBzdGVwIHRocm91Z2ggdGhlIHJlc3Qg
dGhlcmVhZnRlciBpZiBuZWVkZWQuCisKKyAgICAgICAgKEpTQzo6Y29tcGFyZUxpbmVDb2x1bW5J
bmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wRGVidWdMaW5lQ29sdW1u
SW5mb0xpc3QpOgorICAgICAgICAtIENyZWF0ZXMgdGhlIHNvcnRlZCBvcERlYnVnTGluZUNvbHVt
bkluZm9MaXN0IG9uIGRlbWFuZC4gVGhpcyBsaXN0IGlzCisgICAgICAgICAgc3RvcmVkIGluIHRo
ZSBVbmxpbmtlZENvZGVCbG9jaydzIHJhcmVEYXRhLgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmg6CisKIDIwMTQtMDEtMTggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0Bp
Z2FsaWEuY29tPgogCiAgICAgICAgIEluc3BlY3RvciBzY3JpcHRzIGFyZSBub3QgY29tcGF0aWJs
ZSB3aXRoIFB5dGhvbiB2MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDE2MjI1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xM
SW50Q2FsbExpbmtJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTGluZUluZm8uaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmVD
b2x1bW5JbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNjIyNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC04MTYsNyArODE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXEluc3RydWN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxKdW1wVGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxMaW5lSW5mby5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcTGluZUNvbHVtbkluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXExMSW50Q2FsbExpbmtJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGNvZGUuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlz
aW9uIDE2MjI1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTUw
Miw3ICsxNTAyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmgiPgogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTGlu
ZUluZm8uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMaW5lQ29sdW1u
SW5mby5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExMSW50Q2FsbExpbmtJbmZv
LmgiPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MjI1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw2IEBACiAJCTBGMEI4M0E3MTRC
Q0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgz
QTkxNEJDRjU2MjAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFu
ZGxlckluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQUExNEJD
RjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjBCODNBRDE0QkNGNjA0MDA4ODVCNEYg
LyogTGluZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMEI4M0FDMTRCQ0Y2MDIwMDg4NUI0RiAvKiBMaW5lSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5j
cHAgKi87IH07CiAJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0FGMTRC
Q0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2Fs
bFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0
dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xMzEzLDYgKzEzMTIsNyBAQAogCQlFNDlEQzE2RDEyRUYy
OTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAv
KiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKIAkJRkUyMENF
OUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTElu
dENMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRkUzN0RENTYxODNDMUU4ODAwMThCMkYwIC8qIExpbmVDb2x1bW5JbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM3REQ1NTE4M0MxRTg4MDAx
OEIyRjAgLyogTGluZUNvbHVtbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0
QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMz
MjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1J
bnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYw
MEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovOyB9OwpAQCAtMTQzNSw3ICsxNDM1LDYgQEAK
IAkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIYW5kbGVySW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNzaW9uUmFuZ2VJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMEI4M0FDMTRCQ0Y2MDIwMDg4NUI0
RiAvKiBMaW5lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODNBRTE0QkNGNzE0MDA4ODVC
NEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxMaW5rSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4
M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29k
ZU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcy
Myw2ICsyNzIyLDcgQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNDSlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
fTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGlu
dC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTM3REQ1NTE4M0MxRTg4MDAxOEIyRjAgLyogTGluZUNv
bHVtbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGluZUNvbHVtbklu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0QTMzMUQxNUJEMkUwNzAwNkY1
NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0QTMz
MUUxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1FbnRyeVNjb3BlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQyMzAsNiArNDIzMCw3IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUw
MEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJRkUzN0RENTUxODNDMUU4ODAwMThCMkYwIC8qIExpbmVDb2x1bW5JbmZvLmgg
Ki8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJv
ZmlsZS5jcHAgKi8sCkBAIC00MjgwLDcgKzQyODEsNiBAQAogCQkJCUJDRkQ4QzkxMEVFQjJFRTcw
MDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLywKIAkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkg
LyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGQjU0Njc2MTRGNTlBRDEw
MDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAotCQkJCTBGMEI4M0FDMTRC
Q0Y2MDIwMDg4NUI0RiAvKiBMaW5lSW5mby5oICovLAogCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4
MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3
QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLApA
QCAtNDQ3MSw2ICs0NDcxLDcgQEAKIAkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5NDE4NTY5NzA5MDAy
RUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAq
LywKIAkJCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTM3REQ1NjE4M0MxRTg4MDAxOEIyRjAgLyogTGlu
ZUNvbHVtbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MEUy
OTE4N0NBNUU2MDA4NDNCMTAgLyogaW5saW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNj
cmlwdHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MEUyQjE4N0NBNzVCMDA4NDNCMTAgLyog
anNtaW4ucHkgaW4gSGVhZGVycyAqLywKQEAgLTQ5MzYsNyArNDkzNyw2IEBACiAJCQkJQkMxOEM0
MzEwRTE2RjVDRDAwQjM0NDYwIC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUy
RTBFMTZGQ0UxMDBCMzQ0NjAgLyogTGV4ZXIubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEz
RTVDQjE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjBCODNBRDE0QkNGNjA0MDA4ODVCNEYgLyogTGluZUluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RDNCM0MzMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjQzMTczODE0NkJBQzY5MDA3RTM4OTAgLyogTGlzdGFibGVIYW5k
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2MDFGMDYgLyogTGl0
ZXJhbFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYyMjUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hA
dXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjU2NSw2ICsyNTY1LDIzIEBAIHZv
aWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY28KICAgICBsaW5lICs9IG1fb3du
ZXJFeGVjdXRhYmxlLT5saW5lTm8oKTsKIH0KIAordW5zaWduZWQgQ29kZUJsb2NrOjpvcERlYnVn
Qnl0ZWNvZGVPZmZzZXRGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYg
Y29sdW1uKQoreworICAgIHVuc2lnbmVkIGxpbmVBZGp1c3RtZW50ID0gbV9vd25lckV4ZWN1dGFi
bGUtPmxpbmVObygpOworICAgIEFTU0VSVChsaW5lID49IGxpbmVBZGp1c3RtZW50KTsKKyAgICB1
bnNpZ25lZCB1bmxpbmtlZExpbmUgPSBsaW5lIC0gbGluZUFkanVzdG1lbnQ7CisgICAgdW5zaWdu
ZWQgY29sdW1uQWRqdXN0bWVudCA9IHVubGlua2VkTGluZSA/IDEgOiBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQoKTsKKyAgICBBU1NFUlQoY29sdW1uID49IGNvbHVtbkFkanVzdG1lbnQpOworICAgIHVu
c2lnbmVkIHVubGlua2VkQ29sdW1uID0gY29sdW1uIC0gY29sdW1uQWRqdXN0bWVudDsKKworICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV91bmxpbmtlZENvZGUtPm9wRGVidWdCeXRlY29k
ZU9mZnNldEZvckxpbmVBbmRDb2x1bW4odW5saW5rZWRMaW5lLCB1bmxpbmtlZENvbHVtbik7Cisg
ICAgaWYgKGJ5dGVjb2RlT2Zmc2V0ICE9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXVEY6Om5vdEZv
dW5kKSkgeworICAgICAgICBsaW5lID0gdW5saW5rZWRMaW5lICsgbGluZUFkanVzdG1lbnQ7Cisg
ICAgICAgIGNvbHVtbiA9IHVubGlua2VkQ29sdW1uICsgKHVubGlua2VkTGluZSA/IDEgOiBmaXJz
dExpbmVDb2x1bW5PZmZzZXQoKSk7CisgICAgfQorICAgIHJldHVybiBieXRlY29kZU9mZnNldDsK
K30KKwogdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkK
IHsKICNpZiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYyMjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3
YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY1LDcgKzY1LDYgQEAKICNpbmNsdWRl
ICJKdW1wVGFibGUuaCIKICNpbmNsdWRlICJMTEludENhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUg
IkxhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgiCi0jaW5jbHVkZSAiTGluZUluZm8uaCIKICNpbmNs
dWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKQEAgLTE3NSw2ICsxNzQsNyBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQpOwogICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwg
dW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pOworICAgIHVuc2lnbmVkIG9wRGVidWdC
eXRlY29kZU9mZnNldEZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBj
b2x1bW4pOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1
YkluZm8oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5lQ29sdW1u
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5l
Q29sdW1uSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xpbmVDb2x1bW5JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIExpbmVD
b2x1bW5JbmZvX2gKKyNkZWZpbmUgTGluZUNvbHVtbkluZm9faAorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RydWN0IExpbmVDb2x1bW5JbmZvIHsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNl
dDsKKyAgICB1bnNpZ25lZCBsaW5lOworICAgIHVuc2lnbmVkIGNvbHVtbjsKKworICAgIGJvb2wg
b3BlcmF0b3IgPChjb25zdCBMaW5lQ29sdW1uSW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobGluZSA9PSBvdGhlci5saW5lKSB7CisgICAgICAgICAgICBpZiAoY29sdW1uID09
IG90aGVyLmNvbHVtbikKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25PZmZzZXQg
PCBvdGhlci5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCBv
dGhlci5jb2x1bW47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpbmUgPCBvdGhlci5saW5l
OworICAgIH0KKworICAgIHN0cnVjdCBMaW5lQ29sdW1uUGFpciB7CisgICAgICAgIExpbmVDb2x1
bW5QYWlyKHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKKyAgICAgICAgICAgIDogbGlu
ZShsaW5lKSwgY29sdW1uKGNvbHVtbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dW5zaWduZWQgbGluZTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1uOworICAgIH07CisKKyAgICBi
b29sIG9wZXJhdG9yID09KGNvbnN0IExpbmVDb2x1bW5QYWlyJiBwYWlyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICAobGluZSA9PSBwYWlyLmxpbmUpICYmIChjb2x1bW4gPT0gcGFpci5j
b2x1bW4pOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgTGluZUNvbHVtblBh
aXImIHBhaXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIChsaW5lICE9IHBhaXIubGlu
ZSkgfHwgKGNvbHVtbiAhPSBwYWlyLmNvbHVtbik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
ciA8KGNvbnN0IExpbmVDb2x1bW5QYWlyJiBwYWlyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGxpbmUgPT0gcGFpci5saW5lKQorICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8IHBhaXIuY29s
dW1uOworICAgICAgICByZXR1cm4gbGluZSA8IHBhaXIubGluZTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yIDw9KGNvbnN0IExpbmVDb2x1bW5QYWlyJiBwYWlyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGxpbmUgPT0gcGFpci5saW5lKQorICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8
PSBwYWlyLmNvbHVtbjsKKyAgICAgICAgcmV0dXJuIGxpbmUgPCBwYWlyLmxpbmU7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvciA+KGNvbnN0IExpbmVDb2x1bW5QYWlyJiBwYWlyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGxpbmUgPT0gcGFpci5saW5lKQorICAgICAgICAgICAgcmV0dXJu
IGNvbHVtbiA+IHBhaXIuY29sdW1uOworICAgICAgICByZXR1cm4gbGluZSA+IHBhaXIubGluZTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yID49KGNvbnN0IExpbmVDb2x1bW5QYWlyJiBwYWly
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGxpbmUgPT0gcGFpci5saW5lKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbHVtbiA+PSBwYWlyLmNvbHVtbjsKKyAgICAgICAgcmV0dXJuIGxpbmUgPiBw
YWlyLmxpbmU7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBM
aW5lQ29sdW1uSW5mb19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlu
ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlu
ZUluZm8uaAkocmV2aXNpb24gMTYyMjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xpbmVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIExpbmVJbmZvX2gK
LSNkZWZpbmUgTGluZUluZm9faAotCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IExpbmVJbmZvIHsKLSAgICB1aW50MzJfdCBpbnN0cnVj
dGlvbk9mZnNldDsKLSAgICBpbnQzMl90IGxpbmVOdW1iZXI7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQotI2VuZGlmIC8vIExpbmVJbmZvX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAx
NjIyNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU291cmNl
UHJvdmlkZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJs
ZS5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0y
NTYsNiArMjU3LDc0IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGUK
ICAgICByZXR1cm4gbGluZTsKIH0KIAoraW5saW5lIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6Omdl
dExpbmVBbmRDb2x1bW4oRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbywKKyAgICB1bnNpZ25lZCYg
bGluZSwgdW5zaWduZWQmIGNvbHVtbikKK3sKKyAgICBzd2l0Y2ggKGluZm8ubW9kZSkgeworICAg
IGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAgIGluZm8uZGVj
b2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBF
eHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZvLmRlY29kZUZh
dENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogeworICAgICAgICB1bnNpZ25l
ZCBmYXRJbmRleCA9IGluZm8ucG9zaXRpb247CisgICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm86
OkZhdFBvc2l0aW9uJiBmYXRQb3MgPSBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9z
aXRpb25zW2ZhdEluZGV4XTsKKyAgICAgICAgbGluZSA9IGZhdFBvcy5saW5lOworICAgICAgICBj
b2x1bW4gPSBmYXRQb3MuY29sdW1uOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfSAvLyBz
d2l0Y2gKK30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyB2b2lkIGR1bXBMaW5lQ29sdW1uRW50
cnkoc2l6ZV90IGluZGV4LCBjb25zdCBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlv
bj4mIGluc3RydWN0aW9ucywgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIGxp
bmUsIHVuc2lnbmVkIGNvbHVtbikKK3sKKyAgICBPcGNvZGVJRCBvcGNvZGUgPSBpbnN0cnVjdGlv
bnNbaW5zdHJ1Y3Rpb25PZmZzZXRdLnUub3Bjb2RlOworICAgIGNvbnN0IGNoYXIqIGV2ZW50ID0g
IiI7CisgICAgaWYgKG9wY29kZSA9PSBvcF9kZWJ1ZykgeworICAgICAgICBzd2l0Y2ggKGluc3Ry
dWN0aW9uc1tpbnN0cnVjdGlvbk9mZnNldCArIDFdLnUub3BlcmFuZCkgeworICAgICAgICBjYXNl
IFdpbGxFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIFdpbGxFeGVjdXRlUHJvZ3JhbSI7IGJyZWFr
OworICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOiBldmVudCA9ICIgRGlkRXhlY3V0ZVBy
b2dyYW0iOyBicmVhazsKKyAgICAgICAgY2FzZSBEaWRFbnRlckNhbGxGcmFtZTogZXZlbnQgPSAi
IERpZEVudGVyQ2FsbEZyYW1lIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRGlkUmVhY2hCcmVha3Bv
aW50OiBldmVudCA9ICIgRGlkUmVhY2hCcmVha3BvaW50IjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2lsbExlYXZlQ2FsbEZyYW1lOiBldmVudCA9ICIgV2lsbExlYXZlQ2FsbEZyYW1lIjsgYnJlYWs7
CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6IGV2ZW50ID0gIiBXaWxsRXhlY3V0
ZVN0YXRlbWVudCI7IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dGKCIgIFsl
enVdIHBjICV1IEAgbGluZSAldSBjb2wgJXUgOiAlcyVzXG4iLCBpbmRleCwgaW5zdHJ1Y3Rpb25P
ZmZzZXQsIGxpbmUsIGNvbHVtbiwgb3Bjb2RlTmFtZXNbb3Bjb2RlXSwgZXZlbnQpOworfQorCit2
b2lkIFVubGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygpCit7CisgICAg
VmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lv
bkluZm87CisKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworICAg
IGRhdGFMb2dGKCJVbmxpbmtlZENvZGVCbG9jayAlcCBleHByZXNzaW9uUmFuZ2VJbmZvWyV6dV0g
e1xuIiwgdGhpcywgc2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKKyAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbyA9IGV4cHJlc3Npb25JbmZvW2ld
OworICAgICAgICB1bnNpZ25lZCBsaW5lOworICAgICAgICB1bnNpZ25lZCBjb2x1bW47CisgICAg
ICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwgY29sdW1uKTsKKyAgICAgICAgZHVtcExp
bmVDb2x1bW5FbnRyeShpLCBpbnN0cnVjdGlvbnMoKSwgaW5mby5pbnN0cnVjdGlvbk9mZnNldCwg
bGluZSwgY29sdW1uKTsKKyAgICB9CisgICAgZGF0YUxvZygifVxuIik7Cit9CisKK3ZvaWQgVW5s
aW5rZWRDb2RlQmxvY2s6OmR1bXBPcERlYnVnTGluZUNvbHVtbkluZm9MaXN0KCkKK3sKKyAgICBM
aW5lQ29sdW1uSW5mb0xpc3QmIGluZm9MaXN0ID0gdGhpcy0+b3BEZWJ1Z0xpbmVDb2x1bW5JbmZv
TGlzdCgpOworICAgIHNpemVfdCBzaXplID0gaW5mb0xpc3Quc2l6ZSgpOworCisgICAgZGF0YUxv
Z0YoIlVubGlua2VkQ29kZUJsb2NrICVwIG9wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3RbJXp1XSB7
XG4iLCB0aGlzLCBzaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICBMaW5lQ29sdW1uSW5mbyYgaW5mbyA9IGluZm9MaXN0W2ldOworICAgICAgICBk
dW1wTGluZUNvbHVtbkVudHJ5KGksIGluc3RydWN0aW9ucygpLCBpbmZvLmluc3RydWN0aW9uT2Zm
c2V0LCBpbmZvLmxpbmUsIGluZm8uY29sdW1uKTsKKyAgICB9CisgICAgZGF0YUxvZygifVxuIik7
Cit9CisjZW5kaWYKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsCiAgICAgaW50JiBkaXZvdCwg
aW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25l
ZCYgY29sdW1uKQogewpAQCAtMjg5LDIyICszNTgsNzggQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6ZXhwcmVzc2lvblJhbmdlRgogICAgIHN0YXJ0T2Zmc2V0ID0gaW5mby5zdGFydE9mZnNldDsK
ICAgICBlbmRPZmZzZXQgPSBpbmZvLmVuZE9mZnNldDsKICAgICBkaXZvdCA9IGluZm8uZGl2b3RQ
b2ludDsKKyAgICBnZXRMaW5lQW5kQ29sdW1uKGluZm8sIGxpbmUsIGNvbHVtbik7Cit9CiAKLSAg
ICBzd2l0Y2ggKGluZm8ubW9kZSkgewotICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0
TGluZU1vZGU6Ci0gICAgICAgIGluZm8uZGVjb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5N
b2RlOgotICAgICAgICBpbmZvLmRlY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29s
dW1uTW9kZTogewotICAgICAgICB1bnNpZ25lZCBmYXRJbmRleCA9IGluZm8ucG9zaXRpb247Ci0g
ICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uJiBmYXRQb3MgPSBtX3JhcmVE
YXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zW2ZhdEluZGV4XTsKLSAgICAgICAgbGlu
ZSA9IGZhdFBvcy5saW5lOwotICAgICAgICBjb2x1bW4gPSBmYXRQb3MuY29sdW1uOwotICAgICAg
ICBicmVhazsKK3Vuc2lnbmVkIFVubGlua2VkQ29kZUJsb2NrOjpvcERlYnVnQnl0ZWNvZGVPZmZz
ZXRGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKQorewor
ICAgIGlmICghbV9leHByZXNzaW9uSW5mby5zaXplKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oV1RGOjpub3RGb3VuZCk7CisKKyAgICBMaW5lQ29sdW1uSW5mbzo6TGlu
ZUNvbHVtblBhaXIgdGFyZ2V0KGxpbmUsIGNvbHVtbik7CisgICAgTGluZUNvbHVtbkluZm9MaXN0
JiBsaXN0ID0gb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCgpOworCisgICAgLy8gRmluZCB0aGUg
ZWFybGllc3Qgb3BfZGVidWcgYnl0ZWNvZGUgd2hvc2UgbGluZSBhbmQgY29sdW1uIG1hdGNoZXMg
dGhlCisgICAgLy8gdGFyZ2V0IGxpbmUgYW5kIGNvbHVtbiB2YWx1ZXMuIElmIGFuIGV4YWN0IG1h
dGNoIGlzIG5vdCBmb3VuZCwgdGhlbgorICAgIC8vIGZpbmQgdGhlIG5lYXJlc3Qgb3BfZGVidWcg
Ynl0ZWNvZGUgdGhhdCBwcmVjZWRlcyB0aGUgdGFyZ2V0IGxpbmUgYW5kCisgICAgLy8gY29sdW1u
IHZhbHVlcy4gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgb3BfZGVidWcgYXQgdGhhdCBwcmVj
ZWRpbmcKKyAgICAvLyBsaW5lIGFuZCBjb2x1bW4gdmFsdWUsIHRoZW4gc2VsZWN0IHRoZSBlYXJs
aWVzdCBvZiB0aG9zZS4KKyAgICAvLworICAgIC8vIFdlIHdhbnQgdGhlIGVhcmxpZXN0IG9uZSBi
ZWNhdXNlIHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBvcF9kZWJ1ZyBieXRlY29kZXMKKyAgICAvLyB0
aGF0IG1hcCB0byBhIGdpdmVuIGxpbmUgYW5kIGNvbHVtbiwgYSBkZWJ1Z2dlciB1c2VyIHdvdWxk
IGV4cGVjdCB0byBicmVhaworICAgIC8vIG9uIHRoZSBmaXJzdCBvbmUgYW5kIHN0ZXAgdGhyb3Vn
aCB0aGUgcmVzdCB0aGVyZWFmdGVyIGlmIG5lZWRlZC4KKworICAgIExpbmVDb2x1bW5JbmZvTGlz
dDo6aXRlcmF0b3IgaXQgPSBzdGQ6Omxvd2VyX2JvdW5kKGxpc3QuYmVnaW4oKSwgbGlzdC5lbmQo
KSwgdGFyZ2V0KTsKKyAgICBpZiAoaXQgPT0gbGlzdC5lbmQoKSB8fCAqaXQgPiB0YXJnZXQpCisg
ICAgICAgIC0taXQ7CisgICAgQVNTRVJUKGl0ID49IGxpc3QuYmVnaW4oKSAmJiBpdCA8IGxpc3Qu
ZW5kKCkgJiYgKml0IDw9IHRhcmdldCk7CisgICAgQVNTRVJUKGl0ID09IGxpc3QuYmVnaW4oKSB8
fCAqKGl0IC0gMSkgPCAqaXQpOworCisgICAgbGluZSA9IGl0LT5saW5lOworICAgIGNvbHVtbiA9
IGl0LT5jb2x1bW47CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+aW5zdHJ1Y3Rpb25PZmZz
ZXQ7CisgICAgQVNTRVJUKGluc3RydWN0aW9ucygpW29mZnNldF0udS5vcGNvZGUgPT0gb3BfZGVi
dWcpOworCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUxpbmVD
b2x1bW5JbmZvKGNvbnN0IExpbmVDb2x1bW5JbmZvJiBmaXJzdCwgY29uc3QgTGluZUNvbHVtbklu
Zm8mIHNlY29uZCkKK3sKKyAgICByZXR1cm4gZmlyc3QgPCBzZWNvbmQ7Cit9CisKK1VubGlua2Vk
Q29kZUJsb2NrOjpMaW5lQ29sdW1uSW5mb0xpc3QmIFVubGlua2VkQ29kZUJsb2NrOjpvcERlYnVn
TGluZUNvbHVtbkluZm9MaXN0KCkKK3sKKyAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7
CisKKyAgICBpZiAobV9yYXJlRGF0YS0+bV9vcERlYnVnTGluZUNvbHVtbkluZm9MaXN0KSB7Cisg
ICAgICAgIEFTU0VSVChtX3JhcmVEYXRhLT5tX29wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3QtPnNp
emUoKSA8PSBtX2V4cHJlc3Npb25JbmZvLnNpemUoKSk7CisgICAgICAgIHJldHVybiAqbV9yYXJl
RGF0YS0+bV9vcERlYnVnTGluZUNvbHVtbkluZm9MaXN0OwogICAgIH0KLSAgICB9IC8vIHN3aXRj
aAorCisgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1f
ZXhwcmVzc2lvbkluZm87CisgICAgc2l6ZV90IHNpemUgPSBtX2V4cHJlc3Npb25JbmZvLnNpemUo
KTsKKworICAgIG1fcmFyZURhdGEtPm1fb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCA9IHN0ZDo6
bWFrZV91bmlxdWU8TGluZUNvbHVtbkluZm9MaXN0PigpOworICAgIExpbmVDb2x1bW5JbmZvTGlz
dCYgaW5mb0xpc3QgPSAqbV9yYXJlRGF0YS0+bV9vcERlYnVnTGluZUNvbHVtbkluZm9MaXN0Owor
CisgICAgZm9yIChzaXplX3Qgc3JjID0gMDsgc3JjIDwgc2l6ZTsgc3JjKyspIHsKKyAgICAgICAg
RXhwcmVzc2lvblJhbmdlSW5mbyYgZXhwckluZm8gPSBleHByZXNzaW9uSW5mb1tzcmNdOworICAg
ICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IGV4cHJJbmZvLmluc3RydWN0aW9uT2Zm
c2V0OworICAgICAgICBPcGNvZGVJRCBvcGNvZGUgPSBpbnN0cnVjdGlvbnMoKVtpbnN0cnVjdGlv
bk9mZnNldF0udS5vcGNvZGU7CisgICAgICAgIGlmIChvcGNvZGUgPT0gb3BfZGVidWcpIHsKKyAg
ICAgICAgICAgIExpbmVDb2x1bW5JbmZvIGluZm87CisgICAgICAgICAgICBpbmZvLmluc3RydWN0
aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBnZXRMaW5lQW5kQ29s
dW1uKGV4cHJJbmZvLCBpbmZvLmxpbmUsIGluZm8uY29sdW1uKTsKKyAgICAgICAgICAgIGluZm9M
aXN0LmFwcGVuZChpbmZvKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbmZvTGlzdC5zaHJpbmtU
b0ZpdCgpOworCisgICAgc3RkOjpzb3J0KGluZm9MaXN0LmJlZ2luKCksIGluZm9MaXN0LmVuZCgp
LCBjb21wYXJlTGluZUNvbHVtbkluZm8pOworCisgICAgcmV0dXJuICptX3JhcmVEYXRhLT5tX29w
RGVidWdMaW5lQ29sdW1uSW5mb0xpc3QuZ2V0KCk7CiB9CiAKIHZvaWQgVW5saW5rZWRDb2RlQmxv
Y2s6OmFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE2MjI1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTU3Ry
aW5nLmgiCi0jaW5jbHVkZSAiTGluZUluZm8uaCIKKyNpbmNsdWRlICJMaW5lQ29sdW1uSW5mby5o
IgogI2luY2x1ZGUgIlBhcnNlck1vZGVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5jbHVk
ZSAiU3BlY2lhbFBvaW50ZXIuaCIKQEAgLTQyLDYgKzQyLDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9D
b21wcmVzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKQEAgLTQ0NCw2ICs0NDUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGV4cHJlc3Np
b25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRp
dm90LAogICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQm
IGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pOworICAgIHVuc2lnbmVkIG9wRGVidWdCeXRlY29kZU9m
ZnNldEZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pOwog
CiAgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2Fw
dHVyZWRWYXJpYWJsZXMsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50LCB1
bnNpZ25lZCBlbmRDb2x1bW4pCiAgICAgewpAQCAtNDYyLDYgKzQ2NCw5IEBAIHB1YmxpYzoKICAg
ICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gMDsg
fQogICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9
CiAKKyAgICB2b2lkIGR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKCk7IC8vIEZvciBkZWJ1Z2dpbmcg
cHVycG9zZSBvbmx5LgorICAgIHZvaWQgZHVtcE9wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3QoKTsg
Ly8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkuCisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtl
ZENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYpOwogICAgIH5VbmxpbmtlZENvZGVCbG9jaygpOwpAQCAtNDgyLDYgKzQ4NywxMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSYXJlRGF0YSk7CiAg
ICAgfQogCisgICAgdm9pZCBnZXRMaW5lQW5kQ29sdW1uKEV4cHJlc3Npb25SYW5nZUluZm8mLCB1
bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxM
aW5lQ29sdW1uSW5mbz4gTGluZUNvbHVtbkluZm9MaXN0OworICAgIExpbmVDb2x1bW5JbmZvTGlz
dCYgb3BEZWJ1Z0xpbmVDb2x1bW5JbmZvTGlzdCgpOworCiAgICAgUmVmQ291bnRlZEFycmF5PFVu
bGlua2VkSW5zdHJ1Y3Rpb24+IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7CiAKICAgICBpbnQgbV9u
dW1QYXJhbWV0ZXJzOwpAQCAtNTQ2LDYgKzU1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVjdG9y
PFVubGlua2VkU3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKICAg
ICAgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uPiBtX2V4cHJlc3Np
b25JbmZvRmF0UG9zaXRpb25zOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGluZUNvbHVtbklu
Zm9MaXN0PiBtX29wRGVidWdMaW5lQ29sdW1uSW5mb0xpc3Q7CiAgICAgfTsKIAogcHJpdmF0ZToK
</data>

          </attachment>
      

    </bug>

</bugzilla>