<?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>77007</bug_id>
          
          <creation_ts>2012-01-25 06:52:18 -0800</creation_ts>
          <short_desc>[Qt][WK2] Use QVariant for payload data in application URL schemes.</short_desc>
          <delta_ts>2012-01-31 04:37:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>hausmann</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>542231</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-25 06:52:18 -0800</bug_when>
    <thetext>Application schemes should use QVariant as datatype for payload data. This way data with different types can be passed.
A normal JS string / QString can be passed as well as a QByteArray for binary data.

We favor this solution over a http redirection based solution, because this solution is less intrusive and less prone for security issues.
Therefore we should also remove the http headers exposed in QQuickNetworkReply.
The only necessary fields are contentType and data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542249</commentid>
    <comment_count>1</comment_count>
      <attachid>123935</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-25 07:27:54 -0800</bug_when>
    <thetext>Created attachment 123935
patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542250</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-25 07:30:21 -0800</bug_when>
    <thetext>Attachment 123935 did not pass style-queue:

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

Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h:40:  m_iso8859_1 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 9 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>542285</commentid>
    <comment_count>3</comment_count>
      <attachid>123935</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-25 08:11:29 -0800</bug_when>
    <thetext>Comment on attachment 123935
patch for review.

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

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:59
&gt; +    return QVariant(QByteArray::fromRawData(static_cast&lt;const char*&gt;(m_sharedMemory-&gt;data()), m_dataLength));
&gt;  }
&gt;  
&gt; -void QQuickNetworkReply::setData(const QString&amp; data)
&gt; +void QQuickNetworkReply::setData(const QVariant&amp; data)
&gt;  {
&gt;      // This function can be called several times. In this case the previously allocated SharedMemory

Just a quick note before I look deeper into this:

I think is is going into the right direction. However I notice that now setData and data are not symmetric anymore, i.e. what you pass to setData is not what you&apos;re going to get back from data() if what you pass in is a QString.

I suggest to make setData/data symmetric, i.e. store the original QVariant and only convert it to the final &quot;byte array&quot; when _sending_ the reply across the &quot;CoreIPC wire&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542917</commentid>
    <comment_count>4</comment_count>
      <attachid>123935</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-26 00:15:55 -0800</bug_when>
    <thetext>Comment on attachment 123935
patch for review.

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

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:54
&gt; +    return QVariant(QByteArray::fromRawData(static_cast&lt;const char*&gt;(m_sharedMemory-&gt;data()), m_dataLength));

This is unfortunately also not a safe operation as it requires the caller to keep the network reply alive while keeping a reference to the bytearray.

&gt; Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.cpp:25
&gt; +    , m_iso8859_1(QByteArray(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;this is iso8859-1 content&lt;/title&gt;&lt;/head&gt;&lt;body&gt;content&lt;/body&gt;&lt;/html&gt;&quot;))
&gt; +    , m_utf8(QByteArray(QString(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;this is utf-8 content&lt;/title&gt;&lt;/head&gt;&lt;body&gt;content&lt;/body&gt;&lt;/html&gt;&quot;).toUtf8()))

How about including a character in the test strings that is not part of ASCII but ISO-8859-1 such as

    251   169   A9     ©     COPYRIGHT SIGN

Then you could do:

QString text = QStringLiteral(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;title with copyright %1&quot;);
text = text.arg(QChar::fromLatin1(169));

and then

latin1Data = text.toLatin1();
utf8Data = text.toUtf8();

Q_ASSERT(latin1Data != utf8Data);

&gt; Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h:32
&gt; +Q_OBJECT
&gt; +Q_PROPERTY(QVariant iso88591data READ iso88591data)
&gt; +Q_PROPERTY(QVariant utf8data READ utf8data)

Missing indentation.

&gt; Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h:37
&gt; +    QVariant iso88591data();
&gt; +    QVariant utf8data();

Missing const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543017</commentid>
    <comment_count>5</comment_count>
      <attachid>123935</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-26 03:11:14 -0800</bug_when>
    <thetext>Comment on attachment 123935
patch for review.

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

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:54
&gt;&gt; +    return QVariant(QByteArray::fromRawData(static_cast&lt;const char*&gt;(m_sharedMemory-&gt;data()), m_dataLength));
&gt; 
&gt; This is unfortunately also not a safe operation as it requires the caller to keep the network reply alive while keeping a reference to the bytearray.

Indeed - There is a detach() missing. But it&apos;s going away with the change for your next comment anyway. :)

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:59
&gt;&gt;      // This function can be called several times. In this case the previously allocated SharedMemory
&gt; 
&gt; Just a quick note before I look deeper into this:
&gt; 
&gt; I think is is going into the right direction. However I notice that now setData and data are not symmetric anymore, i.e. what you pass to setData is not what you&apos;re going to get back from data() if what you pass in is a QString.
&gt; 
&gt; I suggest to make setData/data symmetric, i.e. store the original QVariant and only convert it to the final &quot;byte array&quot; when _sending_ the reply across the &quot;CoreIPC wire&quot;.

The idea was to copy as little as possible. But yes, with the change to QVariant I have to change this as well.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.cpp:20
&gt;&gt; +#include &quot;bytearraytestdata.h&quot;
&gt; 
&gt; Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]

I am ignoring that one, because we do not want to include config.h in a qml test.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.cpp:25
&gt;&gt; +    , m_utf8(QByteArray(QString(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;this is utf-8 content&lt;/title&gt;&lt;/head&gt;&lt;body&gt;content&lt;/body&gt;&lt;/html&gt;&quot;).toUtf8()))
&gt; 
&gt; How about including a character in the test strings that is not part of ASCII but ISO-8859-1 such as
&gt; 
&gt;     251   169   A9     ©     COPYRIGHT SIGN
&gt; 
&gt; Then you could do:
&gt; 
&gt; QString text = QStringLiteral(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;title with copyright %1&quot;);
&gt; text = text.arg(QChar::fromLatin1(169));
&gt; 
&gt; and then
&gt; 
&gt; latin1Data = text.toLatin1();
&gt; utf8Data = text.toUtf8();
&gt; 
&gt; Q_ASSERT(latin1Data != utf8Data);

I guess that&apos;s a good idea, to make sure that the test data actually has the proper encoding.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h:32
&gt;&gt; +Q_PROPERTY(QVariant utf8data READ utf8data)
&gt; 
&gt; Missing indentation.

fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h:37
&gt;&gt; +    QVariant utf8data();
&gt; 
&gt; Missing const.

fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h:40
&gt;&gt; +    QByteArray m_iso8859_1;
&gt; 
&gt; m_iso8859_1 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

I renamed that one to m_latin1Data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543018</commentid>
    <comment_count>6</comment_count>
      <attachid>124091</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-26 03:13:51 -0800</bug_when>
    <thetext>Created attachment 124091
patch for review. - updated as commented previously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543019</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-26 03:15:22 -0800</bug_when>
    <thetext>Attachment 124091 did not pass style-queue:

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

Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 9 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>543027</commentid>
    <comment_count>8</comment_count>
      <attachid>124091</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-26 03:38:02 -0800</bug_when>
    <thetext>Comment on attachment 124091
patch for review. - updated as commented previously.

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

r=me. One comment below and one more here, they can be ignored or addressed in later changes ;)

One aspect I&apos;m not too happy about is that the _uiprocess_ decides to store input _strings_ as-is (utf-16) encoded and the _web process_ side - in the QtNetworkReply constructor - makes the assumption that the encoding of the provided data is utf-16 unless otherwise specified. I think it would be much cleaner if this could all be handled on the ui process side without assumptions across process boundaries.

That means that ::send() should look like this:

if (data.type() == QVariant::String) {
    contentType = &quot;text/html; charset=utf-16&quot;;
    QString string = data.toString();
    memcpy(blah, string.constData(), ...);
} else if (data.canConvert&lt;QByteArray&gt;()) {
    // copy bytes
}

if (contentType.isEmpty()) {
   abort and print a warning or something
}

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:91
&gt; +        QObject* schemeParent = parent()-&gt;parent();
&gt; +        if (schemeParent) {
&gt; +            QQuickWebViewExperimental* webViewExperimental = qobject_cast&lt;QQuickWebViewExperimental*&gt;(schemeParent-&gt;parent());

parent()-&gt;parent()-&gt;parent() is quite a hack. I think it would be nicer if QQuickNetworkReply kept a QWeakPointer to the QQuickWebView and created the QQuickWebViewExperimental on the fly for sending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543054</commentid>
    <comment_count>9</comment_count>
      <attachid>124091</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-26 04:28:16 -0800</bug_when>
    <thetext>Comment on attachment 124091
patch for review. - updated as commented previously.

Clearing flags on attachment: 124091

Committed r105991: &lt;http://trac.webkit.org/changeset/105991&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543055</commentid>
    <comment_count>10</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-26 04:28:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544120</commentid>
    <comment_count>11</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-27 09:21:26 -0800</bug_when>
    <thetext>Thank you very much for reviewing. :)

(In reply to comment #8)
&gt; (From update of attachment 124091 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124091&amp;action=review
&gt; 
&gt; r=me. One comment below and one more here, they can be ignored or addressed in later changes ;)
&gt; 
&gt; One aspect I&apos;m not too happy about is that the _uiprocess_ decides to store input _strings_ as-is (utf-16) encoded and the _web process_ side - in the QtNetworkReply constructor - makes the assumption that the encoding of the provided data is utf-16 unless otherwise specified. I think it would be much cleaner if this could all be handled on the ui process side without assumptions across process boundaries.
&gt; 
&gt; That means that ::send() should look like this:
&gt; 
&gt; if (data.type() == QVariant::String) {
&gt;     contentType = &quot;text/html; charset=utf-16&quot;;
&gt;     QString string = data.toString();
&gt;     memcpy(blah, string.constData(), ...);
&gt; } else if (data.canConvert&lt;QByteArray&gt;()) {
&gt;     // copy bytes
&gt; }
&gt; 
&gt; if (contentType.isEmpty()) {
&gt;    abort and print a warning or something
&gt; }
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:91
&gt; &gt; +        QObject* schemeParent = parent()-&gt;parent();
&gt; &gt; +        if (schemeParent) {
&gt; &gt; +            QQuickWebViewExperimental* webViewExperimental = qobject_cast&lt;QQuickWebViewExperimental*&gt;(schemeParent-&gt;parent());
&gt; 
&gt; parent()-&gt;parent()-&gt;parent() is quite a hack. I think it would be nicer if QQuickNetworkReply kept a QWeakPointer to the QQuickWebView and created the QQuickWebViewExperimental on the fly for sending.

I will propose a patch to address these issues.
Unfortunately I cannot just pass a pointer to the WebView in the constructor, because the QQuickNetworkReply is created in the constructor of the QQuickUrlSchemeDelegate and that one is created in QML. So at the time of instantiation it does not even have a parent. So calling a setter when the UrlScheme is added to the ListProperty is the best i could come up with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544121</commentid>
    <comment_count>12</comment_count>
      <attachid>124328</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-27 09:22:41 -0800</bug_when>
    <thetext>Created attachment 124328
patch for review. - refactorings as commented before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545534</commentid>
    <comment_count>13</comment_count>
      <attachid>124328</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-30 16:03:23 -0800</bug_when>
    <thetext>Comment on attachment 124328
patch for review. - refactorings as commented before.

Cleared review? from attachment 124328 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545919</commentid>
    <comment_count>14</comment_count>
      <attachid>124328</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-31 03:38:13 -0800</bug_when>
    <thetext>Comment on attachment 124328
patch for review. - refactorings as commented before.

Perhaps you should open a new bug report and attach this patch with r? set :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545921</commentid>
    <comment_count>15</comment_count>
      <attachid>124328</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-31 03:40:33 -0800</bug_when>
    <thetext>Comment on attachment 124328
patch for review. - refactorings as commented before.

Patch looks good to me otherwise :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545946</commentid>
    <comment_count>16</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-31 04:37:56 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 124328 [details])
&gt; Patch looks good to me otherwise :)

https://bugs.webkit.org/show_bug.cgi?id=77417</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123935</attachid>
            <date>2012-01-25 07:27:54 -0800</date>
            <delta_ts>2012-01-26 03:13:51 -0800</delta_ts>
            <desc>patch for review.</desc>
            <filename>77007_20120125-162441.patch</filename>
            <type>text/plain</type>
            <size>20337</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2NDAxNGI1Li41ZWMwNTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTItMDEtMjUgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIFVzZSBRVmFyaWFudCBmb3IgcGF5bG9hZCBkYXRhIGluIGFwcGxpY2F0aW9u
IFVSTCBzY2hlbWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzcwMDcKKworICAgICAgICBNYWtlIGFwcGxpY2F0aW9uIHNjaGVtZXMgdXNlIFFWYXJp
YW50IGZvciBwYXlsb2FkIGRhdGEuCisgICAgICAgIFRoaXMgYWxsb3dzIHBhc3NpbmcgUUJ5dGVB
cnJheXMgYXMgd2VsbCBhcyBzaW1wbGUgU3RyaW5nIGRhdGEuCisKKyAgICAgICAgUmVtb3ZlIHVu
bmVlZGVkIGh0dHAgaGVhZGVyIHBhcnRzIHRoYXQgd2VyZSBleHBvc2VkIGluCisgICAgICAgIFFR
dWlja05ldHdvcmtSZXBseS4KKworICAgICAgICBBZGQgQnl0ZUFycmF5VGVzdERhdGEgY2xhc3Mg
dG8gYWxsb3cgaW5qZWN0aW5nIFFCeXRlQXJyYXkKKyAgICAgICAgZGF0YSBpbnRvIGFuIGFwcGxp
Y2F0aW9uIHNjaGVtZSBoYW5kbGVyIGZvciB0ZXN0aW5nLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0
YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YTo6UXROZXR3b3JrUmVw
bHlEYXRhKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhOjplbmNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE6OmRlY29kZSk6CisgICAgICAgICog
U2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcDoKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6
ZGF0YSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldERhdGEpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL2J5dGVhcnJheXRlc3RkYXRhLmNwcDogQWRkZWQuCisgICAgICAg
IChCeXRlQXJyYXlUZXN0RGF0YTo6Qnl0ZUFycmF5VGVzdERhdGEpOgorICAgICAgICAoQnl0ZUFy
cmF5VGVzdERhdGE6Omlzbzg4NTkxZGF0YSk6CisgICAgICAgIChCeXRlQXJyYXlUZXN0RGF0YTo6
dXRmOGRhdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvYnl0ZWFycmF5dGVz
dGRhdGEuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0
cy9XZWJWaWV3L3RzdF9hcHBsaWNhdGlvblNjaGVtZS5xbWw6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwOgorICAgICAgICAobWFpbik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy90ZXN0cy5wcmk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0
d29ya1JlcGx5OjpzZXRSZXBseURhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvcXQvUXROZXR3
b3JrUmVwbHkuaDoKKwogMjAxMi0wMS0yNCAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0Bv
cGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBRdFdlYkljb25EYXRhYmFzZUNsaWVu
dCBsZWF2ZXMgYSBkYW5nbGluZyBwb2ludGVyIG9uIFdlYkljb25EYXRhYmFzZSBhZnRlciBpdHMg
ZGVzdHJ1Y3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdv
cmtSZXBseURhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5
RGF0YS5jcHAKaW5kZXggNjJlNTgwNy4uYWJjNDNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAKQEAgLTM5LDIxICszOSwxMyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogUXROZXR3b3JrUmVwbHlEYXRhOjpRdE5ldHdvcmtSZXBseURhdGEo
KQogICAgIDogbV9jb250ZW50TGVuZ3RoKDApCi0gICAgLCBtX2xhc3RNb2RpZmllZCgwKQogeyB9
CiAKIHZvaWQgUXROZXR3b3JrUmVwbHlEYXRhOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXItPmVuY29kZShtX3VybFN0cmluZyk7
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bShtX29wZXJhdGlvbik7Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlKG1fY29udGVudERpc3Bvc2l0aW9uKTsKICAgICBlbmNvZGVyLT5lbmNvZGUobV9jb250ZW50
VHlwZSk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fY29udGVudExlbmd0aCk7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlKG1fbG9jYXRpb24pOwotICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NCht
X2xhc3RNb2RpZmllZCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1fY29va2llKTsKLSAgICBlbmNv
ZGVyLT5lbmNvZGUobV91c2VyQWdlbnQpOwotICAgIGVuY29kZXItPmVuY29kZShtX3NlcnZlcik7
CiAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVwbHlVdWlkKTsKICAgICBlbmNvZGVyLT5lbmNvZGUo
bV9kYXRhSGFuZGxlKTsKIH0KQEAgLTYyLDI0ICs1NCwxMCBAQCBib29sIFF0TmV0d29ya1JlcGx5
RGF0YTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUXROZXR3b3Jr
UmVwbAogewogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fdXJsU3RyaW5n
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShk
ZXN0aW5hdGlvbi5tX29wZXJhdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2NvbnRlbnREaXNwb3NpdGlvbikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5t
X2NvbnRlbnRUeXBlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlVUludDY0KGRlc3RpbmF0aW9uLm1fY29udGVudExlbmd0aCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2xvY2F0aW9u
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0
KGRlc3RpbmF0aW9uLm1fbGFzdE1vZGlmaWVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fY29va2llKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fdXNlckFn
ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRl
c3RpbmF0aW9uLm1fc2VydmVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fcmVwbHlVdWlkKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fZGF0YUhhbmRsZSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRh
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmgKaW5kZXgg
YzM5YTQ4Zi4uZDE1NjViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0
TmV0d29ya1JlcGx5RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdv
cmtSZXBseURhdGEuaApAQCAtNDcsMTUgKzQ3LDggQEAgc3RydWN0IFF0TmV0d29ya1JlcGx5RGF0
YSB7CiAKICAgICBXVEY6OlN0cmluZyBtX3VybFN0cmluZzsKIAotICAgIFFOZXR3b3JrQWNjZXNz
TWFuYWdlcjo6T3BlcmF0aW9uIG1fb3BlcmF0aW9uOwotICAgIFdURjo6U3RyaW5nIG1fY29udGVu
dERpc3Bvc2l0aW9uOwogICAgIFdURjo6U3RyaW5nIG1fY29udGVudFR5cGU7CiAgICAgdWludDY0
X3QgbV9jb250ZW50TGVuZ3RoOwotICAgIFdURjo6U3RyaW5nIG1fbG9jYXRpb247Ci0gICAgdWlu
dDY0X3QgbV9sYXN0TW9kaWZpZWQ7Ci0gICAgV1RGOjpTdHJpbmcgbV9jb29raWU7Ci0gICAgV1RG
OjpTdHJpbmcgbV91c2VyQWdlbnQ7Ci0gICAgV1RGOjpTdHJpbmcgbV9zZXJ2ZXI7CiAgICAgU3Ry
aW5nIG1fcmVwbHlVdWlkOwogCiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgbV9kYXRhSGFuZGxl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3
b3JrcmVwbHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3
b3JrcmVwbHkuY3BwCmluZGV4IGM2OTQ4NmMuLmRmMjY5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAKQEAgLTQ2
LDg2ICs0NiwxNSBAQCB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudFR5cGUoY29u
c3QgUVN0cmluZyYgY29udGVudFR5cGUpCiAgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCku
bV9jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwogfQogCi1RTmV0d29ya0FjY2Vzc01hbmFnZXI6
Ok9wZXJhdGlvbiBRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fb3BlcmF0aW9uOwotfQotCi12b2lk
IFFRdWlja05ldHdvcmtSZXBseTo6c2V0T3BlcmF0aW9uKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6
T3BlcmF0aW9uIG9wZXJhdGlvbikKLXsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5t
X29wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLX0KLQotUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6
OmNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5
RGF0YS0+ZGF0YSgpLm1fY29udGVudERpc3Bvc2l0aW9uOwotfQotCi12b2lkIFFRdWlja05ldHdv
cmtSZXBseTo6c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFFTdHJpbmcmIGRpc3Bvc2l0aW9u
KQotewotICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fY29udGVudERpc3Bvc2l0aW9u
ID0gZGlzcG9zaXRpb247Ci19Ci0KLVFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpsb2NhdGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fbG9j
YXRpb247Ci19Ci0KLXZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRMb2NhdGlvbihjb25zdCBR
U3RyaW5nJiBsb2NhdGlvbikKLXsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2xv
Y2F0aW9uID0gbG9jYXRpb247Ci19Ci0KLVFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpsYXN0
TW9kaWZpZWQoKSBjb25zdAotewotICAgIHJldHVybiBRRGF0ZVRpbWU6OmZyb21NU2Vjc1NpbmNl
RXBvY2gobV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9sYXN0TW9kaWZpZWQpLnRvU3RyaW5n
KFF0OjpJU09EYXRlKTsKLX0KLQotdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldExhc3RNb2Rp
ZmllZChjb25zdCBRU3RyaW5nJiBsYXN0TW9kaWZpZWQpCi17Ci0gICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5kYXRhKCkubV9sYXN0TW9kaWZpZWQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcobGFzdE1v
ZGlmaWVkLCBRdDo6SVNPRGF0ZSkudG9NU2Vjc1NpbmNlRXBvY2goKTsKLX0KLQotUVN0cmluZyBR
UXVpY2tOZXR3b3JrUmVwbHk6OmNvb2tpZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV0d29y
a1JlcGx5RGF0YS0+ZGF0YSgpLm1fY29va2llOwotfQotCi12b2lkIFFRdWlja05ldHdvcmtSZXBs
eTo6c2V0Q29va2llKGNvbnN0IFFTdHJpbmcmIGNvb2tpZSkKLXsKLSAgICBtX25ldHdvcmtSZXBs
eURhdGEtPmRhdGEoKS5tX2Nvb2tpZSA9IGNvb2tpZTsKLX0KLQotUVN0cmluZyBRUXVpY2tOZXR3
b3JrUmVwbHk6OnVzZXJBZ2VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5
RGF0YS0+ZGF0YSgpLm1fdXNlckFnZW50OwotfQotCi12b2lkIFFRdWlja05ldHdvcmtSZXBseTo6
c2V0VXNlckFnZW50KGNvbnN0IFFTdHJpbmcmIHVzZXJBZ2VudCkKLXsKLSAgICBtX25ldHdvcmtS
ZXBseURhdGEtPmRhdGEoKS5tX3VzZXJBZ2VudCA9IHVzZXJBZ2VudDsKLX0KLQotUVN0cmluZyBR
UXVpY2tOZXR3b3JrUmVwbHk6OnNlcnZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV0d29y
a1JlcGx5RGF0YS0+ZGF0YSgpLm1fc2VydmVyOwotfQotCi12b2lkIFFRdWlja05ldHdvcmtSZXBs
eTo6c2V0U2VydmVyKGNvbnN0IFFTdHJpbmcmIHNlcnZlcikKLXsKLSAgICBtX25ldHdvcmtSZXBs
eURhdGEtPmRhdGEoKS5tX3NlcnZlciA9IHNlcnZlcjsKLX0KLQotUVN0cmluZyBRUXVpY2tOZXR3
b3JrUmVwbHk6OmRhdGEoKSBjb25zdAorUVZhcmlhbnQgUVF1aWNrTmV0d29ya1JlcGx5OjpkYXRh
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KQotICAgICAgICByZXR1cm4gUVN0
cmluZygpOworICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAotICAgIHVpbnQ2NF90IHN0cmlu
Z0xlbmd0aCA9IG1fZGF0YUxlbmd0aCAvIHNpemVvZihRQ2hhcik7Ci0gICAgcmV0dXJuIFFTdHJp
bmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkp
LCBzdHJpbmdMZW5ndGgpOworICAgIHJldHVybiBRVmFyaWFudChRQnl0ZUFycmF5Ojpmcm9tUmF3
RGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSksIG1f
ZGF0YUxlbmd0aCkpOwogfQogCi12b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0RGF0YShjb25z
dCBRU3RyaW5nJiBkYXRhKQordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldERhdGEoY29uc3Qg
UVZhcmlhbnQmIGRhdGEpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNl
dmVyYWwgdGltZXMuIEluIHRoaXMgY2FzZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgU2hhcmVk
TWVtb3J5CiAgICAgLy8gd2lsbCBiZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IGFuZCBuZXcgbWVt
b3J5IHdpbGwgYmUgYWxsb2NhdGVkLgpAQCAtMTM0LDE0ICs2MywyOCBAQCB2b2lkIFFRdWlja05l
dHdvcmtSZXBseTo6c2V0RGF0YShjb25zdCBRU3RyaW5nJiBkYXRhKQogICAgIGlmIChkYXRhLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1aW50NjRfdCBzbUxlbmd0aCA9IHNpemVv
ZihRQ2hhcikgKiBkYXRhLmxlbmd0aCgpOworICAgIHVpbnQ2NF90IHNtTGVuZ3RoID0gMDsKKyAg
ICBjb25zdCB2b2lkKiBwdHJEYXRhID0gMDsKKyAgICBRU3RyaW5nIHN0cmluZ0RhdGE7CisgICAg
UUJ5dGVBcnJheSBieXRlQXJyYXlEYXRhOworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBRVmFyaWFu
dDo6U3RyaW5nKSB7CisgICAgICAgIHN0cmluZ0RhdGEgPSBkYXRhLnRvU3RyaW5nKCk7CisgICAg
ICAgIHB0ckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihzdHJpbmdEYXRhLmNv
bnN0RGF0YSgpKTsKKyAgICAgICAgc21MZW5ndGggPSBzaXplb2YoUUNoYXIpICogc3RyaW5nRGF0
YS5sZW5ndGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWRhdGEuY2FuQ29udmVydDxR
Qnl0ZUFycmF5PigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBieXRlQXJyYXlEYXRh
ID0gZGF0YS50b0J5dGVBcnJheSgpOworICAgICAgICBwdHJEYXRhID0gYnl0ZUFycmF5RGF0YS5k
YXRhKCk7CisgICAgICAgIHNtTGVuZ3RoID0gYnl0ZUFycmF5RGF0YS5zaXplKCk7CisgICAgfQor
CiAgICAgbV9zaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzbUxlbmd0aCk7CiAg
ICAgaWYgKCFtX3NoYXJlZE1lbW9yeSkKICAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gVGhlIHNp
emUgb2YgdGhlIGFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5IGNhbiBiZSBiaWdnZXIgdGhhbiByZXF1
ZXN0ZWQuCiAgICAgLy8gVXN1YWxseSB0aGUgc2l6ZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhl
IG5leHQgbXVsdGlwbGUgb2YgYSBwYWdlIHNpemUuCi0gICAgbWVtY3B5KG1fc2hhcmVkTWVtb3J5
LT5kYXRhKCksIGRhdGEuY29uc3REYXRhKCksIHNtTGVuZ3RoKTsKKyAgICBtZW1jcHkobV9zaGFy
ZWRNZW1vcnktPmRhdGEoKSwgcHRyRGF0YSwgc21MZW5ndGgpOwogICAgIG1fZGF0YUxlbmd0aCA9
IHNtTGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmgKaW5kZXggNTllYjdmMi4uYTgwZDIyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlf
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3Jl
cGx5X3AuaApAQCAtMzMsMzAgKzMzLDE2IEBACiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tO
ZXR3b3JrUmVwbHkgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9PQkpFQ1QKICAgICBRX1BST1BF
UlRZKFFTdHJpbmcgY29udGVudFR5cGUgUkVBRCBjb250ZW50VHlwZSBXUklURSBzZXRDb250ZW50
VHlwZSkKLSAgICBRX1BST1BFUlRZKFFTdHJpbmcgZGF0YSBSRUFEIGRhdGEgV1JJVEUgc2V0RGF0
YSkKKyAgICBRX1BST1BFUlRZKFFWYXJpYW50IGRhdGEgUkVBRCBkYXRhIFdSSVRFIHNldERhdGEp
CiAgICAgUV9FTlVNUyhRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbikKIAogcHVibGlj
OgogICAgIFFRdWlja05ldHdvcmtSZXBseShRT2JqZWN0KiBwYXJlbnQpOwogICAgIFFTdHJpbmcg
Y29udGVudFR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldENvbnRlbnRUeXBlKGNvbnN0IFFTdHJp
bmcmKTsKLSAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24oKSBj
b25zdDsKLSAgICB2b2lkIHNldE9wZXJhdGlvbihRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJh
dGlvbik7Ci0gICAgUVN0cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKLSAgICB2b2lk
IHNldENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBRU3RyaW5nJik7Ci0gICAgUVN0cmluZyBsb2Nh
dGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgUVN0cmluZyYpOwotICAg
IFFTdHJpbmcgbGFzdE1vZGlmaWVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMYXN0TW9kaWZpZWQo
Y29uc3QgUVN0cmluZyYpOwotICAgIFFTdHJpbmcgY29va2llKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDb29raWUoY29uc3QgUVN0cmluZyYpOwotICAgIFFTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYpOwotICAgIFFTdHJpbmcgc2Vy
dmVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZXJ2ZXIoY29uc3QgUVN0cmluZyYpOwogCi0gICAg
UVN0cmluZyBkYXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRh
dGEpOworICAgIFFWYXJpYW50IGRhdGEoKSBjb25zdDsKKyAgICB2b2lkIHNldERhdGEoY29uc3Qg
UVZhcmlhbnQmIGRhdGEpOwogCiAgICAgV2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVz
dERhdGEqIG5ldHdvcmtSZXF1ZXN0RGF0YSgpIGNvbnN0OwogICAgIHZvaWQgc2V0TmV0d29ya1Jl
cXVlc3REYXRhKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1
ZXN0RGF0YT4gZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL2J5dGVhcnJheXRlc3RkYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvYnl0ZWFycmF5dGVzdGRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjEyMzA5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2J5dGVhcnJheXRlc3RkYXRhLmNwcApAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlICJieXRlYXJyYXl0ZXN0ZGF0YS5oIgor
CitCeXRlQXJyYXlUZXN0RGF0YTo6Qnl0ZUFycmF5VGVzdERhdGEoUU9iamVjdCogcGFyZW50KQor
ICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgLCBtX2lzbzg4NTlfMShRQnl0ZUFycmF5KCI8aHRt
bD48aGVhZD48dGl0bGU+dGhpcyBpcyBpc284ODU5LTEgY29udGVudDwvdGl0bGU+PC9oZWFkPjxi
b2R5PmNvbnRlbnQ8L2JvZHk+PC9odG1sPiIpKQorICAgICwgbV91dGY4KFFCeXRlQXJyYXkoUVN0
cmluZygiPGh0bWw+PGhlYWQ+PHRpdGxlPnRoaXMgaXMgdXRmLTggY29udGVudDwvdGl0bGU+PC9o
ZWFkPjxib2R5PmNvbnRlbnQ8L2JvZHk+PC9odG1sPiIpLnRvVXRmOCgpKSkKK3sKK30KKworUVZh
cmlhbnQgQnl0ZUFycmF5VGVzdERhdGE6Omlzbzg4NTkxZGF0YSgpCit7CisgICAgcmV0dXJuIFFW
YXJpYW50KG1faXNvODg1OV8xKTsKK30KKworUVZhcmlhbnQgQnl0ZUFycmF5VGVzdERhdGE6OnV0
ZjhkYXRhKCkKK3sKKyAgICByZXR1cm4gUVZhcmlhbnQobV91dGY4KTsKK30KKworI2luY2x1ZGUg
Im1vY19ieXRlYXJyYXl0ZXN0ZGF0YS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2J5dGVhcnJheXRlc3RkYXRhLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2J5dGVhcnJheXRlc3RkYXRhLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlOGNjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvYnl0ZWFycmF5dGVzdGRhdGEuaApAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBieXRlYXJyYXl0ZXN0ZGF0
YV9oCisjZGVmaW5lIGJ5dGVhcnJheXRlc3RkYXRhX2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9i
YWwuaCIKKyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVk
ZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIEJ5dGVBcnJh
eVRlc3REYXRhIDogcHVibGljIFFPYmplY3QgeworUV9PQkpFQ1QKK1FfUFJPUEVSVFkoUVZhcmlh
bnQgaXNvODg1OTFkYXRhIFJFQUQgaXNvODg1OTFkYXRhKQorUV9QUk9QRVJUWShRVmFyaWFudCB1
dGY4ZGF0YSBSRUFEIHV0ZjhkYXRhKQorCitwdWJsaWM6CisgICAgQnl0ZUFycmF5VGVzdERhdGEo
UU9iamVjdCogcGFyZW50ID0gMCk7CisgICAgUVZhcmlhbnQgaXNvODg1OTFkYXRhKCk7CisgICAg
UVZhcmlhbnQgdXRmOGRhdGEoKTsKKworcHJpdmF0ZToKKyAgICBRQnl0ZUFycmF5IG1faXNvODg1
OV8xOworICAgIFFCeXRlQXJyYXkgbV91dGY4OworfTsKKworUU1MX0RFQ0xBUkVfVFlQRShCeXRl
QXJyYXlUZXN0RGF0YSkKKworI2VuZGlmIC8vIGJ5dGVhcnJheXRlc3RkYXRhX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvV2ViVmll
dy90c3RfYXBwbGljYXRpb25TY2hlbWUucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xbWx0ZXN0cy9XZWJWaWV3L3RzdF9hcHBsaWNhdGlvblNjaGVtZS5xbWwKaW5k
ZXggMDk1YWIzMC4uZTRlYTIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9XZWJWaWV3L3RzdF9hcHBsaWNhdGlvblNjaGVtZS5xbWwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9XZWJW
aWV3L3RzdF9hcHBsaWNhdGlvblNjaGVtZS5xbWwKQEAgLTIsNiArMiw3IEBAIGltcG9ydCBRdFF1
aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKIGltcG9ydCBR
dFdlYktpdC5leHBlcmltZW50YWwgMy4wCitpbXBvcnQgVGVzdCAxLjAKIAogV2ViVmlldyB7CiAg
ICAgaWQ6IHdlYlZpZXcKQEAgLTQyLDcgKzQzLDIxIEBAIFdlYlZpZXcgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwbHkuZGF0YSA9ICI8aHRtbD48aGVhZD48dGl0bGU+U2hvdWxkIG5vdCBo
YXBwZW48L3RpdGxlPjwvaGVhZD48Ym9keT5BIHRlc3QgcGFnZS48L2JvZHk+PC9odG1sPiIKICAg
ICAgICAgICAgICAgICAgICAgcmVwbHkuc2VuZCgpCiAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIFVybFNjaGVtZURlbGVnYXRlIHsKKyAgICAgICAgICAgICAg
ICBzY2hlbWU6ICJzY2hlbWVDaGFyc2V0IgorICAgICAgICAgICAgICAgIG9uUmVjZWl2ZWRSZXF1
ZXN0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnVybCA9PSAic2NoZW1lY2hh
cnNldDovL2lzbzg4NTktMSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5LmRhdGEg
PSBieXRlQXJyYXlIZWxwZXIuaXNvODg1OTFkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBseS5jb250ZW50VHlwZSA9ICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSIKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LnVybCA9PSAic2NoZW1lY2hhcnNldDov
L3V0Zi04IikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHkuZGF0YSA9IGJ5dGVBcnJh
eUhlbHBlci51dGY4ZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHkuY29udGVudFR5
cGUgPSAidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IgorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHJlcGx5LnNlbmQoKQorICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KKwogICAgICAgICBdCiAgICAgfQogCkBAIC01Miw2ICs2NywxMCBAQCBXZWJWaWV3
IHsKICAgICAgICAgc2lnbmFsTmFtZTogInRpdGxlQ2hhbmdlZCIKICAgICB9CiAKKyAgICBCeXRl
QXJyYXlUZXN0RGF0YSB7CisgICAgICAgIGlkOiBieXRlQXJyYXlIZWxwZXIKKyAgICB9CisKICAg
ICBUZXN0Q2FzZSB7CiAgICAgICAgIG5hbWU6ICJXZWJWaWV3QXBwbGljYXRpb25TY2hlbWVzIgog
CkBAIC05Niw1ICsxMTUsMTkgQEAgV2ViVmlldyB7CiAKICAgICAgICAgICAgIGNvbXBhcmUoc3B5
VGl0bGUuY291bnQsIDIpCiAgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0X2NoYXJz
ZXRzKCkgeworICAgICAgICAgICAgc3B5VGl0bGUuY2xlYXIoKQorICAgICAgICAgICAgY29tcGFy
ZShzcHlUaXRsZS5jb3VudCwgMCkKKyAgICAgICAgICAgIHZhciB0ZXN0VXJsID0gInNjaGVtZUNo
YXJzZXQ6Ly9pc284ODU5LTEiCisgICAgICAgICAgICB3ZWJWaWV3LmxvYWQodGVzdFVybCkKKyAg
ICAgICAgICAgIHNweVRpdGxlLndhaXQoKQorICAgICAgICAgICAgY29tcGFyZSh3ZWJWaWV3LnRp
dGxlLCAidGhpcyBpcyBpc284ODU5LTEgY29udGVudCIpCisKKyAgICAgICAgICAgIHRlc3RVcmwg
PSAic2NoZW1lQ2hhcnNldDovL3V0Zi04IgorICAgICAgICAgICAgd2ViVmlldy5sb2FkKHRlc3RV
cmwpCisgICAgICAgICAgICBzcHlUaXRsZS53YWl0KCkKKyAgICAgICAgICAgIGNvbXBhcmUod2Vi
Vmlldy50aXRsZSwgInRoaXMgaXMgdXRmLTggY29udGVudCIpCisgICAgICAgIH0KICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL3RzdF9xbWx0ZXN0cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FtbHRlc3RzL3RzdF9xbWx0ZXN0cy5jcHAKaW5kZXggZThkOWFhYi4uOGM4YzRiMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90
c3RfcW1sdGVzdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvcW1sdGVzdHMvdHN0X3FtbHRlc3RzLmNwcApAQCAtMTcsNiArMTcsNyBAQAogICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogKi8KIAorI2luY2x1ZGUgIi4uL2J5dGVhcnJheXRlc3Rk
YXRhLmgiCiAjaW5jbHVkZSAiLi4vdXRpbC5oIgogCiAjaW5jbHVkZSA8UVZhckxlbmd0aEFycmF5
PgpAQCAtNDEsNSArNDIsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
Ly8gSW5zdGFudGlhdGUgUUFwcGxpY2F0aW9uIHRvIHByZXZlbnQgcXVpY2tfdGVzdF9tYWluIHRv
IGluc3RhbnRpYXRlIGEgUUd1aUFwcGxpY2F0aW9uLgogICAgIC8vIFRoaXMgY2FuIGJlIHJlbW92
ZWQgYXMgc29vbiBhcyB3ZSBkbyBub3QgdXNlIFF0V2lkZ2V0cyBhbnkgbW9yZS4KICAgICBRQXBw
bGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOworICAgIHFtbFJlZ2lzdGVyVHlwZTxCeXRlQXJyYXlU
ZXN0RGF0YT4oIlRlc3QiLCAxLCAwLCAiQnl0ZUFycmF5VGVzdERhdGEiKTsKICAgICByZXR1cm4g
cXVpY2tfdGVzdF9tYWluKGFyZ2MsIGFyZ3YsICJxbWx0ZXN0cyIsIDAsIFFVSUNLX1RFU1RfU09V
UkNFX0RJUik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3Rlc3RzLnByaSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
dGVzdHMucHJpCmluZGV4IDcxZTg3MTYuLjA2ZmYxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHMucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHMucHJpCkBAIC0zLDggKzMsMTEgQEAgVEVNUExB
VEUgPSBhcHAKIFZQQVRIICs9ICQkX1BST19GSUxFX1BXRF8KIFRBUkdFVCA9IHRzdF8kJFRBUkdF
VAogCitIRUFERVJTICs9IC4uL2J5dGVhcnJheXRlc3RkYXRhLmgKKwogU09VUkNFUyArPSAkJHtU
QVJHRVR9LmNwcCBcCi0gICAgICAgICAgIC4uL3V0aWwuY3BwCisgICAgICAgICAgIC4uL3V0aWwu
Y3BwIFwKKyAgICAgICAgICAgLi4vYnl0ZWFycmF5dGVzdGRhdGEuY3BwCiBJTkNMVURFUEFUSCAr
PSAkJFBXRAogCiBRVCArPSB0ZXN0bGliIGRlY2xhcmF0aXZlIHdpZGdldHMgcXVpY2sKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAKaW5kZXggOTkw
NDExMC4uYzcxZjEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9R
dE5ldHdvcmtSZXBseS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5l
dHdvcmtSZXBseS5jcHAKQEAgLTYyLDIyICs2Miw4IEBAIHZvaWQgUXROZXR3b3JrUmVwbHk6OnNl
dERhdGEoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgcWludDY0IGRhdGFTaXpl
CiAKIHZvaWQgUXROZXR3b3JrUmVwbHk6OnNldFJlcGx5RGF0YShjb25zdCBRdE5ldHdvcmtSZXBs
eURhdGEmIHJlcGx5RGF0YSkKIHsKLSAgICBpZiAocmVwbHlEYXRhLm1fb3BlcmF0aW9uKQotICAg
ICAgICBzZXRPcGVyYXRpb24ocmVwbHlEYXRhLm1fb3BlcmF0aW9uKTsKLSAgICBpZiAoIXJlcGx5
RGF0YS5tX2NvbnRlbnREaXNwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgc2V0SGVhZGVyKFFO
ZXR3b3JrUmVxdWVzdDo6Q29udGVudERpc3Bvc2l0aW9uSGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0
YS5tX2NvbnRlbnREaXNwb3NpdGlvbikpOwogICAgIGlmICghcmVwbHlEYXRhLm1fY29udGVudFR5
cGUuaXNOdWxsKCkpCiAgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRU
eXBlSGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5tX2NvbnRlbnRUeXBlKSk7Ci0gICAgaWYgKCFy
ZXBseURhdGEubV9sb2NhdGlvbi5pc051bGwoKSkKLSAgICAgICAgc2V0SGVhZGVyKFFOZXR3b3Jr
UmVxdWVzdDo6TG9jYXRpb25IZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1fbG9jYXRpb24pKTsK
LSAgICBpZiAocmVwbHlEYXRhLm1fbGFzdE1vZGlmaWVkKQotICAgICAgICBzZXRIZWFkZXIoUU5l
dHdvcmtSZXF1ZXN0OjpMYXN0TW9kaWZpZWRIZWFkZXIsIFFEYXRlVGltZTo6ZnJvbU1TZWNzU2lu
Y2VFcG9jaChyZXBseURhdGEubV9sYXN0TW9kaWZpZWQpKTsKLSAgICBpZiAoIXJlcGx5RGF0YS5t
X2Nvb2tpZS5pc051bGwoKSkKLSAgICAgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6U2V0
Q29va2llSGVhZGVyLCBRVmFyaWFudDo6ZnJvbVZhbHVlKFFOZXR3b3JrQ29va2llOjpwYXJzZUNv
b2tpZXMoUVN0cmluZyhyZXBseURhdGEubV9jb29raWUpLnRvQXNjaWkoKSkpKTsKLSAgICBpZiAo
IXJlcGx5RGF0YS5tX3VzZXJBZ2VudC5pc051bGwoKSkKLSAgICAgICAgc2V0SGVhZGVyKFFOZXR3
b3JrUmVxdWVzdDo6VXNlckFnZW50SGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5tX3VzZXJBZ2Vu
dCkpOwotICAgIGlmICghcmVwbHlEYXRhLm1fc2VydmVyLmlzTnVsbCgpKQotICAgICAgICBzZXRI
ZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpTZXJ2ZXJIZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1f
c2VydmVyKSk7CiAgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudExlbmd0aEhl
YWRlciwgUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXBseURhdGEubV9jb250ZW50TGVuZ3RoKSk7CiAg
ICAgc2V0RGF0YShyZXBseURhdGEubV9kYXRhSGFuZGxlLCByZXBseURhdGEubV9jb250ZW50TGVu
Z3RoKTsKIH0KQEAgLTEwMCwxMSArODYsNiBAQCBxaW50NjQgUXROZXR3b3JrUmVwbHk6OmJ5dGVz
QXZhaWxhYmxlKCkgY29uc3QKICAgICByZXR1cm4gbV9ieXRlc0F2YWlsYWJsZSArIFFOZXR3b3Jr
UmVwbHk6OmJ5dGVzQXZhaWxhYmxlKCk7CiB9CiAKLXZvaWQgUXROZXR3b3JrUmVwbHk6OnNldEhl
YWRlcihRTmV0d29ya1JlcXVlc3Q6Oktub3duSGVhZGVycyBoZWFkZXIsIGNvbnN0IFFWYXJpYW50
ICZ2YWx1ZSkKLXsKLSAgICBRTmV0d29ya1JlcGx5OjpzZXRIZWFkZXIoaGVhZGVyLCB2YWx1ZSk7
Ci19Ci0KIHZvaWQgUXROZXR3b3JrUmVwbHk6OmFib3J0KCkgeyB9CiB2b2lkIFF0TmV0d29ya1Jl
cGx5OjpjbG9zZSgpIHsgfQogdm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0UmVhZEJ1ZmZlclNpemUo
cWludDY0IHNpemUpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9x
dC9RdE5ldHdvcmtSZXBseS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdv
cmtSZXBseS5oCmluZGV4IDhjZWI3OTIuLmQzMmM4MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmgKQEAgLTQyLDEyICs0MiwxMiBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHFpbnQ2NCByZWFkRGF0YShjaGFyICpkYXRhLCBxaW50NjQgbWF4bGVu
KTsKICAgICB2aXJ0dWFsIHFpbnQ2NCBieXRlc0F2YWlsYWJsZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6S25vd25IZWFkZXJzLCBjb25zdCBRVmFyaWFudCAm
dmFsdWUpOwotICAgIHZvaWQgc2V0RGF0YShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHFp
bnQ2NCBkYXRhU2l6ZSk7CiAgICAgdm9pZCBzZXRSZXBseURhdGEoY29uc3QgUXROZXR3b3JrUmVw
bHlEYXRhJik7CiAgICAgdm9pZCBmaW5hbGl6ZSgpOwogCiBwcm90ZWN0ZWQ6CisgICAgdm9pZCBz
ZXREYXRhKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiwgcWludDY0IGRhdGFTaXplKTsKKwog
ICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRSZWFkQnVmZmVyU2l6ZShxaW50NjQpOwpAQCAtNTUsNyArNTUsNiBA
QCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgcWludDY0IG1fYnl0ZXNBdmFpbGFibGU7Ci0g
ICAgUUJ5dGVBcnJheSBtX2J1ZmZlcjsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJl
ZE1lbW9yeTsKICAgICBxaW50NjQgbV9zaGFyZWRNZW1vcnlTaXplOwogfTsK
</data>
<flag name="review"
          id="125080"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124091</attachid>
            <date>2012-01-26 03:13:51 -0800</date>
            <delta_ts>2012-01-26 04:28:16 -0800</delta_ts>
            <desc>patch for review. - updated as commented previously.</desc>
            <filename>77007_20120126-121009.patch</filename>
            <type>text/plain</type>
            <size>22333</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2NDAxNGI1Li5mMzdmZGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDEtMjYgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIFVzZSBRVmFyaWFudCBmb3IgcGF5bG9hZCBkYXRhIGluIGFwcGxpY2F0aW9u
IFVSTCBzY2hlbWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzcwMDcKKworICAgICAgICBNYWtlIGFwcGxpY2F0aW9uIHNjaGVtZXMgdXNlIFFWYXJp
YW50IGZvciBwYXlsb2FkIGRhdGEuCisgICAgICAgIFRoaXMgYWxsb3dzIHBhc3NpbmcgUUJ5dGVB
cnJheXMgYXMgd2VsbCBhcyBzaW1wbGUgU3RyaW5nIGRhdGEuCisKKyAgICAgICAgUmVtb3ZlIHVu
bmVlZGVkIGh0dHAgaGVhZGVyIHBhcnRzIHRoYXQgd2VyZSBleHBvc2VkIGluCisgICAgICAgIFFR
dWlja05ldHdvcmtSZXBseS4KKworICAgICAgICBBZGQgQnl0ZUFycmF5VGVzdERhdGEgY2xhc3Mg
dG8gYWxsb3cgaW5qZWN0aW5nIFFCeXRlQXJyYXkKKyAgICAgICAgZGF0YSBpbnRvIGFuIGFwcGxp
Y2F0aW9uIHNjaGVtZSBoYW5kbGVyIGZvciB0ZXN0aW5nLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0
YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YTo6UXROZXR3b3JrUmVw
bHlEYXRhKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhOjplbmNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE6OmRlY29kZSk6CisgICAgICAgICog
U2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcDoKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6
UVF1aWNrTmV0d29ya1JlcGx5KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6ZGF0YSk6
CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldERhdGEpOgorICAgICAgICAoUVF1aWNr
TmV0d29ya1JlcGx5OjpzZW5kKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja25l
dHdvcmtyZXBseV9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9ieXRlYXJy
YXl0ZXN0ZGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoQnl0ZUFycmF5VGVzdERhdGE6OkJ5dGVB
cnJheVRlc3REYXRhKToKKyAgICAgICAgKEJ5dGVBcnJheVRlc3REYXRhOjpsYXRpbjFEYXRhKToK
KyAgICAgICAgKEJ5dGVBcnJheVRlc3REYXRhOjp1dGY4RGF0YSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9ieXRlYXJyYXl0ZXN0ZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1dlYlZpZXcvdHN0X2FwcGxpY2F0aW9uU2No
ZW1lLnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3RzdF9x
bWx0ZXN0cy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3Rlc3RzLnByaToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnNldFJlcGx5RGF0YSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5oOgorCiAyMDEyLTAxLTI0ICBS
YWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0
XVtXSzJdIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50IGxlYXZlcyBhIGRhbmdsaW5nIHBvaW50ZXIg
b24gV2ViSWNvbkRhdGFiYXNlIGFmdGVyIGl0cyBkZXN0cnVjdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmNwcAppbmRleCA2MmU1ODA3Li5hYmM0
M2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRh
LmNwcApAQCAtMzksMjEgKzM5LDEzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBRdE5ldHdvcmtS
ZXBseURhdGE6OlF0TmV0d29ya1JlcGx5RGF0YSgpCiAgICAgOiBtX2NvbnRlbnRMZW5ndGgoMCkK
LSAgICAsIG1fbGFzdE1vZGlmaWVkKDApCiB7IH0KIAogdm9pZCBRdE5ldHdvcmtSZXBseURhdGE6
OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAg
ZW5jb2Rlci0+ZW5jb2RlKG1fdXJsU3RyaW5nKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKG1f
b3BlcmF0aW9uKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUobV9jb250ZW50RGlzcG9zaXRpb24pOwog
ICAgIGVuY29kZXItPmVuY29kZShtX2NvbnRlbnRUeXBlKTsKICAgICBlbmNvZGVyLT5lbmNvZGVV
SW50NjQobV9jb250ZW50TGVuZ3RoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUobV9sb2NhdGlvbik7
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fbGFzdE1vZGlmaWVkKTsKLSAgICBlbmNvZGVy
LT5lbmNvZGUobV9jb29raWUpOwotICAgIGVuY29kZXItPmVuY29kZShtX3VzZXJBZ2VudCk7Ci0g
ICAgZW5jb2Rlci0+ZW5jb2RlKG1fc2VydmVyKTsKICAgICBlbmNvZGVyLT5lbmNvZGUobV9yZXBs
eVV1aWQpOwogICAgIGVuY29kZXItPmVuY29kZShtX2RhdGFIYW5kbGUpOwogfQpAQCAtNjIsMjQg
KzU0LDEwIEBAIGJvb2wgUXROZXR3b3JrUmVwbHlEYXRhOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiBkZWNvZGVyLCBRdE5ldHdvcmtSZXBsCiB7CiAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoZGVzdGluYXRpb24ubV91cmxTdHJpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKGRlc3RpbmF0aW9uLm1fb3BlcmF0aW9uKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9u
Lm1fY29udGVudERpc3Bvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fY29udGVudFR5cGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoZGVzdGluYXRpb24ubV9j
b250ZW50TGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKGRlc3RpbmF0aW9uLm1fbG9jYXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoZGVzdGluYXRpb24ubV9sYXN0TW9kaWZpZWQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGlu
YXRpb24ubV9jb29raWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoZGVzdGluYXRpb24ubV91c2VyQWdlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9zZXJ2ZXIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9y
ZXBseVV1aWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoZGVzdGluYXRpb24ubV9kYXRhSGFuZGxlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9x
dC9RdE5ldHdvcmtSZXBseURhdGEuaAppbmRleCBjMzlhNDhmLi5kMTU2NWJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oCkBAIC00NywxNSArNDcs
OCBAQCBzdHJ1Y3QgUXROZXR3b3JrUmVwbHlEYXRhIHsKIAogICAgIFdURjo6U3RyaW5nIG1fdXJs
U3RyaW5nOwogCi0gICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gbV9vcGVyYXRp
b247Ci0gICAgV1RGOjpTdHJpbmcgbV9jb250ZW50RGlzcG9zaXRpb247CiAgICAgV1RGOjpTdHJp
bmcgbV9jb250ZW50VHlwZTsKICAgICB1aW50NjRfdCBtX2NvbnRlbnRMZW5ndGg7Ci0gICAgV1RG
OjpTdHJpbmcgbV9sb2NhdGlvbjsKLSAgICB1aW50NjRfdCBtX2xhc3RNb2RpZmllZDsKLSAgICBX
VEY6OlN0cmluZyBtX2Nvb2tpZTsKLSAgICBXVEY6OlN0cmluZyBtX3VzZXJBZ2VudDsKLSAgICBX
VEY6OlN0cmluZyBtX3NlcnZlcjsKICAgICBTdHJpbmcgbV9yZXBseVV1aWQ7CiAKICAgICBTaGFy
ZWRNZW1vcnk6OkhhbmRsZSBtX2RhdGFIYW5kbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAKaW5kZXggYzY5NDg2Yy4u
NGJlYTY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2tuZXR3b3JrcmVwbHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrbmV0d29ya3JlcGx5LmNwcApAQCAtMzEsNyArMzEsNiBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogUVF1aWNrTmV0d29ya1JlcGx5OjpRUXVpY2tOZXR3b3JrUmVwbHkoUU9iamVjdCog
cGFyZW50KQogICAgIDogUU9iamVjdChwYXJlbnQpCiAgICAgLCBtX25ldHdvcmtSZXBseURhdGEo
YWRvcHRSZWYobmV3IFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcGx5RGF0YSkpCi0gICAg
LCBtX2RhdGFMZW5ndGgoMCkKIHsKICAgICBRX0FTU0VSVChwYXJlbnQpOwogfQpAQCAtNDYsMTE4
ICs0NSw1NCBAQCB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudFR5cGUoY29uc3Qg
UVN0cmluZyYgY29udGVudFR5cGUpCiAgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9j
b250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwogfQogCi1RTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9w
ZXJhdGlvbiBRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbigpIGNvbnN0CitRVmFyaWFudCBR
UXVpY2tOZXR3b3JrUmVwbHk6OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX25ldHdvcmtS
ZXBseURhdGEtPmRhdGEoKS5tX29wZXJhdGlvbjsKKyAgICByZXR1cm4gbV9kYXRhOwogfQogCi12
b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0T3BlcmF0aW9uKFFOZXR3b3JrQWNjZXNzTWFuYWdl
cjo6T3BlcmF0aW9uIG9wZXJhdGlvbikKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXREYXRh
KGNvbnN0IFFWYXJpYW50JiBkYXRhKQogewotICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgp
Lm1fb3BlcmF0aW9uID0gb3BlcmF0aW9uOworICAgIG1fZGF0YSA9IGRhdGE7CiB9CiAKLVFTdHJp
bmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2NvbnRlbnREaXNwb3NpdGlvbjsK
LX0KLQotdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENvbnRlbnREaXNwb3NpdGlvbihjb25z
dCBRU3RyaW5nJiBkaXNwb3NpdGlvbikKLXsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEo
KS5tX2NvbnRlbnREaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uOwotfQotCi1RU3RyaW5nIFFRdWlj
a05ldHdvcmtSZXBseTo6bG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX25ldHdvcmtS
ZXBseURhdGEtPmRhdGEoKS5tX2xvY2F0aW9uOwotfQotCi12b2lkIFFRdWlja05ldHdvcmtSZXBs
eTo6c2V0TG9jYXRpb24oY29uc3QgUVN0cmluZyYgbG9jYXRpb24pCi17Ci0gICAgbV9uZXR3b3Jr
UmVwbHlEYXRhLT5kYXRhKCkubV9sb2NhdGlvbiA9IGxvY2F0aW9uOwotfQotCi1RU3RyaW5nIFFR
dWlja05ldHdvcmtSZXBseTo6bGFzdE1vZGlmaWVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUURh
dGVUaW1lOjpmcm9tTVNlY3NTaW5jZUVwb2NoKG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1f
bGFzdE1vZGlmaWVkKS50b1N0cmluZyhRdDo6SVNPRGF0ZSk7Ci19Ci0KLXZvaWQgUVF1aWNrTmV0
d29ya1JlcGx5OjpzZXRMYXN0TW9kaWZpZWQoY29uc3QgUVN0cmluZyYgbGFzdE1vZGlmaWVkKQot
ewotICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fbGFzdE1vZGlmaWVkID0gUURhdGVU
aW1lOjpmcm9tU3RyaW5nKGxhc3RNb2RpZmllZCwgUXQ6OklTT0RhdGUpLnRvTVNlY3NTaW5jZUVw
b2NoKCk7Ci19Ci0KLVFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpjb29raWUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2Nvb2tpZTsKLX0KLQot
dm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENvb2tpZShjb25zdCBRU3RyaW5nJiBjb29raWUp
Ci17Ci0gICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9jb29raWUgPSBjb29raWU7Ci19
Ci0KLVFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojp1c2VyQWdlbnQoKSBjb25zdAotewotICAg
IHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX3VzZXJBZ2VudDsKLX0KLQotdm9p
ZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFVzZXJBZ2VudChjb25zdCBRU3RyaW5nJiB1c2VyQWdl
bnQpCi17Ci0gICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV91c2VyQWdlbnQgPSB1c2Vy
QWdlbnQ7Ci19Ci0KLVFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXJ2ZXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX3NlcnZlcjsKLX0KLQot
dm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFNlcnZlcihjb25zdCBRU3RyaW5nJiBzZXJ2ZXIp
Ci17Ci0gICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9zZXJ2ZXIgPSBzZXJ2ZXI7Ci19
Ci0KLVFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpkYXRhKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fc2hhcmVkTWVtb3J5KQotICAgICAgICByZXR1cm4gUVN0cmluZygpOwotCi0gICAgdWludDY0
X3Qgc3RyaW5nTGVuZ3RoID0gbV9kYXRhTGVuZ3RoIC8gc2l6ZW9mKFFDaGFyKTsKLSAgICByZXR1
cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4obV9zaGFyZWRNZW1vcnkt
PmRhdGEoKSksIHN0cmluZ0xlbmd0aCk7Ci19Ci0KLXZvaWQgUVF1aWNrTmV0d29ya1JlcGx5Ojpz
ZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRhdGEpCit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2Vu
ZCgpCiB7Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMu
IEluIHRoaXMgY2FzZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgU2hhcmVkTWVtb3J5Ci0gICAg
Ly8gd2lsbCBiZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IGFuZCBuZXcgbWVtb3J5IHdpbGwgYmUg
YWxsb2NhdGVkLgotICAgIG1fZGF0YUxlbmd0aCA9IDA7Ci0KLSAgICBpZiAoZGF0YS5pc051bGwo
KSkKKyAgICBpZiAobV9kYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1aW50
NjRfdCBzbUxlbmd0aCA9IHNpemVvZihRQ2hhcikgKiBkYXRhLmxlbmd0aCgpOwotICAgIG1fc2hh
cmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc21MZW5ndGgpOwotICAgIGlmICghbV9z
aGFyZWRNZW1vcnkpCisgICAgdWludDY0X3Qgc21MZW5ndGggPSAwOworICAgIGNvbnN0IHZvaWQq
IHB0ckRhdGEgPSAwOworICAgIFFTdHJpbmcgc3RyaW5nRGF0YTsKKyAgICBRQnl0ZUFycmF5IGJ5
dGVBcnJheURhdGE7CisgICAgaWYgKG1fZGF0YS50eXBlKCkgPT0gUVZhcmlhbnQ6OlN0cmluZykg
eworICAgICAgICBzdHJpbmdEYXRhID0gbV9kYXRhLnRvU3RyaW5nKCk7CisgICAgICAgIHB0ckRh
dGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihzdHJpbmdEYXRhLmNvbnN0RGF0YSgp
KTsKKyAgICAgICAgc21MZW5ndGggPSBzaXplb2YoUUNoYXIpICogc3RyaW5nRGF0YS5sZW5ndGgo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1fZGF0YS5jYW5Db252ZXJ0PFFCeXRlQXJy
YXk+KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJ5dGVBcnJheURhdGEgPSBtX2Rh
dGEudG9CeXRlQXJyYXkoKTsKKyAgICAgICAgcHRyRGF0YSA9IGJ5dGVBcnJheURhdGEuZGF0YSgp
OworICAgICAgICBzbUxlbmd0aCA9IGJ5dGVBcnJheURhdGEuc2l6ZSgpOworICAgIH0KKworICAg
IFdURjo6UmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFyZWRN
ZW1vcnk6OmNyZWF0ZShzbUxlbmd0aCk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnkpCiAgICAgICAg
IHJldHVybjsKLQogICAgIC8vIFRoZSBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgc2hhcmVkIG1lbW9y
eSBjYW4gYmUgYmlnZ2VyIHRoYW4gcmVxdWVzdGVkLgogICAgIC8vIFVzdWFsbHkgdGhlIHNpemUg
d2lsbCBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIGEgcGFnZSBzaXplLgot
ICAgIG1lbWNweShtX3NoYXJlZE1lbW9yeS0+ZGF0YSgpLCBkYXRhLmNvbnN0RGF0YSgpLCBzbUxl
bmd0aCk7Ci0gICAgbV9kYXRhTGVuZ3RoID0gc21MZW5ndGg7Ci19Ci0KLXZvaWQgUVF1aWNrTmV0
d29ya1JlcGx5OjpzZW5kKCkKLXsKLSAgICBpZiAoIW1fc2hhcmVkTWVtb3J5IHx8ICFtX3NoYXJl
ZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fZGF0YUhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX25l
dHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2NvbnRlbnRMZW5ndGggPSBtX2RhdGFMZW5ndGg7Ci0K
LSAgICBRT2JqZWN0KiBzY2hlbWVQYXJlbnQgPSBwYXJlbnQoKS0+cGFyZW50KCk7Ci0gICAgaWYg
KCFzY2hlbWVQYXJlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBRUXVpY2tXZWJWaWV3RXhwZXJp
bWVudGFsKiB3ZWJWaWV3RXhwZXJpbWVudGFsID0gcW9iamVjdF9jYXN0PFFRdWlja1dlYlZpZXdF
eHBlcmltZW50YWwqPihzY2hlbWVQYXJlbnQtPnBhcmVudCgpKTsKLSAgICBpZiAoIXdlYlZpZXdF
eHBlcmltZW50YWwpCi0gICAgICAgIHJldHVybjsKLSAgICB3ZWJWaWV3RXhwZXJpbWVudGFsLT5z
ZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSh0aGlzKTsKKyAgICBtZW1jcHkoc2hhcmVkTWVtb3J5
LT5kYXRhKCksIHB0ckRhdGEsIHNtTGVuZ3RoKTsKKworICAgIGlmIChzaGFyZWRNZW1vcnktPmNy
ZWF0ZUhhbmRsZShtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2RhdGFIYW5kbGUsIFNoYXJl
ZE1lbW9yeTo6UmVhZE9ubHkpKSB7CisgICAgICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgp
Lm1fY29udGVudExlbmd0aCA9IHNtTGVuZ3RoOworCisgICAgICAgIFFPYmplY3QqIHNjaGVtZVBh
cmVudCA9IHBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHNjaGVtZVBhcmVudCkgewor
ICAgICAgICAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCogd2ViVmlld0V4cGVyaW1lbnRh
bCA9IHFvYmplY3RfY2FzdDxRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKj4oc2NoZW1lUGFyZW50
LT5wYXJlbnQoKSk7CisgICAgICAgICAgICBpZiAod2ViVmlld0V4cGVyaW1lbnRhbCkKKyAgICAg
ICAgICAgICAgICB3ZWJWaWV3RXhwZXJpbWVudGFsLT5zZW5kQXBwbGljYXRpb25TY2hlbWVSZXBs
eSh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIEFmdGVyIHNlbmRpbmcgdGhlIHJl
cGx5IGRhdGEsIHdlIGhhdmUgdG8gcmVpbml0aWFsaXplIHRoZSBtX25ldHdvcmtSZXBseURhdGEs
CiAgICAgLy8gdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBmcmVzaCBTaGFyZXNNZW1vcnk6OkhhbmRs
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0
d29ya3JlcGx5X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0
d29ya3JlcGx5X3AuaAppbmRleCA1OWViN2YyLi43MTNmNGU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oCkBAIC0z
MywzMCArMzMsMTYgQEAKIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja05ldHdvcmtSZXBseSA6
IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogICAgIFFfUFJPUEVSVFkoUVN0cmluZyBj
b250ZW50VHlwZSBSRUFEIGNvbnRlbnRUeXBlIFdSSVRFIHNldENvbnRlbnRUeXBlKQotICAgIFFf
UFJPUEVSVFkoUVN0cmluZyBkYXRhIFJFQUQgZGF0YSBXUklURSBzZXREYXRhKQorICAgIFFfUFJP
UEVSVFkoUVZhcmlhbnQgZGF0YSBSRUFEIGRhdGEgV1JJVEUgc2V0RGF0YSkKICAgICBRX0VOVU1T
KFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uKQogCiBwdWJsaWM6CiAgICAgUVF1aWNr
TmV0d29ya1JlcGx5KFFPYmplY3QqIHBhcmVudCk7CiAgICAgUVN0cmluZyBjb250ZW50VHlwZSgp
IGNvbnN0OwogICAgIHZvaWQgc2V0Q29udGVudFR5cGUoY29uc3QgUVN0cmluZyYpOwotICAgIFFO
ZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wZXJhdGlvbigpIGNvbnN0OwotICAgIHZv
aWQgc2V0T3BlcmF0aW9uKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uKTsKLSAgICBR
U3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVudERp
c3Bvc2l0aW9uKGNvbnN0IFFTdHJpbmcmKTsKLSAgICBRU3RyaW5nIGxvY2F0aW9uKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBRU3RyaW5nJik7Ci0gICAgUVN0cmluZyBsYXN0
TW9kaWZpZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldExhc3RNb2RpZmllZChjb25zdCBRU3RyaW5n
Jik7Ci0gICAgUVN0cmluZyBjb29raWUoKSBjb25zdDsKLSAgICB2b2lkIHNldENvb2tpZShjb25z
dCBRU3RyaW5nJik7Ci0gICAgUVN0cmluZyB1c2VyQWdlbnQoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFVzZXJBZ2VudChjb25zdCBRU3RyaW5nJik7Ci0gICAgUVN0cmluZyBzZXJ2ZXIoKSBjb25zdDsK
LSAgICB2b2lkIHNldFNlcnZlcihjb25zdCBRU3RyaW5nJik7CiAKLSAgICBRU3RyaW5nIGRhdGEo
KSBjb25zdDsKLSAgICB2b2lkIHNldERhdGEoY29uc3QgUVN0cmluZyYgZGF0YSk7CisgICAgUVZh
cmlhbnQgZGF0YSgpIGNvbnN0OworICAgIHZvaWQgc2V0RGF0YShjb25zdCBRVmFyaWFudCYgZGF0
YSk7CiAKICAgICBXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YSogbmV0d29y
a1JlcXVlc3REYXRhKCkgY29uc3Q7CiAgICAgdm9pZCBzZXROZXR3b3JrUmVxdWVzdERhdGEoV1RG
OjpQYXNzUmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiBkYXRh
KTsKQEAgLTY4LDggKzU0LDcgQEAgcHVibGljIFFfU0xPVFM6CiBwcml2YXRlOgogICAgIFdURjo6
UmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiBtX25ldHdvcmtS
ZXF1ZXN0RGF0YTsKICAgICBXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtS
ZXBseURhdGE+IG1fbmV0d29ya1JlcGx5RGF0YTsKLSAgICBXVEY6OlJlZlB0cjxXZWJLaXQ6OlNo
YXJlZE1lbW9yeT4gbV9zaGFyZWRNZW1vcnk7Ci0gICAgdWludDY0X3QgbV9kYXRhTGVuZ3RoOwor
ICAgIFFWYXJpYW50IG1fZGF0YTsKIH07CiAKIFFNTF9ERUNMQVJFX1RZUEUoUVF1aWNrTmV0d29y
a1JlcGx5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0
cy9ieXRlYXJyYXl0ZXN0ZGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL2J5dGVhcnJheXRlc3RkYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lMGMyYzI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9ieXRlYXJyYXl0ZXN0ZGF0YS5jcHAKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisjaW5jbHVkZSAiYnl0ZWFycmF5dGVzdGRhdGEuaCIKKworQnl0ZUFy
cmF5VGVzdERhdGE6OkJ5dGVBcnJheVRlc3REYXRhKFFPYmplY3QqIHBhcmVudCkKKyAgICA6IFFP
YmplY3QocGFyZW50KQoreworICAgIFFTdHJpbmcgdGV4dCA9IFFTdHJpbmdMaXRlcmFsKCI8aHRt
bD48aGVhZD48dGl0bGU+dGl0bGUgd2l0aCBjb3B5cmlnaHQgJTE8L3RpdGxlPjwvaGVhZD48Ym9k
eT5jb250ZW50PC9ib2R5PjwvaHRtbD4iKTsKKyAgICB0ZXh0ID0gdGV4dC5hcmcoUUNoYXI6OmZy
b21MYXRpbjEoMTY5KSk7CisKKyAgICBtX2xhdGluMURhdGEgPSB0ZXh0LnRvTGF0aW4xKCk7Cisg
ICAgbV91dGY4RGF0YSA9IHRleHQudG9VdGY4KCk7CisKKyAgICBRX0FTU0VSVChtX2xhdGluMURh
dGEgIT0gbV91dGY4RGF0YSk7Cit9CisKK1FWYXJpYW50IEJ5dGVBcnJheVRlc3REYXRhOjpsYXRp
bjFEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVZhcmlhbnQobV9sYXRpbjFEYXRhKTsKK30K
KworUVZhcmlhbnQgQnl0ZUFycmF5VGVzdERhdGE6OnV0ZjhEYXRhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gUVZhcmlhbnQobV91dGY4RGF0YSk7Cit9CisKKyNpbmNsdWRlICJtb2NfYnl0ZWFycmF5
dGVzdGRhdGEuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9ieXRlYXJyYXl0ZXN0ZGF0YS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9ieXRlYXJyYXl0ZXN0ZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjcxNzBmNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL2J5dGVhcnJheXRlc3RkYXRhLmgKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgYnl0ZWFycmF5dGVzdGRhdGFfaAorI2RlZmluZSBi
eXRlYXJyYXl0ZXN0ZGF0YV9oCisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVk
ZSA8UUJ5dGVBcnJheT4KKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFF0UXVpY2svcXF1
aWNraXRlbS5oPgorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBCeXRlQXJyYXlUZXN0RGF0YSA6IHB1
YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoUVZhcmlhbnQgbGF0
aW4xRGF0YSBSRUFEIGxhdGluMURhdGEpCisgICAgUV9QUk9QRVJUWShRVmFyaWFudCB1dGY4RGF0
YSBSRUFEIHV0ZjhEYXRhKQorCitwdWJsaWM6CisgICAgQnl0ZUFycmF5VGVzdERhdGEoUU9iamVj
dCogcGFyZW50ID0gMCk7CisgICAgUVZhcmlhbnQgbGF0aW4xRGF0YSgpIGNvbnN0OworICAgIFFW
YXJpYW50IHV0ZjhEYXRhKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUUJ5dGVBcnJheSBtX2xh
dGluMURhdGE7CisgICAgUUJ5dGVBcnJheSBtX3V0ZjhEYXRhOworfTsKKworUU1MX0RFQ0xBUkVf
VFlQRShCeXRlQXJyYXlUZXN0RGF0YSkKKworI2VuZGlmIC8vIGJ5dGVhcnJheXRlc3RkYXRhX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvV2ViVmlldy90c3RfYXBwbGljYXRpb25TY2hlbWUucW1sIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9XZWJWaWV3L3RzdF9hcHBsaWNhdGlvblNjaGVt
ZS5xbWwKaW5kZXggMDk1YWIzMC4uMjM5NDgzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9XZWJWaWV3L3RzdF9hcHBsaWNhdGlvblNj
aGVtZS5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0
ZXN0cy9XZWJWaWV3L3RzdF9hcHBsaWNhdGlvblNjaGVtZS5xbWwKQEAgLTIsNiArMiw3IEBAIGlt
cG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAK
IGltcG9ydCBRdFdlYktpdC5leHBlcmltZW50YWwgMy4wCitpbXBvcnQgVGVzdCAxLjAKIAogV2Vi
VmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKQEAgLTQyLDcgKzQzLDIxIEBAIFdlYlZpZXcgewogICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwbHkuZGF0YSA9ICI8aHRtbD48aGVhZD48dGl0bGU+U2hv
dWxkIG5vdCBoYXBwZW48L3RpdGxlPjwvaGVhZD48Ym9keT5BIHRlc3QgcGFnZS48L2JvZHk+PC9o
dG1sPiIKICAgICAgICAgICAgICAgICAgICAgcmVwbHkuc2VuZCgpCiAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFVybFNjaGVtZURlbGVnYXRlIHsKKyAgICAg
ICAgICAgICAgICBzY2hlbWU6ICJzY2hlbWVDaGFyc2V0IgorICAgICAgICAgICAgICAgIG9uUmVj
ZWl2ZWRSZXF1ZXN0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnVybCA9PSAi
c2NoZW1lY2hhcnNldDovL2xhdGluMSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5
LmRhdGEgPSBieXRlQXJyYXlIZWxwZXIubGF0aW4xRGF0YQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwbHkuY29udGVudFR5cGUgPSAidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiCisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVxdWVzdC51cmwgPT0gInNjaGVtZWNoYXJz
ZXQ6Ly91dGYtOCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5LmRhdGEgPSBieXRl
QXJyYXlIZWxwZXIudXRmOERhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5LmNvbnRl
bnRUeXBlID0gInRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICByZXBseS5zZW5kKCkKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgXQogICAgIH0KIApAQCAtNTIsNiArNjcsMTAgQEAgV2Vi
VmlldyB7CiAgICAgICAgIHNpZ25hbE5hbWU6ICJ0aXRsZUNoYW5nZWQiCiAgICAgfQogCisgICAg
Qnl0ZUFycmF5VGVzdERhdGEgeworICAgICAgICBpZDogYnl0ZUFycmF5SGVscGVyCisgICAgfQor
CiAgICAgVGVzdENhc2UgewogICAgICAgICBuYW1lOiAiV2ViVmlld0FwcGxpY2F0aW9uU2NoZW1l
cyIKIApAQCAtOTYsNSArMTE1LDE5IEBAIFdlYlZpZXcgewogCiAgICAgICAgICAgICBjb21wYXJl
KHNweVRpdGxlLmNvdW50LCAyKQogICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdF9j
aGFyc2V0cygpIHsKKyAgICAgICAgICAgIHNweVRpdGxlLmNsZWFyKCkKKyAgICAgICAgICAgIGNv
bXBhcmUoc3B5VGl0bGUuY291bnQsIDApCisgICAgICAgICAgICB2YXIgdGVzdFVybCA9ICJzY2hl
bWVDaGFyc2V0Oi8vbGF0aW4xIgorICAgICAgICAgICAgd2ViVmlldy5sb2FkKHRlc3RVcmwpCisg
ICAgICAgICAgICBzcHlUaXRsZS53YWl0KCkKKyAgICAgICAgICAgIGNvbXBhcmUod2ViVmlldy50
aXRsZSwgInRpdGxlIHdpdGggY29weXJpZ2h0IMKpIikKKworICAgICAgICAgICAgdGVzdFVybCA9
ICJzY2hlbWVDaGFyc2V0Oi8vdXRmLTgiCisgICAgICAgICAgICB3ZWJWaWV3LmxvYWQodGVzdFVy
bCkKKyAgICAgICAgICAgIHNweVRpdGxlLndhaXQoKQorICAgICAgICAgICAgY29tcGFyZSh3ZWJW
aWV3LnRpdGxlLCAidGl0bGUgd2l0aCBjb3B5cmlnaHQgwqkiKQorICAgICAgICB9CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0
ZXN0cy90c3RfcW1sdGVzdHMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwCmluZGV4IGU4ZDlhYWIuLjhjOGM0YjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMv
dHN0X3FtbHRlc3RzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FtbHRlc3RzL3RzdF9xbWx0ZXN0cy5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICovCiAKKyNpbmNsdWRlICIuLi9ieXRlYXJyYXl0ZXN0
ZGF0YS5oIgogI2luY2x1ZGUgIi4uL3V0aWwuaCIKIAogI2luY2x1ZGUgPFFWYXJMZW5ndGhBcnJh
eT4KQEAgLTQxLDUgKzQyLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAg
IC8vIEluc3RhbnRpYXRlIFFBcHBsaWNhdGlvbiB0byBwcmV2ZW50IHF1aWNrX3Rlc3RfbWFpbiB0
byBpbnN0YW50aWF0ZSBhIFFHdWlBcHBsaWNhdGlvbi4KICAgICAvLyBUaGlzIGNhbiBiZSByZW1v
dmVkIGFzIHNvb24gYXMgd2UgZG8gbm90IHVzZSBRdFdpZGdldHMgYW55IG1vcmUuCiAgICAgUUFw
cGxpY2F0aW9uIGFwcChhcmdjLCBhcmd2KTsKKyAgICBxbWxSZWdpc3RlclR5cGU8Qnl0ZUFycmF5
VGVzdERhdGE+KCJUZXN0IiwgMSwgMCwgIkJ5dGVBcnJheVRlc3REYXRhIik7CiAgICAgcmV0dXJu
IHF1aWNrX3Rlc3RfbWFpbihhcmdjLCBhcmd2LCAicW1sdGVzdHMiLCAwLCBRVUlDS19URVNUX1NP
VVJDRV9ESVIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy90ZXN0cy5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3Rz
L3Rlc3RzLnByaQppbmRleCA3MWU4NzE2Li4wNmZmMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnByaQpAQCAtMyw4ICszLDExIEBAIFRFTVBM
QVRFID0gYXBwCiBWUEFUSCArPSAkJF9QUk9fRklMRV9QV0RfCiBUQVJHRVQgPSB0c3RfJCRUQVJH
RVQKIAorSEVBREVSUyArPSAuLi9ieXRlYXJyYXl0ZXN0ZGF0YS5oCisKIFNPVVJDRVMgKz0gJCR7
VEFSR0VUfS5jcHAgXAotICAgICAgICAgICAuLi91dGlsLmNwcAorICAgICAgICAgICAuLi91dGls
LmNwcCBcCisgICAgICAgICAgIC4uL2J5dGVhcnJheXRlc3RkYXRhLmNwcAogSU5DTFVERVBBVEgg
Kz0gJCRQV0QKIAogUVQgKz0gdGVzdGxpYiBkZWNsYXJhdGl2ZSB3aWRnZXRzIHF1aWNrCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuY3BwCmluZGV4IDk5
MDQxMTAuLmM3MWYxM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQv
UXROZXR3b3JrUmVwbHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRO
ZXR3b3JrUmVwbHkuY3BwCkBAIC02MiwyMiArNjIsOCBAQCB2b2lkIFF0TmV0d29ya1JlcGx5Ojpz
ZXREYXRhKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUsIHFpbnQ2NCBkYXRhU2l6
ZQogCiB2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXRSZXBseURhdGEoY29uc3QgUXROZXR3b3JrUmVw
bHlEYXRhJiByZXBseURhdGEpCiB7Ci0gICAgaWYgKHJlcGx5RGF0YS5tX29wZXJhdGlvbikKLSAg
ICAgICAgc2V0T3BlcmF0aW9uKHJlcGx5RGF0YS5tX29wZXJhdGlvbik7Ci0gICAgaWYgKCFyZXBs
eURhdGEubV9jb250ZW50RGlzcG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHNldEhlYWRlcihR
TmV0d29ya1JlcXVlc3Q6OkNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciwgUVN0cmluZyhyZXBseURh
dGEubV9jb250ZW50RGlzcG9zaXRpb24pKTsKICAgICBpZiAoIXJlcGx5RGF0YS5tX2NvbnRlbnRU
eXBlLmlzTnVsbCgpKQogICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50
VHlwZUhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV9jb250ZW50VHlwZSkpOwotICAgIGlmICgh
cmVwbHlEYXRhLm1fbG9jYXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHNldEhlYWRlcihRTmV0d29y
a1JlcXVlc3Q6OkxvY2F0aW9uSGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5tX2xvY2F0aW9uKSk7
Ci0gICAgaWYgKHJlcGx5RGF0YS5tX2xhc3RNb2RpZmllZCkKLSAgICAgICAgc2V0SGVhZGVyKFFO
ZXR3b3JrUmVxdWVzdDo6TGFzdE1vZGlmaWVkSGVhZGVyLCBRRGF0ZVRpbWU6OmZyb21NU2Vjc1Np
bmNlRXBvY2gocmVwbHlEYXRhLm1fbGFzdE1vZGlmaWVkKSk7Ci0gICAgaWYgKCFyZXBseURhdGEu
bV9jb29raWUuaXNOdWxsKCkpCi0gICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OlNl
dENvb2tpZUhlYWRlciwgUVZhcmlhbnQ6OmZyb21WYWx1ZShRTmV0d29ya0Nvb2tpZTo6cGFyc2VD
b29raWVzKFFTdHJpbmcocmVwbHlEYXRhLm1fY29va2llKS50b0FzY2lpKCkpKSk7Ci0gICAgaWYg
KCFyZXBseURhdGEubV91c2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIHNldEhlYWRlcihRTmV0
d29ya1JlcXVlc3Q6OlVzZXJBZ2VudEhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV91c2VyQWdl
bnQpKTsKLSAgICBpZiAoIXJlcGx5RGF0YS5tX3NlcnZlci5pc051bGwoKSkKLSAgICAgICAgc2V0
SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6U2VydmVySGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5t
X3NlcnZlcikpOwogICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRMZW5ndGhI
ZWFkZXIsIFFWYXJpYW50Ojpmcm9tVmFsdWUocmVwbHlEYXRhLm1fY29udGVudExlbmd0aCkpOwog
ICAgIHNldERhdGEocmVwbHlEYXRhLm1fZGF0YUhhbmRsZSwgcmVwbHlEYXRhLm1fY29udGVudExl
bmd0aCk7CiB9CkBAIC0xMDAsMTEgKzg2LDYgQEAgcWludDY0IFF0TmV0d29ya1JlcGx5OjpieXRl
c0F2YWlsYWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYnl0ZXNBdmFpbGFibGUgKyBRTmV0d29y
a1JlcGx5OjpieXRlc0F2YWlsYWJsZSgpOwogfQogCi12b2lkIFF0TmV0d29ya1JlcGx5OjpzZXRI
ZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpLbm93bkhlYWRlcnMgaGVhZGVyLCBjb25zdCBRVmFyaWFu
dCAmdmFsdWUpCi17Ci0gICAgUU5ldHdvcmtSZXBseTo6c2V0SGVhZGVyKGhlYWRlciwgdmFsdWUp
OwotfQotCiB2b2lkIFF0TmV0d29ya1JlcGx5OjphYm9ydCgpIHsgfQogdm9pZCBRdE5ldHdvcmtS
ZXBseTo6Y2xvc2UoKSB7IH0KIHZvaWQgUXROZXR3b3JrUmVwbHk6OnNldFJlYWRCdWZmZXJTaXpl
KHFpbnQ2NCBzaXplKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
cXQvUXROZXR3b3JrUmVwbHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3
b3JrUmVwbHkuaAppbmRleCA4Y2ViNzkyLi5kMzJjODIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5oCkBAIC00MiwxMiArNDIsMTIgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBxaW50NjQgcmVhZERhdGEoY2hhciAqZGF0YSwgcWludDY0IG1heGxl
bik7CiAgICAgdmlydHVhbCBxaW50NjQgYnl0ZXNBdmFpbGFibGUoKSBjb25zdDsKLSAgICB2b2lk
IHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6Oktub3duSGVhZGVycywgY29uc3QgUVZhcmlhbnQg
JnZhbHVlKTsKLSAgICB2b2lkIHNldERhdGEoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmLCBx
aW50NjQgZGF0YVNpemUpOwogICAgIHZvaWQgc2V0UmVwbHlEYXRhKGNvbnN0IFF0TmV0d29ya1Jl
cGx5RGF0YSYpOwogICAgIHZvaWQgZmluYWxpemUoKTsKIAogcHJvdGVjdGVkOgorICAgIHZvaWQg
c2V0RGF0YShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHFpbnQ2NCBkYXRhU2l6ZSk7CisK
ICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmVhZEJ1ZmZlclNpemUocWludDY0KTsKQEAgLTU1LDcgKzU1LDYg
QEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIHFpbnQ2NCBtX2J5dGVzQXZhaWxhYmxlOwot
ICAgIFFCeXRlQXJyYXkgbV9idWZmZXI7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9zaGFy
ZWRNZW1vcnk7CiAgICAgcWludDY0IG1fc2hhcmVkTWVtb3J5U2l6ZTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124328</attachid>
            <date>2012-01-27 09:22:41 -0800</date>
            <delta_ts>2012-01-31 03:40:32 -0800</delta_ts>
            <desc>patch for review. - refactorings as commented before.</desc>
            <filename>77007_20120127-181405.patch</filename>
            <type>text/plain</type>
            <size>6693</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiOGQ2M2U5Li40ZjcyOTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDEtMjcgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIFVzZSBRVmFyaWFudCBmb3IgcGF5bG9hZCBkYXRhIGluIGFwcGxpY2F0aW9u
IFVSTCBzY2hlbWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzcwMDcKKworICAgICAgICBNYWtlIHRoZSBVSVByb2Nlc3MgZGVjaWRlIGFib3V0IHRo
ZSBlbmNvZGluZyBhbmQgZGlzcGxheQorICAgICAgICBhIHdhcm5pbmcgaW4gY2FzZSBubyBlbmNv
ZGluZyB3YXMgZGVmaW5lZC4KKyAgICAgICAgTWFrZSB0aGUgUVF1aWNrTmV0d29ya1JlcGx5IHN0
b3JlIGEgUVdlYWtQb2ludGVyIHRvIHRoZQorICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsIHRvIGdldCByaWQgb2YgaGFja2lzaCBjaGFpbiBvZiBwYXJlbnRhbCBxdWVyaWVzLgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwOgorICAgICAgICAoUVF1aWNrTmV0d29ya1Jl
cGx5OjpzZW5kKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0V2ViVmlld0V4cGVy
aW1lbnRhbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlf
cC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHA6CisgICAg
ICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNfQXBwZW5kKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UXROZXR3b3JrUmVwbHk6OlF0TmV0d29ya1JlcGx5KToKKyAgICAgICAgKFdlYktpdDo6
UXROZXR3b3JrUmVwbHk6OnNldFJlcGx5RGF0YSk6CisKIDIwMTItMDEtMjcgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBhIEdL
ZXlGaWxlIGVzcGVjaWFsaXphdGlvbiB0byBHT3duUHRyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAKaW5kZXggNGJlYTY5
Yy4uOWQ5NDI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2tuZXR3b3JrcmVwbHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcApAQCAtNjgsNiArNjgsNyBAQCB2b2lkIFFRdWlja05l
dHdvcmtSZXBseTo6c2VuZCgpCiAgICAgICAgIHN0cmluZ0RhdGEgPSBtX2RhdGEudG9TdHJpbmco
KTsKICAgICAgICAgcHRyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KHN0cmlu
Z0RhdGEuY29uc3REYXRhKCkpOwogICAgICAgICBzbUxlbmd0aCA9IHNpemVvZihRQ2hhcikgKiBz
dHJpbmdEYXRhLmxlbmd0aCgpOworICAgICAgICBzZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBj
aGFyc2V0PXV0Zi0xNiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV9kYXRhLmNhbkNv
bnZlcnQ8UUJ5dGVBcnJheT4oKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc2LDYgKzc3LDEx
IEBAIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZW5kKCkKICAgICAgICAgc21MZW5ndGggPSBi
eXRlQXJyYXlEYXRhLnNpemUoKTsKICAgICB9CiAKKyAgICBpZiAoY29udGVudFR5cGUoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgcVdhcm5pbmcoIlFRdWlja05ldHdvcmtSZXBseTo6c2VuZCAtIENh
bm5vdCBzZW5kIHJhdyBkYXRhIHdpdGhvdXQgYSBjb250ZW50IHR5cGUgYmVpbmcgc3BlY2lmaWVk
ISIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpT
aGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNtTGVuZ3Ro
KTsKICAgICBpZiAoIXNoYXJlZE1lbW9yeSkKICAgICAgICAgcmV0dXJuOwpAQCAtODUsMTMgKzkx
LDggQEAgdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNlbmQoKQogCiAgICAgaWYgKHNoYXJlZE1l
bW9yeS0+Y3JlYXRlSGFuZGxlKG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fZGF0YUhhbmRs
ZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSkpIHsKICAgICAgICAgbV9uZXR3b3JrUmVwbHlEYXRh
LT5kYXRhKCkubV9jb250ZW50TGVuZ3RoID0gc21MZW5ndGg7Ci0KLSAgICAgICAgUU9iamVjdCog
c2NoZW1lUGFyZW50ID0gcGFyZW50KCktPnBhcmVudCgpOwotICAgICAgICBpZiAoc2NoZW1lUGFy
ZW50KSB7Ci0gICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKiB3ZWJWaWV3RXhw
ZXJpbWVudGFsID0gcW9iamVjdF9jYXN0PFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqPihzY2hl
bWVQYXJlbnQtPnBhcmVudCgpKTsKLSAgICAgICAgICAgIGlmICh3ZWJWaWV3RXhwZXJpbWVudGFs
KQotICAgICAgICAgICAgICAgIHdlYlZpZXdFeHBlcmltZW50YWwtPnNlbmRBcHBsaWNhdGlvblNj
aGVtZVJlcGx5KHRoaXMpOwotICAgICAgICB9CisgICAgICAgIGlmIChtX3dlYlZpZXdFeHBlcmlt
ZW50YWwpCisgICAgICAgICAgICBtX3dlYlZpZXdFeHBlcmltZW50YWwuZGF0YSgpLT5zZW5kQXBw
bGljYXRpb25TY2hlbWVSZXBseSh0aGlzKTsKICAgICB9CiAKICAgICAvLyBBZnRlciBzZW5kaW5n
IHRoZSByZXBseSBkYXRhLCB3ZSBoYXZlIHRvIHJlaW5pdGlhbGl6ZSB0aGUgbV9uZXR3b3JrUmVw
bHlEYXRhLApAQCAtOTksNiArMTAwLDExIEBAIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZW5k
KCkKICAgICBtX25ldHdvcmtSZXBseURhdGEgPSBhZG9wdFJlZihuZXcgV2ViS2l0OjpRdFJlZkNv
dW50ZWROZXR3b3JrUmVwbHlEYXRhKTsKIH0KIAordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNl
dFdlYlZpZXdFeHBlcmltZW50YWwoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCogd2ViVmlld0V4
cGVyaW1lbnRhbCkKK3sKKyAgICBtX3dlYlZpZXdFeHBlcmltZW50YWwgPSB3ZWJWaWV3RXhwZXJp
bWVudGFsOworfQorCiBXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YSogUVF1
aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVxdWVzdERhdGEoKSBjb25zdAogewogICAgIHJldHVy
biBtX25ldHdvcmtSZXF1ZXN0RGF0YS5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaAppbmRleCA3MTNmNGU2Li4x
MDA3ZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a25ldHdvcmtyZXBseV9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2tuZXR3b3JrcmVwbHlfcC5oCkBAIC0yMywxMCArMjMsMTIgQEAKIAogI2luY2x1ZGUgIlF0
TmV0d29ya1JlcGx5RGF0YS5oIgogI2luY2x1ZGUgIlF0TmV0d29ya1JlcXVlc3REYXRhLmgiCisj
aW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAj
aW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgogI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdl
cj4KICNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFXZWFrUG9pbnRlcj4KICNpbmNsdWRl
IDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWxpc3QuaD4KICNpbmNsdWRlIDxRdFF1aWNrL3Fx
dWlja2l0ZW0uaD4KIApAQCAtNDQsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgUVZhcmlhbnQgZGF0
YSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGF0YShjb25zdCBRVmFyaWFudCYgZGF0YSk7CiAKKyAg
ICB2b2lkIHNldFdlYlZpZXdFeHBlcmltZW50YWwoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCop
OwogICAgIFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhKiBuZXR3b3JrUmVx
dWVzdERhdGEoKSBjb25zdDsKICAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0RGF0YShXVEY6OlBh
c3NSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+IGRhdGEpOwog
ICAgIFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcGx5RGF0YSogbmV0d29ya1JlcGx5RGF0
YSgpIGNvbnN0OwpAQCAtNTUsNiArNTgsNyBAQCBwcml2YXRlOgogICAgIFdURjo6UmVmUHRyPFdl
YktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiBtX25ldHdvcmtSZXF1ZXN0RGF0
YTsKICAgICBXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXBseURhdGE+
IG1fbmV0d29ya1JlcGx5RGF0YTsKICAgICBRVmFyaWFudCBtX2RhdGE7CisgICAgUVdlYWtQb2lu
dGVyPFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw+IG1fd2ViVmlld0V4cGVyaW1lbnRhbDsKIH07
CiAKIFFNTF9ERUNMQVJFX1RZUEUoUVF1aWNrTmV0d29ya1JlcGx5KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggMjVmYzdkOS4u
ZGViZjE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXcuY3BwCkBAIC04MTYsNiArODE2LDcgQEAgdm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJp
bWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNfQXBwZW5kKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTwK
ICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKiB3ZWJWaWV3RXhwZXJpbWVudGFsID0gcW9i
amVjdF9jYXN0PFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqPihwcm9wZXJ0eS0+b2JqZWN0LT5w
YXJlbnQoKSk7CiAgICAgaWYgKCF3ZWJWaWV3RXhwZXJpbWVudGFsKQogICAgICAgICByZXR1cm47
CisgICAgc2NoZW1lLT5yZXBseSgpLT5zZXRXZWJWaWV3RXhwZXJpbWVudGFsKHdlYlZpZXdFeHBl
cmltZW50YWwpOwogICAgIFFRdWlja1dlYlZpZXdQcml2YXRlKiBkID0gd2ViVmlld0V4cGVyaW1l
bnRhbC0+ZF9mdW5jKCk7CiAgICAgZC0+d2ViUGFnZVByb3h5LT5yZWdpc3RlckFwcGxpY2F0aW9u
U2NoZW1lKHNjaGVtZS0+c2NoZW1lKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcAppbmRleCBjNzFmMTNmLi5lNjUwMjJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcApAQCAtNDUs
NyArNDUsNiBAQCBRdE5ldHdvcmtSZXBseTo6UXROZXR3b3JrUmVwbHkoY29uc3QgUU5ldHdvcmtS
ZXF1ZXN0JiByZXEsIFF0TmV0d29ya0FjY2Vzc01hbmFnZQogICAgIHNldE9wZXJhdGlvbihRTmV0
d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbik7CiAgICAgc2V0VXJsKHJlcS51cmwoKSk7
CiAgICAgc2V0T3Blbk1vZGUoUUlPRGV2aWNlOjpSZWFkT25seSk7Ci0gICAgc2V0SGVhZGVyKFFO
ZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIsIFFWYXJpYW50KFFTdHJpbmc6OmZyb21M
b2NhbDhCaXQoInRleHQvaHRtbDsgY2hhcnNldD1VVEYtMTYiKSkpOwogfQogCiB2b2lkIFF0TmV0
d29ya1JlcGx5OjpzZXREYXRhKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUsIHFp
bnQ2NCBkYXRhU2l6ZSkKQEAgLTYyLDcgKzYxLDcgQEAgdm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0
RGF0YShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCBxaW50NjQgZGF0YVNpemUK
IAogdm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0UmVwbHlEYXRhKGNvbnN0IFF0TmV0d29ya1JlcGx5
RGF0YSYgcmVwbHlEYXRhKQogewotICAgIGlmICghcmVwbHlEYXRhLm1fY29udGVudFR5cGUuaXNO
dWxsKCkpCisgICAgaWYgKCFyZXBseURhdGEubV9jb250ZW50VHlwZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyLCBRU3RyaW5n
KHJlcGx5RGF0YS5tX2NvbnRlbnRUeXBlKSk7CiAgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVz
dDo6Q29udGVudExlbmd0aEhlYWRlciwgUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXBseURhdGEubV9j
b250ZW50TGVuZ3RoKSk7CiAgICAgc2V0RGF0YShyZXBseURhdGEubV9kYXRhSGFuZGxlLCByZXBs
eURhdGEubV9jb250ZW50TGVuZ3RoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>