<?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>36123</bug_id>
          
          <creation_ts>2010-03-15 09:29:50 -0700</creation_ts>
          <short_desc>[Qt] QtScript functionality should be extended by syntax checking.</short_desc>
          <delta_ts>2010-03-22 07:38:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>31863</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jędrzej Nowacki">jedrzej.nowacki</reporter>
          <assigned_to name="Jędrzej Nowacki">jedrzej.nowacki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hausmann</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>kent.hansen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>199696</commentid>
    <comment_count>0</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-03-15 09:29:50 -0700</bug_when>
    <thetext>QtScript API should contain a function for checking a code syntax (http://doc.trolltech.com/4.6/qscriptengine.html#checkSyntax).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199699</commentid>
    <comment_count>1</comment_count>
      <attachid>50714</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-03-15 09:44:32 -0700</bug_when>
    <thetext>Created attachment 50714
Fix v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199855</commentid>
    <comment_count>2</comment_count>
      <attachid>50714</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-15 15:13:48 -0700</bug_when>
    <thetext>Comment on attachment 50714
Fix v1

I&apos;m not sure this copyright line makes sense to me:
 2     Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)

Why not just Nokia?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200701</commentid>
    <comment_count>3</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-03-17 05:18:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 50714 [details])
&gt; I&apos;m not sure this copyright line makes sense to me:
&gt;  2     Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
&gt; 
&gt; Why not just Nokia?

Because our Legal Department said so :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200742</commentid>
    <comment_count>4</comment_count>
      <attachid>50714</attachid>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-03-17 07:02:50 -0700</bug_when>
    <thetext>Comment on attachment 50714
Fix v1

&gt;  /*!
&gt; +  Checks the syntax of the given \a program. Returns a
&gt; +  QScriptSyntaxCheckResult object that contains the result of the check.
&gt; +*/
&gt; +QScriptSyntaxCheckResult QScriptEngine::checkSyntax(const QString &amp;program)
&gt; +{
&gt; +    QScriptEnginePrivate* engine = new QScriptEnginePrivate(0);
&gt; +    return QScriptSyntaxCheckResultPrivate::get(engine-&gt;checkSyntax(program));
&gt; +}

I would put a comment here saying that we construct a temporary engine because this is a static function (for compatibility with the corresponding API that&apos;s part of Qt) and the JSC C API requires a JSContextRef in order to perform syntax checking. That&apos;s a restriction we should try to get rid of. Could also mention, then, that the QScriptSyntaxCheckResult object takes ownership of the engine (=context). It needs to keep the engine around in order to do the lazy querying of the message and line number properties on the JS error object... This is not so obvious.

&gt; diff --git a/JavaScriptCore/qt/api/qscriptsyntaxcheckresult_p.cpp b/JavaScriptCore/qt/api/qscriptsyntaxcheckresult_p.cpp
&gt; new file mode 100644
&gt; index 0000000..c26c324
&gt; --- /dev/null
&gt; +++ b/JavaScriptCore/qt/api/qscriptsyntaxcheckresult_p.cpp

I would just put the contents of this file in qscriptsyntaxcheckresult.cpp, no need for a separate _p.cpp.

The rest looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201231</commentid>
    <comment_count>5</comment_count>
      <attachid>51016</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-03-18 03:05:40 -0700</bug_when>
    <thetext>Created attachment 51016
Fix v2

Default constructor of the QScriptSyntaxCheckResult was removed as it was useless.

(In reply to comment #4)
&gt; I would put a comment here saying that we construct a temporary engine because
&gt; this is a static function (for compatibility with the corresponding API that&apos;s
&gt; part of Qt) and the JSC C API requires a JSContextRef in order to perform
&gt; syntax checking. That&apos;s a restriction we should try to get rid of. Could also
&gt; mention, then, that the QScriptSyntaxCheckResult object takes ownership of the
&gt; engine (=context). It needs to keep the engine around in order to do the lazy
&gt; querying of the message and line number properties on the JS error object...
&gt; This is not so obvious.
Done.

&gt; I would just put the contents of this file in qscriptsyntaxcheckresult.cpp, no
&gt; need for a separate _p.cpp.
Done.

&gt; The rest looks good to me.
Cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201233</commentid>
    <comment_count>6</comment_count>
      <attachid>51016</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-03-18 03:18:15 -0700</bug_when>
    <thetext>Comment on attachment 51016
Fix v2


&gt; +QScriptSyntaxCheckResult QScriptEngine::checkSyntax(const QString &amp;program)
&gt; +{
&gt; +    // FIXME This is not optimal.
&gt; +    // The JSC C API needs a context to perform a syntax check, it means that a QScriptEnginePrivate
&gt; +    // had to be created. This function is static so we have to create QScriptEnginePrivate for each
&gt; +    // call. We can&apos;t remove the &quot;static&quot; for compatibility reason, at least up to Qt5.
&gt; +    // QScriptSyntaxCheckResultPrivate takes ownership of newly created engine. The engine will be
&gt; +    // kept as long as it is needed for lazy evaluation of properties of
&gt; +    // the QScriptSyntaxCheckResultPrivate.
&gt; +    QScriptEnginePrivate* engine = new QScriptEnginePrivate(/* q_ptr */ 0);
&gt; +    return QScriptSyntaxCheckResultPrivate::get(engine-&gt;checkSyntax(program));
&gt; +}

Doesn&apos;t this leak the engine pointer? Shouldn&apos;t it be deleted after the check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201235</commentid>
    <comment_count>7</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-03-18 03:43:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; +    // FIXME This is not optimal.
&gt; &gt; +    // The JSC C API needs a context to perform a syntax check, it means that a QScriptEnginePrivate
&gt; &gt; +    // had to be created. This function is static so we have to create QScriptEnginePrivate for each
&gt; &gt; +    // call. We can&apos;t remove the &quot;static&quot; for compatibility reason, at least up to Qt5.
&gt; &gt; +    // QScriptSyntaxCheckResultPrivate takes ownership of newly created engine. The engine will be
&gt; &gt; +    // kept as long as it is needed for lazy evaluation of properties of
&gt; &gt; +    // the QScriptSyntaxCheckResultPrivate.
&gt; &gt; +    QScriptEnginePrivate* engine = new QScriptEnginePrivate(/* q_ptr */ 0);
&gt; &gt; +    return QScriptSyntaxCheckResultPrivate::get(engine-&gt;checkSyntax(program));
&gt; &gt; +}
&gt; 
&gt; Doesn&apos;t this leak the engine pointer? Shouldn&apos;t it be deleted after the check?

No, the QScriptEnginePrivate inherits from the QSharedData and the QScriptSyntaxCheckResultPrivate keeps a reference to it (in the same way as a QScriptValuePrivate could). 
This question means that comment that you quoted is not clear enough. Any suggestions how to improve it ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201237</commentid>
    <comment_count>8</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-03-18 03:48:28 -0700</bug_when>
    <thetext>&gt; This question means that comment that you quoted is not clear enough. Any
&gt; suggestions how to improve it ?

What about ?

&quot;QScriptSyntaxCheckResultPrivate takes ownership of newly created engine. The engine will be kept as long as it is needed for lazy evaluation of properties of the QScriptSyntaxCheckResultPrivate. It will be automatically deleted by the QScriptSyntaxCheckResultPrivate.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202336</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-03-21 15:15:09 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; This question means that comment that you quoted is not clear enough. Any
&gt; &gt; suggestions how to improve it ?
&gt; 
&gt; What about ?
&gt; 
&gt; &quot;QScriptSyntaxCheckResultPrivate takes ownership of newly created engine. The
&gt; engine will be kept as long as it is needed for lazy evaluation of properties
&gt; of the QScriptSyntaxCheckResultPrivate. It will be automatically deleted by the
&gt; QScriptSyntaxCheckResultPrivate.&quot;

I overlooked the comment, sorry :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202358</commentid>
    <comment_count>10</comment_count>
      <attachid>51016</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-21 16:02:28 -0700</bug_when>
    <thetext>Comment on attachment 51016
Fix v2

Rejecting patch 51016 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Simon Hausmann&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
t 40 with fuzz 2.
patching file JavaScriptCore/qt/api/qscriptsyntaxcheckresult.cpp
patching file JavaScriptCore/qt/api/qscriptsyntaxcheckresult.h
patching file JavaScriptCore/qt/api/qscriptsyntaxcheckresult_p.h
patching file JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp
Hunk #1 FAILED at 18.
Hunk #2 FAILED at 38.
Hunk #3 succeeded at 178 with fuzz 1 (offset 102 lines).
2 out of 3 hunks FAILED -- saving rejects to file JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp.rej

Full output: http://webkit-commit-queue.appspot.com/results/1046090</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202427</commentid>
    <comment_count>11</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-03-22 02:51:06 -0700</bug_when>
    <thetext>Aghr, I have forgotten about 36008. I should be an easy fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202475</commentid>
    <comment_count>12</comment_count>
      <attachid>51281</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-03-22 06:46:17 -0700</bug_when>
    <thetext>Created attachment 51281
Fix v3

Patch was updated, it should apply clearly now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202479</commentid>
    <comment_count>13</comment_count>
      <attachid>51281</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-22 07:38:00 -0700</bug_when>
    <thetext>Comment on attachment 51281
Fix v3

Clearing flags on attachment: 51281

Committed r56333: &lt;http://trac.webkit.org/changeset/56333&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202480</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-22 07:38:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50714</attachid>
            <date>2010-03-15 09:44:32 -0700</date>
            <delta_ts>2010-03-18 03:05:40 -0700</delta_ts>
            <desc>Fix v1</desc>
            <filename>checkV1.diff</filename>
            <type>text/plain</type>
            <size>20974</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5MGY3ZTU3Li44YWUwZjFjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcg
QEAKKzIwMTAtMDMtMTUgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIHN5bnRheCBjaGVja2luZyBpbiB0aGUgUXRTY3JpcHQgQVBJLgorCisgICAg
ICAgIE5ldyBjbGFzcyB3YXMgY3JlYXRlZDsgdGhlIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCB3
aGljaCBtYWluCisgICAgICAgIHJlc3BvbnNpYmlsaXR5IGlzIHRvIHByb3ZpZGUgcmVzdWx0cyBv
ZiB0aGUgRUNNQSBTY3JpcHQgY29kZQorICAgICAgICBzeW50YXggY2hlY2suIFRoZSBjbGFzcyBp
cyBub3QgZnVsbHkgZnVuY3Rpb25hbCBhcyB0aGUgSlNDIEMgQVBJCisgICAgICAgIGRvZXNuJ3Qg
ZXhwb3NlIGFuIGVycm9yIGNvbHVtbiBudW1iZXIsIGJ1dCBpdCBpcyBhIGdvb2Qgc3RhcnQgcG9p
bnQKKyAgICAgICAgZm9yIGEgZnV0dXJlIGRldmVsb3BtZW50LgorCisgICAgICAgIFtRdF0gUXRT
Y3JpcHQgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgZXh0ZW5kZWQgYnkgc3ludGF4IGNoZWNraW5n
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYxMjMK
KworICAgICAgICAqIHF0L2FwaS9RdFNjcmlwdC5wcm86CisgICAgICAgICogcXQvYXBpL3FzY3Jp
cHRlbmdpbmUuY3BwOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6Y2hlY2tTeW50YXgpOgorICAg
ICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmg6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRl
bmdpbmVfcC5jcHA6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y2hlY2tTeW50YXgp
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaDoKKyAgICAgICAgKiBxdC9hcGkv
cXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0U3lu
dGF4Q2hlY2tSZXN1bHQ6OlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCk6CisgICAgICAgIChRU2Ny
aXB0U3ludGF4Q2hlY2tSZXN1bHQ6On5RU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQpOgorICAgICAg
ICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoUVNjcmlw
dFN5bnRheENoZWNrUmVzdWx0OjpzdGF0ZSk6CisgICAgICAgIChRU2NyaXB0U3ludGF4Q2hlY2tS
ZXN1bHQ6OmVycm9yTGluZU51bWJlcik6CisgICAgICAgIChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1
bHQ6OmVycm9yQ29sdW1uTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dDo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdHN5bnRheGNoZWNrcmVz
dWx0Lmg6IEFkZGVkLgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHRf
cC5jcHA6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6
flFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUpOgorICAgICAgICAoUVNjcmlwdFN5bnRh
eENoZWNrUmVzdWx0UHJpdmF0ZTo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKFFTY3JpcHRTeW50
YXhDaGVja1Jlc3VsdFByaXZhdGU6OmVycm9yTGluZU51bWJlcik6CisgICAgICAgICogcXQvYXBp
L3FzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9wLmg6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN5
bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6Z2V0KToKKyAgICAgICAgKFFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdFByaXZhdGU6OlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUpOgorICAgICAg
ICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6c3RhdGUpOgorICAgICAgICAoUVNj
cmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6ZXJyb3JDb2x1bW5OdW1iZXIpOgorICAgICAg
ICAqIHF0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwOgorICAgICAg
ICAodHN0X1FTY3JpcHRFbmdpbmU6OmNoZWNrU3ludGF4X2RhdGEpOgorICAgICAgICAodHN0X1FT
Y3JpcHRFbmdpbmU6OmNoZWNrU3ludGF4KToKKwogMjAxMC0wMy0xMiAgR2F2aW4gQmFycmFjbG91
Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChidWlsZCBmaXgpLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0
LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KaW5kZXggZDYxMzI1NC4u
ZmQ1ZDcxOSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybwor
KysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCkBAIC0yMyw2ICsyMyw4IEBA
IFNPVVJDRVMgKz0gICQkUFdEL3FzY3JpcHRlbmdpbmUuY3BwIFwKICAgICAgICAgICAgICQkUFdE
L3FzY3JpcHRlbmdpbmVfcC5jcHAgXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHZhbHVlLmNw
cCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0c3RyaW5nLmNwcCBcCisgICAgICAgICAgICAk
JFBXRC9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuY3BwIFwKKyAgICAgICAgICAgICQkUFdEL3Fz
Y3JpcHRzeW50YXhjaGVja3Jlc3VsdF9wLmNwcCBcCiAKIEhFQURFUlMgKz0gICQkUFdEL3F0c2Ny
aXB0Z2xvYmFsLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2luZS5oIFwKQEAgLTMy
LDkgKzM0LDEwIEBAIEhFQURFUlMgKz0gICQkUFdEL3F0c2NyaXB0Z2xvYmFsLmggXAogICAgICAg
ICAgICAgJCRQV0QvcXNjcmlwdGNvbnZlcnRlcl9wLmggXAogICAgICAgICAgICAgJCRQV0QvcXNj
cmlwdHN0cmluZy5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRzdHJpbmdfcC5oIFwKKyAg
ICAgICAgICAgICQkUFdEL3FzY3JpcHRzeW50YXhjaGVja3Jlc3VsdC5oIFwKKyAgICAgICAgICAg
ICQkUFdEL3FzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9wLmggXAogCiAKICFzdGF0aWM6IERFRklO
RVMgKz0gUVRfTUFLRURMTAogCiBERVNURElSID0gJCRPVVRQVVRfRElSL2xpYgotCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAKaW5kZXggNDE2MzRmNC4uNTQ0NTdkYyAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcApAQCAtMjIsNiArMjIsNyBAQAog
I2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKIAogI2luY2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5o
IgorI2luY2x1ZGUgInFzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9wLmgiCiAjaW5jbHVkZSAicXNj
cmlwdHZhbHVlX3AuaCIKIAogLyohCkBAIC00Miw2ICs0MywxNiBAQCBRU2NyaXB0RW5naW5lOjp+
UVNjcmlwdEVuZ2luZSgpCiB9CiAKIC8qIQorICBDaGVja3MgdGhlIHN5bnRheCBvZiB0aGUgZ2l2
ZW4gXGEgcHJvZ3JhbS4gUmV0dXJucyBhCisgIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCBvYmpl
Y3QgdGhhdCBjb250YWlucyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay4KKyovCitRU2NyaXB0U3lu
dGF4Q2hlY2tSZXN1bHQgUVNjcmlwdEVuZ2luZTo6Y2hlY2tTeW50YXgoY29uc3QgUVN0cmluZyAm
cHJvZ3JhbSkKK3sKKyAgICBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lID0gbmV3IFFTY3Jp
cHRFbmdpbmVQcml2YXRlKDApOworICAgIHJldHVybiBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQ
cml2YXRlOjpnZXQoZW5naW5lLT5jaGVja1N5bnRheChwcm9ncmFtKSk7Cit9CisKKy8qIQogICAg
IEV2YWx1YXRlcyBcYSBwcm9ncmFtLCB1c2luZyBcYSBsaW5lTnVtYmVyIGFzIHRoZSBiYXNlIGxp
bmUgbnVtYmVyLAogICAgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24u
CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmggYi9K
YXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oCmluZGV4IGJhOWE5YmMuLmMxNmZl
NTMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaApAQCAtMjEsNiArMjEsNyBA
QAogI2RlZmluZSBxc2NyaXB0ZW5naW5lX2gKIAogI2luY2x1ZGUgInFzY3JpcHRzdHJpbmcuaCIK
KyNpbmNsdWRlICJxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuaCIKICNpbmNsdWRlIDxRdENvcmUv
cW9iamVjdC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgogI2luY2x1ZGUgPFF0
Q29yZS9xc3RyaW5nLmg+CkBAIC0zNiw2ICszNyw3IEBAIHB1YmxpYzoKICAgICBRU2NyaXB0RW5n
aW5lKCk7CiAgICAgflFTY3JpcHRFbmdpbmUoKTsKIAorICAgIHN0YXRpYyBRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHQgY2hlY2tTeW50YXgoY29uc3QgUVN0cmluZyYgcHJvZ3JhbSk7CiAgICAgUVNj
cmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFFTdHJpbmcmIHByb2dyYW0sIGNvbnN0IFFTdHJpbmcm
IGZpbGVOYW1lID0gUVN0cmluZygpLCBpbnQgbGluZU51bWJlciA9IDEpOwogICAgIHZvaWQgY29s
bGVjdEdhcmJhZ2UoKTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmVfcC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmNw
cAppbmRleCBkZThhMzU1Li5hMWY1N2I2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZV9wLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlw
dGVuZ2luZV9wLmNwcApAQCAtMzgsNiArMzgsMTUgQEAgUVNjcmlwdEVuZ2luZVByaXZhdGU6On5R
U2NyaXB0RW5naW5lUHJpdmF0ZSgpCiAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRl
eHQpOwogfQogCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKiBRU2NyaXB0RW5naW5l
UHJpdmF0ZTo6Y2hlY2tTeW50YXgoY29uc3QgUVN0cmluZyYgcHJvZ3JhbSkKK3sKKyAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbjsKKyAgICBpZiAoSlNDaGVja1NjcmlwdFN5bnRheChtX2NvbnRleHQs
IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKHByb2dyYW0pLCAvKiB1cmwgKi8gMCwgLyogc3Rh
cnRpbmcgbGluZSAqLyAxLCAmZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0
U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKHRoaXMpOworICAgIEpTVmFsdWVQcm90ZWN0KG1fY29u
dGV4dCwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gbmV3IFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dFByaXZhdGUodGhpcywgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oZXhjZXB0aW9uKSk7Cit9CisK
IC8qIQogICAgIEV2YWx1YXRlcyBwcm9ncmFtIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhl
IGV2YWx1YXRpb24uCiAgICAgXGludGVybmFsCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGVuZ2luZV9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVu
Z2luZV9wLmgKaW5kZXggYzU4M2RhYy4uNWMxYWQ0OCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0ZW5naW5lX3AuaApAQCAtMjMsMTIgKzIzLDE0IEBACiAjaW5jbHVkZSAicXNjcmlwdGNv
bnZlcnRlcl9wLmgiCiAjaW5jbHVkZSAicXNjcmlwdGVuZ2luZS5oIgogI2luY2x1ZGUgInFzY3Jp
cHRzdHJpbmdfcC5oIgorI2luY2x1ZGUgInFzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9wLmgiCiAj
aW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgogI2luY2x1ZGUgPFF0Q29y
ZS9xc3RyaW5nLmg+CiAKIGNsYXNzIFFTY3JpcHRFbmdpbmU7CitjbGFzcyBRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHRQcml2YXRlOwogCiBjbGFzcyBRU2NyaXB0RW5naW5lUHJpdmF0ZSA6IHB1Ymxp
YyBRU2hhcmVkRGF0YSB7CiBwdWJsaWM6CkBAIC0zOCw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICBR
U2NyaXB0RW5naW5lUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKik7CiAgICAgflFTY3JpcHRF
bmdpbmVQcml2YXRlKCk7CiAKKyAgICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKiBj
aGVja1N5bnRheChjb25zdCBRU3RyaW5nJiBwcm9ncmFtKTsKICAgICBRU2NyaXB0VmFsdWVQcml2
YXRlKiBldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxl
TmFtZSwgaW50IGxpbmVOdW1iZXIpOwogICAgIGlubGluZSB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7
CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2ty
ZXN1bHQuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzeW50YXhjaGVja3Jlc3Vs
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjMTljZAotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1
bHQuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRzeW50YXhjaGVja3Jlc3VsdC5oIgorCisjaW5j
bHVkZSAicXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0X3AuaCIKKworUVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0OjpRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQoKQoreworICAgIFFfQVNTRVJUKGZhbHNl
KTsKK30KKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpRU2NyaXB0U3ludGF4Q2hlY2tSZXN1
bHQoY29uc3QgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0JiBvdGhlcikKKyAgICA6IGRfcHRyKG90
aGVyLmRfcHRyKQore30KKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZSogZCkKKyAgICA6IGRf
cHRyKGQpCit7fQorCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6On5RU2NyaXB0U3ludGF4Q2hl
Y2tSZXN1bHQoKQore30KKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0JiBRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHQ6Om9wZXJhdG9yPShjb25zdCBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQmIG90
aGVyKQoreworICAgIGRfcHRyID0gb3RoZXIuZF9wdHI7CisgICAgcmV0dXJuICp0aGlzOworfQor
CitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlN0YXRlIFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dDo6c3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+c3RhdGUoKTsKK30KKworaW50
IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6ZXJyb3JMaW5lTnVtYmVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZF9wdHItPmVycm9yTGluZU51bWJlcigpOworfQorCitpbnQgUVNjcmlwdFN5bnRh
eENoZWNrUmVzdWx0OjplcnJvckNvbHVtbk51bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRf
cHRyLT5lcnJvckNvbHVtbk51bWJlcigpOworfQorCitRU3RyaW5nIFFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdDo6ZXJyb3JNZXNzYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmVycm9y
TWVzc2FnZSgpOworfQorCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlw
dHN5bnRheGNoZWNrcmVzdWx0LmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN5bnRh
eGNoZWNrcmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExMTgx
NAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4
Y2hlY2tyZXN1bHQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIHFzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9oCisjZGVmaW5lIHFzY3JpcHRzeW50YXhjaGVj
a3Jlc3VsdF9oCisKKyNpbmNsdWRlICJxdHNjcmlwdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0Q29y
ZS9xc2hhcmVkZGF0YS5oPgorCitjbGFzcyBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRl
OworY2xhc3MgUV9KQVZBU0NSSVBUX0VYUE9SVCBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBFcnJvciwKKyAgICAgICAgSW50ZXJt
ZWRpYXRlLAorICAgICAgICBWYWxpZAorICAgIH07CisKKyAgICBRU2NyaXB0U3ludGF4Q2hlY2tS
ZXN1bHQoY29uc3QgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0JiBvdGhlcik7CisgICAgflFTY3Jp
cHRTeW50YXhDaGVja1Jlc3VsdCgpOworICAgIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCYgb3Bl
cmF0b3I9KGNvbnN0IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCYgb3RoZXIpOworCisgICAgU3Rh
dGUgc3RhdGUoKSBjb25zdDsKKyAgICBpbnQgZXJyb3JMaW5lTnVtYmVyKCkgY29uc3Q7CisgICAg
aW50IGVycm9yQ29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgUVN0cmluZyBlcnJvck1lc3NhZ2Uo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQoKTsKKyAg
ICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0
ZSogZCk7CisgICAgUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2NyaXB0U3ludGF4Q2hl
Y2tSZXN1bHRQcml2YXRlPiBkX3B0cjsKKworICAgIGZyaWVuZCBjbGFzcyBRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHRQcml2YXRlOworfTsKKyNlbmRpZiAvLyBxc2NyaXB0c3ludGF4Y2hlY2tyZXN1
bHRfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzeW50YXhjaGVj
a3Jlc3VsdF9wLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2ty
ZXN1bHRfcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI2YzMyNAot
LS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hl
Y2tyZXN1bHRfcC5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0X3Au
aCIKKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6flFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdFByaXZhdGUoKQoreworICAgIGlmIChtX2V4Y2VwdGlvbikKKyAgICAgICAgSlNWYWx1
ZVVucHJvdGVjdChtX2VuZ2luZS0+Y29udGV4dCgpLCBtX2V4Y2VwdGlvbik7Cit9CisKK1FTdHJp
bmcgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6ZXJyb3JNZXNzYWdlKCkgY29uc3QK
K3sKKyAgICBpZiAobV9leGNlcHRpb24pCisgICAgICAgIHJldHVybiBRU2NyaXB0Q29udmVydGVy
Ojp0b1N0cmluZyhKU1ZhbHVlVG9TdHJpbmdDb3B5KG1fZW5naW5lLT5jb250ZXh0KCksIG1fZXhj
ZXB0aW9uLCAvKiBleGNlcHRpb24gKi8gMCkpOworICAgIHJldHVybiBRU3RyaW5nKCk7Cit9CisK
K2ludCBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlOjplcnJvckxpbmVOdW1iZXIoKSBj
b25zdAoreworICAgIGlmICghbV9leGNlcHRpb24pCisgICAgICAgIHJldHVybiAtMTsKKyAgICAv
LyBtX2V4Y2VwdGlvbiBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgRXhjZXB0aW9uIHNvIGl0IGhhcyAi
bGluZSIgYXR0cmlidXRlLgorICAgIEpTVmFsdWVSZWYgbGluZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkobV9lbmdpbmUtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmcoImxpbmUiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4Y2VwdGlvbnMgKi8wKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKG1fZW5naW5lLT5jb250ZXh0KCksIGxpbmUsIC8qIGV4Y2Vw
dGlvbnMgKi8wKTsKK30KKwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRzeW50YXhjaGVja3Jlc3VsdF9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN5
bnRheGNoZWNrcmVzdWx0X3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
MWNhM2FmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRz
eW50YXhjaGVja3Jlc3VsdF9wLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHRfcF9oCisjZGVmaW5lIHFzY3JpcHRz
eW50YXhjaGVja3Jlc3VsdF9wX2gKKworI2luY2x1ZGUgInFzY3JpcHRjb252ZXJ0ZXJfcC5oIgor
I2luY2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgorI2luY2x1ZGUgInFzY3JpcHRzeW50YXhjaGVj
a3Jlc3VsdC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNs
dWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKworY2xhc3MgUVNjcmlwdFN5bnRheENoZWNrUmVz
dWx0UHJpdmF0ZSA6IHB1YmxpYyBRU2hhcmVkRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIGlu
bGluZSBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQgZ2V0KFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dFByaXZhdGUqIHApOworICAgIGlubGluZSBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRl
KGNvbnN0IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdpbmUpOworICAgIGlubGluZSBRU2NyaXB0
U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdp
bmUsIEpTT2JqZWN0UmVmIHZhbHVlKTsKKyAgICB+UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJp
dmF0ZSgpOworCisgICAgaW5saW5lIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6U3RhdGUgc3Rh
dGUoKSBjb25zdDsKKyAgICBpbnQgZXJyb3JMaW5lTnVtYmVyKCkgY29uc3Q7CisgICAgaW5saW5l
IGludCBlcnJvckNvbHVtbk51bWJlcigpIGNvbnN0OworICAgIFFTdHJpbmcgZXJyb3JNZXNzYWdl
KCkgY29uc3Q7Citwcml2YXRlOgorICAgIEpTT2JqZWN0UmVmIG1fZXhjZXB0aW9uOworICAgIFFT
Y3JpcHRFbmdpbmVQdHIgbV9lbmdpbmU7Cit9OworCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQg
UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6Z2V0KFFTY3JpcHRTeW50YXhDaGVja1Jl
c3VsdFByaXZhdGUqIHApCit7CisgICAgcmV0dXJuIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdChw
KTsKK30KKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6UVNjcmlwdFN5bnRheENo
ZWNrUmVzdWx0UHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lKQorICAg
IDogbV9leGNlcHRpb24oMCkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2lu
ZVByaXZhdGUqPihlbmdpbmUpKQore30KKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0
ZTo6UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lUHJp
dmF0ZSogZW5naW5lLCBKU09iamVjdFJlZiB2YWx1ZSkKKyAgICA6IG1fZXhjZXB0aW9uKHZhbHVl
KQorICAgICwgbV9lbmdpbmUoY29uc3RfY2FzdDxRU2NyaXB0RW5naW5lUHJpdmF0ZSo+KGVuZ2lu
ZSkpCit7fQorCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlN0YXRlIFFTY3JpcHRTeW50YXhD
aGVja1Jlc3VsdFByaXZhdGU6OnN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9leGNlcHRp
b24gPyBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OkVycm9yIDogUVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0OjpWYWxpZDsKK30KKworaW50IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGU6
OmVycm9yQ29sdW1uTnVtYmVyKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRSBKU0MgQyBBUEkgZG9l
c24ndCBleHBvc2UgdGhlIGVycm9yIGNvbHVtbiBudW1iZXIuCisgICAgcmV0dXJuIG1fZXhjZXB0
aW9uID8gMSA6IC0xOworfQorCisKKyNlbmRpZiAvLyBxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHRf
cF9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3Rz
dF9xc2NyaXB0ZW5naW5lLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdp
bmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwCmluZGV4IGIzNmUzNjQuLmI4ZmRkMjAgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdp
bmUuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3Fz
Y3JpcHRlbmdpbmUuY3BwCkBAIC0xOCw2ICsxOCw3IEBACiAqLwogCiAjaW5jbHVkZSAicXNjcmlw
dGVuZ2luZS5oIgorI2luY2x1ZGUgInFzY3JpcHRzeW50YXhjaGVja3Jlc3VsdC5oIgogI2luY2x1
ZGUgInFzY3JpcHR2YWx1ZS5oIgogI2luY2x1ZGUgPFF0VGVzdC9xdGVzdC5oPgogCkBAIC0zNyw2
ICszOCw4IEBAIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOwogICAg
IHZvaWQgbnVsbFZhbHVlKCk7CiAgICAgdm9pZCB1bmRlZmluZWRWYWx1ZSgpOworICAgIHZvaWQg
Y2hlY2tTeW50YXhfZGF0YSgpOworICAgIHZvaWQgY2hlY2tTeW50YXgoKTsKIH07CiAKIC8qIEV2
YWx1YXRpbmcgYSBzY3JpcHQgdGhhdCB0aHJvdyBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIHNob3Vs
ZCByZXR1cm4gYW4gaW52YWxpZCB2YWx1ZS4gKi8KQEAgLTczLDUgKzc2LDk4IEBAIHZvaWQgdHN0
X1FTY3JpcHRFbmdpbmU6OnVuZGVmaW5lZFZhbHVlKCkKICAgICBRVkVSSUZZKHZhbHVlLmlzVW5k
ZWZpbmVkKCkpOwogfQogCit2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpjaGVja1N5bnRheF9kYXRh
KCkKK3sKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJjb2RlIik7CisgICAgUVRlc3Q6
OmFkZENvbHVtbjxpbnQ+KCJleHBlY3RlZFN0YXRlIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxp
bnQ+KCJlcnJvckxpbmVOdW1iZXIiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPGludD4oImVycm9y
Q29sdW1uTnVtYmVyIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigiZXJyb3JNZXNz
YWdlIik7CisKKyAgICBRVGVzdDo6bmV3Um93KCIwIikKKyAgICAgICAgPDwgUVN0cmluZygiMCIp
IDw8IGludChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlZhbGlkKQorICAgICAgICA8PCAtMSA8
PCAtMSA8PCAiIjsKKyAgICBRVGVzdDo6bmV3Um93KCJpZiAoIikKKyAgICAgICAgPDwgUVN0cmlu
ZygiaWYgKFxuIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6SW50ZXJtZWRpYXRl
KQorICAgICAgICA8PCAxIDw8IDQgPDwgIiI7CisgICAgUVRlc3Q6Om5ld1JvdygiaWYgZWxzZSIp
CisgICAgICAgIDw8IFFTdHJpbmcoIlxuaWYgZWxzZSIpIDw8IGludChRU2NyaXB0U3ludGF4Q2hl
Y2tSZXN1bHQ6OkVycm9yKQorICAgICAgICA8PCAyIDw8IDQgPDwgIlN5bnRheEVycm9yOiBQYXJz
ZSBlcnJvciI7CisgICAgUVRlc3Q6Om5ld1Jvdygie2lmfSIpCisgICAgICAgICAgICA8PCBRU3Ry
aW5nKCJ7XG57XG5pZlxufVxuIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6RXJy
b3IpCisgICAgICAgIDw8IDQgPDwgMSA8PCAiU3ludGF4RXJyb3I6IFBhcnNlIGVycm9yIjsKKyAg
ICBRVGVzdDo6bmV3Um93KCJmb29bIikKKyAgICAgICAgPDwgUVN0cmluZygiZm9vWyIpIDw8IGlu
dChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OkVycm9yKQorICAgICAgICA8PCAxIDw8IDQgPDwg
IlN5bnRheEVycm9yOiBQYXJzZSBlcnJvciI7CisgICAgUVRlc3Q6Om5ld1JvdygiZm9vWydiYXIn
XSIpCisgICAgICAgIDw8IFFTdHJpbmcoImZvb1snYmFyJ10iKSA8PCBpbnQoUVNjcmlwdFN5bnRh
eENoZWNrUmVzdWx0OjpWYWxpZCkKKyAgICAgICAgPDwgLTEgPDwgLTEgPDwgIiI7CisKKyAgICBR
VGVzdDo6bmV3Um93KCIvKiIpCisgICAgICAgIDw8IFFTdHJpbmcoIi8qIikgPDwgaW50KFFTY3Jp
cHRTeW50YXhDaGVja1Jlc3VsdDo6SW50ZXJtZWRpYXRlKQorICAgICAgICA8PCAxIDw8IDEgPDwg
IlVuY2xvc2VkIGNvbW1lbnQgYXQgZW5kIG9mIGZpbGUiOworICAgIFFUZXN0OjpuZXdSb3coIi8q
XG5NeSBjb21tZW50IikKKyAgICAgICAgPDwgUVN0cmluZygiLypcbk15IGNvbW1lbnQiKSA8PCBp
bnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpJbnRlcm1lZGlhdGUpCisgICAgICAgIDw8IDEg
PDwgMSA8PCAiVW5jbG9zZWQgY29tbWVudCBhdCBlbmQgb2YgZmlsZSI7CisgICAgUVRlc3Q6Om5l
d1JvdygiLypcbk15IGNvbW1lbnQgKi9cbmZvbyA9IDEwIikKKyAgICAgICAgPDwgUVN0cmluZygi
Lypcbk15IGNvbW1lbnQgKi9cbmZvbyA9IDEwIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jl
c3VsdDo6VmFsaWQpCisgICAgICAgIDw8IC0xIDw8IC0xIDw8ICIiOworICAgIFFUZXN0OjpuZXdS
b3coImZvbyA9IDEwIC8qIikKKyAgICAgICAgPDwgUVN0cmluZygiZm9vID0gMTAgLyoiKSA8PCBp
bnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpJbnRlcm1lZGlhdGUpCisgICAgICAgIDw8IC0x
IDw8IC0xIDw8ICIiOworICAgIFFUZXN0OjpuZXdSb3coImZvbyA9IDEwOyAvKiIpCisgICAgICAg
IDw8IFFTdHJpbmcoImZvbyA9IDEwOyAvKiIpIDw8IGludChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1
bHQ6OkludGVybWVkaWF0ZSkKKyAgICAgICAgPDwgMSA8PCAxMSA8PCAiRXhwZWN0ZWQgYGVuZCBv
ZiBmaWxlJyI7CisgICAgUVRlc3Q6Om5ld1JvdygiZm9vID0gMTAgLyogTXkgY29tbWVudCAqLyIp
CisgICAgICAgIDw8IFFTdHJpbmcoImZvbyA9IDEwIC8qIE15IGNvbW1lbnQgKi8iKSA8PCBpbnQo
UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpWYWxpZCkKKyAgICAgICAgPDwgLTEgPDwgLTEgPDwg
IiI7CisKKyAgICBRVGVzdDo6bmV3Um93KCIvPS8iKQorICAgICAgICA8PCBRU3RyaW5nKCIvPS8i
KSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpWYWxpZCkgPDwgLTEgPDwgLTEgPDwg
IiI7CisgICAgUVRlc3Q6Om5ld1JvdygiLz0vZyIpCisgICAgICAgIDw8IFFTdHJpbmcoIi89L2ci
KSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpWYWxpZCkgPDwgLTEgPDwgLTEgPDwg
IiI7CisgICAgUVRlc3Q6Om5ld1JvdygiL2EvIikKKyAgICAgICAgPDwgUVN0cmluZygiL2EvIikg
PDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6VmFsaWQpIDw8IC0xIDw8IC0xIDw8ICIi
OworICAgIFFUZXN0OjpuZXdSb3coIi9hL2ciKQorICAgICAgICA8PCBRU3RyaW5nKCIvYS9nIikg
PDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6VmFsaWQpIDw8IC0xIDw8IC0xIDw8ICIi
OworfQorCit2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpjaGVja1N5bnRheCgpCit7CisgICAgUUZF
VENIKFFTdHJpbmcsIGNvZGUpOworICAgIFFGRVRDSChpbnQsIGV4cGVjdGVkU3RhdGUpOworICAg
IFFGRVRDSChpbnQsIGVycm9yTGluZU51bWJlcik7CisgICAgUUZFVENIKGludCwgZXJyb3JDb2x1
bW5OdW1iZXIpOworICAgIFFGRVRDSChRU3RyaW5nLCBlcnJvck1lc3NhZ2UpOworCisgICAgUVNj
cmlwdFN5bnRheENoZWNrUmVzdWx0IHJlc3VsdCA9IFFTY3JpcHRFbmdpbmU6OmNoZWNrU3ludGF4
KGNvZGUpOworCisgICAgLy8gYXNzaWdubWVudAorICAgIHsKKyAgICAgICAgUVNjcmlwdFN5bnRh
eENoZWNrUmVzdWx0IGNvcHkgPSByZXN1bHQ7CisgICAgICAgIFFDT01QQVJFKGNvcHkuc3RhdGUo
KSwgcmVzdWx0LnN0YXRlKCkpOworICAgICAgICBRQ09NUEFSRShjb3B5LmVycm9yTGluZU51bWJl
cigpLCByZXN1bHQuZXJyb3JMaW5lTnVtYmVyKCkpOworICAgICAgICBRQ09NUEFSRShjb3B5LmVy
cm9yQ29sdW1uTnVtYmVyKCksIHJlc3VsdC5lcnJvckNvbHVtbk51bWJlcigpKTsKKyAgICAgICAg
UUNPTVBBUkUoY29weS5lcnJvck1lc3NhZ2UoKSwgcmVzdWx0LmVycm9yTWVzc2FnZSgpKTsKKyAg
ICB9CisgICAgeworICAgICAgICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQgY29weShyZXN1bHQp
OworICAgICAgICBRQ09NUEFSRShjb3B5LnN0YXRlKCksIHJlc3VsdC5zdGF0ZSgpKTsKKyAgICAg
ICAgUUNPTVBBUkUoY29weS5lcnJvckxpbmVOdW1iZXIoKSwgcmVzdWx0LmVycm9yTGluZU51bWJl
cigpKTsKKyAgICAgICAgUUNPTVBBUkUoY29weS5lcnJvckNvbHVtbk51bWJlcigpLCByZXN1bHQu
ZXJyb3JDb2x1bW5OdW1iZXIoKSk7CisgICAgICAgIFFDT01QQVJFKGNvcHkuZXJyb3JNZXNzYWdl
KCksIHJlc3VsdC5lcnJvck1lc3NhZ2UoKSk7CisgICAgfQorCisgICAgaWYgKGV4cGVjdGVkU3Rh
dGUgPT0gUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpJbnRlcm1lZGlhdGUpCisgICAgICAgIFFF
WFBFQ1RfRkFJTCgiIiwgIlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6c3RhdGUoKSBkb2Vzbid0
IHJldHVybiB0aGUgSW50ZXJtZWRpYXRlIHN0YXRlIiwgQWJvcnQpOworICAgIFFDT01QQVJFKHJl
c3VsdC5zdGF0ZSgpLCBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlN0YXRlKGV4cGVjdGVkU3Rh
dGUpKTsKKyAgICBRQ09NUEFSRShyZXN1bHQuZXJyb3JMaW5lTnVtYmVyKCksIGVycm9yTGluZU51
bWJlcik7CisgICAgaWYgKGV4cGVjdGVkU3RhdGUgIT0gUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0
OjpWYWxpZCAmJiBlcnJvckNvbHVtbk51bWJlciAhPSAxKQorICAgICAgICAgICAgUUVYUEVDVF9G
QUlMKCIiLCAiUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjplcnJvckNvbHVtbk51bWJlcigpIGRv
ZXNuJ3QgcmV0dXJuIGNvcnJlY3QgdmFsdWUiLCBDb250aW51ZSk7CisgICAgUUNPTVBBUkUocmVz
dWx0LmVycm9yQ29sdW1uTnVtYmVyKCksIGVycm9yQ29sdW1uTnVtYmVyKTsKKyAgICBRQ09NUEFS
RShyZXN1bHQuZXJyb3JNZXNzYWdlKCksIGVycm9yTWVzc2FnZSk7Cit9CisKKwogUVRFU1RfTUFJ
Tih0c3RfUVNjcmlwdEVuZ2luZSkKICNpbmNsdWRlICJ0c3RfcXNjcmlwdGVuZ2luZS5tb2MiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51016</attachid>
            <date>2010-03-18 03:05:40 -0700</date>
            <delta_ts>2010-03-22 06:46:17 -0700</delta_ts>
            <desc>Fix v2</desc>
            <filename>checkV2.diff</filename>
            <type>text/plain</type>
            <size>21683</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5MGY3ZTU3Li44YWUwZjFjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcg
QEAKKzIwMTAtMDMtMTUgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIHN5bnRheCBjaGVja2luZyBpbiB0aGUgUXRTY3JpcHQgQVBJLgorCisgICAg
ICAgIE5ldyBjbGFzcyB3YXMgY3JlYXRlZDsgdGhlIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCB3
aGljaCBtYWluCisgICAgICAgIHJlc3BvbnNpYmlsaXR5IGlzIHRvIHByb3ZpZGUgcmVzdWx0cyBv
ZiB0aGUgRUNNQSBTY3JpcHQgY29kZQorICAgICAgICBzeW50YXggY2hlY2suIFRoZSBjbGFzcyBp
cyBub3QgZnVsbHkgZnVuY3Rpb25hbCBhcyB0aGUgSlNDIEMgQVBJCisgICAgICAgIGRvZXNuJ3Qg
ZXhwb3NlIGFuIGVycm9yIGNvbHVtbiBudW1iZXIsIGJ1dCBpdCBpcyBhIGdvb2Qgc3RhcnQgcG9p
bnQKKyAgICAgICAgZm9yIGEgZnV0dXJlIGRldmVsb3BtZW50LgorCisgICAgICAgIFtRdF0gUXRT
Y3JpcHQgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgZXh0ZW5kZWQgYnkgc3ludGF4IGNoZWNraW5n
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYxMjMK
KworICAgICAgICAqIHF0L2FwaS9RdFNjcmlwdC5wcm86CisgICAgICAgICogcXQvYXBpL3FzY3Jp
cHRlbmdpbmUuY3BwOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6Y2hlY2tTeW50YXgpOgorICAg
ICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmg6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRl
bmdpbmVfcC5jcHA6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y2hlY2tTeW50YXgp
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaDoKKyAgICAgICAgKiBxdC9hcGkv
cXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0U3lu
dGF4Q2hlY2tSZXN1bHQ6OlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCk6CisgICAgICAgIChRU2Ny
aXB0U3ludGF4Q2hlY2tSZXN1bHQ6On5RU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQpOgorICAgICAg
ICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoUVNjcmlw
dFN5bnRheENoZWNrUmVzdWx0OjpzdGF0ZSk6CisgICAgICAgIChRU2NyaXB0U3ludGF4Q2hlY2tS
ZXN1bHQ6OmVycm9yTGluZU51bWJlcik6CisgICAgICAgIChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1
bHQ6OmVycm9yQ29sdW1uTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dDo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdHN5bnRheGNoZWNrcmVz
dWx0Lmg6IEFkZGVkLgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHRf
cC5jcHA6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6
flFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUpOgorICAgICAgICAoUVNjcmlwdFN5bnRh
eENoZWNrUmVzdWx0UHJpdmF0ZTo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKFFTY3JpcHRTeW50
YXhDaGVja1Jlc3VsdFByaXZhdGU6OmVycm9yTGluZU51bWJlcik6CisgICAgICAgICogcXQvYXBp
L3FzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9wLmg6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN5
bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6Z2V0KToKKyAgICAgICAgKFFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdFByaXZhdGU6OlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUpOgorICAgICAg
ICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6c3RhdGUpOgorICAgICAgICAoUVNj
cmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6ZXJyb3JDb2x1bW5OdW1iZXIpOgorICAgICAg
ICAqIHF0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwOgorICAgICAg
ICAodHN0X1FTY3JpcHRFbmdpbmU6OmNoZWNrU3ludGF4X2RhdGEpOgorICAgICAgICAodHN0X1FT
Y3JpcHRFbmdpbmU6OmNoZWNrU3ludGF4KToKKwogMjAxMC0wMy0xMiAgR2F2aW4gQmFycmFjbG91
Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChidWlsZCBmaXgpLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0
LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KaW5kZXggZDYxMzI1NC4u
M2M2OWRkMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybwor
KysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCkBAIC0yMyw2ICsyMyw3IEBA
IFNPVVJDRVMgKz0gICQkUFdEL3FzY3JpcHRlbmdpbmUuY3BwIFwKICAgICAgICAgICAgICQkUFdE
L3FzY3JpcHRlbmdpbmVfcC5jcHAgXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHZhbHVlLmNw
cCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0c3RyaW5nLmNwcCBcCisgICAgICAgICAgICAk
JFBXRC9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuY3BwIFwKIAogSEVBREVSUyArPSAgJCRQV0Qv
cXRzY3JpcHRnbG9iYWwuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXApA
QCAtMzIsOSArMzMsOSBAQCBIRUFERVJTICs9ICAkJFBXRC9xdHNjcmlwdGdsb2JhbC5oIFwKICAg
ICAgICAgICAgICQkUFdEL3FzY3JpcHRjb252ZXJ0ZXJfcC5oIFwKICAgICAgICAgICAgICQkUFdE
L3FzY3JpcHRzdHJpbmcuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0c3RyaW5nX3AuaCBc
CisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuaCBcCiAKIAogIXN0
YXRpYzogREVGSU5FUyArPSBRVF9NQUtFRExMCiAKIERFU1RESVIgPSAkJE9VVFBVVF9ESVIvbGli
Ci0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcAppbmRleCA0MTYzNGY0Li44
YWI4NGY4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5j
cHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCkBAIC0yMiw2
ICsyMiw3IEBACiAjaW5jbHVkZSAicXNjcmlwdGVuZ2luZS5oIgogCiAjaW5jbHVkZSAicXNjcmlw
dGVuZ2luZV9wLmgiCisjaW5jbHVkZSAicXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0X3AuaCIKICNp
bmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgogCiAvKiEKQEAgLTQyLDYgKzQzLDIzIEBAIFFTY3Jp
cHRFbmdpbmU6On5RU2NyaXB0RW5naW5lKCkKIH0KIAogLyohCisgIENoZWNrcyB0aGUgc3ludGF4
IG9mIHRoZSBnaXZlbiBcYSBwcm9ncmFtLiBSZXR1cm5zIGEKKyAgUVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLgorKi8K
K1FTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCBRU2NyaXB0RW5naW5lOjpjaGVja1N5bnRheChjb25z
dCBRU3RyaW5nICZwcm9ncmFtKQoreworICAgIC8vIEZJWE1FIFRoaXMgaXMgbm90IG9wdGltYWwu
CisgICAgLy8gVGhlIEpTQyBDIEFQSSBuZWVkcyBhIGNvbnRleHQgdG8gcGVyZm9ybSBhIHN5bnRh
eCBjaGVjaywgaXQgbWVhbnMgdGhhdCBhIFFTY3JpcHRFbmdpbmVQcml2YXRlCisgICAgLy8gaGFk
IHRvIGJlIGNyZWF0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgc3RhdGljIHNvIHdlIGhhdmUgdG8gY3Jl
YXRlIFFTY3JpcHRFbmdpbmVQcml2YXRlIGZvciBlYWNoCisgICAgLy8gY2FsbC4gV2UgY2FuJ3Qg
cmVtb3ZlIHRoZSAic3RhdGljIiBmb3IgY29tcGF0aWJpbGl0eSByZWFzb24sIGF0IGxlYXN0IHVw
IHRvIFF0NS4KKyAgICAvLyBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlIHRha2VzIG93
bmVyc2hpcCBvZiBuZXdseSBjcmVhdGVkIGVuZ2luZS4gVGhlIGVuZ2luZSB3aWxsIGJlCisgICAg
Ly8ga2VwdCBhcyBsb25nIGFzIGl0IGlzIG5lZWRlZCBmb3IgbGF6eSBldmFsdWF0aW9uIG9mIHBy
b3BlcnRpZXMgb2YKKyAgICAvLyB0aGUgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZS4K
KyAgICBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lID0gbmV3IFFTY3JpcHRFbmdpbmVQcml2
YXRlKC8qIHFfcHRyICovIDApOworICAgIHJldHVybiBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQ
cml2YXRlOjpnZXQoZW5naW5lLT5jaGVja1N5bnRheChwcm9ncmFtKSk7Cit9CisKKy8qIQogICAg
IEV2YWx1YXRlcyBcYSBwcm9ncmFtLCB1c2luZyBcYSBsaW5lTnVtYmVyIGFzIHRoZSBiYXNlIGxp
bmUgbnVtYmVyLAogICAgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24u
CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmggYi9K
YXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oCmluZGV4IGJhOWE5YmMuLmMxNmZl
NTMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaApAQCAtMjEsNiArMjEsNyBA
QAogI2RlZmluZSBxc2NyaXB0ZW5naW5lX2gKIAogI2luY2x1ZGUgInFzY3JpcHRzdHJpbmcuaCIK
KyNpbmNsdWRlICJxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuaCIKICNpbmNsdWRlIDxRdENvcmUv
cW9iamVjdC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgogI2luY2x1ZGUgPFF0
Q29yZS9xc3RyaW5nLmg+CkBAIC0zNiw2ICszNyw3IEBAIHB1YmxpYzoKICAgICBRU2NyaXB0RW5n
aW5lKCk7CiAgICAgflFTY3JpcHRFbmdpbmUoKTsKIAorICAgIHN0YXRpYyBRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHQgY2hlY2tTeW50YXgoY29uc3QgUVN0cmluZyYgcHJvZ3JhbSk7CiAgICAgUVNj
cmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFFTdHJpbmcmIHByb2dyYW0sIGNvbnN0IFFTdHJpbmcm
IGZpbGVOYW1lID0gUVN0cmluZygpLCBpbnQgbGluZU51bWJlciA9IDEpOwogICAgIHZvaWQgY29s
bGVjdEdhcmJhZ2UoKTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmVfcC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmNw
cAppbmRleCBkZThhMzU1Li5hMWY1N2I2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZV9wLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlw
dGVuZ2luZV9wLmNwcApAQCAtMzgsNiArMzgsMTUgQEAgUVNjcmlwdEVuZ2luZVByaXZhdGU6On5R
U2NyaXB0RW5naW5lUHJpdmF0ZSgpCiAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRl
eHQpOwogfQogCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKiBRU2NyaXB0RW5naW5l
UHJpdmF0ZTo6Y2hlY2tTeW50YXgoY29uc3QgUVN0cmluZyYgcHJvZ3JhbSkKK3sKKyAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbjsKKyAgICBpZiAoSlNDaGVja1NjcmlwdFN5bnRheChtX2NvbnRleHQs
IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKHByb2dyYW0pLCAvKiB1cmwgKi8gMCwgLyogc3Rh
cnRpbmcgbGluZSAqLyAxLCAmZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0
U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKHRoaXMpOworICAgIEpTVmFsdWVQcm90ZWN0KG1fY29u
dGV4dCwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gbmV3IFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dFByaXZhdGUodGhpcywgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oZXhjZXB0aW9uKSk7Cit9CisK
IC8qIQogICAgIEV2YWx1YXRlcyBwcm9ncmFtIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhl
IGV2YWx1YXRpb24uCiAgICAgXGludGVybmFsCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGVuZ2luZV9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVu
Z2luZV9wLmgKaW5kZXggYzU4M2RhYy4uNWMxYWQ0OCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0ZW5naW5lX3AuaApAQCAtMjMsMTIgKzIzLDE0IEBACiAjaW5jbHVkZSAicXNjcmlwdGNv
bnZlcnRlcl9wLmgiCiAjaW5jbHVkZSAicXNjcmlwdGVuZ2luZS5oIgogI2luY2x1ZGUgInFzY3Jp
cHRzdHJpbmdfcC5oIgorI2luY2x1ZGUgInFzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9wLmgiCiAj
aW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgogI2luY2x1ZGUgPFF0Q29y
ZS9xc3RyaW5nLmg+CiAKIGNsYXNzIFFTY3JpcHRFbmdpbmU7CitjbGFzcyBRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHRQcml2YXRlOwogCiBjbGFzcyBRU2NyaXB0RW5naW5lUHJpdmF0ZSA6IHB1Ymxp
YyBRU2hhcmVkRGF0YSB7CiBwdWJsaWM6CkBAIC0zOCw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICBR
U2NyaXB0RW5naW5lUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKik7CiAgICAgflFTY3JpcHRF
bmdpbmVQcml2YXRlKCk7CiAKKyAgICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKiBj
aGVja1N5bnRheChjb25zdCBRU3RyaW5nJiBwcm9ncmFtKTsKICAgICBRU2NyaXB0VmFsdWVQcml2
YXRlKiBldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxl
TmFtZSwgaW50IGxpbmVOdW1iZXIpOwogICAgIGlubGluZSB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7
CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2ty
ZXN1bHQuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzeW50YXhjaGVja3Jlc3Vs
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NWY1YgotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1
bHQuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuaCIKKyNpbmNs
dWRlICJxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHRfcC5oIgorCisvKiEKKyAgXGNsYXNzIFFTY3Jp
cHRTeW50YXhDaGVja1Jlc3VsdAorCisgIFxicmllZiBUaGUgUVNjcmlwdFN5bnRheENoZWNrUmVz
dWx0IGNsYXNzIHByb3ZpZGVzIHRoZSByZXN1bHQgb2YgYSBzY3JpcHQgc3ludGF4IGNoZWNrLgor
CisgIFxpbmdyb3VwIHNjcmlwdAorICBcbWFpbmNsYXNzCisKKyAgUVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0IGlzIHJldHVybmVkIGJ5IFFTY3JpcHRFbmdpbmU6OmNoZWNrU3ludGF4KCkgdG8KKyAg
cHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ludGFjdGljYWwgKGluKWNvcnJlY3RuZXNz
IG9mIGEgc2NyaXB0LgorKi8KKworLyohCisgICAgXGVudW0gUVNjcmlwdFN5bnRheENoZWNrUmVz
dWx0OjpTdGF0ZQorCisgICAgVGhpcyBlbnVtIHNwZWNpZmllcyB0aGUgc3RhdGUgb2YgYSBzeW50
YXggY2hlY2suCisKKyAgICBcdmFsdWUgRXJyb3IgVGhlIHByb2dyYW0gY29udGFpbnMgYSBzeW50
YXggZXJyb3IuCisgICAgXHZhbHVlIEludGVybWVkaWF0ZSBUaGUgcHJvZ3JhbSBpcyBpbmNvbXBs
ZXRlLgorICAgIFx2YWx1ZSBWYWxpZCBUaGUgcHJvZ3JhbSBpcyBhIHN5bnRhY3RpY2FsbHkgY29y
cmVjdCBRdCBTY3JpcHQgcHJvZ3JhbS4KKyovCisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3IFFT
Y3JpcHRTeW50YXhDaGVja1Jlc3VsdCBmcm9tIHRoZSBcYSBvdGhlciByZXN1bHQuCisqLworUVNj
cmlwdFN5bnRheENoZWNrUmVzdWx0OjpRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQoY29uc3QgUVNj
cmlwdFN5bnRheENoZWNrUmVzdWx0JiBvdGhlcikKKyAgICA6IGRfcHRyKG90aGVyLmRfcHRyKQor
e30KKworLyohCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0IGZy
b20gYW4gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uCisgIFxpbnRlcm5hbAorKi8KK1FTY3JpcHRT
eW50YXhDaGVja1Jlc3VsdDo6UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0KFFTY3JpcHRTeW50YXhD
aGVja1Jlc3VsdFByaXZhdGUqIGQpCisgICAgOiBkX3B0cihkKQore30KKworLyohCisgIERlc3Ry
b3lzIHRoaXMgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0LgorKi8KK1FTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdDo6flFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCgpCit7fQorCisvKiEKKyAgQXNzaWdu
cyB0aGUgXGEgb3RoZXIgcmVzdWx0IHRvIHRoaXMgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0LCBh
bmQgcmV0dXJucyBhCisgIHJlZmVyZW5jZSB0byB0aGlzIFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dC4KKyovCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQmIFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dDo6b3BlcmF0b3I9KGNvbnN0IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCYgb3RoZXIpCit7Cisg
ICAgZF9wdHIgPSBvdGhlci5kX3B0cjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKKy8qIQorICBS
ZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGlzIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdC4KKyovCitR
U2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlN0YXRlIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6
c3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+c3RhdGUoKTsKK30KKworLyohCisg
IFJldHVybnMgdGhlIGVycm9yIGxpbmUgbnVtYmVyIG9mIHRoaXMgUVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0LCBvciAtMSBpZgorICB0aGVyZSBpcyBubyBlcnJvci4KKworICBcc2Egc3RhdGUoKSwg
ZXJyb3JNZXNzYWdlKCkKKyovCitpbnQgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjplcnJvckxp
bmVOdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+ZXJyb3JMaW5lTnVtYmVyKCk7
Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBlcnJvciBjb2x1bW4gbnVtYmVyIG9mIHRoaXMgUVNj
cmlwdFN5bnRheENoZWNrUmVzdWx0LCBvciAtMSBpZgorICB0aGVyZSBpcyBubyBlcnJvci4KKwor
ICBcc2Egc3RhdGUoKSwgZXJyb3JMaW5lTnVtYmVyKCkKKyovCitpbnQgUVNjcmlwdFN5bnRheENo
ZWNrUmVzdWx0OjplcnJvckNvbHVtbk51bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRy
LT5lcnJvckNvbHVtbk51bWJlcigpOworfQorCisvKiEKKyAgUmV0dXJucyB0aGUgZXJyb3IgbWVz
c2FnZSBvZiB0aGlzIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCwgb3IgYW4gZW1wdHkKKyAgc3Ry
aW5nIGlmIHRoZXJlIGlzIG5vIGVycm9yLgorCisgIFxzYSBzdGF0ZSgpLCBlcnJvckxpbmVOdW1i
ZXIoKQorKi8KK1FTdHJpbmcgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjplcnJvck1lc3NhZ2Uo
KSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+ZXJyb3JNZXNzYWdlKCk7Cit9CisKK1FTY3Jp
cHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGU6On5RU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2
YXRlKCkKK3sKKyAgICBpZiAobV9leGNlcHRpb24pCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3Qo
bV9lbmdpbmUtPmNvbnRleHQoKSwgbV9leGNlcHRpb24pOworfQorCitRU3RyaW5nIFFTY3JpcHRT
eW50YXhDaGVja1Jlc3VsdFByaXZhdGU6OmVycm9yTWVzc2FnZSgpIGNvbnN0Cit7CisgICAgaWYg
KG1fZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gUVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmco
SlNWYWx1ZVRvU3RyaW5nQ29weShtX2VuZ2luZS0+Y29udGV4dCgpLCBtX2V4Y2VwdGlvbiwgLyog
ZXhjZXB0aW9uICovIDApKTsKKyAgICByZXR1cm4gUVN0cmluZygpOworfQorCitpbnQgUVNjcmlw
dFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6ZXJyb3JMaW5lTnVtYmVyKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gLTE7CisgICAgLy8gbV9leGNlcHRp
b24gaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEV4Y2VwdGlvbiBzbyBpdCBoYXMgImxpbmUiIGF0dHJp
YnV0ZS4KKyAgICBKU1ZhbHVlUmVmIGxpbmUgPSBKU09iamVjdEdldFByb3BlcnR5KG1fZW5naW5l
LT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFT
Y3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKCJsaW5lIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBleGNlcHRpb25zICovMCk7CisgICAgcmV0dXJuIEpTVmFs
dWVUb051bWJlcihtX2VuZ2luZS0+Y29udGV4dCgpLCBsaW5lLCAvKiBleGNlcHRpb25zICovMCk7
Cit9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN5bnRheGNoZWNr
cmVzdWx0LmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1Nzc0NAotLS0gL2Rldi9u
dWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQu
aApAQCAtMCwwICsxLDUwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHRz
eW50YXhjaGVja3Jlc3VsdF9oCisjZGVmaW5lIHFzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9oCisK
KyNpbmNsdWRlICJxdHNjcmlwdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0
YS5oPgorCitjbGFzcyBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlOworY2xhc3MgUV9K
QVZBU0NSSVBUX0VYUE9SVCBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQgeworcHVibGljOgorICAg
IGVudW0gU3RhdGUgeworICAgICAgICBFcnJvciwKKyAgICAgICAgSW50ZXJtZWRpYXRlLAorICAg
ICAgICBWYWxpZAorICAgIH07CisKKyAgICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQoY29uc3Qg
UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0JiBvdGhlcik7CisgICAgflFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdCgpOworICAgIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCYgb3BlcmF0b3I9KGNvbnN0
IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCYgb3RoZXIpOworCisgICAgU3RhdGUgc3RhdGUoKSBj
b25zdDsKKyAgICBpbnQgZXJyb3JMaW5lTnVtYmVyKCkgY29uc3Q7CisgICAgaW50IGVycm9yQ29s
dW1uTnVtYmVyKCkgY29uc3Q7CisgICAgUVN0cmluZyBlcnJvck1lc3NhZ2UoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQoUVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0UHJpdmF0ZSogZCk7CisgICAgUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2Ny
aXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlPiBkX3B0cjsKKworICAgIGZyaWVuZCBjbGFzcyBR
U2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlOworfTsKKyNlbmRpZiAvLyBxc2NyaXB0c3lu
dGF4Y2hlY2tyZXN1bHRfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRzeW50YXhjaGVja3Jlc3VsdF9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN5
bnRheGNoZWNrcmVzdWx0X3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZTFhMTMxCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRz
eW50YXhjaGVja3Jlc3VsdF9wLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHRfcF9oCisjZGVmaW5lIHFzY3JpcHRz
eW50YXhjaGVja3Jlc3VsdF9wX2gKKworI2luY2x1ZGUgInFzY3JpcHRjb252ZXJ0ZXJfcC5oIgor
I2luY2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgorI2luY2x1ZGUgInFzY3JpcHRzeW50YXhjaGVj
a3Jlc3VsdC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNs
dWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKworY2xhc3MgUVNjcmlwdFN5bnRheENoZWNrUmVz
dWx0UHJpdmF0ZSA6IHB1YmxpYyBRU2hhcmVkRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIGlu
bGluZSBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQgZ2V0KFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dFByaXZhdGUqIHApOworICAgIGlubGluZSBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRl
KGNvbnN0IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdpbmUpOworICAgIGlubGluZSBRU2NyaXB0
U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdp
bmUsIEpTT2JqZWN0UmVmIHZhbHVlKTsKKyAgICB+UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJp
dmF0ZSgpOworCisgICAgaW5saW5lIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6U3RhdGUgc3Rh
dGUoKSBjb25zdDsKKyAgICBpbnQgZXJyb3JMaW5lTnVtYmVyKCkgY29uc3Q7CisgICAgaW5saW5l
IGludCBlcnJvckNvbHVtbk51bWJlcigpIGNvbnN0OworICAgIFFTdHJpbmcgZXJyb3JNZXNzYWdl
KCkgY29uc3Q7Citwcml2YXRlOgorICAgIEpTT2JqZWN0UmVmIG1fZXhjZXB0aW9uOworICAgIFFT
Y3JpcHRFbmdpbmVQdHIgbV9lbmdpbmU7Cit9OworCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQg
UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6Z2V0KFFTY3JpcHRTeW50YXhDaGVja1Jl
c3VsdFByaXZhdGUqIHApCit7CisgICAgcmV0dXJuIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdChw
KTsKK30KKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6UVNjcmlwdFN5bnRheENo
ZWNrUmVzdWx0UHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lKQorICAg
IDogbV9leGNlcHRpb24oMCkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2lu
ZVByaXZhdGUqPihlbmdpbmUpKQore30KKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0
ZTo6UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lUHJp
dmF0ZSogZW5naW5lLCBKU09iamVjdFJlZiB2YWx1ZSkKKyAgICA6IG1fZXhjZXB0aW9uKHZhbHVl
KQorICAgICwgbV9lbmdpbmUoY29uc3RfY2FzdDxRU2NyaXB0RW5naW5lUHJpdmF0ZSo+KGVuZ2lu
ZSkpCit7fQorCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlN0YXRlIFFTY3JpcHRTeW50YXhD
aGVja1Jlc3VsdFByaXZhdGU6OnN0YXRlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRSBUaGlzIGZ1
bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6SW50ZXJtZWRp
YXRlCisgICAgcmV0dXJuIG1fZXhjZXB0aW9uID8gUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpF
cnJvciA6IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6VmFsaWQ7Cit9CisKK2ludCBRU2NyaXB0
U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlOjplcnJvckNvbHVtbk51bWJlcigpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUUgSlNDIEMgQVBJIGRvZXNuJ3QgZXhwb3NlIHRoZSBlcnJvciBjb2x1bW4gbnVt
YmVyLgorICAgIHJldHVybiBtX2V4Y2VwdGlvbiA/IDEgOiAtMTsKK30KKworCisjZW5kaWYgLy8g
cXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0X3BfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNwcAppbmRleCBi
MzZlMzY0Li5iOGZkZDIwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2Ny
aXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90
ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNwcApAQCAtMTgsNiArMTgsNyBA
QAogKi8KIAogI2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0c3lu
dGF4Y2hlY2tyZXN1bHQuaCIKICNpbmNsdWRlICJxc2NyaXB0dmFsdWUuaCIKICNpbmNsdWRlIDxR
dFRlc3QvcXRlc3QuaD4KIApAQCAtMzcsNiArMzgsOCBAQCBwcml2YXRlIHNsb3RzOgogICAgIHZv
aWQgY29sbGVjdEdhcmJhZ2UoKTsKICAgICB2b2lkIG51bGxWYWx1ZSgpOwogICAgIHZvaWQgdW5k
ZWZpbmVkVmFsdWUoKTsKKyAgICB2b2lkIGNoZWNrU3ludGF4X2RhdGEoKTsKKyAgICB2b2lkIGNo
ZWNrU3ludGF4KCk7CiB9OwogCiAvKiBFdmFsdWF0aW5nIGEgc2NyaXB0IHRoYXQgdGhyb3cgYW4g
dW5oYW5kbGVkIGV4Y2VwdGlvbiBzaG91bGQgcmV0dXJuIGFuIGludmFsaWQgdmFsdWUuICovCkBA
IC03Myw1ICs3Niw5OCBAQCB2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjp1bmRlZmluZWRWYWx1ZSgp
CiAgICAgUVZFUklGWSh2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKIH0KIAordm9pZCB0c3RfUVNjcmlw
dEVuZ2luZTo6Y2hlY2tTeW50YXhfZGF0YSgpCit7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3Ry
aW5nPigiY29kZSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48aW50PigiZXhwZWN0ZWRTdGF0ZSIp
OworICAgIFFUZXN0OjphZGRDb2x1bW48aW50PigiZXJyb3JMaW5lTnVtYmVyIik7CisgICAgUVRl
c3Q6OmFkZENvbHVtbjxpbnQ+KCJlcnJvckNvbHVtbk51bWJlciIpOworICAgIFFUZXN0OjphZGRD
b2x1bW48UVN0cmluZz4oImVycm9yTWVzc2FnZSIpOworCisgICAgUVRlc3Q6Om5ld1JvdygiMCIp
CisgICAgICAgIDw8IFFTdHJpbmcoIjAiKSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0
OjpWYWxpZCkKKyAgICAgICAgPDwgLTEgPDwgLTEgPDwgIiI7CisgICAgUVRlc3Q6Om5ld1Jvdygi
aWYgKCIpCisgICAgICAgIDw8IFFTdHJpbmcoImlmIChcbiIpIDw8IGludChRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHQ6OkludGVybWVkaWF0ZSkKKyAgICAgICAgPDwgMSA8PCA0IDw8ICIiOworICAg
IFFUZXN0OjpuZXdSb3coImlmIGVsc2UiKQorICAgICAgICA8PCBRU3RyaW5nKCJcbmlmIGVsc2Ui
KSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpFcnJvcikKKyAgICAgICAgPDwgMiA8
PCA0IDw8ICJTeW50YXhFcnJvcjogUGFyc2UgZXJyb3IiOworICAgIFFUZXN0OjpuZXdSb3coIntp
Zn0iKQorICAgICAgICAgICAgPDwgUVN0cmluZygie1xue1xuaWZcbn1cbiIpIDw8IGludChRU2Ny
aXB0U3ludGF4Q2hlY2tSZXN1bHQ6OkVycm9yKQorICAgICAgICA8PCA0IDw8IDEgPDwgIlN5bnRh
eEVycm9yOiBQYXJzZSBlcnJvciI7CisgICAgUVRlc3Q6Om5ld1JvdygiZm9vWyIpCisgICAgICAg
IDw8IFFTdHJpbmcoImZvb1siKSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpFcnJv
cikKKyAgICAgICAgPDwgMSA8PCA0IDw8ICJTeW50YXhFcnJvcjogUGFyc2UgZXJyb3IiOworICAg
IFFUZXN0OjpuZXdSb3coImZvb1snYmFyJ10iKQorICAgICAgICA8PCBRU3RyaW5nKCJmb29bJ2Jh
ciddIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6VmFsaWQpCisgICAgICAgIDw8
IC0xIDw8IC0xIDw8ICIiOworCisgICAgUVRlc3Q6Om5ld1JvdygiLyoiKQorICAgICAgICA8PCBR
U3RyaW5nKCIvKiIpIDw8IGludChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OkludGVybWVkaWF0
ZSkKKyAgICAgICAgPDwgMSA8PCAxIDw8ICJVbmNsb3NlZCBjb21tZW50IGF0IGVuZCBvZiBmaWxl
IjsKKyAgICBRVGVzdDo6bmV3Um93KCIvKlxuTXkgY29tbWVudCIpCisgICAgICAgIDw8IFFTdHJp
bmcoIi8qXG5NeSBjb21tZW50IikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6SW50
ZXJtZWRpYXRlKQorICAgICAgICA8PCAxIDw8IDEgPDwgIlVuY2xvc2VkIGNvbW1lbnQgYXQgZW5k
IG9mIGZpbGUiOworICAgIFFUZXN0OjpuZXdSb3coIi8qXG5NeSBjb21tZW50ICovXG5mb28gPSAx
MCIpCisgICAgICAgIDw8IFFTdHJpbmcoIi8qXG5NeSBjb21tZW50ICovXG5mb28gPSAxMCIpIDw8
IGludChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlZhbGlkKQorICAgICAgICA8PCAtMSA8PCAt
MSA8PCAiIjsKKyAgICBRVGVzdDo6bmV3Um93KCJmb28gPSAxMCAvKiIpCisgICAgICAgIDw8IFFT
dHJpbmcoImZvbyA9IDEwIC8qIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6SW50
ZXJtZWRpYXRlKQorICAgICAgICA8PCAtMSA8PCAtMSA8PCAiIjsKKyAgICBRVGVzdDo6bmV3Um93
KCJmb28gPSAxMDsgLyoiKQorICAgICAgICA8PCBRU3RyaW5nKCJmb28gPSAxMDsgLyoiKSA8PCBp
bnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpJbnRlcm1lZGlhdGUpCisgICAgICAgIDw8IDEg
PDwgMTEgPDwgIkV4cGVjdGVkIGBlbmQgb2YgZmlsZSciOworICAgIFFUZXN0OjpuZXdSb3coImZv
byA9IDEwIC8qIE15IGNvbW1lbnQgKi8iKQorICAgICAgICA8PCBRU3RyaW5nKCJmb28gPSAxMCAv
KiBNeSBjb21tZW50ICovIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6VmFsaWQp
CisgICAgICAgIDw8IC0xIDw8IC0xIDw8ICIiOworCisgICAgUVRlc3Q6Om5ld1JvdygiLz0vIikK
KyAgICAgICAgPDwgUVN0cmluZygiLz0vIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dDo6VmFsaWQpIDw8IC0xIDw8IC0xIDw8ICIiOworICAgIFFUZXN0OjpuZXdSb3coIi89L2ciKQor
ICAgICAgICA8PCBRU3RyaW5nKCIvPS9nIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dDo6VmFsaWQpIDw8IC0xIDw8IC0xIDw8ICIiOworICAgIFFUZXN0OjpuZXdSb3coIi9hLyIpCisg
ICAgICAgIDw8IFFTdHJpbmcoIi9hLyIpIDw8IGludChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6
OlZhbGlkKSA8PCAtMSA8PCAtMSA8PCAiIjsKKyAgICBRVGVzdDo6bmV3Um93KCIvYS9nIikKKyAg
ICAgICAgPDwgUVN0cmluZygiL2EvZyIpIDw8IGludChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6
OlZhbGlkKSA8PCAtMSA8PCAtMSA8PCAiIjsKK30KKwordm9pZCB0c3RfUVNjcmlwdEVuZ2luZTo6
Y2hlY2tTeW50YXgoKQoreworICAgIFFGRVRDSChRU3RyaW5nLCBjb2RlKTsKKyAgICBRRkVUQ0go
aW50LCBleHBlY3RlZFN0YXRlKTsKKyAgICBRRkVUQ0goaW50LCBlcnJvckxpbmVOdW1iZXIpOwor
ICAgIFFGRVRDSChpbnQsIGVycm9yQ29sdW1uTnVtYmVyKTsKKyAgICBRRkVUQ0goUVN0cmluZywg
ZXJyb3JNZXNzYWdlKTsKKworICAgIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCByZXN1bHQgPSBR
U2NyaXB0RW5naW5lOjpjaGVja1N5bnRheChjb2RlKTsKKworICAgIC8vIGFzc2lnbm1lbnQKKyAg
ICB7CisgICAgICAgIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCBjb3B5ID0gcmVzdWx0OworICAg
ICAgICBRQ09NUEFSRShjb3B5LnN0YXRlKCksIHJlc3VsdC5zdGF0ZSgpKTsKKyAgICAgICAgUUNP
TVBBUkUoY29weS5lcnJvckxpbmVOdW1iZXIoKSwgcmVzdWx0LmVycm9yTGluZU51bWJlcigpKTsK
KyAgICAgICAgUUNPTVBBUkUoY29weS5lcnJvckNvbHVtbk51bWJlcigpLCByZXN1bHQuZXJyb3JD
b2x1bW5OdW1iZXIoKSk7CisgICAgICAgIFFDT01QQVJFKGNvcHkuZXJyb3JNZXNzYWdlKCksIHJl
c3VsdC5lcnJvck1lc3NhZ2UoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFN5bnRh
eENoZWNrUmVzdWx0IGNvcHkocmVzdWx0KTsKKyAgICAgICAgUUNPTVBBUkUoY29weS5zdGF0ZSgp
LCByZXN1bHQuc3RhdGUoKSk7CisgICAgICAgIFFDT01QQVJFKGNvcHkuZXJyb3JMaW5lTnVtYmVy
KCksIHJlc3VsdC5lcnJvckxpbmVOdW1iZXIoKSk7CisgICAgICAgIFFDT01QQVJFKGNvcHkuZXJy
b3JDb2x1bW5OdW1iZXIoKSwgcmVzdWx0LmVycm9yQ29sdW1uTnVtYmVyKCkpOworICAgICAgICBR
Q09NUEFSRShjb3B5LmVycm9yTWVzc2FnZSgpLCByZXN1bHQuZXJyb3JNZXNzYWdlKCkpOworICAg
IH0KKworICAgIGlmIChleHBlY3RlZFN0YXRlID09IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6
SW50ZXJtZWRpYXRlKQorICAgICAgICBRRVhQRUNUX0ZBSUwoIiIsICJRU2NyaXB0U3ludGF4Q2hl
Y2tSZXN1bHQ6OnN0YXRlKCkgZG9lc24ndCByZXR1cm4gdGhlIEludGVybWVkaWF0ZSBzdGF0ZSIs
IEFib3J0KTsKKyAgICBRQ09NUEFSRShyZXN1bHQuc3RhdGUoKSwgUVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0OjpTdGF0ZShleHBlY3RlZFN0YXRlKSk7CisgICAgUUNPTVBBUkUocmVzdWx0LmVycm9y
TGluZU51bWJlcigpLCBlcnJvckxpbmVOdW1iZXIpOworICAgIGlmIChleHBlY3RlZFN0YXRlICE9
IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6VmFsaWQgJiYgZXJyb3JDb2x1bW5OdW1iZXIgIT0g
MSkKKyAgICAgICAgICAgIFFFWFBFQ1RfRkFJTCgiIiwgIlFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dDo6ZXJyb3JDb2x1bW5OdW1iZXIoKSBkb2Vzbid0IHJldHVybiBjb3JyZWN0IHZhbHVlIiwgQ29u
dGludWUpOworICAgIFFDT01QQVJFKHJlc3VsdC5lcnJvckNvbHVtbk51bWJlcigpLCBlcnJvckNv
bHVtbk51bWJlcik7CisgICAgUUNPTVBBUkUocmVzdWx0LmVycm9yTWVzc2FnZSgpLCBlcnJvck1l
c3NhZ2UpOworfQorCisKIFFURVNUX01BSU4odHN0X1FTY3JpcHRFbmdpbmUpCiAjaW5jbHVkZSAi
dHN0X3FzY3JpcHRlbmdpbmUubW9jIgo=
</data>
<flag name="review"
          id="34202"
          type_id="1"
          status="+"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="34203"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51281</attachid>
            <date>2010-03-22 06:46:17 -0700</date>
            <delta_ts>2010-03-22 07:38:00 -0700</delta_ts>
            <desc>Fix v3</desc>
            <filename>checkV3.diff</filename>
            <type>text/plain</type>
            <size>21841</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA4NDY1MmYzLi4yNTRkMzVhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcg
QEAKKzIwMTAtMDMtMTUgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIHN5bnRheCBjaGVja2luZyBpbiB0aGUgUXRTY3JpcHQgQVBJLgorCisgICAg
ICAgIE5ldyBjbGFzcyB3YXMgY3JlYXRlZDsgdGhlIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCB3
aGljaCBtYWluCisgICAgICAgIHJlc3BvbnNpYmlsaXR5IGlzIHRvIHByb3ZpZGUgcmVzdWx0cyBv
ZiB0aGUgRUNNQSBTY3JpcHQgY29kZQorICAgICAgICBzeW50YXggY2hlY2suIFRoZSBjbGFzcyBp
cyBub3QgZnVsbHkgZnVuY3Rpb25hbCBhcyB0aGUgSlNDIEMgQVBJCisgICAgICAgIGRvZXNuJ3Qg
ZXhwb3NlIGFuIGVycm9yIGNvbHVtbiBudW1iZXIsIGJ1dCBpdCBpcyBhIGdvb2Qgc3RhcnQgcG9p
bnQKKyAgICAgICAgZm9yIGEgZnV0dXJlIGRldmVsb3BtZW50LgorCisgICAgICAgIFtRdF0gUXRT
Y3JpcHQgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgZXh0ZW5kZWQgYnkgc3ludGF4IGNoZWNraW5n
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYxMjMK
KworICAgICAgICAqIHF0L2FwaS9RdFNjcmlwdC5wcm86CisgICAgICAgICogcXQvYXBpL3FzY3Jp
cHRlbmdpbmUuY3BwOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6Y2hlY2tTeW50YXgpOgorICAg
ICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmg6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRl
bmdpbmVfcC5jcHA6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y2hlY2tTeW50YXgp
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaDoKKyAgICAgICAgKiBxdC9hcGkv
cXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0U3lu
dGF4Q2hlY2tSZXN1bHQ6OlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCk6CisgICAgICAgIChRU2Ny
aXB0U3ludGF4Q2hlY2tSZXN1bHQ6On5RU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQpOgorICAgICAg
ICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoUVNjcmlw
dFN5bnRheENoZWNrUmVzdWx0OjpzdGF0ZSk6CisgICAgICAgIChRU2NyaXB0U3ludGF4Q2hlY2tS
ZXN1bHQ6OmVycm9yTGluZU51bWJlcik6CisgICAgICAgIChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1
bHQ6OmVycm9yQ29sdW1uTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRTeW50YXhDaGVja1Jlc3Vs
dDo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdHN5bnRheGNoZWNrcmVz
dWx0Lmg6IEFkZGVkLgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHRf
cC5jcHA6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6
flFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUpOgorICAgICAgICAoUVNjcmlwdFN5bnRh
eENoZWNrUmVzdWx0UHJpdmF0ZTo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKFFTY3JpcHRTeW50
YXhDaGVja1Jlc3VsdFByaXZhdGU6OmVycm9yTGluZU51bWJlcik6CisgICAgICAgICogcXQvYXBp
L3FzY3JpcHRzeW50YXhjaGVja3Jlc3VsdF9wLmg6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN5
bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6Z2V0KToKKyAgICAgICAgKFFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdFByaXZhdGU6OlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUpOgorICAgICAg
ICAoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6c3RhdGUpOgorICAgICAgICAoUVNj
cmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTo6ZXJyb3JDb2x1bW5OdW1iZXIpOgorICAgICAg
ICAqIHF0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwOgorICAgICAg
ICAodHN0X1FTY3JpcHRFbmdpbmU6OmNoZWNrU3ludGF4X2RhdGEpOgorICAgICAgICAodHN0X1FT
Y3JpcHRFbmdpbmU6OmNoZWNrU3ludGF4KToKKwogMjAxMC0wMy0yMSAgSmVkcnplaiBOb3dhY2tp
ICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1v
biBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5w
cm8gYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCmluZGV4IDM5OWFkOGUuLmE4
NmUyMjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybwpAQCAtMjQsNiArMjQsNyBAQCBT
T1VSQ0VTICs9ICAkJFBXRC9xc2NyaXB0ZW5naW5lLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9x
c2NyaXB0dmFsdWUuY3BwIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRzdHJpbmcuY3BwIFwK
ICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRwcm9ncmFtLmNwcCBcCisgICAgICAgICAgICAkJFBX
RC9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuY3BwIFwKIAogSEVBREVSUyArPSAgJCRQV0QvcXRz
Y3JpcHRnbG9iYWwuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXApAQCAt
MzUsNiArMzYsNyBAQCBIRUFERVJTICs9ICAkJFBXRC9xdHNjcmlwdGdsb2JhbC5oIFwKICAgICAg
ICAgICAgICQkUFdEL3FzY3JpcHRzdHJpbmdfcC5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3Jp
cHRwcm9ncmFtLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHByb2dyYW1fcC5oIFwKKyAg
ICAgICAgICAgICQkUFdEL3FzY3JpcHRzeW50YXhjaGVja3Jlc3VsdC5oIFwKIAogCiAhc3RhdGlj
OiBERUZJTkVTICs9IFFUX01BS0VETEwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZW5naW5lLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
LmNwcAppbmRleCA0M2NkZTI3Li42YTNlZGMxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJxc2NyaXB0ZW5naW5l
X3AuaCIKICNpbmNsdWRlICJxc2NyaXB0cHJvZ3JhbV9wLmgiCisjaW5jbHVkZSAicXNjcmlwdHN5
bnRheGNoZWNrcmVzdWx0X3AuaCIKICNpbmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgogCiAvKiEK
QEAgLTQzLDYgKzQ0LDIzIEBAIFFTY3JpcHRFbmdpbmU6On5RU2NyaXB0RW5naW5lKCkKIH0KIAog
LyohCisgIENoZWNrcyB0aGUgc3ludGF4IG9mIHRoZSBnaXZlbiBcYSBwcm9ncmFtLiBSZXR1cm5z
IGEKKyAgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBy
ZXN1bHQgb2YgdGhlIGNoZWNrLgorKi8KK1FTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCBRU2NyaXB0
RW5naW5lOjpjaGVja1N5bnRheChjb25zdCBRU3RyaW5nICZwcm9ncmFtKQoreworICAgIC8vIEZJ
WE1FIFRoaXMgaXMgbm90IG9wdGltYWwuCisgICAgLy8gVGhlIEpTQyBDIEFQSSBuZWVkcyBhIGNv
bnRleHQgdG8gcGVyZm9ybSBhIHN5bnRheCBjaGVjaywgaXQgbWVhbnMgdGhhdCBhIFFTY3JpcHRF
bmdpbmVQcml2YXRlCisgICAgLy8gaGFkIHRvIGJlIGNyZWF0ZWQuIFRoaXMgZnVuY3Rpb24gaXMg
c3RhdGljIHNvIHdlIGhhdmUgdG8gY3JlYXRlIFFTY3JpcHRFbmdpbmVQcml2YXRlIGZvciBlYWNo
CisgICAgLy8gY2FsbC4gV2UgY2FuJ3QgcmVtb3ZlIHRoZSAic3RhdGljIiBmb3IgY29tcGF0aWJp
bGl0eSByZWFzb24sIGF0IGxlYXN0IHVwIHRvIFF0NS4KKyAgICAvLyBRU2NyaXB0U3ludGF4Q2hl
Y2tSZXN1bHRQcml2YXRlIHRha2VzIG93bmVyc2hpcCBvZiBuZXdseSBjcmVhdGVkIGVuZ2luZS4g
VGhlIGVuZ2luZSB3aWxsIGJlCisgICAgLy8ga2VwdCBhcyBsb25nIGFzIGl0IGlzIG5lZWRlZCBm
b3IgbGF6eSBldmFsdWF0aW9uIG9mIHByb3BlcnRpZXMgb2YKKyAgICAvLyB0aGUgUVNjcmlwdFN5
bnRheENoZWNrUmVzdWx0UHJpdmF0ZS4KKyAgICBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5l
ID0gbmV3IFFTY3JpcHRFbmdpbmVQcml2YXRlKC8qIHFfcHRyICovIDApOworICAgIHJldHVybiBR
U2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlOjpnZXQoZW5naW5lLT5jaGVja1N5bnRheChw
cm9ncmFtKSk7Cit9CisKKy8qIQogICAgIEV2YWx1YXRlcyBcYSBwcm9ncmFtLCB1c2luZyBcYSBs
aW5lTnVtYmVyIGFzIHRoZSBiYXNlIGxpbmUgbnVtYmVyLAogICAgIGFuZCByZXR1cm5zIHRoZSBy
ZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24uCiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0ZW5naW5lLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2lu
ZS5oCmluZGV4IDVjMjU5NTMuLmVlMDY2YzkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0ZW5naW5lLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRl
bmdpbmUuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAicXNjcmlwdHByb2dyYW0uaCIK
ICNpbmNsdWRlICJxc2NyaXB0c3RyaW5nLmgiCisjaW5jbHVkZSAicXNjcmlwdHN5bnRheGNoZWNr
cmVzdWx0LmgiCiAjaW5jbHVkZSA8UXRDb3JlL3FvYmplY3QuaD4KICNpbmNsdWRlIDxRdENvcmUv
cXNoYXJlZGRhdGEuaD4KICNpbmNsdWRlIDxRdENvcmUvcXN0cmluZy5oPgpAQCAtMzcsNiArMzgs
NyBAQCBwdWJsaWM6CiAgICAgUVNjcmlwdEVuZ2luZSgpOwogICAgIH5RU2NyaXB0RW5naW5lKCk7
CiAKKyAgICBzdGF0aWMgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0IGNoZWNrU3ludGF4KGNvbnN0
IFFTdHJpbmcmIHByb2dyYW0pOwogICAgIFFTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBRU3Ry
aW5nJiBwcm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSA9IFFTdHJpbmcoKSwgaW50IGxp
bmVOdW1iZXIgPSAxKTsKICAgICBRU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgUVNjcmlwdFBy
b2dyYW0mIHByb2dyYW0pOwogICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuY3BwIGIvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAKaW5kZXggMGZhMDE4ZS4uMzI1NTFiMCAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAKQEAgLTM5LDYgKzM5LDE1
IEBAIFFTY3JpcHRFbmdpbmVQcml2YXRlOjp+UVNjcmlwdEVuZ2luZVByaXZhdGUoKQogICAgIEpT
R2xvYmFsQ29udGV4dFJlbGVhc2UobV9jb250ZXh0KTsKIH0KIAorUVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0UHJpdmF0ZSogUVNjcmlwdEVuZ2luZVByaXZhdGU6OmNoZWNrU3ludGF4KGNvbnN0IFFT
dHJpbmcmIHByb2dyYW0pCit7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb247CisgICAgaWYgKEpT
Q2hlY2tTY3JpcHRTeW50YXgobV9jb250ZXh0LCBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhw
cm9ncmFtKSwgLyogdXJsICovIDAsIC8qIHN0YXJ0aW5nIGxpbmUgKi8gMSwgJmV4Y2VwdGlvbikp
CisgICAgICAgIHJldHVybiBuZXcgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZSh0aGlz
KTsKKyAgICBKU1ZhbHVlUHJvdGVjdChtX2NvbnRleHQsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IG5ldyBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKHRoaXMsIGNvbnN0X2Nhc3Q8SlNP
YmplY3RSZWY+KGV4Y2VwdGlvbikpOworfQorCiAvKiEKICAgICBFdmFsdWF0ZXMgcHJvZ3JhbSBh
bmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uLgogICAgIFxpbnRlcm5hbApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCmluZGV4IDVhMzYzOTEuLmJmOTU4
YmEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmgKQEAgLTIzLDEyICsy
MywxNCBAQAogI2luY2x1ZGUgInFzY3JpcHRjb252ZXJ0ZXJfcC5oIgogI2luY2x1ZGUgInFzY3Jp
cHRlbmdpbmUuaCIKICNpbmNsdWRlICJxc2NyaXB0c3RyaW5nX3AuaCIKKyNpbmNsdWRlICJxc2Ny
aXB0c3ludGF4Y2hlY2tyZXN1bHRfcC5oIgogI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNo
YXJlZGRhdGEuaD4KICNpbmNsdWRlIDxRdENvcmUvcXN0cmluZy5oPgogCiBjbGFzcyBRU2NyaXB0
RW5naW5lOworY2xhc3MgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTsKIAogY2xhc3Mg
UVNjcmlwdEVuZ2luZVByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgewogcHVibGljOgpAQCAt
MzgsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgUVNjcmlwdEVuZ2luZVByaXZhdGUoY29uc3QgUVNj
cmlwdEVuZ2luZSopOwogICAgIH5RU2NyaXB0RW5naW5lUHJpdmF0ZSgpOwogCisgICAgUVNjcmlw
dFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZSogY2hlY2tTeW50YXgoY29uc3QgUVN0cmluZyYgcHJv
Z3JhbSk7CiAgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogZXZhbHVhdGUoY29uc3QgUVN0cmluZyYg
cHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGludCBsaW5lTnVtYmVyKTsKICAgICBR
U2NyaXB0VmFsdWVQcml2YXRlKiBldmFsdWF0ZShjb25zdCBRU2NyaXB0UHJvZ3JhbVByaXZhdGUq
IHByb2dyYW0pOwogICAgIGlubGluZSBKU1ZhbHVlUmVmIGV2YWx1YXRlKEpTU3RyaW5nUmVmIHBy
b2dyYW0sIEpTU3RyaW5nUmVmIGZpbGVOYW1lLCBpbnQgbGluZU51bWJlcik7CmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmNwcCBiL0ph
dmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODVmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9K
YXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmNwcApAQCAtMCww
ICsxLDE0MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAicXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmgiCisjaW5jbHVkZSAicXNjcmlwdHN5
bnRheGNoZWNrcmVzdWx0X3AuaCIKKworLyohCisgIFxjbGFzcyBRU2NyaXB0U3ludGF4Q2hlY2tS
ZXN1bHQKKworICBcYnJpZWYgVGhlIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCBjbGFzcyBwcm92
aWRlcyB0aGUgcmVzdWx0IG9mIGEgc2NyaXB0IHN5bnRheCBjaGVjay4KKworICBcaW5ncm91cCBz
Y3JpcHQKKyAgXG1haW5jbGFzcworCisgIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCBpcyByZXR1
cm5lZCBieSBRU2NyaXB0RW5naW5lOjpjaGVja1N5bnRheCgpIHRvCisgIHByb3ZpZGUgaW5mb3Jt
YXRpb24gYWJvdXQgdGhlIHN5bnRhY3RpY2FsIChpbiljb3JyZWN0bmVzcyBvZiBhIHNjcmlwdC4K
KyovCisKKy8qIQorICAgIFxlbnVtIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6U3RhdGUKKwor
ICAgIFRoaXMgZW51bSBzcGVjaWZpZXMgdGhlIHN0YXRlIG9mIGEgc3ludGF4IGNoZWNrLgorCisg
ICAgXHZhbHVlIEVycm9yIFRoZSBwcm9ncmFtIGNvbnRhaW5zIGEgc3ludGF4IGVycm9yLgorICAg
IFx2YWx1ZSBJbnRlcm1lZGlhdGUgVGhlIHByb2dyYW0gaXMgaW5jb21wbGV0ZS4KKyAgICBcdmFs
dWUgVmFsaWQgVGhlIHByb2dyYW0gaXMgYSBzeW50YWN0aWNhbGx5IGNvcnJlY3QgUXQgU2NyaXB0
IHByb2dyYW0uCisqLworCisvKiEKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0U3ludGF4Q2hl
Y2tSZXN1bHQgZnJvbSB0aGUgXGEgb3RoZXIgcmVzdWx0LgorKi8KK1FTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdDo6UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0KGNvbnN0IFFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdCYgb3RoZXIpCisgICAgOiBkX3B0cihvdGhlci5kX3B0cikKK3t9CisKKy8qIQorICBD
b25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCBmcm9tIGFuIGludGVybmFs
IHJlcHJlc2VudGF0aW9uLgorICBcaW50ZXJuYWwKKyovCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1
bHQ6OlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2
YXRlKiBkKQorICAgIDogZF9wdHIoZCkKK3t9CisKKy8qIQorICBEZXN0cm95cyB0aGlzIFFTY3Jp
cHRTeW50YXhDaGVja1Jlc3VsdC4KKyovCitRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6On5RU2Ny
aXB0U3ludGF4Q2hlY2tSZXN1bHQoKQore30KKworLyohCisgIEFzc2lnbnMgdGhlIFxhIG90aGVy
IHJlc3VsdCB0byB0aGlzIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCwgYW5kIHJldHVybnMgYQor
ICByZWZlcmVuY2UgdG8gdGhpcyBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQuCisqLworUVNjcmlw
dFN5bnRheENoZWNrUmVzdWx0JiBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6Om9wZXJhdG9yPShj
b25zdCBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQmIG90aGVyKQoreworICAgIGRfcHRyID0gb3Ro
ZXIuZF9wdHI7CisgICAgcmV0dXJuICp0aGlzOworfQorCisvKiEKKyAgUmV0dXJucyB0aGUgc3Rh
dGUgb2YgdGhpcyBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQuCisqLworUVNjcmlwdFN5bnRheENo
ZWNrUmVzdWx0OjpTdGF0ZSBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OnN0YXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZF9wdHItPnN0YXRlKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBl
cnJvciBsaW5lIG51bWJlciBvZiB0aGlzIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdCwgb3IgLTEg
aWYKKyAgdGhlcmUgaXMgbm8gZXJyb3IuCisKKyAgXHNhIHN0YXRlKCksIGVycm9yTWVzc2FnZSgp
CisqLworaW50IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6ZXJyb3JMaW5lTnVtYmVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmVycm9yTGluZU51bWJlcigpOworfQorCisvKiEKKyAg
UmV0dXJucyB0aGUgZXJyb3IgY29sdW1uIG51bWJlciBvZiB0aGlzIFFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdCwgb3IgLTEgaWYKKyAgdGhlcmUgaXMgbm8gZXJyb3IuCisKKyAgXHNhIHN0YXRlKCks
IGVycm9yTGluZU51bWJlcigpCisqLworaW50IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6ZXJy
b3JDb2x1bW5OdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+ZXJyb3JDb2x1bW5O
dW1iZXIoKTsKK30KKworLyohCisgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugb2YgdGhpcyBR
U2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQsIG9yIGFuIGVtcHR5CisgIHN0cmluZyBpZiB0aGVyZSBp
cyBubyBlcnJvci4KKworICBcc2Egc3RhdGUoKSwgZXJyb3JMaW5lTnVtYmVyKCkKKyovCitRU3Ry
aW5nIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6ZXJyb3JNZXNzYWdlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZF9wdHItPmVycm9yTWVzc2FnZSgpOworfQorCitRU2NyaXB0U3ludGF4Q2hlY2tS
ZXN1bHRQcml2YXRlOjp+UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZSgpCit7CisgICAg
aWYgKG1fZXhjZXB0aW9uKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fZW5naW5lLT5jb250
ZXh0KCksIG1fZXhjZXB0aW9uKTsKK30KKworUVN0cmluZyBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1
bHRQcml2YXRlOjplcnJvck1lc3NhZ2UoKSBjb25zdAoreworICAgIGlmIChtX2V4Y2VwdGlvbikK
KyAgICAgICAgcmV0dXJuIFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKEpTVmFsdWVUb1N0cmlu
Z0NvcHkobV9lbmdpbmUtPmNvbnRleHQoKSwgbV9leGNlcHRpb24sIC8qIGV4Y2VwdGlvbiAqLyAw
KSk7CisgICAgcmV0dXJuIFFTdHJpbmcoKTsKK30KKworaW50IFFTY3JpcHRTeW50YXhDaGVja1Jl
c3VsdFByaXZhdGU6OmVycm9yTGluZU51bWJlcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2V4Y2Vw
dGlvbikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8vIG1fZXhjZXB0aW9uIGlzIGFuIGluc3Rh
bmNlIG9mIHRoZSBFeGNlcHRpb24gc28gaXQgaGFzICJsaW5lIiBhdHRyaWJ1dGUuCisgICAgSlNW
YWx1ZVJlZiBsaW5lID0gSlNPYmplY3RHZXRQcm9wZXJ0eShtX2VuZ2luZS0+Y29udGV4dCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leGNlcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU2NyaXB0Q29udmVydGVy
Ojp0b1N0cmluZygibGluZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogZXhjZXB0aW9ucyAqLzApOworICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIobV9l
bmdpbmUtPmNvbnRleHQoKSwgbGluZSwgLyogZXhjZXB0aW9ucyAqLzApOworfQpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzeW50YXhjaGVja3Jlc3VsdC5oIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzeW50YXhjaGVja3Jlc3VsdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTc3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZh
U2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmgKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0c3ludGF4Y2hlY2tyZXN1
bHRfaAorI2RlZmluZSBxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHRfaAorCisjaW5jbHVkZSAicXRz
Y3JpcHRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKworY2xhc3Mg
UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZTsKK2NsYXNzIFFfSkFWQVNDUklQVF9FWFBP
UlQgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsK
KyAgICAgICAgRXJyb3IsCisgICAgICAgIEludGVybWVkaWF0ZSwKKyAgICAgICAgVmFsaWQKKyAg
ICB9OworCisgICAgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0KGNvbnN0IFFTY3JpcHRTeW50YXhD
aGVja1Jlc3VsdCYgb3RoZXIpOworICAgIH5RU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQoKTsKKyAg
ICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQmIG9wZXJhdG9yPShjb25zdCBRU2NyaXB0U3ludGF4
Q2hlY2tSZXN1bHQmIG90aGVyKTsKKworICAgIFN0YXRlIHN0YXRlKCkgY29uc3Q7CisgICAgaW50
IGVycm9yTGluZU51bWJlcigpIGNvbnN0OworICAgIGludCBlcnJvckNvbHVtbk51bWJlcigpIGNv
bnN0OworICAgIFFTdHJpbmcgZXJyb3JNZXNzYWdlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUq
IGQpOworICAgIFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50ZXI8UVNjcmlwdFN5bnRheENoZWNr
UmVzdWx0UHJpdmF0ZT4gZF9wdHI7CisKKyAgICBmcmllbmQgY2xhc3MgUVNjcmlwdFN5bnRheENo
ZWNrUmVzdWx0UHJpdmF0ZTsKK307CisjZW5kaWYgLy8gcXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0
X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2ty
ZXN1bHRfcC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzeW50YXhjaGVja3Jlc3Vs
dF9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxYTEzMQotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1
bHRfcC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgcXNj
cmlwdHN5bnRheGNoZWNrcmVzdWx0X3BfaAorI2RlZmluZSBxc2NyaXB0c3ludGF4Y2hlY2tyZXN1
bHRfcF9oCisKKyNpbmNsdWRlICJxc2NyaXB0Y29udmVydGVyX3AuaCIKKyNpbmNsdWRlICJxc2Ny
aXB0ZW5naW5lX3AuaCIKKyNpbmNsdWRlICJxc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3Fz
aGFyZWRkYXRhLmg+CisKK2NsYXNzIFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUgOiBw
dWJsaWMgUVNoYXJlZERhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBpbmxpbmUgUVNjcmlwdFN5
bnRheENoZWNrUmVzdWx0IGdldChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKiBwKTsK
KyAgICBpbmxpbmUgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0UHJpdmF0ZShjb25zdCBRU2NyaXB0
RW5naW5lUHJpdmF0ZSogZW5naW5lKTsKKyAgICBpbmxpbmUgUVNjcmlwdFN5bnRheENoZWNrUmVz
dWx0UHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lLCBKU09iamVjdFJl
ZiB2YWx1ZSk7CisgICAgflFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGUoKTsKKworICAg
IGlubGluZSBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlN0YXRlIHN0YXRlKCkgY29uc3Q7Cisg
ICAgaW50IGVycm9yTGluZU51bWJlcigpIGNvbnN0OworICAgIGlubGluZSBpbnQgZXJyb3JDb2x1
bW5OdW1iZXIoKSBjb25zdDsKKyAgICBRU3RyaW5nIGVycm9yTWVzc2FnZSgpIGNvbnN0OworcHJp
dmF0ZToKKyAgICBKU09iamVjdFJlZiBtX2V4Y2VwdGlvbjsKKyAgICBRU2NyaXB0RW5naW5lUHRy
IG1fZW5naW5lOworfTsKKworUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0IFFTY3JpcHRTeW50YXhD
aGVja1Jlc3VsdFByaXZhdGU6OmdldChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2YXRlKiBw
KQoreworICAgIHJldHVybiBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQocCk7Cit9CisKK1FTY3Jp
cHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGU6OlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZh
dGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSkKKyAgICA6IG1fZXhjZXB0aW9u
KDApCisgICAgLCBtX2VuZ2luZShjb25zdF9jYXN0PFFTY3JpcHRFbmdpbmVQcml2YXRlKj4oZW5n
aW5lKSkKK3t9CisKK1FTY3JpcHRTeW50YXhDaGVja1Jlc3VsdFByaXZhdGU6OlFTY3JpcHRTeW50
YXhDaGVja1Jlc3VsdFByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSwg
SlNPYmplY3RSZWYgdmFsdWUpCisgICAgOiBtX2V4Y2VwdGlvbih2YWx1ZSkKKyAgICAsIG1fZW5n
aW5lKGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2luZVByaXZhdGUqPihlbmdpbmUpKQore30KKworUVNj
cmlwdFN5bnRheENoZWNrUmVzdWx0OjpTdGF0ZSBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHRQcml2
YXRlOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0
IHJldHVybiBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OkludGVybWVkaWF0ZQorICAgIHJldHVy
biBtX2V4Y2VwdGlvbiA/IFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6RXJyb3IgOiBRU2NyaXB0
U3ludGF4Q2hlY2tSZXN1bHQ6OlZhbGlkOworfQorCitpbnQgUVNjcmlwdFN5bnRheENoZWNrUmVz
dWx0UHJpdmF0ZTo6ZXJyb3JDb2x1bW5OdW1iZXIoKSBjb25zdAoreworICAgIC8vIEZJWE1FIEpT
QyBDIEFQSSBkb2Vzbid0IGV4cG9zZSB0aGUgZXJyb3IgY29sdW1uIG51bWJlci4KKyAgICByZXR1
cm4gbV9leGNlcHRpb24gPyAxIDogLTE7Cit9CisKKworI2VuZGlmIC8vIHFzY3JpcHRzeW50YXhj
aGVja3Jlc3VsdF9wX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3Jp
cHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMv
cXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKaW5kZXggYjM3MzYxMy4uMjYzMjc5
NiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3Rf
cXNjcmlwdGVuZ2luZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVu
Z2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUg
InFzY3JpcHRlbmdpbmUuaCIKICNpbmNsdWRlICJxc2NyaXB0cHJvZ3JhbS5oIgorI2luY2x1ZGUg
InFzY3JpcHRzeW50YXhjaGVja3Jlc3VsdC5oIgogI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgog
I2luY2x1ZGUgPFF0VGVzdC9xdGVzdC5oPgogCkBAIC0zOSw2ICs0MCw4IEBAIHByaXZhdGUgc2xv
dHM6CiAgICAgdm9pZCBudWxsVmFsdWUoKTsKICAgICB2b2lkIHVuZGVmaW5lZFZhbHVlKCk7CiAg
ICAgdm9pZCBldmFsdWF0ZVByb2dyYW0oKTsKKyAgICB2b2lkIGNoZWNrU3ludGF4X2RhdGEoKTsK
KyAgICB2b2lkIGNoZWNrU3ludGF4KCk7CiB9OwogCiAvKiBFdmFsdWF0aW5nIGEgc2NyaXB0IHRo
YXQgdGhyb3cgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBzaG91bGQgcmV0dXJuIGFuIGludmFsaWQg
dmFsdWUuICovCkBAIC0xNzUsNSArMTc4LDk4IEBAIHZvaWQgdHN0X1FTY3JpcHRFbmdpbmU6OmV2
YWx1YXRlUHJvZ3JhbSgpCiAgICAgfQogfQogCit2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpjaGVj
a1N5bnRheF9kYXRhKCkKK3sKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJjb2RlIik7
CisgICAgUVRlc3Q6OmFkZENvbHVtbjxpbnQ+KCJleHBlY3RlZFN0YXRlIik7CisgICAgUVRlc3Q6
OmFkZENvbHVtbjxpbnQ+KCJlcnJvckxpbmVOdW1iZXIiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1u
PGludD4oImVycm9yQ29sdW1uTnVtYmVyIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5n
PigiZXJyb3JNZXNzYWdlIik7CisKKyAgICBRVGVzdDo6bmV3Um93KCIwIikKKyAgICAgICAgPDwg
UVN0cmluZygiMCIpIDw8IGludChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlZhbGlkKQorICAg
ICAgICA8PCAtMSA8PCAtMSA8PCAiIjsKKyAgICBRVGVzdDo6bmV3Um93KCJpZiAoIikKKyAgICAg
ICAgPDwgUVN0cmluZygiaWYgKFxuIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6
SW50ZXJtZWRpYXRlKQorICAgICAgICA8PCAxIDw8IDQgPDwgIiI7CisgICAgUVRlc3Q6Om5ld1Jv
dygiaWYgZWxzZSIpCisgICAgICAgIDw8IFFTdHJpbmcoIlxuaWYgZWxzZSIpIDw8IGludChRU2Ny
aXB0U3ludGF4Q2hlY2tSZXN1bHQ6OkVycm9yKQorICAgICAgICA8PCAyIDw8IDQgPDwgIlN5bnRh
eEVycm9yOiBQYXJzZSBlcnJvciI7CisgICAgUVRlc3Q6Om5ld1Jvdygie2lmfSIpCisgICAgICAg
ICAgICA8PCBRU3RyaW5nKCJ7XG57XG5pZlxufVxuIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVj
a1Jlc3VsdDo6RXJyb3IpCisgICAgICAgIDw8IDQgPDwgMSA8PCAiU3ludGF4RXJyb3I6IFBhcnNl
IGVycm9yIjsKKyAgICBRVGVzdDo6bmV3Um93KCJmb29bIikKKyAgICAgICAgPDwgUVN0cmluZygi
Zm9vWyIpIDw8IGludChRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OkVycm9yKQorICAgICAgICA8
PCAxIDw8IDQgPDwgIlN5bnRheEVycm9yOiBQYXJzZSBlcnJvciI7CisgICAgUVRlc3Q6Om5ld1Jv
dygiZm9vWydiYXInXSIpCisgICAgICAgIDw8IFFTdHJpbmcoImZvb1snYmFyJ10iKSA8PCBpbnQo
UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpWYWxpZCkKKyAgICAgICAgPDwgLTEgPDwgLTEgPDwg
IiI7CisKKyAgICBRVGVzdDo6bmV3Um93KCIvKiIpCisgICAgICAgIDw8IFFTdHJpbmcoIi8qIikg
PDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6SW50ZXJtZWRpYXRlKQorICAgICAgICA8
PCAxIDw8IDEgPDwgIlVuY2xvc2VkIGNvbW1lbnQgYXQgZW5kIG9mIGZpbGUiOworICAgIFFUZXN0
OjpuZXdSb3coIi8qXG5NeSBjb21tZW50IikKKyAgICAgICAgPDwgUVN0cmluZygiLypcbk15IGNv
bW1lbnQiKSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpJbnRlcm1lZGlhdGUpCisg
ICAgICAgIDw8IDEgPDwgMSA8PCAiVW5jbG9zZWQgY29tbWVudCBhdCBlbmQgb2YgZmlsZSI7Cisg
ICAgUVRlc3Q6Om5ld1JvdygiLypcbk15IGNvbW1lbnQgKi9cbmZvbyA9IDEwIikKKyAgICAgICAg
PDwgUVN0cmluZygiLypcbk15IGNvbW1lbnQgKi9cbmZvbyA9IDEwIikgPDwgaW50KFFTY3JpcHRT
eW50YXhDaGVja1Jlc3VsdDo6VmFsaWQpCisgICAgICAgIDw8IC0xIDw8IC0xIDw8ICIiOworICAg
IFFUZXN0OjpuZXdSb3coImZvbyA9IDEwIC8qIikKKyAgICAgICAgPDwgUVN0cmluZygiZm9vID0g
MTAgLyoiKSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpJbnRlcm1lZGlhdGUpCisg
ICAgICAgIDw8IC0xIDw8IC0xIDw8ICIiOworICAgIFFUZXN0OjpuZXdSb3coImZvbyA9IDEwOyAv
KiIpCisgICAgICAgIDw8IFFTdHJpbmcoImZvbyA9IDEwOyAvKiIpIDw8IGludChRU2NyaXB0U3lu
dGF4Q2hlY2tSZXN1bHQ6OkludGVybWVkaWF0ZSkKKyAgICAgICAgPDwgMSA8PCAxMSA8PCAiRXhw
ZWN0ZWQgYGVuZCBvZiBmaWxlJyI7CisgICAgUVRlc3Q6Om5ld1JvdygiZm9vID0gMTAgLyogTXkg
Y29tbWVudCAqLyIpCisgICAgICAgIDw8IFFTdHJpbmcoImZvbyA9IDEwIC8qIE15IGNvbW1lbnQg
Ki8iKSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpWYWxpZCkKKyAgICAgICAgPDwg
LTEgPDwgLTEgPDwgIiI7CisKKyAgICBRVGVzdDo6bmV3Um93KCIvPS8iKQorICAgICAgICA8PCBR
U3RyaW5nKCIvPS8iKSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpWYWxpZCkgPDwg
LTEgPDwgLTEgPDwgIiI7CisgICAgUVRlc3Q6Om5ld1JvdygiLz0vZyIpCisgICAgICAgIDw8IFFT
dHJpbmcoIi89L2ciKSA8PCBpbnQoUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpWYWxpZCkgPDwg
LTEgPDwgLTEgPDwgIiI7CisgICAgUVRlc3Q6Om5ld1JvdygiL2EvIikKKyAgICAgICAgPDwgUVN0
cmluZygiL2EvIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6VmFsaWQpIDw8IC0x
IDw8IC0xIDw8ICIiOworICAgIFFUZXN0OjpuZXdSb3coIi9hL2ciKQorICAgICAgICA8PCBRU3Ry
aW5nKCIvYS9nIikgPDwgaW50KFFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6VmFsaWQpIDw8IC0x
IDw8IC0xIDw8ICIiOworfQorCit2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpjaGVja1N5bnRheCgp
Cit7CisgICAgUUZFVENIKFFTdHJpbmcsIGNvZGUpOworICAgIFFGRVRDSChpbnQsIGV4cGVjdGVk
U3RhdGUpOworICAgIFFGRVRDSChpbnQsIGVycm9yTGluZU51bWJlcik7CisgICAgUUZFVENIKGlu
dCwgZXJyb3JDb2x1bW5OdW1iZXIpOworICAgIFFGRVRDSChRU3RyaW5nLCBlcnJvck1lc3NhZ2Up
OworCisgICAgUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0IHJlc3VsdCA9IFFTY3JpcHRFbmdpbmU6
OmNoZWNrU3ludGF4KGNvZGUpOworCisgICAgLy8gYXNzaWdubWVudAorICAgIHsKKyAgICAgICAg
UVNjcmlwdFN5bnRheENoZWNrUmVzdWx0IGNvcHkgPSByZXN1bHQ7CisgICAgICAgIFFDT01QQVJF
KGNvcHkuc3RhdGUoKSwgcmVzdWx0LnN0YXRlKCkpOworICAgICAgICBRQ09NUEFSRShjb3B5LmVy
cm9yTGluZU51bWJlcigpLCByZXN1bHQuZXJyb3JMaW5lTnVtYmVyKCkpOworICAgICAgICBRQ09N
UEFSRShjb3B5LmVycm9yQ29sdW1uTnVtYmVyKCksIHJlc3VsdC5lcnJvckNvbHVtbk51bWJlcigp
KTsKKyAgICAgICAgUUNPTVBBUkUoY29weS5lcnJvck1lc3NhZ2UoKSwgcmVzdWx0LmVycm9yTWVz
c2FnZSgpKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQg
Y29weShyZXN1bHQpOworICAgICAgICBRQ09NUEFSRShjb3B5LnN0YXRlKCksIHJlc3VsdC5zdGF0
ZSgpKTsKKyAgICAgICAgUUNPTVBBUkUoY29weS5lcnJvckxpbmVOdW1iZXIoKSwgcmVzdWx0LmVy
cm9yTGluZU51bWJlcigpKTsKKyAgICAgICAgUUNPTVBBUkUoY29weS5lcnJvckNvbHVtbk51bWJl
cigpLCByZXN1bHQuZXJyb3JDb2x1bW5OdW1iZXIoKSk7CisgICAgICAgIFFDT01QQVJFKGNvcHku
ZXJyb3JNZXNzYWdlKCksIHJlc3VsdC5lcnJvck1lc3NhZ2UoKSk7CisgICAgfQorCisgICAgaWYg
KGV4cGVjdGVkU3RhdGUgPT0gUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjpJbnRlcm1lZGlhdGUp
CisgICAgICAgIFFFWFBFQ1RfRkFJTCgiIiwgIlFTY3JpcHRTeW50YXhDaGVja1Jlc3VsdDo6c3Rh
dGUoKSBkb2Vzbid0IHJldHVybiB0aGUgSW50ZXJtZWRpYXRlIHN0YXRlIiwgQWJvcnQpOworICAg
IFFDT01QQVJFKHJlc3VsdC5zdGF0ZSgpLCBRU2NyaXB0U3ludGF4Q2hlY2tSZXN1bHQ6OlN0YXRl
KGV4cGVjdGVkU3RhdGUpKTsKKyAgICBRQ09NUEFSRShyZXN1bHQuZXJyb3JMaW5lTnVtYmVyKCks
IGVycm9yTGluZU51bWJlcik7CisgICAgaWYgKGV4cGVjdGVkU3RhdGUgIT0gUVNjcmlwdFN5bnRh
eENoZWNrUmVzdWx0OjpWYWxpZCAmJiBlcnJvckNvbHVtbk51bWJlciAhPSAxKQorICAgICAgICAg
ICAgUUVYUEVDVF9GQUlMKCIiLCAiUVNjcmlwdFN5bnRheENoZWNrUmVzdWx0OjplcnJvckNvbHVt
bk51bWJlcigpIGRvZXNuJ3QgcmV0dXJuIGNvcnJlY3QgdmFsdWUiLCBDb250aW51ZSk7CisgICAg
UUNPTVBBUkUocmVzdWx0LmVycm9yQ29sdW1uTnVtYmVyKCksIGVycm9yQ29sdW1uTnVtYmVyKTsK
KyAgICBRQ09NUEFSRShyZXN1bHQuZXJyb3JNZXNzYWdlKCksIGVycm9yTWVzc2FnZSk7Cit9CisK
KwogUVRFU1RfTUFJTih0c3RfUVNjcmlwdEVuZ2luZSkKICNpbmNsdWRlICJ0c3RfcXNjcmlwdGVu
Z2luZS5tb2MiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>