<?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>109694</bug_id>
          
          <creation_ts>2013-02-13 07:25:15 -0800</creation_ts>
          <short_desc>Add support for convenient conversion from JSStringRef to QString</short_desc>
          <delta_ts>2013-03-13 03:18:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>109677</blocked>
    
    <blocked>112144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Simon Hausmann">hausmann</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>831891</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-13 07:25:15 -0800</bug_when>
    <thetext>[Qt] Add support for convenient conversion from JSStringRef to QString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831895</commentid>
    <comment_count>1</comment_count>
      <attachid>188081</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-13 07:28:47 -0800</bug_when>
    <thetext>Created attachment 188081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831900</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-13 07:32:30 -0800</bug_when>
    <thetext>Attachment 188081 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSStringRefQt.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSStringRefQt.h&apos;, u&apos;Source/JavaScriptCore/API/OpaqueJSString.h&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;]&quot; exit_code: 1
Source/JavaScriptCore/API/JSStringRefQt.h:41:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832413</commentid>
    <comment_count>3</comment_count>
      <attachid>188081</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-13 15:33:59 -0800</bug_when>
    <thetext>Comment on attachment 188081
Patch

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

Honestly, that looks like an early optimization.


&gt; Source/JavaScriptCore/API/OpaqueJSString.h:87
&gt; +#if PLATFORM(QT)
&gt; +        // If we&apos;re going to make a deep copy for use in the API layer,
&gt; +        // then we might as well store it in a format particularly
&gt; +        // suitable for &quot;export&quot; later.
&gt; +        m_string = QString(string);
&gt; +#else
&gt;          // Make a copy of the source string.
&gt;          if (string.is8Bit())
&gt;              m_string = String(string.characters8(), string.length());
&gt;          else
&gt;              m_string = String(string.characters16(), string.length());
&gt; +#endif
&gt;      }

This should probably be better replaced by
    m_string = string.isolatedCopy()

You can then make a special case for BufferAdoptedQString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832894</commentid>
    <comment_count>4</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-02-14 03:14:12 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 188081 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188081&amp;action=review
&gt; 
&gt; Honestly, that looks like an early optimization.
&gt; 
&gt; 
&gt; &gt; Source/JavaScriptCore/API/OpaqueJSString.h:87
&gt; &gt; +#if PLATFORM(QT)
&gt; &gt; +        // If we&apos;re going to make a deep copy for use in the API layer,
&gt; &gt; +        // then we might as well store it in a format particularly
&gt; &gt; +        // suitable for &quot;export&quot; later.
&gt; &gt; +        m_string = QString(string);
&gt; &gt; +#else
&gt; &gt;          // Make a copy of the source string.
&gt; &gt;          if (string.is8Bit())
&gt; &gt;              m_string = String(string.characters8(), string.length());
&gt; &gt;          else
&gt; &gt;              m_string = String(string.characters16(), string.length());
&gt; &gt; +#endif
&gt; &gt;      }
&gt; 
&gt; This should probably be better replaced by
&gt;     m_string = string.isolatedCopy()
&gt; 
Well, the existing code would indeed be better using isolatedCopy so it wouldn&apos;t copy literals, but wouldn&apos;t String objects adopted from QString still be better for all other cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832913</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-14 03:49:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 188081 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188081&amp;action=review
&gt; 
&gt; Honestly, that looks like an early optimization.

I originally did this patch as the result of optimizing the QObject bridge, which became slower after the port to the JSC C API and our customers complained when switching to Qt 5. So I sat down and looked a the profile of various use-cases and found that we really do spend a lot of time allocating memory for string copies.

But let&apos;s see, maybe I&apos;m missing something:

I can see three paths a JSStringRef can take after its creation:

    (1) It is passed back into the C API layer (for example for JSObjectGetProperty) and in the overwhelming number of cases it is used as identifier.
    (2) It is operated on directly on using for example JSStringIsEqual(ToUTF8CString).
    (3) It is used in the calling layer, where with a high probability that it is converted to a native string type (CFStringRef, QString, etc.)

The third case involves an extra copy of data that I would like to eliminate for the Qt port, because I believe that it is particularly common. I don&apos;t believe the second use-case is affected by this, especially given that JSStringIsEqualToUTF8CString creates a temporary of the const char *. The first case - use of the JSStringRef as identifier - I suppose might affect performance negatively if the original string was an 8-bit identifier and the new one will always be 16-bit (due to QString) ?

I don&apos;t know the identifier code well enough to say for sure if that&apos;s the case and how identical 8 and 16 bit identifiers are handled. Do you know how that works?
 
&gt; &gt; Source/JavaScriptCore/API/OpaqueJSString.h:87
&gt; &gt; +#if PLATFORM(QT)
&gt; &gt; +        // If we&apos;re going to make a deep copy for use in the API layer,
&gt; &gt; +        // then we might as well store it in a format particularly
&gt; &gt; +        // suitable for &quot;export&quot; later.
&gt; &gt; +        m_string = QString(string);
&gt; &gt; +#else
&gt; &gt;          // Make a copy of the source string.
&gt; &gt;          if (string.is8Bit())
&gt; &gt;              m_string = String(string.characters8(), string.length());
&gt; &gt;          else
&gt; &gt;              m_string = String(string.characters16(), string.length());
&gt; &gt; +#endif
&gt; &gt;      }
&gt; 
&gt; This should probably be better replaced by
&gt;     m_string = string.isolatedCopy()
&gt; 
&gt; You can then make a special case for BufferAdoptedQString.

You&apos;re right, isolatedCopy seems like a better fitting call to make.

As you can see however I&apos;m less interested in the case where the underlying WTFString was previously created from a QString than in the case where we&apos;re only going to use the JSStringRef for a QString later. So I&apos;m going to propose an isolatedCopyForAPI() to make it clearer what the copy is &quot;optimized&quot; for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832917</commentid>
    <comment_count>6</comment_count>
      <attachid>188306</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-14 03:53:46 -0800</bug_when>
    <thetext>Created attachment 188306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832919</commentid>
    <comment_count>7</comment_count>
      <attachid>188307</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-14 03:54:46 -0800</bug_when>
    <thetext>Created attachment 188307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832928</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 04:05:44 -0800</bug_when>
    <thetext>Attachment 188307 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSStringRefQt.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSStringRefQt.h&apos;, u&apos;Source/JavaScriptCore/API/OpaqueJSString.h&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/WTFString.cpp&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/API/JSStringRefQt.h:41:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833741</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-14 23:41:08 -0800</bug_when>
    <thetext>Sorry, I won&apos;t have time to review this one tonight. :( 
I thought you were doing that for DumpRenderTree, which is why I thought that was overkill.

General comments:
I think isolatedCopyForAPI does not belong is WTF unless you also need it for WebKit2. It could probably just be an inline function in a Qt header. I would prefer it not being in WTFString.h, but if it has to be, I would prefer as a helper function instead of a member (because WTF::String is already too long and people do not always bother searching for the right tools for the job in long headers).

I think your comment should mention that QString ref-count is thread safe, which is why it is safe to do a String(QStringData)-&gt;QString conversion without actually copying the data. Otherwise the code looks wrong if you only know about BufferAdoptedQString.

Don&apos;t worry about the identifiers being 16 bits strings. The part you are gonna pay is the lack of hash in the StringImpl.

It would be good to have numbers in the ChangeLog to back the perf gain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833797</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-15 01:25:42 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Sorry, I won&apos;t have time to review this one tonight. :( 
&gt; I thought you were doing that for DumpRenderTree, which is why I thought that was overkill.

In DRT the patch adds convenience :)
 
&gt; General comments:
&gt; I think isolatedCopyForAPI does not belong is WTF unless you also need it for WebKit2. It could probably just be an inline function in a Qt header. I would prefer it not being in WTFString.h, but if it has to be, I would prefer as a helper function instead of a member (because WTF::String is already too long and people do not always bother searching for the right tools for the job in long headers).

Well, the optimization doesn&apos;t _require_ any change in WTFString.h at all. The question is: Where to place the #if PLATFORM(QT) ?

In the original patch it was placed in OpaqueJSString.h. I can leave it there if you prefer, a bit like this (pseudo):

OpaqueJSString(const String&amp; string)
{
#if PLATFORM(QT)
    // Comment here about why and atomic refcounting, etc.
    m_string = QString(string);
#else
    m_string = string.isolatedCopy();
#endif
}
 
&gt; I think your comment should mention that QString ref-count is thread safe, which is why it is safe to do a String(QStringData)-&gt;QString conversion without actually copying the data. Otherwise the code looks wrong if you only know about BufferAdoptedQString.

Good point, I&apos;ll stress that in the comment(s).
 
&gt; Don&apos;t worry about the identifiers being 16 bits strings. The part you are gonna pay is the lack of hash in the StringImpl.

Ohh, ok.
 
&gt; It would be good to have numbers in the ChangeLog to back the perf gain.

Will add some.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833816</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-15 02:15:28 -0800</bug_when>
    <thetext>
&gt; In the original patch it was placed in OpaqueJSString.h. I can leave it there if you prefer, a bit like this (pseudo):
&gt; 
&gt; OpaqueJSString(const String&amp; string)
&gt; {
&gt; #if PLATFORM(QT)
&gt;     // Comment here about why and atomic refcounting, etc.
&gt;     m_string = QString(string);
&gt; #else
&gt;     m_string = string.isolatedCopy();
&gt; #endif
&gt; }

Back to where we started :)

I think that is right for now.
That is a nice tool you invented and it could be useful elsewhere in the future. In that case we&apos;ll move the function to a good place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844073</commentid>
    <comment_count>12</comment_count>
      <attachid>188307</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-28 07:48:42 -0800</bug_when>
    <thetext>Comment on attachment 188307
Patch

Taking this out of the review queue. I need to do some more benchmarking (found some cases where it didn&apos;t work quite so well), so I&apos;m going to split this up into two. One patch that adds the convenience (no extra cost since we&apos;re already paying for it anyway) and a separate patch/bug for the optimization itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844078</commentid>
    <comment_count>13</comment_count>
      <attachid>190728</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-28 07:56:48 -0800</bug_when>
    <thetext>Created attachment 190728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844081</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-28 08:00:54 -0800</bug_when>
    <thetext>Attachment 190728 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSStringRefQt.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSStringRefQt.h&apos;, u&apos;Source/JavaScriptCore/API/OpaqueJSString.h&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;]&quot; exit_code: 1
Source/JavaScriptCore/API/JSStringRefQt.h:41:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853416</commentid>
    <comment_count>15</comment_count>
      <attachid>192725</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-03-12 06:49:54 -0700</bug_when>
    <thetext>Created attachment 192725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853421</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-12 06:53:07 -0700</bug_when>
    <thetext>Attachment 192725 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSStringRefQt.cpp&apos;, u&apos;Source/JavaScriptCore/API/JSStringRefQt.h&apos;, u&apos;Source/JavaScriptCore/API/OpaqueJSString.h&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;]&quot; exit_code: 1
Source/JavaScriptCore/API/JSStringRefQt.h:41:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854163</commentid>
    <comment_count>17</comment_count>
      <attachid>192725</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-03-13 02:58:14 -0700</bug_when>
    <thetext>Comment on attachment 192725
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854168</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-03-13 03:18:03 -0700</bug_when>
    <thetext>Committed r145700: &lt;http://trac.webkit.org/changeset/145700&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188081</attachid>
            <date>2013-02-13 07:28:47 -0800</date>
            <delta_ts>2013-02-14 03:53:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109694-20130213162524.patch</filename>
            <type>text/plain</type>
            <size>7219</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YWEwYmI0ZWUzYzg4ZDcwMDAxYzU4MjA3YzkxNjhmMjNlZjA5NTRmLi4wZmFmN2VmOGQxMjEzMjI0
YjE0MDUzNDg1YWI1OTNkYmE4NjcxNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxMy0wMi0xMyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBk
aWdpYS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbnZlbmllbnQgY29udmVyc2lv
biBmcm9tIEpTU3RyaW5nUmVmIHRvIFFTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBKU1N0cmluZ0NvcHlRU3RyaW5nIGhlbHBlciBmdW5j
dGlvbiB0aGF0IGFsbG93cyBmb3IgdGhlIGNvbnZlbmllbnQKKyAgICAgICAgZXh0cmFjdGlvbiBv
ZiBhIFFTdHJpbmcgb3V0IG9mIGEgSlNTdHJpbmdSZWYuIElmIHRoZSB1bmRlcmx5aW5nIFdURlN0
cmluZworICAgICAgICB3YXMgcHJldmlvdXNseSBjcmVhdGVkIGZyb20gYSBRU3RyaW5nLCB0aGVu
IHRoZSBjb252ZXJzaW9uIGlzIHBhcnRpY3VsYXJseQorICAgICAgICBjaGVhcC4KKworICAgICAg
ICAqIEFQSS9KU1N0cmluZ1JlZlF0LmNwcDogQWRkZWQuCisgICAgICAgIChKU1N0cmluZ0NvcHlR
U3RyaW5nKToKKyAgICAgICAgKiBBUEkvSlNTdHJpbmdSZWZRdC5oOiBBZGRlZC4KKyAgICAgICAg
KiBBUEkvT3BhcXVlSlNTdHJpbmcuaDoKKyAgICAgICAgKE9wYXF1ZUpTU3RyaW5nKToKKyAgICAg
ICAgKE9wYXF1ZUpTU3RyaW5nOjpxU3RyaW5nKToKKyAgICAgICAgKE9wYXF1ZUpTU3RyaW5nOjpP
cGFxdWVKU1N0cmluZyk6CisgICAgICAgICogVGFyZ2V0LnByaToKKwogMjAxMy0wMi0xMiAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEVuYWJs
ZSBQQUdFX1ZJU0lCSUxJVFlfQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU3RyaW5nUmVmUXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmlu
Z1JlZlF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzk5MGFjZGM1NjFhNzM3NjBmMWM1MWIzMTU0MzFmMTVm
ZjRmMzMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0
cmluZ1JlZlF0LmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1N0cmluZ1JlZlF0LmgiCisK
KyNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgor
I2luY2x1ZGUgIkpTU3RyaW5nUmVmLmgiCisjaW5jbHVkZSAiT3BhcXVlSlNTdHJpbmcuaCIKKyNp
bmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KKworUVN0cmluZyBKU1N0cmluZ0NvcHlRU3RyaW5nKEpTU3RyaW5nUmVmIHN0cmluZykKK3sK
KyAgICByZXR1cm4gc3RyaW5nLT5xU3RyaW5nKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmUXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTdHJpbmdSZWZRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiM2VmOWI4MjcwNTgzNjkwMDdiZjY2Yjkw
MDk2ODdiOWU3ZDU3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU3RyaW5nUmVmUXQuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNTdHJpbmdSZWZRdF9oCisjZGVmaW5lIEpTU3RyaW5nUmVm
UXRfaAorCisjaW5jbHVkZSAiSlNCYXNlLmgiCisjaW5jbHVkZSA8UVN0cmluZz4KKworLyogUVN0
cmluZyBjb252ZW5pZW5jZSBtZXRob2RzICovCisKKy8qIQorQGZ1bmN0aW9uCitAYWJzdHJhY3Qg
ICAgICAgICBDcmVhdGVzIGEgUVN0cmluZyBmcm9tIGEgSmF2YVNjcmlwdCBzdHJpbmcuCitAcGFy
YW0gc3RyaW5nICAgICBUaGUgSlNTdHJpbmcgdG8gY29weSBpbnRvIHRoZSBuZXcgUVN0cmluZy4K
K0ByZXN1bHQgICAgICAgICAgIEEgUVN0cmluZyBjb250YWluaW5nIHN0cmluZy4KKyovCitKU19F
WFBPUlQgUVN0cmluZyBKU1N0cmluZ0NvcHlRU3RyaW5nKEpTU3RyaW5nUmVmIHN0cmluZyk7CisK
KyNlbmRpZiAvKiBKU1N0cmluZ1JlZlF0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T3BhcXVlSlNTdHJpbmcuaAppbmRleCAwNDY0ZTg4MTMzOGIxNjIzODUyNmUwOWUwYjQxMTgxNDFi
NDk0NmE1Li4yOWVmYTU1NmEyMzQ4MDlkOWYzM2VmNDExOGQ2ZmU0OTExMjBjMzZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oCkBAIC01OCw2ICs1OCwxMCBA
QCBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8T3Bh
cXVlSlNTdHJpbmc+IHsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzdHJpbmcoKSBj
b25zdDsKICAgICBKU0M6OklkZW50aWZpZXIgaWRlbnRpZmllcihKU0M6OkpTR2xvYmFsRGF0YSop
IGNvbnN0OworI2lmIFBMQVRGT1JNKFFUKQorICAgIC8vIFRoaXMgaXMgY2hlYXAgaWYgbV9zdHJp
bmcgd2FzIGNyZWF0ZWQgZnJvbSBhIFFTdHJpbmcuCisgICAgUVN0cmluZyBxU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KKyNlbmRpZgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkPE9wYXF1ZUpTU3RyaW5nPjsKQEAgLTY4LDEx
ICs3MiwxOCBAQCBwcml2YXRlOgogCiAgICAgT3BhcXVlSlNTdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiAgICAgeworI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICAvLyBJZiB3ZSdyZSBnb2lu
ZyB0byBtYWtlIGEgZGVlcCBjb3B5IGZvciB1c2UgaW4gdGhlIEFQSSBsYXllciwKKyAgICAgICAg
Ly8gdGhlbiB3ZSBtaWdodCBhcyB3ZWxsIHN0b3JlIGl0IGluIGEgZm9ybWF0IHBhcnRpY3VsYXJs
eQorICAgICAgICAvLyBzdWl0YWJsZSBmb3IgImV4cG9ydCIgbGF0ZXIuCisgICAgICAgIG1fc3Ry
aW5nID0gUVN0cmluZyhzdHJpbmcpOworI2Vsc2UKICAgICAgICAgLy8gTWFrZSBhIGNvcHkgb2Yg
dGhlIHNvdXJjZSBzdHJpbmcuCiAgICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAg
ICAgICBtX3N0cmluZyA9IFN0cmluZyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmcoc3RyaW5n
LmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworI2VuZGlmCiAgICAgfQogCiAgICAg
T3BhcXVlSlNTdHJpbmcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKaW5kZXggYjJhOWFhYzY2YzM0YmE5NDkwNGEyYjgwN2Mz
ZWJlMmMxOTk3OWEzNy4uMWUzMDVjNjU3YTE0NmVkNjYwNWQ3Mjk1YjNhNzFkYWU3OTM2ZjI1YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKQEAgLTQyLDYgKzQyLDcgQEAgU09VUkNFUyArPSBc
CiAgICAgQVBJL0pTT2JqZWN0UmVmLmNwcCBcCiAgICAgQVBJL0pTU2NyaXB0UmVmLmNwcCBcCiAg
ICAgQVBJL0pTU3RyaW5nUmVmLmNwcCBcCisgICAgQVBJL0pTU3RyaW5nUmVmUXQuY3BwIFwKICAg
ICBBUEkvSlNWYWx1ZVJlZi5jcHAgXAogICAgIEFQSS9KU1dlYWtPYmplY3RNYXBSZWZQcml2YXRl
LmNwcCBcCiAgICAgQVBJL09wYXF1ZUpTU3RyaW5nLmNwcCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188306</attachid>
            <date>2013-02-14 03:53:46 -0800</date>
            <delta_ts>2013-02-14 03:54:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109694-20130214125029.patch</filename>
            <type>text/plain</type>
            <size>61331</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YWEwYmI0ZWUzYzg4ZDcwMDAxYzU4MjA3YzkxNjhmMjNlZjA5NTRmLi42ODczMGUwNTllNGE1MjI2
OTMxYTg5YmE3ZWIyYTExMzk5M2Q5YTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxMy0wMi0xMyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBk
aWdpYS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbnZlbmllbnQgY29udmVyc2lv
biBmcm9tIEpTU3RyaW5nUmVmIHRvIFFTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBKU1N0cmluZ0NvcHlRU3RyaW5nIGhlbHBlciBmdW5j
dGlvbiB0aGF0IGFsbG93cyBmb3IgdGhlIGNvbnZlbmllbnQKKyAgICAgICAgZXh0cmFjdGlvbiBv
ZiBhIFFTdHJpbmcgb3V0IG9mIGEgSlNTdHJpbmdSZWYuIFRoYXQgZXh0cmFjdGlvbiB3aWxsIG5v
dyBiZQorICAgICAgICB2ZXJ5IGZhc3QgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBzdHJpbmcgd2ls
bCBiZSBjcmVhdGVkIGZyb20gYSBkZWVwIGNvcHkKKyAgICAgICAgb2YgYSBRU3RyaW5nIGluc3Rl
YWQgb2YgZnJvbSBhIHJhdyBkZWVwIFN0cmluZ0ltcGwgY29weS4gVGhpcyBlc3NlbnRpYWxseQor
ICAgICAgICBvcHRpbWl6ZXMgSlNTdHJpbmdSZWYgZm9yIHRoZSBzZWVtaW5nbHkgY29tbW9uIGNh
c2Ugb2YgZW5kaW5nIHVwIGJlaW5nCisgICAgICAgIGNvbnZlcnRlZCB0byBhICJuYXRpdmUiIHN0
cmluZy4KKworICAgICAgICAqIEFQSS9KU1N0cmluZ1JlZlF0LmNwcDogQWRkZWQuCisgICAgICAg
IChKU1N0cmluZ0NvcHlRU3RyaW5nKToKKyAgICAgICAgKiBBUEkvSlNTdHJpbmdSZWZRdC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBBUEkvT3BhcXVlSlNTdHJpbmcuaDoKKyAgICAgICAgKE9wYXF1ZUpT
U3RyaW5nKToKKyAgICAgICAgKE9wYXF1ZUpTU3RyaW5nOjpxU3RyaW5nKToKKyAgICAgICAgKE9w
YXF1ZUpTU3RyaW5nOjpPcGFxdWVKU1N0cmluZyk6CisgICAgICAgICogVGFyZ2V0LnByaToKKwog
MjAxMy0wMi0xMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtpT1NdIEVuYWJsZSBQQUdFX1ZJU0lCSUxJVFlfQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU3MDYzZWRhZTc2NzA1
ZDUwZjhjZWMxNTUxODBkZjdmZDI2ZGY1YzAuLmY2YTE4NmMxMTBlYzI3MDUzZDY0Y2Q0MzkzYzk0
ODc5NWI4YWRkZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMDItMTQgIFNpbW9uIEhhdXNt
YW5uICA8c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciBjb252ZW5pZW50IGNvbnZlcnNpb24gZnJvbSBKU1N0cmluZ1JlZiB0byBRU3RyaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2OTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgSlNTdHJpbmdD
b3B5UVN0cmluZyBoZWxwZXIgZnVuY3Rpb24gdGhhdCBhbGxvd3MgZm9yIHRoZSBjb252ZW5pZW50
CisgICAgICAgIGV4dHJhY3Rpb24gb2YgYSBRU3RyaW5nIG91dCBvZiBhIEpTU3RyaW5nUmVmLiBU
aGF0IGV4dHJhY3Rpb24gd2lsbCBub3cgYmUKKyAgICAgICAgdmVyeSBmYXN0IGJlY2F1c2UgdGhl
IHVuZGVybHlpbmcgc3RyaW5nIHdpbGwgYmUgY3JlYXRlZCBmcm9tIGEgZGVlcCBjb3B5CisgICAg
ICAgIG9mIGEgUVN0cmluZyBpbnN0ZWFkIG9mIGZyb20gYSByYXcgZGVlcCBTdHJpbmdJbXBsIGNv
cHkuIFRoaXMgZXNzZW50aWFsbHkKKyAgICAgICAgb3B0aW1pemVzIEpTU3RyaW5nUmVmIGZvciB0
aGUgc2VlbWluZ2x5IGNvbW1vbiBjYXNlIG9mIGVuZGluZyB1cCBiZWluZworICAgICAgICBjb252
ZXJ0ZWQgdG8gYSAibmF0aXZlIiBzdHJpbmcuCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJp
bmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6Omlzb2xhdGVkQ29weUZvckFQSSk6CisgICAg
ICAgIChXVEYpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoU3Ry
aW5nKToKKwogMjAxMy0wMi0xMiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBHTGliIHVuaWNvZGUgYmFja2VuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwppbmRleCBjN2U2MWI5MDlhNDNlYjI1OWY4MDEzNWI3MDEyMmE3Njc5NDczYWQ4Li4w
YmE0MTdhMzY2MDE1YWQwMGJkMTc1N2M1YTdmMDk0ZmVhZGIwODQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDEzLTAyLTEzICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNt
YW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIFBvcnQgR0NDb250cm9sbGVyIHRvIEpTQyBD
IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5
NjkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGhvb2tzIHRvIHJldHJpZXZlIEpTQ29udGV4dFJlZiBhbmQgd2luZG93IG9iamVjdC4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnZXRKU1dpbmRvd09iamVjdCk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaDoKKwogMjAxMy0wMi0x
MiAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBb
VGV4TWFwXSBBcHBseSBmcmFtZXMtcGVyLXNlY29uZCBkZWJ1ZyBjb3VudGVyIHRvIFdLMS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmUXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFj
OTkwYWNkYzU2MWE3Mzc2MGYxYzUxYjMxNTQzMWYxNWZmNGYzMzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmUXQuY3BwCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgRGlnaWEgUGxj
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTU3RyaW5nUmVmUXQuaCIKKworI2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNp
bmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIK
KyNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorCitRU3RyaW5nIEpTU3RyaW5nQ29w
eVFTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIHJldHVybiBzdHJpbmctPnFTdHJp
bmcoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdS
ZWZRdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZlF0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMmIzZWY5YjgyNzA1ODM2OTAwN2JmNjZiOTAwOTY4N2I5ZTdkNTdmMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5oCkBAIC0w
LDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgRGln
aWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1N0
cmluZ1JlZlF0X2gKKyNkZWZpbmUgSlNTdHJpbmdSZWZRdF9oCisKKyNpbmNsdWRlICJKU0Jhc2Uu
aCIKKyNpbmNsdWRlIDxRU3RyaW5nPgorCisvKiBRU3RyaW5nIGNvbnZlbmllbmNlIG1ldGhvZHMg
Ki8KKworLyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCAgICAgICAgIENyZWF0ZXMgYSBRU3RyaW5n
IGZyb20gYSBKYXZhU2NyaXB0IHN0cmluZy4KK0BwYXJhbSBzdHJpbmcgICAgIFRoZSBKU1N0cmlu
ZyB0byBjb3B5IGludG8gdGhlIG5ldyBRU3RyaW5nLgorQHJlc3VsdCAgICAgICAgICAgQSBRU3Ry
aW5nIGNvbnRhaW5pbmcgc3RyaW5nLgorKi8KK0pTX0VYUE9SVCBRU3RyaW5nIEpTU3RyaW5nQ29w
eVFTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKTsKKworI2VuZGlmIC8qIEpTU3RyaW5nUmVmUXRf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmlu
Zy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oCmluZGV4IDA0
NjRlODgxMzM4YjE2MjM4NTI2ZTA5ZTBiNDExODE0MWI0OTQ2YTUuLjg4OWEwMTdmYTM0MmQzMzlk
OTY0NzU0MmVjNjE4NDk1YzYxNDA0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09w
YXF1ZUpTU3RyaW5nLmgKQEAgLTU4LDYgKzU4LDEwIEBAIHN0cnVjdCBPcGFxdWVKU1N0cmluZyA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxPcGFxdWVKU1N0cmluZz4gewogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RyaW5nIHN0cmluZygpIGNvbnN0OwogICAgIEpTQzo6SWRlbnRpZmll
ciBpZGVudGlmaWVyKEpTQzo6SlNHbG9iYWxEYXRhKikgY29uc3Q7CisjaWYgUExBVEZPUk0oUVQp
CisgICAgLy8gVGhpcyBpcyBjaGVhcCBpZiBtX3N0cmluZyB3YXMgY3JlYXRlZCBmcm9tIGEgUVN0
cmluZy4KKyAgICBRU3RyaW5nIHFTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQor
I2VuZGlmCiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6VGhyZWFkU2FmZVJlZkNv
dW50ZWQ8T3BhcXVlSlNTdHJpbmc+OwpAQCAtNjgsMTEgKzcyLDcgQEAgcHJpdmF0ZToKIAogICAg
IE9wYXF1ZUpTU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgLy8g
TWFrZSBhIGNvcHkgb2YgdGhlIHNvdXJjZSBzdHJpbmcuCi0gICAgICAgIGlmIChzdHJpbmcuaXM4
Qml0KCkpCi0gICAgICAgICAgICBtX3N0cmluZyA9IFN0cmluZyhzdHJpbmcuY2hhcmFjdGVyczgo
KSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHJpbmcg
PSBTdHJpbmcoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgICAg
ICBtX3N0cmluZyA9IHN0cmluZy5pc29sYXRlZENvcHlGb3JBUEkoKTsKICAgICB9CiAKICAgICBP
cGFxdWVKU1N0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvVGFyZ2V0LnByaQppbmRleCBiMmE5YWFjNjZjMzRiYTk0OTA0YTJiODA3YzNl
YmUyYzE5OTc5YTM3Li4xZTMwNWM2NTdhMTQ2ZWQ2NjA1ZDcyOTViM2E3MWRhZTc5MzZmMjVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpAQCAtNDIsNiArNDIsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBBUEkvSlNPYmplY3RSZWYuY3BwIFwKICAgICBBUEkvSlNTY3JpcHRSZWYuY3BwIFwKICAg
ICBBUEkvSlNTdHJpbmdSZWYuY3BwIFwKKyAgICBBUEkvSlNTdHJpbmdSZWZRdC5jcHAgXAogICAg
IEFQSS9KU1ZhbHVlUmVmLmNwcCBcCiAgICAgQVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUu
Y3BwIFwKICAgICBBUEkvT3BhcXVlSlNTdHJpbmcuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAppbmRleCA4ZmFjNTU5OWEzZTEwNGVkMTFmNjJmYTM2MjUyMjdhMzAxOWNhNDk3Li5lYmVk
OWQ5NGUzMTY1M2NjM2U2MjU0YjkxY2IyZDQzZmRjYjhiZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuY3BwCkBAIC02NjEsNiArNjYxLDIyIEBAIFN0cmluZyBTdHJpbmc6Omlzb2xhdGVkQ29w
eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC0+aXNvbGF0ZWRDb3B5KCk7CiB9CiAKK1N0cmlu
ZyBTdHJpbmc6Omlzb2xhdGVkQ29weUZvckFQSSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyNpZiBQTEFURk9STShRVCkKKyAgICAvLyBBIGRl
ZXAgc3RyaW5nIGNvcHkgdGhhdCBpcyBzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiB0aGUgQVBJIGxh
eWVyCisgICAgLy8gaXMgb3B0aW1pemVkIGJ5IG1ha2luZyBhIGNvcHkgaW50byBhIFFTdHJpbmcg
YW5kIG1ha2luZyB0aGUgV1RGU3RyaW5nCisgICAgLy8gYWRvcHQgdGhlIGRhdGEuIFRoYXQgbWFr
ZXMgaXQgdmVyeSBmYXN0IHRvIGV4dHJhY3QgYSBRU3RyaW5nIG91dCBvZgorICAgIC8vIGl0IGxh
dGVyLCBzb21ldGhpbmcgdGhhdCBpcyBsaWtlbHkgdG8gaGFwcGVuIGluIHRoZSBBUEkgbGF5ZXIu
CisgICAgUVN0cmluZyBkZWVwQ29weSgqdGhpcyk7CisgICAgcmV0dXJuIFN0cmluZyhkZWVwQ29w
eSk7CisjZWxzZQorICAgIHJldHVybiBtX2ltcGwtPmlzb2xhdGVkQ29weSgpOworI2VuZGlmCit9
CisKIGJvb2wgU3RyaW5nOjppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSBjb25zdAogewog
ICAgIGlmICghaW1wbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKaW5kZXggMGI4NzY5ZDk4MGZk
ZDc1MzA0N2IxZTFjYWI1ZDNkZWQxMjMyYzA1OC4uZmMzNDFmZmFjNDVlMDcyZmMxZTEzYWM5MDQ2
MzhkZTE0NjQzMzE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCkBAIC0zOTQsNiArMzk0LDcg
QEAgcHVibGljOgogICAgIGJvb2wgcGVyY2VudGFnZShpbnQmIHBlcmNlbnRhZ2UpIGNvbnN0Owog
CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBpc29sYXRlZENvcHkoKSBjb25zdDsK
KyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGlzb2xhdGVkQ29weUZvckFQSSgpIGNv
bnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGlzU2FmZVRvU2VuZFRvQW5vdGhl
clRocmVhZCgpIGNvbnN0OwogCiAgICAgLy8gUHJldmVudCBTdHJpbmdzIGZyb20gYmVpbmcgaW1w
bGljaXRseSBjb252ZXJ0YWJsZSB0byBib29sIGFzIGl0IHdpbGwgYmUgYW1iaWd1b3VzIG9uIGFu
eSBwbGF0Zm9ybSB0aGF0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCmluZGV4IDVjMzYyNWFiNmE2MTdh
ZmU5MjVkYzVlNTFmZGQwYmY5OTg2OTc0ZGUuLjA3NTI4YjAxZjk2Mzc4YzA0NTBjOGU5YjFmOTQ1
NzZhMGZmNjgzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCkBAIC05OTIsMyArOTkyLDEwIEBA
IHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyTm90aWZpY2F0aW9uUGVybWlzc2lv
bnMoKQogICAgIFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmlj
YXRpb25QcmVzZW50ZXIoKS0+Y2xlYXJDYWNoZWRQZXJtaXNzaW9ucygpOwogI2VuZGlmCiB9CisK
K3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdldEpTV2luZG93T2JqZWN0KFFXZWJGcmFt
ZUFkYXB0ZXIqIGFkYXB0ZXIsIEpTQ29udGV4dFJlZiogY29udGV4dCwgSlNPYmplY3RSZWYqIG9i
amVjdCkKK3sKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhhZGFwdGVy
LT5mcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgICpvYmplY3QgPSB0b1JlZih3
aW5kb3cpOworICAgICpjb250ZXh0ID0gdG9SZWYod2luZG93LT5nbG9iYWxFeGVjKCkpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdC5oCmluZGV4IGVjN2IxN2IwMmFlNjRhNzg2YjMxZTUyNWQ1Y2ViYjdmYjk5
MGNkMTAuLjQwMWQ5YjYyOWYxMDNhZTA1MjYyYjRkN2ZlNTBjNTk5NmFkMzk2MTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxRVmVjdG9yPgogCiB0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYg
c3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBUZXh0OwpAQCAtMjA5LDYgKzIxMCw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBR
U3RyaW5nIGZyYW1lUmVuZGVyVHJlZUR1bXAoUVdlYkZyYW1lQWRhcHRlciopOwogICAgIHN0YXRp
YyB2b2lkIGNsZWFyTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKTsKKworICAgIHN0YXRpYyB2b2lk
IGdldEpTV2luZG93T2JqZWN0KFFXZWJGcmFtZUFkYXB0ZXIqLCBKU0NvbnRleHRSZWYqLCBKU09i
amVjdFJlZiopOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggOGEzOTk4OWE0ZWYwNjZlMzYyOTAxYWEwMjAwYzkwMTUwMWIz
OTU0Ny4uYjFiOTg2ZjVlYmQ0ODI3ZTMxMmEzMWNlZTc3MTEwY2MxMWRhNWQ0ZSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NyBA
QAorMjAxMy0wMi0xMyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+
CisKKyAgICAgICAgW1F0XSBQb3J0IEdDQ29udHJvbGxlciB0byBKU0MgQyBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY5MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBUZXN0UnVubmVy
IHRvIFRlc3RSdW5uZXJRdCB0byBhdm9pZCBjb25mbGljdCB3aGVuCisgICAgICAgIGluY2x1ZGlu
ZyBUZXN0UnVubmVyLmggaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBSZXBsYWNlZCBRT2JqZWN0
IGJhc2VkIEdDQ29udHJvbGxlciBpbXBsZW1lbnRhdGlvbiB3aXRoIEpTQyBDIEFQSQorICAgICAg
ICBiYXNlZCBvbmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJl
ZS5wcm86CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6
RHVtcFJlbmRlclRyZWU6OmluaXRKU09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6bWV0aG9k
TmFtZVN0cmluZ0ZvckZhaWxlZFRlc3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjp0ZXN0
UnVubmVyKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9xdC9HQ0NvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChHQ0NvbnRyb2xsZXI6OmdldEpT
T2JqZWN0Q291bnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0dDQ29udHJvbGxlclF0
Lmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNw
cDoKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6VGVzdFJ1bm5lclF0KToKKyAgICAgICAgKFRlc3RS
dW5uZXJRdDo6cmVzZXQpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpkdW1wTm90aWZpY2F0aW9u
cyk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnByb2Nlc3NXb3JrKToKKyAgICAgICAgKFRlc3RS
dW5uZXJRdDo6bWF5YmVEdW1wKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6ZHVtcEFzVGV4dCk6
CisgICAgICAgIChUZXN0UnVubmVyUXQ6OndhaXRVbnRpbERvbmUpOgorICAgICAgICAoVGVzdFJ1
bm5lclF0OjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZSk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6
OndlYkhpc3RvcnlJdGVtQ291bnQpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjprZWVwV2ViSGlz
dG9yeSk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6Om5vdGlmeURvbmUpOgorICAgICAgICAoVGVz
dFJ1bm5lclF0Ojp3aW5kb3dDb3VudCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OmdyYW50V2Vi
Tm90aWZpY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAgIChUZXN0UnVubmVyUXQ6Omlnbm9yZUxl
Z2FjeVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgIChUZXN0UnVu
bmVyUXQ6OmRlbnlXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKToKKyAgICAgICAgKFRlc3RSdW5u
ZXJRdDo6cmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMpOgorICAgICAgICAoVGVz
dFJ1bm5lclF0OjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKToKKyAgICAgICAgKFRlc3RS
dW5uZXJRdDo6c2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayk6CisgICAgICAgIChU
ZXN0UnVubmVyUXQ6OmRpc3BsYXkpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpkaXNwbGF5SW52
YWxpZGF0ZWRSZWdpb24pOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpjbGVhckJhY2tGb3J3YXJk
TGlzdCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnBhdGhUb0xvY2FsUmVzb3VyY2UpOgorICAg
ICAgICAoVGVzdFJ1bm5lclF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyk6CisgICAgICAgIChUZXN0
UnVubmVyUXQ6OmR1bXBGcmFtZUxvYWRDYWxsYmFja3MpOgorICAgICAgICAoVGVzdFJ1bm5lclF0
OjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6
ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MpOgorICAgICAgICAoVGVzdFJ1bm5l
clF0OjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6
ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMpOgorICAgICAgICAoVGVzdFJ1bm5lclF0Ojpk
dW1wV2lsbENhY2hlUmVzcG9uc2UpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpkdW1wSGlzdG9y
eUNhbGxiYWNrcyk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldFdpbGxTZW5kUmVxdWVzdFJl
dHVybnNOdWxsT25SZWRpcmVjdCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldFdpbGxTZW5k
UmVxdWVzdFJldHVybnNOdWxsKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0V2lsbFNlbmRS
ZXF1ZXN0Q2xlYXJIZWFkZXIpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXREZWZlck1haW5S
ZXNvdXJjZURhdGFMb2FkKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6cXVldWVCYWNrTmF2aWdh
dGlvbik6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOgor
ICAgICAgICAoVGVzdFJ1bm5lclF0OjpxdWV1ZUxvYWQpOgorICAgICAgICAoVGVzdFJ1bm5lclF0
OjpxdWV1ZUxvYWRIVE1MU3RyaW5nKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6cXVldWVSZWxv
YWQpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpxdWV1ZUxvYWRpbmdTY3JpcHQpOgorICAgICAg
ICAoVGVzdFJ1bm5lclF0OjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQpOgorICAgICAgICAoVGVzdFJ1
bm5lclF0Ojpwcm92aXNpb25hbExvYWQpOgorICAgICAgICAoVGVzdFJ1bm5lclF0Ojp0aW1lckV2
ZW50KToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6ZW5jb2RlSG9zdE5hbWUpOgorICAgICAgICAo
VGVzdFJ1bm5lclF0OjpkZWNvZGVIb3N0TmFtZSk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OmNs
b3NlV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0RGV2ZWxvcGVyRXh0
cmFzRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldEFzeW5jaHJvbm91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2hvd1dlYkluc3BlY3Rv
cik6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOgorICAg
ICAgICAoVGVzdFJ1bm5lclF0Ojpnb0JhY2spOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRE
ZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0QWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRBbGxvd0ZpbGVB
Y2Nlc3NGcm9tRmlsZVVSTHMpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRBcHBDYWNoZU1h
eGltdW1TaXplKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0QXV0b2ZpbGxlZCk6CisgICAg
ICAgIChUZXN0UnVubmVyUXQ6OnNldFZhbHVlRm9yVXNlcik6CisgICAgICAgIChUZXN0UnVubmVy
UXQ6OnNldEZpeGVkQ29udGVudHNTaXplKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0UHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldFNwYXRpYWxO
YXZpZ2F0aW9uRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldFBvcHVwQmxvY2tp
bmdFbmFibGVkKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0UGx1Z2luc0VuYWJsZWQpOgor
ICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRQT1NJWExvY2FsZSk6CisgICAgICAgIChUZXN0UnVu
bmVyUXQ6OnNldFdpbmRvd0lzS2V5KToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0TWFpbkZy
YW1lSXNGaXJzdFJlc3BvbmRlcik6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldEphdmFTY3Jp
cHRDYW5BY2Nlc3NDbGlwYm9hcmQpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRYU1NBdWRp
dG9yRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OmRpc3BhdGNoUGVuZGluZ0xvYWRS
ZXF1ZXN0cyk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNo
ZXMpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4pOgorICAgICAgICAoVGVzdFJ1bm5lclF0Ojpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmln
aW4pOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGEpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9y
T3JpZ2luKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNh
Y2hlKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChU
ZXN0UnVubmVyUXQ6OnNldERhdGFiYXNlUXVvdGEpOgorICAgICAgICAoVGVzdFJ1bm5lclF0Ojpj
bGVhckFsbERhdGFiYXNlcyk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OmFkZE9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6cmVtb3ZlT3JpZ2luQWNj
ZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRDdXN0b21Qb2xp
Y3lEZWxlZ2F0ZSk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OndhaXRGb3JQb2xpY3lEZWxlZ2F0
ZSk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6Om92ZXJyaWRlUHJlZmVyZW5jZSk6CisgICAgICAg
IChUZXN0UnVubmVyUXQ6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOgorICAgICAgICAoVGVz
dFJ1bm5lclF0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVy
UXQ6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKToKKyAgICAgICAgKFRlc3RSdW5uZXJR
dDo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSk6CisgICAgICAgIChUZXN0UnVu
bmVyUXQ6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6
OnNldFNjcm9sbGJhclBvbGljeSk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldFNtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldFNlbGVjdFRyYWls
aW5nV2hpdGVzcGFjZUVuYWJsZWQpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpleGVjQ29tbWFu
ZCk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OmlzQ29tbWFuZEVuYWJsZWQpOgorICAgICAgICAo
VGVzdFJ1bm5lclF0OjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6bWFya2Vy
VGV4dEZvckxpc3RJdGVtKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6Y29tcHV0ZWRTdHlsZUlu
Y2x1ZGluZ1Zpc2l0ZWRJbmZvKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6ZWxlbWVudERvZXNB
dXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6YXV0
aGVudGljYXRlU2Vzc2lvbik6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldEljb25EYXRhYmFz
ZUVuYWJsZWQpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b24pOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgor
ICAgICAgICAoVGVzdFJ1bm5lclF0OjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cyk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNvbW1vbik6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uVW5hdmFpbGFibGVFcnJvcik6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6YWRkTW9ja1NwZWVj
aElucHV0UmVzdWx0KToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c2V0TW9ja1NwZWVjaElucHV0
RHVtcFJlY3QpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzdGFydFNwZWVjaElucHV0KToKKyAg
ICAgICAgKFRlc3RSdW5uZXJRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAg
ICAgICAoVGVzdFJ1bm5lclF0OjpyZW1vdmVBbGxWaXNpdGVkTGlua3MpOgorICAgICAgICAoVGVz
dFJ1bm5lclF0OjphZGRVUkxUb1JlZGlyZWN0KToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6b3Jp
Z2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpkZWxldGVBbGxM
b2NhbFN0b3JhZ2UpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpkZWxldGVMb2NhbFN0b3JhZ2VG
b3JPcmlnaW4pOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zKToKKyAgICAgICAgKFRlc3RSdW5uZXJRdDo6c3luY0xvY2FsU3RvcmFnZSk6
CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnJlc2V0UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAo
VGVzdFJ1bm5lclF0OjpzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgIChUZXN0UnVubmVyUXQ6
OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFRlc3RSdW5uZXJR
dDo6c2V0VGV4dERpcmVjdGlvbik6CisgICAgICAgIChUZXN0UnVubmVyUXQ6OnNldEFsd2F5c0Fj
Y2VwdENvb2tpZXMpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRBbHdheXNCbG9ja0Nvb2tp
ZXMpOgorICAgICAgICAoVGVzdFJ1bm5lclF0OjpzZXRBdWRpb0RhdGEpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5oOgorICAgICAgICAoVGVzdFJ1bm5lclF0KToK
KwogMjAxMy0wMi0xMiAgQWRlbmlsc29uIENhdmFsY2FudGkgIDxjYXZhbGNhbnRpaUBnbWFpbC5j
b20+CiAKICAgICAgICAgW1dLMl0gUGFnZSByZWxvYWRpbmcgd2lsbCBjcmFzaCBVSVByb2Nlc3Mg
YWZ0ZXIgV2ViUHJvY2VzcyB3YXMga2lsbGVkCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZS5wcm8KaW5kZXggMjY3MWFiNjY0ZDE2ZjQ3OGU3NTAyMjdjYWEzNGJlMDlkOGQ5
MzZlOC4uYTJmODU2MzJjNjRjYzViNzUzZjc1YzA3ZDc2NThmMTE2YjEwZDNmNyAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwpAQCAtMjYsMTcgKzI2LDE4IEBA
IG1hY3g6IFFUICs9IHhtbAogSEVBREVSUyArPSBcCiAgICAgJCRQV0QvLi4vV29ya1F1ZXVlLmgg
XAogICAgICQkUFdELy4uL0R1bXBSZW5kZXJUcmVlLmggXAorICAgICQkUFdELy4uL0dDQ29udHJv
bGxlci5oIFwKICAgICBEdW1wUmVuZGVyVHJlZVF0LmggXAogICAgIEV2ZW50U2VuZGVyUXQuaCBc
CiAgICAgVGV4dElucHV0Q29udHJvbGxlclF0LmggXAogICAgIFdvcmtRdWV1ZUl0ZW1RdC5oIFwK
ICAgICBUZXN0UnVubmVyUXQuaCBcCi0gICAgR0NDb250cm9sbGVyUXQuaCBcCiAgICAgdGVzdHBs
dWdpbi5oCiAKIFNPVVJDRVMgKz0gXAogICAgICQkUFdELy4uL1dvcmtRdWV1ZS5jcHAgXAogICAg
ICQkUFdELy4uL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBcCisgICAgJCRQV0QvLi4vR0NDb250
cm9sbGVyLmNwcCBcCiAgICAgRHVtcFJlbmRlclRyZWVRdC5jcHAgXAogICAgIEV2ZW50U2VuZGVy
UXQuY3BwIFwKICAgICBUZXh0SW5wdXRDb250cm9sbGVyUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5kZXggYWM3MzZlYWU4Yzc5YjUzN2M3
NTgwNTkyYWJiMTNmZDEzNzRhNDA4ZS4uMjNmZDM1YzFjNmZiNWYxNzkzM2I2NTMyYmQ0Yzg3NDE3
MDBlOGNkMiAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVF0LmgiCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlclF0
LmgiCi0jaW5jbHVkZSAiR0NDb250cm9sbGVyUXQuaCIKKyNpbmNsdWRlICJHQ0NvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJJbml0V2ViQ29yZVF0LmgiCiAjaW5jbHVkZSAiSW5pdFdlYktpdFF0Lmgi
CiAjaW5jbHVkZSAiUXRUZXN0U3VwcG9ydC5oIgpAQCAtNDIyLDcgKzQyMiw3IEBAIER1bXBSZW5k
ZXJUcmVlOjpEdW1wUmVuZGVyVHJlZSgpCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Ondl
YlBhZ2VTZXRHcm91cE5hbWUocGFnZUFkYXB0ZXIoKSwgIm9yZy53ZWJraXQucXQuRHVtcFJlbmRl
clRyZWUiKTsKIAogICAgIG1fbWFpblZpZXctPnNldENvbnRleHRNZW51UG9saWN5KFF0OjpOb0Nv
bnRleHRNZW51KTsKLSAgICBtX21haW5WaWV3LT5yZXNpemUoUVNpemUoVGVzdFJ1bm5lcjo6bWF4
Vmlld1dpZHRoLCBUZXN0UnVubmVyOjptYXhWaWV3SGVpZ2h0KSk7CisgICAgbV9tYWluVmlldy0+
cmVzaXplKFFTaXplKFRlc3RSdW5uZXJRdDo6bWF4Vmlld1dpZHRoLCBUZXN0UnVubmVyUXQ6Om1h
eFZpZXdIZWlnaHQpKTsKIAogICAgIC8vIGNsZWFuIHVwIGNhY2hlIGJ5IHJlc2V0dGluZyBxdW90
YS4KICAgICBxaW50NjQgcXVvdGEgPSB3ZWJQYWdlKCktPnNldHRpbmdzKCktPm9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlUXVvdGEoKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCBEdW1wUmVuZGVyVHJl
ZTo6RHVtcFJlbmRlclRyZWUoKQogCiAgICAgLy8gY3JlYXRlIG91ciBjb250cm9sbGVycy4gVGhp
cyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUgY29ubmVjdEZyYW1lLAogICAgIC8vIGFzIGl0IGV4cG9y
dHMgdGhlcmUgdG8gdGhlIEphdmFTY3JpcHQgRE9NIHdpbmRvdy4KLSAgICBtX2NvbnRyb2xsZXIg
PSBuZXcgVGVzdFJ1bm5lcih0aGlzKTsKKyAgICBtX2NvbnRyb2xsZXIgPSBuZXcgVGVzdFJ1bm5l
clF0KHRoaXMpOwogICAgIGNvbm5lY3QobV9jb250cm9sbGVyLCBTSUdOQUwoc2hvd1BhZ2UoKSks
IHRoaXMsIFNMT1Qoc2hvd1BhZ2UoKSkpOwogICAgIGNvbm5lY3QobV9jb250cm9sbGVyLCBTSUdO
QUwoaGlkZVBhZ2UoKSksIHRoaXMsIFNMT1QoaGlkZVBhZ2UoKSkpOwogCkBAIC00NDAsNyArNDQw
LDcgQEAgRHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKICAgICBjb25uZWN0KG1fY29u
dHJvbGxlciwgU0lHTkFMKGRvbmUoKSksIHRoaXMsIFNMT1QoZHVtcCgpKSk7CiAgICAgbV9ldmVu
dFNlbmRlciA9IG5ldyBFdmVudFNlbmRlcihtX3BhZ2UpOwogICAgIG1fdGV4dElucHV0Q29udHJv
bGxlciA9IG5ldyBUZXh0SW5wdXRDb250cm9sbGVyKG1fcGFnZSk7Ci0gICAgbV9nY0NvbnRyb2xs
ZXIgPSBuZXcgR0NDb250cm9sbGVyKG1fcGFnZSk7CisgICAgbV9nY0NvbnRyb2xsZXIucmVzZXQo
bmV3IEdDQ29udHJvbGxlcigpKTsKIAogICAgIC8vIG5vdyBjb25uZWN0IG91ciBkaWZmZXJlbnQg
c2lnbmFscwogICAgIGNvbm5lY3QobV9wYWdlLCBTSUdOQUwoZnJhbWVDcmVhdGVkKFFXZWJGcmFt
ZSAqKSksCkBAIC02MTIsOCArNjEyLDggQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6b3Blbihjb25z
dCBRVXJsJiB1cmwpCiAKICAgICAvLyBXM0MgU1ZHIHRlc3RzIGV4cGVjdCB0byBiZSA0ODB4MzYw
CiAgICAgYm9vbCBpc1czQ1Rlc3QgPSB1cmwudG9TdHJpbmcoKS5jb250YWlucygic3ZnL1czQy1T
VkctMS4xIik7Ci0gICAgaW50IHdpZHRoID0gaXNXM0NUZXN0ID8gNDgwIDogVGVzdFJ1bm5lcjo6
bWF4Vmlld1dpZHRoOwotICAgIGludCBoZWlnaHQgPSBpc1czQ1Rlc3QgPyAzNjAgOiBUZXN0UnVu
bmVyOjptYXhWaWV3SGVpZ2h0OworICAgIGludCB3aWR0aCA9IGlzVzNDVGVzdCA/IDQ4MCA6IFRl
c3RSdW5uZXJRdDo6bWF4Vmlld1dpZHRoOworICAgIGludCBoZWlnaHQgPSBpc1czQ1Rlc3QgPyAz
NjAgOiBUZXN0UnVubmVyUXQ6Om1heFZpZXdIZWlnaHQ7CiAgICAgbV9tYWluVmlldy0+cmVzaXpl
KFFTaXplKHdpZHRoLCBoZWlnaHQpKTsKICAgICBtX3BhZ2UtPnNldFByZWZlcnJlZENvbnRlbnRz
U2l6ZShRU2l6ZSgpKTsKICAgICBtX3BhZ2UtPnNldFZpZXdwb3J0U2l6ZShRU2l6ZSh3aWR0aCwg
aGVpZ2h0KSk7CkBAIC03MzUsMTAgKzczNSwxNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjppbml0
SlNPYmplY3RzKCkKIHsKICAgICBRV2ViRnJhbWUgKmZyYW1lID0gcW9iamVjdF9jYXN0PFFXZWJG
cmFtZSo+KHNlbmRlcigpKTsKICAgICBRX0FTU0VSVChmcmFtZSk7CisKKyAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IDA7CisgICAgSlNPYmplY3RSZWYgd2luZG93ID0gMDsKKworICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpnZXRKU1dpbmRvd09iamVjdChmcmFtZS0+aGFuZGxlKCksICZj
b250ZXh0LCAmd2luZG93KTsKKwogICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmpl
Y3QoUUxhdGluMVN0cmluZygidGVzdFJ1bm5lciIpLCBtX2NvbnRyb2xsZXIpOwogICAgIGZyYW1l
LT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoUUxhdGluMVN0cmluZygiZXZlbnRTZW5kZXIi
KSwgbV9ldmVudFNlbmRlcik7CiAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVj
dChRTGF0aW4xU3RyaW5nKCJ0ZXh0SW5wdXRDb250cm9sbGVyIiksIG1fdGV4dElucHV0Q29udHJv
bGxlcik7Ci0gICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdChRTGF0aW4xU3Ry
aW5nKCJHQ0NvbnRyb2xsZXIiKSwgbV9nY0NvbnRyb2xsZXIpOworICAgIG1fZ2NDb250cm9sbGVy
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgMCk7CisKICAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGZyYW1lLT5oYW5kbGUoKSk7CiB9
CiAKQEAgLTg3OCw3ICs4ODUsNyBAQCBRU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpkdW1wQmFja0Zv
cndhcmRMaXN0KFFXZWJQYWdlKiBwYWdlKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBjb25zdCBjaGFyICptZXRob2ROYW1lU3RyaW5nRm9yRmFpbGVkVGVzdChUZXN0UnVubmVyICpj
b250cm9sbGVyKQorc3RhdGljIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWVTdHJpbmdGb3JGYWlsZWRU
ZXN0KFRlc3RSdW5uZXJRdCAqY29udHJvbGxlcikKIHsKICAgICBjb25zdCBjaGFyICplcnJvck1l
c3NhZ2U7CiAgICAgaWYgKGNvbnRyb2xsZXItPnNob3VsZER1bXBBc1RleHQoKSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAppbmRleCA3YTZmNzZmYjBhMmRlMjc3
Mzg5OGUyZmFmMDc5NjljZGE3NGFlN2U2Li5kYzU1MDBhNDE3NzA5MDE5NzU3OTA1ZWY4ZjE2Yzlk
NDk2ODEyNzgwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZVF0LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5o
CkBAIC01Niw3ICs1Niw3IEBAIFFUX0VORF9OQU1FU1BBQ0UKIGNsYXNzIFFXZWJGcmFtZUFkYXB0
ZXI7CiBjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAKLWNsYXNzIFRlc3RSdW5uZXI7CitjbGFzcyBU
ZXN0UnVubmVyUXQ7CiBjbGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDsKIGNsYXNzIEV2ZW50
U2VuZGVyOwogY2xhc3MgVGV4dElucHV0Q29udHJvbGxlcjsKQEAgLTg2LDcgKzg2LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xvc2VSZW1haW5pbmdXaW5kb3dzKCk7CiAgICAgdm9pZCByZXNldFRv
Q29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhjb25zdCBRVXJsJik7CiAKLSAgICBUZXN0UnVu
bmVyICp0ZXN0UnVubmVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sbGVyOyB9CisgICAgVGVz
dFJ1bm5lclF0ICp0ZXN0UnVubmVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sbGVyOyB9CiAg
ICAgRXZlbnRTZW5kZXIgKmV2ZW50U2VuZGVyKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudFNlbmRl
cjsgfQogICAgIFRleHRJbnB1dENvbnRyb2xsZXIgKnRleHRJbnB1dENvbnRyb2xsZXIoKSBjb25z
dCB7IHJldHVybiBtX3RleHRJbnB1dENvbnRyb2xsZXI7IH0KICAgICBRU3RyaW5nIHBlcnNpc3Rl
bnRTdG9yYWdlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyc2lzdGVudFN0b3JhZ2VQYXRoOyB9
CkBAIC0xNDMsNyArMTQzLDcgQEAgcHJpdmF0ZToKICAgICBRU3RyaW5nIGR1bXBGcmFtZXNBc1Rl
eHQoUVdlYkZyYW1lKiBmcmFtZSk7CiAgICAgUVN0cmluZyBkdW1wQmFja0ZvcndhcmRMaXN0KFFX
ZWJQYWdlKiBwYWdlKTsKICAgICBRU3RyaW5nIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFFXZWJG
cmFtZSogZnJhbWUpOwotICAgIFRlc3RSdW5uZXIgKm1fY29udHJvbGxlcjsKKyAgICBUZXN0UnVu
bmVyUXQgKm1fY29udHJvbGxlcjsKIAogICAgIGJvb2wgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3Q7CiAgICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsKQEAgLTE1NSw3ICsxNTUsNyBA
QCBwcml2YXRlOgogCiAgICAgRXZlbnRTZW5kZXIgKm1fZXZlbnRTZW5kZXI7CiAgICAgVGV4dElu
cHV0Q29udHJvbGxlciAqbV90ZXh0SW5wdXRDb250cm9sbGVyOwotICAgIEdDQ29udHJvbGxlciog
bV9nY0NvbnRyb2xsZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8R0NDb250cm9sbGVyPiBtX2djQ29u
dHJvbGxlcjsKICAgICBOZXR3b3JrQWNjZXNzTWFuYWdlciogbV9uZXR3b3JrQWNjZXNzTWFuYWdl
cjsKIAogICAgIFFGaWxlICptX3N0ZGluOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvR0NDb250cm9sbGVyUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvR0NDb250
cm9sbGVyUXQuY3BwCmluZGV4IGEyZTVlMGM4NWRhZmUwZmVkYjUyZWY1YzNhZjJhNjQzNGFmYWUy
NzguLjlmOTM2OThkNzc4ZjM5ZTNlNzQ0ZmU3Y2UwZTE2ZjA0OTcxZjBmZWEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0dDQ29udHJvbGxlclF0LmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9xdC9HQ0NvbnRyb2xsZXJRdC5jcHAKQEAgLTI4LDE1ICsyOCw5IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdDQ29udHJvbGxlclF0LmgiCi0j
aW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCIKLQotI2luY2x1ZGUgPHF3ZWJwYWdl
Lmg+CisjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAKLUdDQ29udHJvbGxlcjo6R0NDb250cm9s
bGVyKFFXZWJQYWdlKiBwYXJlbnQpCi0gICAgOiBRT2JqZWN0KHBhcmVudCkKLXsKLX0KKyNpbmNs
dWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgogCiB2b2lkIEdDQ29udHJvbGxlcjo6Y29s
bGVjdCgpIGNvbnN0CiB7CkBAIC00OCw3ICs0Miw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpjb2xs
ZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKSBjb25zdAogICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhy
ZWFkKHdhaXRVbnRpbERvbmUpOwogfQogCi11bnNpZ25lZCBpbnQgR0NDb250cm9sbGVyOjpnZXRK
U09iamVjdENvdW50KCkgY29uc3QKK3NpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpTT2JqZWN0Q291
bnQoKSBjb25zdAogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6amF2YVNj
cmlwdE9iamVjdHNDb3VudCgpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvR0NDb250cm9sbGVyUXQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0dDQ29udHJvbGxl
clF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYzlmMjM0NzRhOWJhYTU5Mzkz
ODNlZGMyMzBhMjBmNDY5NDk3MjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvR0NDb250cm9sbGVyUXQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5k
ZWYgR0NDb250cm9sbGVyUXRfaAotI2RlZmluZSBHQ0NvbnRyb2xsZXJRdF9oCi0KLSNpbmNsdWRl
IDxRT2JqZWN0PgotCi1jbGFzcyBRV2ViUGFnZTsKLWNsYXNzIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OwotCi1jbGFzcyBHQ0NvbnRyb2xsZXIgOiBwdWJsaWMgUU9iamVjdAotewotICAgIFFfT0JK
RUNUCi1wdWJsaWM6Ci0gICAgR0NDb250cm9sbGVyKFFXZWJQYWdlKiBwYXJlbnQpOwotCi1wdWJs
aWMgUV9TTE9UUzoKLSAgICB2b2lkIGNvbGxlY3QoKSBjb25zdDsKLSAgICB2b2lkIGNvbGxlY3RP
bkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpIGNvbnN0OwotICAgIHVuc2lnbmVk
IGludCBnZXRKU09iamVjdENvdW50KCkgY29uc3Q7Ci0KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5jcHAKaW5kZXggNzUyOWMyYjUzODViNzUwZDM0MjFm
NDllY2QyZGZkY2U4ZjIyMTI2ZC4uMmQ3ZjNiZjM0MWQ2MjliMmE4MGI3ZDk4MDA2MGNjZjBiZGI3
NDc3MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuY3BwCkBAIC0zOSw3
ICszOSw3IEBACiAjaW5jbHVkZSA8UUxvY2FsZT4KICNpbmNsdWRlIDxxd2Vic2V0dGluZ3MuaD4K
IAotVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcihXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSogZHJ0KQor
VGVzdFJ1bm5lclF0OjpUZXN0UnVubmVyUXQoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIGRydCkK
ICAgICA6IFFPYmplY3QoKQogICAgICwgbV9kcnQoZHJ0KQogICAgICwgbV9zaG91bGRUaW1lb3V0
KHRydWUpCkBAIC00OCw3ICs0OCw3IEBAIFRlc3RSdW5uZXI6OlRlc3RSdW5uZXIoV2ViQ29yZTo6
RHVtcFJlbmRlclRyZWUqIGRydCkKICAgICByZXNldCgpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6
OnJlc2V0KCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpyZXNldCgpCiB7CiAgICAgbV9oYXNEdW1wZWQg
PSBmYWxzZTsKICAgICBtX2xvYWRGaW5pc2hlZCA9IGZhbHNlOwpAQCAtMTAzLDEyICsxMDMsMTIg
QEAgdm9pZCBUZXN0UnVubmVyOjpyZXNldCgpCiAgICAgZW1pdCBoaWRlUGFnZSgpOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6OmR1bXBOb3RpZmljYXRpb25zKCkKK3ZvaWQgVGVzdFJ1bm5lclF0Ojpk
dW1wTm90aWZpY2F0aW9ucygpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBO
b3RpZmljYXRpb24odHJ1ZSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6cHJvY2Vzc1dvcmsoKQor
dm9pZCBUZXN0UnVubmVyUXQ6OnByb2Nlc3NXb3JrKCkKIHsKICAgICAvLyBxRGVidWcoKSA8PCAi
Pj4+cHJvY2Vzc1dvcmsiOwogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpw
cm9jZXNzV29yaygpCiB9CiAKIC8vIENhbGxlZCBvbiBsb2FkRmluaXNoZWQgb24gV2ViUGFnZQot
dm9pZCBUZXN0UnVubmVyOjptYXliZUR1bXAoYm9vbCAvKnN1Y2Nlc3MqLykKK3ZvaWQgVGVzdFJ1
bm5lclF0OjptYXliZUR1bXAoYm9vbCAvKnN1Y2Nlc3MqLykKIHsKIAogICAgIC8vIFRoaXMgY2Fu
IGhhcHBlbiBvbiBhbnkgb2YgdGhlIGh0dHAvdGVzdHMvc2VjdXJpdHkvd2luZG93LWV2ZW50cy0q
Lmh0bWwgdGVzdHMsIHdoZXJlIHRoZSB0ZXN0IG9wZW5zCkBAIC0xNTEsMTMgKzE1MSwxMyBAQCB2
b2lkIFRlc3RSdW5uZXI6Om1heWJlRHVtcChib29sIC8qc3VjY2VzcyovKQogICAgIH0KIH0KIAot
dm9pZCBUZXN0UnVubmVyOjpkdW1wQXNUZXh0KGJvb2wgc2hvdWxkRHVtcFBpeGVscykKK3ZvaWQg
VGVzdFJ1bm5lclF0OjpkdW1wQXNUZXh0KGJvb2wgc2hvdWxkRHVtcFBpeGVscykKIHsKICAgICBt
X3RleHREdW1wID0gdHJ1ZTsKICAgICBtX3Nob3VsZER1bXBQaXhlbHMgPSBzaG91bGREdW1wUGl4
ZWxzOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUoKQordm9pZCBUZXN0UnVu
bmVyUXQ6OndhaXRVbnRpbERvbmUoKQogewogICAgIC8vcURlYnVnKCkgPDwgIj4+Pj53YWl0Rm9y
RG9uZSI7CiAgICAgbV93YWl0Rm9yRG9uZSA9IHRydWU7CkBAIC0xNjgsMTIgKzE2OCwxMiBAQCB2
b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUoKQogICAgIG1fdGltZW91dFRpbWVyLnN0YXJ0
KG1fdGltZW91dCwgdGhpcyk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0Vmlld01vZGVNZWRp
YUZlYXR1cmUoY29uc3QgUVN0cmluZyYgbW9kZSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRWaWV3
TW9kZU1lZGlhRmVhdHVyZShjb25zdCBRU3RyaW5nJiBtb2RlKQogewogICAgIG1fZHJ0LT53ZWJQ
YWdlKCktPnNldFByb3BlcnR5KCJfcV92aWV3TW9kZSIsIG1vZGUpOwogfQogCi1pbnQgVGVzdFJ1
bm5lcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCitpbnQgVGVzdFJ1bm5lclF0Ojp3ZWJIaXN0b3J5
SXRlbUNvdW50KCkKIHsKICAgICBpZiAoIW1fd2ViSGlzdG9yeSkKICAgICAgICAgcmV0dXJuIC0x
OwpAQCAtMTgzLDEyICsxODMsMTIgQEAgaW50IFRlc3RSdW5uZXI6OndlYkhpc3RvcnlJdGVtQ291
bnQoKQogICAgIHJldHVybiBtX3dlYkhpc3RvcnktPmNvdW50KCkgLSAxOwogfQogCi12b2lkIFRl
c3RSdW5uZXI6OmtlZXBXZWJIaXN0b3J5KCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjprZWVwV2ViSGlz
dG9yeSgpCiB7CiAgICAgbV93ZWJIaXN0b3J5ID0gbV9kcnQtPndlYlBhZ2UoKS0+aGlzdG9yeSgp
OwogfQogCi12b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUoKQordm9pZCBUZXN0UnVubmVyUXQ6
Om5vdGlmeURvbmUoKQogewogICAgIHFEZWJ1ZygpIDw8ICI+Pj4+bm90aWZ5RG9uZSI7CiAKQEAg
LTIxMiw2MCArMjEyLDYwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCiAgICAgbV93
YWl0Rm9yUG9saWN5ID0gZmFsc2U7CiB9CiAKLWludCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudCgp
CitpbnQgVGVzdFJ1bm5lclF0Ojp3aW5kb3dDb3VudCgpCiB7CiAgICAgcmV0dXJuIG1fZHJ0LT53
aW5kb3dDb3VudCgpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9u
UGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCit2b2lkIFRlc3RSdW5uZXJRdDo6Z3Jh
bnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKIHsKICAg
ICBRV2ViRnJhbWUqIGZyYW1lID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCk7CiAgICAg
bV9kcnQtPndlYlBhZ2UoKS0+c2V0RmVhdHVyZVBlcm1pc3Npb24oZnJhbWUsIFFXZWJQYWdlOjpO
b3RpZmljYXRpb25zLCBRV2ViUGFnZTo6UGVybWlzc2lvbkdyYW50ZWRCeVVzZXIpOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6Omlnbm9yZUxlZ2FjeVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cygpCit2b2lkIFRlc3RSdW5uZXJRdDo6aWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RzKCkKIHsKICAgICBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24gPSB0
cnVlOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmRlbnlXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
KGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKK3ZvaWQgVGVzdFJ1bm5lclF0OjpkZW55V2ViTm90aWZp
Y2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCiB7CiAgICAgUVdlYkZyYW1l
KiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIG1fZHJ0LT53ZWJQ
YWdlKCktPnNldEZlYXR1cmVQZXJtaXNzaW9uKGZyYW1lLCBRV2ViUGFnZTo6Tm90aWZpY2F0aW9u
cywgUVdlYlBhZ2U6OlBlcm1pc3Npb25EZW5pZWRCeVVzZXIpOwogfQogCi12b2lkIFRlc3RSdW5u
ZXI6OnJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCkKK3ZvaWQgVGVzdFJ1bm5l
clF0OjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpCiB7CiAgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKTsKIH0KIAot
dm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IFFXZWJF
bGVtZW50JiBub3RpZmljYXRpb24pCit2b2lkIFRlc3RSdW5uZXJRdDo6c2ltdWxhdGVXZWJOb3Rp
ZmljYXRpb25DbGljayhjb25zdCBRV2ViRWxlbWVudCYgbm90aWZpY2F0aW9uKQogewogICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQuCiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVMZWdhY3lX
ZWJOb3RpZmljYXRpb25DbGljayhjb25zdCBRU3RyaW5nJiB0aXRsZSkKK3ZvaWQgVGVzdFJ1bm5l
clF0OjpzaW11bGF0ZUxlZ2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IFFTdHJpbmcmIHRp
dGxlKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaW11bGF0ZURlc2t0b3BOb3Rp
ZmljYXRpb25DbGljayh0aXRsZSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCit2
b2lkIFRlc3RSdW5uZXJRdDo6ZGlzcGxheSgpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldFRyYWNrUmVwYWludFJlY3RzKG1fdG9wTG9hZGluZ0ZyYW1lLT5oYW5kbGUoKSwgdHJ1
ZSk7CiAgICAgZW1pdCBzaG93UGFnZSgpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXlJ
bnZhbGlkYXRlZFJlZ2lvbigpCit2b2lkIFRlc3RSdW5uZXJRdDo6ZGlzcGxheUludmFsaWRhdGVk
UmVnaW9uKCkKIHsKICAgICBkaXNwbGF5KCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJC
YWNrRm9yd2FyZExpc3QoKQordm9pZCBUZXN0UnVubmVyUXQ6OmNsZWFyQmFja0ZvcndhcmRMaXN0
KCkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5oaXN0b3J5KCktPmNsZWFyKCk7CiB9CiAKLVFT
dHJpbmcgVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBRU3RyaW5nJiB1cmwp
CitRU3RyaW5nIFRlc3RSdW5uZXJRdDo6cGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBRU3RyaW5n
JiB1cmwpCiB7CiAgICAgUVN0cmluZyBsb2NhbFRtcFVybChRTGF0aW4xU3RyaW5nKCJmaWxlOi8v
L3RtcC9MYXlvdXRUZXN0cyIpKTsKIApAQCAtMjgyLDgyICsyODIsODIgQEAgUVN0cmluZyBUZXN0
UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IFFTdHJpbmcmIHVybCkKICAgICByZXR1
cm4gdXJsOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkKK3Zv
aWQgVGVzdFJ1bm5lclF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcygpCiB7CiAgICAgcURlYnVnKCkg
PDwgIj4+PmR1bXBFZGl0aW5nQ2FsbGJhY2tzIjsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6ZHVtcEVkaXRpbmdDYWxsYmFja3ModHJ1ZSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6ZHVt
cEZyYW1lTG9hZENhbGxiYWNrcygpCit2b2lkIFRlc3RSdW5uZXJRdDo6ZHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRl
cih0cnVlKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxi
YWNrKCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkK
IHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxs
YmFjayh0cnVlKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1l
TG9hZENhbGxiYWNrcygpCit2b2lkIFRlc3RSdW5uZXJRdDo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFt
ZUxvYWRDYWxsYmFja3MoKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVXNl
ckdlc3R1cmVJbkZyYW1lTG9hZGVyKHRydWUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoKQordm9pZCBUZXN0UnVubmVyUXQ6OmR1bXBSZXNvdXJjZUxv
YWRDYWxsYmFja3MoKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKHRydWUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBSZXNvdXJj
ZVJlc3BvbnNlTUlNRVR5cGVzKCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpkdW1wUmVzb3VyY2VSZXNw
b25zZU1JTUVUeXBlcygpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBSZXNv
dXJjZVJlc3BvbnNlTUlNRVR5cGVzKHRydWUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBX
aWxsQ2FjaGVSZXNwb25zZSgpCit2b2lkIFRlc3RSdW5uZXJRdDo6ZHVtcFdpbGxDYWNoZVJlc3Bv
bnNlKCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFdpbGxDYWNoZVJlc3Bv
bnNlQ2FsbGJhY2tzKHRydWUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBIaXN0b3J5Q2Fs
bGJhY2tzKCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpkdW1wSGlzdG9yeUNhbGxiYWNrcygpCiB7CiAg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBIaXN0b3J5Q2FsbGJhY2tzKHRydWUpOwog
fQogCi12b2lkIFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRp
cmVjdChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZW5hYmxlZCkKIHsKICAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGVuYWJs
ZWQpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxs
KGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1
cm5zTnVsbChib29sIGVuYWJsZWQpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGVuYWJsZWQpOwogfQogCi12b2lkIFRlc3RSdW5u
ZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IFFTdHJpbmdMaXN0JiBoZWFk
ZXJzKQordm9pZCBUZXN0UnVubmVyUXQ6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNv
bnN0IFFTdHJpbmdMaXN0JiBoZWFkZXJzKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoaGVhZGVycyk7CiB9CiAKLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChib29sIGRlZmVyKQordm9pZCBU
ZXN0UnVubmVyUXQ6OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoYm9vbCBkZWZlcikKIHsK
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9h
ZChkZWZlcik7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6cXVldWVCYWNrTmF2aWdhdGlvbihpbnQg
aG93RmFyQmFja3dhcmQpCit2b2lkIFRlc3RSdW5uZXJRdDo6cXVldWVCYWNrTmF2aWdhdGlvbihp
bnQgaG93RmFyQmFja3dhcmQpCiB7CiAgICAgLy9xRGVidWcoKSA8PCAiPj4+cXVldWVCYWNrTmF2
aWdhdGlvbiIgPDwgaG93RmFyQmFja3dhcmQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaG93
RmFyQmFja3dhcmQ7ICsraSkKICAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3
IEJhY2tJdGVtKDEsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpx
dWV1ZUZvcndhcmROYXZpZ2F0aW9uKGludCBob3dGYXJGb3J3YXJkKQordm9pZCBUZXN0UnVubmVy
UXQ6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oaW50IGhvd0ZhckZvcndhcmQpCiB7CiAgICAgLy9x
RGVidWcoKSA8PCAiPj4+cXVldWVGb3J3YXJkTmF2aWdhdGlvbiIgPDwgaG93RmFyRm9yd2FyZDsK
ICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBob3dGYXJGb3J3YXJkOyArK2kpCiAgICAgICAgIFdv
cmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBGb3J3YXJkSXRlbSgxLCBtX2RydC0+d2ViUGFn
ZSgpKSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKGNvbnN0IFFTdHJpbmcmIHVy
bCwgY29uc3QgUVN0cmluZyYgdGFyZ2V0KQordm9pZCBUZXN0UnVubmVyUXQ6OnF1ZXVlTG9hZChj
b25zdCBRU3RyaW5nJiB1cmwsIGNvbnN0IFFTdHJpbmcmIHRhcmdldCkKIHsKICAgICAvL3FEZWJ1
ZygpIDw8ICI+Pj5xdWV1ZUxvYWQiIDw8IHVybCA8PCB0YXJnZXQ7CiAgICAgUVVybCBtYWluUmVz
b3VyY2VVcmwgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCk7CkBAIC0zNjUs
NyArMzY1LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWQoY29uc3QgUVN0cmluZyYgdXJs
LCBjb25zdCBRU3RyaW5nJiB0YXJnZXQpCiAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUo
bmV3IExvYWRJdGVtKGFic29sdXRlVXJsLCB0YXJnZXQsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKIH0K
IAotdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnN0IFFTdHJpbmcmIGNv
bnRlbnQsIGNvbnN0IFFTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IFFTdHJpbmcmIGZhaWxpbmdVUkwp
Cit2b2lkIFRlc3RSdW5uZXJRdDo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBRU3RyaW5nJiBj
b250ZW50LCBjb25zdCBRU3RyaW5nJiBiYXNlVVJMLCBjb25zdCBRU3RyaW5nJiBmYWlsaW5nVVJM
KQogewogICAgIGlmIChmYWlsaW5nVVJMLmlzRW1wdHkoKSkKICAgICAgICAgV29ya1F1ZXVlOjpz
aGFyZWQoKS0+cXVldWUobmV3IExvYWRIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNlVVJMLCBt
X2RydC0+d2ViUGFnZSgpKSk7CkBAIC0zNzMsMzIgKzM3MywzMiBAQCB2b2lkIFRlc3RSdW5uZXI6
OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgUVN0cmluZyYgY29udGVudCwgY29uc3QgUVN0cmlu
ZyYgYmFzZQogICAgICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEFsdGVy
bmF0ZUhUTUxTdHJpbmdJdGVtKGNvbnRlbnQsIGJhc2VVUkwsIGZhaWxpbmdVUkwsIG1fZHJ0LT53
ZWJQYWdlKCkpKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgpCit2b2lkIFRl
c3RSdW5uZXJRdDo6cXVldWVSZWxvYWQoKQogewogICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVl
UmVsb2FkIjsKICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgUmVsb2FkSXRlbSht
X2RydC0+d2ViUGFnZSgpKSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2Ny
aXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpxdWV1ZUxvYWRp
bmdTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewogICAgIC8vcURlYnVnKCkgPDwgIj4+
PnF1ZXVlTG9hZGluZ1NjcmlwdCIgPDwgc2NyaXB0OwogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCkt
PnF1ZXVlKG5ldyBMb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQsIG1fZHJ0LT53ZWJQYWdlKCkpKTsK
IH0KIAotdm9pZCBUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgUVN0cmlu
ZyYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyUXQ6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChjb25z
dCBRU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgLy9xRGVidWcoKSA8PCAiPj4+cXVldWVOb25Mb2Fk
aW5nU2NyaXB0IiA8PCBzY3JpcHQ7CiAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3
IE5vbkxvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCwgbV9kcnQtPndlYlBhZ2UoKSkpOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6OnByb3Zpc2lvbmFsTG9hZCgpCit2b2lkIFRlc3RSdW5uZXJRdDo6cHJv
dmlzaW9uYWxMb2FkKCkKIHsKICAgICBRV2ViRnJhbWUqIGZyYW1lID0gcW9iamVjdF9jYXN0PFFX
ZWJGcmFtZSo+KHNlbmRlcigpKTsKICAgICBpZiAoIW1fdG9wTG9hZGluZ0ZyYW1lICYmICFtX2hh
c0R1bXBlZCkKICAgICAgICAgbV90b3BMb2FkaW5nRnJhbWUgPSBmcmFtZTsKIH0KIAotdm9pZCBU
ZXN0UnVubmVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICpldikKK3ZvaWQgVGVzdFJ1bm5lclF0
Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICpldikKIHsKICAgICBpZiAoZXYtPnRpbWVySWQoKSA9
PSBtX3RpbWVvdXRUaW1lci50aW1lcklkKCkpIHsKICAgICAgICAgY29uc3QgY2hhciogbWVzc2Fn
ZSA9ICJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRc
biI7CkBAIC00MDksMTI5ICs0MDksMTI5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6dGltZXJFdmVudChR
VGltZXJFdmVudCAqZXYpCiAgICAgICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXYpOwogfQogCi1R
U3RyaW5nIFRlc3RSdW5uZXI6OmVuY29kZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpCitR
U3RyaW5nIFRlc3RSdW5uZXJRdDo6ZW5jb2RlSG9zdE5hbWUoY29uc3QgUVN0cmluZyYgaG9zdCkK
IHsKICAgICBRU3RyaW5nIGVuY29kZWQgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKFFVcmw6OnRvQWNl
KGhvc3QgKyBRTGF0aW4xU3RyaW5nKCIubm8iKSkpOwogICAgIGVuY29kZWQudHJ1bmNhdGUoZW5j
b2RlZC5sZW5ndGgoKSAtIDMpOyAvLyBzdHJpcCAubm8KICAgICByZXR1cm4gZW5jb2RlZDsKIH0K
IAotUVN0cmluZyBUZXN0UnVubmVyOjpkZWNvZGVIb3N0TmFtZShjb25zdCBRU3RyaW5nJiBob3N0
KQorUVN0cmluZyBUZXN0UnVubmVyUXQ6OmRlY29kZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhv
c3QpCiB7CiAgICAgUVN0cmluZyBkZWNvZGVkID0gUVVybDo6ZnJvbUFjZShob3N0LnRvTGF0aW4x
KCkgKyBRQnl0ZUFycmF5KCIubm8iKSk7CiAgICAgZGVjb2RlZC50cnVuY2F0ZShkZWNvZGVkLmxl
bmd0aCgpIC0gMyk7CiAgICAgcmV0dXJuIGRlY29kZWQ7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6
Y2xvc2VXZWJJbnNwZWN0b3IoKQordm9pZCBUZXN0UnVubmVyUXQ6OmNsb3NlV2ViSW5zcGVjdG9y
KCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yQ2xvc2UobV9k
cnQtPnBhZ2VBZGFwdGVyKCkpOwogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQsIGZhbHNlKTsK
IH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5h
YmxlZCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1
dGUoUVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRyYXNFbmFibGVkLCBlbmFibGVkKTsKIH0KIAot
dm9pZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29s
KQordm9pZCBUZXN0UnVubmVyUXQ6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIFRlc3RS
dW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoKQordm9pZCBUZXN0UnVubmVyUXQ6OnNob3dXZWJJbnNw
ZWN0b3IoKQogewogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQsIHRydWUpOwogICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JTaG93KG1fZHJ0LT5wYWdlQWRhcHRlcigp
KTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2Fs
bElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXJRdDo6ZXZhbHVhdGVJ
bldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KG1fZHJ0
LT5wYWdlQWRhcHRlcigpLCBjYWxsSWQsIHNjcmlwdCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6
Z29CYWNrKCkKK3ZvaWQgVGVzdFJ1bm5lclF0Ojpnb0JhY2soKQogewogICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0Ojpnb0JhY2sobV9kcnQtPnBhZ2VBZGFwdGVyKCkpOwogfQogCi12b2lkIFRl
c3RSdW5uZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyUXQ6
OnNldERlZmVyc0xvYWRpbmcoYm9vbCBmbGFnKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzZXREZWZlcnNMb2FkaW5nKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBmbGFnKTsKIH0KIAot
dm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29s
IGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9t
RmlsZVVSTHMoYm9vbCBlbmFibGVkKQogewogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdz
KCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90
ZVVybHMsIGVuYWJsZWQpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vz
c0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0QWxsb3dG
aWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX2RydC0+d2ViUGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRD
YW5BY2Nlc3NGaWxlVXJscywgZW5hYmxlZCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lkIFRlc3RSdW5u
ZXJRdDo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7
CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGVRdW90YShxdW90YSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b2ZpbGxl
ZChjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCwgYm9vbCBpc0F1dG9maWxsZWQpCit2b2lkIFRl
c3RSdW5uZXJRdDo6c2V0QXV0b2ZpbGxlZChjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCwgYm9v
bCBpc0F1dG9maWxsZWQpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRBdXRvZmlsbGVkKGVsZW1lbnQsIGlzQXV0b2ZpbGxlZCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5l
cjo6c2V0VmFsdWVGb3JVc2VyKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRU3Ry
aW5nJiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdl
YkVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQogewogICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXRWYWx1ZUZvclVzZXIoZWxlbWVudCwgdmFsdWUpOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6OnNldEZpeGVkQ29udGVudHNTaXplKGludCB3aWR0aCwgaW50IGhlaWdo
dCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRGaXhlZENvbnRlbnRzU2l6ZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCiB7CiAgICAgbV90b3BMb2FkaW5nRnJhbWUtPnBhZ2UoKS0+c2V0UHJlZmVycmVk
Q29udGVudHNTaXplKFFTaXplKHdpZHRoLCBoZWlnaHQpKTsKIH0KIAotdm9pZCBUZXN0UnVubmVy
OjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlKQordm9pZCBUZXN0UnVubmVy
UXQ6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBlbmFibGUpCiB7CiAgICAgbV9kcnQt
PndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCwgZW5hYmxlKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRTcGF0
aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGUpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0
U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlKQogewogICAgIG1fZHJ0LT53ZWJQ
YWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlNwYXRpYWxOYXZp
Z2F0aW9uRW5hYmxlZCwgZW5hYmxlKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRQb3B1cEJs
b2NraW5nRW5hYmxlZChib29sIGVuYWJsZSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRQb3B1cEJs
b2NraW5nRW5hYmxlZChib29sIGVuYWJsZSkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0
aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRv
d3MsICFlbmFibGUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldFBsdWdpbnNFbmFibGVkKGJv
b2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudAogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldFBP
U0lYTG9jYWxlKGNvbnN0IFFTdHJpbmcmIGxvY2FsZSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRQ
T1NJWExvY2FsZShjb25zdCBRU3RyaW5nJiBsb2NhbGUpCiB7CiAgICAgUUxvY2FsZSBxbG9jYWxl
KGxvY2FsZSk7CiAgICAgUUxvY2FsZTo6c2V0RGVmYXVsdChxbG9jYWxlKTsKIH0gCiAKLXZvaWQg
VGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkKK3ZvaWQgVGVzdFJ1bm5lclF0
OjpzZXRXaW5kb3dJc0tleShib29sIGlzS2V5KQogewogICAgIG1fZHJ0LT5zd2l0Y2hGb2N1cyhp
c0tleSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRl
cihib29sIGlzRmlyc3QpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0TWFpbkZyYW1lSXNGaXJzdFJl
c3BvbmRlcihib29sIGlzRmlyc3QpCiB7CiAgICAgLy9GSVhNRTogb25seSBuZWVkIHRoaXMgZm9y
IHRoZSBtb21lbnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5
MAogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
Ym9vbCBlbmFibGUpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0Ns
aXBib2FyZChib29sIGVuYWJsZSkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygp
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJk
LCBlbmFibGUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJv
b2wgZW5hYmxlKQordm9pZCBUZXN0UnVubmVyUXQ6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wg
ZW5hYmxlKQogewogICAgIC8vIFNldCBYU1NBdWRpdGluZ0VuYWJsZWQgZ2xvYmFsbHkgc28gdGhh
dCB3aW5kb3dzIGNyZWF0ZWQgYnkgdGhlIHRlc3QgaW5oZXJpdCBpdCB0b28uCiAgICAgLy8gcmVz
ZXRTZXR0aW5ncygpIHdpbGwgY2FsbCB0aGlzIHRvIHJlc2V0IHRoZSBwYWdlIGFuZCBnbG9iYWwg
c2V0dGluZyB0byBmYWxzZSBhZ2Fpbi4KQEAgLTU0MSw0NyArNTQxLDQ3IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGUpCiAgICAgbV9kcnQtPndlYlBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6WFNTQXVkaXRpbmdF
bmFibGVkLCBlbmFibGUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmRpc3BhdGNoUGVuZGluZ0xv
YWRSZXF1ZXN0cygpCit2b2lkIFRlc3RSdW5uZXJRdDo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVl
c3RzKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0aW5nIGZpeCBmb3IgNjcy
NzQ5NQogfQogCi12b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQor
dm9pZCBUZXN0UnVubmVyUXQ6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQogewogICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCk7CiB9CiAK
LXZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKGNvbnN0IFFT
dHJpbmcmIHVybCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JP
cmlnaW4oY29uc3QgUVN0cmluZyYgdXJsKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
c3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCiB9
CiAKLWxvbmcgbG9uZyBUZXN0UnVubmVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4o
Y29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK2xvbmcgbG9uZyBUZXN0UnVubmVyUXQ6
OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRp
c2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KICAgICByZXR1cm4gMDsKIH0KIAotdm9p
ZCBUZXN0UnVubmVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9u
ZyBsb25nIHF1b3RhKQordm9pZCBUZXN0UnVubmVyUXQ6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmln
aW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAgICAgaWYgKCFtX3RvcExvYWRp
bmdGcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fdG9wTG9hZGluZ0ZyYW1lLT5zZWN1cml0
eU9yaWdpbigpLnNldEFwcGxpY2F0aW9uQ2FjaGVRdW90YShxdW90YSk7CiB9CiAKLWxvbmcgbG9u
ZyBUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFT
dHJpbmcmIG9yaWdpbikKK2xvbmcgbG9uZyBUZXN0UnVubmVyUXQ6OmFwcGxpY2F0aW9uQ2FjaGVE
aXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxpY2F0
aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgogICAgIHJldHVybiAwOwogfQogCi1RU3RyaW5nTGlz
dCBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQorUVN0cmluZ0xpc3Qg
VGVzdFJ1bm5lclF0OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMgdGhhdCBoYXZlIGFwcGxpY2F0aW9uIGNhY2hl
cy4KICAgICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRD
YWNoZU1vZGVsKGludCBtb2RlbCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRDYWNoZU1vZGVsKGlu
dCBtb2RlbCkKIHsKICAgICAvLyBxd2Vic2V0dGluZyBkb2Vzbid0IGhhdmUgbWF0Y2hlZCBzZXR0
aW5nIHlldCA6CiAgICAgLy8gV0VCS0lUX0NBQ0hFX01PREVMX0RPQ1VNRU5UX1ZJRVdFUgpAQCAt
NTkxLDQxICs1OTEsNDEgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRDYWNoZU1vZGVsKGludCBtb2Rl
bCkKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldERh
dGFiYXNlUXVvdGEoaW50IHNpemUpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0RGF0YWJhc2VRdW90
YShpbnQgc2l6ZSkKIHsKICAgICBpZiAoIW1fdG9wTG9hZGluZ0ZyYW1lKQogICAgICAgICByZXR1
cm47CiAgICAgbV90b3BMb2FkaW5nRnJhbWUtPnNlY3VyaXR5T3JpZ2luKCkuc2V0RGF0YWJhc2VR
dW90YShzaXplKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCit2
b2lkIFRlc3RSdW5uZXJRdDo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewogICAgIFFXZWJEYXRhYmFz
ZTo6cmVtb3ZlQWxsRGF0YWJhc2VzKCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6YWRkT3JpZ2lu
QWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBR
U3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhv
c3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit2b2lkIFRlc3RSdW5uZXJRdDo6
YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYgc291cmNlT3JpZ2lu
LCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0
aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7CiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OndoaXRlTGlzdEFjY2Vzc0Zyb21PcmlnaW4oc291cmNlT3Jp
Z2luLCBkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkhvc3QsIGFsbG93RGVzdGluYXRp
b25TdWJkb21haW5zKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcm
IGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9v
bCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1bm5lclF0OjpyZW1vdmVP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNv
bnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0
aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsKICAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6cmVtb3ZlV2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbihzb3VyY2VP
cmlnaW4sIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uSG9zdCwgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURl
bGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQordm9pZCBUZXN0UnVubmVyUXQ6
OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQog
ewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShl
bmFibGVkLCBwZXJtaXNzaXZlKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5
RGVsZWdhdGUoKQordm9pZCBUZXN0UnVubmVyUXQ6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCiB7
CiAgICAgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUodHJ1ZSk7CiAgICAgbV93YWl0Rm9yUG9saWN5
ID0gdHJ1ZTsKICAgICB3YWl0VW50aWxEb25lKCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1
ZSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpvdmVycmlkZVByZWZlcmVuY2UoY29uc3QgUVN0cmluZyYg
bmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVlKQogewogICAgIFFXZWJTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX3RvcExvYWRpbmdGcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpOwogCkBAIC02NjIsNyAr
NjYyLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoY29uc3QgUVN0cmlu
ZyYgbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVlKQogICAgICAgICAgICAgbmFtZS50b0xhdGlu
MSgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihjb25zdCBRU3RyaW5nJiB1cmwpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0VXNlclN0eWxl
U2hlZXRMb2NhdGlvbihjb25zdCBRU3RyaW5nJiB1cmwpCiB7CiAgICAgUUJ5dGVBcnJheSB1cmxE
YXRhID0gcGF0aFRvTG9jYWxSZXNvdXJjZSh1cmwpLnRvTGF0aW4xKCk7CiAgICAgbV91c2VyU3R5
bGVTaGVldExvY2F0aW9uID0gUVVybDo6ZnJvbUVuY29kZWQodXJsRGF0YSwgUVVybDo6U3RyaWN0
TW9kZSk7CkBAIC02NzEsMTcgKzY3MSwxNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oY29uc3QgUVN0cmluZyYgdXJsKQogICAgICAgICBzZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQodHJ1ZSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FyZXRCcm93c2lu
Z0VuYWJsZWQoYm9vbCB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRDYXJldEJyb3dzaW5n
RW5hYmxlZChib29sIHZhbHVlKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRD
YXJldEJyb3dzaW5nRW5hYmxlZChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgdmFsdWUpOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgdmFsdWUp
Cit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCB2
YWx1ZSkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0QXV0aG9yQW5kVXNlclN0
eWxlc0VuYWJsZWQobV9kcnQtPnBhZ2VBZGFwdGVyKCksIHZhbHVlKTsKIH0KIAotdm9pZCBUZXN0
UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0
UnVubmVyUXQ6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAg
bV91c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBlbmFibGVkOwogCkBAIC02OTEsMTcgKzY5MSwxNyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGVuYWJsZWQp
CiAgICAgICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0
VXJsKFFVcmwoKSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZv
cmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgY29uc3QgUVN0cmluZyYgc2NoZW1l
KQordm9pZCBUZXN0UnVubmVyUXQ6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxT
Y2hlbWUoYm9vbCBmb3JiaWRkZW4sIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSkKIHsKICAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNj
aGVtZShmb3JiaWRkZW4sIHNjaGVtZSk7CiB9CiAKLWJvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3Vs
ZENsb3NlT25XZWJWaWV3KCkKK2Jvb2wgVGVzdFJ1bm5lclF0OjpjYWxsU2hvdWxkQ2xvc2VPbldl
YlZpZXcoKQogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2hvdWxkQ2xv
c2UobV9kcnQtPm1haW5GcmFtZUFkYXB0ZXIoKSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
U2Nyb2xsYmFyUG9saWN5KGNvbnN0IFFTdHJpbmcmIG9yaWVudGF0aW9uLCBjb25zdCBRU3RyaW5n
JiBwb2xpY3kpCit2b2lkIFRlc3RSdW5uZXJRdDo6c2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0IFFT
dHJpbmcmIG9yaWVudGF0aW9uLCBjb25zdCBRU3RyaW5nJiBwb2xpY3kpCiB7CiAgICAgUXQ6Ok9y
aWVudGF0aW9uIG87CiAgICAgUXQ6OlNjcm9sbEJhclBvbGljeSBwOwpAQCAtNzI1LDUyICs3MjUs
NTIgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgUVN0cmluZyYg
b3JpZW50YXRpb24sIGNvbnN0IFFTdHJpbmcmIHAKICAgICBtX2RydC0+d2ViUGFnZSgpLT5tYWlu
RnJhbWUoKS0+c2V0U2Nyb2xsQmFyUG9saWN5KG8sIHApOwogfQogCi12b2lkIFRlc3RSdW5uZXI6
OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGVuYWJsZSkKK3ZvaWQgVGVzdFJ1bm5l
clF0OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCBlbmFibGUpCiB7CiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChtX2RydC0+
cGFnZUFkYXB0ZXIoKSwgZW5hYmxlKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRTZWxlY3RU
cmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZW5hYmxlKQordm9pZCBUZXN0UnVubmVyUXQ6
OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBlbmFibGUpCiB7CiAgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQobV9kcnQtPnBhZ2VBZGFwdGVyKCksIGVuYWJsZSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6
ZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpCit2
b2lkIFRlc3RSdW5uZXJRdDo6ZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3Qg
UVN0cmluZyYgdmFsdWUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV4ZWN1dGVD
b3JlQ29tbWFuZEJ5TmFtZShtX2RydC0+cGFnZUFkYXB0ZXIoKSwgbmFtZSwgdmFsdWUpOwogfQog
Ci1ib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29uc3QgUVN0cmluZyYgbmFtZSkg
Y29uc3QKK2Jvb2wgVGVzdFJ1bm5lclF0Ojppc0NvbW1hbmRFbmFibGVkKGNvbnN0IFFTdHJpbmcm
IG5hbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojppc0Nv
bW1hbmRFbmFibGVkKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBuYW1lKTsKIH0KIAotYm9vbCBUZXN0
UnVubmVyOjpmaW5kU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHN0cmluZywgY29uc3QgUVN0cmluZ0xp
c3QmIG9wdGlvbkFycmF5KQorYm9vbCBUZXN0UnVubmVyUXQ6OmZpbmRTdHJpbmcoY29uc3QgUVN0
cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpCiB7CiAgICAgcmV0
dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKG1fZHJ0LT5wYWdlQWRhcHRl
cigpLCBzdHJpbmcsIG9wdGlvbkFycmF5KTsKIH0KIAotUVN0cmluZyBUZXN0UnVubmVyOjptYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgUVdlYkVsZW1lbnQmIGxpc3RJdGVtKQorUVN0cmluZyBU
ZXN0UnVubmVyUXQ6Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb25zdCBRV2ViRWxlbWVudCYgbGlz
dEl0ZW0pCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjptYXJrZXJUZXh0
Rm9yTGlzdEl0ZW0obGlzdEl0ZW0pOwogfQogCi1RVmFyaWFudE1hcCBUZXN0UnVubmVyOjpjb21w
dXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CitRVmFyaWFudE1hcCBUZXN0UnVubmVyUXQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbyhjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVk
SW5mbyhlbGVtZW50KTsKIH0KIAotYm9vbCBUZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21w
bGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQorYm9vbCBUZXN0
UnVubmVyUXQ6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBR
U3RyaW5nJiBlbGVtZW50SWQpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQobV9kcnQtPm1haW5GcmFt
ZUFkYXB0ZXIoKSwgZWxlbWVudElkKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjphdXRoZW50aWNh
dGVTZXNzaW9uKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYp
Cit2b2lkIFRlc3RSdW5uZXJRdDo6YXV0aGVudGljYXRlU2Vzc2lvbihjb25zdCBRU3RyaW5nJiwg
Y29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmKQogewogICAgIC8vIEZJWE1FOiBJZiB0aGVy
ZSBpcyBhIGNvbmNlcHQgcGVyLXNlc3Npb24gKHBlci1wcm9jZXNzKSBjcmVkZW50aWFsIHN0b3Jh
Z2UsIHRoZSBjcmVkZW50aWFscyBzaG91bGQgYmUgYWRkZWQgdG8gaXQgZm9yIGxhdGVyIHVzZS4K
IH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxl
KQordm9pZCBUZXN0UnVubmVyUXQ6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGUp
CiB7CiAgICAgaWYgKGVuYWJsZSAmJiAhbV9kcnQtPnBlcnNpc3RlbnRTdG9yYWdlUGF0aCgpLmlz
RW1wdHkoKSkKICAgICAgICAgUVdlYlNldHRpbmdzOjpzZXRJY29uRGF0YWJhc2VQYXRoKG1fZHJ0
LT5wZXJzaXN0ZW50U3RvcmFnZVBhdGgoKSk7CkBAIC03NzgsMTQgKzc3OCwxNCBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGUpCiAgICAgICAgIFFX
ZWJTZXR0aW5nczo6c2V0SWNvbkRhdGFiYXNlUGF0aChRU3RyaW5nKCkpOwogfQogCi12b2lkIFRl
c3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwg
ZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Q
cm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRNb2NrRGV2
aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBj
YW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUg
Z2FtbWEpCiB7CiAgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdl
dEFsbFBhZ2VzKCk7CiAgICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMp
CiAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b24ocGFnZS0+aGFuZGxlKCksIGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRh
LCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpz
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3ZvaWQgVGVzdFJ1bm5lclF0Ojpz
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKIHsKICAgICBzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb25Db21tb24oYWxsb3cpOwogICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBw
YWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwpAQCAtNzkzLDcgKzc5Myw3IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCiAgICAgICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKHBhZ2Ut
PmhhbmRsZSgpLCBhbGxvdyk7CiB9CiAKLWludCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCitpbnQgVGVzdFJ1bm5lclF0OjpudW1iZXJP
ZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCiB7CiAgICAgaW50IHBlbmRp
bmdQZXJtaXNzaW9uQ291bnQgPSAwOwogICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdl
cyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwpAQCAtODAzLDExMiArODAzLDExMiBAQCBpbnQgVGVz
dFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQog
ICAgIHJldHVybiBwZW5kaW5nUGVybWlzc2lvbkNvdW50OwogfQogCi12b2lkIFRlc3RSdW5uZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KQordm9pZCBUZXN0UnVu
bmVyUXQ6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KQogewogICAg
ICBtX2lzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0ID0gdHJ1ZTsKICAgICAgbV9nZW9sb2NhdGlv
blBlcm1pc3Npb24gPSBhbGxvdzsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKK3Zv
aWQgVGVzdFJ1bm5lclF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJy
b3IoY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdl
Kj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpX
ZWJQYWdlKiBwYWdlLCBwYWdlcykKICAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihwYWdlLT5oYW5kbGUoKSwg
bWVzc2FnZSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCit2
b2lkIFRlc3RSdW5uZXJRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAgICAgUUxpc3Q8V2Vi
Q29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7CiAgICAgZm9yZWFj
aCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCiAgICAgICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihwYWdlLT5oYW5kbGUoKSwgbGF0
aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmFkZE1v
Y2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBRU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRl
bmNlLCBjb25zdCBRU3RyaW5nJiBsYW5ndWFnZSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjphZGRNb2Nr
U3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgUVN0cmluZyYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5j
ZSwgY29uc3QgUVN0cmluZyYgbGFuZ3VhZ2UpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNl
dE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lclF0Ojpz
ZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIFRlc3RS
dW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgUVN0cmluZyYgaW5wdXRFbGVtZW50KQordm9p
ZCBUZXN0UnVubmVyUXQ6OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgUVN0cmluZyYgaW5wdXRFbGVt
ZW50KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQg
dGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTQ4NS4KIH0KIAotdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit2
b2lkIFRlc3RSdW5uZXJRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZShpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1
bm5lclF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3Qg
UVN0cmluZyYgc2NyaXB0KQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2RydC0+bWFpbkZyYW1lQWRhcHRlcigpLCB3b3JsZElE
LCBzY3JpcHQpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0
IFFTdHJpbmcmIHNvdXJjZUNvZGUpCit2b2lkIFRlc3RSdW5uZXJRdDo6YWRkVXNlclN0eWxlU2hl
ZXQoY29uc3QgUVN0cmluZyYgc291cmNlQ29kZSkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6YWRkVXNlclN0eWxlU2hlZXQobV9kcnQtPnBhZ2VBZGFwdGVyKCksIHNvdXJjZUNvZGUp
OwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCit2b2lkIFRl
c3RSdW5uZXJRdDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIHsKICAgICBRV2ViSGlzdG9yeSog
aGlzdG9yeSA9IG1fZHJ0LT53ZWJQYWdlKCktPmhpc3RvcnkoKTsKICAgICBoaXN0b3J5LT5jbGVh
cigpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJh
Y2tzKHRydWUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmFkZFVSTFRvUmVkaXJlY3QoY29uc3Qg
UVN0cmluZyYgb3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbikKK3ZvaWQgVGVzdFJ1
bm5lclF0OjphZGRVUkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgY29uc3QgUVN0
cmluZyYgZGVzdGluYXRpb24pCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFkZFVS
TFRvUmVkaXJlY3Qob3JpZ2luLCBkZXN0aW5hdGlvbik7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6
b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQordm9pZCBUZXN0UnVubmVyUXQ6Om9yaWdpbnNXaXRo
TG9jYWxTdG9yYWdlKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12b2lkIFRl
c3RSdW5uZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXJRdDo6ZGVs
ZXRlQWxsTG9jYWxTdG9yYWdlKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12
b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyKQordm9pZCBUZXN0UnVubmVyUXQ6OmRlbGV0ZUxvY2FsU3RvcmFn
ZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFj
a2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit2b2lkIFRlc3RSdW5uZXJRdDo6b2Jz
ZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzeW5jTG9jYWxTdG9y
YWdlKCkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKICAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgogfQogCi12b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxp
dHkoKQordm9pZCBUZXN0UnVubmVyUXQ6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlz
aWJpbGl0eShjb25zdCBjaGFyKikKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRQYWdlVmlzaWJpbGl0
eShjb25zdCBjaGFyKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLXZv
aWQgVGVzdFJ1bm5lcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkKK3Zv
aWQgVGVzdFJ1bm5lclF0OjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQog
ewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBUZXN0UnVubmVyOjpz
ZXRUZXh0RGlyZWN0aW9uKGNvbnN0IFFTdHJpbmcmIGRpcmVjdGlvbk5hbWUpCit2b2lkIFRlc3RS
dW5uZXJRdDo6c2V0VGV4dERpcmVjdGlvbihjb25zdCBRU3RyaW5nJiBkaXJlY3Rpb25OYW1lKQog
ewogICAgIGlmIChkaXJlY3Rpb25OYW1lID09ICJhdXRvIikKICAgICAgICAgbV9kcnQtPndlYlBh
Z2UoKS0+dHJpZ2dlckFjdGlvbihRV2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvbkRlZmF1bHQpOwpA
QCAtOTE4LDcgKzkxOCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihjb25z
dCBRU3RyaW5nJiBkaXJlY3Rpb25OYW1lKQogICAgICAgICBtX2RydC0+d2ViUGFnZSgpLT50cmln
Z2VyQWN0aW9uKFFXZWJQYWdlOjpTZXRUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQpOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhY2NlcHQpCit2b2lk
IFRlc3RSdW5uZXJRdDo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2VwdCkKIHsKICAg
ICBRV2ViU2V0dGluZ3MqIGdsb2JhbFNldHRpbmdzID0gUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0
aW5ncygpOwogICAgIGlmIChhY2NlcHQpCkBAIC05MjksNyArOTI5LDcgQEAgdm9pZCBUZXN0UnVu
bmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWNjZXB0KQogICAgIH0KIH0KIAotdm9p
ZCBUZXN0UnVubmVyOjpzZXRBbHdheXNCbG9ja0Nvb2tpZXMoYm9vbCBibG9jaykKK3ZvaWQgVGVz
dFJ1bm5lclF0OjpzZXRBbHdheXNCbG9ja0Nvb2tpZXMoYm9vbCBibG9jaykKIHsKICAgICBRV2Vi
U2V0dGluZ3MqIGdsb2JhbFNldHRpbmdzID0gUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygp
OwogICAgIGlmIChibG9jaykKQEAgLTkzOCwxMSArOTM4LDExIEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0QWx3YXlzQmxvY2tDb29raWVzKGJvb2wgYmxvY2spCiAgICAgICAgIGdsb2JhbFNldHRpbmdz
LT5zZXRUaGlyZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWx3YXlzQWxsb3dUaGly
ZFBhcnR5Q29va2llcyk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QXVkaW9EYXRhKGNvbnN0
IFFCeXRlQXJyYXkmIGF1ZGlvRGF0YSkKK3ZvaWQgVGVzdFJ1bm5lclF0OjpzZXRBdWRpb0RhdGEo
Y29uc3QgUUJ5dGVBcnJheSYgYXVkaW9EYXRhKQogewogICAgIG1fYXVkaW9EYXRhID0gYXVkaW9E
YXRhOwogICAgIG1fYXVkaW9EdW1wID0gdHJ1ZTsKIH0KIAotY29uc3QgdW5zaWduZWQgVGVzdFJ1
bm5lcjo6bWF4Vmlld1dpZHRoID0gODAwOwotY29uc3QgdW5zaWduZWQgVGVzdFJ1bm5lcjo6bWF4
Vmlld0hlaWdodCA9IDYwMDsKK2NvbnN0IHVuc2lnbmVkIFRlc3RSdW5uZXJRdDo6bWF4Vmlld1dp
ZHRoID0gODAwOworY29uc3QgdW5zaWduZWQgVGVzdFJ1bm5lclF0OjptYXhWaWV3SGVpZ2h0ID0g
NjAwOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0Lmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuaAppbmRleCBlNmY4M2UxYTY1
NTU5NmM1M2MyOTE0OWU0MGE0OGNkNjhlNGM2NzZkLi5iYzJhZjlhMTQzMzEyZmZiNzI2MDU4NWM0
NTAzMjdmY2I1ZTEyOWZkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0
UnVubmVyUXQuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuaApA
QCAtNTMsMTIgKzUzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIER1bXBSZW5kZXJU
cmVlOwogfQogCi1jbGFzcyBUZXN0UnVubmVyIDogcHVibGljIFFPYmplY3QgeworY2xhc3MgVGVz
dFJ1bm5lclF0IDogcHVibGljIFFPYmplY3QgewogICAgIFFfT0JKRUNUCiAgICAgUV9QUk9QRVJU
WShpbnQgd2ViSGlzdG9yeUl0ZW1Db3VudCBSRUFEIHdlYkhpc3RvcnlJdGVtQ291bnQpCiAgICAg
UV9QUk9QRVJUWShib29sIGdsb2JhbEZsYWcgUkVBRCBnbG9iYWxGbGFnIFdSSVRFIHNldEdsb2Jh
bEZsYWcpCiBwdWJsaWM6Ci0gICAgVGVzdFJ1bm5lcihXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSop
OworICAgIFRlc3RSdW5uZXJRdChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSopOwogCiAgICAgYm9v
bCBzaG91bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhOyB9CiAg
ICAgYm9vbCBzaG91bGREdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHVtcDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188307</attachid>
            <date>2013-02-14 03:54:46 -0800</date>
            <delta_ts>2013-02-28 07:56:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109694-20130214125130.patch</filename>
            <type>text/plain</type>
            <size>9933</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YWEwYmI0ZWUzYzg4ZDcwMDAxYzU4MjA3YzkxNjhmMjNlZjA5NTRmLi42ODczMGUwNTllNGE1MjI2
OTMxYTg5YmE3ZWIyYTExMzk5M2Q5YTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxMy0wMi0xMyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBk
aWdpYS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbnZlbmllbnQgY29udmVyc2lv
biBmcm9tIEpTU3RyaW5nUmVmIHRvIFFTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBKU1N0cmluZ0NvcHlRU3RyaW5nIGhlbHBlciBmdW5j
dGlvbiB0aGF0IGFsbG93cyBmb3IgdGhlIGNvbnZlbmllbnQKKyAgICAgICAgZXh0cmFjdGlvbiBv
ZiBhIFFTdHJpbmcgb3V0IG9mIGEgSlNTdHJpbmdSZWYuIFRoYXQgZXh0cmFjdGlvbiB3aWxsIG5v
dyBiZQorICAgICAgICB2ZXJ5IGZhc3QgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBzdHJpbmcgd2ls
bCBiZSBjcmVhdGVkIGZyb20gYSBkZWVwIGNvcHkKKyAgICAgICAgb2YgYSBRU3RyaW5nIGluc3Rl
YWQgb2YgZnJvbSBhIHJhdyBkZWVwIFN0cmluZ0ltcGwgY29weS4gVGhpcyBlc3NlbnRpYWxseQor
ICAgICAgICBvcHRpbWl6ZXMgSlNTdHJpbmdSZWYgZm9yIHRoZSBzZWVtaW5nbHkgY29tbW9uIGNh
c2Ugb2YgZW5kaW5nIHVwIGJlaW5nCisgICAgICAgIGNvbnZlcnRlZCB0byBhICJuYXRpdmUiIHN0
cmluZy4KKworICAgICAgICAqIEFQSS9KU1N0cmluZ1JlZlF0LmNwcDogQWRkZWQuCisgICAgICAg
IChKU1N0cmluZ0NvcHlRU3RyaW5nKToKKyAgICAgICAgKiBBUEkvSlNTdHJpbmdSZWZRdC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBBUEkvT3BhcXVlSlNTdHJpbmcuaDoKKyAgICAgICAgKE9wYXF1ZUpT
U3RyaW5nKToKKyAgICAgICAgKE9wYXF1ZUpTU3RyaW5nOjpxU3RyaW5nKToKKyAgICAgICAgKE9w
YXF1ZUpTU3RyaW5nOjpPcGFxdWVKU1N0cmluZyk6CisgICAgICAgICogVGFyZ2V0LnByaToKKwog
MjAxMy0wMi0xMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtpT1NdIEVuYWJsZSBQQUdFX1ZJU0lCSUxJVFlfQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU3MDYzZWRhZTc2NzA1
ZDUwZjhjZWMxNTUxODBkZjdmZDI2ZGY1YzAuLmY2YTE4NmMxMTBlYzI3MDUzZDY0Y2Q0MzkzYzk0
ODc5NWI4YWRkZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMDItMTQgIFNpbW9uIEhhdXNt
YW5uICA8c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciBjb252ZW5pZW50IGNvbnZlcnNpb24gZnJvbSBKU1N0cmluZ1JlZiB0byBRU3RyaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2OTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgSlNTdHJpbmdD
b3B5UVN0cmluZyBoZWxwZXIgZnVuY3Rpb24gdGhhdCBhbGxvd3MgZm9yIHRoZSBjb252ZW5pZW50
CisgICAgICAgIGV4dHJhY3Rpb24gb2YgYSBRU3RyaW5nIG91dCBvZiBhIEpTU3RyaW5nUmVmLiBU
aGF0IGV4dHJhY3Rpb24gd2lsbCBub3cgYmUKKyAgICAgICAgdmVyeSBmYXN0IGJlY2F1c2UgdGhl
IHVuZGVybHlpbmcgc3RyaW5nIHdpbGwgYmUgY3JlYXRlZCBmcm9tIGEgZGVlcCBjb3B5CisgICAg
ICAgIG9mIGEgUVN0cmluZyBpbnN0ZWFkIG9mIGZyb20gYSByYXcgZGVlcCBTdHJpbmdJbXBsIGNv
cHkuIFRoaXMgZXNzZW50aWFsbHkKKyAgICAgICAgb3B0aW1pemVzIEpTU3RyaW5nUmVmIGZvciB0
aGUgc2VlbWluZ2x5IGNvbW1vbiBjYXNlIG9mIGVuZGluZyB1cCBiZWluZworICAgICAgICBjb252
ZXJ0ZWQgdG8gYSAibmF0aXZlIiBzdHJpbmcuCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJp
bmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6Omlzb2xhdGVkQ29weUZvckFQSSk6CisgICAg
ICAgIChXVEYpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoU3Ry
aW5nKToKKwogMjAxMy0wMi0xMiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBHTGliIHVuaWNvZGUgYmFja2VuZApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZlF0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM5
OTBhY2RjNTYxYTczNzYwZjFjNTFiMzE1NDMxZjE1ZmY0ZjMzMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5jcHAKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBEaWdpYSBQbGMg
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNTdHJpbmdSZWZRdC5oIgorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2lu
Y2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJKU1N0cmluZ1JlZi5oIgor
I2luY2x1ZGUgIk9wYXF1ZUpTU3RyaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVl
Lmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisKK1FTdHJpbmcgSlNTdHJpbmdDb3B5
UVN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHN0cmluZy0+cVN0cmlu
ZygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1Jl
ZlF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmUXQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yYjNlZjliODI3MDU4MzY5MDA3YmY2NmI5MDA5Njg3YjllN2Q1N2YwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZlF0LmgKQEAgLTAs
MCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBEaWdp
YSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTU3Ry
aW5nUmVmUXRfaAorI2RlZmluZSBKU1N0cmluZ1JlZlF0X2gKKworI2luY2x1ZGUgIkpTQmFzZS5o
IgorI2luY2x1ZGUgPFFTdHJpbmc+CisKKy8qIFFTdHJpbmcgY29udmVuaWVuY2UgbWV0aG9kcyAq
LworCisvKiEKK0BmdW5jdGlvbgorQGFic3RyYWN0ICAgICAgICAgQ3JlYXRlcyBhIFFTdHJpbmcg
ZnJvbSBhIEphdmFTY3JpcHQgc3RyaW5nLgorQHBhcmFtIHN0cmluZyAgICAgVGhlIEpTU3RyaW5n
IHRvIGNvcHkgaW50byB0aGUgbmV3IFFTdHJpbmcuCitAcmVzdWx0ICAgICAgICAgICBBIFFTdHJp
bmcgY29udGFpbmluZyBzdHJpbmcuCisqLworSlNfRVhQT1JUIFFTdHJpbmcgSlNTdHJpbmdDb3B5
UVN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcpOworCisjZW5kaWYgLyogSlNTdHJpbmdSZWZRdF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5n
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgKaW5kZXggMDQ2
NGU4ODEzMzhiMTYyMzg1MjZlMDllMGI0MTE4MTQxYjQ5NDZhNS4uODg5YTAxN2ZhMzQyZDMzOWQ5
NjQ3NTQyZWM2MTg0OTVjNjE0MDQyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PcGFxdWVKU1N0cmluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3Bh
cXVlSlNTdHJpbmcuaApAQCAtNTgsNiArNTgsMTAgQEAgc3RydWN0IE9wYXF1ZUpTU3RyaW5nIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE9wYXF1ZUpTU3RyaW5nPiB7CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBTdHJpbmcgc3RyaW5nKCkgY29uc3Q7CiAgICAgSlNDOjpJZGVudGlmaWVy
IGlkZW50aWZpZXIoSlNDOjpKU0dsb2JhbERhdGEqKSBjb25zdDsKKyNpZiBQTEFURk9STShRVCkK
KyAgICAvLyBUaGlzIGlzIGNoZWFwIGlmIG1fc3RyaW5nIHdhcyBjcmVhdGVkIGZyb20gYSBRU3Ry
aW5nLgorICAgIFFTdHJpbmcgcVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9Cisj
ZW5kaWYKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV1RGOjpUaHJlYWRTYWZlUmVmQ291
bnRlZDxPcGFxdWVKU1N0cmluZz47CkBAIC02OCwxMSArNzIsNyBAQCBwcml2YXRlOgogCiAgICAg
T3BhcXVlSlNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICAvLyBN
YWtlIGEgY29weSBvZiB0aGUgc291cmNlIHN0cmluZy4KLSAgICAgICAgaWYgKHN0cmluZy5pczhC
aXQoKSkKLSAgICAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3N0cmluZyA9
IFN0cmluZyhzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAg
IG1fc3RyaW5nID0gc3RyaW5nLmlzb2xhdGVkQ29weUZvckFQSSgpOwogICAgIH0KIAogICAgIE9w
YXF1ZUpTU3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9UYXJnZXQucHJpCmluZGV4IGIyYTlhYWM2NmMzNGJhOTQ5MDRhMmI4MDdjM2Vi
ZTJjMTk5NzlhMzcuLjFlMzA1YzY1N2ExNDZlZDY2MDVkNzI5NWIzYTcxZGFlNzkzNmYyNWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCkBAIC00Miw2ICs0Miw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIEFQSS9KU09iamVjdFJlZi5jcHAgXAogICAgIEFQSS9KU1NjcmlwdFJlZi5jcHAgXAogICAg
IEFQSS9KU1N0cmluZ1JlZi5jcHAgXAorICAgIEFQSS9KU1N0cmluZ1JlZlF0LmNwcCBcCiAgICAg
QVBJL0pTVmFsdWVSZWYuY3BwIFwKICAgICBBUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5j
cHAgXAogICAgIEFQSS9PcGFxdWVKU1N0cmluZy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwCmluZGV4IDhmYWM1NTk5YTNlMTA0ZWQxMWY2MmZhMzYyNTIyN2EzMDE5Y2E0OTcuLmViZWQ5
ZDk0ZTMxNjUzY2MzZTYyNTRiOTFjYjJkNDNmZGNiOGJmZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5jcHAKQEAgLTY2MSw2ICs2NjEsMjIgQEAgU3RyaW5nIFN0cmluZzo6aXNvbGF0ZWRDb3B5
KCkgY29uc3QKICAgICByZXR1cm4gbV9pbXBsLT5pc29sYXRlZENvcHkoKTsKIH0KIAorU3RyaW5n
IFN0cmluZzo6aXNvbGF0ZWRDb3B5Rm9yQVBJKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW1wbCkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworI2lmIFBMQVRGT1JNKFFUKQorICAgIC8vIEEgZGVl
cCBzdHJpbmcgY29weSB0aGF0IGlzIHNwZWNpZmljYWxseSBmb3IgdXNlIGluIHRoZSBBUEkgbGF5
ZXIKKyAgICAvLyBpcyBvcHRpbWl6ZWQgYnkgbWFraW5nIGEgY29weSBpbnRvIGEgUVN0cmluZyBh
bmQgbWFraW5nIHRoZSBXVEZTdHJpbmcKKyAgICAvLyBhZG9wdCB0aGUgZGF0YS4gVGhhdCBtYWtl
cyBpdCB2ZXJ5IGZhc3QgdG8gZXh0cmFjdCBhIFFTdHJpbmcgb3V0IG9mCisgICAgLy8gaXQgbGF0
ZXIsIHNvbWV0aGluZyB0aGF0IGlzIGxpa2VseSB0byBoYXBwZW4gaW4gdGhlIEFQSSBsYXllci4K
KyAgICBRU3RyaW5nIGRlZXBDb3B5KCp0aGlzKTsKKyAgICByZXR1cm4gU3RyaW5nKGRlZXBDb3B5
KTsKKyNlbHNlCisgICAgcmV0dXJuIG1faW1wbC0+aXNvbGF0ZWRDb3B5KCk7CisjZW5kaWYKK30K
KwogYm9vbCBTdHJpbmc6OmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFpbXBsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCAwYjg3NjlkOTgwZmRk
NzUzMDQ3YjFlMWNhYjVkM2RlZDEyMzJjMDU4Li5mYzM0MWZmYWM0NWUwNzJmYzFlMTNhYzkwNDYz
OGRlMTQ2NDMzMTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTM5NCw2ICszOTQsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBwZXJjZW50YWdlKGludCYgcGVyY2VudGFnZSkgY29uc3Q7CiAK
ICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGlzb2xhdGVkQ29weSgpIGNvbnN0Owor
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgaXNvbGF0ZWRDb3B5Rm9yQVBJKCkgY29u
c3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgaXNTYWZlVG9TZW5kVG9Bbm90aGVy
VGhyZWFkKCkgY29uc3Q7CiAKICAgICAvLyBQcmV2ZW50IFN0cmluZ3MgZnJvbSBiZWluZyBpbXBs
aWNpdGx5IGNvbnZlcnRhYmxlIHRvIGJvb2wgYXMgaXQgd2lsbCBiZSBhbWJpZ3VvdXMgb24gYW55
IHBsYXRmb3JtIHRoYXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190728</attachid>
            <date>2013-02-28 07:56:48 -0800</date>
            <delta_ts>2013-03-12 06:49:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109694-20130228165300.patch</filename>
            <type>text/plain</type>
            <size>6402</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZDIxNWJhMWVhNTI2NjkwZTk1Mzg5NGFiMTQ0NDk1YzliOGJkNzY1Li5lMjY3MWNjOWMyZjVlMTJl
NjZkMDk0Nzg5OWEyZjM1MzMzMmJiYzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxMy0wMi0xMyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBk
aWdpYS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbnZlbmllbnQgY29udmVyc2lv
biBmcm9tIEpTU3RyaW5nUmVmIHRvIFFTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBKU1N0cmluZ0NvcHlRU3RyaW5nIGhlbHBlciBmdW5j
dGlvbiB0aGF0IGFsbG93cyBmb3IgdGhlIGNvbnZlbmllbnQKKyAgICAgICAgZXh0cmFjdGlvbiBv
ZiBhIFFTdHJpbmcgb3V0IG9mIGEgSlNTdHJpbmdSZWYuCisKKyAgICAgICAgKiBBUEkvSlNTdHJp
bmdSZWZRdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNTdHJpbmdDb3B5UVN0cmluZyk6CisgICAg
ICAgICogQVBJL0pTU3RyaW5nUmVmUXQuaDogQWRkZWQuCisgICAgICAgICogQVBJL09wYXF1ZUpT
U3RyaW5nLmg6CisgICAgICAgIChPcGFxdWVKU1N0cmluZyk6CisgICAgICAgIChPcGFxdWVKU1N0
cmluZzo6cVN0cmluZyk6CisgICAgICAgIChPcGFxdWVKU1N0cmluZzo6T3BhcXVlSlNTdHJpbmcp
OgorICAgICAgICAqIFRhcmdldC5wcmk6CisKIDIwMTMtMDItMjggIFNpbW9uIEhhdXNtYW5uICA8
c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF1bTWFjXSBGaXggbWFzc2l2
ZSBwYXJhbGxlbCBidWlsZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTdHJpbmdSZWZRdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5nUmVm
UXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFjOTkwYWNkYzU2MWE3Mzc2MGYxYzUxYjMxNTQzMWYxNWZmNGYz
MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5n
UmVmUXQuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU3RyaW5nUmVmUXQuaCIKKworI2lu
Y2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5j
bHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgor
CitRU3RyaW5nIEpTU3RyaW5nQ29weVFTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQoreworICAg
IHJldHVybiBzdHJpbmctPnFTdHJpbmcoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1N0cmluZ1JlZlF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmIzZWY5YjgyNzA1ODM2OTAwN2JmNjZiOTAwOTY4
N2I5ZTdkNTdmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTdHJpbmdSZWZRdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU1N0cmluZ1JlZlF0X2gKKyNkZWZpbmUgSlNTdHJpbmdSZWZRdF9o
CisKKyNpbmNsdWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRlIDxRU3RyaW5nPgorCisvKiBRU3RyaW5n
IGNvbnZlbmllbmNlIG1ldGhvZHMgKi8KKworLyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCAgICAg
ICAgIENyZWF0ZXMgYSBRU3RyaW5nIGZyb20gYSBKYXZhU2NyaXB0IHN0cmluZy4KK0BwYXJhbSBz
dHJpbmcgICAgIFRoZSBKU1N0cmluZyB0byBjb3B5IGludG8gdGhlIG5ldyBRU3RyaW5nLgorQHJl
c3VsdCAgICAgICAgICAgQSBRU3RyaW5nIGNvbnRhaW5pbmcgc3RyaW5nLgorKi8KK0pTX0VYUE9S
VCBRU3RyaW5nIEpTU3RyaW5nQ29weVFTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKTsKKworI2Vu
ZGlmIC8qIEpTU3RyaW5nUmVmUXRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFx
dWVKU1N0cmluZy5oCmluZGV4IDA0NjRlODgxMzM4YjE2MjM4NTI2ZTA5ZTBiNDExODE0MWI0OTQ2
YTUuLjZjODM0Zjk3YmZiNTk3ZjM0YmYyZTQzMDliNWQ0MzEzNzNhMTdkZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgKQEAgLTU4LDYgKzU4LDkgQEAgc3Ry
dWN0IE9wYXF1ZUpTU3RyaW5nIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE9wYXF1ZUpT
U3RyaW5nPiB7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3RyaW5nKCkgY29uc3Q7
CiAgICAgSlNDOjpJZGVudGlmaWVyIGlkZW50aWZpZXIoSlNDOjpKU0dsb2JhbERhdGEqKSBjb25z
dDsKKyNpZiBQTEFURk9STShRVCkKKyAgICBRU3RyaW5nIHFTdHJpbmcoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZzsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8T3BhcXVlSlNTdHJpbmc+OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQppbmRleCA1ODE0MGY2ZDUwMjkxNTNkODFjZjQ0NGE5ZDE3ODZmNDI1ZTNhMGQ1Li5iYTNi
ZTYyZDFhMGRkZGRmZTgxMzAyZDA2MTQxODM4MDEyMTRiZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFy
Z2V0LnByaQpAQCAtNDIsNiArNDIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBBUEkvSlNPYmplY3RS
ZWYuY3BwIFwKICAgICBBUEkvSlNTY3JpcHRSZWYuY3BwIFwKICAgICBBUEkvSlNTdHJpbmdSZWYu
Y3BwIFwKKyAgICBBUEkvSlNTdHJpbmdSZWZRdC5jcHAgXAogICAgIEFQSS9KU1ZhbHVlUmVmLmNw
cCBcCiAgICAgQVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIFwKICAgICBBUEkvT3Bh
cXVlSlNTdHJpbmcuY3BwIFwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192725</attachid>
            <date>2013-03-12 06:49:54 -0700</date>
            <delta_ts>2013-03-13 02:58:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109694-20130312144553.patch</filename>
            <type>text/plain</type>
            <size>6462</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
NGE3NjEyNGY5ZTY5MjlmNzJjNjRjNmZhNWQyOGNkZDE4YTMwYmU2Li5lZWYwZjcwNDQwZWZiZWJl
YTUxZTY2YWUxMmYwZTFiMzY4MmEzZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxMy0wMi0xMyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBk
aWdpYS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbnZlbmllbnQgY29udmVyc2lv
biBmcm9tIEpTU3RyaW5nUmVmIHRvIFFTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBKU1N0cmluZ0NvcHlRU3RyaW5nIGhlbHBlciBmdW5j
dGlvbiB0aGF0IGFsbG93cyBmb3IgdGhlIGNvbnZlbmllbnQKKyAgICAgICAgZXh0cmFjdGlvbiBv
ZiBhIFFTdHJpbmcgb3V0IG9mIGEgSlNTdHJpbmdSZWYuCisKKyAgICAgICAgKiBBUEkvSlNTdHJp
bmdSZWZRdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNTdHJpbmdDb3B5UVN0cmluZyk6CisgICAg
ICAgICogQVBJL0pTU3RyaW5nUmVmUXQuaDogQWRkZWQuCisgICAgICAgICogQVBJL09wYXF1ZUpT
U3RyaW5nLmg6CisgICAgICAgIChPcGFxdWVKU1N0cmluZyk6CisgICAgICAgIChPcGFxdWVKU1N0
cmluZzo6cVN0cmluZyk6CisgICAgICAgIChPcGFxdWVKU1N0cmluZzo6T3BhcXVlSlNTdHJpbmcp
OgorICAgICAgICAqIFRhcmdldC5wcmk6CisKIDIwMTMtMDMtMTIgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiBwaGFz
ZSBzaG91bGQgbm90IHJlcnVuIGZvcndhcmQgcHJvcGFnYXRpb24gaWYgZG91YmxlIHZvdGluZyBo
YXMgYWxyZWFkeSBjb252ZXJnZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTdHJpbmdSZWZRdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5n
UmVmUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjOTkwYWNkYzU2MWE3Mzc2MGYxYzUxYjMxNTQzMWYxNWZm
NGYzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3Ry
aW5nUmVmUXQuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU3RyaW5nUmVmUXQuaCIKKwor
I2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisj
aW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5o
PgorCitRU3RyaW5nIEpTU3RyaW5nQ29weVFTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQorewor
ICAgIHJldHVybiBzdHJpbmctPnFTdHJpbmcoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1N0cmluZ1JlZlF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmIzZWY5YjgyNzA1ODM2OTAwN2JmNjZiOTAw
OTY4N2I5ZTdkNTdmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTdHJpbmdSZWZRdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU1N0cmluZ1JlZlF0X2gKKyNkZWZpbmUgSlNTdHJpbmdSZWZR
dF9oCisKKyNpbmNsdWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRlIDxRU3RyaW5nPgorCisvKiBRU3Ry
aW5nIGNvbnZlbmllbmNlIG1ldGhvZHMgKi8KKworLyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCAg
ICAgICAgIENyZWF0ZXMgYSBRU3RyaW5nIGZyb20gYSBKYXZhU2NyaXB0IHN0cmluZy4KK0BwYXJh
bSBzdHJpbmcgICAgIFRoZSBKU1N0cmluZyB0byBjb3B5IGludG8gdGhlIG5ldyBRU3RyaW5nLgor
QHJlc3VsdCAgICAgICAgICAgQSBRU3RyaW5nIGNvbnRhaW5pbmcgc3RyaW5nLgorKi8KK0pTX0VY
UE9SVCBRU3RyaW5nIEpTU3RyaW5nQ29weVFTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKTsKKwor
I2VuZGlmIC8qIEpTU3RyaW5nUmVmUXRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9P
cGFxdWVKU1N0cmluZy5oCmluZGV4IDA0NjRlODgxMzM4YjE2MjM4NTI2ZTA5ZTBiNDExODE0MWI0
OTQ2YTUuLjZjODM0Zjk3YmZiNTk3ZjM0YmYyZTQzMDliNWQ0MzEzNzNhMTdkZDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgKQEAgLTU4LDYgKzU4LDkgQEAg
c3RydWN0IE9wYXF1ZUpTU3RyaW5nIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE9wYXF1
ZUpTU3RyaW5nPiB7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3RyaW5nKCkgY29u
c3Q7CiAgICAgSlNDOjpJZGVudGlmaWVyIGlkZW50aWZpZXIoSlNDOjpKU0dsb2JhbERhdGEqKSBj
b25zdDsKKyNpZiBQTEFURk9STShRVCkKKyAgICBRU3RyaW5nIHFTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZzsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdU
Rjo6VGhyZWFkU2FmZVJlZkNvdW50ZWQ8T3BhcXVlSlNTdHJpbmc+OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFy
Z2V0LnByaQppbmRleCAzYjA2MmYyYjA0YjEzM2YxMWYyZGExNDlhOTQ1MGI0MDEzOTEzNDljLi40
OTA3Y2U5ZDllYzkzZmU2ZjQ1N2U3NDI5NTljZGZlNGIwOThiZDRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQpAQCAtNDMsNiArNDMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBBUEkvSlNPYmpl
Y3RSZWYuY3BwIFwKICAgICBBUEkvSlNTY3JpcHRSZWYuY3BwIFwKICAgICBBUEkvSlNTdHJpbmdS
ZWYuY3BwIFwKKyAgICBBUEkvSlNTdHJpbmdSZWZRdC5jcHAgXAogICAgIEFQSS9KU1ZhbHVlUmVm
LmNwcCBcCiAgICAgQVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIFwKICAgICBBUEkv
T3BhcXVlSlNTdHJpbmcuY3BwIFwK
</data>
<flag name="review"
          id="214043"
          type_id="1"
          status="+"
          setter="allan.jensen"
    />
          </attachment>
      

    </bug>

</bugzilla>