<?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>105034</bug_id>
          
          <creation_ts>2012-12-14 08:45:34 -0800</creation_ts>
          <short_desc>[Qt][WK2] Add spell checking support</short_desc>
          <delta_ts>2013-12-04 10:42:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="José Dapena Paz">jdapena</reporter>
          <assigned_to name="José Dapena Paz">jdapena</assigned_to>
          <cc>abecsi</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jdapena</cc>
    
    <cc>jturcotte</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>pierre.rossi</cc>
    
    <cc>svillar</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>791637</commentid>
    <comment_count>0</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-12-14 08:45:34 -0800</bug_when>
    <thetext>Spell checking support should be available and exposed through declarative WK2 frontend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793885</commentid>
    <comment_count>1</comment_count>
      <attachid>179990</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-12-18 11:43:29 -0800</bug_when>
    <thetext>Created attachment 179990
Patch

Implementation of Qt WebKit2 spell checking support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793899</commentid>
    <comment_count>2</comment_count>
      <attachid>179990</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-18 11:57:15 -0800</bug_when>
    <thetext>Comment on attachment 179990
Patch

Attachment 179990 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15402311</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794374</commentid>
    <comment_count>3</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-12-18 23:17:16 -0800</bug_when>
    <thetext>build log:

In file included from /home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebshared.cpp:26:
/home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebtextchecker_p.h:63: error: a class-key must be used when declaring a friend
/home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebtextchecker_p.h:63: error: friend declaration does not name a class or function
/home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebtextchecker_p.h: In member function &apos;void QWebShared::setTextChecker(QWebTextChecker*)&apos;:
/home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebtextchecker_p.h:59: error: &apos;void QWebTextChecker::setWK()&apos; is private
/home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebshared.cpp:51: error: within this context
ICECC[7224] 23:12:32: Compiled on 10.109.115.1
make[3]: *** [.obj/release-shared/UIProcess/API/qt/qwebshared.o] Error 1
make[3]: *** Waiting for unfinished jobs....
In file included from /home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebtextchecker.cpp:24:
/home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebtextchecker_p.h:63: error: a class-key must be used when declaring a friend
/home/oszi/WebKit/Source/WebKit2/UIProcess/API/qt/qwebtextchecker_p.h:63: error: friend declaration does not name a class or function
ICECC[7227] 23:12:33: Compiled on 10.109.205.1
make[3]: *** [.obj/release-shared/UIProcess/API/qt/qwebtextchecker.o] Error 1
make[3]: Leaving directory `/home/oszi/WebKit/WebKitBuild/Release/Source/WebKit2&apos;
make[2]: *** [sub-Target-pri-make_first-ordered] Error 2
make[2]: Leaving directory `/home/oszi/WebKit/WebKitBuild/Release/Source/WebKit2&apos;
make[1]: *** [sub-Source-WebKit2-WebKit2-pro-make_first-ordered] Error 2
make[1]: Leaving directory `/home/oszi/WebKit/WebKitBuild/Release&apos;
make: *** [incremental] Error 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794494</commentid>
    <comment_count>4</comment_count>
      <attachid>180127</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-12-19 03:51:40 -0800</bug_when>
    <thetext>Created attachment 180127
Patch

Implementation of Qt WebKit2 spell checking support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797650</commentid>
    <comment_count>5</comment_count>
      <attachid>180127</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-12-27 12:47:58 -0800</bug_when>
    <thetext>Comment on attachment 180127
Patch

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

Good stuff, but some things are a bit confusing.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:323
&gt; +    QWebShared* shared() const;

It seems counterintuitive to me that shared settings/objects is a property of a view object. Is there somewhere more global it could be exported?

&gt; Source/WebKit2/UIProcess/API/qt/qwebtextchecker.cpp:50
&gt; +bool QWebTextChecker::isSpellCheckingEnabled() const
&gt; +{
&gt; +    return m_spellCheckingEnabled;
&gt; +}
&gt; +
&gt; +bool QWebTextChecker::isSpellCheckingAllowed() const
&gt; +{
&gt; +    return false;
&gt; +}

I think this API naming is confusing. It appears isSpellCheckingEnabled, tells whether spell-checking is user-enabled, while isSpellCheckingAllowed tells if it system available. Perhaps isSpellCheckingAllowed would be better named as isSpellCheckingPossible/Available or something that better represent what it is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797846</commentid>
    <comment_count>6</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-12-28 04:33:15 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:323
&gt; &gt; +    QWebShared* shared() const;
&gt; 
&gt; It seems counterintuitive to me that shared settings/objects is a property of a view object. Is there somewhere more global it could be exported?

Well, the other way I found to do this is adding the shared object as a context property:
engine-&gt;rootContext()-&gt;setContextProperty(
        QLatin1String(&quot;experimentalWebShared&quot;),
        QWebShared::instance());

Though the way to use it wouldn&apos;t be specially clean AFAIK (I still don&apos;t know a lot about QML). We could bind some javascript code to completed signal, so that it sets the text checker and enables it. Less strange than setting it as a property of the view object, but also less convenient API. Any better idea for this?

&gt; &gt; +bool QWebTextChecker::isSpellCheckingAllowed() const
&gt; &gt; +{
&gt; &gt; +    return false;
&gt; &gt; +}
&gt; 
&gt; I think this API naming is confusing. It appears isSpellCheckingEnabled, tells whether spell-checking is user-enabled, while isSpellCheckingAllowed tells if it system available. Perhaps isSpellCheckingAllowed would be better named as isSpellCheckingPossible/Available or something that better represent what it is?

Yes, it is somehow confusing. This is more or less a mapping of the names used internally in WebKit. But we&apos;d likely better replace them with something more simple:

Q_PROPERTY(bool available READ isAvailable)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)

Same applies to updateSpellCheckingLanguages, that could be:
Q_PROPERTY(QList&lt;QString&gt; languages WRITE setLanguages)

The idea of these changes is, of course, being less confusing, but also remove &quot;spellchecking&quot; in the wording.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802214</commentid>
    <comment_count>7</comment_count>
      <attachid>180127</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-01-08 04:43:13 -0800</bug_when>
    <thetext>Comment on attachment 180127
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:323
&gt;&gt; +    QWebShared* shared() const;
&gt; 
&gt; It seems counterintuitive to me that shared settings/objects is a property of a view object. Is there somewhere more global it could be exported?

We have a Qt global object, how about having a QtWebKit global object that would be added when the QtWebKit QML module is imported?
It would be nice too if this global object could be accessed through a static instance if the user wants to use C++ instead of QML.

&gt; Source/WebKit2/UIProcess/API/qt/qwebtextchecker_p.h:41
&gt; +    Q_PROPERTY(bool enabled READ isSpellCheckingEnabled WRITE setSpellCheckingEnabled)

What is the use case for anything more than an &quot;enabled&quot; API?
The current language and the spell checker engine isn&apos;t something that applications should be worrying about, can&apos;t we fetch this from under through the platform?

I would also be in favor of a simpler API for the first version, please keep in mind that once we released this we have to support it until Qt6 which won&apos;t happen anytime soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802215</commentid>
    <comment_count>8</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-01-08 04:43:48 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; We have a Qt global object, how about having a QtWebKit global object that would be added when the QtWebKit QML module is imported?
&gt; It would be nice too if this global object could be accessed through a static instance if the user wants to use C++ instead of QML.

See http://doc.qt.digia.com/qt/qdeclarativeglobalobject.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803386</commentid>
    <comment_count>9</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-01-09 09:21:09 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; We have a Qt global object, how about having a QtWebKit global object that would be added when the QtWebKit QML module is imported?
&gt; It would be nice too if this global object could be accessed through a static instance if the user wants to use C++ instead of QML.

Sounds good. I&apos;ll create a webkit global object for accessing text checker. Another point I&apos;ll change is the &quot;feature&quot; that allows to change the selected spell checker from QML. So my idea is not exposing this. At C++, we&apos;ll still be able to replace the text checker with a different implementation (a requirement in my environment).

&gt; I would also be in favor of a simpler API for the first version, please keep in mind that once we released this we have to support it until Qt6 which won&apos;t happen anytime soon.

Yes, you are right. I was exposing almost everthing that is available in webkit API. Actually, from a UI we can expect people enabling/disabling spell checker, and also setting languages (i.e. to implement a UI for choosing the languages to check). It is also important to be able to retrieve currently available spell checking languages for such a UI.

My new proposal for API would be:
* New QML global object webkit (that would expose QWebShared).
* Rename C++ QWebShared to QWebGlobal (more consistent with other API&apos;s).
* New QML global object webkit.textChecker (that would expose current QWebTextChecker object). This object can be replaced in C++ by a different one with same API that exists now: QWebGlobal::setTextChecker
* API for enabling/disabling text checker: QWebTextChecker::setEnabled. In QML it would be webkit.textChecker.enabled
* API for setting the current text checker languages: QWebTextChecker::setLanguages. In QML it would be webkit.textChecker.languages
* NEW! API for getting the current text checker _available_ languages: QWebTextChecker::availableLanguages. In QML it would be webkit.textChecker.availableLanguages.
* By default, languages would default to the dictionary that matches user environment. And enabled would default to false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804219</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-01-10 03:23:02 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; We have a Qt global object, how about having a QtWebKit global object that would be added when the QtWebKit QML module is imported?
&gt; &gt; It would be nice too if this global object could be accessed through a static instance if the user wants to use C++ instead of QML.
&gt; 
&gt; Sounds good. I&apos;ll create a webkit global object for accessing text checker. Another point I&apos;ll change is the &quot;feature&quot; that allows to change the selected spell checker from QML. So my idea is not exposing this. At C++, we&apos;ll still be able to replace the text checker with a different implementation (a requirement in my environment).
&gt; 
&gt; &gt; I would also be in favor of a simpler API for the first version, please keep in mind that once we released this we have to support it until Qt6 which won&apos;t happen anytime soon.
&gt; 
&gt; Yes, you are right. I was exposing almost everthing that is available in webkit API. Actually, from a UI we can expect people enabling/disabling spell checker, and also setting languages (i.e. to implement a UI for choosing the languages to check). It is also important to be able to retrieve currently available spell checking languages for such a UI.
&gt; 
&gt; My new proposal for API would be:
&gt; * New QML global object webkit (that would expose QWebShared).
&gt; * Rename C++ QWebShared to QWebGlobal (more consistent with other API&apos;s).
&gt; * New QML global object webkit.textChecker (that would expose current QWebTextChecker object). This object can be replaced in C++ by a different one with same API that exists now: QWebGlobal::setTextChecker

Why exactly do we need a new global object when functionality wise as a developer using this API I just want to enable spell checking. Why do I have to instantiate a new type or re-use some global object to say &quot;yes please&quot; ?

&gt; * API for enabling/disabling text checker: QWebTextChecker::setEnabled. In QML it would be webkit.textChecker.enabled
&gt; * API for setting the current text checker languages: QWebTextChecker::setLanguages. In QML it would be webkit.textChecker.languages
&gt; * NEW! API for getting the current text checker _available_ languages: QWebTextChecker::availableLanguages. In QML it would be webkit.textChecker.availableLanguages.
&gt; * By default, languages would default to the dictionary that matches user environment. And enabled would default to false.

Perhaps this is going into the area of settings, something we do need to tackle for the next release :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804375</commentid>
    <comment_count>11</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-01-10 07:55:18 -0800</bug_when>
    <thetext>(In reply to comment #10)

&gt; &gt; * New QML global object webkit.textChecker (that would expose current QWebTextChecker object). This object can be replaced in C++ by a different one with same API that exists now: QWebGlobal::setTextChecker
&gt; 
&gt; Why exactly do we need a new global object when functionality wise as a developer using this API I just want to enable spell checking. Why do I have to instantiate a new type or re-use some global object to say &quot;yes please&quot; ?

Typically by default this is disabled, not enabled. Examples: Chrome and Firefox. It is enabled after user sets it. The most bad part of all this is that this is also a global setting, not a webview setting nor context setting.

&gt; &gt; * By default, languages would default to the dictionary that matches user environment. And enabled would default to false.
&gt; 
&gt; Perhaps this is going into the area of settings, something we do need to tackle for the next release :)

Just checking the Qt4 API, actually this makes a lot of sense: QWebSettings is associated to each context, but it also includes some global variables accessed through static methods. I wouldn&apos;t mind moving this &quot;QWebGlobal&quot; and name it QWebSettings, changing the behavior to this. The only remaining question is how to expose this in QML (there are not static methods).

So, we could just have QWebSettings, the same way it worked in qt4, associated to web contexts. But we could still have a global object for accessing the static preferences in QML: webkit.textCheckerEnabled, webkit.textCheckerLanguages, webkit.textCheckerAvailableLanguages, that would just wrap the access to the static methods of QWebSettings. This way we would minimize the access to the spellcheck objects in QML and expose only the API we need in UI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805581</commentid>
    <comment_count>12</comment_count>
      <attachid>180127</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-11 13:39:45 -0800</bug_when>
    <thetext>Comment on attachment 180127
Patch

Simon looks unconvinced by the API. r-ing so that it does not linger around in the review queue.

Please reset to r? if I misunderstood the state of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806308</commentid>
    <comment_count>13</comment_count>
      <attachid>182561</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-01-14 06:09:22 -0800</bug_when>
    <thetext>Created attachment 182561
Patch

Expose text checker through a global object, and add a way to get available languages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806592</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-14 13:47:57 -0800</bug_when>
    <thetext>Quick comment on the way: you may want to namespace your internal classes(?).

I let Simon do a real review :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812814</commentid>
    <comment_count>15</comment_count>
      <attachid>182561</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-01-22 02:13:02 -0800</bug_when>
    <thetext>Comment on attachment 182561
Patch

Removing from review after discussion on  mailing list. I&apos;ll send a new version of the patch today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812819</commentid>
    <comment_count>16</comment_count>
      <attachid>183938</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-01-22 02:19:38 -0800</bug_when>
    <thetext>Created attachment 183938
Patch

Removed all the C++ API for changing or accessing the text checker. Now QtTextChecker directly uses TextCheckerEnchant implementation. Also, now QWebGlobal - webkit var offers settings for changing text checker instead of offering direct access to text checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812833</commentid>
    <comment_count>17</comment_count>
      <attachid>183938</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-22 02:30:10 -0800</bug_when>
    <thetext>Comment on attachment 183938
Patch

Attachment 183938 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16038451</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812858</commentid>
    <comment_count>18</comment_count>
      <attachid>183950</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-01-22 03:03:31 -0800</bug_when>
    <thetext>Created attachment 183950
Patch

Disabled spellcheck by default, and put QtTextChecker in WebKit namespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812859</commentid>
    <comment_count>19</comment_count>
      <attachid>183950</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-22 03:10:04 -0800</bug_when>
    <thetext>Comment on attachment 183950
Patch

Attachment 183950 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16041525</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813022</commentid>
    <comment_count>20</comment_count>
      <attachid>183983</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-01-22 07:19:29 -0800</bug_when>
    <thetext>Created attachment 183983
Patch

Fix build without spellcheck</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841096</commentid>
    <comment_count>21</comment_count>
      <attachid>183983</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-02-25 10:35:29 -0800</bug_when>
    <thetext>Comment on attachment 183983
Patch

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

Sorry for the long delay to check this patch. There has been some changes going on around WK2 that we&apos;re currently trying to deal with as you might have seen yourself.
Here are some comments about the patch if you&apos;re still willing to iterate on it.

&gt; Source/WebKit/qt/declarative/experimental/plugin.cpp:58
&gt; +        engine-&gt;rootContext()-&gt;setContextProperty(QLatin1String(&quot;webkit&quot;), QWebGlobal::instance());

The Qt global object is defined as &quot;Qt&quot;, so unless this creates some clash with the QtWebKit import, I would call the global object &quot;QtWebKit&quot;. (we should probably discuss about this)

&gt; Source/WebKit2/UIProcess/API/qt/qwebglobal.cpp:44
&gt; +QWebGlobal* QWebGlobal::instance()

Preferably, the instance would be owned by the QtWebContext instead.

&gt; Source/WebKit2/UIProcess/API/qt/qwebglobal_p.h:30
&gt; +    Q_PROPERTY(bool textCheckerEnabled READ textCheckerEnabled WRITE setTextCheckerEnabled NOTIFY textCheckerEnabledChanged)

I think that all the user-visible properties should be &quot;spell&quot; checkers instead of &quot;text&quot;.

&gt; Source/WebKit2/UIProcess/API/qt/qwebglobal_p.h:31
&gt; +    Q_PROPERTY(QList&lt;QString&gt; textCheckerLanguages READ textCheckerLanguages WRITE setTextCheckerLanguages);

You forgot &quot;NOTIFY textCheckerLanguagesChanged&quot;.

&gt; Source/WebKit2/UIProcess/API/qt/qwebglobal_p.h:40
&gt; +    virtual void setTextCheckerLanguages(const QList&lt;QString&gt;&amp; languages);
&gt; +    virtual QList&lt;QString&gt; textCheckerLanguages() const;
&gt; +    virtual QList&lt;QString&gt; textCheckerAvailableLanguages() const;

QList&lt;QString&gt; -&gt; QStringList
No need for virtual.

&gt; Source/WebKit2/UIProcess/API/qt/qwebglobal_p.h:47
&gt; +    explicit QWebGlobal();

Isn&apos;t the explicit keyword redundant?

&gt; Source/WebKit2/UIProcess/qt/QtTextChecker.cpp:44
&gt; +QtTextChecker* QtTextChecker::instance()

This should also be owned by QtWebContext.

&gt; Source/WebKit2/UIProcess/qt/QtTextChecker.cpp:84
&gt; +void QtTextChecker::learnWord(const QString&amp; word)

There quite a lot of string conversion going on:
WTF::String -&gt; WebString -&gt; WKString -&gt; QString -&gt; (back again to WebCore) WTF::String -&gt; (finally to enchant) utf8 char*

It feels like a layer violation to get out of the WK2 C API to go back to WebCore to use a convenience class there.
I wonder if the use of the 200-lines TextCheckerEnchant is really worth it, what do you think?

&gt; Source/WebKit2/UIProcess/qt/QtTextChecker.cpp:147
&gt; +    toTextChecker(clientInfo)-&gt;checkSpellingOfString(WebKit::toImpl(text)-&gt;string(), *misspellingLocation, *misspellingLength);

We are now doing directly from the static callback instead of delegating to an instance method, so it would be nice if you could apply this pattern directly.
See the use of WKPageLoaderClient in qquickwebview.cpp for an example.

&gt; Source/WebKit2/UIProcess/qt/QtTextChecker.cpp:159
&gt; +        WKRetainPtr&lt;WKStringRef&gt; wkSuggestion(AdoptWK, WKStringCreateWithQString(guess));
&gt; +        WKArrayAppendItem(wkSuggestions, wkSuggestion.get());

WKRetainPtr foo = adoptWK(WKCreate...()) should be used instead.
Or you could add it directly to the array:
WKArrayAppendItem(wkSuggestions, adoptWK(WKStringCreateWithQString(guess)).get());

&gt; Source/WebKit2/UIProcess/qt/QtTextChecker.cpp:190
&gt; +    WKTextCheckerSetClient(&amp;textCheckerClient);

I would do this directly in the constructor.

&gt; Source/WebKit2/UIProcess/qt/QtTextChecker.h:29
&gt; +    virtual void checkSpellingOfString(const QString&amp;, int&amp; misspellingLocation, int&amp; misspellingLength);
&gt; +    virtual QVector&lt;QString&gt; getGuessesForWord(const QString&amp; word);
&gt; +    virtual void learnWord(const QString&amp; word);
&gt; +    virtual void ignoreWord(const QString&amp; word);
&gt; +
&gt; +    virtual bool enabled() const;
&gt; +    virtual void setEnabled(bool);
&gt; +    virtual void setLanguages(const QList&lt;QString&gt;&amp;);
&gt; +    virtual QList&lt;QString&gt; languages() const;
&gt; +    virtual QList&lt;QString&gt; availableLanguages() const;

Those shouldn&apos;t be virtual.

&gt; Source/WebKit2/UIProcess/qt/QtTextChecker.h:36
&gt; +    OwnPtr&lt;WebCore::TextCheckerEnchant&gt; m_textChecker;

This might go above the C API eventually, so please use QScopedPointer instead.

&gt; Source/WebKit2/UIProcess/qt/TextCheckerQt.cpp:30
&gt; -#include &lt;WebCore/NotImplemented.h&gt;
&gt; +#include &quot;WebTextChecker.h&quot;

TextCheckerQt.cpp looks almost identical to TextCheckerGTK.cpp.
Any way we could avoid the duplication (something like having TextChecker.cpp with a big #if !PLATFORM(MAC) in it)?

&gt; Tools/qmake/mkspecs/features/features.pri:100
&gt; +    ENABLE_SPELLCHECK=0 \

If we have API for it, I think that it should be enabled by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841112</commentid>
    <comment_count>22</comment_count>
      <attachid>183983</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-02-25 10:59:12 -0800</bug_when>
    <thetext>Comment on attachment 183983
Patch

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

&gt; Source/WebKit2/UIProcess/qt/QtTextChecker.cpp:51
&gt; +    : m_enabled(true)
&gt; +    , m_textChecker(WebCore::TextCheckerEnchant::create())
&gt; +{
&gt; +    m_textChecker-&gt;updateSpellCheckingLanguages(Vector&lt;String&gt;());
&gt; +    setWK();

A few more comments:
- How expensive is the text checker? Most people won&apos;t need it in their application, so I think it would make sense to have it disabled by default and the text checker should only be instanciated if it gets enabled.
- Could you try feeding QLocale::system().name() to the default list of languages if it&apos;s available?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843096</commentid>
    <comment_count>23</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-02-27 08:37:11 -0800</bug_when>
    <thetext>(In reply to comment #21)

&gt; Here are some comments about the patch if you&apos;re still willing to iterate on it.

Sure!

&gt; &gt; Source/WebKit/qt/declarative/experimental/plugin.cpp:58
&gt; &gt; +        engine-&gt;rootContext()-&gt;setContextProperty(QLatin1String(&quot;webkit&quot;), QWebGlobal::instance());
&gt; 
&gt; The Qt global object is defined as &quot;Qt&quot;, so unless this creates some clash with the QtWebKit import, I would call the global object &quot;QtWebKit&quot;. (we should probably discuss about this)

Yes, it makes sense.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebglobal.cpp:44
&gt; &gt; +QWebGlobal* QWebGlobal::instance()
&gt; 
&gt; Preferably, the instance would be owned by the QtWebContext instead.

So we would have a QWebGlobal per context? I implemented this as a singleton as the properties are global to all QtWebKit views and contexts.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebglobal_p.h:30
&gt; &gt; +    Q_PROPERTY(bool textCheckerEnabled READ textCheckerEnabled WRITE setTextCheckerEnabled NOTIFY textCheckerEnabledChanged)
&gt; 
&gt; I think that all the user-visible properties should be &quot;spell&quot; checkers instead of &quot;text&quot;.

Yeah, I used text as it is the wording in WebCore. But the usual concept here (and in HTML) is spellchecking.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebglobal_p.h:47
&gt; &gt; +    explicit QWebGlobal();
&gt; 
&gt; Isn&apos;t the explicit keyword redundant?

Yes.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtTextChecker.cpp:44
&gt; &gt; +QtTextChecker* QtTextChecker::instance()
&gt; 
&gt; This should also be owned by QtWebContext.

Same thing here. We only have one text checker application wide. If we have one text checker per context, we would be replacing text checkers on creating a text checker in a new context.

&gt; &gt; Source/WebKit2/UIProcess/qt/QtTextChecker.cpp:84
&gt; &gt; +void QtTextChecker::learnWord(const QString&amp; word)
&gt; 
&gt; There quite a lot of string conversion going on:
&gt; WTF::String -&gt; WebString -&gt; WKString -&gt; QString -&gt; (back again to WebCore) WTF::String -&gt; (finally to enchant) utf8 char*
&gt; 
&gt; It feels like a layer violation to get out of the WK2 C API to go back to WebCore to use a convenience class there.
&gt; I wonder if the use of the 200-lines TextCheckerEnchant is really worth it, what do you think?

My opinion now is that it&apos;s not specially useful. As we are moving to expose the WK2 C API, likely the best solution would be just doing the minimal to make QtWebKit use the spellchecker enabled through C API, and let the API user implement the text checker they want.

&gt; &gt; Source/WebKit2/UIProcess/qt/TextCheckerQt.cpp:30
&gt; &gt; -#include &lt;WebCore/NotImplemented.h&gt;
&gt; &gt; +#include &quot;WebTextChecker.h&quot;
&gt; 
&gt; TextCheckerQt.cpp looks almost identical to TextCheckerGTK.cpp.
&gt; Any way we could avoid the duplication (something like having TextChecker.cpp with a big #if !PLATFORM(MAC) in it)?

This would make a lot of sense, yes. We just want the wk to use the C API enabled text checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843132</commentid>
    <comment_count>24</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-02-27 09:01:23 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebglobal.cpp:44
&gt; &gt; &gt; +QWebGlobal* QWebGlobal::instance()
&gt; &gt; 
&gt; &gt; Preferably, the instance would be owned by the QtWebContext instead.
&gt; 
&gt; So we would have a QWebGlobal per context? I implemented this as a singleton as the properties are global to all QtWebKit views and contexts.

Currently QML will only be in contact with QtWebContext::defaultContext, so you could use this one.
There is no plan to allow more than one QtWebContext, for non-testing uses at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843184</commentid>
    <comment_count>25</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-02-27 09:51:42 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebglobal.cpp:44
&gt; &gt; &gt; &gt; +QWebGlobal* QWebGlobal::instance()
&gt; &gt; &gt; 
&gt; &gt; &gt; Preferably, the instance would be owned by the QtWebContext instead.
&gt; &gt; 
&gt; &gt; So we would have a QWebGlobal per context? I implemented this as a singleton as the properties are global to all QtWebKit views and contexts.
&gt; 
&gt; Currently QML will only be in contact with QtWebContext::defaultContext, so you could use this one.
&gt; There is no plan to allow more than one QtWebContext, for non-testing uses at least.

I&apos;ve been thinking about it a bit, and maybe ultimately QtWebContext and QWebGlobal should be the same class. The have the same lifetime and will already be bound together.
The name of the final class should be QWebContext (no &apos;t&apos; after &apos;Q&apos;).
So it would be great if you can use this name, and we can later on merge QtWebContext into QWebContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852193</commentid>
    <comment_count>26</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-03-11 04:49:16 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; I&apos;ve been thinking about it a bit, and maybe ultimately QtWebContext and QWebGlobal should be the same class. The have the same lifetime and will already be bound together.
&gt; The name of the final class should be QWebContext (no &apos;t&apos; after &apos;Q&apos;).
&gt; So it would be great if you can use this name, and we can later on merge QtWebContext into QWebContext.

After discussing with Tor Arne, having properties/functions directly in &quot;QtWebKit&quot; might not be the cleanest approach if we want to see &quot;QtWebKit&quot; as some kind of namespace in QML.
Instead, we could have &quot;QtWebKit.globalPreferences&quot;, &quot;QtWebKit.downloads&quot;, etc.

So please ignore my comment about QtWebContext. Moreover, maybe you could name your new class QWebGlobalPreferences, and make it available through QtWebKit.globalPreferences using something like:

qtWebKit = QQmlEngine::newObject();
qtWebKit.setProperty(&quot;globalPreferences&quot;, new QWebGlobalPreferences);
engine.setProperty(&quot;QtWebKit&quot;, qtWebKit);

Tell me if you see any issue with it, sorry for going back and forth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853336</commentid>
    <comment_count>27</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-03-12 04:32:11 -0700</bug_when>
    <thetext>(In reply to comment #26)

&gt; After discussing with Tor Arne, having properties/functions directly in &quot;QtWebKit&quot; might not be the cleanest approach if we want to see &quot;QtWebKit&quot; as some kind of namespace in QML.
&gt; Instead, we could have &quot;QtWebKit.globalPreferences&quot;, &quot;QtWebKit.downloads&quot;, etc.
&gt; 
&gt; So please ignore my comment about QtWebContext. Moreover, maybe you could name your new class QWebGlobalPreferences, and make it available through QtWebKit.globalPreferences using something like:

Uhm, makes sense this way of exposing it. It is very explicit about these properties being global, and that&apos;s good to avoid confusion.

&gt; 
&gt; qtWebKit = QQmlEngine::newObject();
&gt; qtWebKit.setProperty(&quot;globalPreferences&quot;, new QWebGlobalPreferences);
&gt; engine.setProperty(&quot;QtWebKit&quot;, qtWebKit);
&gt; 
&gt; Tell me if you see any issue with it, sorry for going back and forth.

I&apos;ll go back to this in next weeks and prepare a proper implementation taking all this into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956441</commentid>
    <comment_count>28</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-12-04 10:42:14 -0800</bug_when>
    <thetext>Qt port is not in WebKit anymore. Won&apos;t fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179990</attachid>
            <date>2012-12-18 11:43:29 -0800</date>
            <delta_ts>2012-12-19 03:51:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105034-20121218204045.patch</filename>
            <type>text/plain</type>
            <size>42334</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NhMDMzNzEyZTIwYjI5
MWM5ZGIxMDZjNDhjOTQwOWEwZTE1NTZlMi4uNTA3NjgxM2VkZmU3ZTliYjE0NDNiNWI2YjNjZDI4
Zjg3Y2Q1MGFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEyLTE4ICBKb3PD
qSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBB
ZGQgc3BlbGwgY2hlY2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIFRleHRDaGVja2VyRW5j
aGFudCBmb3IgUXQgV2ViS2l0LgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLnByaToKKwogMjAxMi0xMi0xNCAgQWxiZXJ0byBHYXJjaWEgIDxhZ2FyY2lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gV2hlbiBpbiBwcml2YXRlIG1vZGUgV2ViS2l0R1RLKyBz
aG91bGQgbm90IHNhdmUgSFRUUCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyB0byB0aGUgcGVy
c2lzdGVudCBzdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGRkYTJjZDMyOWM3NzdlZDBiOTg2ZmUz
ZjYzYjRlNWNhMDg2MTQ5OTAuLjY1MzY2Y2IxNzhkYTcwZTU3ZjY2ZDNiNjE5YzBjMjI1NmYwMGZl
ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMTItMTggIEpvc8OpIERh
cGVuYSBQYXogIDxqZGFwZW5hQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIEFkZCBz
cGVsbCBjaGVja2luZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDUwMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFeHBvc2UgUVdlYlNoYXJlZCwgUVdlYlRleHRDaGVja2VyIGFuZCBRV2Vi
VGV4dENoZWNrZXJFbmNoYW50IG9uCisgICAgICAgIFFNTCBwbHVnaW4uCisKKyAgICAgICAgKiBk
ZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcDoKKyAgICAgICAgKiBkZWNsYXJhdGl2
ZS9wbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0UW1sUGx1Z2luOjpyZWdpc3RlclR5cGVzKToK
KyAgICAgICAgKiBkZWNsYXJhdGl2ZS9wdWJsaWMucHJpOgorCiAyMDEyLTEyLTEzICBKZXJvbWUg
UGFzaW9uICA8amVyb21lLnBhc2lvbkBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBEb2M6IEZp
eGluZyBRdCBXZWJLaXQgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTM4
MGViZDVhOTJjMjI3MDRjYTI5NzQ1YmRmNzI5MTQ3ZmViZmI0ZS4uNWVjNTY2NjVkMGQ5ZjkwYmI1
M2FmOWQ2N2QzODQwZTQyYjIxMTk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEy
LTEyLTE4ICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtRdF1bV0syXSBBZGQgc3BlbGwgY2hlY2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlbGxjaGVjayBzdXBwb3J0IGZvciBRdCBX
ZWJLaXQyLgorCisgICAgICAgIEFkZGVkIFdlYlZpZXcuZXhwZXJpbWVudGFsLnNoYXJlZCBwcm9w
ZXJ0eSwgZm9yIGFjY2Vzc2luZyB0aGUKKyAgICAgICAgb2JqZWN0cyBzaGFyZWQgYW1vbmcgYWxs
IHdlYiB2aWV3cy4gVGhpcyBpcyBmb3IgZXhwb3NpbmcgYW5kCisgICAgICAgIGFsbG93aW5nIHRv
IGNoYW5nZSB0aGUgY3VycmVudCB0ZXh0IGNoZWNrZXIuIFRoaXMgaXMgYSBnbG9iYWwKKyAgICAg
ICAgYXMgV2ViS2l0IGhvbGRzIGludGVybmFsbHkgYSBnbG9iYWwgZm9yIGVuYWJsZWQgdGV4dCBj
aGVja2VyCisgICAgICAgIHRvby4KKworICAgICAgICBUaGUgV2ViVGV4dENoZWNrZXIgb2JqZWN0
IGV4cG9zZXMgdGhlIHNlbGVjdGVkIHRleHQgY2hlY2tlciBBUEkKKyAgICAgICAgaW5jbHVkaW5n
IG1ldGhvZHMgZm9yIGVuYWJsaW5nIHRleHQgY2hlY2tpbmcgc3VwcG9ydCwgYW5kIGZvcgorICAg
ICAgICBzZXR0aW5nIHRoZSBsYW5ndWFnZXMgdXNlZC4gQWxzbyBhZGRlZCBhIGRlZmF1bHQgaW1w
bGVtZW50YXRpb24KKyAgICAgICAgdXNpbmcgVGV4dENoZWNrZXJFbmNoYW50IGluIFdlYkNvcmUu
CisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzaGFy
ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2Vic2hhcmVkLmNwcDogQWRkZWQuCisgICAgICAgIChR
V2ViU2hhcmVkOjpRV2ViU2hhcmVkKToKKyAgICAgICAgKFFXZWJTaGFyZWQ6OnRleHRDaGVja2Vy
KToKKyAgICAgICAgKFFXZWJTaGFyZWQ6OnNldFRleHRDaGVja2VyKToKKyAgICAgICAgKFFXZWJT
aGFyZWQ6Omluc3RhbmNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJzaGFyZWRf
cC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlci5j
cHA6IEFkZGVkLgorICAgICAgICAoUVdlYlRleHRDaGVja2VyOjpRV2ViVGV4dENoZWNrZXIpOgor
ICAgICAgICAoUVdlYlRleHRDaGVja2VyOjp+UVdlYlRleHRDaGVja2VyKToKKyAgICAgICAgKFFX
ZWJUZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChRV2ViVGV4
dENoZWNrZXI6OmlzU3BlbGxDaGVja2luZ0FsbG93ZWQpOgorICAgICAgICAoUVdlYlRleHRDaGVj
a2VyOjpzZXRTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXI6
OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXI6OmdldEd1
ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAg
ICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6aWdub3JlV29yZCk6CisgICAgICAgIChRV2ViVGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAodG9UZXh0Q2hl
Y2tlcik6CisgICAgICAgIChjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjayk6
CisgICAgICAgIChjb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWRDYWxsYmFjayk6CisgICAg
ICAgIChzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjayk6CisgICAgICAg
IChjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjayk6CisgICAgICAgIChndWVzc2VzRm9yV29y
ZENhbGxiYWNrKToKKyAgICAgICAgKGxlYXJuV29yZENhbGxiYWNrKToKKyAgICAgICAgKGlnbm9y
ZVdvcmRDYWxsYmFjayk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXI6OnNldFdLKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcl9wLmg6IEFkZGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFudC5jcHA6IEFkZGVkLgor
ICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFudDo6UVdlYlRleHRDaGVja2VyRW5jaGFudCk6
CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50Ojp+UVdlYlRleHRDaGVja2VyRW5jaGFu
dCk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50Ojppc1NwZWxsQ2hlY2tpbmdBbGxv
d2VkKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OmNoZWNrU3BlbGxpbmdPZlN0
cmluZyk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29y
ZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50OjpsZWFybldvcmQpOgorICAgICAg
ICAoUVdlYlRleHRDaGVja2VyRW5jaGFudDo6aWdub3JlV29yZCk6CisgICAgICAgIChRV2ViVGV4
dENoZWNrZXJFbmNoYW50Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAg
KFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjpRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJp
dmF0ZSk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6Y2hlY2tTcGVs
bGluZ09mU3RyaW5nKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjpn
ZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0
ZTo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjpp
Z25vcmVXb3JkKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjp1cGRh
dGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3
ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmg6IEFkZGVkLgorICAgICAgICAoUVdlYlRl
eHRDaGVja2VyRW5jaGFudFByaXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9UZXh0Q2hl
Y2tlclF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2Vk
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjppZ25vcmVXb3JkKToKKwogMjAxMi0xMi0xNCAgQWxiZXJ0byBHYXJjaWEg
IDxhZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2hlbiBpbiBwcml2YXRlIG1v
ZGUgV2ViS2l0R1RLKyBzaG91bGQgbm90IHNhdmUgSFRUUCBhdXRoZW50aWNhdGlvbiBjcmVkZW50
aWFscyB0byB0aGUgcGVyc2lzdGVudCBzdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA4MDM5NjdlY2Q3
YzBhOWRkYjBlMzJiYWFiZWE4MjQ4ZTU3MDQ5OGRjLi42MTg3NjlhMzc3ZDg0M2FkYzBmOGM3MTQy
MGE2ZjJmZGUyYzlkZGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQwNzcsNiArNDA3NywxMSBAQCB1c2U/
KFdFQlApIHsKICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VC
UEltYWdlRGVjb2Rlci5jcHAKIH0KIAordXNlPyhMSUJFTkNIQU5UKSB7CisgICAgSEVBREVSUyAr
PSBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKKyAgICBTT1VSQ0VT
ICs9IHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCit9CisKICFo
YXZlPyhzcWxpdGUzKTpleGlzdHMoJCR7U1FMSVRFM1NSQ0RJUn0vc3FsaXRlMy5jKSB7CiAgICAg
IyBCdWlsZCBzcWxpdGUzIGludG8gV2ViQ29yZSBmcm9tIHNvdXJjZQogICAgICMgc29tZXdoYXQg
Y29waWVkIGZyb20gJCRRVF9TT1VSQ0VfVFJFRS9zcmMvcGx1Z2lucy9zcWxkcml2ZXJzL3NxbGl0
ZS9zcWxpdGUucHJvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IGZlMjE1NGM1NDk5YmIzMjQ0NTc1ZWUxMDk4
ZThjZmI3MWMyN2FiMzAuLmQ1YTUwM2Y5OTE0MmNjMDIyNjM1OWY4MWE1MDQ1NzMzNzEyYjMyOTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJpCkBAIC0yNTEsNiArMjUxLDExIEBAIGhhdmU/KHNxbGl0ZTMpIHsKICAg
ICAgICAgTElCUyArPSAtbHNxbGl0ZTMKICAgICB9CiB9CitlbmFibGU/KFNQRUxMQ0hFQ0spIHsK
KyAgICB1c2U/KExJQkVOQ0hBTlQpIHsKKyAgICAgICAgUEtHQ09ORklHICs9IGVuY2hhbnQKKyAg
ICB9Cit9CiAKIHVzZT8obGlianBlZyk6IExJQlMgKz0gLWxqcGVnCiB1c2U/KGxpYnBuZyk6IExJ
QlMgKz0gLWxwbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhw
ZXJpbWVudGFsL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVy
aW1lbnRhbC9wbHVnaW4uY3BwCmluZGV4IGU2ZmZlZGE2ZWIwYTUwYmE0MmYyZmY0ZTA2OTkwMmU0
YmFiYTU1NjAuLjMyM2ZmYzI0N2Y2NGU2MzZkZjdjY2ZkZGRhY2ViMTgxMTMwN2M3OGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3BsdWdpbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2lu
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInByaXZhdGUvcXdlYm5hdmlnYXRpb25o
aXN0b3J5X3AuaCIKICNpbmNsdWRlICJwcml2YXRlL3F3ZWJwZXJtaXNzaW9ucmVxdWVzdF9wLmgi
CiAjaW5jbHVkZSAicHJpdmF0ZS9xd2VicHJlZmVyZW5jZXNfcC5oIgorI2luY2x1ZGUgInByaXZh
dGUvcXdlYnNoYXJlZF9wLmgiCiAKICNpbmNsdWRlIDxRdFFtbC9xcW1sLmg+CiAjaW5jbHVkZSA8
UXRRbWwvcXFtbGV4dGVuc2lvbnBsdWdpbi5oPgpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFXZWJOYXZpZ2F0aW9uTGlzdE1vZGVs
Pih1cmksIDEsIDAsICJOYXZpZ2F0aW9uTGlzdE1vZGVsIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBj
cmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgTmF2aWdhdGlvbkxpc3RNb2RlbCIpKTsKICAgICAg
ICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYk5hdmlnYXRpb25IaXN0b3J5Pih1cmks
IDEsIDAsICJOYXZpZ2F0aW9uSGlzdG9yeSIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNl
cGFyYXRlIGluc3RhbmNlIG9mIE5hdmlnYXRpb25IaXN0b3J5IikpOwogICAgICAgICBxbWxSZWdp
c3RlclVuY3JlYXRhYmxlVHlwZTxRV2ViUHJlZmVyZW5jZXM+KHVyaSwgMSwgMCwgIldlYlByZWZl
cmVuY2VzIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2Yg
V2ViUHJlZmVyZW5jZXMiKSk7CisgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFX
ZWJTaGFyZWQ+KHVyaSwgMSwgMCwgIldlYlNoYXJlZCIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3Jl
YXRlIHNlcGFyYXRlIGluc3RhbmNlIG9mIFdlYlNoYXJlZCIpKTsKICAgICAgICAgcW1sUmVnaXN0
ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYlBlcm1pc3Npb25SZXF1ZXN0Pih1cmksIDEsIDAsICJQZXJt
aXNzaW9uUmVxdWVzdCIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3Rh
bmNlIG9mIFBlcm1pc3Npb25SZXF1ZXN0IikpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRh
YmxlVHlwZTxRdFdlYlNlY3VyaXR5T3JpZ2luPih1cmksIDEsIDAsICJTZWN1cml0eU9yaWdpbiIs
IFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9mIFNlY3VyaXR5
T3JpZ2luIikpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3Bs
dWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKaW5kZXgg
NTZlYWM2MzJkYmE5MTY2YjcxNWUzZTcyODQwMjZmMTE0YmUzMWQ2My4uYjM0NjA2NmFiZjJiYzkx
ZjI2NzQxNjVjOTQ2MDVhYTVjMWVhN2UxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9k
ZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUv
cGx1Z2luLmNwcApAQCAtMzAsNiArMzAsMTAgQEAKICNpbmNsdWRlICJwcml2YXRlL3F3ZWJpY29u
aW1hZ2Vwcm92aWRlcl9wLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9xd2VibG9hZHJlcXVlc3RfcC5o
IgogI2luY2x1ZGUgInByaXZhdGUvcXdlYm5hdmlnYXRpb25yZXF1ZXN0X3AuaCIKKyNpbmNsdWRl
ICJwcml2YXRlL3F3ZWJ0ZXh0Y2hlY2tlcl9wLmgiCisjaWYgZGVmaW5lZChXVEZfVVNFX0xJQkVO
Q0hBTlQpCisjaW5jbHVkZSAicHJpdmF0ZS9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaCIKKyNl
bmRpZgogCiAjaW5jbHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrcmVwbHkuaD4KICNpbmNsdWRlIDxR
dFFtbC9xcW1sZW5naW5lLmg+CkBAIC01OSw2ICs2MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHFt
bFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFOZXR3b3JrUmVwbHk+KHVyaSwgMywgMCwgIk5ldHdv
cmtSZXBseSIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9m
IE5ldHdvcmtSZXBseSIpKTsKICAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdl
Yk5hdmlnYXRpb25SZXF1ZXN0Pih1cmksIDMsIDAsICJOYXZpZ2F0aW9uUmVxdWVzdCIsIFFPYmpl
Y3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9mIE5hdmlnYXRpb25SZXF1
ZXN0IikpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRV2ViTG9hZFJlcXVl
c3Q+KHVyaSwgMywgMCwgIldlYkxvYWRSZXF1ZXN0IiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVh
dGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgV2ViTG9hZFJlcXVlc3QiKSk7CisgICAgICAgIHFtbFJl
Z2lzdGVyVHlwZTxRV2ViVGV4dENoZWNrZXI+KHVyaSwgMywgMCwgIldlYlRleHRDaGVja2VyIik7
CisjaWYgZGVmaW5lZChXVEZfVVNFX0xJQkVOQ0hBTlQpCisgICAgICAgIHFtbFJlZ2lzdGVyVHlw
ZTxRV2ViVGV4dENoZWNrZXJFbmNoYW50Pih1cmksIDMsIDAsICJXZWJUZXh0Q2hlY2tlckVuY2hh
bnQiKTsKKyNlbmRpZgogI2VuZGlmCiAgICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaSBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvcHVibGljLnByaQppbmRleCAzMmIzOTAwYmVkYzJlMWM0MGExNTFhM2VjNDA4YjEwNDE3YTdj
ZjVmLi45MzFkMzQ2NDBiZTNmOGYwZGE2MzM3NjQ3MGI0MWE1YzhjM2I2MGI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKKysrIGIvU291cmNlL1dl
YktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpCkBAIC0zOCw2ICszOCwxMiBAQCBTT1VSQ0VT
ICs9IHBsdWdpbi5jcHAKIGJ1aWxkPyh3ZWJraXQyKTogewogICAgIERFRklORVMgKz0gSEFWRV9X
RUJLSVQyCiAgICAgUVQgKz0gbmV0d29yaworCisgICAgY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1NQRUxMQ0hFQ0s9MSkgeworICAgICAgICBjb25maWdfbGliZW5jaGFudCB7CisgICAgICAgICAg
ICBERUZJTkVTICs9IFdURl9VU0VfTElCRU5DSEFOVD0xCisgICAgICAgIH0KKyAgICB9CiB9CiAK
ICMgVGhlIGZhbGxiYWNrIHRvIFFUX0lOU1RBTExfSU1QT1JUUyBjYW4gYmUgcmVtb3ZlZCBvbmNl
IHdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQppbmRleCA1ODMzODk2YTgxMTAwZGM0NGFiODEwMWEwMTM3NGFjNDk0ZWNm
ZTUyLi5kYzU4YTZhNjc2NTAwOWIwNGRlMTJhODFkOGQxZTMyYmZjZDIzYzBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkKQEAgLTgwNyw2ICs4MDcsOCBAQCBoYXZlPyhRVFFVSUNLKSB7CiAgICAgICAgIFVJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oIFwKICAgICAgICAgVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9wLmggXAogICAgICAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJraXR0ZXN0X3AuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRj
aGVja2VyX3AuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZF9wLmggXAog
ICAgICAgICBVSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmggXAog
ICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmggXAogICAgICAgICBVSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggXApAQCAtODQxLDYgKzg0Myw4IEBAIGhhdmU/KFFU
UVVJQ0spIHsKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdC5j
cHAgXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNw
cCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcCBcCisgICAg
ICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZC5jcHAgXAorICAgICAgICBVSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlci5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3
ZWJraXR0ZXN0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50UXQuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0RGlhbG9nUnVubmVyLmNw
cCBcCkBAIC04NjgsNiArODcyLDE4IEBAIGhhdmU/KFFUUVVJQ0spIHsKICAgICAgICAgU09VUkNF
UyArPSBcCiAgICAgICAgICAgICBVSVByb2Nlc3MvcXQvV2ViQ29sb3JDaG9vc2VyUHJveHlRdC5j
cHAKICAgICB9CisKKyAgICBlbmFibGU/KFNQRUxMQ0hFQ0spIHsKKyAgICAgICAgdXNlPyhMSUJF
TkNIQU5UKSB7CisgICAgICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfTElCRU5DSEFOVD0xCisg
ICAgICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgICAgICAgICBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcC5oIFwKKyAgICAgICAgICAgICAgICBVSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmgKKyAgICAgICAgICAgIFNPVVJDRVMg
Kz0gXAorICAgICAgICAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5j
aGFudC5jcHAKKyAgICAgICAgICAgIFBLR0NPTkZJRyArPSBlbmNoYW50CisgICAgICAgIH0KKyAg
ICB9CiB9CiAKIG1hYzogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlldy5jcHAKaW5kZXggZjIzNDg5MTRlMDllNDhlNmQ1YmY0NmMxNmJhYzc2MzUx
ZmFlMjk5Ny4uZjlmMjY0ZTM4YTNiODg1OTZmNzAyNmQyOTFkMzY0M2RhZmM1YTc5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBA
IC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAicXdlYm5hdmlnYXRpb25oaXN0b3J5X3BfcC5oIgog
I2luY2x1ZGUgInF3ZWJwcmVmZXJlbmNlc19wLmgiCiAjaW5jbHVkZSAicXdlYnByZWZlcmVuY2Vz
X3BfcC5oIgorI2luY2x1ZGUgInF3ZWJzaGFyZWRfcC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jh
c2UuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgpAQCAtMTA1MSw2
ICsxMDUyLDExIEBAIFFXZWJQcmVmZXJlbmNlcyogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
cHJlZmVyZW5jZXMoKSBjb25zdAogICAgIHJldHVybiBkLT5wcmVmZXJlbmNlcy5nZXQoKTsKIH0K
IAorUVdlYlNoYXJlZCogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2hhcmVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gUVdlYlNoYXJlZDo6aW5zdGFuY2UoKTsKK30KKwogdm9pZCBRUXVpY2tX
ZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRQcm9tcHREaWFsb2coUVFtbENvbXBvbmVudCogcHJvbXB0
RGlhbG9nKQogewogICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IDFiMzcyZmE0MDc1ZjUx
N2NmNmViMTYxYTc2M2UwNTMwNjg3MTg0OGUuLmFiN2E5N2IyNGUxOWQ2MTVmZDdlNGMyOTA5MDdi
MWUxY2E1YjA2ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3X3AuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsOwogY2xhc3MgUVdlYkRvd25sb2FkSXRlbTsKIGNsYXNzIFFXZWJOYXZpZ2F0aW9u
SGlzdG9yeTsKIGNsYXNzIFFXZWJQcmVmZXJlbmNlczsKK2NsYXNzIFFXZWJTaGFyZWQ7CiBjbGFz
cyBRV2ViUGVybWlzc2lvblJlcXVlc3Q7CiBjbGFzcyBRV2ViS2l0VGVzdDsKIGNsYXNzIFFRdWlj
a05ldHdvcmtSZXBseTsKQEAgLTI3MSw2ICsyNzIsNyBAQCBjbGFzcyBRV0VCS0lUX0VYUE9SVCBR
UXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsIDogcHVibGljIFFPYmplY3QgewogICAgIFFfUFJPUEVS
VFkoUVFtbENvbXBvbmVudCogY29sb3JDaG9vc2VyIFJFQUQgY29sb3JDaG9vc2VyIFdSSVRFIHNl
dENvbG9yQ2hvb3NlciBOT1RJRlkgY29sb3JDaG9vc2VyQ2hhbmdlZCkKIAogICAgIFFfUFJPUEVS
VFkoUVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5U
IEZJTkFMKQorICAgIFFfUFJPUEVSVFkoUVdlYlNoYXJlZCogc2hhcmVkIFJFQUQgc2hhcmVkIENP
TlNUQU5UIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoUVdlYktpdFRlc3QqIHRlc3QgUkVBRCB0ZXN0
IENPTlNUQU5UIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoUVFtbExpc3RQcm9wZXJ0eTxRUXVpY2tV
cmxTY2hlbWVEZWxlZ2F0ZT4gdXJsU2NoZW1lRGVsZWdhdGVzIFJFQUQgc2NoZW1lRGVsZWdhdGVz
KQogICAgIFFfUFJPUEVSVFkoUVN0cmluZyB1c2VyQWdlbnQgUkVBRCB1c2VyQWdlbnQgV1JJVEUg
c2V0VXNlckFnZW50IE5PVElGWSB1c2VyQWdlbnRDaGFuZ2VkKQpAQCAtMzE4LDYgKzMyMCw3IEBA
IHB1YmxpYzoKICAgICBRV2ViS2l0VGVzdCogdGVzdCgpOwogCiAgICAgUVdlYlByZWZlcmVuY2Vz
KiBwcmVmZXJlbmNlcygpIGNvbnN0OworICAgIFFXZWJTaGFyZWQqIHNoYXJlZCgpIGNvbnN0Owog
ICAgIFFXZWJOYXZpZ2F0aW9uSGlzdG9yeSogbmF2aWdhdGlvbkhpc3RvcnkoKSBjb25zdDsKICAg
ICBRUXVpY2tXZWJQYWdlKiBwYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJzaGFyZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhMjUyMTdlZjI4OWRiMmNkMjlmMmVl
MjU2NjhmMTc5MmEyY2IzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F3ZWJzaGFyZWQuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJxd2Vic2hhcmVkX3AuaCIKKworI2luY2x1ZGUgInF3ZWJ0ZXh0Y2hlY2tlcl9wLmgi
CisjaWYgVVNFKExJQkVOQ0hBTlQpCisjaW5jbHVkZSAicXdlYnRleHRjaGVja2VyZW5jaGFudF9w
LmgiCisjZW5kaWYKKworUVdlYlNoYXJlZDo6UVdlYlNoYXJlZCgpCisgICAgOiBtX3RleHRDaGVj
a2VyKDApCit7CisjaWYgVVNFKExJQkVOQ0hBTlQpCisgICAgbV90ZXh0Q2hlY2tlciA9IG5ldyBR
V2ViVGV4dENoZWNrZXJFbmNoYW50OworICAgIG1fdGV4dENoZWNrZXItPnNldFdLKCk7CisjZW5k
aWYKK30KKworUVdlYlRleHRDaGVja2VyKiBRV2ViU2hhcmVkOjp0ZXh0Q2hlY2tlcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXI7Cit9CisKK3ZvaWQgUVdlYlNoYXJlZDo6c2V0
VGV4dENoZWNrZXIoUVdlYlRleHRDaGVja2VyICp0ZXh0Q2hlY2tlcikKK3sKKyAgICBpZiAobV90
ZXh0Q2hlY2tlciA9PSB0ZXh0Q2hlY2tlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90ZXh0
Q2hlY2tlciA9IHRleHRDaGVja2VyOworICAgIGlmIChtX3RleHRDaGVja2VyKQorICAgICAgICBt
X3RleHRDaGVja2VyLT5zZXRXSygpOworICAgIGVtaXQgdGV4dENoZWNrZXJDaGFuZ2VkKCk7Cit9
CisKK1FXZWJTaGFyZWQqIFFXZWJTaGFyZWQ6Omluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgUVdl
YlNoYXJlZCogc19pbnN0YW5jZSA9IDA7CisgICAgaWYgKCFzX2luc3RhbmNlKQorICAgICAgICBz
X2luc3RhbmNlID0gbmV3IFFXZWJTaGFyZWQoKTsKKworICAgIHJldHVybiBzX2luc3RhbmNlOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Vic2hhcmVk
X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZF9wLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWYzNTg5MGRjMGM5Y2VjMThjNmRlNWRlYzg1MzYwYjJlNjYyY2U2YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZF9w
LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgcXdlYnNoYXJlZF9wX2gKKyNkZWZpbmUgcXdlYnNoYXJlZF9wX2gKKwor
I2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKworI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0Pgor
CitjbGFzcyBRV2ViVGV4dENoZWNrZXI7CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJTaGFy
ZWQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKyAgICBRX1BST1BFUlRZKFFXZWJU
ZXh0Q2hlY2tlciogdGV4dENoZWNrZXIgUkVBRCB0ZXh0Q2hlY2tlciBXUklURSBzZXRUZXh0Q2hl
Y2tlciBOT1RJRlkgdGV4dENoZWNrZXJDaGFuZ2VkKQorCitwdWJsaWM6CisgICAgc3RhdGljIFFX
ZWJTaGFyZWQqIGluc3RhbmNlKCk7CisgICAgUVdlYlRleHRDaGVja2VyKiB0ZXh0Q2hlY2tlcigp
IGNvbnN0OworICAgIHZvaWQgc2V0VGV4dENoZWNrZXIoUVdlYlRleHRDaGVja2VyKiB0ZXh0Q2hl
Y2tlcik7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHRleHRDaGVja2VyQ2hhbmdlZCgpOworICAg
IAorcHJpdmF0ZToKKyAgICBleHBsaWNpdCBRV2ViU2hhcmVkKCk7CisgICAgUVdlYlRleHRDaGVj
a2VyICptX3RleHRDaGVja2VyOworICAgIAorfTsKKworI2VuZGlmIC8vIHF3ZWJzaGFyZWRfcF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hl
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODlmY2RkOTg5ZjIwNGNjNzdkYmZiN2RiODUwNzExYzMwOWI2NDlj
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdl
YnRleHRjaGVja2VyLmNwcApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInF3
ZWJ0ZXh0Y2hlY2tlcl9wLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJX
S0FycmF5LmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS1JldGFp
blB0ci5oIgorI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKKyNpbmNsdWRlICJXS1RleHRDaGVja2Vy
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCitRV2ViVGV4dENoZWNrZXI6OlFXZWJUZXh0Q2hlY2tlcigpCit7Cit9CisKK1FXZWJU
ZXh0Q2hlY2tlcjo6flFXZWJUZXh0Q2hlY2tlcigpCit7Cit9CisKK2Jvb2wgUVdlYlRleHRDaGVj
a2VyOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zcGVs
bENoZWNraW5nRW5hYmxlZDsKK30KKworYm9vbCBRV2ViVGV4dENoZWNrZXI6OmlzU3BlbGxDaGVj
a2luZ0FsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBRV2Vi
VGV4dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAg
IGlmIChtX3NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGVuYWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9zcGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBXS1RleHRDaGVja2Vy
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAg
ICBlbWl0IHNwZWxsQ2hlY2tpbmdFbmFibGVkQ2hhbmdlZCgpOworfQorCit2b2lkIFFXZWJUZXh0
Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmLCBpbnQmLCBpbnQm
KQoreworfQorCitRVmVjdG9yPFFTdHJpbmc+IFFXZWJUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0Zv
cldvcmQoY29uc3QgUVN0cmluZyYpCit7CisgICAgcmV0dXJuIFFWZWN0b3I8UVN0cmluZz4oKTsK
K30KKwordm9pZCBRV2ViVGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25zdCBRU3RyaW5nJikKK3sK
K30KKwordm9pZCBRV2ViVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYpCit7
Cit9CisKK3ZvaWQgUVdlYlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KGNvbnN0IFFMaXN0PFFTdHJpbmc+JikKK3sKK30KKworc3RhdGljIGlubGluZSBRV2ViVGV4dENo
ZWNrZXIqIHRvVGV4dENoZWNrZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UVdlYlRleHRDaGVja2VyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50
SW5mbykpOworfQorCitzdGF0aWMgYm9vbCBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRD
YWxsYmFjayhjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiB0b1RleHRDaGVj
a2VyKGNsaWVudEluZm8pLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Cit9CisKK3N0YXRpYyBi
b29sIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZENhbGxiYWNrKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgcmV0dXJuIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmlzU3Bl
bGxDaGVja2luZ0FsbG93ZWQoKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkQ2FsbGJhY2soYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPnNldFNwZWxsQ2hlY2tpbmdF
bmFibGVkKGVuYWJsZWQpOworfQorCitzdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmdD
YWxsYmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxs
aW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhXZWJLaXQ6OnRvSW1wbCh0ZXh0KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0
aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgpOworfQorCitzdGF0aWMgV0tBcnJheVJlZiBndWVzc2Vz
Rm9yV29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBRVmVjdG9yPFFTdHJpbmc+IGd1ZXNzZXMgPSB0b1RleHRD
aGVja2VyKGNsaWVudEluZm8pLT5nZXRHdWVzc2VzRm9yV29yZChXZWJLaXQ6OnRvSW1wbCh3b3Jk
KS0+c3RyaW5nKCkpOworICAgIGlmIChndWVzc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBXS011dGFibGVBcnJheVJlZiB3a1N1Z2dlc3Rpb25zID0gV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKTsKKyAgICBmb3JlYWNoIChjb25zdCBRU3RyaW5nJiBndWVzcywgZ3Vlc3Nlcykg
eworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTdWdnZXN0aW9uKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFFTdHJpbmcoZ3Vlc3MpKTsKKyAgICAgICAgV0tBcnJheUFwcGVu
ZEl0ZW0od2tTdWdnZXN0aW9ucywgd2tTdWdnZXN0aW9uLmdldCgpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gd2tTdWdnZXN0aW9uczsKK30KKworc3RhdGljIHZvaWQgbGVhcm5Xb3JkQ2FsbGJhY2so
dWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmxlYXJuV29yZChXZWJLaXQ6OnRvSW1w
bCh3b3JkKS0+c3RyaW5nKCkpOworfQorCitzdGF0aWMgdm9pZCBpZ25vcmVXb3JkQ2FsbGJhY2so
dWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmlnbm9yZVdvcmQoV2ViS2l0Ojp0b0lt
cGwod29yZCktPnN0cmluZygpKTsKK30KKworCit2b2lkIFFXZWJUZXh0Q2hlY2tlcjo6c2V0V0so
KQoreworICAgIFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQ7CisgICAgbWVt
c2V0KCZ0ZXh0Q2hlY2tlckNsaWVudCwgMCwgc2l6ZW9mKFdLVGV4dENoZWNrZXJDbGllbnQpKTsK
KyAgICB0ZXh0Q2hlY2tlckNsaWVudC52ZXJzaW9uID0ga1dLVGV4dENoZWNrZXJDbGllbnRDdXJy
ZW50VmVyc2lvbjsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5jbGllbnRJbmZvID0gdGhpczsKKyAg
ICB0ZXh0Q2hlY2tlckNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQgPSBjb250
aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVu
dC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5zZXRDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQgPSBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxs
YmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcgPSBjaGVj
a1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5ndWVzc2Vz
Rm9yV29yZCA9IGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2s7CisgICAgdGV4dENoZWNrZXJDbGllbnQu
bGVhcm5Xb3JkID0gbGVhcm5Xb3JkQ2FsbGJhY2s7CisgICAgdGV4dENoZWNrZXJDbGllbnQuaWdu
b3JlV29yZCA9IGlnbm9yZVdvcmRDYWxsYmFjazsKKworICAgIFdLVGV4dENoZWNrZXJTZXRDbGll
bnQoJnRleHRDaGVja2VyQ2xpZW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTU4Mzc2Yzc5YWVj
Mjg5Y2FhZjQxYjgxNTFmMTMwYWUxMzg3MGVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJfcC5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHF3
ZWJ0ZXh0Y2hlY2tlcl9wX2gKKyNkZWZpbmUgcXdlYnRleHRjaGVja2VyX3BfaAorCisjaW5jbHVk
ZSAicXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVk
ZSA8UXRDb3JlL1FTZXQ+CisjaW5jbHVkZSA8UXRDb3JlL1FTdHJpbmc+CisjaW5jbHVkZSA8UXRD
b3JlL1FWZWN0b3I+CisjaW5jbHVkZSA8UXRRbWwvcXFtbC5oPgorCitjbGFzcyBRV2ViU2hhcmVk
OworCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViVGV4dENoZWNrZXIgOiBwdWJsaWMgUU9iamVj
dCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBRV2ViVGV4dENoZWNrZXIo
KTsKKyAgICB2aXJ0dWFsIH5RV2ViVGV4dENoZWNrZXIoKTsKKworICAgIFFfUFJPUEVSVFkoYm9v
bCBzcGVsbENoZWNrQWxsb3dlZCBSRUFEIGlzU3BlbGxDaGVja2luZ0FsbG93ZWQpCisgICAgUV9Q
Uk9QRVJUWShib29sIGVuYWJsZWQgUkVBRCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkIFdSSVRFIHNl
dFNwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgIFFfUFJPUEVSVFkoUUxpc3Q8UVN0cmluZz4gbGFu
Z3VhZ2VzIFdSSVRFIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworCitwdWJsaWMgUV9T
TE9UUzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNTcGVsbENoZWNraW5nQWxsb3dlZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHN0cmluZywgaW50
JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2aXJ0
dWFsIFFWZWN0b3I8UVN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgUVN0cmluZyYgd29y
ZCk7CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5n
PiYgc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHNwZWxs
Q2hlY2tpbmdFbmFibGVkQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIFFfRElTQUJMRV9DT1BZ
KFFXZWJUZXh0Q2hlY2tlcikKKyAgICB2b2lkIHNldFdLKCk7CisKKyAgICBib29sIG1fc3BlbGxD
aGVja2luZ0VuYWJsZWQ7CisKKyAgICBmcmllbmQgUVdlYlNoYXJlZDsKK307CisKK1FNTF9ERUNM
QVJFX1RZUEUoUVdlYlRleHRDaGVja2VyKQorCisjZW5kaWYgLy8gcXdlYnRleHRjaGVja2VyX3Bf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNo
ZWNrZXJlbmNoYW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnRl
eHRjaGVja2VyZW5jaGFudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E4ZmY2NmU2MDkwMDlmMjFiN2YzNDc3
ZTllM2JkZWYxNjg3ZGRlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFudC5jcHAKQEAgLTAsMCArMSwxMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJxd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaCIKKworI2luY2x1
ZGUgInF3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmgiCisKK1FXZWJUZXh0Q2hlY2tlckVuY2hh
bnQ6OlFXZWJUZXh0Q2hlY2tlckVuY2hhbnQoKQorICAgIDogZChuZXcgUVdlYlRleHRDaGVja2Vy
RW5jaGFudFByaXZhdGUodGhpcykpCit7Cit9CisKK1FXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6On5R
V2ViVGV4dENoZWNrZXJFbmNoYW50KCkKK3sKKyAgICBkZWxldGUgZDsKK30KKworYm9vbCBRV2Vi
VGV4dENoZWNrZXJFbmNoYW50Ojppc1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBRV2ViVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZWxsaW5nTG9j
YXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpCit7CisgICAgZC0+Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKHN0cmluZywgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwor
fQorCitRVmVjdG9yPFFTdHJpbmc+IFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OmdldEd1ZXNzZXNG
b3JXb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpCit7CisgICAgcmV0dXJuIGQtPmdldEd1ZXNzZXNG
b3JXb3JkKHdvcmQpOworfQorCit2b2lkIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OmxlYXJuV29y
ZChjb25zdCBRU3RyaW5nJiB3b3JkKQoreworICAgIGQtPmxlYXJuV29yZCh3b3JkKTsKK30KKwor
dm9pZCBRV2ViVGV4dENoZWNrZXJFbmNoYW50OjppZ25vcmVXb3JkKGNvbnN0IFFTdHJpbmcmIHdv
cmQpCit7CisgICAgZC0+aWdub3JlV29yZCh3b3JkKTsKK30KKwordm9pZCBRV2ViVGV4dENoZWNr
ZXJFbmNoYW50Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFFMaXN0PFFTdHJp
bmc+JiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKQoreworICAgIGQtPnVwZGF0ZVNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Cit9CisKK1FXZWJUZXh0Q2hlY2tl
ckVuY2hhbnRQcml2YXRlOjpRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZShRV2ViVGV4dENo
ZWNrZXJFbmNoYW50ICpxKQorICAgIDogcShxKQorICAgICwgbV90ZXh0Q2hlY2tlcihXZWJDb3Jl
OjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpKQoreworCit9CisKK3ZvaWQgUVdlYlRleHRD
aGVja2VyRW5jaGFudFByaXZhdGU6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBRU3RyaW5n
JiBzdHJpbmcsIGludCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50JiBtaXNzcGVsbGluZ0xlbmd0
aCkKK3sKKyAgICBtX3RleHRDaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3RyaW5nLCBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK1FWZWN0b3I8UVN0
cmluZz4gUVdlYlRleHRDaGVja2VyRW5jaGFudFByaXZhdGU6OmdldEd1ZXNzZXNGb3JXb3JkKGNv
bnN0IFFTdHJpbmcmIHdvcmQpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IG1fdGV4
dENoZWNrZXItPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQpOworICAgIFFWZWN0b3I8UVN0cmluZz4g
cmVzdWx0OworICAgIGlmICghZ3Vlc3Nlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBndWVzc2VzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChndWVzc2VzW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBR
V2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6bGVhcm5Xb3JkKGNvbnN0IFFTdHJpbmcmIHdv
cmQpCit7CisgICAgbV90ZXh0Q2hlY2tlci0+bGVhcm5Xb3JkKHdvcmQpOworfQorCit2b2lkIFFX
ZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjppZ25vcmVXb3JkKGNvbnN0IFFTdHJpbmcmIHdv
cmQpCit7CisgICAgbV90ZXh0Q2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsKK30KKwordm9pZCBR
V2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyhjb25zdCBRTGlzdDxRU3RyaW5nPiYgc3BlbGxDaGVja2luZ0xhbmd1YWdlcykKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAgZm9yZWFjaCAoY29uc3QgUVN0cmluZyYgc3Bl
bGxDaGVja2luZ0xhbmd1YWdlLCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKQorICAgICAgICBsYW5n
dWFnZXMuYXBwZW5kKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZSk7CisKKyAgICBtX3RleHRDaGVja2Vy
LT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRf
cC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNo
YW50X3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45OTNmMDU0N2E4MzAxYzBkMTNmYTA0NDQyODc1MjlmNDk0NDI0
ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBxd2VidGV4dGNoZWNrZXJlbmNo
YW50X3BfaAorI2RlZmluZSBxd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfaAorCisjaW5jbHVkZSAi
cXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSAicXdlYnRleHRjaGVja2VyX3AuaCIKKyNpbmNs
dWRlIDxRdFFtbC9xcW1sLmg+CisKK2NsYXNzIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRl
OworCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViVGV4dENoZWNrZXJFbmNoYW50IDogcHVibGlj
IFFXZWJUZXh0Q2hlY2tlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBR
V2ViVGV4dENoZWNrZXJFbmNoYW50KCk7CisgICAgdmlydHVhbCB+UVdlYlRleHRDaGVja2VyRW5j
aGFudCgpOworCisgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkgY29uc3Q7CisgICAg
dm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBpbnQmIG1p
c3NwZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIFFWZWN0b3I8
UVN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgUVN0cmluZyYgd29yZCk7CisgICAgdm9p
ZCBsZWFybldvcmQoY29uc3QgUVN0cmluZyYgd29yZCk7CisgICAgdm9pZCBpZ25vcmVXb3JkKGNv
bnN0IFFTdHJpbmcmIHdvcmQpOworICAgIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyhjb25zdCBRTGlzdDxRU3RyaW5nPiYgc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisKK3ByaXZh
dGU6CisgICAgUV9ESVNBQkxFX0NPUFkoUVdlYlRleHRDaGVja2VyRW5jaGFudCkKKyAgICBRV2Vi
VGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZSogZDsKK307CisKK1FNTF9ERUNMQVJFX1RZUEUoUVdl
YlRleHRDaGVja2VyRW5jaGFudCkKKworI2VuZGlmIC8vIHF3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRf
cF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0
Y2hlY2tlcmVuY2hhbnRfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3
ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q3OTU3MmZiYjRhZTViYTMw
YTg3YmY0ODQyOWU4MTIyYmI4NGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFudF9wX3AuaApAQCAtMCwwICsx
LDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBxd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcF9oCisjZGVmaW5lIHF3ZWJ0ZXh0Y2hlY2tlcmVu
Y2hhbnRfcF9wX2gKKworI2luY2x1ZGUgInF3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcC5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckVuY2hhbnQuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisKK2NsYXNzIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlIHsKK3B1YmxpYzoK
KyAgICBRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZShRV2ViVGV4dENoZWNrZXJFbmNoYW50
KiBxKTsKKworICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHN0
cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKTsK
KyAgICBRVmVjdG9yPFFTdHJpbmc+IGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFFTdHJpbmcmIHdv
cmQpOworICAgIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpOworICAgIHZvaWQg
aWdub3JlV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsKKyAgICB2b2lkIHVwZGF0ZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoY29uc3QgUUxpc3Q8UVN0cmluZz4mIHNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMpOworCitwcml2YXRlOgorICAgIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQqIGNvbnN0IHE7Cisg
ICAgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudD4gbV90ZXh0Q2hlY2tlcjsKK307
CisKKyNlbmRpZiAvLyBxd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAKaW5kZXggNGEzMzE4NDA1YWQ1ZWM4
Y2U2MzYzMzRmN2Q4MGU1MDhhYWU2OGE5Mi4uM2YzNjU4M2JmNDQwMGYzZDYwNjM0ZDRkNTgxZjg2
N2M4MTllYWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RleHRD
aGVja2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tl
clF0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAKICNp
bmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogIApAQCAtMzcsOTMgKzM3LDEwMyBAQCBzdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0
ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6
c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgCisgICAgc3RhdGljIGJvb2wg
ZGlkSW5pdGlhbGl6ZVN0YXRlID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkK
KyAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisKKyAgICBXZWJUZXh0Q2hlY2tlckNs
aWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsKKyAgICB0
ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50
LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUu
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gIGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOworCiAgICAgcmV0dXJuIHRleHRD
aGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpzZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChzdGF0ZSgpLmlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsK
IH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlm
IChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hl
Y2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0g
ZW5hYmxlZDsKIH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRh
ZyhXZWJQYWdlUHJveHkqKQoraW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVu
dFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51
bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjbG9z
ZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpCit2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1l
bnRXaXRoVGFnKHRhZyk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90JiwgaW50MzJfdCYp
Cit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBpbnQzMl90JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCku
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5n
dGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CiB9CiAKLXZvaWQg
VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwg
dWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQz
Ml90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgVmVjdG9y
PFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFkR3Jh
bW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja0dy
YW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgZ3Jh
bW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CiB9CiAK
IGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAogdm9pZCBUZXh0
Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnRvZ2dsZVNwZWxs
aW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxlZFdv
cmQpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCit2b2lk
IFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBz
cGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdy
YW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFy
RGV0YWlsKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRf
dCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNw
ZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjps
ZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OmxlYXJu
V29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQogCiB2b2lkIFRleHRDaGVj
a2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3
b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAzMjM0OWNkMjdlYzEzMTMyOWQ5NjQyZDdkZDBhYWI1ZTRhODdiMWRj
Li44NGE1YWQ1MGYxZDg1NDZiMzAzNzlhYWU2ZjNiMDYxYTZhMjYwODNkIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTItMTItMTggIEpvc8OpIERhcGVuYSBQYXogIDxqZGFwZW5hQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEFkZCBzcGVsbCBjaGVja2luZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUwMzQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgc3BlbGxjaGVjayBieSBkZWZh
dWx0LCBhbmQgYnVpbGQgRW5jaGFudCBkZWZhdWx0IGJhY2tlbmQKKyAgICAgICAgaWYgRW5jaGFu
dCBpcyBhdmFpbGFibGUuIEFsc28gYWRkZWQgYSBjb25maWcgdGVzdCBmb3IgbGliZW5jaGFudC4K
KworICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9s
aWJlbmNoYW50L2xpYmVuY2hhbnQucHJvOiBBZGRlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNz
L2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVz
L2ZlYXR1cmVzLnByaToKKwogMjAxMi0xMi0xMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIC0tcHJvZmlsZXI9UFJPRklMRVIgb3B0aW9uIHRvIHJ1bi1wZXJm
LXRlc3RzIHRvIGFsbG93IHNwZWNpZnlpbmcgd2hpY2ggcHJvZmlsZXIgdG8gdXNlIG9uIHBsYXRm
b3JtcyB3aXRoIG1hbnkKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJl
bmNoYW50L2xpYmVuY2hhbnQuY3BwIGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYmVuY2hh
bnQvbGliZW5jaGFudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2UxYzJlNGU5YjIzZTUwMTliZDQwZjU4NTE3
YmY0N2UyMDg2NzNiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0
cy9saWJlbmNoYW50L2xpYmVuY2hhbnQuY3BwCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPGVu
Y2hhbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sK
KyAgICBlbmNoYW50X2dldF92ZXJzaW9uKCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdp
dCBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvIGIv
VG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYmVuY2hhbnQvbGliZW5jaGFudC5wcm8KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDU4OGIxYTQ2NTMzY2FkZGM4OGM0MmFlYmJmZmE0NTgzYzUyNDk0OAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQu
cHJvCkBAIC0wLDAgKzEsNCBAQAorQ09ORklHIC09IHF0CitTT1VSQ0VTID0gbGliZW5jaGFudC5j
cHAKK0NPTkZJRyArPSBsaW5rX3BrZ2NvbmZpZworUEtHQ09ORklHICs9IGVuY2hhbnQKZGlmZiAt
LWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIGIvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKaW5kZXggMmEwZWI0MDUxMjE2YTVj
YmM4ZjU4YWJiZWJiNmY5MzFhODcwNTk3MS4uZjAwZWQ1ZTczNmM2MmM1ZGMzOGFjZTM2ODVhNzY2
Yzk3YmU4N2UyZCAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0
dXJlcy5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYK
QEAgLTQ4LDYgKzQ4LDEwIEBAIGRlZmluZVRlc3QoZGV0ZWN0RmVhdHVyZXMpIHsKICAgICBjb25m
aWdfbGlicG5nOiBXRUJLSVRfQ09ORklHICs9IHVzZV9saWJwbmcKICAgICBlbHNlOiBDT05GSUdV
UkVfV0FSTklOR1MgKz0gIlBORyBsaWJyYXJ5IG5vdCBmb3VuZCwgUUltYWdlRGVjb2RlciB3aWxs
IGRlY29kZSBQTkcgaW1hZ2VzIgogCisgICAgZW5hYmxlPyhzcGVsbGNoZWNrKSB7CisgICAgICAg
IGNvbmZpZ19saWJlbmNoYW50OiBXRUJLSVRfQ09ORklHICs9IHVzZV9saWJlbmNoYW50CisgICAg
fQorCiAgICAgbGludXgtKiB7CiAgICAgICAgIGNvbmZpZ19saWJYY29tcG9zaXRlOiBXRUJLSVRf
Q09ORklHICs9IGhhdmVfeGNvbXBvc2l0ZQogICAgICAgICBjb25maWdfbGliWHJlbmRlcjogV0VC
S0lUX0NPTkZJRyArPSBoYXZlX3hyZW5kZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9m
ZWF0dXJlcy5wcmkKaW5kZXggZjEyMDMzMjQ3ZjlkNDM1NjEyNzA2YWZhZTU2MTM3NWZkYjJmZmM3
Yi4uNmFlOGZlMGE3OWIwODViOGJiNzQ4NTIyYWQ0NmU1ZmJjMzc1YTU5NSAxMDA2NDQKLS0tIGEv
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmkKKysrIGIvVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmkKQEAgLTk2LDYgKzk2LDcgQEAgRkVBVFVS
RV9ERUZBVUxUUyA9IFwKICAgICBFTkFCTEVfU0hBRE9XX0RPTT0wIFwKICAgICBFTkFCTEVfU0hB
UkVEX1dPUktFUlM9MSBcCiAgICAgRU5BQkxFX1NNT09USF9TQ1JPTExJTkc9MSBcCisgICAgRU5B
QkxFX1NQRUxMQ0hFQ0s9MSBcCiAgICAgRU5BQkxFX1NRTF9EQVRBQkFTRT0xIFwKICAgICBFTkFC
TEVfU1RZTEVfU0NPUEVEPTAgXAogICAgIEVOQUJMRV9TVkc9MSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180127</attachid>
            <date>2012-12-19 03:51:40 -0800</date>
            <delta_ts>2013-01-14 06:09:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105034-20121219124856.patch</filename>
            <type>text/plain</type>
            <size>42151</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmVhMWI3OTRlMzQ5ZjA3
YzY5Y2RjMTQ4ODAzM2UxOTMzNjRjOTRkMi4uODA2ODFkNmVmNzM0MGU2N2Y4OWRiYzlkZmEzYzZm
ZTY0MzcxOGYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEyLTE5ICBKb3PD
qSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBB
ZGQgc3BlbGwgY2hlY2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIFRleHRDaGVja2VyRW5j
aGFudCBmb3IgUXQgV2ViS2l0LgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLnByaToKKwogMjAxMi0xMi0xOSAgVGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgW1NoYWRvd10gVElUTEUgZWxlbWVudHMgaW4gU2hhZG93IERPTSBz
aG91bGQgbm90IGFmZmVjdCBkb2N1bWVudC50aXRsZSBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5k
ZXggMmQxZTcwYmIzMWU5MmY1ZTQ0MGQ5YmZiYTM4N2ZlY2Q2YjA4ZjEzMi4uNWYwOTRlZmZjNWQ5
ZmVlOTU1ZjI4YmVhODM4NWUyZjgzOTkxZDA0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAxMi0xMi0xOSAgSm9zw6kgRGFwZW5hIFBheiAgPGpkYXBlbmFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbUXRdW1dLMl0gQWRkIHNwZWxsIGNoZWNraW5nIHN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTAzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSBRV2ViU2hhcmVk
LCBRV2ViVGV4dENoZWNrZXIgYW5kIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQgb24KKyAgICAgICAg
UU1MIHBsdWdpbi4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4u
Y3BwOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXRR
bWxQbHVnaW46OnJlZ2lzdGVyVHlwZXMpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3B1YmxpYy5w
cmk6CisKIDIwMTItMTItMTggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9ucyBmcm9tIENvb2tpZXNTdHJhdGVn
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGU3NmQwZmU3M2RhOTg1ZGZmNTVjYTRiZGY3ZGIzZWE5ZjdjYWQ4NjEu
LjczMGJhZmFjMGU1NjdjNTM3MDI5MjQ2MTNkZGVkZWZmNjNiYjY1YjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw5MCBAQAorMjAxMi0xMi0xOSAgSm9zw6kgRGFwZW5hIFBheiAgPGpkYXBlbmFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gQWRkIHNwZWxsIGNoZWNraW5nIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTAzNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwZWxsY2hl
Y2sgc3VwcG9ydCBmb3IgUXQgV2ViS2l0Mi4KKworICAgICAgICBBZGRlZCBXZWJWaWV3LmV4cGVy
aW1lbnRhbC5zaGFyZWQgcHJvcGVydHksIGZvciBhY2Nlc3NpbmcgdGhlCisgICAgICAgIG9iamVj
dHMgc2hhcmVkIGFtb25nIGFsbCB3ZWIgdmlld3MuIFRoaXMgaXMgZm9yIGV4cG9zaW5nIGFuZAor
ICAgICAgICBhbGxvd2luZyB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgdGV4dCBjaGVja2VyLiBUaGlz
IGlzIGEgZ2xvYmFsCisgICAgICAgIGFzIFdlYktpdCBob2xkcyBpbnRlcm5hbGx5IGEgZ2xvYmFs
IGZvciBlbmFibGVkIHRleHQgY2hlY2tlcgorICAgICAgICB0b28uCisKKyAgICAgICAgVGhlIFdl
YlRleHRDaGVja2VyIG9iamVjdCBleHBvc2VzIHRoZSBzZWxlY3RlZCB0ZXh0IGNoZWNrZXIgQVBJ
CisgICAgICAgIGluY2x1ZGluZyBtZXRob2RzIGZvciBlbmFibGluZyB0ZXh0IGNoZWNraW5nIHN1
cHBvcnQsIGFuZCBmb3IKKyAgICAgICAgc2V0dGluZyB0aGUgbGFuZ3VhZ2VzIHVzZWQuIEFsc28g
YWRkZWQgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgICAgIHVzaW5nIFRleHRDaGVja2Vy
RW5jaGFudCBpbiBXZWJDb3JlLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAgICAoUVF1aWNrV2ViVmll
d0V4cGVyaW1lbnRhbDo6c2hhcmVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXdfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZC5jcHA6
IEFkZGVkLgorICAgICAgICAoUVdlYlNoYXJlZDo6UVdlYlNoYXJlZCk6CisgICAgICAgIChRV2Vi
U2hhcmVkOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChRV2ViU2hhcmVkOjpzZXRUZXh0Q2hlY2tl
cik6CisgICAgICAgIChRV2ViU2hhcmVkOjppbnN0YW5jZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xd2Vic2hhcmVkX3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xd2VidGV4dGNoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6
UVdlYlRleHRDaGVja2VyKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6flFXZWJUZXh0Q2hl
Y2tlcik6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXI6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWQp
OgorICAgICAgICAoUVdlYlRleHRDaGVja2VyOjppc1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAg
ICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAg
ICAoUVdlYlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoUVdl
YlRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNr
ZXI6OmxlYXJuV29yZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgor
ICAgICAgICAoUVdlYlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToK
KyAgICAgICAgKHRvVGV4dENoZWNrZXIpOgorICAgICAgICAoY29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkQ2FsbGJhY2spOgorICAgICAgICAoY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxv
d2VkQ2FsbGJhY2spOgorICAgICAgICAoc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Q2FsbGJhY2spOgorICAgICAgICAoY2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2spOgorICAg
ICAgICAoZ3Vlc3Nlc0ZvcldvcmRDYWxsYmFjayk6CisgICAgICAgIChsZWFybldvcmRDYWxsYmFj
ayk6CisgICAgICAgIChpZ25vcmVXb3JkQ2FsbGJhY2spOgorICAgICAgICAoUVdlYlRleHRDaGVj
a2VyOjpzZXRXSyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJf
cC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVu
Y2hhbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OlFXZWJU
ZXh0Q2hlY2tlckVuY2hhbnQpOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFudDo6flFX
ZWJUZXh0Q2hlY2tlckVuY2hhbnQpOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFudDo6
aXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFu
dDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFudDo6
bGVhcm5Xb3JkKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6Omlnbm9yZVdvcmQp
OgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFudDo6dXBkYXRlU3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6UVdlYlRl
eHRDaGVja2VyRW5jaGFudFByaXZhdGUpOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFu
dFByaXZhdGU6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChRV2ViVGV4dENoZWNr
ZXJFbmNoYW50UHJpdmF0ZTo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoUVdlYlRleHRD
aGVja2VyRW5jaGFudFByaXZhdGU6OmxlYXJuV29yZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNr
ZXJFbmNoYW50UHJpdmF0ZTo6aWdub3JlV29yZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJF
bmNoYW50UHJpdmF0ZTo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcC5oOiBBZGRl
ZC4KKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50
VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdp
dGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpnZXRH
dWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpsZWFybldvcmQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdub3JlV29yZCk6CiAyMDEyLTEyLTE5
ICBLeXVuZ1RhZSBLaW0gIDxrdGYua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVudXNlZCBw
YXJhbWV0ZXJzIG9uIFdlYkNvbnRleHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBkMTA0NWM1MGZmYjg4
ZmUxMmFkYTc5N2Q2ZDllYTE1NDYyNTE3NjVkLi4xOGJkMTBhMjVlYjk0ZjVlODI3ZmU2NmIwZjQ0
MGMwMDk1MTc3MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQwODQsNiArNDA4NCwxMSBAQCB1c2U/KFdF
QlApIHsKICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUElt
YWdlRGVjb2Rlci5jcHAKIH0KIAordXNlPyhMSUJFTkNIQU5UKSB7CisgICAgSEVBREVSUyArPSBw
bGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKKyAgICBTT1VSQ0VTICs9
IHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCit9CisKICFoYXZl
PyhzcWxpdGUzKTpleGlzdHMoJCR7U1FMSVRFM1NSQ0RJUn0vc3FsaXRlMy5jKSB7CiAgICAgIyBC
dWlsZCBzcWxpdGUzIGludG8gV2ViQ29yZSBmcm9tIHNvdXJjZQogICAgICMgc29tZXdoYXQgY29w
aWVkIGZyb20gJCRRVF9TT1VSQ0VfVFJFRS9zcmMvcGx1Z2lucy9zcWxkcml2ZXJzL3NxbGl0ZS9z
cWxpdGUucHJvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IGZlMjE1NGM1NDk5YmIzMjQ0NTc1ZWUxMDk4ZThj
ZmI3MWMyN2FiMzAuLmQ1YTUwM2Y5OTE0MmNjMDIyNjM1OWY4MWE1MDQ1NzMzNzEyYjMyOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJpCkBAIC0yNTEsNiArMjUxLDExIEBAIGhhdmU/KHNxbGl0ZTMpIHsKICAgICAg
ICAgTElCUyArPSAtbHNxbGl0ZTMKICAgICB9CiB9CitlbmFibGU/KFNQRUxMQ0hFQ0spIHsKKyAg
ICB1c2U/KExJQkVOQ0hBTlQpIHsKKyAgICAgICAgUEtHQ09ORklHICs9IGVuY2hhbnQKKyAgICB9
Cit9CiAKIHVzZT8obGlianBlZyk6IExJQlMgKz0gLWxqcGVnCiB1c2U/KGxpYnBuZyk6IExJQlMg
Kz0gLWxwbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJp
bWVudGFsL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1l
bnRhbC9wbHVnaW4uY3BwCmluZGV4IGU2ZmZlZGE2ZWIwYTUwYmE0MmYyZmY0ZTA2OTkwMmU0YmFi
YTU1NjAuLjMyM2ZmYzI0N2Y2NGU2MzZkZjdjY2ZkZGRhY2ViMTgxMTMwN2M3OGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3BsdWdpbi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInByaXZhdGUvcXdlYm5hdmlnYXRpb25oaXN0
b3J5X3AuaCIKICNpbmNsdWRlICJwcml2YXRlL3F3ZWJwZXJtaXNzaW9ucmVxdWVzdF9wLmgiCiAj
aW5jbHVkZSAicHJpdmF0ZS9xd2VicHJlZmVyZW5jZXNfcC5oIgorI2luY2x1ZGUgInByaXZhdGUv
cXdlYnNoYXJlZF9wLmgiCiAKICNpbmNsdWRlIDxRdFFtbC9xcW1sLmg+CiAjaW5jbHVkZSA8UXRR
bWwvcXFtbGV4dGVuc2lvbnBsdWdpbi5oPgpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFXZWJOYXZpZ2F0aW9uTGlzdE1vZGVsPih1
cmksIDEsIDAsICJOYXZpZ2F0aW9uTGlzdE1vZGVsIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVh
dGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgTmF2aWdhdGlvbkxpc3RNb2RlbCIpKTsKICAgICAgICAg
cW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYk5hdmlnYXRpb25IaXN0b3J5Pih1cmksIDEs
IDAsICJOYXZpZ2F0aW9uSGlzdG9yeSIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFy
YXRlIGluc3RhbmNlIG9mIE5hdmlnYXRpb25IaXN0b3J5IikpOwogICAgICAgICBxbWxSZWdpc3Rl
clVuY3JlYXRhYmxlVHlwZTxRV2ViUHJlZmVyZW5jZXM+KHVyaSwgMSwgMCwgIldlYlByZWZlcmVu
Y2VzIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgV2Vi
UHJlZmVyZW5jZXMiKSk7CisgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFXZWJT
aGFyZWQ+KHVyaSwgMSwgMCwgIldlYlNoYXJlZCIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRl
IHNlcGFyYXRlIGluc3RhbmNlIG9mIFdlYlNoYXJlZCIpKTsKICAgICAgICAgcW1sUmVnaXN0ZXJV
bmNyZWF0YWJsZVR5cGU8UVdlYlBlcm1pc3Npb25SZXF1ZXN0Pih1cmksIDEsIDAsICJQZXJtaXNz
aW9uUmVxdWVzdCIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNl
IG9mIFBlcm1pc3Npb25SZXF1ZXN0IikpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRhYmxl
VHlwZTxRdFdlYlNlY3VyaXR5T3JpZ2luPih1cmksIDEsIDAsICJTZWN1cml0eU9yaWdpbiIsIFFP
YmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9mIFNlY3VyaXR5T3Jp
Z2luIikpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKaW5kZXggNTZl
YWM2MzJkYmE5MTY2YjcxNWUzZTcyODQwMjZmMTE0YmUzMWQ2My4uYjM0NjA2NmFiZjJiYzkxZjI2
NzQxNjVjOTQ2MDVhYTVjMWVhN2UxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1
Z2luLmNwcApAQCAtMzAsNiArMzAsMTAgQEAKICNpbmNsdWRlICJwcml2YXRlL3F3ZWJpY29uaW1h
Z2Vwcm92aWRlcl9wLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9xd2VibG9hZHJlcXVlc3RfcC5oIgog
I2luY2x1ZGUgInByaXZhdGUvcXdlYm5hdmlnYXRpb25yZXF1ZXN0X3AuaCIKKyNpbmNsdWRlICJw
cml2YXRlL3F3ZWJ0ZXh0Y2hlY2tlcl9wLmgiCisjaWYgZGVmaW5lZChXVEZfVVNFX0xJQkVOQ0hB
TlQpCisjaW5jbHVkZSAicHJpdmF0ZS9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaCIKKyNlbmRp
ZgogCiAjaW5jbHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrcmVwbHkuaD4KICNpbmNsdWRlIDxRdFFt
bC9xcW1sZW5naW5lLmg+CkBAIC01OSw2ICs2MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHFtbFJl
Z2lzdGVyVW5jcmVhdGFibGVUeXBlPFFOZXR3b3JrUmVwbHk+KHVyaSwgMywgMCwgIk5ldHdvcmtS
ZXBseSIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9mIE5l
dHdvcmtSZXBseSIpKTsKICAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYk5h
dmlnYXRpb25SZXF1ZXN0Pih1cmksIDMsIDAsICJOYXZpZ2F0aW9uUmVxdWVzdCIsIFFPYmplY3Q6
OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9mIE5hdmlnYXRpb25SZXF1ZXN0
IikpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRV2ViTG9hZFJlcXVlc3Q+
KHVyaSwgMywgMCwgIldlYkxvYWRSZXF1ZXN0IiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUg
c2VwYXJhdGUgaW5zdGFuY2Ugb2YgV2ViTG9hZFJlcXVlc3QiKSk7CisgICAgICAgIHFtbFJlZ2lz
dGVyVHlwZTxRV2ViVGV4dENoZWNrZXI+KHVyaSwgMywgMCwgIldlYlRleHRDaGVja2VyIik7Cisj
aWYgZGVmaW5lZChXVEZfVVNFX0xJQkVOQ0hBTlQpCisgICAgICAgIHFtbFJlZ2lzdGVyVHlwZTxR
V2ViVGV4dENoZWNrZXJFbmNoYW50Pih1cmksIDMsIDAsICJXZWJUZXh0Q2hlY2tlckVuY2hhbnQi
KTsKKyNlbmRpZgogI2VuZGlmCiAgICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvZGVjbGFyYXRpdmUvcHVibGljLnByaSBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUv
cHVibGljLnByaQppbmRleCA1ZmM1OTg1ZWJkYTViYzEzNmIyMWE5NmVhM2YzOWJhYWYwNjI4MTQz
Li43YWFjZDA0MGUxMDRhMWMyOTc3YjNiZGJmY2U2MDIzZTkyYWQ1OWI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKKysrIGIvU291cmNlL1dlYktp
dC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpCkBAIC0zOCw2ICszOCwxMiBAQCBTT1VSQ0VTICs9
IHBsdWdpbi5jcHAKIGJ1aWxkPyh3ZWJraXQyKTogewogICAgIERFRklORVMgKz0gSEFWRV9XRUJL
SVQyCiAgICAgUVQgKz0gbmV0d29yaworCisgICAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NQ
RUxMQ0hFQ0s9MSkgeworICAgICAgICBjb25maWdfbGliZW5jaGFudCB7CisgICAgICAgICAgICBE
RUZJTkVTICs9IFdURl9VU0VfTElCRU5DSEFOVD0xCisgICAgICAgIH0KKyAgICB9CiB9CiAKICMg
VGhlIGZhbGxiYWNrIHRvIFFUX0lOU1RBTExfSU1QT1JUUyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQppbmRleCBiY2MyMTlhMDY4NGM3MzAwZDU1NjhmMjhkOGU4M2JmMTY0ODVjN2Jh
Li5lNzI5YjlkMTEwMjE0ZGZhOGY4MTM0ZWFiNTU2YmIyMjJhMjU2OTdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkK
QEAgLTgxMSw2ICs4MTEsOCBAQCBoYXZlPyhRVFFVSUNLKSB7CiAgICAgICAgIFVJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oIFwKICAgICAgICAgVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9wLmggXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJraXR0ZXN0X3AuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVj
a2VyX3AuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZF9wLmggXAogICAg
ICAgICBVSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmggXAogICAg
ICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggXApAQCAtODQ1LDYgKzg0Nyw4IEBAIGhhdmU/KFFUUVVJ
Q0spIHsKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdC5jcHAg
XAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcCBc
CiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcCBcCisgICAgICAg
IFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZC5jcHAgXAorICAgICAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJ0ZXh0Y2hlY2tlci5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJr
aXR0ZXN0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50UXQuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0RGlhbG9nUnVubmVyLmNwcCBc
CkBAIC04NzIsNiArODc2LDE4IEBAIGhhdmU/KFFUUVVJQ0spIHsKICAgICAgICAgU09VUkNFUyAr
PSBcCiAgICAgICAgICAgICBVSVByb2Nlc3MvcXQvV2ViQ29sb3JDaG9vc2VyUHJveHlRdC5jcHAK
ICAgICB9CisKKyAgICBlbmFibGU/KFNQRUxMQ0hFQ0spIHsKKyAgICAgICAgdXNlPyhMSUJFTkNI
QU5UKSB7CisgICAgICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfTElCRU5DSEFOVD0xCisgICAg
ICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3
ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcC5oIFwKKyAgICAgICAgICAgICAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmgKKyAgICAgICAgICAgIFNPVVJDRVMgKz0g
XAorICAgICAgICAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFu
dC5jcHAKKyAgICAgICAgICAgIFBLR0NPTkZJRyArPSBlbmNoYW50CisgICAgICAgIH0KKyAgICB9
CiB9CiAKIG1hYzogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAKaW5kZXggZjIzNDg5MTRlMDllNDhlNmQ1YmY0NmMxNmJhYzc2MzUxZmFl
Mjk5Ny4uZjlmMjY0ZTM4YTNiODg1OTZmNzAyNmQyOTFkMzY0M2RhZmM1YTc5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC01
NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAicXdlYm5hdmlnYXRpb25oaXN0b3J5X3BfcC5oIgogI2lu
Y2x1ZGUgInF3ZWJwcmVmZXJlbmNlc19wLmgiCiAjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3Bf
cC5oIgorI2luY2x1ZGUgInF3ZWJzaGFyZWRfcC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2Uu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgpAQCAtMTA1MSw2ICsx
MDUyLDExIEBAIFFXZWJQcmVmZXJlbmNlcyogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6cHJl
ZmVyZW5jZXMoKSBjb25zdAogICAgIHJldHVybiBkLT5wcmVmZXJlbmNlcy5nZXQoKTsKIH0KIAor
UVdlYlNoYXJlZCogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2hhcmVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gUVdlYlNoYXJlZDo6aW5zdGFuY2UoKTsKK30KKwogdm9pZCBRUXVpY2tXZWJW
aWV3RXhwZXJpbWVudGFsOjpzZXRQcm9tcHREaWFsb2coUVFtbENvbXBvbmVudCogcHJvbXB0RGlh
bG9nKQogewogICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IDFiMzcyZmE0MDc1ZjUxN2Nm
NmViMTYxYTc2M2UwNTMwNjg3MTg0OGUuLmFiN2E5N2IyNGUxOWQ2MTVmZDdlNGMyOTA5MDdiMWUx
Y2E1YjA2ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3X3AuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBRUXVpY2tXZWJWaWV3RXhwZXJp
bWVudGFsOwogY2xhc3MgUVdlYkRvd25sb2FkSXRlbTsKIGNsYXNzIFFXZWJOYXZpZ2F0aW9uSGlz
dG9yeTsKIGNsYXNzIFFXZWJQcmVmZXJlbmNlczsKK2NsYXNzIFFXZWJTaGFyZWQ7CiBjbGFzcyBR
V2ViUGVybWlzc2lvblJlcXVlc3Q7CiBjbGFzcyBRV2ViS2l0VGVzdDsKIGNsYXNzIFFRdWlja05l
dHdvcmtSZXBseTsKQEAgLTI3MSw2ICsyNzIsNyBAQCBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsIDogcHVibGljIFFPYmplY3QgewogICAgIFFfUFJPUEVSVFko
UVFtbENvbXBvbmVudCogY29sb3JDaG9vc2VyIFJFQUQgY29sb3JDaG9vc2VyIFdSSVRFIHNldENv
bG9yQ2hvb3NlciBOT1RJRlkgY29sb3JDaG9vc2VyQ2hhbmdlZCkKIAogICAgIFFfUFJPUEVSVFko
UVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5UIEZJ
TkFMKQorICAgIFFfUFJPUEVSVFkoUVdlYlNoYXJlZCogc2hhcmVkIFJFQUQgc2hhcmVkIENPTlNU
QU5UIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoUVdlYktpdFRlc3QqIHRlc3QgUkVBRCB0ZXN0IENP
TlNUQU5UIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoUVFtbExpc3RQcm9wZXJ0eTxRUXVpY2tVcmxT
Y2hlbWVEZWxlZ2F0ZT4gdXJsU2NoZW1lRGVsZWdhdGVzIFJFQUQgc2NoZW1lRGVsZWdhdGVzKQog
ICAgIFFfUFJPUEVSVFkoUVN0cmluZyB1c2VyQWdlbnQgUkVBRCB1c2VyQWdlbnQgV1JJVEUgc2V0
VXNlckFnZW50IE5PVElGWSB1c2VyQWdlbnRDaGFuZ2VkKQpAQCAtMzE4LDYgKzMyMCw3IEBAIHB1
YmxpYzoKICAgICBRV2ViS2l0VGVzdCogdGVzdCgpOwogCiAgICAgUVdlYlByZWZlcmVuY2VzKiBw
cmVmZXJlbmNlcygpIGNvbnN0OworICAgIFFXZWJTaGFyZWQqIHNoYXJlZCgpIGNvbnN0OwogICAg
IFFXZWJOYXZpZ2F0aW9uSGlzdG9yeSogbmF2aWdhdGlvbkhpc3RvcnkoKSBjb25zdDsKICAgICBR
UXVpY2tXZWJQYWdlKiBwYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdlYnNoYXJlZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJzaGFyZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhMjUyMTdlZjI4OWRiMmNkMjlmMmVlMjU2
NjhmMTc5MmEyY2IzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F3ZWJzaGFyZWQuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJxd2Vic2hhcmVkX3AuaCIKKworI2luY2x1ZGUgInF3ZWJ0ZXh0Y2hlY2tlcl9wLmgiCisj
aWYgVVNFKExJQkVOQ0hBTlQpCisjaW5jbHVkZSAicXdlYnRleHRjaGVja2VyZW5jaGFudF9wLmgi
CisjZW5kaWYKKworUVdlYlNoYXJlZDo6UVdlYlNoYXJlZCgpCisgICAgOiBtX3RleHRDaGVja2Vy
KDApCit7CisjaWYgVVNFKExJQkVOQ0hBTlQpCisgICAgbV90ZXh0Q2hlY2tlciA9IG5ldyBRV2Vi
VGV4dENoZWNrZXJFbmNoYW50OworICAgIG1fdGV4dENoZWNrZXItPnNldFdLKCk7CisjZW5kaWYK
K30KKworUVdlYlRleHRDaGVja2VyKiBRV2ViU2hhcmVkOjp0ZXh0Q2hlY2tlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXI7Cit9CisKK3ZvaWQgUVdlYlNoYXJlZDo6c2V0VGV4
dENoZWNrZXIoUVdlYlRleHRDaGVja2VyICp0ZXh0Q2hlY2tlcikKK3sKKyAgICBpZiAobV90ZXh0
Q2hlY2tlciA9PSB0ZXh0Q2hlY2tlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90ZXh0Q2hl
Y2tlciA9IHRleHRDaGVja2VyOworICAgIGlmIChtX3RleHRDaGVja2VyKQorICAgICAgICBtX3Rl
eHRDaGVja2VyLT5zZXRXSygpOworICAgIGVtaXQgdGV4dENoZWNrZXJDaGFuZ2VkKCk7Cit9CisK
K1FXZWJTaGFyZWQqIFFXZWJTaGFyZWQ6Omluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgUVdlYlNo
YXJlZCogc19pbnN0YW5jZSA9IDA7CisgICAgaWYgKCFzX2luc3RhbmNlKQorICAgICAgICBzX2lu
c3RhbmNlID0gbmV3IFFXZWJTaGFyZWQoKTsKKworICAgIHJldHVybiBzX2luc3RhbmNlOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Vic2hhcmVkX3Au
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZF9wLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWYzNTg5MGRjMGM5Y2VjMThjNmRlNWRlYzg1MzYwYjJlNjYyY2U2YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnNoYXJlZF9wLmgK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgcXdlYnNoYXJlZF9wX2gKKyNkZWZpbmUgcXdlYnNoYXJlZF9wX2gKKworI2lu
Y2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKworI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorCitj
bGFzcyBRV2ViVGV4dENoZWNrZXI7CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJTaGFyZWQg
OiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKyAgICBRX1BST1BFUlRZKFFXZWJUZXh0
Q2hlY2tlciogdGV4dENoZWNrZXIgUkVBRCB0ZXh0Q2hlY2tlciBXUklURSBzZXRUZXh0Q2hlY2tl
ciBOT1RJRlkgdGV4dENoZWNrZXJDaGFuZ2VkKQorCitwdWJsaWM6CisgICAgc3RhdGljIFFXZWJT
aGFyZWQqIGluc3RhbmNlKCk7CisgICAgUVdlYlRleHRDaGVja2VyKiB0ZXh0Q2hlY2tlcigpIGNv
bnN0OworICAgIHZvaWQgc2V0VGV4dENoZWNrZXIoUVdlYlRleHRDaGVja2VyKiB0ZXh0Q2hlY2tl
cik7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHRleHRDaGVja2VyQ2hhbmdlZCgpOworICAgIAor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBRV2ViU2hhcmVkKCk7CisgICAgUVdlYlRleHRDaGVja2Vy
ICptX3RleHRDaGVja2VyOworICAgIAorfTsKKworI2VuZGlmIC8vIHF3ZWJzaGFyZWRfcF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODlmY2RkOTg5ZjIwNGNjNzdkYmZiN2RiODUwNzExYzMwOWI2NDljMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnRl
eHRjaGVja2VyLmNwcApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInF3ZWJ0
ZXh0Y2hlY2tlcl9wLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0Fy
cmF5LmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgorI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCitRV2ViVGV4dENoZWNrZXI6OlFXZWJUZXh0Q2hlY2tlcigpCit7Cit9CisKK1FXZWJUZXh0
Q2hlY2tlcjo6flFXZWJUZXh0Q2hlY2tlcigpCit7Cit9CisKK2Jvb2wgUVdlYlRleHRDaGVja2Vy
Ojppc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zcGVsbENo
ZWNraW5nRW5hYmxlZDsKK30KKworYm9vbCBRV2ViVGV4dENoZWNrZXI6OmlzU3BlbGxDaGVja2lu
Z0FsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBRV2ViVGV4
dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIGlm
IChtX3NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGVuYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zcGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBXS1RleHRDaGVja2VyQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICBl
bWl0IHNwZWxsQ2hlY2tpbmdFbmFibGVkQ2hhbmdlZCgpOworfQorCit2b2lkIFFXZWJUZXh0Q2hl
Y2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmLCBpbnQmLCBpbnQmKQor
eworfQorCitRVmVjdG9yPFFTdHJpbmc+IFFXZWJUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0Zvcldv
cmQoY29uc3QgUVN0cmluZyYpCit7CisgICAgcmV0dXJuIFFWZWN0b3I8UVN0cmluZz4oKTsKK30K
Kwordm9pZCBRV2ViVGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25zdCBRU3RyaW5nJikKK3sKK30K
Kwordm9pZCBRV2ViVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYpCit7Cit9
CisKK3ZvaWQgUVdlYlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNv
bnN0IFFMaXN0PFFTdHJpbmc+JikKK3sKK30KKworc3RhdGljIGlubGluZSBRV2ViVGV4dENoZWNr
ZXIqIHRvVGV4dENoZWNrZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UVdlYlRleHRDaGVja2VyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5m
bykpOworfQorCitzdGF0aWMgYm9vbCBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxs
YmFjayhjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiB0b1RleHRDaGVja2Vy
KGNsaWVudEluZm8pLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Cit9CisKK3N0YXRpYyBib29s
IGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZENhbGxiYWNrKGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgcmV0dXJuIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmlzU3BlbGxD
aGVja2luZ0FsbG93ZWQoKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkQ2FsbGJhY2soYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPnNldFNwZWxsQ2hlY2tpbmdFbmFi
bGVkKGVuYWJsZWQpOworfQorCitzdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxs
YmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhXZWJLaXQ6OnRvSW1wbCh0ZXh0KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0aW9u
LCAqbWlzc3BlbGxpbmdMZW5ndGgpOworfQorCitzdGF0aWMgV0tBcnJheVJlZiBndWVzc2VzRm9y
V29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKK3sKKyAgICBRVmVjdG9yPFFTdHJpbmc+IGd1ZXNzZXMgPSB0b1RleHRDaGVj
a2VyKGNsaWVudEluZm8pLT5nZXRHdWVzc2VzRm9yV29yZChXZWJLaXQ6OnRvSW1wbCh3b3JkKS0+
c3RyaW5nKCkpOworICAgIGlmIChndWVzc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBXS011dGFibGVBcnJheVJlZiB3a1N1Z2dlc3Rpb25zID0gV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKTsKKyAgICBmb3JlYWNoIChjb25zdCBRU3RyaW5nJiBndWVzcywgZ3Vlc3Nlcykgewor
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTdWdnZXN0aW9uKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFFTdHJpbmcoZ3Vlc3MpKTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0
ZW0od2tTdWdnZXN0aW9ucywgd2tTdWdnZXN0aW9uLmdldCgpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gd2tTdWdnZXN0aW9uczsKK30KKworc3RhdGljIHZvaWQgbGVhcm5Xb3JkQ2FsbGJhY2sodWlu
dDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmxlYXJuV29yZChXZWJLaXQ6OnRvSW1wbCh3
b3JkKS0+c3RyaW5nKCkpOworfQorCitzdGF0aWMgdm9pZCBpZ25vcmVXb3JkQ2FsbGJhY2sodWlu
dDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmlnbm9yZVdvcmQoV2ViS2l0Ojp0b0ltcGwo
d29yZCktPnN0cmluZygpKTsKK30KKworCit2b2lkIFFXZWJUZXh0Q2hlY2tlcjo6c2V0V0soKQor
eworICAgIFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQ7CisgICAgbWVtc2V0
KCZ0ZXh0Q2hlY2tlckNsaWVudCwgMCwgc2l6ZW9mKFdLVGV4dENoZWNrZXJDbGllbnQpKTsKKyAg
ICB0ZXh0Q2hlY2tlckNsaWVudC52ZXJzaW9uID0ga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50
VmVyc2lvbjsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5jbGllbnRJbmZvID0gdGhpczsKKyAgICB0
ZXh0Q2hlY2tlckNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQgPSBjb250aW51
b3VzU3BlbGxDaGVja2luZ0FsbG93ZWRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5j
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5zZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQgPSBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFj
azsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcgPSBjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmdDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5ndWVzc2VzRm9y
V29yZCA9IGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2s7CisgICAgdGV4dENoZWNrZXJDbGllbnQubGVh
cm5Xb3JkID0gbGVhcm5Xb3JkQ2FsbGJhY2s7CisgICAgdGV4dENoZWNrZXJDbGllbnQuaWdub3Jl
V29yZCA9IGlnbm9yZVdvcmRDYWxsYmFjazsKKworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQo
JnRleHRDaGVja2VyQ2xpZW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXdlYnRleHRjaGVja2VyX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTk3OTYzNmUxYjYyODVh
NzFhNGM4YmRkMjFmZjdmMWI3NzNlMTE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJfcC5oCkBAIC0wLDAgKzEsNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHF3ZWJ0
ZXh0Y2hlY2tlcl9wX2gKKyNkZWZpbmUgcXdlYnRleHRjaGVja2VyX3BfaAorCisjaW5jbHVkZSAi
cXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVkZSA8
UXRDb3JlL1FTZXQ+CisjaW5jbHVkZSA8UXRDb3JlL1FTdHJpbmc+CisjaW5jbHVkZSA8UXRDb3Jl
L1FWZWN0b3I+CisjaW5jbHVkZSA8UXRRbWwvcXFtbC5oPgorCitjbGFzcyBRV2ViU2hhcmVkOwor
CitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViVGV4dENoZWNrZXIgOiBwdWJsaWMgUU9iamVjdCB7
CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBRV2ViVGV4dENoZWNrZXIoKTsK
KyAgICB2aXJ0dWFsIH5RV2ViVGV4dENoZWNrZXIoKTsKKworICAgIFFfUFJPUEVSVFkoYm9vbCBz
cGVsbENoZWNrQWxsb3dlZCBSRUFEIGlzU3BlbGxDaGVja2luZ0FsbG93ZWQpCisgICAgUV9QUk9Q
RVJUWShib29sIGVuYWJsZWQgUkVBRCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkIFdSSVRFIHNldFNw
ZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgIFFfUFJPUEVSVFkoUUxpc3Q8UVN0cmluZz4gbGFuZ3Vh
Z2VzIFdSSVRFIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworCitwdWJsaWMgUV9TTE9U
UzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNTcGVsbENoZWNraW5nQWxsb3dlZCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHN0cmluZywgaW50JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2aXJ0dWFs
IFFWZWN0b3I8UVN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgUVN0cmluZyYgd29yZCk7
CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsKKyAgICB2
aXJ0dWFsIHZvaWQgaWdub3JlV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5nPiYg
c3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHNwZWxsQ2hl
Y2tpbmdFbmFibGVkQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIFFfRElTQUJMRV9DT1BZKFFX
ZWJUZXh0Q2hlY2tlcikKKyAgICB2b2lkIHNldFdLKCk7CisKKyAgICBib29sIG1fc3BlbGxDaGVj
a2luZ0VuYWJsZWQ7CisKKyAgICBmcmllbmQgY2xhc3MgUVdlYlNoYXJlZDsKK307CisKK1FNTF9E
RUNMQVJFX1RZUEUoUVdlYlRleHRDaGVja2VyKQorCisjZW5kaWYgLy8gcXdlYnRleHRjaGVja2Vy
X3BfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4
dGNoZWNrZXJlbmNoYW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdl
YnRleHRjaGVja2VyZW5jaGFudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E4ZmY2NmU2MDkwMDlmMjFiN2Yz
NDc3ZTllM2JkZWYxNjg3ZGRlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFudC5jcHAKQEAgLTAsMCArMSwxMDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJxd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaCIKKworI2lu
Y2x1ZGUgInF3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmgiCisKK1FXZWJUZXh0Q2hlY2tlckVu
Y2hhbnQ6OlFXZWJUZXh0Q2hlY2tlckVuY2hhbnQoKQorICAgIDogZChuZXcgUVdlYlRleHRDaGVj
a2VyRW5jaGFudFByaXZhdGUodGhpcykpCit7Cit9CisKK1FXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6
On5RV2ViVGV4dENoZWNrZXJFbmNoYW50KCkKK3sKKyAgICBkZWxldGUgZDsKK30KKworYm9vbCBR
V2ViVGV4dENoZWNrZXJFbmNoYW50Ojppc1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBRV2ViVGV4dENoZWNrZXJFbmNoYW50OjpjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpCit7CisgICAgZC0+Y2hlY2tTcGVsbGlu
Z09mU3RyaW5nKHN0cmluZywgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgp
OworfQorCitRVmVjdG9yPFFTdHJpbmc+IFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OmdldEd1ZXNz
ZXNGb3JXb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpCit7CisgICAgcmV0dXJuIGQtPmdldEd1ZXNz
ZXNGb3JXb3JkKHdvcmQpOworfQorCit2b2lkIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OmxlYXJu
V29yZChjb25zdCBRU3RyaW5nJiB3b3JkKQoreworICAgIGQtPmxlYXJuV29yZCh3b3JkKTsKK30K
Kwordm9pZCBRV2ViVGV4dENoZWNrZXJFbmNoYW50OjppZ25vcmVXb3JkKGNvbnN0IFFTdHJpbmcm
IHdvcmQpCit7CisgICAgZC0+aWdub3JlV29yZCh3b3JkKTsKK30KKwordm9pZCBRV2ViVGV4dENo
ZWNrZXJFbmNoYW50Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFFMaXN0PFFT
dHJpbmc+JiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKQoreworICAgIGQtPnVwZGF0ZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Cit9CisKK1FXZWJUZXh0Q2hl
Y2tlckVuY2hhbnRQcml2YXRlOjpRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZShRV2ViVGV4
dENoZWNrZXJFbmNoYW50ICpxKQorICAgIDogcShxKQorICAgICwgbV90ZXh0Q2hlY2tlcihXZWJD
b3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpKQoreworCit9CisKK3ZvaWQgUVdlYlRl
eHRDaGVja2VyRW5jaGFudFByaXZhdGU6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBRU3Ry
aW5nJiBzdHJpbmcsIGludCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50JiBtaXNzcGVsbGluZ0xl
bmd0aCkKK3sKKyAgICBtX3RleHRDaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3RyaW5n
LCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK1FWZWN0b3I8
UVN0cmluZz4gUVdlYlRleHRDaGVja2VyRW5jaGFudFByaXZhdGU6OmdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFFTdHJpbmcmIHdvcmQpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IG1f
dGV4dENoZWNrZXItPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQpOworICAgIFFWZWN0b3I8UVN0cmlu
Zz4gcmVzdWx0OworICAgIGlmICghZ3Vlc3Nlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBndWVzc2VzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChndWVzc2VzW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6bGVhcm5Xb3JkKGNvbnN0IFFTdHJpbmcm
IHdvcmQpCit7CisgICAgbV90ZXh0Q2hlY2tlci0+bGVhcm5Xb3JkKHdvcmQpOworfQorCit2b2lk
IFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjppZ25vcmVXb3JkKGNvbnN0IFFTdHJpbmcm
IHdvcmQpCit7CisgICAgbV90ZXh0Q2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsKK30KKwordm9p
ZCBRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5nPiYgc3BlbGxDaGVja2luZ0xhbmd1YWdlcykKK3sKKyAg
ICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAgZm9yZWFjaCAoY29uc3QgUVN0cmluZyYg
c3BlbGxDaGVja2luZ0xhbmd1YWdlLCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKQorICAgICAgICBs
YW5ndWFnZXMuYXBwZW5kKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZSk7CisKKyAgICBtX3RleHRDaGVj
a2VyLT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hh
bnRfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJl
bmNoYW50X3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTNmMDU0N2E4MzAxYzBkMTNmYTA0NDQyODc1MjlmNDk0
NDI0ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBxd2VidGV4dGNoZWNrZXJl
bmNoYW50X3BfaAorI2RlZmluZSBxd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfaAorCisjaW5jbHVk
ZSAicXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSAicXdlYnRleHRjaGVja2VyX3AuaCIKKyNp
bmNsdWRlIDxRdFFtbC9xcW1sLmg+CisKK2NsYXNzIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2
YXRlOworCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViVGV4dENoZWNrZXJFbmNoYW50IDogcHVi
bGljIFFXZWJUZXh0Q2hlY2tlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBRV2ViVGV4dENoZWNrZXJFbmNoYW50KCk7CisgICAgdmlydHVhbCB+UVdlYlRleHRDaGVja2Vy
RW5jaGFudCgpOworCisgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkgY29uc3Q7Cisg
ICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBpbnQm
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIFFWZWN0
b3I8UVN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgUVN0cmluZyYgd29yZCk7CisgICAg
dm9pZCBsZWFybldvcmQoY29uc3QgUVN0cmluZyYgd29yZCk7CisgICAgdm9pZCBpZ25vcmVXb3Jk
KGNvbnN0IFFTdHJpbmcmIHdvcmQpOworICAgIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5nPiYgc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisKK3By
aXZhdGU6CisgICAgUV9ESVNBQkxFX0NPUFkoUVdlYlRleHRDaGVja2VyRW5jaGFudCkKKyAgICBR
V2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZSogZDsKK307CisKK1FNTF9ERUNMQVJFX1RZUEUo
UVdlYlRleHRDaGVja2VyRW5jaGFudCkKKworI2VuZGlmIC8vIHF3ZWJ0ZXh0Y2hlY2tlcmVuY2hh
bnRfcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0
ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q3OTU3MmZiYjRhZTVi
YTMwYTg3YmY0ODQyOWU4MTIyYmI4NGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFudF9wX3AuaApAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBxd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcF9oCisjZGVmaW5lIHF3ZWJ0ZXh0Y2hlY2tl
cmVuY2hhbnRfcF9wX2gKKworI2luY2x1ZGUgInF3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcC5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckVuY2hhbnQuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisKK2NsYXNzIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlIHsKK3B1Ymxp
YzoKKyAgICBRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZShRV2ViVGV4dENoZWNrZXJFbmNo
YW50KiBxKTsKKworICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcm
IHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3Ro
KTsKKyAgICBRVmVjdG9yPFFTdHJpbmc+IGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFFTdHJpbmcm
IHdvcmQpOworICAgIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpOworICAgIHZv
aWQgaWdub3JlV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsKKyAgICB2b2lkIHVwZGF0ZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgUUxpc3Q8UVN0cmluZz4mIHNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMpOworCitwcml2YXRlOgorICAgIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQqIGNvbnN0IHE7
CisgICAgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudD4gbV90ZXh0Q2hlY2tlcjsK
K307CisKKyNlbmRpZiAvLyBxd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAKaW5kZXggNGEzMzE4NDA1YWQ1
ZWM4Y2U2MzYzMzRmN2Q4MGU1MDhhYWU2OGE5Mi4uM2YzNjU4M2JmNDQwMGYzZDYwNjM0ZDRkNTgx
Zjg2N2M4MTllYWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1Rl
eHRDaGVja2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UZXh0Q2hl
Y2tlclF0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAK
ICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogIApAQCAtMzcsOTMgKzM3LDEwMyBAQCBzdGF0aWMgVGV4dENoZWNrZXJTdGF0
ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tl
cjo6c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgCisgICAgc3RhdGljIGJv
b2wgZGlkSW5pdGlhbGl6ZVN0YXRlID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVTdGF0
ZSkKKyAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisKKyAgICBXZWJUZXh0Q2hlY2tl
ckNsaWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsKKyAg
ICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xp
ZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHRleHRDaGVja2VyU3Rh
dGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gIGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOworCiAgICAgcmV0dXJuIHRl
eHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNv
bnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChzdGF0ZSgp
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29s
IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKyAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFy
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
ID0gZW5hYmxlZDsKIH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVu
dFRhZyhXZWJQYWdlUHJveHkqKQoraW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1
bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS51bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpj
bG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpCit2b2lkIFRleHRDaGVja2VyOjpjbG9z
ZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9j
dW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90JiwgaW50MzJf
dCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBpbnQzMl90
JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBs
ZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFy
KiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBp
bnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgVmVj
dG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVj
a0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwg
Z3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CiB9
CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAogdm9pZCBU
ZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnRvZ2dsZVNw
ZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxp
bmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0
Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IHNwZWxs
RG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxl
ZFdvcmQpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1t
YXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCit2
b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRf
dCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0
IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFt
bWFyRGV0YWlsKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50
NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYg
Y29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3Jk
KHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwogfQogCi12b2lkIFRleHRDaGVja2Vy
OjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6Omxl
YXJuV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQogCiB2b2lkIFRleHRD
aGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5n
JiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBkYTE4OTMyZTkzMjAzOGEwNTFiNDU1ZTQ1YTlkMGJhMDIxMjk3
NjE0Li5lNTNjMDMyMGY3NWRhMWZhMGViMzc1ZDkxZDg1NzEwYTBmYWM1YTcyIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMTItMTkgIEpvc8OpIERhcGVuYSBQYXogIDxqZGFwZW5hQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW1F0XVtXSzJdIEFkZCBzcGVsbCBjaGVja2luZyBzdXBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgc3BlbGxjaGVjayBieSBk
ZWZhdWx0LCBhbmQgYnVpbGQgRW5jaGFudCBkZWZhdWx0IGJhY2tlbmQKKyAgICAgICAgaWYgRW5j
aGFudCBpcyBhdmFpbGFibGUuIEFsc28gYWRkZWQgYSBjb25maWcgdGVzdCBmb3IgbGliZW5jaGFu
dC4KKworICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0
cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvOiBBZGRlZC4KKyAgICAgICAgKiBxbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL2ZlYXR1cmVzLnByaToKKwogMjAxMi0xMi0xOCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNs
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzODA2
MS4KZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVu
Y2hhbnQuY3BwIGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYmVuY2hhbnQvbGliZW5jaGFu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2UxYzJlNGU5YjIzZTUwMTliZDQwZjU4NTE3YmY0N2UyMDg2NzNi
NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50
L2xpYmVuY2hhbnQuY3BwCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPGVuY2hhbnQuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sKKyAgICBlbmNoYW50
X2dldF92ZXJzaW9uKCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL3Ft
YWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvIGIvVG9vbHMvcW1ha2Uv
Y29uZmlnLnRlc3RzL2xpYmVuY2hhbnQvbGliZW5jaGFudC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU4OGIx
YTQ2NTMzY2FkZGM4OGM0MmFlYmJmZmE0NTgzYzUyNDk0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvCkBAIC0wLDAg
KzEsNCBAQAorQ09ORklHIC09IHF0CitTT1VSQ0VTID0gbGliZW5jaGFudC5jcHAKK0NPTkZJRyAr
PSBsaW5rX3BrZ2NvbmZpZworUEtHQ09ORklHICs9IGVuY2hhbnQKZGlmZiAtLWdpdCBhL1Rvb2xz
L3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVj
cy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKaW5kZXggMmEwZWI0MDUxMjE2YTVjYmM4ZjU4YWJiZWJi
NmY5MzFhODcwNTk3MS4uZjAwZWQ1ZTczNmM2MmM1ZGMzOGFjZTM2ODVhNzY2Yzk3YmU4N2UyZCAx
MDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKKysr
IGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAgLTQ4LDYgKzQ4
LDEwIEBAIGRlZmluZVRlc3QoZGV0ZWN0RmVhdHVyZXMpIHsKICAgICBjb25maWdfbGlicG5nOiBX
RUJLSVRfQ09ORklHICs9IHVzZV9saWJwbmcKICAgICBlbHNlOiBDT05GSUdVUkVfV0FSTklOR1Mg
Kz0gIlBORyBsaWJyYXJ5IG5vdCBmb3VuZCwgUUltYWdlRGVjb2RlciB3aWxsIGRlY29kZSBQTkcg
aW1hZ2VzIgogCisgICAgZW5hYmxlPyhzcGVsbGNoZWNrKSB7CisgICAgICAgIGNvbmZpZ19saWJl
bmNoYW50OiBXRUJLSVRfQ09ORklHICs9IHVzZV9saWJlbmNoYW50CisgICAgfQorCiAgICAgbGlu
dXgtKiB7CiAgICAgICAgIGNvbmZpZ19saWJYY29tcG9zaXRlOiBXRUJLSVRfQ09ORklHICs9IGhh
dmVfeGNvbXBvc2l0ZQogICAgICAgICBjb25maWdfbGliWHJlbmRlcjogV0VCS0lUX0NPTkZJRyAr
PSBoYXZlX3hyZW5kZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJpIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmkK
aW5kZXggZjEyMDMzMjQ3ZjlkNDM1NjEyNzA2YWZhZTU2MTM3NWZkYjJmZmM3Yi4uNmFlOGZlMGE3
OWIwODViOGJiNzQ4NTIyYWQ0NmU1ZmJjMzc1YTU5NSAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmkKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9m
ZWF0dXJlcy9mZWF0dXJlcy5wcmkKQEAgLTk2LDYgKzk2LDcgQEAgRkVBVFVSRV9ERUZBVUxUUyA9
IFwKICAgICBFTkFCTEVfU0hBRE9XX0RPTT0wIFwKICAgICBFTkFCTEVfU0hBUkVEX1dPUktFUlM9
MSBcCiAgICAgRU5BQkxFX1NNT09USF9TQ1JPTExJTkc9MSBcCisgICAgRU5BQkxFX1NQRUxMQ0hF
Q0s9MSBcCiAgICAgRU5BQkxFX1NRTF9EQVRBQkFTRT0xIFwKICAgICBFTkFCTEVfU1RZTEVfU0NP
UEVEPTAgXAogICAgIEVOQUJMRV9TVkc9MSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182561</attachid>
            <date>2013-01-14 06:09:22 -0800</date>
            <delta_ts>2013-01-22 02:19:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105034-20130114150621.patch</filename>
            <type>text/plain</type>
            <size>40775</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjdlYmVlZjJkMzk5ZTU1
MGNlNzk2YzhiYjgzNDg4MWNjNGMxMTgyNS4uMzcxMDE5MzFlM2M5OTM3OTg4OWY3NmI1N2NjM2Uw
ODU3YjU3YWNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTE0ICBKb3PD
qSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBB
ZGQgc3BlbGwgY2hlY2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIFRleHRDaGVja2VyRW5j
aGFudCBmb3IgUXQgV2ViS2l0LgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLnByaToKKwogMjAxMy0wMS0xNCAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW1Y4XSBQYXNzIGFuIElzb2xhdGUgdG8gYXNzb2NpYXRlT2JqZWN0
V2l0aFdyYXBwZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBjNjg3M2Q3MWQxZTI0YWEzZThhODY0OTYx
YzE0NWVhOTc5MWY2YWFmLi5hYjU5MTBjZGU2NjZiOWIzMDdkZWQ5NmUzNGJlZDc5MzAyYTY5NWE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEzLTAxLTE0ICBKb3PDqSBEYXBl
bmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3Bl
bGwgY2hlY2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRXhwb3NlIFFXZWJHbG9iYWwsIFFXZWJUZXh0Q2hlY2tlciBhbmQgUVdlYlRl
eHRDaGVja2VyRW5jaGFudCBvbgorICAgICAgICBRTUwgcGx1Z2luLgorCisgICAgICAgICogZGVj
bGFyYXRpdmUvZXhwZXJpbWVudGFsL3BsdWdpbi5jcHA6CisgICAgICAgICogZGVjbGFyYXRpdmUv
cGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdFFtbFBsdWdpbjo6cmVnaXN0ZXJUeXBlcyk6Cisg
ICAgICAgICogZGVjbGFyYXRpdmUvcHVibGljLnByaToKKwogMjAxMy0wMS0xMSAgSHVhbmcgRG9u
Z3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBbVGV4TWFwXSBSZW5h
bWUgY3VycmVudFtUcmFuc2Zvcm18T3BhY2l0eXxGaWx0ZXJzXSBpbiBUZXh0dXJlTWFwcGVyTGF5
ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggODkwOWVjZDYyZDBlZWI1NGFhZWYwMzlhNjExMGRjMDhhMTViM2Mx
Yy4uOTVhYjhhNDg3MWQ3NWQxZTQ5Nzk5YmE4Zjc0MWFkZjlkNjgwNDY1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDkxIEBACisyMDEzLTAxLTE0ICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVuYUBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3BlbGwgY2hlY2tpbmcgc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlbGxj
aGVjayBzdXBwb3J0IGZvciBRdCBXZWJLaXQyLgorCisgICAgICAgIEFkZGVkIHdlYmtpdCBwcm9w
ZXJ0eSwgZm9yIGFjY2Vzc2luZyB0aGUgb2JqZWN0cyBzaGFyZWQgYW1vbmcKKyAgICAgICAgYWxs
IHdlYiB2aWV3cy4gVGhpcyBpcyBmb3IgZXhwb3NpbmcgYW5kIGFsbG93aW5nIHRvIGNoYW5nZQor
ICAgICAgICB0aGUgY3VycmVudCB0ZXh0IGNoZWNrZXIuIFRoaXMgaXMgYSBnbG9iYWwgYXMgV2Vi
S2l0IGhvbGRzCisgICAgICAgIGludGVybmFsbHkgYSBnbG9iYWwgZm9yIGVuYWJsZWQgdGV4dCBj
aGVja2VyIHRvby4KKworICAgICAgICBUaGUgV2ViVGV4dENoZWNrZXIgb2JqZWN0IGV4cG9zZXMg
dGhlIHNlbGVjdGVkIHRleHQgY2hlY2tlciBBUEkKKyAgICAgICAgaW5jbHVkaW5nIG1ldGhvZHMg
Zm9yIGVuYWJsaW5nIHRleHQgY2hlY2tpbmcgc3VwcG9ydCwgYW5kIGZvcgorICAgICAgICBzZXR0
aW5nIHRoZSBsYW5ndWFnZXMgdXNlZC4gQWxzbyBhZGRlZCBhIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24KKyAgICAgICAgdXNpbmcgVGV4dENoZWNrZXJFbmNoYW50IGluIFdlYkNvcmUuCisKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbC5j
cHA6IEFkZGVkLgorICAgICAgICAoUVdlYkdsb2JhbDo6UVdlYkdsb2JhbCk6CisgICAgICAgIChR
V2ViR2xvYmFsOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChRV2ViR2xvYmFsOjpzZXRUZXh0Q2hl
Y2tlcik6CisgICAgICAgIChRV2ViR2xvYmFsOjppbnN0YW5jZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xd2ViZ2xvYmFsX3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xd2VidGV4dGNoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tl
cjo6UVdlYlRleHRDaGVja2VyKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6flFXZWJUZXh0
Q2hlY2tlcik6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXI6OmVuYWJsZWQpOgorICAgICAgICAo
UVdlYlRleHRDaGVja2VyOjpzZXRFbmFibGVkKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6Z2V0R3Vl
c3Nlc0ZvcldvcmQpOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyOjpsZWFybldvcmQpOgorICAg
ICAgICAoUVdlYlRleHRDaGVja2VyOjppZ25vcmVXb3JkKToKKyAgICAgICAgKFFXZWJUZXh0Q2hl
Y2tlcjo6c2V0TGFuZ3VhZ2VzKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6bGFuZ3VhZ2Vz
KToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlcjo6YXZhaWxhYmxlTGFuZ3VhZ2VzKToKKyAgICAg
ICAgKHRvVGV4dENoZWNrZXIpOgorICAgICAgICAoY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkQ2FsbGJhY2spOgorICAgICAgICAoY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkQ2Fs
bGJhY2spOgorICAgICAgICAoc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJh
Y2spOgorICAgICAgICAoY2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2spOgorICAgICAgICAo
Z3Vlc3Nlc0ZvcldvcmRDYWxsYmFjayk6CisgICAgICAgIChsZWFybldvcmRDYWxsYmFjayk6Cisg
ICAgICAgIChpZ25vcmVXb3JkQ2FsbGJhY2spOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyOjpz
ZXRXSyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJfcC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OlFXZWJUZXh0Q2hl
Y2tlckVuY2hhbnQpOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFudDo6flFXZWJUZXh0
Q2hlY2tlckVuY2hhbnQpOgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFudDo6Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OmdldEd1
ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OmxlYXJuV29y
ZCk6CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50OjppZ25vcmVXb3JkKToKKyAgICAg
ICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OnNldExhbmd1YWdlcyk6CisgICAgICAgIChRV2Vi
VGV4dENoZWNrZXJFbmNoYW50OjpsYW5ndWFnZXMpOgorICAgICAgICAoUVdlYlRleHRDaGVja2Vy
RW5jaGFudDo6YXZhaWxhYmxlTGFuZ3VhZ2VzKToKKyAgICAgICAgKFFXZWJUZXh0Q2hlY2tlckVu
Y2hhbnRQcml2YXRlOjpRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZSk6CisgICAgICAgIChR
V2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAg
ICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjpnZXRHdWVzc2VzRm9yV29yZCk6
CisgICAgICAgIChRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6bGVhcm5Xb3JkKToKKyAg
ICAgICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjppZ25vcmVXb3JkKToKKyAgICAg
ICAgKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjpzZXRMYW5ndWFnZXMpOgorICAgICAg
ICAoUVdlYlRleHRDaGVja2VyRW5jaGFudFByaXZhdGU6Omxhbmd1YWdlcyk6CisgICAgICAgIChR
V2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6YXZhaWxhYmxlTGFuZ3VhZ2VzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcC5oOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmg6
IEFkZGVkLgorICAgICAgICAoUVdlYlRleHRDaGVja2VyRW5jaGFudFByaXZhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tlclF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZT
dHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2lu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmxlYXJu
V29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppZ25vcmVXb3JkKToKKwogMjAx
My0wMS0xMSAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
W1F0XVtXSzJdIHBsdWdpbiB0ZXN0cyBhc3NlcnQgaW4gZGVidWcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGVk
ZGZhNzIyMTdjMGFmYmU5OTVlZTk0NjI4YmIzMjBkMjk1NmMzZTAuLjJhMTIwOGM1NmY2Yzg1YzI3
YzJkYzA0OTYyY2U0NDJiMDk1ZTYwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDExMyw2ICs0MTEzLDEx
IEBAIHVzZT8oV0VCUCkgewogICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
d2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAogfQogCit1c2U/KExJQkVOQ0hBTlQpIHsKKyAgICBI
RUFERVJTICs9IHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaAorICAg
IFNPVVJDRVMgKz0gcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAK
K30KKwogIWhhdmU/KHNxbGl0ZTMpOmV4aXN0cygkJHtTUUxJVEUzU1JDRElSfS9zcWxpdGUzLmMp
IHsKICAgICAjIEJ1aWxkIHNxbGl0ZTMgaW50byBXZWJDb3JlIGZyb20gc291cmNlCiAgICAgIyBz
b21ld2hhdCBjb3BpZWQgZnJvbSAkJFFUX1NPVVJDRV9UUkVFL3NyYy9wbHVnaW5zL3NxbGRyaXZl
cnMvc3FsaXRlL3NxbGl0ZS5wcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggNmUxNTU2OGZiODU2ZGJlZjFj
OTIxNGUxMGMyZTViMDM5YTkxNDZmNS4uNDg2MjU1ZGE2M2ViMGFkZmYyMDU2ZWI0NzRiM2Y4YmFk
MjVkNDc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTI1NCw2ICsyNTQsMTEgQEAgaGF2ZT8oc3FsaXRl
MykgewogICAgICAgICBMSUJTICs9IC1sc3FsaXRlMwogICAgIH0KIH0KK2VuYWJsZT8oU1BFTExD
SEVDSykgeworICAgIHVzZT8oTElCRU5DSEFOVCkgeworICAgICAgICBQS0dDT05GSUcgKz0gZW5j
aGFudAorICAgIH0KK30KIAogdXNlPyhsaWJqcGVnKTogTElCUyArPSAtbGpwZWcKIHVzZT8obGli
cG5nKTogTElCUyArPSAtbHBuZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJh
dGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvZXhwZXJpbWVudGFsL3BsdWdpbi5jcHAKaW5kZXggZTZmZmVkYTZlYjBhNTBiYTQyZjJmZjRl
MDY5OTAyZTRiYWJhNTU2MC4uY2JjZjNmMWM1OTY2Y2U0MWJkMGE4ZDFiMzAzNzY4OTdiODE3ZWRl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwv
cGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRh
bC9wbHVnaW4uY3BwCkBAIC0yNSwxMiArMjUsMTUgQEAKICNpbmNsdWRlICJwcml2YXRlL3FxdWlj
a3dlYnZpZXdfcC5oIgogI2luY2x1ZGUgInByaXZhdGUvcXR3ZWJzZWN1cml0eW9yaWdpbl9wLmgi
CiAjaW5jbHVkZSAicHJpdmF0ZS9xd2ViZG93bmxvYWRpdGVtX3AuaCIKKyNpbmNsdWRlICJwcml2
YXRlL3F3ZWJnbG9iYWxfcC5oIgogI2luY2x1ZGUgInByaXZhdGUvcXdlYmtpdHRlc3RfcC5oIgog
I2luY2x1ZGUgInByaXZhdGUvcXdlYm5hdmlnYXRpb25oaXN0b3J5X3AuaCIKICNpbmNsdWRlICJw
cml2YXRlL3F3ZWJwZXJtaXNzaW9ucmVxdWVzdF9wLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9xd2Vi
cHJlZmVyZW5jZXNfcC5oIgogCiAjaW5jbHVkZSA8UXRRbWwvcXFtbC5oPgorI2luY2x1ZGUgPFF0
UW1sL3FxbWxjb250ZXh0Lmg+CisjaW5jbHVkZSA8UXRRbWwvcXFtbGVuZ2luZS5oPgogI2luY2x1
ZGUgPFF0UW1sL3FxbWxleHRlbnNpb25wbHVnaW4uaD4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCkBA
IC00Nyw2ICs1MCwxNSBAQCBjbGFzcyBXZWJLaXRRbWxFeHBlcmltZW50YWxFeHRlbnNpb25QbHVn
aW46IHB1YmxpYyBRUW1sRXh0ZW5zaW9uUGx1Z2luIHsKICAgICBRX09CSkVDVAogICAgIFFfUExV
R0lOX01FVEFEQVRBKElJRCAib3JnLnF0LXByb2plY3QuUXQuUVFtbEV4dGVuc2lvbkludGVyZmFj
ZSIgRklMRSAicGx1Z2luLmpzb24iKQogcHVibGljOgorCisjaWYgZGVmaW5lZChIQVZFX1dFQktJ
VDIpCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVFbmdpbmUoUVFtbEVuZ2luZSogZW5naW5l
LCBjb25zdCBjaGFyKiB1cmkpCisgICAgeworICAgICAgICBRX0FTU0VSVChRTGF0aW4xU3RyaW5n
KHVyaSkgPT0gUUxhdGluMVN0cmluZygiUXRXZWJLaXQuZXhwZXJpbWVudGFsIikpOworICAgICAg
ICBlbmdpbmUtPnJvb3RDb250ZXh0KCktPnNldENvbnRleHRQcm9wZXJ0eShRTGF0aW4xU3RyaW5n
KCJ3ZWJraXQiKSwgUVdlYkdsb2JhbDo6aW5zdGFuY2UoKSk7CisgICAgfQorI2VuZGlmCisKICAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUeXBlcyhjb25zdCBjaGFyKiB1cmkpCiAgICAgewogICAg
ICAgICBxV2FybmluZygiXG5XQVJOSU5HOiBUaGlzIHByb2plY3QgaXMgdXNpbmcgdGhlIGV4cGVy
aW1lbnRhbCBRTUwgQVBJIGV4dGVuc2lvbnMgZm9yIFF0V2ViS2l0IGFuZCBpcyB0aGVyZWZvcmUg
dGllZCB0byBhIHNwZWNpZmljIFF0V2ViS2l0IHJlbGVhc2UuXG4iCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2Rl
Y2xhcmF0aXZlL3BsdWdpbi5jcHAKaW5kZXggNTZlYWM2MzJkYmE5MTY2YjcxNWUzZTcyODQwMjZm
MTE0YmUzMWQ2My4uYjM0NjA2NmFiZjJiYzkxZjI2NzQxNjVjOTQ2MDVhYTVjMWVhN2UxZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcApAQCAtMzAsNiArMzAsMTAgQEAK
ICNpbmNsdWRlICJwcml2YXRlL3F3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgiCiAjaW5jbHVkZSAi
cHJpdmF0ZS9xd2VibG9hZHJlcXVlc3RfcC5oIgogI2luY2x1ZGUgInByaXZhdGUvcXdlYm5hdmln
YXRpb25yZXF1ZXN0X3AuaCIKKyNpbmNsdWRlICJwcml2YXRlL3F3ZWJ0ZXh0Y2hlY2tlcl9wLmgi
CisjaWYgZGVmaW5lZChXVEZfVVNFX0xJQkVOQ0hBTlQpCisjaW5jbHVkZSAicHJpdmF0ZS9xd2Vi
dGV4dGNoZWNrZXJlbmNoYW50X3AuaCIKKyNlbmRpZgogCiAjaW5jbHVkZSA8UXROZXR3b3JrL3Fu
ZXR3b3JrcmVwbHkuaD4KICNpbmNsdWRlIDxRdFFtbC9xcW1sZW5naW5lLmg+CkBAIC01OSw2ICs2
MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFOZXR3
b3JrUmVwbHk+KHVyaSwgMywgMCwgIk5ldHdvcmtSZXBseSIsIFFPYmplY3Q6OnRyKCJDYW5ub3Qg
Y3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9mIE5ldHdvcmtSZXBseSIpKTsKICAgICAgICAgcW1s
UmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYk5hdmlnYXRpb25SZXF1ZXN0Pih1cmksIDMsIDAs
ICJOYXZpZ2F0aW9uUmVxdWVzdCIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRl
IGluc3RhbmNlIG9mIE5hdmlnYXRpb25SZXF1ZXN0IikpOwogICAgICAgICBxbWxSZWdpc3RlclVu
Y3JlYXRhYmxlVHlwZTxRV2ViTG9hZFJlcXVlc3Q+KHVyaSwgMywgMCwgIldlYkxvYWRSZXF1ZXN0
IiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgV2ViTG9h
ZFJlcXVlc3QiKSk7CisgICAgICAgIHFtbFJlZ2lzdGVyVHlwZTxRV2ViVGV4dENoZWNrZXI+KHVy
aSwgMywgMCwgIldlYlRleHRDaGVja2VyIik7CisjaWYgZGVmaW5lZChXVEZfVVNFX0xJQkVOQ0hB
TlQpCisgICAgICAgIHFtbFJlZ2lzdGVyVHlwZTxRV2ViVGV4dENoZWNrZXJFbmNoYW50Pih1cmks
IDMsIDAsICJXZWJUZXh0Q2hlY2tlckVuY2hhbnQiKTsKKyNlbmRpZgogI2VuZGlmCiAgICAgfQog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaSBi
L1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQppbmRleCA1ZmM1OTg1ZWJk
YTViYzEzNmIyMWE5NmVhM2YzOWJhYWYwNjI4MTQzLi43YWFjZDA0MGUxMDRhMWMyOTc3YjNiZGJm
Y2U2MDIzZTkyYWQ1OWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZl
L3B1YmxpYy5wcmkKKysrIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJp
CkBAIC0zOCw2ICszOCwxMiBAQCBTT1VSQ0VTICs9IHBsdWdpbi5jcHAKIGJ1aWxkPyh3ZWJraXQy
KTogewogICAgIERFRklORVMgKz0gSEFWRV9XRUJLSVQyCiAgICAgUVQgKz0gbmV0d29yaworCisg
ICAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NQRUxMQ0hFQ0s9MSkgeworICAgICAgICBjb25m
aWdfbGliZW5jaGFudCB7CisgICAgICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfTElCRU5DSEFO
VD0xCisgICAgICAgIH0KKyAgICB9CiB9CiAKICMgVGhlIGZhbGxiYWNrIHRvIFFUX0lOU1RBTExf
SU1QT1JUUyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCA5ZjNjMGQwMjk5
NTE5ZmM4NjBkYTg1YTRiZDA0NzFmODA3MzVhMjI3Li5hODhlNjczOTU4NmFjNGZiZGJhMmU0NjFk
OGY2MjljMzc4MTlmNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTgxNiw2ICs4MTYsOCBAQCBoYXZlPyhR
VFFVSUNLKSB7CiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3Rf
cC5oIFwKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9w
LmggXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0X3AuaCBcCisgICAgICAg
IFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyX3AuaCBcCisgICAgICAgIFVJUHJvY2Vz
cy9BUEkvcXQvcXdlYmdsb2JhbF9wLmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250
ZXh0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggXApA
QCAtODUxLDYgKzg1Myw4IEBAIGhhdmU/KFFUUVVJQ0spIHsKICAgICAgICAgVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQv
cXdlYnByZWZlcmVuY2VzLmNwcCBcCisgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2Jh
bC5jcHAgXAorICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlci5jcHAgXAog
ICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcCBcCiAgICAgICAgIFVJUHJv
Y2Vzcy9xdC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQuY3BwIFwKICAgICAgICAgVUlQ
cm9jZXNzL3F0L1F0RGlhbG9nUnVubmVyLmNwcCBcCkBAIC04NzksNiArODgzLDE4IEBAIGhhdmU/
KFFUUVVJQ0spIHsKICAgICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICBVSVByb2Nlc3Mv
cXQvV2ViQ29sb3JDaG9vc2VyUHJveHlRdC5jcHAKICAgICB9CisKKyAgICBlbmFibGU/KFNQRUxM
Q0hFQ0spIHsKKyAgICAgICAgdXNlPyhMSUJFTkNIQU5UKSB7CisgICAgICAgICAgICBERUZJTkVT
ICs9IFdURl9VU0VfTElCRU5DSEFOVD0xCisgICAgICAgICAgICBIRUFERVJTICs9IFwKKyAgICAg
ICAgICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcC5oIFwK
KyAgICAgICAgICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRf
cF9wLmgKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgIFVJUHJvY2Vz
cy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFudC5jcHAKKyAgICAgICAgICAgIFBLR0NPTkZJ
RyArPSBlbmNoYW50CisgICAgICAgIH0KKyAgICB9CiB9CiAKIG1hYzogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZ2xvYmFsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RlNmM1
Mjg4MDYxMzgxNzEwMzU3ODBkNTFlMTU1NzdlYjMyYjJiMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbC5jcHAKQEAgLTAsMCArMSw2
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgInF3ZWJnbG9iYWxfcC5oIgorCisjaW5jbHVkZSAicXdl
YnRleHRjaGVja2VyX3AuaCIKKyNpZiBVU0UoTElCRU5DSEFOVCkKKyNpbmNsdWRlICJxd2VidGV4
dGNoZWNrZXJlbmNoYW50X3AuaCIKKyNlbmRpZgorCitRV2ViR2xvYmFsOjpRV2ViR2xvYmFsKCkK
KyAgICA6IG1fdGV4dENoZWNrZXIoMCkKK3sKKyNpZiBVU0UoTElCRU5DSEFOVCkKKyAgICBtX3Rl
eHRDaGVja2VyID0gbmV3IFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ7CisgICAgbV90ZXh0Q2hlY2tl
ci0+c2V0V0soKTsKKyNlbmRpZgorfQorCitRV2ViVGV4dENoZWNrZXIqIFFXZWJHbG9iYWw6OnRl
eHRDaGVja2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlcjsKK30KKwordm9p
ZCBRV2ViR2xvYmFsOjpzZXRUZXh0Q2hlY2tlcihRV2ViVGV4dENoZWNrZXIgKnRleHRDaGVja2Vy
KQoreworICAgIGlmIChtX3RleHRDaGVja2VyID09IHRleHRDaGVja2VyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3RleHRDaGVja2VyID0gdGV4dENoZWNrZXI7CisgICAgaWYgKG1fdGV4dENo
ZWNrZXIpCisgICAgICAgIG1fdGV4dENoZWNrZXItPnNldFdLKCk7CisgICAgZW1pdCB0ZXh0Q2hl
Y2tlckNoYW5nZWQoKTsKK30KKworUVdlYkdsb2JhbCogUVdlYkdsb2JhbDo6aW5zdGFuY2UoKQor
eworICAgIHN0YXRpYyBRV2ViR2xvYmFsKiBzX2luc3RhbmNlID0gMDsKKyAgICBpZiAoIXNfaW5z
dGFuY2UpCisgICAgICAgIHNfaW5zdGFuY2UgPSBuZXcgUVdlYkdsb2JhbCgpOworCisgICAgcmV0
dXJuIHNfaW5zdGFuY2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJnbG9iYWxfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2ViZ2xvYmFsX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODY2ZGMwMGU1MGE4MjhhZjRlMzRlMDk2YjIwOTZm
OGM4MTQxNWJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xd2ViZ2xvYmFsX3AuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBxd2ViZ2xvYmFsX3BfaAorI2RlZmluZSBx
d2ViZ2xvYmFsX3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSA8
UXRDb3JlL1FPYmplY3Q+CisKK2NsYXNzIFFXZWJUZXh0Q2hlY2tlcjsKKworY2xhc3MgUVdFQktJ
VF9FWFBPUlQgUVdlYkdsb2JhbCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAg
IFFfUFJPUEVSVFkoUVdlYlRleHRDaGVja2VyKiB0ZXh0Q2hlY2tlciBSRUFEIHRleHRDaGVja2Vy
IFdSSVRFIHNldFRleHRDaGVja2VyIE5PVElGWSB0ZXh0Q2hlY2tlckNoYW5nZWQpCisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUVdlYkdsb2JhbCogaW5zdGFuY2UoKTsKKyAgICBRV2ViVGV4dENoZWNr
ZXIqIHRleHRDaGVja2VyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUZXh0Q2hlY2tlcihRV2ViVGV4
dENoZWNrZXIqIHRleHRDaGVja2VyKTsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgdGV4dENoZWNr
ZXJDaGFuZ2VkKCk7CisgICAgCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFFXZWJHbG9iYWwoKTsK
KyAgICBRV2ViVGV4dENoZWNrZXIgKm1fdGV4dENoZWNrZXI7CisgICAgCit9OworCisjZW5kaWYg
Ly8gcXdlYmdsb2JhbF9wX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXdlYnRleHRjaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXdlYnRleHRjaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzEzN2E2OTViNTcwYTY5MmNhMGMy
MjRkZmQ4Nzc2YjVmYjYzNzZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAicXdlYnRleHRjaGVja2VyX3AuaCIKKworI2luY2x1ZGUgIldLQVBJQ2Fz
dC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgor
I2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmdRdC5oIgorI2luY2x1
ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK1FXZWJUZXh0Q2hlY2tlcjo6UVdlYlRleHRDaGVja2Vy
KCkKKyAgICA6IG1fZW5hYmxlZChmYWxzZSkKK3sKK30KKworUVdlYlRleHRDaGVja2VyOjp+UVdl
YlRleHRDaGVja2VyKCkKK3sKK30KKworYm9vbCBRV2ViVGV4dENoZWNrZXI6OmVuYWJsZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2VuYWJsZWQ7Cit9CisKK3ZvaWQgUVdlYlRleHRDaGVja2Vy
OjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIGlmIChtX2VuYWJsZWQgPT0gZW5hYmxl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2VuYWJsZWQgPSBlbmFibGU7CisgICAgV0tUZXh0
Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUp
OworCisgICAgZW1pdCBlbmFibGVkQ2hhbmdlZCgpOworfQorCit2b2lkIFFXZWJUZXh0Q2hlY2tl
cjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmLCBpbnQmLCBpbnQmKQorewor
fQorCitRVmVjdG9yPFFTdHJpbmc+IFFXZWJUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQo
Y29uc3QgUVN0cmluZyYpCit7CisgICAgcmV0dXJuIFFWZWN0b3I8UVN0cmluZz4oKTsKK30KKwor
dm9pZCBRV2ViVGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25zdCBRU3RyaW5nJikKK3sKK30KKwor
dm9pZCBRV2ViVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYpCit7Cit9CisK
K3ZvaWQgUVdlYlRleHRDaGVja2VyOjpzZXRMYW5ndWFnZXMoY29uc3QgUUxpc3Q8UVN0cmluZz4m
KQoreworfQorCitRTGlzdDxRU3RyaW5nPiBRV2ViVGV4dENoZWNrZXI6Omxhbmd1YWdlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFFMaXN0PFFTdHJpbmc+KCk7Cit9CisKK1FMaXN0PFFTdHJpbmc+
IFFXZWJUZXh0Q2hlY2tlcjo6YXZhaWxhYmxlTGFuZ3VhZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gUUxpc3Q8UVN0cmluZz4oKTsKK30KKworc3RhdGljIGlubGluZSBRV2ViVGV4dENoZWNrZXIq
IHRvVGV4dENoZWNrZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UVdlYlRleHRDaGVja2VyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykp
OworfQorCitzdGF0aWMgYm9vbCBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFj
ayhjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiB0b1RleHRDaGVja2VyKGNs
aWVudEluZm8pLT5lbmFibGVkKCk7Cit9CisKK3N0YXRpYyBib29sIGNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZENhbGxiYWNrKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZENhbGxiYWNrKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5zZXRFbmFibGVkKGVuYWJsZWQpOworfQorCitz
dGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjayh1aW50NjRfdCB0YWcsIFdL
U3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1p
c3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHRvVGV4dENo
ZWNrZXIoY2xpZW50SW5mbyktPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhXZWJLaXQ6OnRvSW1wbCh0
ZXh0KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgp
OworfQorCitzdGF0aWMgV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZENhbGxiYWNrKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBR
VmVjdG9yPFFTdHJpbmc+IGd1ZXNzZXMgPSB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5nZXRH
dWVzc2VzRm9yV29yZChXZWJLaXQ6OnRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworICAgIGlmIChn
dWVzc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXS011dGFibGVBcnJh
eVJlZiB3a1N1Z2dlc3Rpb25zID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKKyAgICBmb3JlYWNo
IChjb25zdCBRU3RyaW5nJiBndWVzcywgZ3Vlc3NlcykgeworICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gd2tTdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFFTdHJp
bmcoZ3Vlc3MpKTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0od2tTdWdnZXN0aW9ucywgd2tT
dWdnZXN0aW9uLmdldCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gd2tTdWdnZXN0aW9uczsKK30K
Kworc3RhdGljIHZvaWQgbGVhcm5Xb3JkQ2FsbGJhY2sodWludDY0X3QgdGFnLCBXS1N0cmluZ1Jl
ZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xp
ZW50SW5mbyktPmxlYXJuV29yZChXZWJLaXQ6OnRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQor
CitzdGF0aWMgdm9pZCBpZ25vcmVXb3JkQ2FsbGJhY2sodWludDY0X3QgdGFnLCBXS1N0cmluZ1Jl
ZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xp
ZW50SW5mbyktPmlnbm9yZVdvcmQoV2ViS2l0Ojp0b0ltcGwod29yZCktPnN0cmluZygpKTsKK30K
KworCit2b2lkIFFXZWJUZXh0Q2hlY2tlcjo6c2V0V0soKQoreworICAgIFdLVGV4dENoZWNrZXJD
bGllbnQgdGV4dENoZWNrZXJDbGllbnQ7CisgICAgbWVtc2V0KCZ0ZXh0Q2hlY2tlckNsaWVudCwg
MCwgc2l6ZW9mKFdLVGV4dENoZWNrZXJDbGllbnQpKTsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC52
ZXJzaW9uID0ga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICB0ZXh0Q2hl
Y2tlckNsaWVudC5jbGllbnRJbmZvID0gdGhpczsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5jb250
aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQgPSBjb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93
ZWRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPSBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjazsKKyAgICB0
ZXh0Q2hlY2tlckNsaWVudC5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBzZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNs
aWVudC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcgPSBjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFj
azsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5ndWVzc2VzRm9yV29yZCA9IGd1ZXNzZXNGb3JXb3Jk
Q2FsbGJhY2s7CisgICAgdGV4dENoZWNrZXJDbGllbnQubGVhcm5Xb3JkID0gbGVhcm5Xb3JkQ2Fs
bGJhY2s7CisgICAgdGV4dENoZWNrZXJDbGllbnQuaWdub3JlV29yZCA9IGlnbm9yZVdvcmRDYWxs
YmFjazsKKworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVja2VyQ2xpZW50KTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRj
aGVja2VyX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVj
a2VyX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YmRhMTNiNTM0MjE4ZWNiZDY5ZGZhNzdiODMxZWIwNmE2NDZi
NjdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2VidGV4dGNoZWNrZXJfcC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHF3ZWJ0ZXh0Y2hlY2tlcl9wX2gKKyNkZWZp
bmUgcXdlYnRleHRjaGVja2VyX3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCisj
aW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVkZSA8UXRDb3JlL1FTZXQ+CisjaW5jbHVk
ZSA8UXRDb3JlL1FTdHJpbmc+CisjaW5jbHVkZSA8UXRDb3JlL1FWZWN0b3I+CisjaW5jbHVkZSA8
UXRRbWwvcXFtbC5oPgorCitjbGFzcyBRV2ViU2hhcmVkOworCitjbGFzcyBRV0VCS0lUX0VYUE9S
VCBRV2ViVGV4dENoZWNrZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBRV2ViVGV4dENoZWNrZXIoKTsKKyAgICB2aXJ0dWFsIH5RV2ViVGV4
dENoZWNrZXIoKTsKKworICAgIFFfUFJPUEVSVFkoYm9vbCBlbmFibGVkIFJFQUQgZW5hYmxlZCBX
UklURSBzZXRFbmFibGVkKQorICAgIFFfUFJPUEVSVFkoUUxpc3Q8UVN0cmluZz4gbGFuZ3VhZ2Vz
IFJFQUQgbGFuZ3VhZ2VzIFdSSVRFIHNldExhbmd1YWdlcyk7CisgICAgUV9QUk9QRVJUWShRTGlz
dDxRU3RyaW5nPiBhdmFpbGFibGVMYW5ndWFnZXMgUkVBRCBhdmFpbGFibGVMYW5ndWFnZXMpOwor
CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBRU3RyaW5nJiBz
dHJpbmcsIGludCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50JiBtaXNzcGVsbGluZ0xlbmd0aCk7
CisgICAgdmlydHVhbCBRVmVjdG9yPFFTdHJpbmc+IGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFFT
dHJpbmcmIHdvcmQpOworICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgUVN0cmluZyYg
d29yZCk7CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYgd29yZCk7
CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGUpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYW5ndWFnZXMoY29uc3QgUUxpc3Q8UVN0cmluZz4mIGxhbmd1YWdlcyk7CisgICAgdmly
dHVhbCBRTGlzdDxRU3RyaW5nPiBsYW5ndWFnZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFMaXN0
PFFTdHJpbmc+IGF2YWlsYWJsZUxhbmd1YWdlcygpIGNvbnN0OworCitRX1NJR05BTFM6CisgICAg
dm9pZCBlbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgbGFuZ3VhZ2VzQ2hhbmdlZCgpOworCitw
cml2YXRlOgorICAgIFFfRElTQUJMRV9DT1BZKFFXZWJUZXh0Q2hlY2tlcikKKyAgICB2b2lkIHNl
dFdLKCk7CisKKyAgICBib29sIG1fZW5hYmxlZDsKKworICAgIGZyaWVuZCBjbGFzcyBRV2ViR2xv
YmFsOworfTsKKworUU1MX0RFQ0xBUkVfVFlQRShRV2ViVGV4dENoZWNrZXIpCisKKyNlbmRpZiAv
LyBxd2VidGV4dGNoZWNrZXJfcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWJi
MWJjMTM3ZjNlMTkzNDc3ZWJhYjI0MTY1YjI0OTQyZTA2NTE3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50LmNw
cApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInF3ZWJ0ZXh0Y2hlY2tlcmVu
Y2hhbnRfcC5oIgorCisjaW5jbHVkZSAicXdlYnRleHRjaGVja2VyZW5jaGFudF9wX3AuaCIKKwor
UVdlYlRleHRDaGVja2VyRW5jaGFudDo6UVdlYlRleHRDaGVja2VyRW5jaGFudCgpCisgICAgOiBk
KG5ldyBRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZSh0aGlzKSkKK3sKK30KKworUVdlYlRl
eHRDaGVja2VyRW5jaGFudDo6flFXZWJUZXh0Q2hlY2tlckVuY2hhbnQoKQoreworICAgIGRlbGV0
ZSBkOworfQorCit2b2lkIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6OmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGludCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
JiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBkLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3Ry
aW5nLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK1FWZWN0
b3I8UVN0cmluZz4gUVdlYlRleHRDaGVja2VyRW5jaGFudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29u
c3QgUVN0cmluZyYgd29yZCkKK3sKKyAgICByZXR1cm4gZC0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29y
ZCk7Cit9CisKK3ZvaWQgUVdlYlRleHRDaGVja2VyRW5jaGFudDo6bGVhcm5Xb3JkKGNvbnN0IFFT
dHJpbmcmIHdvcmQpCit7CisgICAgZC0+bGVhcm5Xb3JkKHdvcmQpOworfQorCit2b2lkIFFXZWJU
ZXh0Q2hlY2tlckVuY2hhbnQ6Omlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYgd29yZCkKK3sKKyAg
ICBkLT5pZ25vcmVXb3JkKHdvcmQpOworfQorCit2b2lkIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQ6
OnNldExhbmd1YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5nPiYgbGFuZ3VhZ2VzKQoreworICAgIGQt
PnNldExhbmd1YWdlcyhsYW5ndWFnZXMpOworfQorCitRTGlzdDxRU3RyaW5nPiBRV2ViVGV4dENo
ZWNrZXJFbmNoYW50OjpsYW5ndWFnZXMoKSBjb25zdAoreworICAgIHJldHVybiBkLT5sYW5ndWFn
ZXMoKTsKK30KKworUUxpc3Q8UVN0cmluZz4gUVdlYlRleHRDaGVja2VyRW5jaGFudDo6YXZhaWxh
YmxlTGFuZ3VhZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+YXZhaWxhYmxlTGFuZ3VhZ2Vz
KCk7Cit9CisKK1FXZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjpRV2ViVGV4dENoZWNrZXJF
bmNoYW50UHJpdmF0ZShRV2ViVGV4dENoZWNrZXJFbmNoYW50ICpxKQorICAgIDogcShxKQorICAg
ICwgbV90ZXh0Q2hlY2tlcihXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpKQor
eworICAgIC8vIFBhc3NpbmcgYW4gZW1wdHkgc2V0IG1ha2VzIFRleHRDaGVja2VyRW5jaGFudCB1
c2UgdGhlIHN5c3RlbSBzZXR0aW5ncworICAgIG1fdGV4dENoZWNrZXItPnVwZGF0ZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoVmVjdG9yPFN0cmluZz4oKSk7CisKK30KKwordm9pZCBRV2ViVGV4dENo
ZWNrZXJFbmNoYW50UHJpdmF0ZTo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcm
IHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3Ro
KQoreworICAgIG1fdGV4dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzdHJpbmcsIG1p
c3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworUVZlY3RvcjxRU3Ry
aW5nPiBRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29u
c3QgUVN0cmluZyYgd29yZCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gbV90ZXh0
Q2hlY2tlci0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCk7CisgICAgUVZlY3RvcjxRU3RyaW5nPiBy
ZXN1bHQ7CisgICAgaWYgKCFndWVzc2VzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGd1ZXNzZXMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGd1ZXNzZXNbaV0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFFX
ZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjpsZWFybldvcmQoY29uc3QgUVN0cmluZyYgd29y
ZCkKK3sKKyAgICBtX3RleHRDaGVja2VyLT5sZWFybldvcmQod29yZCk7Cit9CisKK3ZvaWQgUVdl
YlRleHRDaGVja2VyRW5jaGFudFByaXZhdGU6Omlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYgd29y
ZCkKK3sKKyAgICBtX3RleHRDaGVja2VyLT5pZ25vcmVXb3JkKHdvcmQpOworfQorCit2b2lkIFFX
ZWJUZXh0Q2hlY2tlckVuY2hhbnRQcml2YXRlOjpzZXRMYW5ndWFnZXMoY29uc3QgUUxpc3Q8UVN0
cmluZz4mIGxhbmd1YWdlcykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXNWZWN0b3I7
CisgICAgZm9yZWFjaCAoY29uc3QgUVN0cmluZyYgc3BlbGxDaGVja2luZ0xhbmd1YWdlLCBsYW5n
dWFnZXMpCisgICAgICAgIGxhbmd1YWdlc1ZlY3Rvci5hcHBlbmQoc3BlbGxDaGVja2luZ0xhbmd1
YWdlKTsKKworICAgIG1fdGV4dENoZWNrZXItPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
bGFuZ3VhZ2VzVmVjdG9yKTsKK30KKworUUxpc3Q8UVN0cmluZz4gUVdlYlRleHRDaGVja2VyRW5j
aGFudFByaXZhdGU6Omxhbmd1YWdlcygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFN0cmluZz4gbGFu
Z3VhZ2VzID0gbV90ZXh0Q2hlY2tlci0+bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwor
ICAgIFFMaXN0PFFTdHJpbmc+IHJlc3VsdDsKKyAgICBpZiAoIWxhbmd1YWdlcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYW5ndWFnZXMuc2l6ZSgpOyBpKysp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGxhbmd1YWdlc1tpXSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1FMaXN0PFFTdHJpbmc+IFFXZWJUZXh0Q2hlY2tlckVuY2hhbnRQ
cml2YXRlOjphdmFpbGFibGVMYW5ndWFnZXMoKSBjb25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+
IGxhbmd1YWdlcyA9IG1fdGV4dENoZWNrZXItPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoKTsKKyAgICBRTGlzdDxRU3RyaW5nPiByZXN1bHQ7CisgICAgaWYgKCFsYW5ndWFnZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFuZ3VhZ2VzLnNpemUo
KTsgaSsrKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsYW5ndWFnZXNbaV0pOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFudF9wLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdk
ZDkxYmVlNDExNjY0YWVhNzUwZWUyN2JkNWRiMWQ4MDVjZDgzNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnRleHRjaGVja2VyZW5jaGFudF9w
LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgcXdlYnRleHRjaGVja2VyZW5jaGFudF9wX2gKKyNkZWZpbmUgcXdlYnRl
eHRjaGVja2VyZW5jaGFudF9wX2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKworI2lu
Y2x1ZGUgInF3ZWJ0ZXh0Y2hlY2tlcl9wLmgiCisjaW5jbHVkZSA8UXRRbWwvcXFtbC5oPgorCitj
bGFzcyBRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZTsKKworY2xhc3MgUVdFQktJVF9FWFBP
UlQgUVdlYlRleHRDaGVja2VyRW5jaGFudCA6IHB1YmxpYyBRV2ViVGV4dENoZWNrZXIgeworICAg
IFFfT0JKRUNUCitwdWJsaWM6CisgICAgZXhwbGljaXQgUVdlYlRleHRDaGVja2VyRW5jaGFudCgp
OworICAgIHZpcnR1YWwgflFXZWJUZXh0Q2hlY2tlckVuY2hhbnQoKTsKKworICAgIHZvaWQgc2V0
TGFuZ3VhZ2VzKGNvbnN0IFFMaXN0PFFTdHJpbmc+JiBsYW5ndWFnZXMpOworICAgIFFMaXN0PFFT
dHJpbmc+IGxhbmd1YWdlcygpIGNvbnN0OworICAgIFFMaXN0PFFTdHJpbmc+IGF2YWlsYWJsZUxh
bmd1YWdlcygpIGNvbnN0OworCisgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3Qg
UVN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxp
bmdMZW5ndGgpOworICAgIFFWZWN0b3I8UVN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3Qg
UVN0cmluZyYgd29yZCk7CisgICAgdm9pZCBsZWFybldvcmQoY29uc3QgUVN0cmluZyYgd29yZCk7
CisgICAgdm9pZCBpZ25vcmVXb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpOworCitwcml2YXRlOgor
ICAgIFFfRElTQUJMRV9DT1BZKFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQpCisgICAgUVdlYlRleHRD
aGVja2VyRW5jaGFudFByaXZhdGUqIGQ7Cit9OworCitRTUxfREVDTEFSRV9UWVBFKFFXZWJUZXh0
Q2hlY2tlckVuY2hhbnQpCisKKyNlbmRpZiAvLyBxd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNr
ZXJlbmNoYW50X3BfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VidGV4
dGNoZWNrZXJlbmNoYW50X3BfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2OTMwMGE2MWRlM2RiZjcxNzQ3ZmIx
YmU5YjhiY2IwZTZhODNmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F3ZWJ0ZXh0Y2hlY2tlcmVuY2hhbnRfcF9wLmgKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcXdl
YnRleHRjaGVja2VyZW5jaGFudF9wX3BfaAorI2RlZmluZSBxd2VidGV4dGNoZWNrZXJlbmNoYW50
X3BfcF9oCisKKyNpbmNsdWRlICJxd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJFbmNoYW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCitjbGFzcyBRV2ViVGV4dENoZWNrZXJFbmNoYW50UHJpdmF0ZSB7CitwdWJsaWM6CisgICAg
UVdlYlRleHRDaGVja2VyRW5jaGFudFByaXZhdGUoUVdlYlRleHRDaGVja2VyRW5jaGFudCogcSk7
CisKKyAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBRU3RyaW5nJiBzdHJpbmcs
IGludCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50JiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAg
UVZlY3RvcjxRU3RyaW5nPiBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsK
KyAgICB2b2lkIGxlYXJuV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsKKyAgICB2b2lkIGlnbm9y
ZVdvcmQoY29uc3QgUVN0cmluZyYgd29yZCk7CisgICAgdm9pZCBzZXRMYW5ndWFnZXMoY29uc3Qg
UUxpc3Q8UVN0cmluZz4mIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworICAgIFFMaXN0PFFTdHJp
bmc+IGxhbmd1YWdlcygpIGNvbnN0OworICAgIFFMaXN0PFFTdHJpbmc+IGF2YWlsYWJsZUxhbmd1
YWdlcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIFFXZWJUZXh0Q2hlY2tlckVuY2hhbnQqIGNv
bnN0IHE7CisgICAgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudD4gbV90ZXh0Q2hl
Y2tlcjsKK307CisKKyNlbmRpZiAvLyBxd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAKaW5kZXggNGEzMzE4
NDA1YWQ1ZWM4Y2U2MzYzMzRmN2Q4MGU1MDhhYWU2OGE5Mi4uM2YzNjU4M2JmNDQwMGYzZDYwNjM0
ZDRkNTgxZjg2N2M4MTllYWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1RleHRDaGVja2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9U
ZXh0Q2hlY2tlclF0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlRleHRDaGVja2Vy
LmgiCiAKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogIApAQCAtMzcsOTMgKzM3LDEwMyBAQCBzdGF0aWMgVGV4dENoZWNr
ZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0
Q2hlY2tlcjo6c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgCisgICAgc3Rh
dGljIGJvb2wgZGlkSW5pdGlhbGl6ZVN0YXRlID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxp
emVTdGF0ZSkKKyAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisKKyAgICBXZWJUZXh0
Q2hlY2tlckNsaWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
ID0gY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gIGNsaWVudC5ncmFtbWFyQ2hlY2tp
bmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOworCiAgICAgcmV0
dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwogfQogCiB2b2lkIFRleHRDaGVj
a2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChz
dGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgdGV4dENoZWNrZXJTdGF0
ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxl
ZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKyAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpn
cmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkID0gZW5hYmxlZDsKIH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxE
b2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKQoraW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3Bl
bGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOwogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpCit2b2lkIFRleHRDaGVja2Vy
OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90Jiwg
aW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRf
dCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBp
bnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0
ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CiB9
CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0
IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMy
X3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0
aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJf
dCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVu
Z3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0
aCk7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAog
dm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9p
ZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlz
c3BlbGxlZFdvcmQpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFp
bCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2Us
IGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNl
LCBncmFtbWFyRGV0YWlsKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0Zvcldv
cmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0
cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNG
b3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwogfQogCi12b2lkIFRleHRD
aGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNr
ZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29y
ZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQo
KS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQogCiB2b2lk
IFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3Qg
U3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmNzE0YmRkZjU0YjZjYjgxZmQ3MjU2NmE2N2IzZDZm
YTAxMzYwNzllLi5iYTRlNzYzODJkYTAyNmM5NTdiZDg5ZTM3MGE3NjNlYjllNTJjMmQ5IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMTMtMDEtMTQgIEpvc8OpIERhcGVuYSBQYXogIDxqZGFwZW5hQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW1F0XVtXSzJdIEFkZCBzcGVsbCBjaGVja2luZyBzdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUwMzQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgc3BlbGxjaGVj
ayBieSBkZWZhdWx0LCBhbmQgYnVpbGQgRW5jaGFudCBkZWZhdWx0IGJhY2tlbmQKKyAgICAgICAg
aWYgRW5jaGFudCBpcyBhdmFpbGFibGUuIEFsc28gYWRkZWQgYSBjb25maWcgdGVzdCBmb3IgbGli
ZW5jaGFudC4KKworICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVu
Y2hhbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHFtYWtlL2NvbmZp
Zy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvOiBBZGRlZC4KKyAgICAgICAgKiBxbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNz
L2ZlYXR1cmVzL2ZlYXR1cmVzLnByaToKKwogMjAxMy0wMS0xNCAgQW5kcmV5IEx1c2huaWtvdiAg
PGx1c2huaWtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZml4IERS
VCB0byBkZWxpdmVyIHNpbXVsYXRlZCBldmVudHMgdG8gZGV2dG9vbHMgZnJvbnQtZW5kCmRpZmYg
LS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LmNw
cCBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdlMWMyZTRlOWIyM2U1MDE5YmQ0MGY1ODUxN2JmNDdlMjA4NjczYjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNo
YW50LmNwcApAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxlbmNoYW50Lmg+CisjaW5jbHVkZSA8
c3RkaW8uaD4KKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgICAgZW5jaGFudF9nZXRfdmVy
c2lvbigpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25m
aWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LnBybyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50
ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1ODhiMWE0NjUzM2Nh
ZGRjODhjNDJhZWJiZmZhNDU4M2M1MjQ5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9xbWFr
ZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LnBybwpAQCAtMCwwICsxLDQgQEAK
K0NPTkZJRyAtPSBxdAorU09VUkNFUyA9IGxpYmVuY2hhbnQuY3BwCitDT05GSUcgKz0gbGlua19w
a2djb25maWcKK1BLR0NPTkZJRyArPSBlbmNoYW50CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZmVhdHVyZXMucHJmCmluZGV4IGRmOTNmZWExZDE5ZTA0OWNmOWM0YjZiODc0YzFmZDMwOTVl
YzA1MTAuLjg2MGFlMTgwNWVjMDM0YmM3NWRjNjgyMWYzZTQzMTVjYjAwZjdjZDEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xz
L3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC00OCw2ICs0OCwxMCBAQCBk
ZWZpbmVUZXN0KGRldGVjdEZlYXR1cmVzKSB7CiAgICAgY29uZmlnX2xpYnBuZzogV0VCS0lUX0NP
TkZJRyArPSB1c2VfbGlicG5nCiAgICAgZWxzZTogQ09ORklHVVJFX1dBUk5JTkdTICs9ICJQTkcg
bGlicmFyeSBub3QgZm91bmQsIFFJbWFnZURlY29kZXIgd2lsbCBkZWNvZGUgUE5HIGltYWdlcyIK
IAorICAgIGVuYWJsZT8oc3BlbGxjaGVjaykgeworICAgICAgICBjb25maWdfbGliZW5jaGFudDog
V0VCS0lUX0NPTkZJRyArPSB1c2VfbGliZW5jaGFudAorICAgIH0KKwogICAgIGxpbnV4LSogewog
ICAgICAgICBjb25maWdfbGliWGNvbXBvc2l0ZTogV0VCS0lUX0NPTkZJRyArPSBoYXZlX3hjb21w
b3NpdGUKICAgICAgICAgY29uZmlnX2xpYlhyZW5kZXI6IFdFQktJVF9DT05GSUcgKz0gaGF2ZV94
cmVuZGVyCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVz
LnByaSBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCmluZGV4IGUz
ZTQwOGJlZGFiZTlhYTVhZTVkNDNhYjgyZDliYzdiYThkMWFiNzAuLjk5YmZmZDUwZmRkYmY2MWQ0
Y2E1MmYyZTBmYjYyODQ4MzIzZTYxOTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvZmVhdHVyZXMucHJpCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJpCkBAIC05Nyw2ICs5Nyw3IEBAIEZFQVRVUkVfREVGQVVMVFMgPSBcCiAgICAg
RU5BQkxFX1NIQURPV19ET009MCBcCiAgICAgRU5BQkxFX1NIQVJFRF9XT1JLRVJTPTEgXAogICAg
IEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEgXAorICAgIEVOQUJMRV9TUEVMTENIRUNLPTEgXAog
ICAgIEVOQUJMRV9TUUxfREFUQUJBU0U9MSBcCiAgICAgRU5BQkxFX1NUWUxFX1NDT1BFRD0wIFwK
ICAgICBFTkFCTEVfU1ZHPTEgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183938</attachid>
            <date>2013-01-22 02:19:38 -0800</date>
            <delta_ts>2013-01-22 03:03:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105034-20130122111632.patch</filename>
            <type>text/plain</type>
            <size>30365</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ5NjMzYjZkYWY5YjRi
OGE3MjZmYWY3MWMyMmYyNjFmN2NiYjBkYi4uZjIzMTIyODJiNDMyYjRkMDE1ZDRmZDI5ZDQ3MzJh
YjRhMTRjNDIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTIyICBKb3PD
qSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBB
ZGQgc3BlbGwgY2hlY2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIFRleHRDaGVja2VyRW5j
aGFudCBmb3IgUXQgV2ViS2l0LgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLnByaToKKwogMjAxMy0wMS0yMSAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxp
YS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cGFyZW50
VGFibGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA2NDdkYmFiODQ5MTZhZDVmOWEyMmE3MTZhMTlhMGJi
YTU4ZmI4MThhLi40YTQ0NGM1ODMwYjdmMTRkNzRhNGRhZGEyMjEyOTU5ZTcxODZiNDAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAxLTIyICBKb3PDqSBEYXBlbmEgUGF6
ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3BlbGwgY2hl
Y2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlIFFXZWJHbG9iYWwgb24gUU1MIHBsdWdpbi4KKworICAgICAgICAqIGRlY2xh
cmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3Bs
dWdpbi5jcHA6CisgICAgICAgICogZGVjbGFyYXRpdmUvcHVibGljLnByaToKKwogMjAxMy0wMS0y
MSAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAg
ICAgICBbUXRdW1dLMV0gUGVybWlzc2lvbiByZXF1ZXN0IGNhbGxiYWNrcyBmb3Igbm9uLWxlZ2Fj
eSBub3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTEwZDQ4NWVkMjRiMGUxZGU1MWQ1MTM2MTU0
NWY1MzdhOWNiNDZiMC4uZDU0NmQ5NTVhOWUxNTk5ZTY1Y2EyZmM5NThlN2VhMDkyZWZmNDZhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTAxLTIyICBKb3PDqSBEYXBlbmEgUGF6
ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3BlbGwgY2hl
Y2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BlbGxjaGVjayBzdXBwb3J0IGZvciBRdCBXZWJLaXQyLgorCisgICAgICAgIFF0VGV4
dENoZWNrZXIgb2JqZWN0IGltcGxlbWVudHMgdGhlIFdLVGV4dENoZWNrZXJDbGllbnQgaW50ZXJm
YWNlCisgICAgICAgIHVzaW5nIFRleHRDaGVja2VyRW5jaGFudCBpbiBXZWJDb3JlLgorCisgICAg
ICAgIEFkZGVkIHdlYmtpdCBwcm9wZXJ0eSwgZm9yIGFjY2Vzc2luZyB0aGUgb2JqZWN0cyBzaGFy
ZWQgYW1vbmcKKyAgICAgICAgYWxsIHdlYiB2aWV3cy4gVGhpcyBpcyBmb3IgZXhwb3NpbmcgYW5k
IGFsbG93aW5nIHRvIGNoYW5nZQorICAgICAgICB0aGUgY3VycmVudCB0ZXh0IGNoZWNrZXIgc3Rh
dHVzLiBUaGlzIGlzIGEgZ2xvYmFsIGFzIFdlYktpdCBob2xkcworICAgICAgICBpbnRlcm5hbGx5
IGEgZ2xvYmFsIGZvciBlbmFibGVkIHRleHQgY2hlY2tlciB0b28uCisKKyAgICAgICAgKiBUYXJn
ZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbC5jcHA6IEFkZGVk
LgorICAgICAgICAoUVdlYkdsb2JhbDo6UVdlYkdsb2JhbCk6CisgICAgICAgIChRV2ViR2xvYmFs
OjppbnN0YW5jZSk6CisgICAgICAgIChRV2ViR2xvYmFsOjp0ZXh0Q2hlY2tlckVuYWJsZWQpOgor
ICAgICAgICAoUVdlYkdsb2JhbDo6c2V0VGV4dENoZWNrZXJFbmFibGVkKToKKyAgICAgICAgKFFX
ZWJHbG9iYWw6OnNldFRleHRDaGVja2VyTGFuZ3VhZ2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJnbG9iYWxfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJ0ZXh0Y2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXdlYnRleHRjaGVja2VyX3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
d2VidGV4dGNoZWNrZXJlbmNoYW50LmNwcDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcC5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3Vt
ZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2lu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpn
ZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpsZWFybldv
cmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdub3JlV29yZCk6CisKIDIwMTMt
MDEtMjEgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAg
UkVHUkVTU0lPTiAocjE0MDI4NSk6IEdUSyB1c2VzIFdLUGFnZVJlc291cmNlTG9hZENsaWVudCB3
aGljaCB3YXMgcmVtb3ZlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMDljY2E4MGJhNjI0MjI0MjRhZGZhYjAw
YmJlYWJmNjE5ZjQxYjgxOC4uYjE2MTE1YTgwMmYyNTVmZDUxMmM0YjZmN2ZhMzAwNjZkMzJiNDU3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCkBAIC00MTE2LDYgKzQxMTYsMTEgQEAgdXNlPyhXRUJQKSB7CiAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwCiB9CiAKK3VzZT8oTElCRU5DSEFOVCkgeworICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vdGV4
dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS90
ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorfQorCiAhaGF2ZT8oc3FsaXRlMyk6
ZXhpc3RzKCQke1NRTElURTNTUkNESVJ9L3NxbGl0ZTMuYykgewogICAgICMgQnVpbGQgc3FsaXRl
MyBpbnRvIFdlYkNvcmUgZnJvbSBzb3VyY2UKICAgICAjIHNvbWV3aGF0IGNvcGllZCBmcm9tICQk
UVRfU09VUkNFX1RSRUUvc3JjL3BsdWdpbnMvc3FsZHJpdmVycy9zcWxpdGUvc3FsaXRlLnBybwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnByaQppbmRleCA2ZTE1NTY4ZmI4NTZkYmVmMWM5MjE0ZTEwYzJlNWIwMzlhOTE0NmY1
Li40ODYyNTVkYTYzZWIwYWRmZjIwNTZlYjQ3NGIzZjhiYWQyNWQ0NzkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
aQpAQCAtMjU0LDYgKzI1NCwxMSBAQCBoYXZlPyhzcWxpdGUzKSB7CiAgICAgICAgIExJQlMgKz0g
LWxzcWxpdGUzCiAgICAgfQogfQorZW5hYmxlPyhTUEVMTENIRUNLKSB7CisgICAgdXNlPyhMSUJF
TkNIQU5UKSB7CisgICAgICAgIFBLR0NPTkZJRyArPSBlbmNoYW50CisgICAgfQorfQogCiB1c2U/
KGxpYmpwZWcpOiBMSUJTICs9IC1sanBlZwogdXNlPyhsaWJwbmcpOiBMSUJTICs9IC1scG5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVn
aW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2lu
LmNwcAppbmRleCBlNmZmZWRhNmViMGE1MGJhNDJmMmZmNGUwNjk5MDJlNGJhYmE1NTYwLi5jYmNm
M2YxYzU5NjZjZTQxYmQwYThkMWIzMDM3Njg5N2I4MTdlZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3BsdWdpbi5jcHAKQEAgLTI1LDEy
ICsyNSwxNSBAQAogI2luY2x1ZGUgInByaXZhdGUvcXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVk
ZSAicHJpdmF0ZS9xdHdlYnNlY3VyaXR5b3JpZ2luX3AuaCIKICNpbmNsdWRlICJwcml2YXRlL3F3
ZWJkb3dubG9hZGl0ZW1fcC5oIgorI2luY2x1ZGUgInByaXZhdGUvcXdlYmdsb2JhbF9wLmgiCiAj
aW5jbHVkZSAicHJpdmF0ZS9xd2Via2l0dGVzdF9wLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9xd2Vi
bmF2aWdhdGlvbmhpc3RvcnlfcC5oIgogI2luY2x1ZGUgInByaXZhdGUvcXdlYnBlcm1pc3Npb25y
ZXF1ZXN0X3AuaCIKICNpbmNsdWRlICJwcml2YXRlL3F3ZWJwcmVmZXJlbmNlc19wLmgiCiAKICNp
bmNsdWRlIDxRdFFtbC9xcW1sLmg+CisjaW5jbHVkZSA8UXRRbWwvcXFtbGNvbnRleHQuaD4KKyNp
bmNsdWRlIDxRdFFtbC9xcW1sZW5naW5lLmg+CiAjaW5jbHVkZSA8UXRRbWwvcXFtbGV4dGVuc2lv
bnBsdWdpbi5oPgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKQEAgLTQ3LDYgKzUwLDE1IEBAIGNsYXNz
IFdlYktpdFFtbEV4cGVyaW1lbnRhbEV4dGVuc2lvblBsdWdpbjogcHVibGljIFFRbWxFeHRlbnNp
b25QbHVnaW4gewogICAgIFFfT0JKRUNUCiAgICAgUV9QTFVHSU5fTUVUQURBVEEoSUlEICJvcmcu
cXQtcHJvamVjdC5RdC5RUW1sRXh0ZW5zaW9uSW50ZXJmYWNlIiBGSUxFICJwbHVnaW4uanNvbiIp
CiBwdWJsaWM6CisKKyNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKKyAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZUVuZ2luZShRUW1sRW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHVyaSkKKyAg
ICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5n
KCJRdFdlYktpdC5leHBlcmltZW50YWwiKSk7CisgICAgICAgIGVuZ2luZS0+cm9vdENvbnRleHQo
KS0+c2V0Q29udGV4dFByb3BlcnR5KFFMYXRpbjFTdHJpbmcoIndlYmtpdCIpLCBRV2ViR2xvYmFs
OjppbnN0YW5jZSgpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
clR5cGVzKGNvbnN0IGNoYXIqIHVyaSkKICAgICB7CiAgICAgICAgIHFXYXJuaW5nKCJcbldBUk5J
Tkc6IFRoaXMgcHJvamVjdCBpcyB1c2luZyB0aGUgZXhwZXJpbWVudGFsIFFNTCBBUEkgZXh0ZW5z
aW9ucyBmb3IgUXRXZWJLaXQgYW5kIGlzIHRoZXJlZm9yZSB0aWVkIHRvIGEgc3BlY2lmaWMgUXRX
ZWJLaXQgcmVsZWFzZS5cbiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvcHVibGljLnByaSBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQpp
bmRleCA1ZmM1OTg1ZWJkYTViYzEzNmIyMWE5NmVhM2YzOWJhYWYwNjI4MTQzLi43YWFjZDA0MGUx
MDRhMWMyOTc3YjNiZGJmY2U2MDIzZTkyYWQ1OWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKKysrIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJh
dGl2ZS9wdWJsaWMucHJpCkBAIC0zOCw2ICszOCwxMiBAQCBTT1VSQ0VTICs9IHBsdWdpbi5jcHAK
IGJ1aWxkPyh3ZWJraXQyKTogewogICAgIERFRklORVMgKz0gSEFWRV9XRUJLSVQyCiAgICAgUVQg
Kz0gbmV0d29yaworCisgICAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NQRUxMQ0hFQ0s9MSkg
eworICAgICAgICBjb25maWdfbGliZW5jaGFudCB7CisgICAgICAgICAgICBERUZJTkVTICs9IFdU
Rl9VU0VfTElCRU5DSEFOVD0xCisgICAgICAgIH0KKyAgICB9CiB9CiAKICMgVGhlIGZhbGxiYWNr
IHRvIFFUX0lOU1RBTExfSU1QT1JUUyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpp
bmRleCA2YzQwOGE3MDM3YmMzOThmMmI2ZTU5NzI4OTg5ODg5MzQyYmFiMmE2Li5jOWE4YjBiZWJi
ZjkxNWFkYjM4OTIxMzY4OTZkNTkzZmVjYThmYzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTgxNCw2ICs4
MTQsNyBAQCBoYXZlPyhRVFFVSUNLKSB7CiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
bmV0d29ya3JlcXVlc3RfcC5oIFwKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxz
Y2hlbWVkZWxlZ2F0ZV9wLmggXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0
X3AuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbF9wLmggXAogICAgICAg
ICBVSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmggXAogICAgICAg
ICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyLmggXApAQCAtODQ5LDYgKzg1MCw3IEBAIGhhdmU/KFFUUVVJQ0sp
IHsKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdC5jcHAgXAog
ICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcCBcCiAg
ICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcCBcCisgICAgICAgIFVJ
UHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJraXR0ZXN0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50UXQuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0RGlhbG9nUnVubmVy
LmNwcCBcCkBAIC04NzcsNiArODc5LDE0IEBAIGhhdmU/KFFUUVVJQ0spIHsKICAgICAgICAgU09V
UkNFUyArPSBcCiAgICAgICAgICAgICBVSVByb2Nlc3MvcXQvV2ViQ29sb3JDaG9vc2VyUHJveHlR
dC5jcHAKICAgICB9CisKKyAgICBlbmFibGU/KFNQRUxMQ0hFQ0spIHsKKyAgICAgICAgICAgIEhF
QURFUlMgKz0gXAorICAgICAgICAgICAgICAgIFVJUHJvY2Vzcy9xdC9RdFRleHRDaGVja2VyLmgK
KyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgIFVJUHJvY2Vzcy9xdC9R
dFRleHRDaGVja2VyLmNwcAorICAgICAgICAgICAgUEtHQ09ORklHICs9IGVuY2hhbnQKKyAgICB9
CiB9CiAKIG1hYzogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xd2ViZ2xvYmFsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmds
b2JhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIzMGNlOWU1MDc5YTdlZTBmM2UxNGMxZTM2NGMyMTg4MzM1
ZDdiYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXdlYmdsb2JhbC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInF3ZWJn
bG9iYWxfcC5oIgorCisjaW5jbHVkZSAiUXRUZXh0Q2hlY2tlci5oIgorCitRV2ViR2xvYmFsOjpR
V2ViR2xvYmFsKCkKK3sKK30KKworUVdlYkdsb2JhbCogUVdlYkdsb2JhbDo6aW5zdGFuY2UoKQor
eworICAgIHN0YXRpYyBRV2ViR2xvYmFsKiBzX2luc3RhbmNlID0gMDsKKyAgICBpZiAoIXNfaW5z
dGFuY2UpCisgICAgICAgIHNfaW5zdGFuY2UgPSBuZXcgUVdlYkdsb2JhbCgpOworCisgICAgcmV0
dXJuIHNfaW5zdGFuY2U7Cit9CisKK2Jvb2wgUVdlYkdsb2JhbDo6dGV4dENoZWNrZXJFbmFibGVk
KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gUXRUZXh0Q2hl
Y2tlcjo6aW5zdGFuY2UoKS0+ZW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKwordm9pZCBRV2ViR2xvYmFsOjpzZXRUZXh0Q2hlY2tlckVuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFF0VGV4dENoZWNrZXI6Omlu
c3RhbmNlKCktPnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgZW1pdCB0ZXh0Q2hlY2tlckVuYWJs
ZWRDaGFuZ2VkKCk7CisjZW5kaWYKK30KKwordm9pZCBRV2ViR2xvYmFsOjpzZXRUZXh0Q2hlY2tl
ckxhbmd1YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5nPiAmbGFuZ3VhZ2VzKQoreworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIFF0VGV4dENoZWNrZXI6Omluc3RhbmNlKCktPnNldExhbmd1YWdl
cyhsYW5ndWFnZXMpOworICAgIGVtaXQgdGV4dENoZWNrZXJMYW5ndWFnZXNDaGFuZ2VkKCk7Cisj
ZW5kaWYKK30KKworUUxpc3Q8UVN0cmluZz4gUVdlYkdsb2JhbDo6dGV4dENoZWNrZXJMYW5ndWFn
ZXMoKSBjb25zdAoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBRdFRleHRD
aGVja2VyOjppbnN0YW5jZSgpLT5sYW5ndWFnZXMoKTsKKyNlbHNlCisgICAgcmV0dXJuIFFMaXN0
PFFTdHJpbmc+KCk7CisjZW5kaWYKK30KKworUUxpc3Q8UVN0cmluZz4gUVdlYkdsb2JhbDo6dGV4
dENoZWNrZXJBdmFpbGFibGVMYW5ndWFnZXMoKSBjb25zdAoreworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIHJldHVybiBRdFRleHRDaGVja2VyOjppbnN0YW5jZSgpLT5hdmFpbGFibGVMYW5n
dWFnZXMoKTsKKyNlbHNlCisgICAgcmV0dXJuIFFMaXN0PFFTdHJpbmc+KCk7CisjZW5kaWYKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbF9w
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJnbG9iYWxfcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFmNTRjZTE3NzM4OGY3M2NhYzY5ZGVlODRhOThhMWNkMDgzZDljYTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJnbG9iYWxfcC5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIHF3ZWJnbG9iYWxfcF9oCisjZGVmaW5lIHF3ZWJnbG9iYWxfcF9oCisKKyNp
bmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKwor
Y2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYkdsb2JhbCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBR
X09CSkVDVAorICAgIFFfUFJPUEVSVFkoYm9vbCB0ZXh0Q2hlY2tlckVuYWJsZWQgUkVBRCB0ZXh0
Q2hlY2tlckVuYWJsZWQgV1JJVEUgc2V0VGV4dENoZWNrZXJFbmFibGVkIE5PVElGWSB0ZXh0Q2hl
Y2tlckVuYWJsZWRDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUUxpc3Q8UVN0cmluZz4gdGV4dENo
ZWNrZXJMYW5ndWFnZXMgUkVBRCB0ZXh0Q2hlY2tlckxhbmd1YWdlcyBXUklURSBzZXRUZXh0Q2hl
Y2tlckxhbmd1YWdlcyk7CisgICAgUV9QUk9QRVJUWShRTGlzdDxRU3RyaW5nPiB0ZXh0Q2hlY2tl
ckF2YWlsYWJsZUxhbmd1YWdlcyBSRUFEIHRleHRDaGVja2VyQXZhaWxhYmxlTGFuZ3VhZ2VzKTsK
KworcHVibGljOgorICAgIHN0YXRpYyBRV2ViR2xvYmFsKiBpbnN0YW5jZSgpOworICAgIGJvb2wg
dGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUZXh0Q2hlY2tlckVuYWJs
ZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dENoZWNrZXJMYW5ndWFn
ZXMoY29uc3QgUUxpc3Q8UVN0cmluZz4mIGxhbmd1YWdlcyk7CisgICAgdmlydHVhbCBRTGlzdDxR
U3RyaW5nPiB0ZXh0Q2hlY2tlckxhbmd1YWdlcygpIGNvbnN0OworICAgIHZpcnR1YWwgUUxpc3Q8
UVN0cmluZz4gdGV4dENoZWNrZXJBdmFpbGFibGVMYW5ndWFnZXMoKSBjb25zdDsKKworUV9TSUdO
QUxTOgorICAgIHZvaWQgdGV4dENoZWNrZXJFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgdGV4
dENoZWNrZXJMYW5ndWFnZXNDaGFuZ2VkKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUVdl
Ykdsb2JhbCgpOworfTsKKworI2VuZGlmIC8vIHF3ZWJnbG9iYWxfcF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNiNjIxM2Ri
MzhjY2ExOTMzOGVkZjFmNTY3YWYyZjdiMTU5NTA2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE4OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIlF0VGV4dENoZWNrZXIuaCIKKworI2luY2x1ZGUgIldLQVBJ
Q2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5o
IgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmdRdC5oIgorI2lu
Y2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK1F0VGV4dENoZWNrZXIqIFF0VGV4dENoZWNrZXI6
Omluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgUXRUZXh0Q2hlY2tlciogc19pbnN0YW5jZSA9IDA7
CisgICAgaWYgKCFzX2luc3RhbmNlKQorICAgICAgICBzX2luc3RhbmNlID0gbmV3IFF0VGV4dENo
ZWNrZXIoKTsKKworICAgIHJldHVybiBzX2luc3RhbmNlOworfQorCitRdFRleHRDaGVja2VyOjpR
dFRleHRDaGVja2VyKCkKKyAgICA6IG1fZW5hYmxlZCh0cnVlKQorICAgICwgbV90ZXh0Q2hlY2tl
cihXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpKQoreworICAgIG1fdGV4dENo
ZWNrZXItPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoVmVjdG9yPFN0cmluZz4oKSk7Cisg
ICAgc2V0V0soKTsKK30KKworYm9vbCBRdFRleHRDaGVja2VyOjplbmFibGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9lbmFibGVkOworfQorCit2b2lkIFF0VGV4dENoZWNrZXI6OnNldEVuYWJs
ZWQoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKG1fZW5hYmxlZCA9PSBlbmFibGUpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZW5hYmxlZCA9IGVuYWJsZTsKKyAgICBXS1RleHRDaGVja2VyQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7Cit9CisKK3Zv
aWQgUXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHN0
cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKQor
eworICAgIG1fdGV4dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzdHJpbmcsIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworUVZlY3RvcjxRU3RyaW5n
PiBRdFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKQor
eworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSBtX3RleHRDaGVja2VyLT5nZXRHdWVzc2Vz
Rm9yV29yZCh3b3JkKTsKKyAgICBRVmVjdG9yPFFTdHJpbmc+IHJlc3VsdDsKKyAgICBpZiAoIWd1
ZXNzZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3Vlc3Nl
cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZ3Vlc3Nlc1tpXSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUXRUZXh0Q2hlY2tlcjo6bGVhcm5X
b3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpCit7CisgICAgbV90ZXh0Q2hlY2tlci0+bGVhcm5Xb3Jk
KHdvcmQpOworfQorCit2b2lkIFF0VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoY29uc3QgUVN0cmlu
ZyYgd29yZCkKK3sKKyAgICBtX3RleHRDaGVja2VyLT5pZ25vcmVXb3JkKHdvcmQpOworfQorCit2
b2lkIFF0VGV4dENoZWNrZXI6OnNldExhbmd1YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5nPiYgbGFu
Z3VhZ2VzKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlc1ZlY3RvcjsKKyAgICBmb3Jl
YWNoIChjb25zdCBRU3RyaW5nJiBzcGVsbENoZWNraW5nTGFuZ3VhZ2UsIGxhbmd1YWdlcykKKyAg
ICAgICAgbGFuZ3VhZ2VzVmVjdG9yLmFwcGVuZChzcGVsbENoZWNraW5nTGFuZ3VhZ2UpOworCisg
ICAgbV90ZXh0Q2hlY2tlci0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXNW
ZWN0b3IpOworfQorCitRTGlzdDxRU3RyaW5nPiBRdFRleHRDaGVja2VyOjpsYW5ndWFnZXMoKSBj
b25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9IG1fdGV4dENoZWNrZXItPmxv
YWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBRTGlzdDxRU3RyaW5nPiByZXN1bHQ7
CisgICAgaWYgKCFsYW5ndWFnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGFuZ3VhZ2VzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChsYW5ndWFnZXNbaV0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitRTGlzdDxR
U3RyaW5nPiBRdFRleHRDaGVja2VyOjphdmFpbGFibGVMYW5ndWFnZXMoKSBjb25zdAoreworICAg
IFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9IG1fdGV4dENoZWNrZXItPmF2YWlsYWJsZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBRTGlzdDxRU3RyaW5nPiByZXN1bHQ7CisgICAgaWYg
KCFsYW5ndWFnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGFuZ3VhZ2VzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsYW5ndWFn
ZXNbaV0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIFF0
VGV4dENoZWNrZXIqIHRvVGV4dENoZWNrZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UXRUZXh0Q2hlY2tlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKTsKK30KKworc3RhdGljIGJvb2wgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkQ2FsbGJhY2soY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4gdG9UZXh0
Q2hlY2tlcihjbGllbnRJbmZvKS0+ZW5hYmxlZCgpOworfQorCitzdGF0aWMgYm9vbCBjb250aW51
b3VzU3BlbGxDaGVja2luZ0FsbG93ZWRDYWxsYmFjayhjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWRDYWxsYmFjayhib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+c2V0RW5hYmxlZChlbmFibGVk
KTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2sodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoV2ViS2l0
Ojp0b0ltcGwodGV4dCktPnN0cmluZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxs
aW5nTGVuZ3RoKTsKK30KKworc3RhdGljIFdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmRDYWxsYmFj
ayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgUVZlY3RvcjxRU3RyaW5nPiBndWVzc2VzID0gdG9UZXh0Q2hlY2tlcihjbGllbnRJ
bmZvKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQoV2ViS2l0Ojp0b0ltcGwod29yZCktPnN0cmluZygpKTsK
KyAgICBpZiAoZ3Vlc3Nlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgV0tN
dXRhYmxlQXJyYXlSZWYgd2tTdWdnZXN0aW9ucyA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7Cisg
ICAgZm9yZWFjaCAoY29uc3QgUVN0cmluZyYgZ3Vlc3MsIGd1ZXNzZXMpIHsKKyAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhRU3RyaW5nKGd1ZXNzKSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrU3VnZ2Vz
dGlvbnMsIHdrU3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHdrU3VnZ2Vz
dGlvbnM7Cit9CisKK3N0YXRpYyB2b2lkIGxlYXJuV29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b1RleHRD
aGVja2VyKGNsaWVudEluZm8pLT5sZWFybldvcmQoV2ViS2l0Ojp0b0ltcGwod29yZCktPnN0cmlu
ZygpKTsKK30KKworc3RhdGljIHZvaWQgaWdub3JlV29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b1RleHRD
aGVja2VyKGNsaWVudEluZm8pLT5pZ25vcmVXb3JkKFdlYktpdDo6dG9JbXBsKHdvcmQpLT5zdHJp
bmcoKSk7Cit9CisKKwordm9pZCBRdFRleHRDaGVja2VyOjpzZXRXSygpCit7CisgICAgV0tUZXh0
Q2hlY2tlckNsaWVudCB0ZXh0Q2hlY2tlckNsaWVudDsKKyAgICBtZW1zZXQoJnRleHRDaGVja2Vy
Q2xpZW50LCAwLCBzaXplb2YoV0tUZXh0Q2hlY2tlckNsaWVudCkpOworICAgIHRleHRDaGVja2Vy
Q2xpZW50LnZlcnNpb24gPSBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uOworICAg
IHRleHRDaGVja2VyQ2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIHRleHRDaGVja2VyQ2xp
ZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCA9IGNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nQWxsb3dlZENhbGxiYWNrOworICAgIHRleHRDaGVja2VyQ2xpZW50LmNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNr
OworICAgIHRleHRDaGVja2VyQ2xpZW50LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCA9IHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrOworICAgIHRleHRD
aGVja2VyQ2xpZW50LmNoZWNrU3BlbGxpbmdPZlN0cmluZyA9IGNoZWNrU3BlbGxpbmdPZlN0cmlu
Z0NhbGxiYWNrOworICAgIHRleHRDaGVja2VyQ2xpZW50Lmd1ZXNzZXNGb3JXb3JkID0gZ3Vlc3Nl
c0ZvcldvcmRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5sZWFybldvcmQgPSBsZWFy
bldvcmRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5pZ25vcmVXb3JkID0gaWdub3Jl
V29yZENhbGxiYWNrOworCisgICAgV0tUZXh0Q2hlY2tlclNldENsaWVudCgmdGV4dENoZWNrZXJD
bGllbnQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VGV4
dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRleHRDaGVja2VyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWM3ZTg2YjZlODk5ODA0YzFlNGU3MGNlYzE5MTgxZmQ4MmE3MjcxMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRleHRDaGVja2Vy
LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBRdFRleHRDaGVja2VyX2gKKyNkZWZpbmUgUXRU
ZXh0Q2hlY2tlcl9oCisKKyNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKyNpbmNsdWRlIDxRdENv
cmUvUVNldD4KKyNpbmNsdWRlIDxRdENvcmUvUVN0cmluZz4KKyNpbmNsdWRlIDxRdENvcmUvUVZl
Y3Rvcj4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyRW5jaGFudC5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKworY2xhc3MgUXRUZXh0Q2hlY2tlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFF0VGV4dENoZWNrZXIqIGluc3RhbmNlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tT
cGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmLCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludCYgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIHZpcnR1YWwgUVZlY3RvcjxRU3RyaW5nPiBn
ZXRHdWVzc2VzRm9yV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bGVhcm5Xb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpOworICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVX
b3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpOworCisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TGFuZ3VhZ2VzKGNvbnN0IFFMaXN0PFFTdHJpbmc+Jik7CisgICAgdmlydHVhbCBRTGlz
dDxRU3RyaW5nPiBsYW5ndWFnZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFMaXN0PFFTdHJpbmc+
IGF2YWlsYWJsZUxhbmd1YWdlcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIFF0VGV4dENoZWNr
ZXIoKTsKKyAgICB2b2lkIHNldFdLKCk7CisKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBPd25Q
dHI8V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50PiBtX3RleHRDaGVja2VyOworfTsKKworI2Vu
ZGlmIC8vIFF0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJDb250ZXh0LmNwcAppbmRleCBmYWFjYTkxYjJmZTg2YWE1MzNjY2FmMjZjYmMwNWM4NjFjOTVk
ZDIxLi43NTIxZWVhY2Y2MWJhYTAwMzc1NTBkNDdiYjY2M2MxNjJjZGQxODIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcApAQCAtMjIsNiArMjIsOSBA
QAogI2luY2x1ZGUgIlF0V2ViQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiUXREb3dubG9hZE1hbmFn
ZXIuaCIKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJRdFRleHRDaGVja2VyLmgi
CisjZW5kaWYKICNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIgogI2luY2x1ZGUg
IldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKQEAgLTcxLDYgKzc0LDEzIEBA
IHN0YXRpYyB2b2lkIGluaXRJbnNwZWN0b3JTZXJ2ZXIoKQogI2VuZGlmCiB9CiAKK3N0YXRpYyB2
b2lkIGluaXRUZXh0Q2hlY2tlcigpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgUXRU
ZXh0Q2hlY2tlcjo6aW5zdGFuY2UoKS0+c2V0RW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorfQorCiBz
dGF0aWMgdm9pZCBnbG9iYWxJbml0aWFsaXphdGlvbigpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQgPSBmYWxzZTsKQEAgLTc4LDYgKzg4LDcgQEAgc3RhdGljIHZvaWQgZ2xvYmFsSW5p
dGlhbGl6YXRpb24oKQogICAgICAgICByZXR1cm47CiAKICAgICBpbml0SW5zcGVjdG9yU2VydmVy
KCk7CisgICAgaW5pdFRleHRDaGVja2VyKCk7CiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAKaW5kZXgg
NGEzMzE4NDA1YWQ1ZWM4Y2U2MzYzMzRmN2Q4MGU1MDhhYWU2OGE5Mi4uM2YzNjU4M2JmNDQwMGYz
ZDYwNjM0ZDRkNTgxZjg2N2M4MTllYWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9UZXh0Q2hlY2tlclF0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlRleHRD
aGVja2VyLmgiCiAKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogIApAQCAtMzcsOTMgKzM3LDEwMyBAQCBzdGF0aWMgVGV4
dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0YXRl
JiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgCisg
ICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVN0YXRlID0gZmFsc2U7CisgICAgaWYgKGRpZElu
aXRpYWxpemVTdGF0ZSkKKyAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisKKyAgICBX
ZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID0gY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gIGNsaWVudC5ncmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOworCiAg
ICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwogfQogCiB2b2lkIFRl
eHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgdGV4dENoZWNr
ZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXh0Q2hlY2tlclN0
YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsK
KyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tl
cjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB2b2lkIFRleHRDaGVj
a2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gZW5hYmxlZDsKIH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVl
U3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKQoraW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5p
cXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOwogfQogCi12b2lkIFRl
eHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpCit2b2lkIFRleHRD
aGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5j
bG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQz
Ml90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmco
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVu
Z3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xl
bmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0
cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0
aCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qs
IGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYs
IGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3Ry
aW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90
IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywg
aW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4
dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1h
ckxlbmd0aCk7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsK
IH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcm
KQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChp
bnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRh
ZywgbWlzc3BlbGxlZFdvcmQpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1h
ckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQ
aHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFy
UGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nl
c0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1
ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwogfQogCi12b2lk
IFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4
dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmlu
ZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQog
CiB2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywg
Y29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcs
IHdvcmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMWYzMWMwZjE5NWU0NTU4ZGMzZmVhY2Vl
OGQ5ZDhjMDg3NmE4MDRjLi4yOWFkNGZiY2MxNGM1NzgzZjA1MGYwMzQ5ZmUyMTIwYzNjYjU4MjNl
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTMtMDEtMjIgIEpvc8OpIERhcGVuYSBQYXogIDxqZGFwZW5hQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIEFkZCBzcGVsbCBjaGVja2luZyBzdXBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUwMzQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgc3Bl
bGxjaGVjayBieSBkZWZhdWx0LCBhbmQgYnVpbGQgRW5jaGFudCBkZWZhdWx0IGJhY2tlbmQKKyAg
ICAgICAgaWYgRW5jaGFudCBpcyBhdmFpbGFibGUuIEFsc28gYWRkZWQgYSBjb25maWcgdGVzdCBm
b3IgbGliZW5jaGFudC4KKworICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50
L2xpYmVuY2hhbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHFtYWtl
L2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvOiBBZGRlZC4KKyAgICAgICAg
KiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoKKyAgICAgICAgKiBxbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByaToKKwogMjAxMy0wMS0yMSAgR3VzdGF2byBOb3Jv
bmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTQwMjg1
KTogR1RLIHVzZXMgV0tQYWdlUmVzb3VyY2VMb2FkQ2xpZW50IHdoaWNoIHdhcyByZW1vdmVkCmRp
ZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50
LmNwcCBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdlMWMyZTRlOWIyM2U1MDE5YmQ0MGY1ODUxN2JmNDdlMjA4NjczYjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJl
bmNoYW50LmNwcApAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxlbmNoYW50Lmg+CisjaW5jbHVk
ZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgICAgZW5jaGFudF9nZXRf
dmVyc2lvbigpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9j
b25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LnBybyBiL1Rvb2xzL3FtYWtlL2NvbmZp
Zy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1ODhiMWE0NjUz
M2NhZGRjODhjNDJhZWJiZmZhNDU4M2M1MjQ5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9x
bWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LnBybwpAQCAtMCwwICsxLDQg
QEAKK0NPTkZJRyAtPSBxdAorU09VUkNFUyA9IGxpYmVuY2hhbnQuY3BwCitDT05GSUcgKz0gbGlu
a19wa2djb25maWcKK1BLR0NPTkZJRyArPSBlbmNoYW50CmRpZmYgLS1naXQgYS9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVh
dHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IGNjOTA3MmRkOWJhM2ExMjA3YjE5NmUzYjA3MzNiOWI0
NjE4N2U5Y2YuLjU2NWQ2OTE4ZjJiMDRkNTI1YTQwZjQzMjE3NTg5MTc5NTQ3ZmM4NzMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rv
b2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC01MCw2ICs1MCwxMCBA
QCBkZWZpbmVUZXN0KGRldGVjdEZlYXR1cmVzKSB7CiAgICAgY29udGFpbnMoUVRfQ09ORklHLCBz
eXN0ZW0tcG5nKTogV0VCS0lUX0NPTkZJRyArPSB1c2VfbGlicG5nCiAgICAgZWxzZTogQ09ORklH
VVJFX1dBUk5JTkdTICs9ICJQTkcgbGlicmFyeSBub3QgZm91bmQsIFFJbWFnZURlY29kZXIgd2ls
bCBkZWNvZGUgUE5HIGltYWdlcyIKIAorICAgIGVuYWJsZT8oc3BlbGxjaGVjaykgeworICAgICAg
ICBjb25maWdfbGliZW5jaGFudDogV0VCS0lUX0NPTkZJRyArPSB1c2VfbGliZW5jaGFudAorICAg
IH0KKwogICAgIGxpbnV4LSogewogICAgICAgICBjb25maWdfbGliWGNvbXBvc2l0ZTogV0VCS0lU
X0NPTkZJRyArPSBoYXZlX3hjb21wb3NpdGUKICAgICAgICAgY29uZmlnX2xpYlhyZW5kZXI6IFdF
QktJVF9DT05GSUcgKz0gaGF2ZV94cmVuZGVyCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByaSBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJpCmluZGV4IGUzZTQwOGJlZGFiZTlhYTVhZTVkNDNhYjgyZDliYzdiYThkMWFi
NzAuLjk5YmZmZDUwZmRkYmY2MWQ0Y2E1MmYyZTBmYjYyODQ4MzIzZTYxOTIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCisrKyBiL1Rvb2xzL3Ft
YWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCkBAIC05Nyw2ICs5Nyw3IEBAIEZFQVRV
UkVfREVGQVVMVFMgPSBcCiAgICAgRU5BQkxFX1NIQURPV19ET009MCBcCiAgICAgRU5BQkxFX1NI
QVJFRF9XT1JLRVJTPTEgXAogICAgIEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEgXAorICAgIEVO
QUJMRV9TUEVMTENIRUNLPTEgXAogICAgIEVOQUJMRV9TUUxfREFUQUJBU0U9MSBcCiAgICAgRU5B
QkxFX1NUWUxFX1NDT1BFRD0wIFwKICAgICBFTkFCTEVfU1ZHPTEgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183950</attachid>
            <date>2013-01-22 03:03:31 -0800</date>
            <delta_ts>2013-01-22 07:19:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105034-20130122120025.patch</filename>
            <type>text/plain</type>
            <size>30486</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ5NjMzYjZkYWY5YjRi
OGE3MjZmYWY3MWMyMmYyNjFmN2NiYjBkYi4uZjIzMTIyODJiNDMyYjRkMDE1ZDRmZDI5ZDQ3MzJh
YjRhMTRjNDIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTIyICBKb3PD
qSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBB
ZGQgc3BlbGwgY2hlY2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIFRleHRDaGVja2VyRW5j
aGFudCBmb3IgUXQgV2ViS2l0LgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLnByaToKKwogMjAxMy0wMS0yMSAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxp
YS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cGFyZW50
VGFibGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA2NDdkYmFiODQ5MTZhZDVmOWEyMmE3MTZhMTlhMGJi
YTU4ZmI4MThhLi40YTQ0NGM1ODMwYjdmMTRkNzRhNGRhZGEyMjEyOTU5ZTcxODZiNDAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAxLTIyICBKb3PDqSBEYXBlbmEgUGF6
ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3BlbGwgY2hl
Y2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlIFFXZWJHbG9iYWwgb24gUU1MIHBsdWdpbi4KKworICAgICAgICAqIGRlY2xh
cmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3Bs
dWdpbi5jcHA6CisgICAgICAgICogZGVjbGFyYXRpdmUvcHVibGljLnByaToKKwogMjAxMy0wMS0y
MSAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAg
ICAgICBbUXRdW1dLMV0gUGVybWlzc2lvbiByZXF1ZXN0IGNhbGxiYWNrcyBmb3Igbm9uLWxlZ2Fj
eSBub3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTEwZDQ4NWVkMjRiMGUxZGU1MWQ1MTM2MTU0
NWY1MzdhOWNiNDZiMC4uZDU0NmQ5NTVhOWUxNTk5ZTY1Y2EyZmM5NThlN2VhMDkyZWZmNDZhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTAxLTIyICBKb3PDqSBEYXBlbmEgUGF6
ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3BlbGwgY2hl
Y2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BlbGxjaGVjayBzdXBwb3J0IGZvciBRdCBXZWJLaXQyLgorCisgICAgICAgIFF0VGV4
dENoZWNrZXIgb2JqZWN0IGltcGxlbWVudHMgdGhlIFdLVGV4dENoZWNrZXJDbGllbnQgaW50ZXJm
YWNlCisgICAgICAgIHVzaW5nIFRleHRDaGVja2VyRW5jaGFudCBpbiBXZWJDb3JlLgorCisgICAg
ICAgIEFkZGVkIHdlYmtpdCBwcm9wZXJ0eSwgZm9yIGFjY2Vzc2luZyB0aGUgb2JqZWN0cyBzaGFy
ZWQgYW1vbmcKKyAgICAgICAgYWxsIHdlYiB2aWV3cy4gVGhpcyBpcyBmb3IgZXhwb3NpbmcgYW5k
IGFsbG93aW5nIHRvIGNoYW5nZQorICAgICAgICB0aGUgY3VycmVudCB0ZXh0IGNoZWNrZXIgc3Rh
dHVzLiBUaGlzIGlzIGEgZ2xvYmFsIGFzIFdlYktpdCBob2xkcworICAgICAgICBpbnRlcm5hbGx5
IGEgZ2xvYmFsIGZvciBlbmFibGVkIHRleHQgY2hlY2tlciB0b28uCisKKyAgICAgICAgKiBUYXJn
ZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbC5jcHA6IEFkZGVk
LgorICAgICAgICAoUVdlYkdsb2JhbDo6UVdlYkdsb2JhbCk6CisgICAgICAgIChRV2ViR2xvYmFs
OjppbnN0YW5jZSk6CisgICAgICAgIChRV2ViR2xvYmFsOjp0ZXh0Q2hlY2tlckVuYWJsZWQpOgor
ICAgICAgICAoUVdlYkdsb2JhbDo6c2V0VGV4dENoZWNrZXJFbmFibGVkKToKKyAgICAgICAgKFFX
ZWJHbG9iYWw6OnNldFRleHRDaGVja2VyTGFuZ3VhZ2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJnbG9iYWxfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJ0ZXh0Y2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXdlYnRleHRjaGVja2VyX3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
d2VidGV4dGNoZWNrZXJlbmNoYW50LmNwcDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcC5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3Vt
ZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2lu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpn
ZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpsZWFybldv
cmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdub3JlV29yZCk6CisKIDIwMTMt
MDEtMjEgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAg
UkVHUkVTU0lPTiAocjE0MDI4NSk6IEdUSyB1c2VzIFdLUGFnZVJlc291cmNlTG9hZENsaWVudCB3
aGljaCB3YXMgcmVtb3ZlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMDljY2E4MGJhNjI0MjI0MjRhZGZhYjAw
YmJlYWJmNjE5ZjQxYjgxOC4uYjE2MTE1YTgwMmYyNTVmZDUxMmM0YjZmN2ZhMzAwNjZkMzJiNDU3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCkBAIC00MTE2LDYgKzQxMTYsMTEgQEAgdXNlPyhXRUJQKSB7CiAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwCiB9CiAKK3VzZT8oTElCRU5DSEFOVCkgeworICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vdGV4
dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS90
ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorfQorCiAhaGF2ZT8oc3FsaXRlMyk6
ZXhpc3RzKCQke1NRTElURTNTUkNESVJ9L3NxbGl0ZTMuYykgewogICAgICMgQnVpbGQgc3FsaXRl
MyBpbnRvIFdlYkNvcmUgZnJvbSBzb3VyY2UKICAgICAjIHNvbWV3aGF0IGNvcGllZCBmcm9tICQk
UVRfU09VUkNFX1RSRUUvc3JjL3BsdWdpbnMvc3FsZHJpdmVycy9zcWxpdGUvc3FsaXRlLnBybwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnByaQppbmRleCA2ZTE1NTY4ZmI4NTZkYmVmMWM5MjE0ZTEwYzJlNWIwMzlhOTE0NmY1
Li40ODYyNTVkYTYzZWIwYWRmZjIwNTZlYjQ3NGIzZjhiYWQyNWQ0NzkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
aQpAQCAtMjU0LDYgKzI1NCwxMSBAQCBoYXZlPyhzcWxpdGUzKSB7CiAgICAgICAgIExJQlMgKz0g
LWxzcWxpdGUzCiAgICAgfQogfQorZW5hYmxlPyhTUEVMTENIRUNLKSB7CisgICAgdXNlPyhMSUJF
TkNIQU5UKSB7CisgICAgICAgIFBLR0NPTkZJRyArPSBlbmNoYW50CisgICAgfQorfQogCiB1c2U/
KGxpYmpwZWcpOiBMSUJTICs9IC1sanBlZwogdXNlPyhsaWJwbmcpOiBMSUJTICs9IC1scG5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVn
aW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2lu
LmNwcAppbmRleCBlNmZmZWRhNmViMGE1MGJhNDJmMmZmNGUwNjk5MDJlNGJhYmE1NTYwLi5jYmNm
M2YxYzU5NjZjZTQxYmQwYThkMWIzMDM3Njg5N2I4MTdlZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3BsdWdpbi5jcHAKQEAgLTI1LDEy
ICsyNSwxNSBAQAogI2luY2x1ZGUgInByaXZhdGUvcXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVk
ZSAicHJpdmF0ZS9xdHdlYnNlY3VyaXR5b3JpZ2luX3AuaCIKICNpbmNsdWRlICJwcml2YXRlL3F3
ZWJkb3dubG9hZGl0ZW1fcC5oIgorI2luY2x1ZGUgInByaXZhdGUvcXdlYmdsb2JhbF9wLmgiCiAj
aW5jbHVkZSAicHJpdmF0ZS9xd2Via2l0dGVzdF9wLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9xd2Vi
bmF2aWdhdGlvbmhpc3RvcnlfcC5oIgogI2luY2x1ZGUgInByaXZhdGUvcXdlYnBlcm1pc3Npb25y
ZXF1ZXN0X3AuaCIKICNpbmNsdWRlICJwcml2YXRlL3F3ZWJwcmVmZXJlbmNlc19wLmgiCiAKICNp
bmNsdWRlIDxRdFFtbC9xcW1sLmg+CisjaW5jbHVkZSA8UXRRbWwvcXFtbGNvbnRleHQuaD4KKyNp
bmNsdWRlIDxRdFFtbC9xcW1sZW5naW5lLmg+CiAjaW5jbHVkZSA8UXRRbWwvcXFtbGV4dGVuc2lv
bnBsdWdpbi5oPgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKQEAgLTQ3LDYgKzUwLDE1IEBAIGNsYXNz
IFdlYktpdFFtbEV4cGVyaW1lbnRhbEV4dGVuc2lvblBsdWdpbjogcHVibGljIFFRbWxFeHRlbnNp
b25QbHVnaW4gewogICAgIFFfT0JKRUNUCiAgICAgUV9QTFVHSU5fTUVUQURBVEEoSUlEICJvcmcu
cXQtcHJvamVjdC5RdC5RUW1sRXh0ZW5zaW9uSW50ZXJmYWNlIiBGSUxFICJwbHVnaW4uanNvbiIp
CiBwdWJsaWM6CisKKyNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKKyAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZUVuZ2luZShRUW1sRW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHVyaSkKKyAg
ICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5n
KCJRdFdlYktpdC5leHBlcmltZW50YWwiKSk7CisgICAgICAgIGVuZ2luZS0+cm9vdENvbnRleHQo
KS0+c2V0Q29udGV4dFByb3BlcnR5KFFMYXRpbjFTdHJpbmcoIndlYmtpdCIpLCBRV2ViR2xvYmFs
OjppbnN0YW5jZSgpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
clR5cGVzKGNvbnN0IGNoYXIqIHVyaSkKICAgICB7CiAgICAgICAgIHFXYXJuaW5nKCJcbldBUk5J
Tkc6IFRoaXMgcHJvamVjdCBpcyB1c2luZyB0aGUgZXhwZXJpbWVudGFsIFFNTCBBUEkgZXh0ZW5z
aW9ucyBmb3IgUXRXZWJLaXQgYW5kIGlzIHRoZXJlZm9yZSB0aWVkIHRvIGEgc3BlY2lmaWMgUXRX
ZWJLaXQgcmVsZWFzZS5cbiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvcHVibGljLnByaSBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQpp
bmRleCA1ZmM1OTg1ZWJkYTViYzEzNmIyMWE5NmVhM2YzOWJhYWYwNjI4MTQzLi43YWFjZDA0MGUx
MDRhMWMyOTc3YjNiZGJmY2U2MDIzZTkyYWQ1OWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKKysrIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJh
dGl2ZS9wdWJsaWMucHJpCkBAIC0zOCw2ICszOCwxMiBAQCBTT1VSQ0VTICs9IHBsdWdpbi5jcHAK
IGJ1aWxkPyh3ZWJraXQyKTogewogICAgIERFRklORVMgKz0gSEFWRV9XRUJLSVQyCiAgICAgUVQg
Kz0gbmV0d29yaworCisgICAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NQRUxMQ0hFQ0s9MSkg
eworICAgICAgICBjb25maWdfbGliZW5jaGFudCB7CisgICAgICAgICAgICBERUZJTkVTICs9IFdU
Rl9VU0VfTElCRU5DSEFOVD0xCisgICAgICAgIH0KKyAgICB9CiB9CiAKICMgVGhlIGZhbGxiYWNr
IHRvIFFUX0lOU1RBTExfSU1QT1JUUyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpp
bmRleCA2YzQwOGE3MDM3YmMzOThmMmI2ZTU5NzI4OTg5ODg5MzQyYmFiMmE2Li5jOWE4YjBiZWJi
ZjkxNWFkYjM4OTIxMzY4OTZkNTkzZmVjYThmYzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTgxNCw2ICs4
MTQsNyBAQCBoYXZlPyhRVFFVSUNLKSB7CiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
bmV0d29ya3JlcXVlc3RfcC5oIFwKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxz
Y2hlbWVkZWxlZ2F0ZV9wLmggXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0
X3AuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbF9wLmggXAogICAgICAg
ICBVSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmggXAogICAgICAg
ICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyLmggXApAQCAtODQ5LDYgKzg1MCw3IEBAIGhhdmU/KFFUUVVJQ0sp
IHsKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdC5jcHAgXAog
ICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcCBcCiAg
ICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcCBcCisgICAgICAgIFVJ
UHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJraXR0ZXN0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50UXQuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0RGlhbG9nUnVubmVy
LmNwcCBcCkBAIC04NzcsNiArODc5LDE0IEBAIGhhdmU/KFFUUVVJQ0spIHsKICAgICAgICAgU09V
UkNFUyArPSBcCiAgICAgICAgICAgICBVSVByb2Nlc3MvcXQvV2ViQ29sb3JDaG9vc2VyUHJveHlR
dC5jcHAKICAgICB9CisKKyAgICBlbmFibGU/KFNQRUxMQ0hFQ0spIHsKKyAgICAgICAgICAgIEhF
QURFUlMgKz0gXAorICAgICAgICAgICAgICAgIFVJUHJvY2Vzcy9xdC9RdFRleHRDaGVja2VyLmgK
KyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgIFVJUHJvY2Vzcy9xdC9R
dFRleHRDaGVja2VyLmNwcAorICAgICAgICAgICAgUEtHQ09ORklHICs9IGVuY2hhbnQKKyAgICB9
CiB9CiAKIG1hYzogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xd2ViZ2xvYmFsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmds
b2JhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWM5MjZlNTI2OWMwOGJlODMyY2UzOWQ4MTZhNWNiMzYyYjM0
NzdkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXdlYmdsb2JhbC5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInF3ZWJn
bG9iYWxfcC5oIgorCisjaW5jbHVkZSAiUXRUZXh0Q2hlY2tlci5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCitRV2ViR2xvYmFsOjpRV2ViR2xvYmFsKCkKK3sKK30KKworUVdlYkdsb2Jh
bCogUVdlYkdsb2JhbDo6aW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBRV2ViR2xvYmFsKiBzX2lu
c3RhbmNlID0gMDsKKyAgICBpZiAoIXNfaW5zdGFuY2UpCisgICAgICAgIHNfaW5zdGFuY2UgPSBu
ZXcgUVdlYkdsb2JhbCgpOworCisgICAgcmV0dXJuIHNfaW5zdGFuY2U7Cit9CisKK2Jvb2wgUVdl
Ykdsb2JhbDo6dGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICByZXR1cm4gUXRUZXh0Q2hlY2tlcjo6aW5zdGFuY2UoKS0+ZW5hYmxlZCgpOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBRV2ViR2xvYmFsOjpz
ZXRUZXh0Q2hlY2tlckVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIFF0VGV4dENoZWNrZXI6Omluc3RhbmNlKCktPnNldEVuYWJsZWQoZW5hYmxlZCk7
CisgICAgZW1pdCB0ZXh0Q2hlY2tlckVuYWJsZWRDaGFuZ2VkKCk7CisjZW5kaWYKK30KKwordm9p
ZCBRV2ViR2xvYmFsOjpzZXRUZXh0Q2hlY2tlckxhbmd1YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5n
PiAmbGFuZ3VhZ2VzKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFF0VGV4dENoZWNr
ZXI6Omluc3RhbmNlKCktPnNldExhbmd1YWdlcyhsYW5ndWFnZXMpOworICAgIGVtaXQgdGV4dENo
ZWNrZXJMYW5ndWFnZXNDaGFuZ2VkKCk7CisjZW5kaWYKK30KKworUUxpc3Q8UVN0cmluZz4gUVdl
Ykdsb2JhbDo6dGV4dENoZWNrZXJMYW5ndWFnZXMoKSBjb25zdAoreworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIHJldHVybiBRdFRleHRDaGVja2VyOjppbnN0YW5jZSgpLT5sYW5ndWFnZXMo
KTsKKyNlbHNlCisgICAgcmV0dXJuIFFMaXN0PFFTdHJpbmc+KCk7CisjZW5kaWYKK30KKworUUxp
c3Q8UVN0cmluZz4gUVdlYkdsb2JhbDo6dGV4dENoZWNrZXJBdmFpbGFibGVMYW5ndWFnZXMoKSBj
b25zdAoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBRdFRleHRDaGVja2Vy
OjppbnN0YW5jZSgpLT5hdmFpbGFibGVMYW5ndWFnZXMoKTsKKyNlbHNlCisgICAgcmV0dXJuIFFM
aXN0PFFTdHJpbmc+KCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJnbG9iYWxfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNTRjZTE3NzM4OGY3M2NhYzY5ZGVl
ODRhOThhMWNkMDgzZDljYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F3ZWJnbG9iYWxfcC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHF3ZWJnbG9iYWxfcF9oCisj
ZGVmaW5lIHF3ZWJnbG9iYWxfcF9oCisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisKKyNp
bmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYkdsb2Jh
bCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoYm9vbCB0
ZXh0Q2hlY2tlckVuYWJsZWQgUkVBRCB0ZXh0Q2hlY2tlckVuYWJsZWQgV1JJVEUgc2V0VGV4dENo
ZWNrZXJFbmFibGVkIE5PVElGWSB0ZXh0Q2hlY2tlckVuYWJsZWRDaGFuZ2VkKQorICAgIFFfUFJP
UEVSVFkoUUxpc3Q8UVN0cmluZz4gdGV4dENoZWNrZXJMYW5ndWFnZXMgUkVBRCB0ZXh0Q2hlY2tl
ckxhbmd1YWdlcyBXUklURSBzZXRUZXh0Q2hlY2tlckxhbmd1YWdlcyk7CisgICAgUV9QUk9QRVJU
WShRTGlzdDxRU3RyaW5nPiB0ZXh0Q2hlY2tlckF2YWlsYWJsZUxhbmd1YWdlcyBSRUFEIHRleHRD
aGVja2VyQXZhaWxhYmxlTGFuZ3VhZ2VzKTsKKworcHVibGljOgorICAgIHN0YXRpYyBRV2ViR2xv
YmFsKiBpbnN0YW5jZSgpOworICAgIGJvb2wgdGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRUZXh0Q2hlY2tlckVuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VGV4dENoZWNrZXJMYW5ndWFnZXMoY29uc3QgUUxpc3Q8UVN0cmluZz4mIGxhbmd1
YWdlcyk7CisgICAgdmlydHVhbCBRTGlzdDxRU3RyaW5nPiB0ZXh0Q2hlY2tlckxhbmd1YWdlcygp
IGNvbnN0OworICAgIHZpcnR1YWwgUUxpc3Q8UVN0cmluZz4gdGV4dENoZWNrZXJBdmFpbGFibGVM
YW5ndWFnZXMoKSBjb25zdDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgdGV4dENoZWNrZXJFbmFi
bGVkQ2hhbmdlZCgpOworICAgIHZvaWQgdGV4dENoZWNrZXJMYW5ndWFnZXNDaGFuZ2VkKCk7CisK
K3ByaXZhdGU6CisgICAgZXhwbGljaXQgUVdlYkdsb2JhbCgpOworfTsKKworI2VuZGlmIC8vIHF3
ZWJnbG9iYWxfcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRU
ZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUZXh0Q2hlY2tl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODNhNmNjNjliOGQwNThlMzY0ZDdlMDhhODRkNTFmYjIxZGI0N2Qy
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRleHRD
aGVja2VyLmNwcApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlF0VGV4dENo
ZWNrZXIuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIK
KyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisj
aW5jbHVkZSAiV0tTdHJpbmdRdC5oIgorI2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitRdFRleHRDaGVja2VyKiBRdFRleHRDaGVja2VyOjppbnN0YW5j
ZSgpCit7CisgICAgc3RhdGljIFF0VGV4dENoZWNrZXIqIHNfaW5zdGFuY2UgPSAwOworICAgIGlm
ICghc19pbnN0YW5jZSkKKyAgICAgICAgc19pbnN0YW5jZSA9IG5ldyBRdFRleHRDaGVja2VyKCk7
CisKKyAgICByZXR1cm4gc19pbnN0YW5jZTsKK30KKworUXRUZXh0Q2hlY2tlcjo6UXRUZXh0Q2hl
Y2tlcigpCisgICAgOiBtX2VuYWJsZWQodHJ1ZSkKKyAgICAsIG1fdGV4dENoZWNrZXIoV2ViQ29y
ZTo6VGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKSkKK3sKKyAgICBtX3RleHRDaGVja2VyLT51
cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKFZlY3RvcjxTdHJpbmc+KCkpOworICAgIHNldFdL
KCk7Cit9CisKK2Jvb2wgUXRUZXh0Q2hlY2tlcjo6ZW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZW5hYmxlZDsKK30KKwordm9pZCBRdFRleHRDaGVja2VyOjpzZXRFbmFibGVkKGJvb2wg
ZW5hYmxlKQoreworICAgIGlmIChtX2VuYWJsZWQgPT0gZW5hYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2VuYWJsZWQgPSBlbmFibGU7CisgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOworfQorCit2b2lkIFF0VGV4
dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGlu
dCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50JiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBt
X3RleHRDaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3RyaW5nLCBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK1FWZWN0b3I8UVN0cmluZz4gUXRUZXh0
Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgUVN0cmluZyYgd29yZCkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gbV90ZXh0Q2hlY2tlci0+Z2V0R3Vlc3Nlc0ZvcldvcmQo
d29yZCk7CisgICAgUVZlY3RvcjxRU3RyaW5nPiByZXN1bHQ7CisgICAgaWYgKCFndWVzc2VzLmlz
RW1wdHkoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGd1ZXNzZXMuc2l6ZSgp
OyBpKyspCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGd1ZXNzZXNbaV0pOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFF0VGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25z
dCBRU3RyaW5nJiB3b3JkKQoreworICAgIG1fdGV4dENoZWNrZXItPmxlYXJuV29yZCh3b3JkKTsK
K30KKwordm9pZCBRdFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQp
Cit7CisgICAgbV90ZXh0Q2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsKK30KKwordm9pZCBRdFRl
eHRDaGVja2VyOjpzZXRMYW5ndWFnZXMoY29uc3QgUUxpc3Q8UVN0cmluZz4mIGxhbmd1YWdlcykK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXNWZWN0b3I7CisgICAgZm9yZWFjaCAoY29u
c3QgUVN0cmluZyYgc3BlbGxDaGVja2luZ0xhbmd1YWdlLCBsYW5ndWFnZXMpCisgICAgICAgIGxh
bmd1YWdlc1ZlY3Rvci5hcHBlbmQoc3BlbGxDaGVja2luZ0xhbmd1YWdlKTsKKworICAgIG1fdGV4
dENoZWNrZXItPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMobGFuZ3VhZ2VzVmVjdG9yKTsK
K30KKworUUxpc3Q8UVN0cmluZz4gUXRUZXh0Q2hlY2tlcjo6bGFuZ3VhZ2VzKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBtX3RleHRDaGVja2VyLT5sb2FkZWRTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgUUxpc3Q8UVN0cmluZz4gcmVzdWx0OworICAgIGlm
ICghbGFuZ3VhZ2VzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxhbmd1YWdlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGFuZ3Vh
Z2VzW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUUxpc3Q8UVN0cmluZz4g
UXRUZXh0Q2hlY2tlcjo6YXZhaWxhYmxlTGFuZ3VhZ2VzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8
U3RyaW5nPiBsYW5ndWFnZXMgPSBtX3RleHRDaGVja2VyLT5hdmFpbGFibGVTcGVsbENoZWNraW5n
TGFuZ3VhZ2VzKCk7CisgICAgUUxpc3Q8UVN0cmluZz4gcmVzdWx0OworICAgIGlmICghbGFuZ3Vh
Z2VzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhbmd1YWdl
cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGFuZ3VhZ2VzW2ldKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBRdFRleHRDaGVj
a2VyKiB0b1RleHRDaGVja2VyKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFF0VGV4dENoZWNrZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSk7Cit9CisKK3N0YXRpYyBib29sIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxi
YWNrKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHRvVGV4dENoZWNrZXIo
Y2xpZW50SW5mbyktPmVuYWJsZWQoKTsKK30KKworc3RhdGljIGJvb2wgY29udGludW91c1NwZWxs
Q2hlY2tpbmdBbGxvd2VkQ2FsbGJhY2soY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkQ2FsbGJhY2soYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPnNldEVuYWJsZWQoZW5hYmxlZCk7Cit9CisK
K3N0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZ0NhbGxiYWNrKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCog
bWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgdG9UZXh0
Q2hlY2tlcihjbGllbnRJbmZvKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKFdlYktpdDo6dG9JbXBs
KHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0
aCk7Cit9CisKK3N0YXRpYyBXS0FycmF5UmVmIGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2sodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IFFWZWN0b3I8UVN0cmluZz4gZ3Vlc3NlcyA9IHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmdl
dEd1ZXNzZXNGb3JXb3JkKFdlYktpdDo6dG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7CisgICAgaWYg
KGd1ZXNzZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdLTXV0YWJsZUFy
cmF5UmVmIHdrU3VnZ2VzdGlvbnMgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOworICAgIGZvcmVh
Y2ggKGNvbnN0IFFTdHJpbmcmIGd1ZXNzLCBndWVzc2VzKSB7CisgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB3a1N1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoUVN0
cmluZyhndWVzcykpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbSh3a1N1Z2dlc3Rpb25zLCB3
a1N1Z2dlc3Rpb24uZ2V0KCkpOworICAgIH0KKworICAgIHJldHVybiB3a1N1Z2dlc3Rpb25zOwor
fQorCitzdGF0aWMgdm9pZCBsZWFybldvcmRDYWxsYmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5n
UmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgdG9UZXh0Q2hlY2tlcihj
bGllbnRJbmZvKS0+bGVhcm5Xb3JkKFdlYktpdDo6dG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGlnbm9yZVdvcmRDYWxsYmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5n
UmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgdG9UZXh0Q2hlY2tlcihj
bGllbnRJbmZvKS0+aWdub3JlV29yZChXZWJLaXQ6OnRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOwor
fQorCisKK3ZvaWQgUXRUZXh0Q2hlY2tlcjo6c2V0V0soKQoreworICAgIFdLVGV4dENoZWNrZXJD
bGllbnQgdGV4dENoZWNrZXJDbGllbnQ7CisgICAgbWVtc2V0KCZ0ZXh0Q2hlY2tlckNsaWVudCwg
MCwgc2l6ZW9mKFdLVGV4dENoZWNrZXJDbGllbnQpKTsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC52
ZXJzaW9uID0ga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICB0ZXh0Q2hl
Y2tlckNsaWVudC5jbGllbnRJbmZvID0gdGhpczsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5jb250
aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQgPSBjb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93
ZWRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPSBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjazsKKyAgICB0
ZXh0Q2hlY2tlckNsaWVudC5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBzZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjazsKKyAgICB0ZXh0Q2hlY2tlckNs
aWVudC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcgPSBjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFj
azsKKyAgICB0ZXh0Q2hlY2tlckNsaWVudC5ndWVzc2VzRm9yV29yZCA9IGd1ZXNzZXNGb3JXb3Jk
Q2FsbGJhY2s7CisgICAgdGV4dENoZWNrZXJDbGllbnQubGVhcm5Xb3JkID0gbGVhcm5Xb3JkQ2Fs
bGJhY2s7CisgICAgdGV4dENoZWNrZXJDbGllbnQuaWdub3JlV29yZCA9IGlnbm9yZVdvcmRDYWxs
YmFjazsKKworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVja2VyQ2xpZW50KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0VGV4dENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmIwYjk2YjIxNWZmODg0YjU3NGEwMDFmMjI3
ODUzNmY1ZDk2NTQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIFF0VGV4dENoZWNr
ZXJfaAorI2RlZmluZSBRdFRleHRDaGVja2VyX2gKKworI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0
PgorI2luY2x1ZGUgPFF0Q29yZS9RU2V0PgorI2luY2x1ZGUgPFF0Q29yZS9RU3RyaW5nPgorI2lu
Y2x1ZGUgPFF0Q29yZS9RVmVjdG9yPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJFbmNo
YW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgUXRUZXh0Q2hlY2tlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFF0VGV4dENoZWNrZXIq
IGluc3RhbmNlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNv
bnN0IFFTdHJpbmcmLCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdM
ZW5ndGgpOworICAgIHZpcnR1YWwgUVZlY3RvcjxRU3RyaW5nPiBnZXRHdWVzc2VzRm9yV29yZChj
b25zdCBRU3RyaW5nJiB3b3JkKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFFT
dHJpbmcmIHdvcmQpOworICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkKGNvbnN0IFFTdHJpbmcm
IHdvcmQpOworCisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFuZ3VhZ2VzKGNv
bnN0IFFMaXN0PFFTdHJpbmc+Jik7CisgICAgdmlydHVhbCBRTGlzdDxRU3RyaW5nPiBsYW5ndWFn
ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFMaXN0PFFTdHJpbmc+IGF2YWlsYWJsZUxhbmd1YWdl
cygpIGNvbnN0OworCitwcml2YXRlOgorICAgIFF0VGV4dENoZWNrZXIoKTsKKyAgICB2b2lkIHNl
dFdLKCk7CisKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGV4dENo
ZWNrZXJFbmNoYW50PiBtX3RleHRDaGVja2VyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBRdFRleHRDaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViQ29udGV4dC5jcHAKaW5kZXggZmFhY2E5MWIyZmU4NmFhNTMzY2NhZjI2Y2JjMDVj
ODYxYzk1ZGQyMS4uNzUyMWVlYWNmNjFiYWEwMDM3NTUwZDQ3YmI2NjNjMTYyY2RkMTgyMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAKQEAgLTIyLDYg
KzIyLDkgQEAKICNpbmNsdWRlICJRdFdlYkNvbnRleHQuaCIKIAogI2luY2x1ZGUgIlF0RG93bmxv
YWRNYW5hZ2VyLmgiCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiUXRUZXh0Q2hl
Y2tlci5oIgorI2VuZGlmCiAjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNp
bmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCkBAIC03MSw2ICs3
NCwxMyBAQCBzdGF0aWMgdm9pZCBpbml0SW5zcGVjdG9yU2VydmVyKCkKICNlbmRpZgogfQogCitz
dGF0aWMgdm9pZCBpbml0VGV4dENoZWNrZXIoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
ICAgIFF0VGV4dENoZWNrZXI6Omluc3RhbmNlKCktPnNldEVuYWJsZWQodHJ1ZSk7CisjZW5kaWYK
K30KKwogc3RhdGljIHZvaWQgZ2xvYmFsSW5pdGlhbGl6YXRpb24oKQogewogICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVkID0gZmFsc2U7CkBAIC03OCw2ICs4OCw3IEBAIHN0YXRpYyB2b2lkIGds
b2JhbEluaXRpYWxpemF0aW9uKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5pdEluc3BlY3Rv
clNlcnZlcigpOworICAgIGluaXRUZXh0Q2hlY2tlcigpOwogICAgIGluaXRpYWxpemVkID0gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RleHRDaGVj
a2VyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3Bw
CmluZGV4IDRhMzMxODQwNWFkNWVjOGNlNjM2MzM0ZjdkODBlNTA4YWFlNjhhOTIuLjNmMzY1ODNi
ZjQ0MDBmM2Q2MDYzNGQ0ZDU4MWY4NjdjODE5ZWFkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJUZXh0Q2hlY2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5o
IgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAKQEAgLTM3LDkzICszNywxMDMgQEAgc3Rh
dGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNr
ZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIAorICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOworICAgIGlm
IChkaWRJbml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwor
CisgICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsK
KyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9ICBjbGllbnQu
Z3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOworCisgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1
ZTsKKwogICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwogfQogCiBib29sIFRleHRDaGVja2Vy
Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKIH0KIAog
dm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wg
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJD
aGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQg
PT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgdGV4dENo
ZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQ7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CiB9CiAKIHZvaWQgVGV4
dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRl
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKIH0KIAogdm9pZCBU
ZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKLWludDY0X3QgVGV4dENoZWNrZXI6
OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KikKK2ludDY0X3QgVGV4dENoZWNr
ZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2Vy
OjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKIH0KIAot
dm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KQordm9p
ZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh0YWcpOwogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJf
dCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQz
Ml90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3Bl
bGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50
VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxp
bmdMZW5ndGgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhp
bnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRl
dGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1t
YXJPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1
aW50MzJfdCBsZW5ndGgsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRl
dGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxl
bmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3Ry
aW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJh
ZEdyYW1tYXJMZW5ndGgpOwogfQogCiBib29sIFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93
aW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93
aW5nKCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmco
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CiB9CiAKLXZvaWQgVGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxl
ZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRX
b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9j
dW1lbnRUYWcsIG1pc3NwZWxsZWRXb3JkKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IEdyYW1tYXJEZXRhaWwmKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBiYWRH
cmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgYmFk
R3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6Omdl
dEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3
b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKIH0K
IAotdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2
b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3Jk
KTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9jdW1l
bnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVsbERvY3Vt
ZW50VGFnLCB3b3JkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjFmMzFjMGYxOTVlNDU1OGRj
M2ZlYWNlZThkOWQ4YzA4NzZhODA0Yy4uMjlhZDRmYmNjMTRjNTc4M2YwNTBmMDM0OWZlMjEyMGMz
Y2I1ODIzZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTAxLTIyICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVu
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3BlbGwgY2hlY2tpbmcgc3Vw
cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1
MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5h
YmxlIHNwZWxsY2hlY2sgYnkgZGVmYXVsdCwgYW5kIGJ1aWxkIEVuY2hhbnQgZGVmYXVsdCBiYWNr
ZW5kCisgICAgICAgIGlmIEVuY2hhbnQgaXMgYXZhaWxhYmxlLiBBbHNvIGFkZGVkIGEgY29uZmln
IHRlc3QgZm9yIGxpYmVuY2hhbnQuCisKKyAgICAgICAgKiBxbWFrZS9jb25maWcudGVzdHMvbGli
ZW5jaGFudC9saWJlbmNoYW50LmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAg
KiBxbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LnBybzogQWRkZWQuCisg
ICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmY6CisgICAgICAgICog
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmk6CisKIDIwMTMtMDEtMjEgIEd1c3Rh
dm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAo
cjE0MDI4NSk6IEdUSyB1c2VzIFdLUGFnZVJlc291cmNlTG9hZENsaWVudCB3aGljaCB3YXMgcmVt
b3ZlZApkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYmVuY2hhbnQvbGli
ZW5jaGFudC5jcHAgYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNo
YW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZTFjMmU0ZTliMjNlNTAxOWJkNDBmNTg1MTdiZjQ3ZTIwODY3
M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYmVuY2hh
bnQvbGliZW5jaGFudC5jcHAKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8ZW5jaGFudC5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCwgY2hhcioqKQoreworICAgIGVuY2hh
bnRfZ2V0X3ZlcnNpb24oKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
cW1ha2UvY29uZmlnLnRlc3RzL2xpYmVuY2hhbnQvbGliZW5jaGFudC5wcm8gYi9Ub29scy9xbWFr
ZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LnBybwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTg4
YjFhNDY1MzNjYWRkYzg4YzQyYWViYmZmYTQ1ODNjNTI0OTQ4Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYmVuY2hhbnQvbGliZW5jaGFudC5wcm8KQEAgLTAs
MCArMSw0IEBACitDT05GSUcgLT0gcXQKK1NPVVJDRVMgPSBsaWJlbmNoYW50LmNwcAorQ09ORklH
ICs9IGxpbmtfcGtnY29uZmlnCitQS0dDT05GSUcgKz0gZW5jaGFudApkaWZmIC0tZ2l0IGEvVG9v
bHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgppbmRleCBjYzkwNzJkZDliYTNhMTIwN2IxOTZlM2Iw
NzMzYjliNDYxODdlOWNmLi41NjVkNjkxOGYyYjA0ZDUyNWE0MGY0MzIxNzU4OTE3OTU0N2ZjODcz
IDEwMDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgor
KysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtNTAsNiAr
NTAsMTAgQEAgZGVmaW5lVGVzdChkZXRlY3RGZWF0dXJlcykgewogICAgIGNvbnRhaW5zKFFUX0NP
TkZJRywgc3lzdGVtLXBuZyk6IFdFQktJVF9DT05GSUcgKz0gdXNlX2xpYnBuZwogICAgIGVsc2U6
IENPTkZJR1VSRV9XQVJOSU5HUyArPSAiUE5HIGxpYnJhcnkgbm90IGZvdW5kLCBRSW1hZ2VEZWNv
ZGVyIHdpbGwgZGVjb2RlIFBORyBpbWFnZXMiCiAKKyAgICBlbmFibGU/KHNwZWxsY2hlY2spIHsK
KyAgICAgICAgY29uZmlnX2xpYmVuY2hhbnQ6IFdFQktJVF9DT05GSUcgKz0gdXNlX2xpYmVuY2hh
bnQKKyAgICB9CisKICAgICBsaW51eC0qIHsKICAgICAgICAgY29uZmlnX2xpYlhjb21wb3NpdGU6
IFdFQktJVF9DT05GSUcgKz0gaGF2ZV94Y29tcG9zaXRlCiAgICAgICAgIGNvbmZpZ19saWJYcmVu
ZGVyOiBXRUJLSVRfQ09ORklHICs9IGhhdmVfeHJlbmRlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmkgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2Zl
YXR1cmVzL2ZlYXR1cmVzLnByaQppbmRleCBlM2U0MDhiZWRhYmU5YWE1YWU1ZDQzYWI4MmQ5YmM3
YmE4ZDFhYjcwLi5iNzNlYmFlMDI2YWI1NjU1YTExZjllMjYxYjdiYzA5ODE0MGM5MDcyIDEwMDY0
NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByaQorKysgYi9U
b29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByaQpAQCAtOTcsNiArOTcsNyBA
QCBGRUFUVVJFX0RFRkFVTFRTID0gXAogICAgIEVOQUJMRV9TSEFET1dfRE9NPTAgXAogICAgIEVO
QUJMRV9TSEFSRURfV09SS0VSUz0xIFwKICAgICBFTkFCTEVfU01PT1RIX1NDUk9MTElORz0xIFwK
KyAgICBFTkFCTEVfU1BFTExDSEVDSz0wIFwKICAgICBFTkFCTEVfU1FMX0RBVEFCQVNFPTEgXAog
ICAgIEVOQUJMRV9TVFlMRV9TQ09QRUQ9MCBcCiAgICAgRU5BQkxFX1NWRz0xIFwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183983</attachid>
            <date>2013-01-22 07:19:29 -0800</date>
            <delta_ts>2013-02-25 10:59:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105034-20130122161623.patch</filename>
            <type>text/plain</type>
            <size>29237</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ5NjMzYjZkYWY5YjRi
OGE3MjZmYWY3MWMyMmYyNjFmN2NiYjBkYi4uZjIzMTIyODJiNDMyYjRkMDE1ZDRmZDI5ZDQ3MzJh
YjRhMTRjNDIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTIyICBKb3PD
qSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBB
ZGQgc3BlbGwgY2hlY2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIFRleHRDaGVja2VyRW5j
aGFudCBmb3IgUXQgV2ViS2l0LgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLnByaToKKwogMjAxMy0wMS0yMSAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxp
YS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cGFyZW50
VGFibGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA2NDdkYmFiODQ5MTZhZDVmOWEyMmE3MTZhMTlhMGJi
YTU4ZmI4MThhLi40YTQ0NGM1ODMwYjdmMTRkNzRhNGRhZGEyMjEyOTU5ZTcxODZiNDAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAxLTIyICBKb3PDqSBEYXBlbmEgUGF6
ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3BlbGwgY2hl
Y2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlIFFXZWJHbG9iYWwgb24gUU1MIHBsdWdpbi4KKworICAgICAgICAqIGRlY2xh
cmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3Bs
dWdpbi5jcHA6CisgICAgICAgICogZGVjbGFyYXRpdmUvcHVibGljLnByaToKKwogMjAxMy0wMS0y
MSAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAg
ICAgICBbUXRdW1dLMV0gUGVybWlzc2lvbiByZXF1ZXN0IGNhbGxiYWNrcyBmb3Igbm9uLWxlZ2Fj
eSBub3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTEwZDQ4NWVkMjRiMGUxZGU1MWQ1MTM2MTU0
NWY1MzdhOWNiNDZiMC4uZDU0NmQ5NTVhOWUxNTk5ZTY1Y2EyZmM5NThlN2VhMDkyZWZmNDZhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTAxLTIyICBKb3PDqSBEYXBlbmEgUGF6
ICA8amRhcGVuYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgc3BlbGwgY2hl
Y2tpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BlbGxjaGVjayBzdXBwb3J0IGZvciBRdCBXZWJLaXQyLgorCisgICAgICAgIFF0VGV4
dENoZWNrZXIgb2JqZWN0IGltcGxlbWVudHMgdGhlIFdLVGV4dENoZWNrZXJDbGllbnQgaW50ZXJm
YWNlCisgICAgICAgIHVzaW5nIFRleHRDaGVja2VyRW5jaGFudCBpbiBXZWJDb3JlLgorCisgICAg
ICAgIEFkZGVkIHdlYmtpdCBwcm9wZXJ0eSwgZm9yIGFjY2Vzc2luZyB0aGUgb2JqZWN0cyBzaGFy
ZWQgYW1vbmcKKyAgICAgICAgYWxsIHdlYiB2aWV3cy4gVGhpcyBpcyBmb3IgZXhwb3NpbmcgYW5k
IGFsbG93aW5nIHRvIGNoYW5nZQorICAgICAgICB0aGUgY3VycmVudCB0ZXh0IGNoZWNrZXIgc3Rh
dHVzLiBUaGlzIGlzIGEgZ2xvYmFsIGFzIFdlYktpdCBob2xkcworICAgICAgICBpbnRlcm5hbGx5
IGEgZ2xvYmFsIGZvciBlbmFibGVkIHRleHQgY2hlY2tlciB0b28uCisKKyAgICAgICAgKiBUYXJn
ZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbC5jcHA6IEFkZGVk
LgorICAgICAgICAoUVdlYkdsb2JhbDo6UVdlYkdsb2JhbCk6CisgICAgICAgIChRV2ViR2xvYmFs
OjppbnN0YW5jZSk6CisgICAgICAgIChRV2ViR2xvYmFsOjp0ZXh0Q2hlY2tlckVuYWJsZWQpOgor
ICAgICAgICAoUVdlYkdsb2JhbDo6c2V0VGV4dENoZWNrZXJFbmFibGVkKToKKyAgICAgICAgKFFX
ZWJHbG9iYWw6OnNldFRleHRDaGVja2VyTGFuZ3VhZ2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJnbG9iYWxfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJ0ZXh0Y2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXdlYnRleHRjaGVja2VyX3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
d2VidGV4dGNoZWNrZXJlbmNoYW50LmNwcDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xd2VidGV4dGNoZWNrZXJlbmNoYW50X3BfcC5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3Vt
ZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2lu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpn
ZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpsZWFybldv
cmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdub3JlV29yZCk6CisKIDIwMTMt
MDEtMjEgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAg
UkVHUkVTU0lPTiAocjE0MDI4NSk6IEdUSyB1c2VzIFdLUGFnZVJlc291cmNlTG9hZENsaWVudCB3
aGljaCB3YXMgcmVtb3ZlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMDljY2E4MGJhNjI0MjI0MjRhZGZhYjAw
YmJlYWJmNjE5ZjQxYjgxOC4uNzBiZTJhYmExN2Q3YzM2MjhlNDE5NzM1NTZiNjg3MTI5NWQ0YmMw
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCkBAIC00MTE2LDYgKzQxMTYsMTEgQEAgdXNlPyhXRUJQKSB7CiAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwCiB9CiAKK2VuYWJsZT8oU1BFTExDSEVDSykgeworICAgIEhFQURFUlMgKz0gcGxhdGZvcm0v
dGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorfQorCiAhaGF2ZT8oc3FsaXRl
Myk6ZXhpc3RzKCQke1NRTElURTNTUkNESVJ9L3NxbGl0ZTMuYykgewogICAgICMgQnVpbGQgc3Fs
aXRlMyBpbnRvIFdlYkNvcmUgZnJvbSBzb3VyY2UKICAgICAjIHNvbWV3aGF0IGNvcGllZCBmcm9t
ICQkUVRfU09VUkNFX1RSRUUvc3JjL3BsdWdpbnMvc3FsZHJpdmVycy9zcWxpdGUvc3FsaXRlLnBy
bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnByaQppbmRleCA2ZTE1NTY4ZmI4NTZkYmVmMWM5MjE0ZTEwYzJlNWIwMzlhOTE0
NmY1Li4zZGZiNzQwMWJiZjgxMjRlMzM5MjEzZmQ0MDNkYzZlZmQ3ZGI1Mzc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnByaQpAQCAtMjU0LDYgKzI1NCw5IEBAIGhhdmU/KHNxbGl0ZTMpIHsKICAgICAgICAgTElCUyAr
PSAtbHNxbGl0ZTMKICAgICB9CiB9CitlbmFibGU/KFNQRUxMQ0hFQ0spIHsKKyAgICBQS0dDT05G
SUcgKz0gZW5jaGFudAorfQogCiB1c2U/KGxpYmpwZWcpOiBMSUJTICs9IC1sanBlZwogdXNlPyhs
aWJwbmcpOiBMSUJTICs9IC1scG5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xh
cmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJh
dGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcAppbmRleCBlNmZmZWRhNmViMGE1MGJhNDJmMmZm
NGUwNjk5MDJlNGJhYmE1NTYwLi5jYmNmM2YxYzU5NjZjZTQxYmQwYThkMWIzMDM3Njg5N2I4MTdl
ZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRh
bC9wbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVu
dGFsL3BsdWdpbi5jcHAKQEAgLTI1LDEyICsyNSwxNSBAQAogI2luY2x1ZGUgInByaXZhdGUvcXF1
aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9xdHdlYnNlY3VyaXR5b3JpZ2luX3Au
aCIKICNpbmNsdWRlICJwcml2YXRlL3F3ZWJkb3dubG9hZGl0ZW1fcC5oIgorI2luY2x1ZGUgInBy
aXZhdGUvcXdlYmdsb2JhbF9wLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9xd2Via2l0dGVzdF9wLmgi
CiAjaW5jbHVkZSAicHJpdmF0ZS9xd2VibmF2aWdhdGlvbmhpc3RvcnlfcC5oIgogI2luY2x1ZGUg
InByaXZhdGUvcXdlYnBlcm1pc3Npb25yZXF1ZXN0X3AuaCIKICNpbmNsdWRlICJwcml2YXRlL3F3
ZWJwcmVmZXJlbmNlc19wLmgiCiAKICNpbmNsdWRlIDxRdFFtbC9xcW1sLmg+CisjaW5jbHVkZSA8
UXRRbWwvcXFtbGNvbnRleHQuaD4KKyNpbmNsdWRlIDxRdFFtbC9xcW1sZW5naW5lLmg+CiAjaW5j
bHVkZSA8UXRRbWwvcXFtbGV4dGVuc2lvbnBsdWdpbi5oPgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UK
QEAgLTQ3LDYgKzUwLDE1IEBAIGNsYXNzIFdlYktpdFFtbEV4cGVyaW1lbnRhbEV4dGVuc2lvblBs
dWdpbjogcHVibGljIFFRbWxFeHRlbnNpb25QbHVnaW4gewogICAgIFFfT0JKRUNUCiAgICAgUV9Q
TFVHSU5fTUVUQURBVEEoSUlEICJvcmcucXQtcHJvamVjdC5RdC5RUW1sRXh0ZW5zaW9uSW50ZXJm
YWNlIiBGSUxFICJwbHVnaW4uanNvbiIpCiBwdWJsaWM6CisKKyNpZiBkZWZpbmVkKEhBVkVfV0VC
S0lUMikKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUVuZ2luZShRUW1sRW5naW5lKiBlbmdp
bmUsIGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJp
bmcodXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdlYktpdC5leHBlcmltZW50YWwiKSk7CisgICAg
ICAgIGVuZ2luZS0+cm9vdENvbnRleHQoKS0+c2V0Q29udGV4dFByb3BlcnR5KFFMYXRpbjFTdHJp
bmcoIndlYmtpdCIpLCBRV2ViR2xvYmFsOjppbnN0YW5jZSgpKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclR5cGVzKGNvbnN0IGNoYXIqIHVyaSkKICAgICB7CiAg
ICAgICAgIHFXYXJuaW5nKCJcbldBUk5JTkc6IFRoaXMgcHJvamVjdCBpcyB1c2luZyB0aGUgZXhw
ZXJpbWVudGFsIFFNTCBBUEkgZXh0ZW5zaW9ucyBmb3IgUXRXZWJLaXQgYW5kIGlzIHRoZXJlZm9y
ZSB0aWVkIHRvIGEgc3BlY2lmaWMgUXRXZWJLaXQgcmVsZWFzZS5cbiIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4
IDZjNDA4YTcwMzdiYzM5OGYyYjZlNTk3Mjg5ODk4ODkzNDJiYWIyYTYuLmM5YThiMGJlYmJmOTE1
YWRiMzg5MjEzNjg5NmQ1OTNmZWNhOGZjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Rh
cmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtODE0LDYgKzgxNCw3
IEBAIGhhdmU/KFFUUVVJQ0spIHsKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3
b3JrcmVxdWVzdF9wLmggXAogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVt
ZWRlbGVnYXRlX3AuaCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmtpdHRlc3RfcC5o
IFwKKyAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2ViZ2xvYmFsX3AuaCBcCiAgICAgICAgIFVJ
UHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQuaCBcCiAgICAgICAgIFVJ
UHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuaCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VFdmVudEhhbmRsZXIuaCBcCkBAIC04NDksNiArODUwLDcgQEAgaGF2ZT8oUVRRVUlDSykgewog
ICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0LmNwcCBcCiAgICAg
ICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUuY3BwIFwKICAgICAg
ICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwIFwKKyAgICAgICAgVUlQcm9j
ZXNzL0FQSS9xdC9xd2ViZ2xvYmFsLmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdl
YmtpdHRlc3QuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRRdC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXREaWFsb2dSdW5uZXIuY3Bw
IFwKQEAgLTg3Nyw2ICs4NzksMTQgQEAgaGF2ZT8oUVRRVUlDSykgewogICAgICAgICBTT1VSQ0VT
ICs9IFwKICAgICAgICAgICAgIFVJUHJvY2Vzcy9xdC9XZWJDb2xvckNob29zZXJQcm94eVF0LmNw
cAogICAgIH0KKworICAgIGVuYWJsZT8oU1BFTExDSEVDSykgeworICAgICAgICAgICAgSEVBREVS
UyArPSBcCisgICAgICAgICAgICAgICAgVUlQcm9jZXNzL3F0L1F0VGV4dENoZWNrZXIuaAorICAg
ICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAgICAgVUlQcm9jZXNzL3F0L1F0VGV4
dENoZWNrZXIuY3BwCisgICAgICAgICAgICBQS0dDT05GSUcgKz0gZW5jaGFudAorICAgIH0KIH0K
IAogbWFjOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3
ZWJnbG9iYWwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZ2xvYmFs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMGFmZjY3ZDk3NWQ1ZTczMGJhOWE0M2RkZGUyMjhkOTVhODU0Yzdm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Vi
Z2xvYmFsLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXdlYmdsb2Jh
bF9wLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJRdFRleHRDaGVja2Vy
LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKyNlbmRpZgorCitRV2ViR2xvYmFsOjpRV2ViR2xvYmFsKCkKK3sKK30KKworUVdlYkds
b2JhbCogUVdlYkdsb2JhbDo6aW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBRV2ViR2xvYmFsKiBz
X2luc3RhbmNlID0gMDsKKyAgICBpZiAoIXNfaW5zdGFuY2UpCisgICAgICAgIHNfaW5zdGFuY2Ug
PSBuZXcgUVdlYkdsb2JhbCgpOworCisgICAgcmV0dXJuIHNfaW5zdGFuY2U7Cit9CisKK2Jvb2wg
UVdlYkdsb2JhbDo6dGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICByZXR1cm4gUXRUZXh0Q2hlY2tlcjo6aW5zdGFuY2UoKS0+ZW5hYmxlZCgp
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBRV2ViR2xvYmFs
OjpzZXRUZXh0Q2hlY2tlckVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIFF0VGV4dENoZWNrZXI6Omluc3RhbmNlKCktPnNldEVuYWJsZWQoZW5hYmxl
ZCk7CisgICAgZW1pdCB0ZXh0Q2hlY2tlckVuYWJsZWRDaGFuZ2VkKCk7CisjZW5kaWYKK30KKwor
dm9pZCBRV2ViR2xvYmFsOjpzZXRUZXh0Q2hlY2tlckxhbmd1YWdlcyhjb25zdCBRTGlzdDxRU3Ry
aW5nPiAmbGFuZ3VhZ2VzKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFF0VGV4dENo
ZWNrZXI6Omluc3RhbmNlKCktPnNldExhbmd1YWdlcyhsYW5ndWFnZXMpOworICAgIGVtaXQgdGV4
dENoZWNrZXJMYW5ndWFnZXNDaGFuZ2VkKCk7CisjZW5kaWYKK30KKworUUxpc3Q8UVN0cmluZz4g
UVdlYkdsb2JhbDo6dGV4dENoZWNrZXJMYW5ndWFnZXMoKSBjb25zdAoreworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIHJldHVybiBRdFRleHRDaGVja2VyOjppbnN0YW5jZSgpLT5sYW5ndWFn
ZXMoKTsKKyNlbHNlCisgICAgcmV0dXJuIFFMaXN0PFFTdHJpbmc+KCk7CisjZW5kaWYKK30KKwor
UUxpc3Q8UVN0cmluZz4gUVdlYkdsb2JhbDo6dGV4dENoZWNrZXJBdmFpbGFibGVMYW5ndWFnZXMo
KSBjb25zdAoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBRdFRleHRDaGVj
a2VyOjppbnN0YW5jZSgpLT5hdmFpbGFibGVMYW5ndWFnZXMoKTsKKyNlbHNlCisgICAgcmV0dXJu
IFFMaXN0PFFTdHJpbmc+KCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmdsb2JhbF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F3ZWJnbG9iYWxfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNTRjZTE3NzM4OGY3M2NhYzY5
ZGVlODRhOThhMWNkMDgzZDljYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F3ZWJnbG9iYWxfcC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHF3ZWJnbG9iYWxfcF9o
CisjZGVmaW5lIHF3ZWJnbG9iYWxfcF9oCisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisK
KyNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYkds
b2JhbCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoYm9v
bCB0ZXh0Q2hlY2tlckVuYWJsZWQgUkVBRCB0ZXh0Q2hlY2tlckVuYWJsZWQgV1JJVEUgc2V0VGV4
dENoZWNrZXJFbmFibGVkIE5PVElGWSB0ZXh0Q2hlY2tlckVuYWJsZWRDaGFuZ2VkKQorICAgIFFf
UFJPUEVSVFkoUUxpc3Q8UVN0cmluZz4gdGV4dENoZWNrZXJMYW5ndWFnZXMgUkVBRCB0ZXh0Q2hl
Y2tlckxhbmd1YWdlcyBXUklURSBzZXRUZXh0Q2hlY2tlckxhbmd1YWdlcyk7CisgICAgUV9QUk9Q
RVJUWShRTGlzdDxRU3RyaW5nPiB0ZXh0Q2hlY2tlckF2YWlsYWJsZUxhbmd1YWdlcyBSRUFEIHRl
eHRDaGVja2VyQXZhaWxhYmxlTGFuZ3VhZ2VzKTsKKworcHVibGljOgorICAgIHN0YXRpYyBRV2Vi
R2xvYmFsKiBpbnN0YW5jZSgpOworICAgIGJvb2wgdGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRUZXh0Q2hlY2tlckVuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VGV4dENoZWNrZXJMYW5ndWFnZXMoY29uc3QgUUxpc3Q8UVN0cmluZz4mIGxh
bmd1YWdlcyk7CisgICAgdmlydHVhbCBRTGlzdDxRU3RyaW5nPiB0ZXh0Q2hlY2tlckxhbmd1YWdl
cygpIGNvbnN0OworICAgIHZpcnR1YWwgUUxpc3Q8UVN0cmluZz4gdGV4dENoZWNrZXJBdmFpbGFi
bGVMYW5ndWFnZXMoKSBjb25zdDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgdGV4dENoZWNrZXJF
bmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgdGV4dENoZWNrZXJMYW5ndWFnZXNDaGFuZ2VkKCk7
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUVdlYkdsb2JhbCgpOworfTsKKworI2VuZGlmIC8v
IHF3ZWJnbG9iYWxfcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUZXh0Q2hl
Y2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjk3YjNiMzU0Y2FiNzUxZDhhODBmZWMwY2I3ZDNlMjBhY2Ux
OTlhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRl
eHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlF0VGV4
dENoZWNrZXIuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXku
aCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgi
CisjaW5jbHVkZSAiV0tTdHJpbmdRdC5oIgorI2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyRW5jaGFudC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1F0VGV4dENoZWNrZXIqIFF0VGV4dENoZWNrZXI6Omluc3RhbmNlKCkKK3sKKyAgICBz
dGF0aWMgUXRUZXh0Q2hlY2tlciogc19pbnN0YW5jZSA9IDA7CisgICAgaWYgKCFzX2luc3RhbmNl
KQorICAgICAgICBzX2luc3RhbmNlID0gbmV3IFF0VGV4dENoZWNrZXIoKTsKKworICAgIHJldHVy
biBzX2luc3RhbmNlOworfQorCitRdFRleHRDaGVja2VyOjpRdFRleHRDaGVja2VyKCkKKyAgICA6
IG1fZW5hYmxlZCh0cnVlKQorICAgICwgbV90ZXh0Q2hlY2tlcihXZWJDb3JlOjpUZXh0Q2hlY2tl
ckVuY2hhbnQ6OmNyZWF0ZSgpKQoreworICAgIG1fdGV4dENoZWNrZXItPnVwZGF0ZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoVmVjdG9yPFN0cmluZz4oKSk7CisgICAgc2V0V0soKTsKK30KKworYm9v
bCBRdFRleHRDaGVja2VyOjplbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lbmFibGVk
OworfQorCit2b2lkIFF0VGV4dENoZWNrZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGUpCit7Cisg
ICAgaWYgKG1fZW5hYmxlZCA9PSBlbmFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZW5h
YmxlZCA9IGVuYWJsZTsKKyAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7Cit9CisKK3ZvaWQgUXRUZXh0Q2hlY2tlcjo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGlu
Z0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKQoreworICAgIG1fdGV4dENoZWNrZXIt
PmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzdHJpbmcsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKK30KKworUVZlY3RvcjxRU3RyaW5nPiBRdFRleHRDaGVja2VyOjpnZXRH
dWVzc2VzRm9yV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKQoreworICAgIFZlY3RvcjxTdHJpbmc+
IGd1ZXNzZXMgPSBtX3RleHRDaGVja2VyLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkKTsKKyAgICBR
VmVjdG9yPFFTdHJpbmc+IHJlc3VsdDsKKyAgICBpZiAoIWd1ZXNzZXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3Vlc3Nlcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoZ3Vlc3Nlc1tpXSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgUXRUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGNvbnN0IFFTdHJpbmcmIHdv
cmQpCit7CisgICAgbV90ZXh0Q2hlY2tlci0+bGVhcm5Xb3JkKHdvcmQpOworfQorCit2b2lkIFF0
VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYgd29yZCkKK3sKKyAgICBtX3Rl
eHRDaGVja2VyLT5pZ25vcmVXb3JkKHdvcmQpOworfQorCit2b2lkIFF0VGV4dENoZWNrZXI6OnNl
dExhbmd1YWdlcyhjb25zdCBRTGlzdDxRU3RyaW5nPiYgbGFuZ3VhZ2VzKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IGxhbmd1YWdlc1ZlY3RvcjsKKyAgICBmb3JlYWNoIChjb25zdCBRU3RyaW5nJiBz
cGVsbENoZWNraW5nTGFuZ3VhZ2UsIGxhbmd1YWdlcykKKyAgICAgICAgbGFuZ3VhZ2VzVmVjdG9y
LmFwcGVuZChzcGVsbENoZWNraW5nTGFuZ3VhZ2UpOworCisgICAgbV90ZXh0Q2hlY2tlci0+dXBk
YXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXNWZWN0b3IpOworfQorCitRTGlzdDxR
U3RyaW5nPiBRdFRleHRDaGVja2VyOjpsYW5ndWFnZXMoKSBjb25zdAoreworICAgIFZlY3RvcjxT
dHJpbmc+IGxhbmd1YWdlcyA9IG1fdGV4dENoZWNrZXItPmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKTsKKyAgICBRTGlzdDxRU3RyaW5nPiByZXN1bHQ7CisgICAgaWYgKCFsYW5ndWFnZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFuZ3VhZ2VzLnNp
emUoKTsgaSsrKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsYW5ndWFnZXNbaV0pOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitRTGlzdDxRU3RyaW5nPiBRdFRleHRDaGVja2Vy
OjphdmFpbGFibGVMYW5ndWFnZXMoKSBjb25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1
YWdlcyA9IG1fdGV4dENoZWNrZXItPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsK
KyAgICBRTGlzdDxRU3RyaW5nPiByZXN1bHQ7CisgICAgaWYgKCFsYW5ndWFnZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFuZ3VhZ2VzLnNpemUoKTsgaSsr
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsYW5ndWFnZXNbaV0pOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIFF0VGV4dENoZWNrZXIqIHRvVGV4dENo
ZWNrZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UXRUZXh0Q2hlY2tlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKK30KKworc3Rh
dGljIGJvb2wgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2soY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4gdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+
ZW5hYmxlZCgpOworfQorCitzdGF0aWMgYm9vbCBjb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93
ZWRDYWxsYmFjayhjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgdm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFj
ayhib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgdG9UZXh0Q2hl
Y2tlcihjbGllbnRJbmZvKS0+c2V0RW5hYmxlZChlbmFibGVkKTsKK30KKworc3RhdGljIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2sodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0
ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b1RleHRDaGVja2VyKGNsaWVu
dEluZm8pLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoV2ViS2l0Ojp0b0ltcGwodGV4dCktPnN0cmlu
ZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworc3Rh
dGljIFdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmRDYWxsYmFjayh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgUVZlY3RvcjxRU3Ry
aW5nPiBndWVzc2VzID0gdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+Z2V0R3Vlc3Nlc0Zvcldv
cmQoV2ViS2l0Ojp0b0ltcGwod29yZCktPnN0cmluZygpKTsKKyAgICBpZiAoZ3Vlc3Nlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgV0tNdXRhYmxlQXJyYXlSZWYgd2tTdWdn
ZXN0aW9ucyA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisgICAgZm9yZWFjaCAoY29uc3QgUVN0
cmluZyYgZ3Vlc3MsIGd1ZXNzZXMpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHdrU3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhRU3RyaW5nKGd1ZXNzKSk7
CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrU3VnZ2VzdGlvbnMsIHdrU3VnZ2VzdGlvbi5n
ZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHdrU3VnZ2VzdGlvbnM7Cit9CisKK3N0YXRpYyB2
b2lkIGxlYXJuV29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5s
ZWFybldvcmQoV2ViS2l0Ojp0b0ltcGwod29yZCktPnN0cmluZygpKTsKK30KKworc3RhdGljIHZv
aWQgaWdub3JlV29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5p
Z25vcmVXb3JkKFdlYktpdDo6dG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKKwordm9pZCBR
dFRleHRDaGVja2VyOjpzZXRXSygpCit7CisgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB0ZXh0Q2hl
Y2tlckNsaWVudDsKKyAgICBtZW1zZXQoJnRleHRDaGVja2VyQ2xpZW50LCAwLCBzaXplb2YoV0tU
ZXh0Q2hlY2tlckNsaWVudCkpOworICAgIHRleHRDaGVja2VyQ2xpZW50LnZlcnNpb24gPSBrV0tU
ZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uOworICAgIHRleHRDaGVja2VyQ2xpZW50LmNs
aWVudEluZm8gPSB0aGlzOworICAgIHRleHRDaGVja2VyQ2xpZW50LmNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZCA9IGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZENhbGxiYWNrOwor
ICAgIHRleHRDaGVja2VyQ2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGNv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrOworICAgIHRleHRDaGVja2VyQ2xp
ZW50LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHNldENvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZENhbGxiYWNrOworICAgIHRleHRDaGVja2VyQ2xpZW50LmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyA9IGNoZWNrU3BlbGxpbmdPZlN0cmluZ0NhbGxiYWNrOworICAgIHRleHRD
aGVja2VyQ2xpZW50Lmd1ZXNzZXNGb3JXb3JkID0gZ3Vlc3Nlc0ZvcldvcmRDYWxsYmFjazsKKyAg
ICB0ZXh0Q2hlY2tlckNsaWVudC5sZWFybldvcmQgPSBsZWFybldvcmRDYWxsYmFjazsKKyAgICB0
ZXh0Q2hlY2tlckNsaWVudC5pZ25vcmVXb3JkID0gaWdub3JlV29yZENhbGxiYWNrOworCisgICAg
V0tUZXh0Q2hlY2tlclNldENsaWVudCgmdGV4dENoZWNrZXJDbGllbnQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUZXh0Q2hlY2tl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZiYzM5MTMxNjk1ZWE0ZDFjMTVjMDA3NTc2MmZlZDNjNTkyOTNlODIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUZXh0Q2hl
Y2tlci5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgUXRUZXh0Q2hlY2tlcl9oCisjZGVmaW5l
IFF0VGV4dENoZWNrZXJfaAorCisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVkZSA8
UXRDb3JlL1FTZXQ+CisjaW5jbHVkZSA8UXRDb3JlL1FTdHJpbmc+CisjaW5jbHVkZSA8UXRDb3Jl
L1FWZWN0b3I+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBUZXh0Q2hlY2tlckVuY2hhbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBRdFRleHRDaGVja2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUXRUZXh0Q2hlY2tlciog
aW5zdGFuY2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29u
c3QgUVN0cmluZyYsIGludCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50JiBtaXNzcGVsbGluZ0xl
bmd0aCk7CisgICAgdmlydHVhbCBRVmVjdG9yPFFTdHJpbmc+IGdldEd1ZXNzZXNGb3JXb3JkKGNv
bnN0IFFTdHJpbmcmIHdvcmQpOworICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgUVN0
cmluZyYgd29yZCk7CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYg
d29yZCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYW5ndWFnZXMoY29u
c3QgUUxpc3Q8UVN0cmluZz4mKTsKKyAgICB2aXJ0dWFsIFFMaXN0PFFTdHJpbmc+IGxhbmd1YWdl
cygpIGNvbnN0OworICAgIHZpcnR1YWwgUUxpc3Q8UVN0cmluZz4gYXZhaWxhYmxlTGFuZ3VhZ2Vz
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUXRUZXh0Q2hlY2tlcigpOworICAgIHZvaWQgc2V0
V0soKTsKKworICAgIGJvb2wgbV9lbmFibGVkOworICAgIE93blB0cjxXZWJDb3JlOjpUZXh0Q2hl
Y2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFF0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJDb250ZXh0LmNwcAppbmRleCBmYWFjYTkxYjJmZTg2YWE1MzNjY2FmMjZjYmMwNWM4
NjFjOTVkZDIxLi43NTIxZWVhY2Y2MWJhYTAwMzc1NTBkNDdiYjY2M2MxNjJjZGQxODIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcApAQCAtMjIsNiAr
MjIsOSBAQAogI2luY2x1ZGUgIlF0V2ViQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiUXREb3dubG9h
ZE1hbmFnZXIuaCIKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJRdFRleHRDaGVj
a2VyLmgiCisjZW5kaWYKICNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKQEAgLTcxLDYgKzc0
LDEzIEBAIHN0YXRpYyB2b2lkIGluaXRJbnNwZWN0b3JTZXJ2ZXIoKQogI2VuZGlmCiB9CiAKK3N0
YXRpYyB2b2lkIGluaXRUZXh0Q2hlY2tlcigpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisg
ICAgUXRUZXh0Q2hlY2tlcjo6aW5zdGFuY2UoKS0+c2V0RW5hYmxlZCh0cnVlKTsKKyNlbmRpZgor
fQorCiBzdGF0aWMgdm9pZCBnbG9iYWxJbml0aWFsaXphdGlvbigpCiB7CiAgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKQEAgLTc4LDYgKzg4LDcgQEAgc3RhdGljIHZvaWQgZ2xv
YmFsSW5pdGlhbGl6YXRpb24oKQogICAgICAgICByZXR1cm47CiAKICAgICBpbml0SW5zcGVjdG9y
U2VydmVyKCk7CisgICAgaW5pdFRleHRDaGVja2VyKCk7CiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNr
ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAK
aW5kZXggNGEzMzE4NDA1YWQ1ZWM4Y2U2MzYzMzRmN2Q4MGU1MDhhYWU2OGE5Mi4uM2YzNjU4M2Jm
NDQwMGYzZDYwNjM0ZDRkNTgxZjg2N2M4MTllYWQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9UZXh0Q2hlY2tlclF0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
IlRleHRDaGVja2VyLmgiCiAKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogIApAQCAtMzcsOTMgKzM3LDEwMyBAQCBzdGF0
aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tl
clN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgCisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVN0YXRlID0gZmFsc2U7CisgICAgaWYg
KGRpZEluaXRpYWxpemVTdGF0ZSkKKyAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisK
KyAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwor
ICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gIGNsaWVudC5n
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVl
OworCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6
OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwogfQogCiB2
b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgdGV4
dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNo
ZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9
PSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZDsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJD
aGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0
Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUu
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB2b2lkIFRl
eHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKIH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6
dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKQoraW50NjRfdCBUZXh0Q2hlY2tl
cjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOwogfQogCi12
b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpCit2b2lk
IFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKLXZvaWQgVGV4dENoZWNr
ZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90
LCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMy
X3QgbGVuZ3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVs
bGluZ0xlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2Vy
OjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRU
YWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGlu
Z0xlbmd0aCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGlu
dDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1h
ck9mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVp
bnQzMl90IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0
YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVu
Z3RoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJp
bmcodGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFk
R3JhbW1hckxlbmd0aCk7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dp
bmcoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dp
bmcoKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBT
dHJpbmcmKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdv
cmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1
bWVudFRhZywgbWlzc3BlbGxlZFdvcmQpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
R3JhbW1hckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdy
YW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRH
cmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0
R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdv
cmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwogfQog
Ci12b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3Zv
aWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFN0cmluZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQp
OwogfQogCiB2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1l
bnRUYWcsIHdvcmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMWYzMWMwZjE5NWU0NTU4ZGMz
ZmVhY2VlOGQ5ZDhjMDg3NmE4MDRjLi4yOWFkNGZiY2MxNGM1NzgzZjA1MGYwMzQ5ZmUyMTIwYzNj
YjU4MjNlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMDEtMjIgIEpvc8OpIERhcGVuYSBQYXogIDxqZGFwZW5h
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIEFkZCBzcGVsbCBjaGVja2luZyBzdXBw
b3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUw
MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFi
bGUgc3BlbGxjaGVjayBieSBkZWZhdWx0LCBhbmQgYnVpbGQgRW5jaGFudCBkZWZhdWx0IGJhY2tl
bmQKKyAgICAgICAgaWYgRW5jaGFudCBpcyBhdmFpbGFibGUuIEFsc28gYWRkZWQgYSBjb25maWcg
dGVzdCBmb3IgbGliZW5jaGFudC4KKworICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJl
bmNoYW50L2xpYmVuY2hhbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IHFtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvOiBBZGRlZC4KKyAg
ICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoKKyAgICAgICAgKiBx
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByaToKKwogMjAxMy0wMS0yMSAgR3VzdGF2
byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
MTQwMjg1KTogR1RLIHVzZXMgV0tQYWdlUmVzb3VyY2VMb2FkQ2xpZW50IHdoaWNoIHdhcyByZW1v
dmVkCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJl
bmNoYW50LmNwcCBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hh
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdlMWMyZTRlOWIyM2U1MDE5YmQ0MGY1ODUxN2JmNDdlMjA4Njcz
YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFu
dC9saWJlbmNoYW50LmNwcApAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxlbmNoYW50Lmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgICAgZW5jaGFu
dF9nZXRfdmVyc2lvbigpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9x
bWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LnBybyBiL1Rvb2xzL3FtYWtl
L2NvbmZpZy50ZXN0cy9saWJlbmNoYW50L2xpYmVuY2hhbnQucHJvCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1ODhi
MWE0NjUzM2NhZGRjODhjNDJhZWJiZmZhNDU4M2M1MjQ5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9xbWFrZS9jb25maWcudGVzdHMvbGliZW5jaGFudC9saWJlbmNoYW50LnBybwpAQCAtMCww
ICsxLDQgQEAKK0NPTkZJRyAtPSBxdAorU09VUkNFUyA9IGxpYmVuY2hhbnQuY3BwCitDT05GSUcg
Kz0gbGlua19wa2djb25maWcKK1BLR0NPTkZJRyArPSBlbmNoYW50CmRpZmYgLS1naXQgYS9Ub29s
cy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByaSBiL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCmluZGV4IGUzZTQwOGJlZGFiZTlhYTVhZTVkNDNhYjgy
ZDliYzdiYThkMWFiNzAuLmI3M2ViYWUwMjZhYjU2NTVhMTFmOWUyNjFiN2JjMDk4MTQwYzkwNzIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCisr
KyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCkBAIC05Nyw2ICs5
Nyw3IEBAIEZFQVRVUkVfREVGQVVMVFMgPSBcCiAgICAgRU5BQkxFX1NIQURPV19ET009MCBcCiAg
ICAgRU5BQkxFX1NIQVJFRF9XT1JLRVJTPTEgXAogICAgIEVOQUJMRV9TTU9PVEhfU0NST0xMSU5H
PTEgXAorICAgIEVOQUJMRV9TUEVMTENIRUNLPTAgXAogICAgIEVOQUJMRV9TUUxfREFUQUJBU0U9
MSBcCiAgICAgRU5BQkxFX1NUWUxFX1NDT1BFRD0wIFwKICAgICBFTkFCTEVfU1ZHPTEgXAo=
</data>
<flag name="review"
          id="202569"
          type_id="1"
          status="-"
          setter="jturcotte"
    />
          </attachment>
      

    </bug>

</bugzilla>