<?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>70545</bug_id>
          
          <creation_ts>2011-10-20 14:02:54 -0700</creation_ts>
          <short_desc>[Qt] Implement message exchange between WebView and the web page</short_desc>
          <delta_ts>2011-11-02 10:49:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>71279</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Caio Marcelo de Oliveira Filho">cmarcelo</reporter>
          <assigned_to name="Caio Marcelo de Oliveira Filho">cmarcelo</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>s.mathur</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>487862</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-20 14:02:54 -0700</bug_when>
    <thetext>[Qt] Implement message exchange between WebView and the web page</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487865</commentid>
    <comment_count>1</comment_count>
      <attachid>111845</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-20 14:05:07 -0700</bug_when>
    <thetext>Created attachment 111845
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487882</commentid>
    <comment_count>2</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-20 14:18:36 -0700</bug_when>
    <thetext>This is the implementation of the &quot;P1&quot;, the first half of my proposal sent to the mailing list. See https://lists.webkit.org/pipermail/webkit-qt/2011-October/001953.html. It&apos;s not ready yet, but I think it&apos;s good for getting some review.

What&apos;s missing:
- A preference setting for this. It should be disabled by default.

What I would like input:
- Should I split the infrastructure for QtBundle in another patch?

- I did use the existing IPC messages for communication with the InjectedBundle, we could add ifdefs and add our own messages. I decided to go with the messaging on top of the bundle to avoid cluttering the WebKit multi-platform code and to learn more about it. I think both ways work, do you guys have strong opinions towards one of them (use the existing IPC calls vs. creating my own)?

- I did not implement Event dispatching, instead we call the function registered. I think we can start like this, and add Event dispatch later. I don&apos;t see it as essential. Noam, what do you think?

(Added some people to CC that answered on the original mail sent to the ML)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488033</commentid>
    <comment_count>3</comment_count>
      <attachid>111845</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-20 17:38:23 -0700</bug_when>
    <thetext>Comment on attachment 111845
Patch

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

Good start!
Commented mainly on the HTML API;
I&apos;d need someone else to review the usage of WebKit2, injected bundles and such.

&gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/messaging.html:6
&gt; +        QtWebKit.onmessage = function(contents) {

I&apos;d rather have the web API&apos;s payload to be a JS object that looks like MessageEvent, even if it&apos;s not a &quot;true&quot; MessageEvent.
This is important for security later on, to make sure the web container doesn&apos;t accept messages from untrusted sources etc.
something like:
incoming: {
  data: contents,
  origin: &quot;navigator://&quot;
  source: window.navigator
};

outgoing: {
   data: contents,
   origin: &quot;http://actualWebView...&quot;
}

&gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/messaging.html:8
&gt; +            QtWebKit.postMessage(reversed);

I&apos;d rather use window.navigator.Qt, or window.navigator.QtWebKit.
navigator is the closest element to represent the container (&quot;browser&quot;).

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:287
&gt; +    if (WKStringIsEqualToUTF8CString(messageName, &quot;MessageFromQtWebKitObject&quot;)) {

Early return?

&gt; Source/WebKit2/WebProcess/qt/QtBundle.cpp:98
&gt; +    if (WKStringIsEqualToUTF8CString(messageName, &quot;MessageToQtWebKitObject&quot;)) {

Early return?

&gt; Source/WebKit2/WebProcess/qt/QtBundlePage.cpp:79
&gt; +    if (m_qtWebKitObject) {

Early return</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488300</commentid>
    <comment_count>4</comment_count>
      <attachid>111845</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-21 03:57:59 -0700</bug_when>
    <thetext>Comment on attachment 111845
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/messaging.html:8
&gt;&gt; +            QtWebKit.postMessage(reversed);
&gt; 
&gt; I&apos;d rather use window.navigator.Qt, or window.navigator.QtWebKit.
&gt; navigator is the closest element to represent the container (&quot;browser&quot;).

I&apos;m not sure this needs Qt branding. Anyway, if we did wouldn&apos;t window.navigator.QtQuick make more sense?

Maybe window.navigator.qtRuntime / qtBridge?

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:2222
&gt; +void WebPageProxy::didReceiveMessageFromQtWebKitObject(const String&amp; contents)

FromQtQuickRuntime?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488374</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-21 07:34:51 -0700</bug_when>
    <thetext>&gt; I&apos;m not sure this needs Qt branding. 
It&apos;s more about namespace encapsulation than branding, something like -webkit-transform.
How about window.navigator.qtHostApplication, didReceiveMessageFromQtHostApplication (?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488945</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-22 11:03:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; I&apos;m not sure this needs Qt branding. 
&gt; It&apos;s more about namespace encapsulation than branding, something like -webkit-transform.
&gt; How about window.navigator.qtHostApplication, didReceiveMessageFromQtHostApplication (?)

Sure, but I don&apos;t think qtHostApplication is a nice name either :-) what about qtDeclarativeRuntime ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488980</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-22 18:23:15 -0700</bug_when>
    <thetext>&gt; Sure, but I don&apos;t think qtHostApplication is a nice name either :-) what about qtDeclarativeRuntime ?

I&apos;m not a fan of adding &quot;Quick&quot; or &quot;Declarative&quot; when it&apos;s superfluous; As far as the web developer is concerned, they want to pass a message to the Qt (&quot;host&quot;) part of the application... whether that part is declarative, imperative, written with JavaScript or with C++ is, in a way, an implementation detail.

Can we compromise on window.navigator.qtRuntime (?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489030</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-23 08:56:37 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Sure, but I don&apos;t think qtHostApplication is a nice name either :-) what about qtDeclarativeRuntime ?
&gt; 
&gt; I&apos;m not a fan of adding &quot;Quick&quot; or &quot;Declarative&quot; when it&apos;s superfluous; As far as the web developer is concerned, they want to pass a message to the Qt (&quot;host&quot;) part of the application... whether that part is declarative, imperative, written with JavaScript or with C++ is, in a way, an implementation detail.
&gt; 
&gt; Can we compromise on window.navigator.qtRuntime (?)

Yeah sure. qtRuntime is fine with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492483</commentid>
    <comment_count>9</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-28 09:22:32 -0700</bug_when>
    <thetext>Thanks for review. Other comments in the bug are fixed already locally, just a couple of questions...

(In reply to comment #3)
&gt; I&apos;d rather have the web API&apos;s payload to be a JS object that looks like MessageEvent, even if it&apos;s not a &quot;true&quot; MessageEvent.
&gt; This is important for security later on, to make sure the web container doesn&apos;t accept messages from untrusted sources etc.
&gt; something like:
&gt; incoming: {
&gt;   data: contents,
&gt;   origin: &quot;navigator://&quot;
&gt;   source: window.navigator
&gt; };

I think we could follow the approach of passing a JS object, but I don&apos;t see any real value today in filling the origin field, since it could be faked by other field (I&apos;m assuming when delivering real events we have ways to avoid this) -- and if it couldn&apos;t there&apos;s no need for safety measures. Am I missing something?

Also the source field in MessageEvents nowadays is a defined in idl as a DOMWindow. I&apos;m unsure about the use we would make of this.
 
&gt; outgoing: {
&gt;    data: contents,
&gt;    origin: &quot;http://actualWebView...&quot;
&gt; }

Ack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492494</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-28 09:37:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Thanks for review. Other comments in the bug are fixed already locally, just a couple of questions...
&gt; 
&gt; (In reply to comment #3)
&gt; &gt; I&apos;d rather have the web API&apos;s payload to be a JS object that looks like MessageEvent, even if it&apos;s not a &quot;true&quot; MessageEvent.
&gt; &gt; This is important for security later on, to make sure the web container doesn&apos;t accept messages from untrusted sources etc.
&gt; &gt; something like:
&gt; &gt; incoming: {
&gt; &gt;   data: contents,
&gt; &gt;   origin: &quot;navigator://&quot;
&gt; &gt;   source: window.navigator
&gt; &gt; };
&gt; 
&gt; I think we could follow the approach of passing a JS object, but I don&apos;t see any real value today in filling the origin field, since it could be faked by other field (I&apos;m assuming when delivering real events we have ways to avoid this) -- and if it couldn&apos;t there&apos;s no need for safety measures. Am I missing something?

I guess you&apos;re right. Still, passing a JS object that we can add meta-data to later sounds more future-proof then passing a mere string. That&apos;s more important for me right now than solving the actual security issues.


&gt; Also the source field in MessageEvents nowadays is a defined in idl as a DOMWindow. I&apos;m unsure about the use we would make of this.
&gt; 
&gt; &gt; outgoing: {
&gt; &gt;    data: contents,
&gt; &gt;    origin: &quot;http://actualWebView...&quot;
&gt; &gt; }
Yes, here we really need this since we don&apos;t want random web-sites sending events to the runtime without proper identification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493330</commentid>
    <comment_count>11</comment_count>
      <attachid>113054</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-31 08:43:01 -0700</bug_when>
    <thetext>Created attachment 113054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493400</commentid>
    <comment_count>12</comment_count>
      <attachid>113054</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-31 10:24:56 -0700</bug_when>
    <thetext>Comment on attachment 113054
Patch

I&apos;m splitting the patch in two different ones, one for the QtBundle/QtBundlePage infrastructure and the other for the messaging.

Will add the first one as a blocker for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493469</commentid>
    <comment_count>13</comment_count>
      <attachid>113054</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-31 13:32:26 -0700</bug_when>
    <thetext>Comment on attachment 113054
Patch

Attachment 113054 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10241858

New failing tests:
inspector/debugger/bind-script-to-resource.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493942</commentid>
    <comment_count>14</comment_count>
      <attachid>113177</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-11-01 09:30:18 -0700</bug_when>
    <thetext>Created attachment 113177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494025</commentid>
    <comment_count>15</comment_count>
      <attachid>113177</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-11-01 11:00:33 -0700</bug_when>
    <thetext>Comment on attachment 113177
Patch

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

Great work! A few nitpicks; It&apos;s a big patch so if anyone else wants to have a go please do.

&gt; Source/WebKit2/ChangeLog:74
&gt; +        (WebKit::createFakeMessageEvent):

How about message wrapper instead of fake event?

&gt; Source/WebKit2/UIProcess/qt/QtDesktopWebPageProxy.cpp:253
&gt; +    QVariantMap v;

variantMap instaed of v

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.h:169
&gt; +    virtual void receivedMessageFromQtRuntimeObject(const QString&amp;) { }

Is this the correct naming? Shouldn&apos;t it be didReceiveMessageFromQtRuntimeObject (?)
Kenneth would know :)

&gt; Source/WebKit2/WebProcess/qt/QtBuiltinBundle.cpp:123
&gt; +
&gt; +    } else if (WKStringIsEqualToUTF8CString(messageName, &quot;SetQtRuntimeObjectEnabled&quot;)) {

Early return.

&gt; Source/WebKit2/WebProcess/qt/QtBuiltinBundle.h:51
&gt; +    static void didReceiveMessage(WKBundleRef, WKStringRef messageName, WKTypeRef messageBody, const void*);

The word &quot;message&quot; is confusing; people can think that those are standard messages.
didReceivedMessageToQtRuntime ?

&gt; Source/WebKit2/WebProcess/qt/QtBuiltinBundlePage.cpp:82
&gt; +}
&gt; +void QtBuiltinBundlePage::didClearWindowForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleScriptWorldRef world, const void* clientInfo)

Extra lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494700</commentid>
    <comment_count>16</comment_count>
      <attachid>113329</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-11-02 10:22:29 -0700</bug_when>
    <thetext>Created attachment 113329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494711</commentid>
    <comment_count>17</comment_count>
      <attachid>113177</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-11-02 10:29:55 -0700</bug_when>
    <thetext>Comment on attachment 113177
Patch

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

Thanks for the review, Noam. Just sent a new version after IRC discussion.

&gt;&gt; Source/WebKit2/ChangeLog:74
&gt;&gt; +        (WebKit::createFakeMessageEvent):
&gt; 
&gt; How about message wrapper instead of fake event?

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtDesktopWebPageProxy.cpp:253
&gt;&gt; +    QVariantMap v;
&gt; 
&gt; variantMap instaed of v

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.h:169
&gt;&gt; +    virtual void receivedMessageFromQtRuntimeObject(const QString&amp;) { }
&gt; 
&gt; Is this the correct naming? Shouldn&apos;t it be didReceiveMessageFromQtRuntimeObject (?)
&gt; Kenneth would know :)

This was a leftover in the previous patch, sorry for the noise. QtWebPageProxy in the new patch will get a didReceiveMessageFromNavigatorQtObject() call.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtBuiltinBundle.cpp:123
&gt;&gt; +    } else if (WKStringIsEqualToUTF8CString(messageName, &quot;SetQtRuntimeObjectEnabled&quot;)) {
&gt; 
&gt; Early return.

Extracted the functions so the if/else-if pattern looks better.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtBuiltinBundle.h:51
&gt;&gt; +    static void didReceiveMessage(WKBundleRef, WKStringRef messageName, WKTypeRef messageBody, const void*);
&gt; 
&gt; The word &quot;message&quot; is confusing; people can think that those are standard messages.
&gt; didReceivedMessageToQtRuntime ?

In this case I prefer to stick with this name since is the same from WKBundleClient. And we can have other, unrelated messages here (not from navigator.qt).

&gt;&gt; Source/WebKit2/WebProcess/qt/QtBuiltinBundlePage.cpp:82
&gt;&gt; +void QtBuiltinBundlePage::didClearWindowForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleScriptWorldRef world, const void* clientInfo)
&gt; 
&gt; Extra lines.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494713</commentid>
    <comment_count>18</comment_count>
      <attachid>113329</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-11-02 10:31:03 -0700</bug_when>
    <thetext>Comment on attachment 113329
Patch

Great work! I have nothing to add or remove from this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494726</commentid>
    <comment_count>19</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-11-02 10:49:41 -0700</bug_when>
    <thetext>Committed r99077: &lt;http://trac.webkit.org/changeset/99077&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111845</attachid>
            <date>2011-10-20 14:05:07 -0700</date>
            <delta_ts>2011-10-31 08:42:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70545-20111020180531.patch</filename>
            <type>text/plain</type>
            <size>40531</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgwMTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5Mzk0ODZlMzFkZmQ2NTk0
MWQ0NmJjNDVjMWUzZThjMDRhM2NkMzg4Li5kNGY3NjYxZjRmNDg0YTBiNGYwYWJjNjI3OTRhMDY4
ZTFhOWQzZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTYgQEAKKzIwMTEtMTAtMjAgIENhaW8g
TWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
KworICAgICAgICBbUXRdIEltcGxlbWVudCBtZXNzYWdlIGV4Y2hhbmdlIGJldHdlZW4gV2ViVmll
dyBhbmQgdGhlIHdlYiBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MDU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZHMgYSBtZWNoYW5pc20gZm9yIHRoZSBXZWJWaWV3IHRvIHNlbmQgbWVzc2Fn
ZXMgdG8gdGhlIEphdmFTY3JpcHQgZW52aXJvbm1lbnQKKyAgICAgICAgb2YgdGhlIHdlYiBwYWdl
LiBJbiB0aGUgV2ViVmlldyB3ZSBoYXZlIGEgbWV0aG9kIHBvc3RNZXNzYWdlKCkgYW5kIGEgc2ln
bmFsCisgICAgICAgIG1lc3NhZ2VSZWNlaXZlZCgpLCB3aGlsZSBpbiB0aGUgd2ViIHBhZ2Ugd2Ug
ZXhwb3NlIGEgUXRXZWJLaXQgb2JqZWN0IHdpdGggYQorICAgICAgICBwb3N0TWVzc2FnZSgpIG1l
dGhvZCBhbmQgYSBvbm1lc3NhZ2UgcHJvcGVydHkuIFRoZSBtZXNzYWdlcyBhcmUgc3RyaW5ncy4K
KworICAgICAgICBUbyBhY2hpZXZlIHRoaXMgd2UgbWFrZSB1c2Ugb2YgdGhlIEluamVjdGVkQnVu
ZGxlIGZ1bmN0aW9uYWxpdHksIHRoYXQgd2FzCisgICAgICAgIHByZXZpb3VzbHkgdW51c2VkIGlu
IFF0V2ViS2l0IGV4Y2VwdCBmb3IgdGhlIFdlYktpdFRlc3RSdW5uZXIuIEJ5IGhvb2tpbmcgYW4K
KyAgICAgICAgaW5qZWN0ZWQgYnVuZGxlIHdlIGdldCBhIGhvb2sgdG8gZGlkQ2xlYXJXaW5kb3dG
b3JGcmFtZSgpIHdpdGhvdXQgY2hhbmdpbmcKKyAgICAgICAgV2ViRnJhbWVMb2FkZXJDbGllbnQg
YW5kIHdlIGFsc28gZ2V0IHRoZSBtZXNzYWdpbmcgbWVjaGFuaXNtIGZvciBJbmplY3RlZEJ1bmRs
ZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHA6Cisg
ICAgICAgIChRRGVza3RvcFdlYlZpZXc6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oOgorICAgICAgICBBUEkgaXMgY3VycmVudGx5IGV4
cG9zZWQgb25seSBpbiBRRGVza3RvcFdlYlZpZXcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmRlZmF1bHRXS0Nv
bnRleHQpOiBSZWdpc3RlciBhIGluamVjdGVkIGJ1bmRsZSBjbGllbnQuIFdlIGRvIGl0CisgICAg
ICAgIGF0IHRoaXMgcG9pbnQgYmVjYXVzZSBpdCBpcyBhIHBlciBjb250ZXh0IGNsaWVudCwgbm90
IHBlciBwYWdlLgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OnBvc3RNZXNzYWdlVG9RdFdlYktp
dE9iamVjdCk6IENvbnN0cnVjdCBhbmQgc2VuZCBhIG1lc3NhZ2UgdG8KKyAgICAgICAgdGhlIFdl
YlByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKHF0X3drX2RpZFJlY2Vp
dmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogRGVjb2RlIGFuZCBkaXNwYXRjaCBhIG1lc3Nh
Z2UgcmVjZWl2ZWQKKyAgICAgICAgZnJvbSB0aGUgV2ViUHJvY2VzcyB0byB0aGUgV2ViUGFnZVBy
b3h5LgorCisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudDo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tUXRXZWJLaXRPYmplY3QpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbVF0V2ViS2l0T2JqZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIEFkZCBhIG5ldywgUXQtb25seSwg
bWV0aG9kIGluIFBhZ2VDbGllbnQgdG8gaGFuZGxlIG1lc3NhZ2VzIGZyb20gdGhlIFF0V2ViS2l0
IG9iamVjdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAoUXRXZWJQYWdlUHJveHk6OnJlY2VpdmVkTWVzc2FnZUZyb21RdFdlYktpdE9iamVjdCk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoUXRE
ZXNrdG9wV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21RdFdlYktpdE9iamVjdCk6
IEVtaXQgdGhlIEFQSSBzaWduYWwKKyAgICAgICAgd2hlbiB3ZSBnZXQgYSBtZXNzYWdlLgorCisg
ICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
cXQvSW5qZWN0ZWRCdW5kbGVRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxl
Ojpsb2FkV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgQWRkIGEgd2F5IHRvIGxvYWQgSW5qZWN0ZWRC
dW5kbGUgZnJvbSBhIGluaXRpYWxpemUgZnVuY3Rpb24gcG9pbnRlciwgdGhpcyBhbGxvd3MgdXMK
KyAgICAgICAgdG8gaGF2ZSB0aGUgSW5qZWN0ZWRCdW5kbGUgZGVmaW5lZCBpbiB0aGUgV2ViUHJv
Y2VzcyBpdHNlbGYuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0QnVuZGxlLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvcXQvSW5qZWN0
ZWRCdW5kbGVRdC5jcHAuCisgICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlOjp0b1JlZik6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpRdEJ1bmRsZTo6flF0QnVuZGxlKToKKyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGU6OnNoYXJl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdl
YktpdDo6UXRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpRdEJ1bmRs
ZTo6d2lsbERlc3Ryb3lQYWdlKToKKyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGU6OmRpZFJlY2Vp
dmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGU6OmJ1bmRsZVBhZ2VGb3JQYWdl
UmVmKToKKyAgICAgICAgT2JqZWN0IHRoYXQgaG9sZHMgYSBXS0J1bmRsZVJlZiBhbmQga2VlcHMg
dHJhY2sgb2YgdGhlIHBhZ2VzIGluIHRoZSBjdXJyZW50CisgICAgICAgIGNvbnRleHQgYW5kIGRp
c3BhdGNoIG1lc3NhZ2VzIGZyb20gdGhlIFVJUHJvY2VzcyB0byB0aGVtLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZVBhZ2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1bmRsZVF0LmNwcC4KKyAgICAg
ICAgKFdlYktpdDo6UXRCdW5kbGVQYWdlOjpwYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0
L1F0QnVuZGxlUGFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpRdEJ1bmRsZVBhZ2U6
OlF0QnVuZGxlUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlUGFnZTo6flF0QnVuZGxl
UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OnF0X3Bvc3RNZXNzYWdlQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViS2l0OjpRdEJ1bmRsZVBhZ2U6OnBvc3RNZXNzYWdlRnJvbVF0V2ViS2l0T2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUXRXZWJL
aXRPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpRdEJ1bmRsZVBhZ2U6OnF0V2ViS2l0T2JqZWN0
Q2xhc3MpOgorICAgICAgICBPdXIgcmVwcmVzZW50YXRpb24gZm9yIHBhZ2VzIGZyb20gdGhlIGJ1
bmRsZSBwZXJzcGVjdGl2ZS4gUmVnaXN0ZXJzIGEgY2xpZW50IHRoYXQgYWxsb3dzIHVzIHRvIGhv
b2sKKyAgICAgICAgaW4gZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZSgpIGFuZCBpbml0aWFsaXplIHRo
ZSBRdFdlYktpdCBvYmplY3QuIEFsc28gY29udGFpbnMgdGhlIGJyaWRnZSBjb2RlIGZvcgorICAg
ICAgICBpbnRlcmFjdGluZyB3aXRoIHBhZ2UgSlMgZW52aXJvbm1lbnQuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnF0X3drX1dL
QnVuZGxlSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICBDaGFuZ2Ugb3VyIFdlYlByb2Nlc3MgY29k
ZSB0byBsb2FkIG91ciAiYnVpbHQtaW4iIGluamVjdGVkIGJ1bmRsZSBpZiB0aGVyZSdzIG5vIGJ1
bmRsZSB0byBiZQorICAgICAgICByZWdpc3RlcmVkLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbDogQWRk
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9jb21tb24vbWVz
c2FnaW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1s
dGVzdHMvcW1sdGVzdHMucHJvOgorICAgICAgICBBZGQgYmFzaWMgdGVzdGluZyBvZiB0aGUgZnVu
Y3Rpb25hbGl0eTogYSBtZXNzYWdlIGV4Y2hhbmdlLCBhbmQgYSBtZXNzYWdlIGV4Y2hhbmdlIHdp
dGggdHdvIFdlYlZpZXdzCisgICAgICAgIHNpbXVsdGFuZW91c2x5LgorCiAyMDExLTEwLTIwICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vOTQxMjg0OT4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MDUzNQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3Rv
cHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdl
YnZpZXcuY3BwCmluZGV4IDE4NmI5ZDdiYmMwODA4ZTgxNWU3YTBmZTQ2ZjgzYTcxOGQwODk3ODEu
LmM3NTgyZjUyMmM0OTM0ZDIwNzJkNDMwZTRjZDZjMGJhMDM2NjA2ZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAKQEAgLTI3
MSw2ICsyNzEsMTEgQEAgdm9pZCBRRGVza3RvcFdlYlZpZXc6OmxvYWQoY29uc3QgUVVybCYgdXJs
KQogICAgIGQtPnBhZ2UubG9hZCh1cmwpOwogfQogCit2b2lkIFFEZXNrdG9wV2ViVmlldzo6cG9z
dE1lc3NhZ2UoY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBkLT5wYWdlLnBvc3RNZXNz
YWdlVG9RdFdlYktpdE9iamVjdChtZXNzYWdlKTsKK30KKwogUVVybCBRRGVza3RvcFdlYlZpZXc6
OnVybCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPnBhZ2UudXJsKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuaAppbmRleCBkOTNkNWQ4
NDRlNGQyMTk1ZjVjZTdiODNiMDMyMTBlNGY1NmMwODA0Li5kMmIzMDc3OWQxOGIzY2ViYjc3NTll
MzM2ZjczYmEyODhlMmNjMGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmgKQEAgLTg1LDYgKzg1LDcgQEAgcHVibGljOgogCiBwdWJs
aWMgUV9TTE9UUzoKICAgICAgdm9pZCBsb2FkKGNvbnN0IFFVcmwmKTsKKyAgICAgdm9pZCBwb3N0
TWVzc2FnZShjb25zdCBRU3RyaW5nJik7CiAKIFFfU0lHTkFMUzoKICAgICB2b2lkIHRpdGxlQ2hh
bmdlZChjb25zdCBRU3RyaW5nJiB0aXRsZSk7CkBAIC05NSw2ICs5Niw3IEBAIFFfU0lHTkFMUzoK
ICAgICB2b2lkIGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50IHByb2dyZXNzKTsKICAgICB2b2lkIHVy
bENoYW5nZWQoY29uc3QgUVVybCYgdXJsKTsKICAgICB2b2lkIGxpbmtIb3ZlcmVkKGNvbnN0IFFV
cmwmIHVybCwgY29uc3QgUVN0cmluZyYgdGl0bGUpOworICAgIHZvaWQgbWVzc2FnZVJlY2VpdmVk
KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7CkBAIC0xMjEsNiArMTIzLDcgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBldmVudChRRXZlbnQqKTsKIAogcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgUXREZXNrdG9wV2ViUGFnZVByb3h5OwogICAgIFFEZXNrdG9wV2ViVmlldyhXS0Nv
bnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBRU0dJdGVtKiBwYXJlbnQgPSAwKTsKICAgICBXS1Bh
Z2VSZWYgcGFnZVJlZigpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9tZXNzYWdpbmcu
cW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNr
dG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTM4NjI1ZTRmZDIyYTg0
MjEzMDY2MGRhMGQ2YTllNGM4OGUxYmJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbWVz
c2FnaW5nLnFtbApAQCAtMCwwICsxLDc5IEBACitpbXBvcnQgUXRRdWljayAyLjAKK2ltcG9ydCBR
dFRlc3QgMS4wCitpbXBvcnQgUXRXZWJLaXQgMy4wCisKK0l0ZW0geworICAgIERlc2t0b3BXZWJW
aWV3IHsKKyAgICAgICAgaWQ6IHdlYlZpZXcKKyAgICAgICAgcHJvcGVydHkgc3RyaW5nIGxhc3RN
ZXNzYWdlCisgICAgICAgIG9uTWVzc2FnZVJlY2VpdmVkOiB7CisgICAgICAgICAgICBsYXN0TWVz
c2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgfQorICAgIH0KKworICAgIERlc2t0b3BXZWJWaWV3IHsK
KyAgICAgICAgaWQ6IG90aGVyV2ViVmlldworICAgICAgICBwcm9wZXJ0eSBzdHJpbmcgbGFzdE1l
c3NhZ2UKKyAgICAgICAgb25NZXNzYWdlUmVjZWl2ZWQ6IHsKKyAgICAgICAgICAgIGxhc3RNZXNz
YWdlID0gbWVzc2FnZQorICAgICAgICB9CisgICAgfQorCisgICAgU2lnbmFsU3B5IHsKKyAgICAg
ICAgaWQ6IGxvYWRTcHkKKyAgICAgICAgdGFyZ2V0OiB3ZWJWaWV3CisgICAgICAgIHNpZ25hbE5h
bWU6ICJsb2FkU3VjY2VlZGVkIgorICAgIH0KKworICAgIFNpZ25hbFNweSB7CisgICAgICAgIGlk
OiBtZXNzYWdlU3B5CisgICAgICAgIHRhcmdldDogd2ViVmlldworICAgICAgICBzaWduYWxOYW1l
OiAibWVzc2FnZVJlY2VpdmVkIgorICAgIH0KKworICAgIFNpZ25hbFNweSB7CisgICAgICAgIGlk
OiBvdGhlckxvYWRTcHkKKyAgICAgICAgdGFyZ2V0OiBvdGhlcldlYlZpZXcKKyAgICAgICAgc2ln
bmFsTmFtZTogImxvYWRTdWNjZWVkZWQiCisgICAgfQorCisgICAgU2lnbmFsU3B5IHsKKyAgICAg
ICAgaWQ6IG90aGVyTWVzc2FnZVNweQorICAgICAgICB0YXJnZXQ6IG90aGVyV2ViVmlldworICAg
ICAgICBzaWduYWxOYW1lOiAibWVzc2FnZVJlY2VpdmVkIgorICAgIH0KKworICAgIFRlc3RDYXNl
IHsKKyAgICAgICAgbmFtZTogIkRlc2t0b3BXZWJWaWV3TWVzc2FnaW5nIgorCisgICAgICAgIGZ1
bmN0aW9uIGluaXQoKSB7CisgICAgICAgICAgICBsb2FkU3B5LmNsZWFyKCkKKyAgICAgICAgICAg
IG1lc3NhZ2VTcHkuY2xlYXIoKQorICAgICAgICAgICAgd2ViVmlldy5sYXN0TWVzc2FnZSA9ICIi
CisgICAgICAgICAgICBvdGhlckxvYWRTcHkuY2xlYXIoKQorICAgICAgICAgICAgb3RoZXJNZXNz
YWdlU3B5LmNsZWFyKCkKKyAgICAgICAgICAgIG90aGVyV2ViVmlldy5sYXN0TWVzc2FnZSA9ICIi
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0X2Jhc2ljKCkgeworICAgICAgICAg
ICAgd2ViVmlldy5sb2FkKFF0LnJlc29sdmVkVXJsKCIuLi9jb21tb24vbWVzc2FnaW5nLmh0bWwi
KSkKKyAgICAgICAgICAgIGxvYWRTcHkud2FpdCgpCisgICAgICAgICAgICB3ZWJWaWV3LnBvc3RN
ZXNzYWdlKCJIRUxMTyIpCisgICAgICAgICAgICBtZXNzYWdlU3B5LndhaXQoKQorICAgICAgICAg
ICAgY29tcGFyZSh3ZWJWaWV3Lmxhc3RNZXNzYWdlLCAiT0xMRUgiKQorICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gdGVzdF90d29XZWJWaWV3cygpIHsKKyAgICAgICAgICAgIHdlYlZpZXcu
bG9hZChRdC5yZXNvbHZlZFVybCgiLi4vY29tbW9uL21lc3NhZ2luZy5odG1sIikpCisgICAgICAg
ICAgICBvdGhlcldlYlZpZXcubG9hZChRdC5yZXNvbHZlZFVybCgiLi4vY29tbW9uL21lc3NhZ2lu
Zy5odG1sIikpCisgICAgICAgICAgICBsb2FkU3B5LndhaXQoKQorICAgICAgICAgICAgb3RoZXJM
b2FkU3B5LndhaXQoKQorICAgICAgICAgICAgd2ViVmlldy5wb3N0TWVzc2FnZSgiRklSU1QiKQor
ICAgICAgICAgICAgb3RoZXJXZWJWaWV3LnBvc3RNZXNzYWdlKCJTRUNPTkQiKQorICAgICAgICAg
ICAgbWVzc2FnZVNweS53YWl0KCkKKyAgICAgICAgICAgIG90aGVyTWVzc2FnZVNweS53YWl0KCkK
KyAgICAgICAgICAgIGNvbXBhcmUod2ViVmlldy5sYXN0TWVzc2FnZSwgIlRTUklGIikKKyAgICAg
ICAgICAgIGNvbXBhcmUob3RoZXJXZWJWaWV3Lmxhc3RNZXNzYWdlLCAiRE5PQ0VTIikKKyAgICAg
ICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvdGVzdHMvcW1sdGVzdHMvY29tbW9uL21lc3NhZ2luZy5odG1sIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9jb21tb24vbWVzc2FnaW5nLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjgwZTFjMTI0NDllZWQ0ZDNkOGYxN2YyZmIxODA3OGQzM2MzMjViMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvY29tbW9uL21lc3NhZ2luZy5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhZG9jdHlwZSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHsK
KyAgICAgICAgUXRXZWJLaXQub25tZXNzYWdlID0gZnVuY3Rpb24oY29udGVudHMpIHsKKyAgICAg
ICAgICAgIHZhciByZXZlcnNlZCA9IGNvbnRlbnRzLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigi
Iik7CisgICAgICAgICAgICBRdFdlYktpdC5wb3N0TWVzc2FnZShyZXZlcnNlZCk7CisgICAgICAg
IH0KKyAgICB9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iaW5pdGlhbGl6ZSgp
OyI+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCmluZGV4IDQxZDIyYjE4
ZjY3MjExOTU4YzM2Y2QxNjBjOGJmZmUxMTA4MjY5NjYuLjUzMWUwNTAxNDRjNTYxZjcxNjc2ZDFl
YmY5MWU3NzFmY2Y5MTEyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCkBAIC0xNSw2ICsxNSw3
IEBAIE9USEVSX0ZJTEVTICs9IFwKICAgICBEZXNrdG9wV2ViVmlldy90c3RfbG9hZFByb2dyZXNz
LnFtbCBcCiAgICAgRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwgXAog
ICAgIERlc2t0b3BXZWJWaWV3L3RzdF9saW5rSG92ZXJlZC5xbWwgXAorICAgIERlc2t0b3BXZWJW
aWV3L3RzdF9tZXNzYWdpbmcucW1sIFwKICAgICBUb3VjaFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMu
cW1sIFwKICAgICBUb3VjaFdlYlZpZXcvdHN0X2xvYWQucW1sIFwKICAgICBUb3VjaFdlYlZpZXcv
dHN0X2xvYWRaZXJvU2l6ZVZpZXcucW1sIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCmluZGV4IGQxZTBjNTc3OWY5MGQ1YmNjY2ExMGEyZGY1YjIxNjI1MDU4YmRlMGMuLjNlZTAx
NzA0NWQ2MDE2OGU1YjQ5OTgwMDQyM2U5YjlkZDJmYTU3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaApAQCAtMTAzLDYgKzEwMyw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9S
TShRVCkKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21RdFdlYktpdE9iamVjdChjb25z
dCBTdHJpbmcmKSB7IH0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdU
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZjg1MDE0
ZjM2Mjk4NzFiMTlmMjEyMmFkNjdiNGU4NjdhYTM2MzVhNi4uZTBiMjQ0NTY1MTliNjAzYWVjYTcy
YmY4MmFlNzRiM2Y1MmQxOTM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKQEAgLTIyMTgsNiArMjIxOCwxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFpv
b21hYmxlQXJlYUZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKIAogICAgIHByb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmluZFpvb21hYmxlQXJlYUZvclBvaW50KHBvaW50
KSwgbV9wYWdlSUQpOwogfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tUXRXZWJLaXRPYmplY3QoY29uc3QgU3RyaW5nJiBjb250ZW50cykKK3sKKyAgICBtX3BhZ2VD
bGllbnQtPmRpZFJlY2VpdmVNZXNzYWdlRnJvbVF0V2ViS2l0T2JqZWN0KGNvbnRlbnRzKTsKK30K
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAppbmRleCBlZWExMjE5OTU4NjIwYWFmZDZiMjE4MzVlODdkMzg5NWVh
OGViOTA3Li5iZGZhZTFmN2VkZTRjNjVmNDk4MDc4NDQ3NmI2ZGY5M2FmMjQ0YWJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01MjAsNiArNTIwLDcgQEAgcHVi
bGljOgogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9p
bnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
RnJvbVF0V2ViS2l0T2JqZWN0KGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKICAgICB2b2lkIGFk
dmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcAppbmRleCA5Y2Y5Nzhi
OWE1MmFmZmE0MGEyODRlNmU5YWQxODExNTQ5NDU5ZGNlLi45ZWFiMTI1YjI4ZmFmNTU3ZjI3ODQy
YzI5MTk5OGQzODJmMzBmNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVu
dEltcGwuY3BwCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8V0tIaXRUZXN0UmVzdWx0Lmg+
CiAjaW5jbHVkZSA8V0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmg+CiAjaW5jbHVkZSA8V0tPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdLUGFnZS5oPgorI2luY2x1ZGUgPFdLU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8V0tUeXBlLmg+CiAjaW5jbHVkZSA8V0tVUkxSZXF1ZXN0Lmg+CiAK
QEAgLTI3OSwzICsyODEsMjEgQEAgdm9pZCBxdF93a19kZWNpZGVQb2xpY3lGb3JSZXNwb25zZShX
S1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tVUkxSZXNwb24KIAogICAgIFdLRnJh
bWVQb2xpY3lMaXN0ZW5lclVzZShsaXN0ZW5lcik7CiB9CisKK3ZvaWQgcXRfd2tfZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIk1lc3NhZ2VGcm9tUXRX
ZWJLaXRPYmplY3QiKSkgeworICAgICAgICBBU1NFUlQobWVzc2FnZUJvZHkpOworICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQXJyYXlHZXRUeXBlSUQoKSk7CisK
KyAgICAgICAgV0tBcnJheVJlZiBib2R5ID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4obWVzc2Fn
ZUJvZHkpOworICAgICAgICBBU1NFUlQoV0tBcnJheUdldFNpemUoYm9keSkgPT0gMik7CisgICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMCkpID09
IFdLUGFnZUdldFR5cGVJRCgpKTsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKFdLQXJyYXlH
ZXRJdGVtQXRJbmRleChib2R5LCAxKSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CisKKyAgICAg
ICAgV0tQYWdlUmVmIHBhZ2UgPSBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+KFdLQXJyYXlHZXRJdGVt
QXRJbmRleChib2R5LCAwKSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHN0ciA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMSkpOworCisgICAgICAg
IHRvSW1wbChwYWdlKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tUXRXZWJLaXRPYmplY3QodG9JbXBs
KHN0ciktPnN0cmluZygpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0Ns
aWVudEltcGwuaAppbmRleCBiYjMyMDlmZmFkMTYxNTE0NjA0MWIwZDlhNDliMjBmNzY0Njc2Nzk4
Li4xMzI3NzMwNGM3MWI0OTc2MmU3NzI4NGQ2YWQzYzYzMGI0ODFlMWNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgKQEAgLTUwLDYgKzUwLDkgQEAgdm9pZCBxdF93
a19tb3VzZURpZE1vdmVPdmVyRWxlbWVudChXS1BhZ2VSZWYsIFdLSGl0VGVzdFJlc3VsdFJlZiwg
V0tFdmVudE1vZGlmaWUKIHZvaWQgcXRfd2tfZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1v
ZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBXS1VSTFJlcXVlc3RSZWYsIFdLRnJhbWVQb2xp
Y3lMaXN0ZW5lclJlZiwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKIHZvaWQgcXRfd2tfZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoV0tQYWdlUmVmLCBXS0ZyYW1l
UmVmLCBXS1VSTFJlc3BvbnNlUmVmLCBXS1VSTFJlcXVlc3RSZWYsIFdLRnJhbWVQb2xpY3lMaXN0
ZW5lclJlZiwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIAor
Ly8gSW5qZWN0ZWQgYnVuZGxlIGNsaWVudC4KK3ZvaWQgcXRfd2tfZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5jcHAKaW5kZXggNjkwNWRkMzhjODhlMDdlOGI1
NWFiNDY0MGNiYjkzNjA3ZTNmOWVmYS4uMTYwMjhkOWZlNDc0ODdjZjEyMDAyYjkzMDM4ZTMwZTI4
NjFmOGE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVza3Rv
cFdlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVz
a3RvcFdlYlBhZ2VQcm94eS5jcHAKQEAgLTI0NCwzICsyNDQsOSBAQCB2b2lkIFF0RGVza3RvcFdl
YlBhZ2VQcm94eTo6dGltZXJFdmVudChRVGltZXJFdmVudCogZXYpCiAgICAgZWxzZQogICAgICAg
ICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2KTsKIH0KKwordm9pZCBRdERlc2t0b3BXZWJQYWdlUHJv
eHk6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbVF0V2ViS2l0T2JqZWN0KGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBRRGVza3RvcFdlYlZpZXcqIHdlYlZpZXcgPSBzdGF0aWNfY2FzdDxRRGVz
a3RvcFdlYlZpZXdQcml2YXRlKj4obV92aWV3SW50ZXJmYWNlKS0+cTsKKyAgICBlbWl0IHdlYlZp
ZXctPm1lc3NhZ2VSZWNlaXZlZChRU3RyaW5nKG1lc3NhZ2UpKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuaAppbmRleCBiNDdk
MDVlZjQzOTA3NzEzY2NkMWIyZTQ4YTBmYWIxOThlODE0ODQzLi42NjE1OTAzMmZlNzllOWFiZThk
MWM3MjNhMzlmYjAyNDczNzdkYzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXREZXNrdG9wV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5oCkBAIC0zNSw2ICszNSw4IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChRRXZlbnQqKTsKIAorICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21RdFdlYktpdE9iamVjdChjb25zdCBTdHJpbmcmKTsK
KwogcHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnRDb250ZW50KFFQYWludGVyKiwgY29uc3QgUVJl
Y3QmIGFyZWEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBy
b3h5LmNwcAppbmRleCA3ZGJlNDc3NTczZjY5OTlkNWEyYmFlYTQwMTZjYzBkODM1OThmYTlhLi45
NjgzOWU1ZTQ5NjJkODYwZWYyNzNiNmNkNGRkMjM4ODJlYzQ1OTRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJxd2toaXN0b3J5X3AuaCIKICNpbmNsdWRlICJGaW5kSW5kaWNhdG9yLmgiCiAj
aW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIk11dGFibGVBcnJheS5oIgog
I2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlF0UG9saWN5SW50ZXJmYWNlLmgiCkBAIC02MiwxNSArNjMsMjEg
QEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
CiBSZWZQdHI8V2ViQ29udGV4dD4gUXRXZWJQYWdlUHJveHk6OnNfZGVmYXVsdENvbnRleHQ7CiAK
IHVuc2lnbmVkIFF0V2ViUGFnZVByb3h5OjpzX2RlZmF1bHRQYWdlUHJveHlDb3VudCA9IDA7CiAK
IFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gUXRXZWJQYWdlUHJveHk6OmRlZmF1bHRXS0NvbnRleHQo
KQogewotICAgIGlmICghc19kZWZhdWx0Q29udGV4dCkKKyAgICBpZiAoIXNfZGVmYXVsdENvbnRl
eHQpIHsKICAgICAgICAgc19kZWZhdWx0Q29udGV4dCA9IFdlYkNvbnRleHQ6OmNyZWF0ZShTdHJp
bmcoKSk7CisKKyAgICAgICAgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQgaW5qZWN0ZWRC
dW5kbGVDbGllbnQ7CisgICAgICAgIG1lbXNldCgmaW5qZWN0ZWRCdW5kbGVDbGllbnQsIDAsIHNp
emVvZihXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCkpOworICAgICAgICBpbmplY3RlZEJ1
bmRsZUNsaWVudC52ZXJzaW9uID0ga1dLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50Q3VycmVu
dFZlcnNpb247CisgICAgICAgIGluamVjdGVkQnVuZGxlQ2xpZW50LmRpZFJlY2VpdmVNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlID0gcXRfd2tfZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGU7CisgICAgICAgIFdLQ29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KHRvQVBJKHNf
ZGVmYXVsdENvbnRleHQuZ2V0KCkpLCAmaW5qZWN0ZWRCdW5kbGVDbGllbnQpOworICAgIH0KICAg
ICByZXR1cm4gc19kZWZhdWx0Q29udGV4dDsKIH0KIApAQCAtNTE0LDYgKzUyMSwxOCBAQCBRU3Ry
aW5nIFF0V2ViUGFnZVByb3h5OjpjdXN0b21Vc2VyQWdlbnQoKSBjb25zdAogICAgIHJldHVybiBX
S1N0cmluZ0NvcHlRU3RyaW5nKFdLUGFnZUNvcHlDdXN0b21Vc2VyQWdlbnQocGFnZVJlZigpKSk7
CiB9CiAKK3ZvaWQgUXRXZWJQYWdlUHJveHk6OnBvc3RNZXNzYWdlVG9RdFdlYktpdE9iamVjdChj
b25zdCBRU3RyaW5nJiBtZXNzYWdlKQoreworICAgIHN0YXRpYyBTdHJpbmcgbWVzc2FnZU5hbWUo
Ik1lc3NhZ2VUb1F0V2ViS2l0T2JqZWN0Iik7CisKKyAgICBSZWZQdHI8TXV0YWJsZUFycmF5PiBi
b2R5ID0gTXV0YWJsZUFycmF5OjpjcmVhdGUoKTsKKyAgICBib2R5LT5hcHBlbmQobV93ZWJQYWdl
UHJveHkuZ2V0KCkpOworICAgIFJlZlB0cjxXZWJTdHJpbmc+IGNvbnRlbnRzID0gV2ViU3RyaW5n
OjpjcmVhdGUoU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICBib2R5LT5hcHBlbmQoY29udGVudHMuZ2V0
KCkpOworCisgICAgbV9jb250ZXh0LT5wb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUobWVzc2Fn
ZU5hbWUsIGJvZHkuZ2V0KCkpOworfQorCiB2b2lkIFF0V2ViUGFnZVByb3h5Ojpsb2FkKGNvbnN0
IFFVcmwmIHVybCkKIHsKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2t1cmwoV0tVUkxDcmVh
dGVXaXRoUVVybCh1cmwpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZVByb3h5LmgKaW5kZXggZTIwOGRhZmM4NDJkN2EwNGFjNjhjOGQwN2U4YjQ4Mjg5NGY2ODg1OC4u
ODYxNzBjODQ5OGViZjJkYjMzM2MyY2ZlNWRiZTI2M2IzMjZhZTI4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKQEAgLTE2Miw2ICsxNjIsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRDdXN0b21Vc2VyQWdlbnQoY29uc3QgUVN0cmluZyYpOwogICAg
IFFTdHJpbmcgY3VzdG9tVXNlckFnZW50KCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
ZWl2ZWRNZXNzYWdlRnJvbVF0V2ViS2l0T2JqZWN0KGNvbnN0IFFTdHJpbmcmKSB7IH0KKyAgICB2
b2lkIHBvc3RNZXNzYWdlVG9RdFdlYktpdE9iamVjdChjb25zdCBRU3RyaW5nJik7CisKICAgICBx
cmVhbCB0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0OwogICAgIHFyZWFsIHBhZ2Vab29tRmFjdG9yKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRUZXh0Wm9vbUZhY3RvcihxcmVhbCB6b29tRmFjdG9yKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8KaW5kZXggMzk0Mzc1NjE4NGJkNGFhYzFiNGRjZmEyOTgyY2VjNzAzNTA4ZjkxNy4u
YjgzN2Y3Zjc0OWI4ZjlkZjc3MzJhZmMxNTkwOGFiMGIyNzIxMzc1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8K
QEAgLTM0MSw2ICszNDEsOCBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggXAorICAgIFdlYlByb2Nlc3MvcXQvUXRCdW5k
bGUuaCBcCisgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZVBhZ2UuaCBcCiAgICAgJCRXRUJLSVQy
X0dFTkVSQVRFRF9IRUFERVJTIFwKICAgICAkJFdFQktJVDFfSEVBREVSU19TSEFSRURfV0lUSF9X
RUJLSVQyCiAKQEAgLTYwNyw2ICs2MDksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L3F0L1dlYlBhZ2VRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgXAorICAg
IFdlYlByb2Nlc3MvcXQvUXRCdW5kbGUuY3BwIFwKKyAgICBXZWJQcm9jZXNzL3F0L1F0QnVuZGxl
UGFnZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgXAogICAg
IFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRF
RF9TT1VSQ0VTIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCA1M2U5MGQ5ZDY3MjFkNTI4NDAyZGVh
NDI3ZjE5NGZiNjYxNjAxMzNhLi5iYzE5MDYxNGM5Y2RiNjAzNWUzZGUyNTY1ZTY0NTI2YzE5MDJk
YTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJXS0J1bmRs
ZUluaXRpYWxpemUuaCIKICNpbmNsdWRlIDxRTGlicmFyeT4KICNlbmRpZgogCkBAIC04MSw2ICs4
MiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6YXRpb25V
c2VyRGF0YSk7CiAgICAgdm9pZCBzZXRTYW5kYm94RXh0ZW5zaW9uKFBhc3NSZWZQdHI8U2FuZGJv
eEV4dGVuc2lvbj4gc2FuZGJveEV4dGVuc2lvbikgeyBtX3NhbmRib3hFeHRlbnNpb24gPSBzYW5k
Ym94RXh0ZW5zaW9uOyB9CiAKKyNpZiBQTEFURk9STShRVCkKKyAgICB2b2lkIGxvYWRXaXRoRnVu
Y3Rpb24oV0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHIpOworI2VuZGlmCisKICAgICAvLyBB
UEkKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoV0tCdW5kbGVDbGllbnQqKTsKICAgICB2b2lk
IHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIEFQSU9iamVjdCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1bmRsZVF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvcXQvSW5qZWN0
ZWRCdW5kbGVRdC5jcHAKaW5kZXggYTUxODNiMTM1YmZjMDA3MDYwNWEzMTRmNTFhNzBlZWVkYzY3
NzA5ZC4uOTE0YjhjNjc2NDFlODIzOTdmYmVhNWJjZjk3MzY5MjEwYjIxZmVkMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1
bmRsZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L3F0L0luamVjdGVkQnVuZGxlUXQuY3BwCkBAIC01NCw2ICs1NCwxMiBAQCBib29sIEluamVjdGVk
QnVuZGxlOjpsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAordm9pZCBJbmplY3RlZEJ1bmRsZTo6bG9hZFdpdGhGdW5jdGlvbihXS0J1
bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFsaXplRnVuY3Rpb24pCit7CisgICAgQVNT
RVJUKGluaXRpYWxpemVGdW5jdGlvbik7CisgICAgaW5pdGlhbGl6ZUZ1bmN0aW9uKHRvQVBJKHRo
aXMpLCAwKTsKK30KKwogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250QXNjZW50
SGFjaygpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0
QnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdW5kbGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQyNTI2NzM2NTYwZDg4MDczNjQ0MzhiOTkzNzc2ZWVmYWRiOTc4MWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVuZGxlLmNwcApA
QCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJRdEJ1bmRsZS5oIgorCisjaW5jbHVkZSAiUXRCdW5kbGVQYWdlLmgi
CisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLQnVuZGxlUGFnZS5oIgorI2luY2x1
ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1N0
cmluZ1F0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1F0QnVuZGxlOjp+UXRCdW5kbGUoKQoreworICAgIC8vIEZvciBPd25QdHIncyBzYWtl
LgorfQorCitRdEJ1bmRsZSYgUXRCdW5kbGU6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIFF0QnVu
ZGxlJiBzaGFyZWQgPSAqbmV3IFF0QnVuZGxlOworICAgIHJldHVybiBzaGFyZWQ7Cit9CisKK3Zv
aWQgUXRCdW5kbGU6OmluaXRpYWxpemUoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1R5cGVSZWYgaW5p
dGlhbGl6YXRpb25Vc2VyRGF0YSkKK3sKKyAgICBtX2J1bmRsZSA9IGJ1bmRsZTsKKyAgICBXS0J1
bmRsZUNsaWVudCBjbGllbnQgPSB7CisgICAgICAgIGtXS0J1bmRsZUNsaWVudEN1cnJlbnRWZXJz
aW9uLAorICAgICAgICB0aGlzLAorICAgICAgICBkaWRDcmVhdGVQYWdlLAorICAgICAgICB3aWxs
RGVzdHJveVBhZ2UsCisgICAgICAgIDAsIC8vIGRpZEluaXRpYWxpemVQYWdlR3JvdXAKKyAgICAg
ICAgZGlkUmVjZWl2ZU1lc3NhZ2UKKyAgICB9OworICAgIFdLQnVuZGxlU2V0Q2xpZW50KG1fYnVu
ZGxlLCAmY2xpZW50KTsKK30KKwordm9pZCBRdEJ1bmRsZTo6ZGlkQ3JlYXRlUGFnZShXS0J1bmRs
ZVJlZiwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgc3RhdGljX2Nhc3Q8UXRCdW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSkt
PmRpZENyZWF0ZVBhZ2UocGFnZSk7Cit9CisKK3ZvaWQgUXRCdW5kbGU6OndpbGxEZXN0cm95UGFn
ZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UXRCdW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGll
bnRJbmZvKSktPndpbGxEZXN0cm95UGFnZShwYWdlKTsKK30KKwordm9pZCBRdEJ1bmRsZTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAg
IHN0YXRpY19jYXN0PFF0QnVuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5k
aWRSZWNlaXZlTWVzc2FnZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkpOworfQorCit2b2lkIFF0
QnVuZGxlOjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQoreworICAgIG1fcGFn
ZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBRdEJ1bmRsZVBhZ2UodGhpcywgcGFnZSkpKTsKK30KKwor
dm9pZCBRdEJ1bmRsZTo6d2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQorewor
ICAgIHNpemVfdCBzaXplID0gbV9wYWdlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZXNbaV0tPnBhZ2UoKSA9PSBwYWdl
KSB7CisgICAgICAgICAgICBtX3BhZ2VzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFF0QnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZShX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQoreworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiTWVzc2FnZVRvUXRX
ZWJLaXRPYmplY3QiKSkgeworICAgICAgICBBU1NFUlQobWVzc2FnZUJvZHkpOworICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQXJyYXlHZXRUeXBlSUQoKSk7CisK
KyAgICAgICAgV0tBcnJheVJlZiBib2R5ID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4obWVzc2Fn
ZUJvZHkpOworICAgICAgICBBU1NFUlQoV0tBcnJheUdldFNpemUoYm9keSkgPT0gMik7CisgICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMCkpID09
IFdLQnVuZGxlUGFnZUdldFR5cGVJRCgpKTsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKFdL
QXJyYXlHZXRJdGVtQXRJbmRleChib2R5LCAxKSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CisK
KyAgICAgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBzdGF0aWNfY2FzdDxXS0J1bmRsZVBhZ2VS
ZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChib2R5LCAwKSk7CisgICAgICAgIFdLU3RyaW5nUmVm
IGNvbnRlbnRzID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChib2R5LCAxKSk7CisKKyAgICAgICAgUXRCdW5kbGVQYWdlKiBidW5kbGVQYWdlID0gYnVuZGxl
UGFnZUZvclBhZ2VSZWYocGFnZSk7CisgICAgICAgIGlmICghYnVuZGxlUGFnZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgYnVuZGxlUGFnZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1F0V2Vi
S2l0T2JqZWN0KGNvbnRlbnRzKTsKKyAgICB9Cit9CisKK1F0QnVuZGxlUGFnZSogUXRCdW5kbGU6
OmJ1bmRsZVBhZ2VGb3JQYWdlUmVmKGNvbnN0IFdLQnVuZGxlUGFnZVJlZiBwYWdlKSBjb25zdAor
eworICAgIHNpemVfdCBzaXplID0gbV9wYWdlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZXNbaV0tPnBhZ2UoKSA9PSBw
YWdlKQorICAgICAgICAgICAgcmV0dXJuIG1fcGFnZXNbaV0uZ2V0KCk7CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvcXQvUXRCdW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjM3ZjQ4NTQ2ZTZjNzU1NTBjNjk2YjA3ZDNl
OWUzYjI2ZTM4NzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9xdC9RdEJ1bmRsZS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFF0QnVuZGxlX2gKKyNkZWZpbmUgUXRCdW5kbGVfaAorCisjaW5jbHVkZSAiV0tC
dW5kbGUuaCIKKyNpbmNsdWRlICJXS0J1bmRsZVBhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgUXRCdW5kbGVQYWdlOworCitjbGFzcyBRdEJ1bmRsZSB7CitwdWJsaWM6CisgICAgflF0QnVu
ZGxlKCk7CisKKyAgICBzdGF0aWMgUXRCdW5kbGUmIHNoYXJlZCgpOworICAgIHZvaWQgaW5pdGlh
bGl6ZShXS0J1bmRsZVJlZiwgV0tUeXBlUmVmIGluaXRpYWxpemF0aW9uVXNlckRhdGEpOworCisg
ICAgV0tCdW5kbGVSZWYgdG9SZWYoKSBjb25zdCB7IHJldHVybiBtX2J1bmRsZTsgfQorCisgICAg
Ly8gQnVuZGxlIENsaWVudAorICAgIHN0YXRpYyB2b2lkIGRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVS
ZWYsIFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIHdpbGxE
ZXN0cm95UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmLCBjb25zdCB2b2lkKik7Cisg
ICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoV0tCdW5kbGVSZWYsIFdLU3RyaW5nUmVm
IG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQqKTsKKworICAg
IHZvaWQgZGlkQ3JlYXRlUGFnZShXS0J1bmRsZVBhZ2VSZWYpOworICAgIHZvaWQgd2lsbERlc3Ry
b3lQYWdlKFdLQnVuZGxlUGFnZVJlZik7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShXS1N0
cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KTsKKworcHJpdmF0ZToK
KyAgICBRdEJ1bmRsZVBhZ2UqIGJ1bmRsZVBhZ2VGb3JQYWdlUmVmKGNvbnN0IFdLQnVuZGxlUGFn
ZVJlZikgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHVzZSBIYXNoTWFwIG9mIE93blB0
cnM/IE9yIHNvbWV0aGluZyBlcXVpdmFsZW50PworICAgIFZlY3RvcjxPd25QdHI8UXRCdW5kbGVQ
YWdlPiA+IG1fcGFnZXM7CisgICAgV0tCdW5kbGVSZWYgbV9idW5kbGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFF0QnVuZGxlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvcXQvUXRCdW5kbGVQYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzlmNjk1YjQzNzFl
ZmVlZDUwNjMyMWU4NDM0ZWU3ZjliOGFhNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZVBhZ2UuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlF0
QnVuZGxlUGFnZS5oIgorCisjaW5jbHVkZSAiUXRCdW5kbGUuaCIKKyNpbmNsdWRlICJXS0FycmF5
LmgiCisjaW5jbHVkZSAiV0tCdW5kbGVGcmFtZS5oIgorI2luY2x1ZGUgIldLQnVuZGxlUGFnZS5o
IgorI2luY2x1ZGUgIldLQnVuZGxlU2NyaXB0V29ybGQuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tTdHJpbmdQcml2YXRlLmgi
CisjaW5jbHVkZSAiV0tTdHJpbmdRdC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHQuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorCisjaW5jbHVkZSA8UURlYnVnPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUXRCdW5kbGVQYWdlOjpRdEJ1bmRsZVBhZ2UoUXRCdW5k
bGUqIGJ1bmRsZSwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCisgICAgOiBtX2J1bmRsZShidW5kbGUp
CisgICAgLCBtX3BhZ2UocGFnZSkKKyAgICAsIG1fcXRXZWJLaXRPYmplY3QoMCkKK3sKKyAgICBX
S0J1bmRsZVBhZ2VMb2FkZXJDbGllbnQgbG9hZGVyQ2xpZW50ID0geworICAgICAgICBrV0tCdW5k
bGVQYWdlTG9hZGVyQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIHRoaXMsCisgICAgICAg
IDAsIC8vIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlk
UmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKKyAgICAgICAg
MCwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lCisgICAgICAgIDAs
IC8vIGRpZENvbW1pdExvYWRGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRGaW5pc2hEb2N1bWVu
dExvYWRGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKKyAgICAg
ICAgMCwgLy8gZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkUmVjZWl2ZVRp
dGxlRm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkRmlyc3RMYXlvdXRGb3JGcmFtZQorICAgICAg
ICAwLCAvLyBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZQorICAgICAgICAw
LCAvLyBkaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkKKyAgICAgICAgMCwgLy8gZGlkRGlzcGxh
eUluc2VjdXJlQ29udGVudEZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZFJ1bkluc2VjdXJlQ29u
dGVudEZvckZyYW1lCisgICAgICAgIGRpZENsZWFyV2luZG93Rm9yRnJhbWUsCisgICAgICAgIDAs
IC8vIGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUKKyAgICAgICAgMCwgLy8gd2lsbFBl
cmZvcm1DbGllbnRSZWRpcmVjdEZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZEhhbmRsZU9ubG9h
ZEV2ZW50c0ZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZExheW91dEZvckZyYW1lCisgICAgfTsK
KyAgICBXS0J1bmRsZVBhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KG1fcGFnZSwgJmxvYWRlckNsaWVu
dCk7Cit9CisKK1F0QnVuZGxlUGFnZTo6flF0QnVuZGxlUGFnZSgpCit7CisgICAgaWYgKG1fcXRX
ZWJLaXRPYmplY3QpIHsKKyAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOworICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisgICAgICAg
IEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgbV9xdFdlYktpdE9iamVjdCk7CisgICAgfQorfQor
Cit2b2lkIFF0QnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3
b3JsZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxRdEJ1bmRs
ZVBhZ2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPmRpZENsZWFyV2luZG93Rm9y
RnJhbWUoZnJhbWUsIHdvcmxkKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcXRfcG9zdE1lc3Nh
Z2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKikKK3sKKyAgICAvLyBGSVhNRTogc2hvdWxkIGl0IHdvcmsgcmVn
YXJkbGVzcyBvZiB0aGUgdGhpc09iamVjdD8KKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSB8
fCAhSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIFF0QnVuZGxlUGFnZSogYnVu
ZGxlUGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UXRCdW5kbGVQYWdlKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBBU1NFUlQoYnVuZGxlUGFnZSk7CisKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4ganNDb250ZW50cyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgYXJndW1lbnRzWzBdLCAwKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29udGVu
dHMoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoanNDb250ZW50cy5nZXQoKSkp
OworICAgIGJ1bmRsZVBhZ2UtPnBvc3RNZXNzYWdlRnJvbVF0V2ViS2l0T2JqZWN0KGNvbnRlbnRz
LmdldCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisK
K3ZvaWQgUXRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQpCit7CisgICAgc3RhdGljIEpT
U3RyaW5nUmVmIHBvc3RNZXNzYWdlTmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwb3N0TWVzc2FnZSIpOworICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBxdFdlYktpdE5hbWUgPSBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXRXZWJLaXQiKTsKKworICAgIGlmIChXS0J1
bmRsZVNjcmlwdFdvcmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQpOworICAgIGlmIChtX3F0V2ViS2l0T2Jq
ZWN0KQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIG1fcXRXZWJLaXRPYmplY3Qp
OworICAgIG1fcXRXZWJLaXRPYmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgcXRXZWJLaXRP
YmplY3RDbGFzcygpLCB0aGlzKTsKKyAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBtX3F0V2Vi
S2l0T2JqZWN0KTsKKworICAgIEpTT2JqZWN0UmVmIHBvc3RNZXNzYWdlID0gSlNPYmplY3RNYWtl
RnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgcG9zdE1lc3NhZ2VOYW1lLCBxdF9wb3N0TWVz
c2FnZUNhbGxiYWNrKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG1fcXRXZWJL
aXRPYmplY3QsIHBvc3RNZXNzYWdlTmFtZSwgcG9zdE1lc3NhZ2UsIGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOworICAgIEpT
T2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRl
eHQpLCBxdFdlYktpdE5hbWUsIG1fcXRXZWJLaXRPYmplY3QsIGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udEVudW0gfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5LCAwKTsKK30KKwordm9pZCBRdEJ1bmRsZVBhZ2U6OnBvc3RNZXNzYWdl
RnJvbVF0V2ViS2l0T2JqZWN0KFdLU3RyaW5nUmVmIGNvbnRlbnRzKQoreworICAgIHN0YXRpYyBX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJN
ZXNzYWdlRnJvbVF0V2ViS2l0T2JqZWN0Iik7CisgICAgV0tUeXBlUmVmIGJvZHlbXSA9IHsgcGFn
ZSgpLCBjb250ZW50cyB9OworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lc3NhZ2VCb2R5
KEFkb3B0V0ssIFdLQXJyYXlDcmVhdGUoYm9keSwgc2l6ZW9mKGJvZHkpIC8gc2l6ZW9mKFdLVHlw
ZVJlZikpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLT50b1JlZigpLCBtZXNz
YWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworfQorCit2b2lkIFF0QnVuZGxlUGFnZTo6ZGlk
UmVjZWl2ZU1lc3NhZ2VUb1F0V2ViS2l0T2JqZWN0KFdLU3RyaW5nUmVmIGNvbnRlbnRzKQorewor
ICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBvbm1lc3NhZ2VOYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIm9ubWVzc2FnZSIpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisKKyAg
ICBKU1ZhbHVlUmVmIG9ubWVzc2FnZVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0
LCBtX3F0V2ViS2l0T2JqZWN0LCBvbm1lc3NhZ2VOYW1lLCAwKTsKKyAgICBpZiAoIUpTVmFsdWVJ
c09iamVjdChjb250ZXh0LCBvbm1lc3NhZ2VWYWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAg
IEpTT2JqZWN0UmVmIG9ubWVzc2FnZUZ1bmN0aW9uID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQs
IG9ubWVzc2FnZVZhbHVlLCAwKTsKKyAgICBpZiAoIUpTT2JqZWN0SXNGdW5jdGlvbihjb250ZXh0
LCBvbm1lc3NhZ2VGdW5jdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBqc0NvbnRlbnRzID0gV0tTdHJpbmdDb3B5SlNTdHJpbmcoY29udGVudHMp
OworICAgIEpTVmFsdWVSZWYgYXJnID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwganNDb250
ZW50cy5nZXQoKSk7CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBvbm1lc3Nh
Z2VGdW5jdGlvbiwgMCwgMSwgJmFyZywgMCk7Cit9CisKK0pTQ2xhc3NSZWYgUXRCdW5kbGVQYWdl
OjpxdFdlYktpdE9iamVjdENsYXNzKCkKK3sKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1Jl
ZiA9IDA7CisgICAgaWYgKCFjbGFzc1JlZikgeworICAgICAgICBjb25zdCBKU0NsYXNzRGVmaW5p
dGlvbiBxdFdlYktpdE9iamVjdENsYXNzID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAg
ICAgIGNsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmcXRXZWJLaXRPYmplY3RDbGFzcyk7CisgICAg
fQorICAgIHJldHVybiBjbGFzc1JlZjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVuZGxlUGFnZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZVBhZ2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDdi
YTEwMGFlMWQ4MjE0OTBiMzE1NWEzM2QzN2EzODAwNDI2MWRmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZVBhZ2UuaApAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBRdEJ1bmRsZVBhZ2VfaAorI2Rl
ZmluZSBRdEJ1bmRsZVBhZ2VfaAorCisjaW5jbHVkZSAiSlNPYmplY3RSZWYuaCIKKyNpbmNsdWRl
ICJXS0J1bmRsZVBhZ2UuaCIKKyNpbmNsdWRlICJXS0J1bmRsZVNjcmlwdFdvcmxkLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBRdEJ1bmRsZTsKKworY2xhc3MgUXRCdW5kbGVQYWdl
IHsKK3B1YmxpYzoKKyAgICBRdEJ1bmRsZVBhZ2UoUXRCdW5kbGUqLCBXS0J1bmRsZVBhZ2VSZWYp
OworICAgIH5RdEJ1bmRsZVBhZ2UoKTsKKworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9wYWdlOyB9CisKKyAgICAvLyBMb2FkZXIgQ2xpZW50CisgICAgc3RhdGlj
IHZvaWQgZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJh
bWVSZWYsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYsIGNvbnN0IHZvaWQqKTsKKworICAgIHZvaWQg
ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmLCBXS0J1bmRsZVNjcmlwdFdv
cmxkUmVmKTsKKworICAgIHZvaWQgcG9zdE1lc3NhZ2VGcm9tUXRXZWJLaXRPYmplY3QoV0tTdHJp
bmdSZWYgbWVzc2FnZSk7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZVRvUXRXZWJLaXRPYmpl
Y3QoV0tTdHJpbmdSZWYgbWVzc2FnZSk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEpTQ2xhc3NS
ZWYgcXRXZWJLaXRPYmplY3RDbGFzcygpOworCisgICAgUXRCdW5kbGUqIG1fYnVuZGxlOworICAg
IFdLQnVuZGxlUGFnZVJlZiBtX3BhZ2U7CisgICAgSlNPYmplY3RSZWYgbV9xdFdlYktpdE9iamVj
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUXRCdW5kbGVQYWdl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcAppbmRl
eCAwNWEwYzY0ZDJkM2I3YWYwOTg3NzU1N2JiZjRlYjU4NzJmZDEwNTE0Li4zNmEyMWMzOThiYzZl
ZjdmMzQ4NDUzMGI5Y2E0NGJiMzJmMGExYjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCkBAIC0yNiw4ICsyNiwxMCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKIAorI2luY2x1ZGUgIkluamVjdGVkQnVu
ZGxlLmgiCisjaW5jbHVkZSAiUXRCdW5kbGUuaCIKKyNpbmNsdWRlICJXS0J1bmRsZUluaXRpYWxp
emUuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0KICNpbmNs
dWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4K
ICNpbmNsdWRlIDxRTmV0d29ya0Nvb2tpZUphcj4KQEAgLTU2LDYgKzU4LDExIEBAIHN0YXRpYyB2
b2lkIHBhcmVudFByb2Nlc3NEaWVkQ2FsbGJhY2sodm9pZCopCiB9CiAjZW5kaWYKIAordm9pZCBx
dF93a19XS0J1bmRsZUluaXRpYWxpemUoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1R5cGVSZWYgaW5p
dGlhbGl6YXRpb25Vc2VyRGF0YSkKK3sKKyAgICBRdEJ1bmRsZTo6c2hhcmVkKCkuaW5pdGlhbGl6
ZShidW5kbGUsIGluaXRpYWxpemF0aW9uVXNlckRhdGEpOworfQorCiB2b2lkIFdlYlByb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycywgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMp
CiB7CiAgICAgbV9uZXR3b3JrQWNjZXNzTWFuYWdlciA9IG5ldyBRTmV0d29ya0FjY2Vzc01hbmFn
ZXI7CkBAIC04Myw2ICs5MCwxNCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6
ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycwogI2lmIEVOQUJM
RShTUEVFQ0hfSU5QVVQpCiAgICAgV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0
U3BlZWNoSW5wdXRFbmFibGVkKGZhbHNlKTsKICNlbmRpZgorCisgICAgLy8gV2UnbGwgb25seSBp
bnN0YWxsIGlmIHdlIGRvbid0IGhhdmUgb25lIGdpdmVuIGJ5IHRoZSBVSSBwcm9jZXNzLiBDdXJy
ZW50bHkgb25seSBXVFIgcHJvdmlkZXMKKyAgICAvLyBpdHMgb3duIGJ1bmRsZS4KKyAgICBpZiAo
cGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIG1faW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6Y3JlYXRlKFN0cmluZygpKTsKKyAgICAgICAg
bV9pbmplY3RlZEJ1bmRsZS0+c2V0U2FuZGJveEV4dGVuc2lvbihTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGUocGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGhFeHRlbnNpb25IYW5kbGUpKTsKKyAg
ICAgICAgbV9pbmplY3RlZEJ1bmRsZS0+bG9hZFdpdGhGdW5jdGlvbihxdF93a19XS0J1bmRsZUlu
aXRpYWxpemUpOworICAgIH0KIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0
ZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113054</attachid>
            <date>2011-10-31 08:43:01 -0700</date>
            <delta_ts>2011-11-01 09:30:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70545-20111031164259.patch</filename>
            <type>text/plain</type>
            <size>46671</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhYTY1MDEwOTYwN2E3Yzgz
Y2U1NmJjMmRkODY4YmE0ZDdiMDQwZTdmLi44NmM3ZjFiMWI3NGQyYjgxNWNhYjI4ODIyNDE5NjVl
YzQ3MWFkMmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA3IEBACiAyMDExLTEwLTMxICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CiAKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQgbWVzc2FnZSBleGNoYW5nZSBiZXR3ZWVuIFdlYlZp
ZXcgYW5kIHRoZSB3ZWIgcGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzA1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIGEgbWVjaGFuaXNtIGZvciB0aGUgV2ViVmlldyB0byBzZW5kIG1lc3Nh
Z2VzIHRvIHRoZSBKYXZhU2NyaXB0IGVudmlyb25tZW50CisgICAgICAgIG9mIHRoZSB3ZWIgcGFn
ZS4gSW4gdGhlIFdlYlZpZXcgd2UgaGF2ZSBhIG1ldGhvZCBwb3N0TWVzc2FnZSgpIGFuZCBhIHNp
Z25hbAorICAgICAgICBtZXNzYWdlUmVjZWl2ZWQoKSwgd2hpbGUgaW4gdGhlIHdlYiBwYWdlIHdl
IGV4cG9zZSBhIG5hdmlnYXRvci5xdFJ1bnRpbWUgb2JqZWN0CisgICAgICAgIHdpdGggYSBwb3N0
TWVzc2FnZSgpIG1ldGhvZCBhbmQgYSBvbm1lc3NhZ2UgcHJvcGVydHkuIFRoZSBtZXNzYWdlcyBh
cmUgb2JqZWN0cworICAgICAgICB0aGF0IGZvbGxvdyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgTWVz
c2FnZUV2ZW50cy4KKworICAgICAgICBUbyBhY2hpZXZlIHRoaXMgd2UgbWFrZSB1c2Ugb2YgdGhl
IEluamVjdGVkQnVuZGxlIGZ1bmN0aW9uYWxpdHksIHRoYXQgd2FzCisgICAgICAgIHByZXZpb3Vz
bHkgdW51c2VkIGluIFF0V2ViS2l0IGV4Y2VwdCBmb3IgdGhlIFdlYktpdFRlc3RSdW5uZXIuIEJ5
IGhvb2tpbmcgYW4KKyAgICAgICAgaW5qZWN0ZWQgYnVuZGxlIHdlIGdldCBhIGhvb2sgdG8gZGlk
Q2xlYXJXaW5kb3dGb3JGcmFtZSgpIHdpdGhvdXQgY2hhbmdpbmcKKyAgICAgICAgV2ViRnJhbWVM
b2FkZXJDbGllbnQgYW5kIHdlIGFsc28gZ2V0IHRoZSBtZXNzYWdpbmcgbWVjaGFuaXNtIGZvciBJ
bmplY3RlZEJ1bmRsZXMuCisKKyAgICAgICAgVGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVm
YXVsdCwgYW5kIGNhbiBiZSBlbmFibGVkIGJ5IHNldHRpbmcKKyAgICAgICAgUVdlYlByZWZlcmVu
Y2VzOjpxdFJ1bnRpbWVPYmplY3RFbmFibGVkIHByb3BlcnR5IHRvIHRydWUuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9DbGll
bnRJbXBsLmNwcDoKKyAgICAgICAgKHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KTog
SGVscGVyIHRvIHJlZ2lzdGVyIHRoZSBpbmplY3RlZCBidW5kbGUgY2xpZW50LgorICAgICAgICAo
cXRfd2tfZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOiBEZWNvZGUgYW5kIGRp
c3BhdGNoIGEgbWVzc2FnZSByZWNlaXZlZAorICAgICAgICBmcm9tIHRoZSBXZWJQcm9jZXNzIHRv
IHRoZSBXZWJQYWdlUHJveHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmRlZmF1bHRXS0NvbnRleHQpOiBSZWdp
c3RlciB0aGUgaW5qZWN0ZWQgYnVuZGxlIGNsaWVudC4gV2UgZG8gaXQKKyAgICAgICAgYXQgdGhp
cyBwb2ludCBiZWNhdXNlIGl0IGlzIG9uZSBjbGllbnQgcGVyIGNvbnRleHQsIG5vdCBwZXIgcGFn
ZS4KKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpRdFdlYlBhZ2VQcm94eSk6CisgICAgICAgIChR
dFdlYlBhZ2VQcm94eTo6c2V0UXRSdW50aW1lT2JqZWN0RW5hYmxlZCk6CisgICAgICAgIChRdFdl
YlBhZ2VQcm94eTo6cG9zdE1lc3NhZ2VUb1F0UnVudGltZU9iamVjdCk6IENvbnN0cnVjdCBhbmQg
c2VuZCBhIG1lc3NhZ2UgdG8KKyAgICAgICAgdGhlIFdlYlByb2Nlc3MuCisgICAgICAgICogVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6cXRS
dW50aW1lT2JqZWN0RW5hYmxlZCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWRN
ZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdCk6IFVzZWQgYnkgc3ViY2xhc3NlcyB0byBoYW5kbGUK
KyAgICAgICAgbWVzc2FnZXMgcmVjZWl2ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3FkZXNrdG9wd2Vidmlldy5jcHA6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXc6OnBvc3RNZXNz
YWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAo
UXREZXNrdG9wV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21RdFJ1bnRpbWVPYmpl
Y3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgTmV3IHNsb3QgYW5kIHNpZ25hbCBleHBvc2VkIGluIFFEZXNrdG9wV2ViVmlldyBmb3Ig
cG9zdGluZyBhbmQgcmVjZWl2aW5nIG1lc3NhZ2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudDo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tUXRSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZUZy
b21RdFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoK
KyAgICAgICAgQWRkIGEgbmV3LCBRdC1vbmx5LCBtZXRob2QgaW4gUGFnZUNsaWVudCB0byBoYW5k
bGUgbWVzc2FnZXMgZnJvbSB0aGUgcXRSdW50aW1lIG9iamVjdC4KKworICAgICAgICAqIFdlYktp
dDIucHJvOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3F0L0luamVjdGVkQnVu
ZGxlUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6bG9hZFdpdGhGdW5j
dGlvbik6CisgICAgICAgIEFkZCBhIHdheSB0byBsb2FkIEluamVjdGVkQnVuZGxlIGZyb20gYSBp
bml0aWFsaXplIGZ1bmN0aW9uIHBvaW50ZXIsIHRoaXMgYWxsb3dzIHVzCisgICAgICAgIHRvIGhh
dmUgdGhlIEluamVjdGVkQnVuZGxlIGRlZmluZWQgaW4gdGhlIFdlYlByb2Nlc3MgaXRzZWxmLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpRdEJ1bmRsZTo6flF0QnVuZGxlKToKKyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGU6
OnNoYXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6UXRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpR
dEJ1bmRsZTo6d2lsbERlc3Ryb3lQYWdlKToKKyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGU6OmRp
ZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGU6OmJ1bmRsZVBhZ2VG
b3JQYWdlUmVmKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0QnVuZGxlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvcXQvSW5qZWN0ZWRC
dW5kbGVRdC5jcHAuCisgICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlOjp0b1JlZik6CisgICAgICAg
IE9iamVjdCB0aGF0IGhvbGRzIGEgV0tCdW5kbGVSZWYgYW5kIGtlZXBzIHRyYWNrIG9mIHRoZSBw
YWdlcyBpbiB0aGUgY3VycmVudAorICAgICAgICBjb250ZXh0IGFuZCBkaXNwYXRjaCBtZXNzYWdl
cyBmcm9tIHRoZSBVSVByb2Nlc3MgdG8gdGhlbS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvcXQv
UXRCdW5kbGVQYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlUGFnZTo6
UXRCdW5kbGVQYWdlKToKKyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGVQYWdlOjp+UXRCdW5kbGVQ
YWdlKToKKyAgICAgICAgKFdlYktpdDo6UXRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6cXRfcG9zdE1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OlF0QnVuZGxlUGFnZTo6cG9zdE1lc3NhZ2VGcm9tUXRSdW50aW1lT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6Y3JlYXRlRmFrZU1lc3NhZ2VFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OlF0QnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1F0UnVudGltZU9iamVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlUGFnZTo6c2V0UXRSdW50aW1lT2JqZWN0RW5hYmxlZCk6
CisgICAgICAgIChXZWJLaXQ6OlF0QnVuZGxlUGFnZTo6cmVnaXN0ZXJRdFJ1bnRpbWVPYmplY3Qp
OgorICAgICAgICAoV2ViS2l0OjpRdEJ1bmRsZVBhZ2U6OnF0UnVudGltZU9iamVjdENsYXNzKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0QnVuZGxlUGFnZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3F0L0luamVjdGVkQnVuZGxlUXQu
Y3BwLgorICAgICAgICAoV2ViS2l0OjpRdEJ1bmRsZVBhZ2U6OnBhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpRdEJ1bmRsZVBhZ2U6OnF0UnVudGltZU9iamVjdEVuYWJsZWQpOgorICAgICAgICBPdXIg
cmVwcmVzZW50YXRpb24gZm9yIHBhZ2VzIGZyb20gdGhlIGJ1bmRsZSBwZXJzcGVjdGl2ZS4gUmVn
aXN0ZXJzIGEgY2xpZW50IHRoYXQgYWxsb3dzIHVzIHRvIGhvb2sKKyAgICAgICAgaW4gZGlkQ2xl
YXJXaW5kb3dGb3JGcmFtZSgpIGFuZCBpbml0aWFsaXplIHRoZSBxdFJ1bnRpbWUgb2JqZWN0LiBB
bHNvIGNvbnRhaW5zIHRoZSBicmlkZ2UgY29kZSBmb3IKKyAgICAgICAgaW50ZXJhY3Rpbmcgd2l0
aCBwYWdlIEpTIGVudmlyb25tZW50LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9j
ZXNzUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpxdF93a19XS0J1bmRsZUluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNz
KToKKyAgICAgICAgQ2hhbmdlIG91ciBXZWJQcm9jZXNzIGNvZGUgdG8gbG9hZCBvdXIgImJ1aWx0
LWluIiBpbmplY3RlZCBidW5kbGUgaWYgdGhlcmUncyBubyBidW5kbGUgdG8gYmUKKyAgICAgICAg
cmVnaXN0ZXJlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMv
RGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5xbWw6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvY29tbW9uL21lc3NhZ2luZy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybzoK
KworMjAxMS0xMC0zMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2
ZWlyYUBvcGVuYm9zc2Eub3JnPgorCiAgICAgICAgIFtRdF0gTWFrZSBRV2ViUHJlZmVyZW5jZXMg
aG9sZCBhIFF0V2ViUGFnZVByb3h5CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTIxOQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAKaW5kZXggOGVmNDc5MjgyODgxYzU2MzlmMGQzZjFi
YTNiMzEwMjQ4Y2FmODhjNS4uMmZjODJkMjM2ZjdhMjc2OTgxNjM2ZjUyOGFlMWIwNDYwYTI4YTlm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdl
YnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3
ZWJ2aWV3LmNwcApAQCAtMjcxLDYgKzI3MSwxMSBAQCB2b2lkIFFEZXNrdG9wV2ViVmlldzo6bG9h
ZChjb25zdCBRVXJsJiB1cmwpCiAgICAgZC0+cGFnZS5sb2FkKHVybCk7CiB9CiAKK3ZvaWQgUURl
c2t0b3BXZWJWaWV3Ojpwb3N0TWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IGQtPnBhZ2UucG9zdE1lc3NhZ2VUb1F0UnVudGltZU9iamVjdChtZXNzYWdlKTsKK30KKwogUVVy
bCBRRGVza3RvcFdlYlZpZXc6OnVybCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPnBhZ2UudXJs
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9w
d2Vidmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZp
ZXcuaAppbmRleCA2ZWJjOTNjMTE0ODJiYzQxMDE5YTkyNzEyNjczYTRiNWFhZWE3N2RiLi5hZGQ3
OTY2Y2JhYzhiNDBlNzdmZDZjYzZkZjBkM2NjZGZiMTk2MGI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmgKQEAgLTU3LDYgKzU3LDgg
QEAgY2xhc3MgUVdFQktJVF9FWFBPUlQgUURlc2t0b3BXZWJWaWV3IDogcHVibGljIFFRdWlja1Bh
aW50ZWRJdGVtIHsKICAgICBRX1BST1BFUlRZKGludCBsb2FkUHJvZ3Jlc3MgUkVBRCBsb2FkUHJv
Z3Jlc3MgTk9USUZZIGxvYWRQcm9ncmVzc0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRV2ViTmF2
aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmlnYXRpb24gUkVBRCBuYXZpZ2F0aW9uQ29udHJvbGxlciBD
T05TVEFOVCBGSU5BTCkKICAgICBRX1BST1BFUlRZKFFXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5j
ZXMgUkVBRCBwcmVmZXJlbmNlcyBDT05TVEFOVCBGSU5BTCkKKyAgICAvLyBGSVhNRTogTW92ZSBp
bnNpZGUgUVdlYlByZWZlcmVuY2VzLgorICAgIFFfUFJPUEVSVFkoYm9vbCBxdFJ1bnRpbWVPYmpl
Y3RFbmFibGVkIFJFQUQgcXRSdW50aW1lT2JqZWN0RW5hYmxlZCBXUklURSBzZXRRdFJ1bnRpbWVP
YmplY3RFbmFibGVkIE5PVElGWSBxdFJ1bnRpbWVPYmplY3RFbmFibGVkQ2hhbmdlZCkKICAgICBR
X0VOVU1TKE5hdmlnYXRpb25Qb2xpY3kpCiAgICAgUV9FTlVNUyhFcnJvclR5cGUpCiBwdWJsaWM6
CkBAIC04NCw2ICs4Niw3IEBAIHB1YmxpYzoKIAogcHVibGljIFFfU0xPVFM6CiAgICAgIHZvaWQg
bG9hZChjb25zdCBRVXJsJik7CisgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgUVN0cmluZyYp
OwogCiBRX1NJR05BTFM6CiAgICAgdm9pZCB0aXRsZUNoYW5nZWQoY29uc3QgUVN0cmluZyYgdGl0
bGUpOwpAQCAtOTQsNiArOTcsOCBAQCBRX1NJR05BTFM6CiAgICAgdm9pZCBsb2FkUHJvZ3Jlc3ND
aGFuZ2VkKGludCBwcm9ncmVzcyk7CiAgICAgdm9pZCB1cmxDaGFuZ2VkKGNvbnN0IFFVcmwmIHVy
bCk7CiAgICAgdm9pZCBsaW5rSG92ZXJlZChjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcm
IHRpdGxlKTsKKyAgICB2b2lkIG1lc3NhZ2VSZWNlaXZlZChjb25zdCBRVmFyaWFudE1hcCYgbWVz
c2FnZSk7CisgICAgdm9pZCBxdFJ1bnRpbWVPYmplY3RFbmFibGVkQ2hhbmdlZCgpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7CkBAIC0x
MjAsNiArMTI1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBldmVudChRRXZlbnQq
KTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUXREZXNrdG9wV2ViUGFnZVByb3h5Owog
ICAgIFFEZXNrdG9wV2ViVmlldyhXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBRUXVpY2tJ
dGVtKiBwYXJlbnQgPSAwKTsKICAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rl
c2t0b3BXZWJWaWV3L3RzdF9tZXNzYWdpbmcucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMDkzNDYyNzYwY2UwMzQ0YmQxN2FiZmYzYTUxODQyZTQxNjQ2YjEyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0
ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbApAQCAtMCwwICsxLDEwNiBAQAor
aW1wb3J0IFF0UXVpY2sgMi4wCitpbXBvcnQgUXRUZXN0IDEuMAoraW1wb3J0IFF0V2ViS2l0IDMu
MAorCitJdGVtIHsKKyAgICBEZXNrdG9wV2ViVmlldyB7CisgICAgICAgIGlkOiB3ZWJWaWV3Cisg
ICAgICAgIHByb3BlcnR5IHZhcmlhbnQgbGFzdE1lc3NhZ2UKKyAgICAgICAgcXRSdW50aW1lT2Jq
ZWN0RW5hYmxlZDogdHJ1ZQorICAgICAgICBvbk1lc3NhZ2VSZWNlaXZlZDogeworICAgICAgICAg
ICAgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIH0KKyAgICB9CisKKyAgICBEZXNrdG9w
V2ViVmlldyB7CisgICAgICAgIGlkOiBvdGhlcldlYlZpZXcKKyAgICAgICAgcHJvcGVydHkgdmFy
aWFudCBsYXN0TWVzc2FnZQorICAgICAgICBxdFJ1bnRpbWVPYmplY3RFbmFibGVkOiB0cnVlCisg
ICAgICAgIG9uTWVzc2FnZVJlY2VpdmVkOiB7CisgICAgICAgICAgICBsYXN0TWVzc2FnZSA9IG1l
c3NhZ2UKKyAgICAgICAgfQorICAgIH0KKworICAgIERlc2t0b3BXZWJWaWV3IHsKKyAgICAgICAg
aWQ6IGRpc2FibGVkV2ViVmlldworICAgICAgICBwcm9wZXJ0eSBib29sIHJlY2VpdmVkTWVzc2Fn
ZQorICAgICAgICBxdFJ1bnRpbWVPYmplY3RFbmFibGVkOiBmYWxzZQorICAgICAgICBvbk1lc3Nh
Z2VSZWNlaXZlZDogeworICAgICAgICAgICAgcmVjZWl2ZWRNZXNzYWdlID0gdHJ1ZQorICAgICAg
ICB9CisgICAgfQorCisgICAgU2lnbmFsU3B5IHsKKyAgICAgICAgaWQ6IGxvYWRTcHkKKyAgICAg
ICAgdGFyZ2V0OiB3ZWJWaWV3CisgICAgICAgIHNpZ25hbE5hbWU6ICJsb2FkU3VjY2VlZGVkIgor
ICAgIH0KKworICAgIFNpZ25hbFNweSB7CisgICAgICAgIGlkOiBtZXNzYWdlU3B5CisgICAgICAg
IHRhcmdldDogd2ViVmlldworICAgICAgICBzaWduYWxOYW1lOiAibWVzc2FnZVJlY2VpdmVkIgor
ICAgIH0KKworICAgIFNpZ25hbFNweSB7CisgICAgICAgIGlkOiBvdGhlckxvYWRTcHkKKyAgICAg
ICAgdGFyZ2V0OiBvdGhlcldlYlZpZXcKKyAgICAgICAgc2lnbmFsTmFtZTogImxvYWRTdWNjZWVk
ZWQiCisgICAgfQorCisgICAgU2lnbmFsU3B5IHsKKyAgICAgICAgaWQ6IG90aGVyTWVzc2FnZVNw
eQorICAgICAgICB0YXJnZXQ6IG90aGVyV2ViVmlldworICAgICAgICBzaWduYWxOYW1lOiAibWVz
c2FnZVJlY2VpdmVkIgorICAgIH0KKworICAgIFNpZ25hbFNweSB7CisgICAgICAgIGlkOiBkaXNh
YmxlZFdlYlZpZXdMb2FkU3B5CisgICAgICAgIHRhcmdldDogZGlzYWJsZWRXZWJWaWV3CisgICAg
ICAgIHNpZ25hbE5hbWU6ICJsb2FkU3VjY2VlZGVkIgorICAgIH0KKworICAgIFRlc3RDYXNlIHsK
KyAgICAgICAgbmFtZTogIkRlc2t0b3BXZWJWaWV3TWVzc2FnaW5nIgorICAgICAgICBwcm9wZXJ0
eSB1cmwgdGVzdFVybDogUXQucmVzb2x2ZWRVcmwoIi4uL2NvbW1vbi9tZXNzYWdpbmcuaHRtbCIp
CisKKyAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHsKKyAgICAgICAgICAgIGxvYWRTcHkuY2xlYXIo
KQorICAgICAgICAgICAgbWVzc2FnZVNweS5jbGVhcigpCisgICAgICAgICAgICB3ZWJWaWV3Lmxh
c3RNZXNzYWdlID0gbnVsbAorICAgICAgICAgICAgb3RoZXJMb2FkU3B5LmNsZWFyKCkKKyAgICAg
ICAgICAgIG90aGVyTWVzc2FnZVNweS5jbGVhcigpCisgICAgICAgICAgICBvdGhlcldlYlZpZXcu
bGFzdE1lc3NhZ2UgPSBudWxsCisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0X2Jh
c2ljKCkgeworICAgICAgICAgICAgd2ViVmlldy5sb2FkKHRlc3RVcmwpCisgICAgICAgICAgICBs
b2FkU3B5LndhaXQoKQorICAgICAgICAgICAgd2ViVmlldy5wb3N0TWVzc2FnZSgiSEVMTE8iKQor
ICAgICAgICAgICAgbWVzc2FnZVNweS53YWl0KCkKKyAgICAgICAgICAgIGNvbXBhcmUod2ViVmll
dy5sYXN0TWVzc2FnZS5kYXRhLCAiT0xMRUgiKQorICAgICAgICAgICAgY29tcGFyZSh3ZWJWaWV3
Lmxhc3RNZXNzYWdlLm9yaWdpbi50b1N0cmluZygpLCB0ZXN0VXJsLnRvU3RyaW5nKCkpCisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0X3R3b1dlYlZpZXdzKCkgeworICAgICAgICAg
ICAgd2ViVmlldy5sb2FkKHRlc3RVcmwpCisgICAgICAgICAgICBvdGhlcldlYlZpZXcubG9hZCh0
ZXN0VXJsKQorICAgICAgICAgICAgbG9hZFNweS53YWl0KCkKKyAgICAgICAgICAgIG90aGVyTG9h
ZFNweS53YWl0KCkKKyAgICAgICAgICAgIHdlYlZpZXcucG9zdE1lc3NhZ2UoIkZJUlNUIikKKyAg
ICAgICAgICAgIG90aGVyV2ViVmlldy5wb3N0TWVzc2FnZSgiU0VDT05EIikKKyAgICAgICAgICAg
IG1lc3NhZ2VTcHkud2FpdCgpCisgICAgICAgICAgICBvdGhlck1lc3NhZ2VTcHkud2FpdCgpCisg
ICAgICAgICAgICBjb21wYXJlKHdlYlZpZXcubGFzdE1lc3NhZ2UuZGF0YSwgIlRTUklGIikKKyAg
ICAgICAgICAgIGNvbXBhcmUob3RoZXJXZWJWaWV3Lmxhc3RNZXNzYWdlLmRhdGEsICJETk9DRVMi
KQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdF9kaXNhYmxlZCgpIHsKKyAgICAg
ICAgICAgIGRpc2FibGVkV2ViVmlldy5sb2FkKHRlc3RVcmwpCisgICAgICAgICAgICBkaXNhYmxl
ZFdlYlZpZXdMb2FkU3B5LndhaXQoKQorICAgICAgICAgICAgZGlzYWJsZWRXZWJWaWV3LnBvc3RN
ZXNzYWdlKCJISSIpCisgICAgICAgICAgICB3YWl0KDEwMDApCisgICAgICAgICAgICBjb21wYXJl
KGRpc2FibGVkV2ViVmlldy5yZWNlaXZlZE1lc3NhZ2UsIGZhbHNlKQorICAgICAgICB9CisgICAg
fQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9jb21tb24vbWVzc2FnaW5nLmh0bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FtbHRlc3RzL2NvbW1vbi9tZXNzYWdpbmcuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
ZDAyMzM3YWI5ODg1YzM3YzdmNmM1Mjc1MmVmOTM1NTU1ZDhlNjNiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9jb21tb24v
bWVzc2FnaW5nLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBpbml0aWFsaXplKCkgeworICAgICAgICBu
YXZpZ2F0b3IucXRSdW50aW1lLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2KSB7CisgICAgICAgICAg
ICB2YXIgcmV2ZXJzZWQgPSBldi5kYXRhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cisg
ICAgICAgICAgICBuYXZpZ2F0b3IucXRSdW50aW1lLnBvc3RNZXNzYWdlKHJldmVyc2VkKTsKKyAg
ICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0aWFs
aXplKCk7Ij4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm8KaW5kZXggNDFk
MjJiMThmNjcyMTE5NThjMzZjZDE2MGM4YmZmZTExMDgyNjk2Ni4uNTMxZTA1MDE0NGM1NjFmNzE2
NzZkMWViZjkxZTc3MWZjZjkxMTI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm8KKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm8KQEAgLTE1LDYg
KzE1LDcgQEAgT1RIRVJfRklMRVMgKz0gXAogICAgIERlc2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJv
Z3Jlc3MucW1sIFwKICAgICBEZXNrdG9wV2ViVmlldy90c3RfbG9hZFByb2dyZXNzU2lnbmFsLnFt
bCBcCiAgICAgRGVza3RvcFdlYlZpZXcvdHN0X2xpbmtIb3ZlcmVkLnFtbCBcCisgICAgRGVza3Rv
cFdlYlZpZXcvdHN0X21lc3NhZ2luZy5xbWwgXAogICAgIFRvdWNoV2ViVmlldy90c3RfcHJvcGVy
dGllcy5xbWwgXAogICAgIFRvdWNoV2ViVmlldy90c3RfbG9hZC5xbWwgXAogICAgIFRvdWNoV2Vi
Vmlldy90c3RfbG9hZFplcm9TaXplVmlldy5xbWwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdl
Q2xpZW50LmgKaW5kZXggZjE5NDc4NzNhMDIxY2FiYTZkOGU0ZDcxYjA1ZjM4MjZmNWM4Mzc3Zi4u
ZDNjMGZlYjM4NTI3ZjE2YmUwNDM0MjUzMzNhNDdjYTFjMmJjM2E2OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0xMDMsNiArMTAzLDcgQEAgcHVibGljOgogI2lmIFBM
QVRGT1JNKFFUKQogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxl
QXJlYShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRnJvbVF0UnVudGltZU9iamVj
dChjb25zdCBTdHJpbmcmKSB7IH0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKEdUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXgg
YTE3OTRmNTI2N2VmNjRkZTg4MzYzMjg3YzNiMDIyMjhhNGRjMGMyNC4uYmYwMzFkODNlZjM0NTY3
ODk1Zjg5N2NlYzM4YWQ3ZmIzNDJmYmFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKQEAgLTIyNjAsNiArMjI2MCwxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKIAogICAgIHBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmluZFpvb21hYmxlQXJlYUZvclBvaW50
KHBvaW50KSwgbV9wYWdlSUQpOwogfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tUXRSdW50aW1lT2JqZWN0KGNvbnN0IFN0cmluZyYgY29udGVudHMpCit7CisgICAg
bV9wYWdlQ2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZUZyb21RdFJ1bnRpbWVPYmplY3QoY29udGVu
dHMpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGRlNjdkNDY2Y2I3NGIzOWZhYmEyNzYzMjBh
ZGU4YmFlMWJmNTFiMzIuLjNlNjNlOWNjNGNmNzVhMzNkNjRlOWJhMjg3ZjRjYzhlMGY5NTQ1ZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTUyNCw2ICs1MjQs
NyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShRVCkKICAgICB2b2lkIGZpbmRab29tYWJsZUFy
ZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tUXRSdW50aW1lT2JqZWN0KGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKICAg
ICB2b2lkIGFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9u
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcAppbmRl
eCBlYWU1ZjIxODM2YjRkY2JhZWUxYTY0ZjY5NGZjNzljZDAwODk5ZTY0Li40YTVjZDE1MTQxOWMz
N2QwMmMxODViMjE0MmZhYTdhMTBiZWRkYzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L0NsaWVudEltcGwuY3BwCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8V0tIaXRUZXN0
UmVzdWx0Lmg+CiAjaW5jbHVkZSA8V0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmg+CiAjaW5jbHVkZSA8
V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdLUGFnZS5oPgorI2luY2x1
ZGUgPFdLU3RyaW5nLmg+CiAjaW5jbHVkZSA8V0tUeXBlLmg+CiAjaW5jbHVkZSA8V0tVUkxSZXF1
ZXN0Lmg+CiAKQEAgLTI3OSw2ICsyODEsMjUgQEAgc3RhdGljIHZvaWQgcXRfd2tfZGVjaWRlUG9s
aWN5Rm9yUmVzcG9uc2UoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVVIKICAg
ICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2UobGlzdGVuZXIpOwogfQogCit2b2lkIHF0X3drX2Rp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiwgV0tTdHJpbmdS
ZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSwgY29uc3Qgdm9pZCopCit7Cisg
ICAgaWYgKCFXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiTWVzc2Fn
ZUZyb21RdFJ1bnRpbWVPYmplY3QiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1l
c3NhZ2VCb2R5KTsKKyAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQXJy
YXlHZXRUeXBlSUQoKSk7CisKKyAgICBXS0FycmF5UmVmIGJvZHkgPSBzdGF0aWNfY2FzdDxXS0Fy
cmF5UmVmPihtZXNzYWdlQm9keSk7CisgICAgQVNTRVJUKFdLQXJyYXlHZXRTaXplKGJvZHkpID09
IDIpOworICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwg
MCkpID09IFdLUGFnZUdldFR5cGVJRCgpKTsKKyAgICBBU1NFUlQoV0tHZXRUeXBlSUQoV0tBcnJh
eUdldEl0ZW1BdEluZGV4KGJvZHksIDEpKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKKworICAg
IFdLUGFnZVJlZiBwYWdlID0gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgoYm9keSwgMCkpOworICAgIFdLU3RyaW5nUmVmIHN0ciA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMSkpOworCisgICAgdG9JbXBsKHBh
Z2UpLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21RdFJ1bnRpbWVPYmplY3QodG9JbXBsKHN0ciktPnN0
cmluZygpKTsKK30KKwogdm9pZCBzZXR1cFBhZ2VMb2FkZXJDbGllbnQoUXRXZWJQYWdlUHJveHkq
IHF0V2ViUGFnZVByb3h5LCBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKIHsKICAgICBXS1Bh
Z2VMb2FkZXJDbGllbnQgbG9hZENsaWVudDsKQEAgLTMyMywzICszNDQsMTIgQEAgdm9pZCBzZXR1
cFBhZ2VQb2xpY3lDbGllbnQoUXRQb2xpY3lJbnRlcmZhY2UqIHBvbGljeUludGVyZmFjZSwgV2Vi
UGFnZVByb3h5KiB3ZWIKICAgICBwb2xpY3lDbGllbnQuZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2Ug
PSBxdF93a19kZWNpZGVQb2xpY3lGb3JSZXNwb25zZTsKICAgICBXS1BhZ2VTZXRQYWdlUG9saWN5
Q2xpZW50KHRvQVBJKHdlYlBhZ2VQcm94eSksICZwb2xpY3lDbGllbnQpOwogfQorCit2b2lkIHNl
dHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KFdLQ29udGV4dFJlZiBjb250ZXh0KQorewor
ICAgIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50IGluamVjdGVkQnVuZGxlQ2xpZW50Owor
ICAgIG1lbXNldCgmaW5qZWN0ZWRCdW5kbGVDbGllbnQsIDAsIHNpemVvZihXS0NvbnRleHRJbmpl
Y3RlZEJ1bmRsZUNsaWVudCkpOworICAgIGluamVjdGVkQnVuZGxlQ2xpZW50LnZlcnNpb24gPSBr
V0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBpbmplY3Rl
ZEJ1bmRsZUNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSA9IHF0X3dr
X2RpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlOworICAgIFdLQ29udGV4dFNldElu
amVjdGVkQnVuZGxlQ2xpZW50KGNvbnRleHQsICZpbmplY3RlZEJ1bmRsZUNsaWVudCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaAppbmRleCBjMjhhMDEwZGQ1YjMw
YTRlYTM5ZjJkMDg3NDkyMjhkMGI5NTJlYmVlLi40ZWY4OTc1Y2RmNzY4NWZhODNkZDg5YTM2MjI2
OGE5ZmI1ODU5NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xp
ZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgK
QEAgLTIwLDE2ICsyMCwxOSBAQAogI2lmbmRlZiBDbGllbnRJbXBsX2gKICNkZWZpbmUgQ2xpZW50
SW1wbF9oCiAKLSNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdDIv
V0tDb250ZXh0Lmg+CiAKIGNsYXNzIFF0V2ViUGFnZVByb3h5OwogbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBRdFBvbGljeUludGVyZmFjZTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KKwogdm9p
ZCBzZXR1cFBhZ2VMb2FkZXJDbGllbnQoUXRXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYlBhZ2VQ
cm94eSopOwogdm9pZCBzZXR1cFBhZ2VVaUNsaWVudChRdFdlYlBhZ2VQcm94eSosIFdlYktpdDo6
V2ViUGFnZVByb3h5Kik7CiB2b2lkIHNldHVwUGFnZVBvbGljeUNsaWVudChXZWJLaXQ6OlF0UG9s
aWN5SW50ZXJmYWNlKiwgV2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKIAordm9pZCBzZXR1cENvbnRl
eHRJbmplY3RlZEJ1bmRsZUNsaWVudChXS0NvbnRleHRSZWYpOworCiAjZW5kaWYgLyogQ2xpZW50
SW1wbF9oICovCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdERl
c2t0b3BXZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVz
a3RvcFdlYlBhZ2VQcm94eS5jcHAKaW5kZXggMmRhZjA2NTUxOTBiZDAxZjM1MTUyMzBkODY1NmE0
NWMwYjVkYWJlYy4uMmRmMmI5OWYyYzUyOWI1YWZhZjJiNTUxMzU4NWVmZGZhM2Q4ZjdlZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQ
cm94eS5jcHAKQEAgLTI0NiwzICsyNDYsMTIgQEAgdm9pZCBRdERlc2t0b3BXZWJQYWdlUHJveHk6
OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2KQogICAgIGVsc2UKICAgICAgICAgUU9iamVjdDo6
dGltZXJFdmVudChldik7CiB9CisKK3ZvaWQgUXREZXNrdG9wV2ViUGFnZVByb3h5OjpkaWRSZWNl
aXZlTWVzc2FnZUZyb21RdFJ1bnRpbWVPYmplY3QoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorewor
ICAgIFFEZXNrdG9wV2ViVmlldyogd2ViVmlldyA9IHN0YXRpY19jYXN0PFFEZXNrdG9wV2ViVmll
d1ByaXZhdGUqPihtX3ZpZXdJbnRlcmZhY2UpLT5xOworICAgIFFWYXJpYW50TWFwIHY7CisgICAg
di5pbnNlcnQoUUxhdGluMVN0cmluZygiZGF0YSIpLCBRU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICB2
Lmluc2VydChRTGF0aW4xU3RyaW5nKCJvcmlnaW4iKSwgdXJsKCkpOworICAgIGVtaXQgd2ViVmll
dy0+bWVzc2FnZVJlY2VpdmVkKHYpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5oCmluZGV4IDc1ZDEwYzczMGJiYmZiOTJiYTBk
YWYzY2FmZDUxYWVmNmMyMjQ2YzEuLjg3YTQ3Mjc1MTZmOGQyMGU2MmYxODVhOGQzZWMxOWYzOGNi
ZTE2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdERlc2t0b3BX
ZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXREZXNrdG9w
V2ViUGFnZVByb3h5LmgKQEAgLTM1LDYgKzM1LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBi
b29sIGhhbmRsZUV2ZW50KFFFdmVudCopOwogCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdChjb25zdCBTdHJpbmcmKTsKKwogcHJvdGVjdGVkOgog
ICAgIHZvaWQgcGFpbnRDb250ZW50KFFQYWludGVyKiwgY29uc3QgUVJlY3QmIGFyZWEpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNwcAppbmRleCA2
YTQ0YWQ1YjRlZGU4Mjk3ODA5ZjFjYjEzOTY5MTNiMzA0MzM1N2VkLi5lZDhmYzYyMzdhZTMyYjc5
MTc5ODZmZmI1MjkxNzk3ZmE5YWIwNDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJxd2to
aXN0b3J5X3AuaCIKICNpbmNsdWRlICJGaW5kSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIk11dGFibGVBcnJheS5oIgogI2luY2x1ZGUgIk5hdGl2
ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlF0UG9saWN5SW50ZXJmYWNlLmgiCkBAIC02MSwxNSArNjIsMTYgQEAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotCiBSZWZQdHI8V2ViQ29u
dGV4dD4gUXRXZWJQYWdlUHJveHk6OnNfZGVmYXVsdENvbnRleHQ7CiAKIHVuc2lnbmVkIFF0V2Vi
UGFnZVByb3h5OjpzX2RlZmF1bHRQYWdlUHJveHlDb3VudCA9IDA7CiAKIFBhc3NSZWZQdHI8V2Vi
Q29udGV4dD4gUXRXZWJQYWdlUHJveHk6OmRlZmF1bHRXS0NvbnRleHQoKQogewotICAgIGlmICgh
c19kZWZhdWx0Q29udGV4dCkKKyAgICBpZiAoIXNfZGVmYXVsdENvbnRleHQpIHsKICAgICAgICAg
c19kZWZhdWx0Q29udGV4dCA9IFdlYkNvbnRleHQ6OmNyZWF0ZShTdHJpbmcoKSk7CisgICAgICAg
IHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KHRvQVBJKHNfZGVmYXVsdENvbnRleHQu
Z2V0KCkpKTsKKyAgICB9CiAgICAgcmV0dXJuIHNfZGVmYXVsdENvbnRleHQ7CiB9CiAKQEAgLTEw
Nyw2ICsxMDksNyBAQCBRdFdlYlBhZ2VQcm94eTo6UXRXZWJQYWdlUHJveHkoUXRWaWV3SW50ZXJm
YWNlKiB2aWV3SW50ZXJmYWNlLCBRdFBvbGljeUludGVyZmFjZQogICAgICwgbV9jb250ZXh0KGNv
bnRleHRSZWYgPyB0b0ltcGwoY29udGV4dFJlZikgOiBkZWZhdWx0V0tDb250ZXh0KCkpCiAgICAg
LCBtX3VuZG9TdGFjayhhZG9wdFB0cihuZXcgUVVuZG9TdGFjayh0aGlzKSkpCiAgICAgLCBtX2xv
YWRQcm9ncmVzcygwKQorICAgICwgbV9xdFJ1bnRpbWVPYmplY3RFbmFibGVkKGZhbHNlKQogewog
ICAgIEFTU0VSVCh2aWV3SW50ZXJmYWNlKTsKICAgICBtX3dlYlBhZ2VQcm94eSA9IG1fY29udGV4
dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CkBAIC00NzUsNiAr
NDc4LDMxIEBAIFFTdHJpbmcgUXRXZWJQYWdlUHJveHk6OmN1c3RvbVVzZXJBZ2VudCgpIGNvbnN0
CiAgICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoV0tQYWdlQ29weUN1c3RvbVVzZXJBZ2Vu
dChwYWdlUmVmKCkpKTsKIH0KIAordm9pZCBRdFdlYlBhZ2VQcm94eTo6c2V0UXRSdW50aW1lT2Jq
ZWN0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgc3RhdGljIFN0cmluZyBtZXNzYWdlTmFt
ZSgiU2V0UXRSdW50aW1lT2JqZWN0RW5hYmxlZCIpOworCisgICAgQVNTRVJUKGVuYWJsZWQgIT0g
bV9xdFJ1bnRpbWVPYmplY3RFbmFibGVkKTsKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGhh
dmUgdG8ga2VlcCB0aGlzIGluZm9ybWF0aW9uIGluIGJvdGggcHJvY2Vzc2VzIGFuZCB0aGUgc2V0
dGluZyBpcyBhc3luY2hyb25vdXMuCisgICAgbV9xdFJ1bnRpbWVPYmplY3RFbmFibGVkID0gZW5h
YmxlZDsKKyAgICBSZWZQdHI8TXV0YWJsZUFycmF5PiBib2R5ID0gTXV0YWJsZUFycmF5OjpjcmVh
dGUoKTsKKyAgICBib2R5LT5hcHBlbmQobV93ZWJQYWdlUHJveHkuZ2V0KCkpOworICAgIFJlZlB0
cjxXZWJCb29sZWFuPiB3ZWJFbmFibGVkID0gV2ViQm9vbGVhbjo6Y3JlYXRlKGVuYWJsZWQpOwor
ICAgIGJvZHktPmFwcGVuZCh3ZWJFbmFibGVkLmdldCgpKTsKKyAgICBtX2NvbnRleHQtPnBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShtZXNzYWdlTmFtZSwgYm9keS5nZXQoKSk7Cit9CisKK3Zv
aWQgUXRXZWJQYWdlUHJveHk6OnBvc3RNZXNzYWdlVG9RdFJ1bnRpbWVPYmplY3QoY29uc3QgUVN0
cmluZyYgbWVzc2FnZSkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIG1lc3NhZ2VOYW1lKCJNZXNzYWdl
VG9RdFJ1bnRpbWVPYmplY3QiKTsKKworICAgIFJlZlB0cjxNdXRhYmxlQXJyYXk+IGJvZHkgPSBN
dXRhYmxlQXJyYXk6OmNyZWF0ZSgpOworICAgIGJvZHktPmFwcGVuZChtX3dlYlBhZ2VQcm94eS5n
ZXQoKSk7CisgICAgUmVmUHRyPFdlYlN0cmluZz4gY29udGVudHMgPSBXZWJTdHJpbmc6OmNyZWF0
ZShTdHJpbmcobWVzc2FnZSkpOworICAgIGJvZHktPmFwcGVuZChjb250ZW50cy5nZXQoKSk7Cisg
ICAgbV9jb250ZXh0LT5wb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUobWVzc2FnZU5hbWUsIGJv
ZHkuZ2V0KCkpOworfQorCiB2b2lkIFF0V2ViUGFnZVByb3h5Ojpsb2FkKGNvbnN0IFFVcmwmIHVy
bCkKIHsKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2t1cmwoV0tVUkxDcmVhdGVXaXRoUVVy
bCh1cmwpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgK
aW5kZXggMWFmODAwZDUwOTU0YzMzMTRmYjgwZWU0ZDg0ZmM5ZGUzNWZhMWFjMi4uMDYzODY1MzIx
NTY3YTdhMDVlMzM0YTA4ODM2Yjk1NDljMzRiOWEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKQEAgLTE2Myw2ICsxNjMsMTIgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0Q3VzdG9tVXNlckFnZW50KGNvbnN0IFFTdHJpbmcmKTsKICAgICBRU3RyaW5n
IGN1c3RvbVVzZXJBZ2VudCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRRdFJ1bnRpbWVPYmplY3RF
bmFibGVkKGJvb2wpOworICAgIGJvb2wgcXRSdW50aW1lT2JqZWN0RW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcXRSdW50aW1lT2JqZWN0RW5hYmxlZDsgfQorCisgICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVkTWVzc2FnZUZyb21RdFJ1bnRpbWVPYmplY3QoY29uc3QgUVN0cmluZyYpIHsgfQorICAg
IHZvaWQgcG9zdE1lc3NhZ2VUb1F0UnVudGltZU9iamVjdChjb25zdCBRU3RyaW5nJik7CisKICAg
ICBxcmVhbCB0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0OwogICAgIHFyZWFsIHBhZ2Vab29tRmFjdG9y
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUZXh0Wm9vbUZhY3RvcihxcmVhbCB6b29tRmFjdG9yKTsK
QEAgLTIwNSw2ICsyMTEsOCBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFFVbmRvU3RhY2s+IG1f
dW5kb1N0YWNrOwogICAgIGludCBtX2xvYWRQcm9ncmVzczsKKworICAgIGJvb2wgbV9xdFJ1bnRp
bWVPYmplY3RFbmFibGVkOwogfTsKIAogI2VuZGlmIC8qIFF0V2ViUGFnZVByb3h5X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8KaW5kZXggYTMxZTM1NDc4MTllYTVlZDAwZGFmYzY0OTY5NTJhZWY4YzQ5MGVjZS4u
MzQ3ZjFjN2NjZGY0ZGExYzFmYjgxN2MyMmFiODkyOWJmZTg2OTY0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8K
QEAgLTM0MCw2ICszNDAsOCBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggXAorICAgIFdlYlByb2Nlc3MvcXQvUXRCdW5k
bGUuaCBcCisgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZVBhZ2UuaCBcCiAgICAgJCRXRUJLSVQy
X0dFTkVSQVRFRF9IRUFERVJTIFwKICAgICAkJFdFQktJVDFfSEVBREVSU19TSEFSRURfV0lUSF9X
RUJLSVQyCiAKQEAgLTYwNiw2ICs2MDgsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L3F0L1dlYlBhZ2VRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgXAorICAg
IFdlYlByb2Nlc3MvcXQvUXRCdW5kbGUuY3BwIFwKKyAgICBXZWJQcm9jZXNzL3F0L1F0QnVuZGxl
UGFnZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgXAogICAg
IFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRF
RF9TT1VSQ0VTIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCA1M2U5MGQ5ZDY3MjFkNTI4NDAyZGVh
NDI3ZjE5NGZiNjYxNjAxMzNhLi5iYzE5MDYxNGM5Y2RiNjAzNWUzZGUyNTY1ZTY0NTI2YzE5MDJk
YTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJXS0J1bmRs
ZUluaXRpYWxpemUuaCIKICNpbmNsdWRlIDxRTGlicmFyeT4KICNlbmRpZgogCkBAIC04MSw2ICs4
MiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6YXRpb25V
c2VyRGF0YSk7CiAgICAgdm9pZCBzZXRTYW5kYm94RXh0ZW5zaW9uKFBhc3NSZWZQdHI8U2FuZGJv
eEV4dGVuc2lvbj4gc2FuZGJveEV4dGVuc2lvbikgeyBtX3NhbmRib3hFeHRlbnNpb24gPSBzYW5k
Ym94RXh0ZW5zaW9uOyB9CiAKKyNpZiBQTEFURk9STShRVCkKKyAgICB2b2lkIGxvYWRXaXRoRnVu
Y3Rpb24oV0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHIpOworI2VuZGlmCisKICAgICAvLyBB
UEkKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoV0tCdW5kbGVDbGllbnQqKTsKICAgICB2b2lk
IHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIEFQSU9iamVjdCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1bmRsZVF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvcXQvSW5qZWN0
ZWRCdW5kbGVRdC5jcHAKaW5kZXggYTUxODNiMTM1YmZjMDA3MDYwNWEzMTRmNTFhNzBlZWVkYzY3
NzA5ZC4uOTE0YjhjNjc2NDFlODIzOTdmYmVhNWJjZjk3MzY5MjEwYjIxZmVkMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1
bmRsZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L3F0L0luamVjdGVkQnVuZGxlUXQuY3BwCkBAIC01NCw2ICs1NCwxMiBAQCBib29sIEluamVjdGVk
QnVuZGxlOjpsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAordm9pZCBJbmplY3RlZEJ1bmRsZTo6bG9hZFdpdGhGdW5jdGlvbihXS0J1
bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFsaXplRnVuY3Rpb24pCit7CisgICAgQVNT
RVJUKGluaXRpYWxpemVGdW5jdGlvbik7CisgICAgaW5pdGlhbGl6ZUZ1bmN0aW9uKHRvQVBJKHRo
aXMpLCAwKTsKK30KKwogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250QXNjZW50
SGFjaygpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0
QnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdW5kbGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE3ODJlNDk3OGU0MjhkMThkMDg1MzM4MDRhYTA4ZWY4NGI0OGQwYzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVuZGxlLmNwcApA
QCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJRdEJ1bmRsZS5oIgorCisjaW5jbHVkZSAiUXRCdW5kbGVQYWdlLmgi
CisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLQnVuZGxlUGFnZS5oIgorI2luY2x1
ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1N0
cmluZ1F0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1F0QnVuZGxlOjp+UXRCdW5kbGUoKQoreworICAgIC8vIEZvciBPd25QdHIncyBzYWtl
LgorfQorCitRdEJ1bmRsZSYgUXRCdW5kbGU6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIFF0QnVu
ZGxlJiBzaGFyZWQgPSAqbmV3IFF0QnVuZGxlOworICAgIHJldHVybiBzaGFyZWQ7Cit9CisKK3Zv
aWQgUXRCdW5kbGU6OmluaXRpYWxpemUoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1R5cGVSZWYgaW5p
dGlhbGl6YXRpb25Vc2VyRGF0YSkKK3sKKyAgICBtX2J1bmRsZSA9IGJ1bmRsZTsKKyAgICBXS0J1
bmRsZUNsaWVudCBjbGllbnQgPSB7CisgICAgICAgIGtXS0J1bmRsZUNsaWVudEN1cnJlbnRWZXJz
aW9uLAorICAgICAgICB0aGlzLAorICAgICAgICBkaWRDcmVhdGVQYWdlLAorICAgICAgICB3aWxs
RGVzdHJveVBhZ2UsCisgICAgICAgIDAsIC8vIGRpZEluaXRpYWxpemVQYWdlR3JvdXAKKyAgICAg
ICAgZGlkUmVjZWl2ZU1lc3NhZ2UKKyAgICB9OworICAgIFdLQnVuZGxlU2V0Q2xpZW50KG1fYnVu
ZGxlLCAmY2xpZW50KTsKK30KKwordm9pZCBRdEJ1bmRsZTo6ZGlkQ3JlYXRlUGFnZShXS0J1bmRs
ZVJlZiwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgc3RhdGljX2Nhc3Q8UXRCdW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSkt
PmRpZENyZWF0ZVBhZ2UocGFnZSk7Cit9CisKK3ZvaWQgUXRCdW5kbGU6OndpbGxEZXN0cm95UGFn
ZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UXRCdW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGll
bnRJbmZvKSktPndpbGxEZXN0cm95UGFnZShwYWdlKTsKK30KKwordm9pZCBRdEJ1bmRsZTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAg
IHN0YXRpY19jYXN0PFF0QnVuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5k
aWRSZWNlaXZlTWVzc2FnZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkpOworfQorCit2b2lkIFF0
QnVuZGxlOjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQoreworICAgIG1fcGFn
ZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBRdEJ1bmRsZVBhZ2UodGhpcywgcGFnZSkpKTsKK30KKwor
dm9pZCBRdEJ1bmRsZTo6d2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQorewor
ICAgIHNpemVfdCBzaXplID0gbV9wYWdlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZXNbaV0tPnBhZ2UoKSA9PSBwYWdl
KSB7CisgICAgICAgICAgICBtX3BhZ2VzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFF0QnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZShX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQoreworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiTWVzc2FnZVRvUXRS
dW50aW1lT2JqZWN0IikpIHsKKyAgICAgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0FycmF5R2V0VHlwZUlEKCkpOwor
CisgICAgICAgIFdLQXJyYXlSZWYgYm9keSA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgQVNTRVJUKFdLQXJyYXlHZXRTaXplKGJvZHkpID09IDIpOworICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQoV0tBcnJheUdldEl0ZW1BdEluZGV4KGJvZHksIDApKSA9
PSBXS0J1bmRsZVBhZ2VHZXRUeXBlSUQoKSk7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChX
S0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMSkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwor
CisgICAgICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVQYWdl
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMCkpOworICAgICAgICBXS1N0cmluZ1Jl
ZiBjb250ZW50cyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoYm9keSwgMSkpOworCisgICAgICAgIFF0QnVuZGxlUGFnZSogYnVuZGxlUGFnZSA9IGJ1bmRs
ZVBhZ2VGb3JQYWdlUmVmKHBhZ2UpOworICAgICAgICBpZiAoIWJ1bmRsZVBhZ2UpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGJ1bmRsZVBhZ2UtPmRpZFJlY2VpdmVNZXNzYWdlVG9RdFJ1
bnRpbWVPYmplY3QoY29udGVudHMpOworCisgICAgfSBlbHNlIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UXRSdW50aW1lT2JqZWN0RW5hYmxlZCIpKSB7
CisgICAgICAgIEFTU0VSVChtZXNzYWdlQm9keSk7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
ZChtZXNzYWdlQm9keSkgPT0gV0tBcnJheUdldFR5cGVJRCgpKTsKKworICAgICAgICBXS0FycmF5
UmVmIGJvZHkgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAg
IEFTU0VSVChXS0FycmF5R2V0U2l6ZShib2R5KSA9PSAyKTsKKyAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKFdLQXJyYXlHZXRJdGVtQXRJbmRleChib2R5LCAwKSkgPT0gV0tCdW5kbGVQYWdlR2V0
VHlwZUlEKCkpOworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQoV0tBcnJheUdldEl0ZW1BdElu
ZGV4KGJvZHksIDEpKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisKKyAgICAgICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSBzdGF0aWNfY2FzdDxXS0J1bmRsZVBhZ2VSZWY+KFdLQXJyYXlHZXRJ
dGVtQXRJbmRleChib2R5LCAwKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMSkpOwor
CisgICAgICAgIFF0QnVuZGxlUGFnZSogYnVuZGxlUGFnZSA9IGJ1bmRsZVBhZ2VGb3JQYWdlUmVm
KHBhZ2UpOworICAgICAgICBpZiAoIWJ1bmRsZVBhZ2UpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGJ1bmRsZVBhZ2UtPnNldFF0UnVudGltZU9iamVjdEVuYWJsZWQoZW5hYmxlZCk7Cisg
ICAgfQorfQorCitRdEJ1bmRsZVBhZ2UqIFF0QnVuZGxlOjpidW5kbGVQYWdlRm9yUGFnZVJlZihj
b25zdCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSkgY29uc3QKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1f
cGFnZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX3BhZ2VzW2ldLT5wYWdlKCkgPT0gcGFnZSkKKyAgICAgICAgICAgIHJldHVy
biBtX3BhZ2VzW2ldLmdldCgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0
QnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVuZGxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjYzN2Y0ODU0NmU2Yzc1NTUwYzY5NmIwN2QzZTllM2IyNmUzODc0NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdW5kbGUuaApAQCAtMCww
ICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBRdEJ1bmRsZV9oCisj
ZGVmaW5lIFF0QnVuZGxlX2gKKworI2luY2x1ZGUgIldLQnVuZGxlLmgiCisjaW5jbHVkZSAiV0tC
dW5kbGVQYWdlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFF0QnVuZGxlUGFnZTsKKworY2xh
c3MgUXRCdW5kbGUgeworcHVibGljOgorICAgIH5RdEJ1bmRsZSgpOworCisgICAgc3RhdGljIFF0
QnVuZGxlJiBzaGFyZWQoKTsKKyAgICB2b2lkIGluaXRpYWxpemUoV0tCdW5kbGVSZWYsIFdLVHlw
ZVJlZiBpbml0aWFsaXphdGlvblVzZXJEYXRhKTsKKworICAgIFdLQnVuZGxlUmVmIHRvUmVmKCkg
Y29uc3QgeyByZXR1cm4gbV9idW5kbGU7IH0KKworICAgIC8vIEJ1bmRsZSBDbGllbnQKKyAgICBz
dGF0aWMgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYsIGNv
bnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVSZWYs
IFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKFdLQnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVm
IG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkKik7CisKKyAgICB2b2lkIGRpZENyZWF0ZVBhZ2UoV0tC
dW5kbGVQYWdlUmVmKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95UGFnZShXS0J1bmRsZVBhZ2VSZWYp
OworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdL
VHlwZVJlZiBtZXNzYWdlQm9keSk7CisKK3ByaXZhdGU6CisgICAgUXRCdW5kbGVQYWdlKiBidW5k
bGVQYWdlRm9yUGFnZVJlZihjb25zdCBXS0J1bmRsZVBhZ2VSZWYpIGNvbnN0OworCisgICAgLy8g
RklYTUU6IENhbiB3ZSB1c2UgSGFzaE1hcCBvZiBPd25QdHJzPyBPciBzb21ldGhpbmcgZXF1aXZh
bGVudD8KKyAgICBWZWN0b3I8T3duUHRyPFF0QnVuZGxlUGFnZT4gPiBtX3BhZ2VzOworICAgIFdL
QnVuZGxlUmVmIG1fYnVuZGxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBRdEJ1bmRsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1F0QnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVuZGxl
UGFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk3YTYwZmIyNWViZjYzNDc0MDVhMWE4NjEwZmY3NTk4ZTUy
M2M0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRC
dW5kbGVQYWdlLmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRdEJ1bmRsZVBhZ2UuaCIKKworI2luY2x1
ZGUgIlF0QnVuZGxlLmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLQnVuZGxl
RnJhbWUuaCIKKyNpbmNsdWRlICJXS0J1bmRsZVBhZ2UuaCIKKyNpbmNsdWRlICJXS0J1bmRsZVNj
cmlwdFdvcmxkLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXS1N0cmlu
Zy5oIgorI2luY2x1ZGUgIldLU3RyaW5nUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldLU3RyaW5nUXQu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNS
ZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1F0QnVuZGxlUGFnZTo6UXRCdW5k
bGVQYWdlKFF0QnVuZGxlKiBidW5kbGUsIFdLQnVuZGxlUGFnZVJlZiBwYWdlKQorICAgIDogbV9i
dW5kbGUoYnVuZGxlKQorICAgICwgbV9wYWdlKHBhZ2UpCisgICAgLCBtX3F0UnVudGltZU9iamVj
dCgwKQorICAgICwgbV9xdFJ1bnRpbWVPYmplY3RFbmFibGVkKGZhbHNlKQoreworICAgIFdLQnVu
ZGxlUGFnZUxvYWRlckNsaWVudCBsb2FkZXJDbGllbnQgPSB7CisgICAgICAgIGtXS0J1bmRsZVBh
Z2VMb2FkZXJDbGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgdGhpcywKKyAgICAgICAgMCwg
Ly8gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZQorICAgICAgICAwLCAv
LyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUKKyAgICAgICAgMCwgLy8g
ZGlkQ29tbWl0TG9hZEZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9h
ZEZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorICAgICAgICAw
LCAvLyBkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZFNhbWVE
b2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRSZWNlaXZlVGl0bGVG
b3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRGaXJzdExheW91dEZvckZyYW1lCisgICAgICAgIDAs
IC8vIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lCisgICAgICAgIDAsIC8v
IGRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeQorICAgICAgICAwLCAvLyBkaWREaXNwbGF5SW5z
ZWN1cmVDb250ZW50Rm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkUnVuSW5zZWN1cmVDb250ZW50
Rm9yRnJhbWUKKyAgICAgICAgZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZSwKKyAgICAgICAgMCwgLy8g
ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZQorICAgICAgICAwLCAvLyB3aWxsUGVyZm9y
bUNsaWVudFJlZGlyZWN0Rm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkSGFuZGxlT25sb2FkRXZl
bnRzRm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkTGF5b3V0Rm9yRnJhbWUKKyAgICB9OworICAg
IFdLQnVuZGxlUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQobV9wYWdlLCAmbG9hZGVyQ2xpZW50KTsK
K30KKworUXRCdW5kbGVQYWdlOjp+UXRCdW5kbGVQYWdlKCkKK3sKKyAgICBpZiAoIW1fcXRSdW50
aW1lT2JqZWN0KQorICAgICAgICByZXR1cm47CisgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOworICAgIEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKKyAg
ICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIG1fcXRSdW50aW1lT2JqZWN0KTsKK30KKwordm9p
ZCBRdEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UXRCdW5kbGVQYWdl
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5kaWRDbGVhcldpbmRvd0ZvckZyYW1l
KGZyYW1lLCB3b3JsZCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHF0X3Bvc3RNZXNzYWdlQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiopCit7CisgICAgLy8gRklYTUU6IHNob3VsZCBpdCB3b3JrIHJlZ2FyZGxl
c3Mgb2YgdGhlIHRoaXNPYmplY3Q/CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEgfHwgIUpT
VmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBRdEJ1bmRsZVBhZ2UqIGJ1bmRsZVBh
Z2UgPSByZWludGVycHJldF9jYXN0PFF0QnVuZGxlUGFnZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgQVNTRVJUKGJ1bmRsZVBhZ2UpOworCisgICAgLy8gRklYTUU6IG5l
ZWRlZD8KKyAgICBpZiAoIWJ1bmRsZVBhZ2UtPnF0UnVudGltZU9iamVjdEVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IGpzQ29udGVudHMgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIGFyZ3VtZW50c1swXSwgMCk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRl
bnRzKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGpzQ29udGVudHMuZ2V0KCkp
KTsKKyAgICBidW5kbGVQYWdlLT5wb3N0TWVzc2FnZUZyb21RdFJ1bnRpbWVPYmplY3QoY29udGVu
dHMuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kwordm9pZCBRdEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkKK3sKKyAgICBpZiAoIVdL
QnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgfHwgV0tCdW5kbGVTY3JpcHRXb3JsZE5vcm1h
bFdvcmxkKCkgIT0gd29ybGQpCisgICAgICAgIHJldHVybjsKKyAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZy
YW1lLCB3b3JsZCk7CisgICAgcmVnaXN0ZXJRdFJ1bnRpbWVPYmplY3QoY29udGV4dCk7Cit9CisK
K3ZvaWQgUXRCdW5kbGVQYWdlOjpwb3N0TWVzc2FnZUZyb21RdFJ1bnRpbWVPYmplY3QoV0tTdHJp
bmdSZWYgY29udGVudHMpCit7CisgICAgc3RhdGljIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lID0g
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1lc3NhZ2VGcm9tUXRSdW50aW1lT2JqZWN0
Iik7CisgICAgV0tUeXBlUmVmIGJvZHlbXSA9IHsgcGFnZSgpLCBjb250ZW50cyB9OworICAgIFdL
UmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQXJyYXlDcmVhdGUo
Ym9keSwgc2l6ZW9mKGJvZHkpIC8gc2l6ZW9mKFdLVHlwZVJlZikpKTsKKyAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKG1fYnVuZGxlLT50b1JlZigpLCBtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworfQorCitzdGF0aWMgSlNPYmplY3RSZWYgY3JlYXRlRmFrZU1lc3NhZ2VFdmVudChKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dCwgV0tTdHJpbmdSZWYgZGF0YSkKK3sKKyAgICBzdGF0aWMg
SlNTdHJpbmdSZWYgZGF0YU5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGF0
YSIpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzRGF0YSA9IFdLU3RyaW5nQ29w
eUpTU3RyaW5nKGRhdGEpOworICAgIEpTT2JqZWN0UmVmIGZha2VNZXNzYWdlID0gSlNPYmplY3RN
YWtlKGNvbnRleHQsIDAsIDApOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgZmFr
ZU1lc3NhZ2UsIGRhdGFOYW1lLCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBqc0RhdGEuZ2V0
KCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5LCAwKTsKKyAgICByZXR1cm4gZmFrZU1lc3NhZ2U7Cit9CisKK3ZvaWQgUXRCdW5k
bGVQYWdlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUXRSdW50aW1lT2JqZWN0KFdLU3RyaW5nUmVmIGNv
bnRlbnRzKQoreworICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBvbm1lc3NhZ2VOYW1lID0gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9ubWVzc2FnZSIpOworCisgICAgaWYgKCFtX3F0UnVu
dGltZU9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOworICAgIEpTR2xvYmFsQ29udGV4
dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsK
KworICAgIEpTVmFsdWVSZWYgb25tZXNzYWdlVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIG1fcXRSdW50aW1lT2JqZWN0LCBvbm1lc3NhZ2VOYW1lLCAwKTsKKyAgICBpZiAoIUpT
VmFsdWVJc09iamVjdChjb250ZXh0LCBvbm1lc3NhZ2VWYWx1ZSkpCisgICAgICAgIHJldHVybjsK
KworICAgIEpTT2JqZWN0UmVmIG9ubWVzc2FnZUZ1bmN0aW9uID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIG9ubWVzc2FnZVZhbHVlLCAwKTsKKyAgICBpZiAoIUpTT2JqZWN0SXNGdW5jdGlvbihj
b250ZXh0LCBvbm1lc3NhZ2VGdW5jdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAgIEpTT2Jq
ZWN0UmVmIG1lc3NhZ2UgPSBjcmVhdGVGYWtlTWVzc2FnZUV2ZW50KGNvbnRleHQsIGNvbnRlbnRz
KTsKKyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIG9ubWVzc2FnZUZ1bmN0aW9u
LCAwLCAxLCAmbWVzc2FnZSwgMCk7Cit9CisKK3ZvaWQgUXRCdW5kbGVQYWdlOjpzZXRRdFJ1bnRp
bWVPYmplY3RFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoZW5hYmxlZCA9PSBtX3F0
UnVudGltZU9iamVjdEVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBOb3RlIHRoYXQg
dGhpcyB3aWxsIHRha2UgZWZmZWN0IG9ubHkgYWZ0ZXIgdGhlIG5leHQgcGFnZSBsb2FkLgorICAg
IG1fcXRSdW50aW1lT2JqZWN0RW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKK3ZvaWQgUXRCdW5kbGVQ
YWdlOjpyZWdpc3RlclF0UnVudGltZU9iamVjdChKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCkK
K3sKKyAgICBzdGF0aWMgSlNTdHJpbmdSZWYgcG9zdE1lc3NhZ2VOYW1lID0gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInBvc3RNZXNzYWdlIik7CisgICAgc3RhdGljIEpTU3RyaW5nUmVm
IG5hdmlnYXRvck5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmF2aWdhdG9y
Iik7CisgICAgc3RhdGljIEpTU3RyaW5nUmVmIHF0UnVudGltZU5hbWUgPSBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygicXRSdW50aW1lIik7CisKKyAgICBpZiAobV9xdFJ1bnRpbWVPYmpl
Y3QpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgbV9xdFJ1bnRpbWVPYmplY3Qp
OworICAgIG1fcXRSdW50aW1lT2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIHF0UnVudGlt
ZU9iamVjdENsYXNzKCksIHRoaXMpOworICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIG1fcXRS
dW50aW1lT2JqZWN0KTsKKworICAgIEpTT2JqZWN0UmVmIHBvc3RNZXNzYWdlID0gSlNPYmplY3RN
YWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgcG9zdE1lc3NhZ2VOYW1lLCBxdF9wb3N0
TWVzc2FnZUNhbGxiYWNrKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG1fcXRS
dW50aW1lT2JqZWN0LCBwb3N0TWVzc2FnZU5hbWUsIHBvc3RNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKwor
ICAgIEpTVmFsdWVSZWYgbmF2aWdhdG9yVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgbmF2aWdhdG9yTmFtZSwgMCk7
CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgbmF2aWdhdG9yVmFsdWUpKQorICAg
ICAgICByZXR1cm47CisgICAgSlNPYmplY3RSZWYgbmF2aWdhdG9yT2JqZWN0ID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIG5hdmlnYXRvclZhbHVlLCAwKTsKKyAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHQsIG5hdmlnYXRvck9iamVjdCwgcXRSdW50aW1lTmFtZSwgbV9xdFJ1bnRpbWVP
YmplY3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHksIDApOworfQorCitKU0NsYXNzUmVmIFF0QnVuZGxlUGFnZTo6cXRSdW50aW1l
T2JqZWN0Q2xhc3MoKQoreworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmID0gMDsKKyAg
ICBpZiAoIWNsYXNzUmVmKSB7CisgICAgICAgIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIHF0UnVu
dGltZU9iamVjdENsYXNzID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgICAgIGNsYXNz
UmVmID0gSlNDbGFzc0NyZWF0ZSgmcXRSdW50aW1lT2JqZWN0Q2xhc3MpOworICAgIH0KKyAgICBy
ZXR1cm4gY2xhc3NSZWY7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1bmRsZVBhZ2UuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvcXQvUXRCdW5kbGVQYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhiMTdhNWM2OTQx
NWRkZTMxOWE5MTBmM2I5MDc0YjUyNDdjZmU5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdW5kbGVQYWdlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUXRCdW5kbGVQYWdlX2gKKyNkZWZpbmUgUXRC
dW5kbGVQYWdlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0UmVmLmgiCisjaW5jbHVkZSAiV0tCdW5k
bGVQYWdlLmgiCisjaW5jbHVkZSAiV0tCdW5kbGVTY3JpcHRXb3JsZC5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgUXRCdW5kbGU7CisKK2NsYXNzIFF0QnVuZGxlUGFnZSB7CitwdWJs
aWM6CisgICAgUXRCdW5kbGVQYWdlKFF0QnVuZGxlKiwgV0tCdW5kbGVQYWdlUmVmKTsKKyAgICB+
UXRCdW5kbGVQYWdlKCk7CisKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZTsgfQorCisgICAgLy8gTG9hZGVyIENsaWVudAorICAgIHN0YXRpYyB2b2lkIGRp
ZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCBX
S0J1bmRsZVNjcmlwdFdvcmxkUmVmLCBjb25zdCB2b2lkKik7CisKKyAgICB2b2lkIGRpZENsZWFy
V2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZik7
CisKKyAgICB2b2lkIHBvc3RNZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdChXS1N0cmluZ1JlZiBt
ZXNzYWdlKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlVG9RdFJ1bnRpbWVPYmplY3QoV0tT
dHJpbmdSZWYgbWVzc2FnZSk7CisKKyAgICBib29sIHF0UnVudGltZU9iamVjdEVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX3F0UnVudGltZU9iamVjdEVuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFF0
UnVudGltZU9iamVjdEVuYWJsZWQoYm9vbCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZWdpc3Rl
clF0UnVudGltZU9iamVjdChKU0dsb2JhbENvbnRleHRSZWYpOworCisgICAgc3RhdGljIEpTQ2xh
c3NSZWYgcXRSdW50aW1lT2JqZWN0Q2xhc3MoKTsKKworICAgIFF0QnVuZGxlKiBtX2J1bmRsZTsK
KyAgICBXS0J1bmRsZVBhZ2VSZWYgbV9wYWdlOworICAgIEpTT2JqZWN0UmVmIG1fcXRSdW50aW1l
T2JqZWN0OworICAgIGJvb2wgbV9xdFJ1bnRpbWVPYmplY3RFbmFibGVkOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBRdEJ1bmRsZVBhZ2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCmluZGV4IDA1YTBjNjRkMmQzYjdh
ZjA5ODc3NTU3YmJmNGViNTg3MmZkMTA1MTQuLjM2YTIxYzM5OGJjNmVmN2YzNDg0NTMwYjljYTQ0
YmIzMmYwYTFiOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2Vi
UHJvY2Vzc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nl
c3NRdC5jcHAKQEAgLTI2LDggKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgogCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKKyNpbmNsdWRl
ICJRdEJ1bmRsZS5oIgorI2luY2x1ZGUgIldLQnVuZGxlSW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUg
IldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKLQogI2luY2x1ZGUgPFFDb3JlQXBwbGlj
YXRpb24+CiAjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgogI2luY2x1ZGUgPFFOZXR3
b3JrQ29va2llSmFyPgpAQCAtNTYsNiArNTgsMTEgQEAgc3RhdGljIHZvaWQgcGFyZW50UHJvY2Vz
c0RpZWRDYWxsYmFjayh2b2lkKikKIH0KICNlbmRpZgogCit2b2lkIHF0X3drX1dLQnVuZGxlSW5p
dGlhbGl6ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiBpbml0aWFsaXphdGlvblVzZXJE
YXRhKQoreworICAgIFF0QnVuZGxlOjpzaGFyZWQoKS5pbml0aWFsaXplKGJ1bmRsZSwgaW5pdGlh
bGl6YXRpb25Vc2VyRGF0YSk7Cit9CisKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFs
aXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKICAgICBtX25ldHdv
cmtBY2Nlc3NNYW5hZ2VyID0gbmV3IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjsKQEAgLTgzLDYgKzkw
LDE0IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhjb25z
dCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzCiAjaWYgRU5BQkxFKFNQRUVDSF9JTlBVVCkK
ICAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRTcGVlY2hJbnB1dEVuYWJs
ZWQoZmFsc2UpOwogI2VuZGlmCisKKyAgICAvLyBXZSdsbCBvbmx5IGluc3RhbGwgaWYgd2UgZG9u
J3QgaGF2ZSBvbmUgZ2l2ZW4gYnkgdGhlIFVJIHByb2Nlc3MuIEN1cnJlbnRseSBvbmx5IFdUUiBw
cm92aWRlcworICAgIC8vIGl0cyBvd24gYnVuZGxlLgorICAgIGlmIChwYXJhbWV0ZXJzLmluamVj
dGVkQnVuZGxlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9pbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpjcmVhdGUoU3RyaW5nKCkpOworICAgICAgICBtX2luamVjdGVkQnVuZGxl
LT5zZXRTYW5kYm94RXh0ZW5zaW9uKFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShwYXJhbWV0ZXJz
LmluamVjdGVkQnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSkpOworICAgICAgICBtX2luamVjdGVk
QnVuZGxlLT5sb2FkV2l0aEZ1bmN0aW9uKHF0X3drX1dLQnVuZGxlSW5pdGlhbGl6ZSk7CisgICAg
fQogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113177</attachid>
            <date>2011-11-01 09:30:18 -0700</date>
            <delta_ts>2011-11-02 10:29:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70545-20111101173016.patch</filename>
            <type>text/plain</type>
            <size>36358</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg5NjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxYTZmNjk4MDFjN2VjYjY4
MTFjYjQzNmI3MzIzMWRiMTY2YzEzZGRmLi4zNTU0NzNiZTFhNTEyYzU1ZWNmZDcxZDgwMDgyZjQ5
MzE0MzAzYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODQgQEAKKzIwMTEtMTEtMDEgIENhaW8g
TWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
KworICAgICAgICBbUXRdIEltcGxlbWVudCBtZXNzYWdlIGV4Y2hhbmdlIGJldHdlZW4gV2ViVmll
dyBhbmQgdGhlIHdlYiBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MDU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZHMgYSBtZWNoYW5pc20gZm9yIHRoZSBXZWJWaWV3IHRvIHNlbmQgbWVzc2Fn
ZXMgdG8gdGhlIEphdmFTY3JpcHQgZW52aXJvbm1lbnQKKyAgICAgICAgb2YgdGhlIHdlYiBwYWdl
LiBJbiB0aGUgV2ViVmlldyB3ZSBoYXZlIGEgbWV0aG9kIHBvc3RNZXNzYWdlKCkgYW5kIGEgc2ln
bmFsCisgICAgICAgIG1lc3NhZ2VSZWNlaXZlZCgpLCB3aGlsZSBpbiB0aGUgd2ViIHBhZ2Ugd2Ug
ZXhwb3NlIGEgbmF2aWdhdG9yLnF0UnVudGltZSBvYmplY3QKKyAgICAgICAgd2l0aCBhIHBvc3RN
ZXNzYWdlKCkgbWV0aG9kIGFuZCBhIG9ubWVzc2FnZSBwcm9wZXJ0eS4gVGhlIG1lc3NhZ2VzIGFy
ZSBvYmplY3RzCisgICAgICAgIHRoYXQgZm9sbG93IHRoZSBzYW1lIHN0cnVjdHVyZSBhcyBNZXNz
YWdlRXZlbnRzLgorCisgICAgICAgIFRoZSBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQs
IGFuZCBjYW4gYmUgZW5hYmxlZCBieSBzZXR0aW5nCisgICAgICAgIFFXZWJQcmVmZXJlbmNlczo6
cXRSdW50aW1lT2JqZWN0RW5hYmxlZCBwcm9wZXJ0eSB0byB0cnVlLiBDaGFuZ2VzIHRha2UgZWZm
ZWN0IGFmdGVyCisgICAgICAgIHRoZSBuZXh0IGxvYWQoKS4gUU1MIHRlc3RzIGFyZSBpbmNsdWRl
ZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL3F0L0NsaWVudEltcGwuY3BwOgorICAgICAgICAoc2V0dXBDb250ZXh0SW5qZWN0ZWRC
dW5kbGVDbGllbnQpOiBIZWxwZXIgdG8gcmVnaXN0ZXIgdGhlIGluamVjdGVkIGJ1bmRsZSBjbGll
bnQuCisgICAgICAgIChxdF93a19kaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
IERlY29kZSBhbmQgZGlzcGF0Y2ggYSBtZXNzYWdlIHJlY2VpdmVkCisgICAgICAgIGZyb20gdGhl
IFdlYlByb2Nlc3MgdG8gdGhlIFdlYlBhZ2VQcm94eS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Q
YWdlQ2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnQ6OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbVF0UnVudGltZU9iamVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tUXRSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgIEhhbmRsZSBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHRoZSBRdCBydW50aW1lIG9i
amVjdCB2aWEgdGhlIGluamVjdGVkIGJ1bmRsZS4gQ2FsbGVkCisgICAgICAgIGZyb20gdGhlIENs
aWVudEltcGwuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXREZXNrdG9wV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKFF0RGVza3RvcFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tUXRSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXREZXNrdG9wV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcu
Y3BwOgorICAgICAgICAoUURlc2t0b3BXZWJWaWV3Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuaDoKKyAgICAgICAgQWRkIG5ldyBzaWdu
YWwgYW5kIHNsb3QgdG8gUURlc2t0b3BXZWJWaWV3IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHBh
Z2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHA6Cisg
ICAgICAgIChRV2ViUHJlZmVyZW5jZXM6OnF0UnVudGltZU9iamVjdEVuYWJsZWQpOgorICAgICAg
ICAoUVdlYlByZWZlcmVuY2VzOjpzZXRRdFJ1bnRpbWVPYmplY3RFbmFibGVkKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5oOgorICAgICAgICBBZGQgYSBuZXcg
cHJlZmVyZW5jZSB0byBjb250cm9sIHRoZSBwcmVzZW5jZSBvZiB0aGUgUXQgcnVudGltZSBvYmpl
Y3QuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BX
ZWJWaWV3L3RzdF9tZXNzYWdpbmcucW1sOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FtbHRlc3RzL2NvbW1vbi9tZXNzYWdpbmcuaHRtbDogQWRkZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm86CisgICAgICAg
IFFNTCB0ZXN0cyBmb3IgRGVza3RvcFdlYlZpZXcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmRlZmF1bHRXS0Nv
bnRleHQpOiBzZXR1cCB0aGUgaW5qZWN0ZWQgYnVuZGxlIGNsaWVudCBmb3IgdGhpcyB0aGUKKyAg
ICAgICAgZGVmYXVsdCBjb250ZXh0IHNvIHdlIGNhbiBsaXN0ZW4gdG8gbWVzc2FnZXMgZnJvbSBp
dC4KKworICAgICAgICAoUXRXZWJQYWdlUHJveHk6OlF0V2ViUGFnZVByb3h5KToKKyAgICAgICAg
KFF0V2ViUGFnZVByb3h5OjpzZXRRdFJ1bnRpbWVPYmplY3RFbmFibGVkKToKKyAgICAgICAgKFF0
V2ViUGFnZVByb3h5Ojpwb3N0TWVzc2FnZVRvUXRSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5Ojpx
dFJ1bnRpbWVPYmplY3RFbmFibGVkKToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpyZWNlaXZl
ZE1lc3NhZ2VGcm9tUXRSdW50aW1lT2JqZWN0KToKKyAgICAgICAgRW5hYmxpbmcgYW5kIHNlbmRp
bmcgbWVzc2FnZXMgdG8gdGhlIFF0IHJ1bnRpbWUgb2JqZWN0IGFyZSBkb25lIGJ5IHNlbmRpbmcg
bWVzc2FnZXMgdG8KKyAgICAgICAgdGhlIGluamVjdGVkIGJ1bmRsZSwgaWRlbnRpZnlpbmcgdGhl
IHBhZ2UgdGhhdCB3ZSB3YW50IHRvIGFjdCBvbi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvcXQv
UXRCdWlsdGluQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRCdWlsdGluQnVuZGxlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6UXRCdWlsdGluQnVuZGxlOjpkaWRSZWNlaXZl
TWVzc2FnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGUuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZVBhZ2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpRdEJ1aWx0aW5CdW5kbGVQYWdlOjpRdEJ1aWx0aW5CdW5kbGVQYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6UXRCdWlsdGluQnVuZGxlUGFnZTo6flF0QnVpbHRpbkJ1bmRsZVBhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpRdEJ1aWx0aW5CdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6cXRfcG9zdE1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OlF0QnVpbHRpbkJ1bmRsZVBhZ2U6OnBvc3RNZXNzYWdlRnJvbVF0UnVudGltZU9i
amVjdCk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZUZha2VNZXNzYWdlRXZlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpRdEJ1aWx0aW5CdW5kbGVQYWdlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUXRSdW50
aW1lT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6UXRCdWlsdGluQnVuZGxlUGFnZTo6c2V0UXRS
dW50aW1lT2JqZWN0RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0QnVpbHRpbkJ1bmRsZVBh
Z2U6OnJlZ2lzdGVyUXRSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6UXRCdWlsdGlu
QnVuZGxlUGFnZTo6cXRSdW50aW1lT2JqZWN0Q2xhc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
cXQvUXRCdWlsdGluQnVuZGxlUGFnZS5oOgorICAgICAgICAoV2ViS2l0OjpRdEJ1aWx0aW5CdW5k
bGVQYWdlOjpxdFJ1bnRpbWVPYmplY3RFbmFibGVkKToKKwogMjAxMS0xMS0wMSAgS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVGhlIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSBzaG91bGQgY29uc2lkZXIgRFBJIGFkanVzdG1lbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3
LmNwcAppbmRleCA4ZWY0NzkyODI4ODFjNTYzOWYwZDNmMWJhM2IzMTAyNDhjYWY4OGM1Li4yZmM4
MmQyMzZmN2EyNzY5ODE2MzZmNTI4YWUxYjA0NjBhMjhhOWZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuY3BwCkBAIC0yNzEsNiAr
MjcxLDExIEBAIHZvaWQgUURlc2t0b3BXZWJWaWV3Ojpsb2FkKGNvbnN0IFFVcmwmIHVybCkKICAg
ICBkLT5wYWdlLmxvYWQodXJsKTsKIH0KIAordm9pZCBRRGVza3RvcFdlYlZpZXc6OnBvc3RNZXNz
YWdlKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgZC0+cGFnZS5wb3N0TWVzc2FnZVRv
UXRSdW50aW1lT2JqZWN0KG1lc3NhZ2UpOworfQorCiBRVXJsIFFEZXNrdG9wV2ViVmlldzo6dXJs
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+cGFnZS51cmwoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oCmluZGV4IDZlYmM5M2MxMTQ4
MmJjNDEwMTlhOTI3MTI2NzNhNGI1YWFlYTc3ZGIuLmRlZDI5MGM4ZTJhMGQ1NGQ4ODRkOTg3OTlk
ODU1ZjU1OWMzMmJkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcWRlc2t0b3B3ZWJ2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xZGVza3RvcHdlYnZpZXcuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAKIHB1YmxpYyBR
X1NMT1RTOgogICAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYpOworICAgICB2b2lkIHBvc3RNZXNz
YWdlKGNvbnN0IFFTdHJpbmcmKTsKIAogUV9TSUdOQUxTOgogICAgIHZvaWQgdGl0bGVDaGFuZ2Vk
KGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKQEAgLTk0LDYgKzk1LDcgQEAgUV9TSUdOQUxTOgogICAg
IHZvaWQgbG9hZFByb2dyZXNzQ2hhbmdlZChpbnQgcHJvZ3Jlc3MpOwogICAgIHZvaWQgdXJsQ2hh
bmdlZChjb25zdCBRVXJsJiB1cmwpOwogICAgIHZvaWQgbGlua0hvdmVyZWQoY29uc3QgUVVybCYg
dXJsLCBjb25zdCBRU3RyaW5nJiB0aXRsZSk7CisgICAgdm9pZCBtZXNzYWdlUmVjZWl2ZWQoY29u
c3QgUVZhcmlhbnRNYXAmIG1lc3NhZ2UpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7CkBAIC0xMjAsNiArMTIyLDcgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBldmVudChRRXZlbnQqKTsKIAogcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgUXREZXNrdG9wV2ViUGFnZVByb3h5OwogICAgIFFEZXNrdG9wV2ViVmlldyhXS0Nv
bnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKICAgICBX
S1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAKaW5kZXggMjJkYWU1NGUyYmQxYjRlMmI4
ZjlmZDYyNTg3N2UxODExZDJlOTMxZi4uZGRkZWM0YzE5NTA1OWNhNDAyOTZkZjRkZWZkNTRmMDE3
MzQ0MGIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Vi
cHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdl
YnByZWZlcmVuY2VzLmNwcApAQCAtMjg1LDYgKzI4NSwxOSBAQCB2b2lkIFFXZWJQcmVmZXJlbmNl
czo6c2V0RG5zUHJlZmV0Y2hFbmFibGVkKGJvb2wgZW5hYmxlKQogICAgIGVtaXQgZG5zUHJlZmV0
Y2hFbmFibGVkQ2hhbmdlZCgpOwogfQogCitib29sIFFXZWJQcmVmZXJlbmNlczo6cXRSdW50aW1l
T2JqZWN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnF0V2ViUGFnZVByb3h5LT5x
dFJ1bnRpbWVPYmplY3RFbmFibGVkKCk7Cit9CisKK3ZvaWQgUVdlYlByZWZlcmVuY2VzOjpzZXRR
dFJ1bnRpbWVPYmplY3RFbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUgPT0g
cXRSdW50aW1lT2JqZWN0RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgZC0+cXRXZWJQ
YWdlUHJveHktPnNldFF0UnVudGltZU9iamVjdEVuYWJsZWQoZW5hYmxlKTsKKyAgICBlbWl0IHF0
UnVudGltZU9iamVjdEVuYWJsZWRDaGFuZ2VkKCk7Cit9CisKIFFTdHJpbmcgUVdlYlByZWZlcmVu
Y2VzOjpzdGFuZGFyZEZvbnRGYW1pbHkoKSBjb25zdAogewogICAgIHJldHVybiBkLT5mb250RmFt
aWx5KFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OlN0YW5kYXJkRm9udCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuaAppbmRleCBlMTdkYmJl
ZjJiZDA0YTM5M2QxYmY0NjVlNzBmY2MyOGJjNGZiMzU4Li4zODE1NTIzYWJmMzEwY2Q3NjdiZTE5
N2RjNTVmY2VmZTdjNWI1NTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXdlYnByZWZlcmVuY2VzLmgKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFFf
UFJPUEVSVFkoYm9vbCB4c3NBdWRpdGluZ0VuYWJsZWQgUkVBRCB4c3NBdWRpdGluZ0VuYWJsZWQg
V1JJVEUgc2V0WHNzQXVkaXRpbmdFbmFibGVkIE5PVElGWSB4c3NBdWRpdGluZ0VuYWJsZWRDaGFu
Z2VkIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkIFJF
QUQgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCBXUklURSBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVk
IE5PVElGWSBwcml2YXRlQnJvd3NpbmdFbmFibGVkQ2hhbmdlZCBGSU5BTCkKICAgICBRX1BST1BF
UlRZKGJvb2wgZG5zUHJlZmV0Y2hFbmFibGVkIFJFQUQgZG5zUHJlZmV0Y2hFbmFibGVkIFdSSVRF
IHNldERuc1ByZWZldGNoRW5hYmxlZCBOT1RJRlkgZG5zUHJlZmV0Y2hFbmFibGVkQ2hhbmdlZCBG
SU5BTCkKKyAgICBRX1BST1BFUlRZKGJvb2wgcXRSdW50aW1lT2JqZWN0RW5hYmxlZCBSRUFEIHF0
UnVudGltZU9iamVjdEVuYWJsZWQgV1JJVEUgc2V0UXRSdW50aW1lT2JqZWN0RW5hYmxlZCBOT1RJ
RlkgcXRSdW50aW1lT2JqZWN0RW5hYmxlZENoYW5nZWQgRklOQUwpCiAKICAgICBRX1BST1BFUlRZ
KFFTdHJpbmcgc3RhbmRhcmRGb250RmFtaWx5IFJFQUQgc3RhbmRhcmRGb250RmFtaWx5IFdSSVRF
IHNldFN0YW5kYXJkRm9udEZhbWlseSBOT1RJRlkgc3RhbmRhcmRGb250RmFtaWx5Q2hhbmdlZCBG
SU5BTCkKICAgICBRX1BST1BFUlRZKFFTdHJpbmcgZml4ZWRGb250RmFtaWx5IFJFQUQgZml4ZWRG
b250RmFtaWx5IFdSSVRFIHNldEZpeGVkRm9udEZhbWlseSBOT1RJRlkgZml4ZWRGb250RmFtaWx5
Q2hhbmdlZCBGSU5BTCkKQEAgLTc1LDYgKzc2LDkgQEAgcHVibGljOgogICAgIGJvb2wgZG5zUHJl
ZmV0Y2hFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREbnNQcmVmZXRjaEVuYWJsZWQoYm9v
bCBlbmFibGUpOwogCisgICAgYm9vbCBxdFJ1bnRpbWVPYmplY3RFbmFibGVkKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRRdFJ1bnRpbWVPYmplY3RFbmFibGVkKGJvb2wpOworCiAgICAgUVN0cmluZyBz
dGFuZGFyZEZvbnRGYW1pbHkoKSBjb25zdDsKICAgICB2b2lkIHNldFN0YW5kYXJkRm9udEZhbWls
eShjb25zdCBRU3RyaW5nJiBmYW1pbHkpOwogCkBAIC0xMTEsNiArMTE1LDcgQEAgUV9TSUdOQUxT
OgogICAgIHZvaWQgeHNzQXVkaXRpbmdFbmFibGVkQ2hhbmdlZCgpOwogICAgIHZvaWQgcHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZENoYW5nZWQoKTsKICAgICB2b2lkIGRuc1ByZWZldGNoRW5hYmxlZENo
YW5nZWQoKTsKKyAgICB2b2lkIHF0UnVudGltZU9iamVjdEVuYWJsZWRDaGFuZ2VkKCk7CiAKICAg
ICB2b2lkIHN0YW5kYXJkRm9udEZhbWlseUNoYW5nZWQoKTsKICAgICB2b2lkIGZpeGVkRm9udEZh
bWlseUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5xbWwgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3
L3RzdF9tZXNzYWdpbmcucW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2YjI4ZDQzMDE5YzFkM2U2ZjlkOWFmZDQ2
ZmQ5NmFmNGQ3ODlkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9tZXNzYWdpbmcucW1s
CkBAIC0wLDAgKzEsMTA3IEBACitpbXBvcnQgUXRRdWljayAyLjAKK2ltcG9ydCBRdFRlc3QgMS4w
CitpbXBvcnQgUXRXZWJLaXQgMy4wCisKK0l0ZW0geworICAgIERlc2t0b3BXZWJWaWV3IHsKKyAg
ICAgICAgaWQ6IHdlYlZpZXcKKyAgICAgICAgcHJvcGVydHkgdmFyaWFudCBsYXN0TWVzc2FnZQor
ICAgICAgICBwcmVmZXJlbmNlcy5xdFJ1bnRpbWVPYmplY3RFbmFibGVkOiB0cnVlCisgICAgICAg
IG9uTWVzc2FnZVJlY2VpdmVkOiB7CisgICAgICAgICAgICBsYXN0TWVzc2FnZSA9IG1lc3NhZ2UK
KyAgICAgICAgfQorICAgIH0KKworICAgIERlc2t0b3BXZWJWaWV3IHsKKyAgICAgICAgaWQ6IG90
aGVyV2ViVmlldworICAgICAgICBwcm9wZXJ0eSB2YXJpYW50IGxhc3RNZXNzYWdlCisgICAgICAg
IHByZWZlcmVuY2VzLnF0UnVudGltZU9iamVjdEVuYWJsZWQ6IHRydWUKKyAgICAgICAgb25NZXNz
YWdlUmVjZWl2ZWQ6IHsKKyAgICAgICAgICAgIGxhc3RNZXNzYWdlID0gbWVzc2FnZQorICAgICAg
ICB9CisgICAgfQorCisgICAgRGVza3RvcFdlYlZpZXcgeworICAgICAgICBpZDogZGlzYWJsZWRX
ZWJWaWV3CisgICAgICAgIHByb3BlcnR5IGJvb2wgcmVjZWl2ZWRNZXNzYWdlCisgICAgICAgIHBy
ZWZlcmVuY2VzLnF0UnVudGltZU9iamVjdEVuYWJsZWQ6IGZhbHNlCisgICAgICAgIG9uTWVzc2Fn
ZVJlY2VpdmVkOiB7CisgICAgICAgICAgICByZWNlaXZlZE1lc3NhZ2UgPSB0cnVlCisgICAgICAg
IH0KKyAgICB9CisKKyAgICBTaWduYWxTcHkgeworICAgICAgICBpZDogbG9hZFNweQorICAgICAg
ICB0YXJnZXQ6IHdlYlZpZXcKKyAgICAgICAgc2lnbmFsTmFtZTogImxvYWRTdWNjZWVkZWQiCisg
ICAgfQorCisgICAgU2lnbmFsU3B5IHsKKyAgICAgICAgaWQ6IG1lc3NhZ2VTcHkKKyAgICAgICAg
dGFyZ2V0OiB3ZWJWaWV3CisgICAgICAgIHNpZ25hbE5hbWU6ICJtZXNzYWdlUmVjZWl2ZWQiCisg
ICAgfQorCisgICAgU2lnbmFsU3B5IHsKKyAgICAgICAgaWQ6IG90aGVyTG9hZFNweQorICAgICAg
ICB0YXJnZXQ6IG90aGVyV2ViVmlldworICAgICAgICBzaWduYWxOYW1lOiAibG9hZFN1Y2NlZWRl
ZCIKKyAgICB9CisKKyAgICBTaWduYWxTcHkgeworICAgICAgICBpZDogb3RoZXJNZXNzYWdlU3B5
CisgICAgICAgIHRhcmdldDogb3RoZXJXZWJWaWV3CisgICAgICAgIHNpZ25hbE5hbWU6ICJtZXNz
YWdlUmVjZWl2ZWQiCisgICAgfQorCisgICAgU2lnbmFsU3B5IHsKKyAgICAgICAgaWQ6IGRpc2Fi
bGVkV2ViVmlld0xvYWRTcHkKKyAgICAgICAgdGFyZ2V0OiBkaXNhYmxlZFdlYlZpZXcKKyAgICAg
ICAgc2lnbmFsTmFtZTogImxvYWRTdWNjZWVkZWQiCisgICAgfQorCisgICAgVGVzdENhc2Ugewor
ICAgICAgICBuYW1lOiAiRGVza3RvcFdlYlZpZXdNZXNzYWdpbmciCisgICAgICAgIHByb3BlcnR5
IHVybCB0ZXN0VXJsOiBRdC5yZXNvbHZlZFVybCgiLi4vY29tbW9uL21lc3NhZ2luZy5odG1sIikK
KworICAgICAgICBmdW5jdGlvbiBpbml0KCkgeworICAgICAgICAgICAgbG9hZFNweS5jbGVhcigp
CisgICAgICAgICAgICBtZXNzYWdlU3B5LmNsZWFyKCkKKyAgICAgICAgICAgIHdlYlZpZXcubGFz
dE1lc3NhZ2UgPSBudWxsCisgICAgICAgICAgICBvdGhlckxvYWRTcHkuY2xlYXIoKQorICAgICAg
ICAgICAgb3RoZXJNZXNzYWdlU3B5LmNsZWFyKCkKKyAgICAgICAgICAgIG90aGVyV2ViVmlldy5s
YXN0TWVzc2FnZSA9IG51bGwKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RfYmFz
aWMoKSB7CisgICAgICAgICAgICB3ZWJWaWV3LmxvYWQodGVzdFVybCkKKyAgICAgICAgICAgIGxv
YWRTcHkud2FpdCgpCisgICAgICAgICAgICB3ZWJWaWV3LnBvc3RNZXNzYWdlKCJIRUxMTyIpCisg
ICAgICAgICAgICBtZXNzYWdlU3B5LndhaXQoKQorICAgICAgICAgICAgY29tcGFyZSh3ZWJWaWV3
Lmxhc3RNZXNzYWdlLmRhdGEsICJPTExFSCIpCisgICAgICAgICAgICBjb21wYXJlKHdlYlZpZXcu
bGFzdE1lc3NhZ2Uub3JpZ2luLnRvU3RyaW5nKCksIHRlc3RVcmwudG9TdHJpbmcoKSkKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RfdHdvV2ViVmlld3MoKSB7CisgICAgICAgICAg
ICB3ZWJWaWV3LmxvYWQodGVzdFVybCkKKyAgICAgICAgICAgIG90aGVyV2ViVmlldy5sb2FkKHRl
c3RVcmwpCisgICAgICAgICAgICBsb2FkU3B5LndhaXQoKQorICAgICAgICAgICAgb3RoZXJMb2Fk
U3B5LndhaXQoKQorICAgICAgICAgICAgd2ViVmlldy5wb3N0TWVzc2FnZSgiRklSU1QiKQorICAg
ICAgICAgICAgb3RoZXJXZWJWaWV3LnBvc3RNZXNzYWdlKCJTRUNPTkQiKQorICAgICAgICAgICAg
bWVzc2FnZVNweS53YWl0KCkKKyAgICAgICAgICAgIG90aGVyTWVzc2FnZVNweS53YWl0KCkKKyAg
ICAgICAgICAgIGNvbXBhcmUod2ViVmlldy5sYXN0TWVzc2FnZS5kYXRhLCAiVFNSSUYiKQorICAg
ICAgICAgICAgY29tcGFyZShvdGhlcldlYlZpZXcubGFzdE1lc3NhZ2UuZGF0YSwgIkROT0NFUyIp
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0X2Rpc2FibGVkKCkgeworICAgICAg
ICAgICAgZGlzYWJsZWRXZWJWaWV3LmxvYWQodGVzdFVybCkKKyAgICAgICAgICAgIHZlcmlmeSgh
ZGlzYWJsZWRXZWJWaWV3LnByZWZlcmVuY2VzLnF0UnVudGltZU9iamVjdEVuYWJsZWQpCisgICAg
ICAgICAgICBkaXNhYmxlZFdlYlZpZXdMb2FkU3B5LndhaXQoKQorICAgICAgICAgICAgZGlzYWJs
ZWRXZWJWaWV3LnBvc3RNZXNzYWdlKCJISSIpCisgICAgICAgICAgICB3YWl0KDEwMDApCisgICAg
ICAgICAgICB2ZXJpZnkoIWRpc2FibGVkV2ViVmlldy5yZWNlaXZlZE1lc3NhZ2UpCisgICAgICAg
IH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3FtbHRlc3RzL2NvbW1vbi9tZXNzYWdpbmcuaHRtbCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvY29tbW9uL21lc3NhZ2luZy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkMDIzMzdhYjk4ODVjMzdjN2Y2YzUyNzUyZWY5MzU1NTVkOGU2M2IKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3Rz
L2NvbW1vbi9tZXNzYWdpbmcuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IWRvY3R5cGUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7Cisg
ICAgICAgIG5hdmlnYXRvci5xdFJ1bnRpbWUub25tZXNzYWdlID0gZnVuY3Rpb24oZXYpIHsKKyAg
ICAgICAgICAgIHZhciByZXZlcnNlZCA9IGV2LmRhdGEuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2lu
KCIiKTsKKyAgICAgICAgICAgIG5hdmlnYXRvci5xdFJ1bnRpbWUucG9zdE1lc3NhZ2UocmV2ZXJz
ZWQpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9
ImluaXRpYWxpemUoKTsiPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm8gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybwpp
bmRleCBiN2Y1N2QzZTI0MmQ1YjBiYzc3ZTc4NWNlOTM3OTNmODdhZDg0NWM4Li43OTg3MjVmMTBl
Yjg1NzVjYTUyM2RiNjc4NTQzNTRmNTg3YzNkODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybwpA
QCAtMTUsNiArMTUsNyBAQCBPVEhFUl9GSUxFUyArPSBcCiAgICAgRGVza3RvcFdlYlZpZXcvdHN0
X2xvYWRQcm9ncmVzcy5xbWwgXAogICAgIERlc2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NT
aWduYWwucW1sIFwKICAgICBEZXNrdG9wV2ViVmlldy90c3RfbGlua0hvdmVyZWQucW1sIFwKKyAg
ICBEZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbCBcCiAgICAgVG91Y2hXZWJWaWV3L3Rz
dF9wcm9wZXJ0aWVzLnFtbCBcCiAgICAgVG91Y2hXZWJWaWV3L3RzdF9sb2FkLnFtbCBcCiAgICAg
VG91Y2hXZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAppbmRleCBmMTk0Nzg3M2EwMjFjYWJhNmQ4ZTRkNzFiMDVmMzgyNmY1
YzgzNzdmLi5kM2MwZmViMzg1MjdmMTZiZTA0MzQyNTMzM2E0N2NhMWMyYmMzYTY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTEwMyw2ICsxMDMsNyBAQCBwdWJsaWM6
CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5k
Wm9vbWFibGVBcmVhKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tUXRSdW50
aW1lT2JqZWN0KGNvbnN0IFN0cmluZyYpIHsgfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAppbmRleCAzYzZjMzIzNzY0MzYwNjU0YzY4NWVmNDg1NDAxMDRkZjczODJiYjNjLi45MWRlOGY1
YmNhY2JkYmFmMjFjZGE4OWRkZGQyMzhiMjU4NDQ0MWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMjI2MCw2ICsyMjYwLDExIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQog
CiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGaW5kWm9vbWFibGVBcmVh
Rm9yUG9pbnQocG9pbnQpLCBtX3BhZ2VJRCk7CiB9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21RdFJ1bnRpbWVPYmplY3QoY29uc3QgU3RyaW5nJiBjb250ZW50cykK
K3sKKyAgICBtX3BhZ2VDbGllbnQtPmRpZFJlY2VpdmVNZXNzYWdlRnJvbVF0UnVudGltZU9iamVj
dChjb250ZW50cyk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZGU2N2Q0NjZjYjc0YjM5ZmFi
YTI3NjMyMGFkZThiYWUxYmY1MWIzMi4uM2U2M2U5Y2M0Y2Y3NWEzM2Q2NGU5YmEyODdmNGNjOGUw
Zjk1NDVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNTI0
LDYgKzUyNCw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZvaWQgZmluZFpv
b21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZUZyb21RdFJ1bnRpbWVPYmplY3QoY29uc3QgU3RyaW5nJik7CiAjZW5k
aWYKIAogICAgIHZvaWQgYWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0NsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwu
Y3BwCmluZGV4IGVhZTVmMjE4MzZiNGRjYmFlZTFhNjRmNjk0ZmM3OWNkMDA4OTllNjQuLjRhNWNk
MTUxNDE5YzM3ZDAyYzE4NWIyMTQyZmFhN2ExMGJlZGRjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxX
S0hpdFRlc3RSZXN1bHQuaD4KICNpbmNsdWRlIDxXS09wZW5QYW5lbFBhcmFtZXRlcnMuaD4KICNp
bmNsdWRlIDxXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V0tQYWdlLmg+
CisjaW5jbHVkZSA8V0tTdHJpbmcuaD4KICNpbmNsdWRlIDxXS1R5cGUuaD4KICNpbmNsdWRlIDxX
S1VSTFJlcXVlc3QuaD4KIApAQCAtMjc5LDYgKzI4MSwyNSBAQCBzdGF0aWMgdm9pZCBxdF93a19k
ZWNpZGVQb2xpY3lGb3JSZXNwb25zZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwg
V0tVUgogICAgIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZShsaXN0ZW5lcik7CiB9CiAKK3ZvaWQg
cXRfd2tfZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVmLCBX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lk
KikKK3sKKyAgICBpZiAoIVdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJNZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdCIpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQobWVzc2FnZUJvZHkpOworICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tBcnJheUdldFR5cGVJRCgpKTsKKworICAgIFdLQXJyYXlSZWYgYm9keSA9IHN0YXRpY19j
YXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICBBU1NFUlQoV0tBcnJheUdldFNpemUo
Ym9keSkgPT0gMik7CisgICAgQVNTRVJUKFdLR2V0VHlwZUlEKFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChib2R5LCAwKSkgPT0gV0tQYWdlR2V0VHlwZUlEKCkpOworICAgIEFTU0VSVChXS0dldFR5cGVJ
RChXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMSkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
OworCisgICAgV0tQYWdlUmVmIHBhZ2UgPSBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+KFdLQXJyYXlH
ZXRJdGVtQXRJbmRleChib2R5LCAwKSk7CisgICAgV0tTdHJpbmdSZWYgc3RyID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChib2R5LCAxKSk7CisKKyAgICB0
b0ltcGwocGFnZSktPmRpZFJlY2VpdmVNZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdCh0b0ltcGwo
c3RyKS0+c3RyaW5nKCkpOworfQorCiB2b2lkIHNldHVwUGFnZUxvYWRlckNsaWVudChRdFdlYlBh
Z2VQcm94eSogcXRXZWJQYWdlUHJveHksIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogewog
ICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkQ2xpZW50OwpAQCAtMzIzLDMgKzM0NCwxMiBAQCB2
b2lkIHNldHVwUGFnZVBvbGljeUNsaWVudChRdFBvbGljeUludGVyZmFjZSogcG9saWN5SW50ZXJm
YWNlLCBXZWJQYWdlUHJveHkqIHdlYgogICAgIHBvbGljeUNsaWVudC5kZWNpZGVQb2xpY3lGb3JS
ZXNwb25zZSA9IHF0X3drX2RlY2lkZVBvbGljeUZvclJlc3BvbnNlOwogICAgIFdLUGFnZVNldFBh
Z2VQb2xpY3lDbGllbnQodG9BUEkod2ViUGFnZVByb3h5KSwgJnBvbGljeUNsaWVudCk7CiB9CisK
K3ZvaWQgc2V0dXBDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCit7CisgICAgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQgaW5qZWN0ZWRCdW5kbGVD
bGllbnQ7CisgICAgbWVtc2V0KCZpbmplY3RlZEJ1bmRsZUNsaWVudCwgMCwgc2l6ZW9mKFdLQ29u
dGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KSk7CisgICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQudmVy
c2lvbiA9IGtXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudEN1cnJlbnRWZXJzaW9uOworICAg
IGluamVjdGVkQnVuZGxlQ2xpZW50LmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
ID0gcXRfd2tfZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGU7CisgICAgV0tDb250
ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29udGV4dCwgJmluamVjdGVkQnVuZGxlQ2xpZW50
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oCmluZGV4IGMyOGEw
MTBkZDViMzBhNGVhMzlmMmQwODc0OTIyOGQwYjk1MmViZWUuLjRlZjg5NzVjZGY3Njg1ZmE4M2Rk
ODlhMzYyMjY4YTlmYjU4NTk2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9DbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVu
dEltcGwuaApAQCAtMjAsMTYgKzIwLDE5IEBACiAjaWZuZGVmIENsaWVudEltcGxfaAogI2RlZmlu
ZSBDbGllbnRJbXBsX2gKIAotI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlLmg+CisjaW5jbHVkZSA8
V2ViS2l0Mi9XS0NvbnRleHQuaD4KIAogY2xhc3MgUXRXZWJQYWdlUHJveHk7CiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIFF0UG9saWN5SW50ZXJmYWNlOwogY2xhc3MgV2ViUGFnZVByb3h5Owog
fQorCiB2b2lkIHNldHVwUGFnZUxvYWRlckNsaWVudChRdFdlYlBhZ2VQcm94eSosIFdlYktpdDo6
V2ViUGFnZVByb3h5Kik7CiB2b2lkIHNldHVwUGFnZVVpQ2xpZW50KFF0V2ViUGFnZVByb3h5Kiwg
V2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKIHZvaWQgc2V0dXBQYWdlUG9saWN5Q2xpZW50KFdlYktp
dDo6UXRQb2xpY3lJbnRlcmZhY2UqLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogCit2b2lkIHNl
dHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KFdLQ29udGV4dFJlZik7CisKICNlbmRpZiAv
KiBDbGllbnRJbXBsX2ggKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXREZXNrdG9wV2ViUGFnZVByb3h5LmNwcAppbmRleCAyZGFmMDY1NTE5MGJkMDFmMzUxNTIz
MGQ4NjU2YTQ1YzBiNWRhYmVjLi4yZGYyYjk5ZjJjNTI5YjVhZmFmMmI1NTEzNTg1ZWZkZmEzZDhm
N2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXREZXNrdG9wV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXREZXNrdG9w
V2ViUGFnZVByb3h5LmNwcApAQCAtMjQ2LDMgKzI0NiwxMiBAQCB2b2lkIFF0RGVza3RvcFdlYlBh
Z2VQcm94eTo6dGltZXJFdmVudChRVGltZXJFdmVudCogZXYpCiAgICAgZWxzZQogICAgICAgICBR
T2JqZWN0Ojp0aW1lckV2ZW50KGV2KTsKIH0KKwordm9pZCBRdERlc2t0b3BXZWJQYWdlUHJveHk6
OmRpZFJlY2VpdmVNZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgUURlc2t0b3BXZWJWaWV3KiB3ZWJWaWV3ID0gc3RhdGljX2Nhc3Q8UURlc2t0
b3BXZWJWaWV3UHJpdmF0ZSo+KG1fdmlld0ludGVyZmFjZSktPnE7CisgICAgUVZhcmlhbnRNYXAg
djsKKyAgICB2Lmluc2VydChRTGF0aW4xU3RyaW5nKCJkYXRhIiksIFFTdHJpbmcobWVzc2FnZSkp
OworICAgIHYuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm9yaWdpbiIpLCB1cmwoKSk7CisgICAgZW1p
dCB3ZWJWaWV3LT5tZXNzYWdlUmVjZWl2ZWQodik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXREZXNrdG9wV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXREZXNrdG9wV2ViUGFnZVByb3h5LmgKaW5kZXggNzVkMTBjNzMwYmJi
ZmI5MmJhMGRhZjNjYWZkNTFhZWY2YzIyNDZjMS4uODdhNDcyNzUxNmY4ZDIwZTYyZjE4NWE4ZDNl
YzE5ZjM4Y2JlMTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
RGVza3RvcFdlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dERlc2t0b3BXZWJQYWdlUHJveHkuaApAQCAtMzUsNiArMzUsOCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoUUV2ZW50Kik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tUXRSdW50aW1lT2JqZWN0KGNvbnN0IFN0cmluZyYpOworCiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBwYWludENvbnRlbnQoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYgYXJl
YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3Bw
CmluZGV4IDZhNDRhZDViNGVkZTgyOTc4MDlmMWNiMTM5NjkxM2IzMDQzMzU3ZWQuLmVkOGZjNjIz
N2FlMzJiNzkxNzk4NmZmYjUyOTE3OTdmYTlhYjA0MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgInF3a2hpc3RvcnlfcC5oIgogI2luY2x1ZGUgIkZpbmRJbmRpY2F0b3IuaCIKICNpbmNsdWRl
ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiTXV0YWJsZUFycmF5LmgiCiAjaW5jbHVk
ZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiUXRQb2xpY3lJbnRlcmZhY2UuaCIKQEAgLTYxLDE1ICs2MiwxNiBAQAogdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0KIFJlZlB0
cjxXZWJDb250ZXh0PiBRdFdlYlBhZ2VQcm94eTo6c19kZWZhdWx0Q29udGV4dDsKIAogdW5zaWdu
ZWQgUXRXZWJQYWdlUHJveHk6OnNfZGVmYXVsdFBhZ2VQcm94eUNvdW50ID0gMDsKIAogUGFzc1Jl
ZlB0cjxXZWJDb250ZXh0PiBRdFdlYlBhZ2VQcm94eTo6ZGVmYXVsdFdLQ29udGV4dCgpCiB7Ci0g
ICAgaWYgKCFzX2RlZmF1bHRDb250ZXh0KQorICAgIGlmICghc19kZWZhdWx0Q29udGV4dCkgewog
ICAgICAgICBzX2RlZmF1bHRDb250ZXh0ID0gV2ViQ29udGV4dDo6Y3JlYXRlKFN0cmluZygpKTsK
KyAgICAgICAgc2V0dXBDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQodG9BUEkoc19kZWZhdWx0
Q29udGV4dC5nZXQoKSkpOworICAgIH0KICAgICByZXR1cm4gc19kZWZhdWx0Q29udGV4dDsKIH0K
IApAQCAtMTA3LDYgKzEwOSw3IEBAIFF0V2ViUGFnZVByb3h5OjpRdFdlYlBhZ2VQcm94eShRdFZp
ZXdJbnRlcmZhY2UqIHZpZXdJbnRlcmZhY2UsIFF0UG9saWN5SW50ZXJmYWNlCiAgICAgLCBtX2Nv
bnRleHQoY29udGV4dFJlZiA/IHRvSW1wbChjb250ZXh0UmVmKSA6IGRlZmF1bHRXS0NvbnRleHQo
KSkKICAgICAsIG1fdW5kb1N0YWNrKGFkb3B0UHRyKG5ldyBRVW5kb1N0YWNrKHRoaXMpKSkKICAg
ICAsIG1fbG9hZFByb2dyZXNzKDApCisgICAgLCBtX3F0UnVudGltZU9iamVjdEVuYWJsZWQoZmFs
c2UpCiB7CiAgICAgQVNTRVJUKHZpZXdJbnRlcmZhY2UpOwogICAgIG1fd2ViUGFnZVByb3h5ID0g
bV9jb250ZXh0LT5jcmVhdGVXZWJQYWdlKHRoaXMsIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKQEAg
LTQ3NSw2ICs0NzgsMzEgQEAgUVN0cmluZyBRdFdlYlBhZ2VQcm94eTo6Y3VzdG9tVXNlckFnZW50
KCkgY29uc3QKICAgICByZXR1cm4gV0tTdHJpbmdDb3B5UVN0cmluZyhXS1BhZ2VDb3B5Q3VzdG9t
VXNlckFnZW50KHBhZ2VSZWYoKSkpOwogfQogCit2b2lkIFF0V2ViUGFnZVByb3h5OjpzZXRRdFJ1
bnRpbWVPYmplY3RFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIG1l
c3NhZ2VOYW1lKCJTZXRRdFJ1bnRpbWVPYmplY3RFbmFibGVkIik7CisKKyAgICBBU1NFUlQoZW5h
YmxlZCAhPSBtX3F0UnVudGltZU9iamVjdEVuYWJsZWQpOworICAgIC8vIEZJWE1FOiBDdXJyZW50
bHkgd2UgaGF2ZSB0byBrZWVwIHRoaXMgaW5mb3JtYXRpb24gaW4gYm90aCBwcm9jZXNzZXMgYW5k
IHRoZSBzZXR0aW5nIGlzIGFzeW5jaHJvbm91cy4KKyAgICBtX3F0UnVudGltZU9iamVjdEVuYWJs
ZWQgPSBlbmFibGVkOworICAgIFJlZlB0cjxNdXRhYmxlQXJyYXk+IGJvZHkgPSBNdXRhYmxlQXJy
YXk6OmNyZWF0ZSgpOworICAgIGJvZHktPmFwcGVuZChtX3dlYlBhZ2VQcm94eS5nZXQoKSk7Cisg
ICAgUmVmUHRyPFdlYkJvb2xlYW4+IHdlYkVuYWJsZWQgPSBXZWJCb29sZWFuOjpjcmVhdGUoZW5h
YmxlZCk7CisgICAgYm9keS0+YXBwZW5kKHdlYkVuYWJsZWQuZ2V0KCkpOworICAgIG1fY29udGV4
dC0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKG1lc3NhZ2VOYW1lLCBib2R5LmdldCgpKTsK
K30KKwordm9pZCBRdFdlYlBhZ2VQcm94eTo6cG9zdE1lc3NhZ2VUb1F0UnVudGltZU9iamVjdChj
b25zdCBRU3RyaW5nJiBtZXNzYWdlKQoreworICAgIHN0YXRpYyBTdHJpbmcgbWVzc2FnZU5hbWUo
Ik1lc3NhZ2VUb1F0UnVudGltZU9iamVjdCIpOworCisgICAgUmVmUHRyPE11dGFibGVBcnJheT4g
Ym9keSA9IE11dGFibGVBcnJheTo6Y3JlYXRlKCk7CisgICAgYm9keS0+YXBwZW5kKG1fd2ViUGFn
ZVByb3h5LmdldCgpKTsKKyAgICBSZWZQdHI8V2ViU3RyaW5nPiBjb250ZW50cyA9IFdlYlN0cmlu
Zzo6Y3JlYXRlKFN0cmluZyhtZXNzYWdlKSk7CisgICAgYm9keS0+YXBwZW5kKGNvbnRlbnRzLmdl
dCgpKTsKKyAgICBtX2NvbnRleHQtPnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShtZXNzYWdl
TmFtZSwgYm9keS5nZXQoKSk7Cit9CisKIHZvaWQgUXRXZWJQYWdlUHJveHk6OmxvYWQoY29uc3Qg
UVVybCYgdXJsKQogewogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a3VybChXS1VSTENyZWF0
ZVdpdGhRVXJsKHVybCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdl
UHJveHkuaAppbmRleCAxYWY4MDBkNTA5NTRjMzMxNGZiODBlZTRkODRmYzlkZTM1ZmExYWMyLi4w
NjM4NjUzMjE1NjdhN2EwNWUzMzRhMDg4MzZiOTU0OWMzNGI5YTA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaApAQCAtMTYzLDYgKzE2MywxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRDdXN0b21Vc2VyQWdlbnQoY29uc3QgUVN0cmluZyYpOwogICAg
IFFTdHJpbmcgY3VzdG9tVXNlckFnZW50KCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldFF0UnVudGlt
ZU9iamVjdEVuYWJsZWQoYm9vbCk7CisgICAgYm9vbCBxdFJ1bnRpbWVPYmplY3RFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9xdFJ1bnRpbWVPYmplY3RFbmFibGVkOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjZWl2ZWRNZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdChjb25zdCBRU3RyaW5nJikg
eyB9CisgICAgdm9pZCBwb3N0TWVzc2FnZVRvUXRSdW50aW1lT2JqZWN0KGNvbnN0IFFTdHJpbmcm
KTsKKwogICAgIHFyZWFsIHRleHRab29tRmFjdG9yKCkgY29uc3Q7CiAgICAgcXJlYWwgcGFnZVpv
b21GYWN0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldFRleHRab29tRmFjdG9yKHFyZWFsIHpvb21G
YWN0b3IpOwpAQCAtMjA1LDYgKzIxMSw4IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8UVVuZG9T
dGFjaz4gbV91bmRvU3RhY2s7CiAgICAgaW50IG1fbG9hZFByb2dyZXNzOworCisgICAgYm9vbCBt
X3F0UnVudGltZU9iamVjdEVuYWJsZWQ7CiB9OwogCiAjZW5kaWYgLyogUXRXZWJQYWdlUHJveHlf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5C
dW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGUu
Y3BwCmluZGV4IDEyNWVjZTAwN2I0NTE0ZWY0Y2Y3Y2ZkN2UyYzFjZTFhNmNmMWJlNDUuLmFiNzNm
NDdlYWE0OTlkZDlhMTgzMGMyM2I0ZWNmMGI4YzBmODMyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZS5jcHAKQEAgLTI4LDcgKzI4LDExIEBA
CiAjaW5jbHVkZSAiUXRCdWlsdGluQnVuZGxlLmgiCiAKICNpbmNsdWRlICJRdEJ1aWx0aW5CdW5k
bGVQYWdlLmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgogI2luY2x1ZGUgIldLQnVuZGxlUGFnZS5o
IgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNs
dWRlICJXS1N0cmluZ1F0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC01Myw3ICs1Nyw3IEBAIHZvaWQgUXRCdWlsdGluQnVuZGxlOjppbml0
aWFsaXplKFdLQnVuZGxlUmVmIGJ1bmRsZSkKICAgICAgICAgZGlkQ3JlYXRlUGFnZSwKICAgICAg
ICAgd2lsbERlc3Ryb3lQYWdlLAogICAgICAgICAwLCAvLyBkaWRJbml0aWFsaXplUGFnZUdyb3Vw
Ci0gICAgICAgIDAsIC8vIGRpZFJlY2VpdmVNZXNzYWdlCisgICAgICAgIGRpZFJlY2VpdmVNZXNz
YWdlCiAgICAgfTsKICAgICBXS0J1bmRsZVNldENsaWVudChtX2J1bmRsZSwgJmNsaWVudCk7CiB9
CkBAIC02OCw2ICs3MiwxMSBAQCB2b2lkIFF0QnVpbHRpbkJ1bmRsZTo6d2lsbERlc3Ryb3lQYWdl
KFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgY29uc3QgdgogICAgIHN0YXRpY19j
YXN0PFF0QnVpbHRpbkJ1bmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+d2ls
bERlc3Ryb3lQYWdlKHBhZ2UpOwogfQogCit2b2lkIFF0QnVpbHRpbkJ1bmRsZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tU
eXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIHN0YXRp
Y19jYXN0PFF0QnVpbHRpbkJ1bmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+
ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5KTsKK30KKwogdm9pZCBR
dEJ1aWx0aW5CdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiB7CiAg
ICAgbV9wYWdlcy5hcHBlbmQoYWRvcHRQdHIobmV3IFF0QnVpbHRpbkJ1bmRsZVBhZ2UodGhpcywg
cGFnZSkpKTsKQEAgLTkyLDQgKzEwMSw0MiBAQCBRdEJ1aWx0aW5CdW5kbGVQYWdlKiBRdEJ1aWx0
aW5CdW5kbGU6OmJ1bmRsZVBhZ2VGb3JQYWdlUmVmKGNvbnN0IFdLQnVuZGxlUGFnZVJlZgogICAg
IHJldHVybiAwOwogfQogCit2b2lkIFF0QnVpbHRpbkJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
V0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKK3sKKyAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIk1lc3NhZ2VUb1F0
UnVudGltZU9iamVjdCIpKSB7CisgICAgICAgIEFTU0VSVChtZXNzYWdlQm9keSk7CisgICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tBcnJheUdldFR5cGVJRCgpKTsK
KworICAgICAgICBXS0FycmF5UmVmIGJvZHkgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNz
YWdlQm9keSk7CisgICAgICAgIEFTU0VSVChXS0FycmF5R2V0U2l6ZShib2R5KSA9PSAyKTsKKyAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKFdLQXJyYXlHZXRJdGVtQXRJbmRleChib2R5LCAwKSkg
PT0gV0tCdW5kbGVQYWdlR2V0VHlwZUlEKCkpOworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
V0tBcnJheUdldEl0ZW1BdEluZGV4KGJvZHksIDEpKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsK
KworICAgICAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlUGFn
ZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGJvZHksIDApKTsKKyAgICAgICAgV0tTdHJpbmdS
ZWYgY29udGVudHMgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KGJvZHksIDEpKTsKKworICAgICAgICBRdEJ1aWx0aW5CdW5kbGVQYWdlKiBidW5kbGVQYWdl
ID0gYnVuZGxlUGFnZUZvclBhZ2VSZWYocGFnZSk7CisgICAgICAgIGlmICghYnVuZGxlUGFnZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnVuZGxlUGFnZS0+ZGlkUmVjZWl2ZU1lc3Nh
Z2VUb1F0UnVudGltZU9iamVjdChjb250ZW50cyk7CisKKyAgICB9IGVsc2UgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRRdFJ1bnRpbWVPYmplY3RFbmFi
bGVkIikpIHsKKyAgICAgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlkKG1lc3NhZ2VCb2R5KSA9PSBXS0FycmF5R2V0VHlwZUlEKCkpOworCisgICAgICAg
IFdLQXJyYXlSZWYgYm9keSA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgQVNTRVJUKFdLQXJyYXlHZXRTaXplKGJvZHkpID09IDIpOworICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQoV0tBcnJheUdldEl0ZW1BdEluZGV4KGJvZHksIDApKSA9PSBXS0J1bmRs
ZVBhZ2VHZXRUeXBlSUQoKSk7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0
SXRlbUF0SW5kZXgoYm9keSwgMSkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKKworICAgICAg
ICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlUGFnZVJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KGJvZHksIDApKTsKKyAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJs
ZWQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChib2R5
LCAxKSk7CisKKyAgICAgICAgUXRCdWlsdGluQnVuZGxlUGFnZSogYnVuZGxlUGFnZSA9IGJ1bmRs
ZVBhZ2VGb3JQYWdlUmVmKHBhZ2UpOworICAgICAgICBpZiAoIWJ1bmRsZVBhZ2UpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGJ1bmRsZVBhZ2UtPnNldFF0UnVudGltZU9iamVjdEVuYWJs
ZWQoZW5hYmxlZCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZS5oCmluZGV4IDM1ZjhiMWZj
ZmJlMjVkNTYyMzM4NDJjZjU5YjNlNmY0N2FmYzQxYWMuLjA2YmFlZWNlOWM0ZjE5OTU0NTJjM2Vh
ODg5MjJmZTk1MTYxNWRiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
cXQvUXRCdWlsdGluQnVuZGxlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9R
dEJ1aWx0aW5CdW5kbGUuaApAQCAtNDgsOSArNDgsMTEgQEAgcHVibGljOgogICAgIC8vIEJ1bmRs
ZSBDbGllbnQuCiAgICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlUGFnZShXS0J1bmRsZVJlZiwgV0tC
dW5kbGVQYWdlUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgd2lsbERlc3Ryb3lQ
YWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0
aWMgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShXS0J1bmRsZVJlZiwgV0tTdHJpbmdSZWYgbWVzc2Fn
ZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSwgY29uc3Qgdm9pZCopOwogCiAgICAgdm9pZCBk
aWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZik7CiAgICAgdm9pZCB3aWxsRGVzdHJveVBhZ2Uo
V0tCdW5kbGVQYWdlUmVmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVm
IG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpOwogCiBwcml2YXRlOgogICAgIFF0
QnVpbHRpbkJ1bmRsZVBhZ2UqIGJ1bmRsZVBhZ2VGb3JQYWdlUmVmKGNvbnN0IFdLQnVuZGxlUGFn
ZVJlZikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0
QnVpbHRpbkJ1bmRsZVBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1
aWx0aW5CdW5kbGVQYWdlLmNwcAppbmRleCA1YTU1NDFkZTU4ZDBmYjEwYjYxMGY3ZTJmOTczYjY4
YWMzZTBlODYxLi5iNDJkZTU1MDQwZThiMjg2YThkNTc1NzAwYjc5OGVkMzJkZmVmZTYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZVBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFn
ZS5jcHAKQEAgLTI3LDE4ICsyNywxNjggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJRdEJ1aWx0aW5CdW5kbGVQYWdlLmgiCiAKKyNpbmNsdWRlICJRdEJ1aWx0aW5CdW5kbGUuaCIK
KyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tCdW5kbGVGcmFtZS5oIgorI2luY2x1
ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1N0
cmluZ1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXS1N0cmluZ1F0LmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBRdEJ1aWx0aW5CdW5kbGVQYWdlOjpRdEJ1aWx0aW5CdW5kbGVQYWdl
KFF0QnVpbHRpbkJ1bmRsZSogYnVuZGxlLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKICAgICA6IG1f
YnVuZGxlKGJ1bmRsZSkKICAgICAsIG1fcGFnZShwYWdlKQorICAgICwgbV9xdFJ1bnRpbWVPYmpl
Y3QoMCkKKyAgICAsIG1fcXRSdW50aW1lT2JqZWN0RW5hYmxlZChmYWxzZSkKIHsKLSAgICAvLyBI
ZXJlIHdlIGNhbiBzZXQgdGhlIGJ1bmRsZSdzIHBhZ2UgY2xpZW50cy4KKyAgICBXS0J1bmRsZVBh
Z2VMb2FkZXJDbGllbnQgbG9hZGVyQ2xpZW50ID0geworICAgICAgICBrV0tCdW5kbGVQYWdlTG9h
ZGVyQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIHRoaXMsCisgICAgICAgIDAsIC8vIGRp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZENv
bW1pdExvYWRGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZQorICAgICAgICAwLCAvLyBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKKyAgICAgICAgMCwgLy8g
ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uRm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkUmVjZWl2ZVRpdGxlRm9yRnJh
bWUKKyAgICAgICAgMCwgLy8gZGlkRmlyc3RMYXlvdXRGb3JGcmFtZQorICAgICAgICAwLCAvLyBk
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRS
ZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkKKyAgICAgICAgMCwgLy8gZGlkRGlzcGxheUluc2VjdXJl
Q29udGVudEZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZy
YW1lCisgICAgICAgIGRpZENsZWFyV2luZG93Rm9yRnJhbWUsCisgICAgICAgIDAsIC8vIGRpZENh
bmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUKKyAgICAgICAgMCwgLy8gd2lsbFBlcmZvcm1DbGll
bnRSZWRpcmVjdEZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0Zv
ckZyYW1lCisgICAgICAgIDAsIC8vIGRpZExheW91dEZvckZyYW1lCisgICAgfTsKKyAgICBXS0J1
bmRsZVBhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KG1fcGFnZSwgJmxvYWRlckNsaWVudCk7CiB9CiAK
IFF0QnVpbHRpbkJ1bmRsZVBhZ2U6On5RdEJ1aWx0aW5CdW5kbGVQYWdlKCkKIHsKKyAgICBpZiAo
IW1fcXRSdW50aW1lT2JqZWN0KQorICAgICAgICByZXR1cm47CisgICAgV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOworICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZy
YW1lKTsKKyAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIG1fcXRSdW50aW1lT2JqZWN0KTsK
K30KK3ZvaWQgUXRCdWlsdGluQnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGVTY3JpcHRX
b3JsZFJlZiB3b3JsZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBzdGF0aWNfY2Fz
dDxRdEJ1aWx0aW5CdW5kbGVQYWdlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5k
aWRDbGVhcldpbmRvd0ZvckZyYW1lKGZyYW1lLCB3b3JsZCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIHF0X3Bvc3RNZXNzYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiopCit7CisgICAgLy8gRklYTUU6IHNo
b3VsZCBpdCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhlIHRoaXNPYmplY3Q/CisKKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEgfHwgIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0p
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBR
dEJ1aWx0aW5CdW5kbGVQYWdlKiBidW5kbGVQYWdlID0gcmVpbnRlcnByZXRfY2FzdDxRdEJ1aWx0
aW5CdW5kbGVQYWdlKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBBU1NF
UlQoYnVuZGxlUGFnZSk7CisKKyAgICAvLyBGSVhNRTogbmVlZGVkPworICAgIGlmICghYnVuZGxl
UGFnZS0+cXRSdW50aW1lT2JqZWN0RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganND
b250ZW50cyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCAwKTsK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29udGVudHMoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoanNDb250ZW50cy5nZXQoKSkpOworICAgIGJ1bmRsZVBhZ2UtPnBv
c3RNZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdChjb250ZW50cy5nZXQoKSk7CisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCit2b2lkIFF0QnVpbHRpbkJ1bmRs
ZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tC
dW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkKK3sKKyAgICBpZiAoIVdLQnVuZGxlRnJhbWVJc01h
aW5GcmFtZShmcmFtZSkgfHwgV0tCdW5kbGVTY3JpcHRXb3JsZE5vcm1hbFdvcmxkKCkgIT0gd29y
bGQpCisgICAgICAgIHJldHVybjsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdL
QnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3JsZCk7Cisg
ICAgcmVnaXN0ZXJRdFJ1bnRpbWVPYmplY3QoY29udGV4dCk7Cit9CisKK3ZvaWQgUXRCdWlsdGlu
QnVuZGxlUGFnZTo6cG9zdE1lc3NhZ2VGcm9tUXRSdW50aW1lT2JqZWN0KFdLU3RyaW5nUmVmIGNv
bnRlbnRzKQoreworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSA9IFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNZXNzYWdlRnJvbVF0UnVudGltZU9iamVjdCIpOworICAg
IFdLVHlwZVJlZiBib2R5W10gPSB7IHBhZ2UoKSwgY29udGVudHMgfTsKKyAgICBXS1JldGFpblB0
cjxXS0FycmF5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0FycmF5Q3JlYXRlKGJvZHksIHNp
emVvZihib2R5KSAvIHNpemVvZihXS1R5cGVSZWYpKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShtX2J1bmRsZS0+dG9SZWYoKSwgbWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LmdldCgpKTsKK30K
IAorc3RhdGljIEpTT2JqZWN0UmVmIGNyZWF0ZUZha2VNZXNzYWdlRXZlbnQoSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRhdGEpCit7CisgICAgc3RhdGljIEpTU3RyaW5n
UmVmIGRhdGFOYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRhdGEiKTsKKwor
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc0RhdGEgPSBXS1N0cmluZ0NvcHlKU1N0cmlu
ZyhkYXRhKTsKKyAgICBKU09iamVjdFJlZiBmYWtlTWVzc2FnZSA9IEpTT2JqZWN0TWFrZShjb250
ZXh0LCAwLCAwKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIGZha2VNZXNzYWdl
LCBkYXRhTmFtZSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwganNEYXRhLmdldCgpKSwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSwgMCk7CisgICAgcmV0dXJuIGZha2VNZXNzYWdlOworfQorCit2b2lkIFF0QnVpbHRpbkJ1bmRs
ZVBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlVG9RdFJ1bnRpbWVPYmplY3QoV0tTdHJpbmdSZWYgY29u
dGVudHMpCit7CisgICAgc3RhdGljIEpTU3RyaW5nUmVmIG9ubWVzc2FnZU5hbWUgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib25tZXNzYWdlIik7CisKKyAgICBpZiAoIW1fcXRSdW50
aW1lT2JqZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSk7CisgICAgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwor
CisgICAgSlNWYWx1ZVJlZiBvbm1lc3NhZ2VWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29u
dGV4dCwgbV9xdFJ1bnRpbWVPYmplY3QsIG9ubWVzc2FnZU5hbWUsIDApOworICAgIGlmICghSlNW
YWx1ZUlzT2JqZWN0KGNvbnRleHQsIG9ubWVzc2FnZVZhbHVlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgSlNPYmplY3RSZWYgb25tZXNzYWdlRnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dCwgb25tZXNzYWdlVmFsdWUsIDApOworICAgIGlmICghSlNPYmplY3RJc0Z1bmN0aW9uKGNv
bnRleHQsIG9ubWVzc2FnZUZ1bmN0aW9uKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNPYmpl
Y3RSZWYgbWVzc2FnZSA9IGNyZWF0ZUZha2VNZXNzYWdlRXZlbnQoY29udGV4dCwgY29udGVudHMp
OworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgb25tZXNzYWdlRnVuY3Rpb24s
IDAsIDEsICZtZXNzYWdlLCAwKTsKK30KKwordm9pZCBRdEJ1aWx0aW5CdW5kbGVQYWdlOjpzZXRR
dFJ1bnRpbWVPYmplY3RFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoZW5hYmxlZCA9
PSBtX3F0UnVudGltZU9iamVjdEVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyB3aWxsIHRha2UgZWZmZWN0IG9ubHkgYWZ0ZXIgdGhlIG5leHQgcGFnZSBsb2Fk
LgorICAgIG1fcXRSdW50aW1lT2JqZWN0RW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKK3ZvaWQgUXRC
dWlsdGluQnVuZGxlUGFnZTo6cmVnaXN0ZXJRdFJ1bnRpbWVPYmplY3QoSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQpCit7CisgICAgc3RhdGljIEpTU3RyaW5nUmVmIHBvc3RNZXNzYWdlTmFtZSA9
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwb3N0TWVzc2FnZSIpOworICAgIHN0YXRp
YyBKU1N0cmluZ1JlZiBuYXZpZ2F0b3JOYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIm5hdmlnYXRvciIpOworICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBxdFJ1bnRpbWVOYW1lID0g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInF0UnVudGltZSIpOworCisgICAgaWYgKG1f
cXRSdW50aW1lT2JqZWN0KQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIG1fcXRS
dW50aW1lT2JqZWN0KTsKKyAgICBtX3F0UnVudGltZU9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250
ZXh0LCBxdFJ1bnRpbWVPYmplY3RDbGFzcygpLCB0aGlzKTsKKyAgICBKU1ZhbHVlUHJvdGVjdChj
b250ZXh0LCBtX3F0UnVudGltZU9iamVjdCk7CisKKyAgICBKU09iamVjdFJlZiBwb3N0TWVzc2Fn
ZSA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGNvbnRleHQsIHBvc3RNZXNzYWdl
TmFtZSwgcXRfcG9zdE1lc3NhZ2VDYWxsYmFjayk7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShj
b250ZXh0LCBtX3F0UnVudGltZU9iamVjdCwgcG9zdE1lc3NhZ2VOYW1lLCBwb3N0TWVzc2FnZSwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSwgMCk7CisKKyAgICBKU1ZhbHVlUmVmIG5hdmlnYXRvclZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIG5hdmln
YXRvck5hbWUsIDApOworICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIG5hdmlnYXRv
clZhbHVlKSkKKyAgICAgICAgcmV0dXJuOworICAgIEpTT2JqZWN0UmVmIG5hdmlnYXRvck9iamVj
dCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBuYXZpZ2F0b3JWYWx1ZSwgMCk7CisgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBuYXZpZ2F0b3JPYmplY3QsIHF0UnVudGltZU5hbWUs
IG1fcXRSdW50aW1lT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKK30KKworSlNDbGFzc1JlZiBRdEJ1aWx0aW5C
dW5kbGVQYWdlOjpxdFJ1bnRpbWVPYmplY3RDbGFzcygpCit7CisgICAgc3RhdGljIEpTQ2xhc3NS
ZWYgY2xhc3NSZWYgPSAwOworICAgIGlmICghY2xhc3NSZWYpIHsKKyAgICAgICAgY29uc3QgSlND
bGFzc0RlZmluaXRpb24gcXRSdW50aW1lT2JqZWN0Q2xhc3MgPSBrSlNDbGFzc0RlZmluaXRpb25F
bXB0eTsKKyAgICAgICAgY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZxdFJ1bnRpbWVPYmplY3RD
bGFzcyk7CisgICAgfQorICAgIHJldHVybiBjbGFzc1JlZjsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRp
bkJ1bmRsZVBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVu
ZGxlUGFnZS5oCmluZGV4IDNmMDk4ZTliYTc5MDA0NzVjOWIzYTk2ZmFhZjQ1YTZjYjI4NzU1OGUu
LjY1Nzk2YjYyOWEwZDJjMjI5ZDUyMzU5MjdiMDVkMDI0ZWQ3NjY3NGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5oCkBAIC0yNyw3
ICsyNyw5IEBACiAjaWZuZGVmIFF0QnVpbHRpbkJ1bmRsZVBhZ2VfaAogI2RlZmluZSBRdEJ1aWx0
aW5CdW5kbGVQYWdlX2gKIAorI2luY2x1ZGUgIkpTT2JqZWN0UmVmLmgiCiAjaW5jbHVkZSAiV0tC
dW5kbGVQYWdlLmgiCisjaW5jbHVkZSAiV0tCdW5kbGVTY3JpcHRXb3JsZC5oIgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIApAQCAtNDAsOSArNDIsMjYgQEAgcHVibGljOgogCiAgICAgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KIAorICAgIC8vIExvYWRlciBD
bGllbnQuCisgICAgc3RhdGljIHZvaWQgZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZVBh
Z2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYsIGNvbnN0IHZv
aWQqKTsKKworICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVm
LCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmKTsKKworICAgIHZvaWQgcG9zdE1lc3NhZ2VGcm9tUXRS
dW50aW1lT2JqZWN0KFdLU3RyaW5nUmVmIG1lc3NhZ2UpOworICAgIHZvaWQgZGlkUmVjZWl2ZU1l
c3NhZ2VUb1F0UnVudGltZU9iamVjdChXS1N0cmluZ1JlZiBtZXNzYWdlKTsKKworICAgIGJvb2wg
cXRSdW50aW1lT2JqZWN0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcXRSdW50aW1lT2JqZWN0
RW5hYmxlZDsgfQorICAgIHZvaWQgc2V0UXRSdW50aW1lT2JqZWN0RW5hYmxlZChib29sKTsKKwog
cHJpdmF0ZToKKyAgICB2b2lkIHJlZ2lzdGVyUXRSdW50aW1lT2JqZWN0KEpTR2xvYmFsQ29udGV4
dFJlZik7CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBxdFJ1bnRpbWVPYmplY3RDbGFzcygpOwor
CiAgICAgUXRCdWlsdGluQnVuZGxlKiBtX2J1bmRsZTsKICAgICBXS0J1bmRsZVBhZ2VSZWYgbV9w
YWdlOworICAgIEpTT2JqZWN0UmVmIG1fcXRSdW50aW1lT2JqZWN0OworICAgIGJvb2wgbV9xdFJ1
bnRpbWVPYmplY3RFbmFibGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113329</attachid>
            <date>2011-11-02 10:22:29 -0700</date>
            <delta_ts>2011-11-02 10:31:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70545-20111102182227.patch</filename>
            <type>text/plain</type>
            <size>37082</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkwNTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxNjdiODNhMzdlZjVlNDlm
ODg3NTRmMDNiZGY4YTljYzg2NTYzNWZmLi43MGMzODMxYjU5MjA0MDczMThhYzE1MzZlOWFlNmNk
NzVhNDg1YjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODAgQEAKKzIwMTEtMTEtMDIgIENhaW8g
TWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
KworICAgICAgICBbUXRdIEltcGxlbWVudCBtZXNzYWdlIGV4Y2hhbmdlIGJldHdlZW4gV2ViVmll
dyBhbmQgdGhlIHdlYiBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MDU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZHMgYSBtZWNoYW5pc20gZm9yIHRoZSBXZWJWaWV3IHRvIHNlbmQgbWVzc2Fn
ZXMgdG8gdGhlIEphdmFTY3JpcHQgZW52aXJvbm1lbnQKKyAgICAgICAgb2YgdGhlIHdlYiBwYWdl
LiBJbiB0aGUgV2ViVmlldyB3ZSBoYXZlIGEgbWV0aG9kIHBvc3RNZXNzYWdlKCkgYW5kIGEgc2ln
bmFsCisgICAgICAgIG1lc3NhZ2VSZWNlaXZlZCgpLCB3aGlsZSBpbiB0aGUgd2ViIHBhZ2Ugd2Ug
ZXhwb3NlIGEgbmF2aWdhdG9yLnF0IG9iamVjdCB3aXRoIGEKKyAgICAgICAgcG9zdE1lc3NhZ2Uo
KSBtZXRob2QgYW5kIGEgb25tZXNzYWdlIHByb3BlcnR5LiBUaGUgbWVzc2FnZXMgYXJlIG9iamVj
dHMgdGhhdAorICAgICAgICBmb2xsb3cgdGhlIHNhbWUgc3RydWN0dXJlIGFzIE1lc3NhZ2VFdmVu
dHMuCisKKyAgICAgICAgVGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGNh
biBiZSBlbmFibGVkIGJ5IHNldHRpbmcKKyAgICAgICAgUVdlYlByZWZlcmVuY2VzOjpuYXZpZ2F0
b3JRdE9iamVjdEVuYWJsZWQgcHJvcGVydHkgdG8gdHJ1ZS4gQ2hhbmdlcyB0YWtlIGVmZmVjdAor
ICAgICAgICBhZnRlciB0aGUgbmV4dCBsb2FkKCkuIFFNTCB0ZXN0cyBhcmUgaW5jbHVkZWQuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9DbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxl
Q2xpZW50KTogSGVscGVyIHRvIHJlZ2lzdGVyIHRoZSBpbmplY3RlZCBidW5kbGUgY2xpZW50Lgor
ICAgICAgICAocXRfd2tfZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOiBEZWNv
ZGUgYW5kIGRpc3BhdGNoIGEgbWVzc2FnZSByZWNlaXZlZAorICAgICAgICBmcm9tIHRoZSBXZWJQ
cm9jZXNzIHRvIHRoZSBXZWJQYWdlUHJveHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNs
aWVudC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50OjpkaWRSZWNlaXZlTWVzc2FnZUZy
b21OYXZpZ2F0b3JRdE9iamVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
TmF2aWdhdG9yUXRPYmplY3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoK
KyAgICAgICAgSGFuZGxlIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gdGhlIG5hdmlnYXRvci5xdCBv
YmplY3QgdmlhIHRoZSBpbmplY3RlZCBidW5kbGUuIENhbGxlZAorICAgICAgICBmcm9tIHRoZSBD
bGllbnRJbXBsLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuY3Bw
OgorICAgICAgICAoUUJhc2VXZWJWaWV3Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChRQmFzZVdl
YlZpZXdQcml2YXRlOjpzZXRQYWdlUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cWJhc2V3ZWJ2aWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5j
ZXMuY3BwOgorICAgICAgICAoUVdlYlByZWZlcmVuY2VzOjpuYXZpZ2F0b3JRdE9iamVjdEVuYWJs
ZWQpOgorICAgICAgICAoUVdlYlByZWZlcmVuY2VzOjpzZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJs
ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmg6CisgICAg
ICAgIFRoZSBzaWduYWwsIHNsb3QgYW5kIHRoZSBzZXR0aW5nIHRvIGVuYWJsZSB0aGUgZmVhdHVy
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChRdFdlYlBhZ2VQcm94eTo6ZGVmYXVsdFdLQ29udGV4dCk6IHNldHVwIHRoZSBpbmplY3RlZCBi
dW5kbGUgY2xpZW50IGZvciB0aGlzIHRoZQorICAgICAgICBkZWZhdWx0IGNvbnRleHQgc28gd2Ug
Y2FuIGxpc3RlbiB0byBtZXNzYWdlcyBmcm9tIGl0LgorCisgICAgICAgIChRdFdlYlBhZ2VQcm94
eTo6UXRXZWJQYWdlUHJveHkpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVN
ZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5Ojpz
ZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OnBv
c3RNZXNzYWdlVG9OYXZpZ2F0b3JRdE9iamVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6bmF2aWdhdG9yUXRPYmpl
Y3RFbmFibGVkKToKKyAgICAgICAgRW5hYmxpbmcgYW5kIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhl
IG5hdmlnYXRvci5xdCBvYmplY3QgYXJlIGRvbmUgYnkgc2VuZGluZyBtZXNzYWdlcyB0bworICAg
ICAgICB0aGUgaW5qZWN0ZWQgYnVuZGxlLCBpZGVudGlmeWluZyB0aGUgcGFnZSB0aGF0IHdlIHdh
bnQgdG8gYWN0IG9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0
cy9EZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9jb21tb24vbWVzc2FnaW5nLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJv
OgorICAgICAgICAqIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UXRCdWlsdGluQnVuZGxlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6
UXRCdWlsdGluQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OlF0
QnVpbHRpbkJ1bmRsZTo6aGFuZGxlTWVzc2FnZVRvTmF2aWdhdG9yUXRPYmplY3QpOgorICAgICAg
ICAoV2ViS2l0OjpRdEJ1aWx0aW5CdW5kbGU6OmhhbmRsZVNldE5hdmlnYXRvclF0T2JqZWN0RW5h
YmxlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGUuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpRdEJ1aWx0aW5CdW5kbGVQYWdlOjpRdEJ1aWx0aW5CdW5kbGVQYWdlKToKKyAgICAgICAg
KFdlYktpdDo6UXRCdWlsdGluQnVuZGxlUGFnZTo6flF0QnVpbHRpbkJ1bmRsZVBhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpRdEJ1aWx0aW5CdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1l
KToKKyAgICAgICAgKFdlYktpdDo6cXRfcG9zdE1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChX
ZWJLaXQ6OlF0QnVpbHRpbkJ1bmRsZVBhZ2U6OnBvc3RNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2Jq
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlV3JhcHBlZE1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpRdEJ1aWx0aW5CdW5kbGVQYWdlOjpkaWRSZWNlaXZlTWVzc2FnZVRvTmF2aWdhdG9y
UXRPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpRdEJ1aWx0aW5CdW5kbGVQYWdlOjpzZXROYXZp
Z2F0b3JRdE9iamVjdEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpRdEJ1aWx0aW5CdW5kbGVQ
YWdlOjpyZWdpc3Rlck5hdmlnYXRvclF0T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6UXRCdWls
dGluQnVuZGxlUGFnZTo6bmF2aWdhdG9yUXRPYmplY3RDbGFzcyk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmg6CisgICAgICAgIChXZWJLaXQ6OlF0QnVpbHRp
bkJ1bmRsZVBhZ2U6Om5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZCk6CisKIDIwMTEtMTAtMTggIERp
bnUgSmFjb2IgIDxkaW51LmphY29iQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl06IFNo
b3VsZG4ndCBzZW5kIHVuaGFuZGxlZCBUb3VjaENhbmNlbCBldmVudCB0byBnZXN0dXJlIHJlY29n
bml6ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNl
d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmll
dy5jcHAKaW5kZXggMWFjMzRjNTU5M2ExZjYyYjI0NTE4YmY3YWE0NTI3YjBmYzdiZTk3NC4uYWU3
MDdmZjgwNDBkMjgzYzQzYmJjNDIyODVlOTgwNTRkNjQyZTM0NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmNwcApAQCAtMzQsNiArMzQsNyBA
QCBRQmFzZVdlYlZpZXdQcml2YXRlOjpRQmFzZVdlYlZpZXdQcml2YXRlKCkKIHZvaWQgUUJhc2VX
ZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2ViUGFnZVByb3h5KiBwYWdlUHJveHkpCiB7
CiAgICAgdGhpcy0+cGFnZVByb3h5LnJlc2V0KHBhZ2VQcm94eSk7CisgICAgUU9iamVjdDo6Y29u
bmVjdChwYWdlUHJveHksIFNJR05BTChyZWNlaXZlZE1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmpl
Y3QoUVZhcmlhbnRNYXApKSwgcV9wdHIsIFNJR05BTChtZXNzYWdlUmVjZWl2ZWQoUVZhcmlhbnRN
YXApKSk7CiB9CiAKIFFCYXNlV2ViVmlldzo6UUJhc2VXZWJWaWV3KFFCYXNlV2ViVmlld1ByaXZh
dGUgJmRkLCBRUXVpY2tJdGVtICpwYXJlbnQpCkBAIC01Myw2ICs1NCwxMiBAQCB2b2lkIFFCYXNl
V2ViVmlldzo6bG9hZChjb25zdCBRVXJsJiB1cmwpCiAgICAgZC0+cGFnZVByb3h5LT5sb2FkKHVy
bCk7CiB9CiAKK3ZvaWQgUUJhc2VXZWJWaWV3Ojpwb3N0TWVzc2FnZShjb25zdCBRU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIFFfRChRQmFzZVdlYlZpZXcpOworICAgIGQtPnBhZ2VQcm94eS0+cG9z
dE1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KG1lc3NhZ2UpOworfQorCiBRVXJsIFFCYXNlV2Vi
Vmlldzo6dXJsKCkgY29uc3QKIHsKICAgICBRX0QoY29uc3QgUUJhc2VXZWJWaWV3KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5oCmluZGV4IDJhZDkw
Mjk0YWMyOWFkYjFjMmZkMDU0ZGNjNWMxOGRkN2ZjMmVlNDguLmRhNzZlMzg4ZTQyZDBhZTgzYzMw
ZThjNDE1OTdmYjRiYjg1MDc2ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xYmFzZXdlYnZpZXcuaApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAKIHB1YmxpYyBR
X1NMT1RTOgogICAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYpOworICAgICB2b2lkIHBvc3RNZXNz
YWdlKGNvbnN0IFFTdHJpbmcmKTsKIAogUV9TSUdOQUxTOgogICAgIHZvaWQgdGl0bGVDaGFuZ2Vk
KGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKQEAgLTc3LDYgKzc4LDcgQEAgUV9TSUdOQUxTOgogICAg
IHZvaWQgbG9hZEZhaWxlZChRQmFzZVdlYlZpZXc6OkVycm9yVHlwZSBlcnJvclR5cGUsIGludCBl
cnJvckNvZGUsIGNvbnN0IFFVcmwmIHVybCk7CiAgICAgdm9pZCBsb2FkUHJvZ3Jlc3NDaGFuZ2Vk
KGludCBwcm9ncmVzcyk7CiAgICAgdm9pZCB1cmxDaGFuZ2VkKGNvbnN0IFFVcmwmIHVybCk7Cisg
ICAgdm9pZCBtZXNzYWdlUmVjZWl2ZWQoY29uc3QgUVZhcmlhbnRNYXAmIG1lc3NhZ2UpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgUUJhc2VXZWJWaWV3KFFCYXNlV2ViVmlld1ByaXZhdGUgJmRkLCBRUXVp
Y2tJdGVtICpwYXJlbnQgPSAwKTsKQEAgLTg0LDYgKzg2LDcgQEAgcHJvdGVjdGVkOgogICAgIFFT
Y29wZWRQb2ludGVyPFFCYXNlV2ViVmlld1ByaXZhdGU+IGRfcHRyOwogcHJpdmF0ZToKICAgICBR
X0RFQ0xBUkVfUFJJVkFURShRQmFzZVdlYlZpZXcpCisgICAgZnJpZW5kIGNsYXNzIFF0V2ViUGFn
ZVByb3h5OwogfTsKIAogI2VuZGlmIC8qIHFiYXNld2Vidmlld19oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAKaW5kZXggMjJk
YWU1NGUyYmQxYjRlMmI4ZjlmZDYyNTg3N2UxODExZDJlOTMxZi4uY2NlZjllYmZkOWE3ODIzOWRk
OTYwODY5YjkzNzNlOGYxMTFmMDZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcApAQCAtMjg1LDYgKzI4NSwxOSBAQCB2b2lk
IFFXZWJQcmVmZXJlbmNlczo6c2V0RG5zUHJlZmV0Y2hFbmFibGVkKGJvb2wgZW5hYmxlKQogICAg
IGVtaXQgZG5zUHJlZmV0Y2hFbmFibGVkQ2hhbmdlZCgpOwogfQogCitib29sIFFXZWJQcmVmZXJl
bmNlczo6bmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+
cXRXZWJQYWdlUHJveHktPm5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZCgpOworfQorCit2b2lkIFFX
ZWJQcmVmZXJlbmNlczo6c2V0TmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKGJvb2wgZW5hYmxlKQor
eworICAgIGlmIChlbmFibGUgPT0gbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBkLT5xdFdlYlBhZ2VQcm94eS0+c2V0TmF2aWdhdG9yUXRPYmplY3RFbmFi
bGVkKGVuYWJsZSk7CisgICAgZW1pdCBuYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWRDaGFuZ2VkKCk7
Cit9CisKIFFTdHJpbmcgUVdlYlByZWZlcmVuY2VzOjpzdGFuZGFyZEZvbnRGYW1pbHkoKSBjb25z
dAogewogICAgIHJldHVybiBkLT5mb250RmFtaWx5KFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OlN0
YW5kYXJkRm9udCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3F3ZWJwcmVmZXJlbmNlcy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Vi
cHJlZmVyZW5jZXMuaAppbmRleCBlMTdkYmJlZjJiZDA0YTM5M2QxYmY0NjVlNzBmY2MyOGJjNGZi
MzU4Li40ZTIwMDczOWQ3ODZhYWU2NDc2ZDhmMmI5MTdmZTg3NjE5ZGQyOGU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmgKQEAgLTM5
LDYgKzM5LDcgQEAgcHVibGljOgogICAgIFFfUFJPUEVSVFkoYm9vbCB4c3NBdWRpdGluZ0VuYWJs
ZWQgUkVBRCB4c3NBdWRpdGluZ0VuYWJsZWQgV1JJVEUgc2V0WHNzQXVkaXRpbmdFbmFibGVkIE5P
VElGWSB4c3NBdWRpdGluZ0VuYWJsZWRDaGFuZ2VkIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoYm9v
bCBwcml2YXRlQnJvd3NpbmdFbmFibGVkIFJFQUQgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCBXUklU
RSBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkIE5PVElGWSBwcml2YXRlQnJvd3NpbmdFbmFibGVk
Q2hhbmdlZCBGSU5BTCkKICAgICBRX1BST1BFUlRZKGJvb2wgZG5zUHJlZmV0Y2hFbmFibGVkIFJF
QUQgZG5zUHJlZmV0Y2hFbmFibGVkIFdSSVRFIHNldERuc1ByZWZldGNoRW5hYmxlZCBOT1RJRlkg
ZG5zUHJlZmV0Y2hFbmFibGVkQ2hhbmdlZCBGSU5BTCkKKyAgICBRX1BST1BFUlRZKGJvb2wgbmF2
aWdhdG9yUXRPYmplY3RFbmFibGVkIFJFQUQgbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkIFdSSVRF
IHNldE5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZCBOT1RJRlkgbmF2aWdhdG9yUXRPYmplY3RFbmFi
bGVkQ2hhbmdlZCBGSU5BTCkKIAogICAgIFFfUFJPUEVSVFkoUVN0cmluZyBzdGFuZGFyZEZvbnRG
YW1pbHkgUkVBRCBzdGFuZGFyZEZvbnRGYW1pbHkgV1JJVEUgc2V0U3RhbmRhcmRGb250RmFtaWx5
IE5PVElGWSBzdGFuZGFyZEZvbnRGYW1pbHlDaGFuZ2VkIEZJTkFMKQogICAgIFFfUFJPUEVSVFko
UVN0cmluZyBmaXhlZEZvbnRGYW1pbHkgUkVBRCBmaXhlZEZvbnRGYW1pbHkgV1JJVEUgc2V0Rml4
ZWRGb250RmFtaWx5IE5PVElGWSBmaXhlZEZvbnRGYW1pbHlDaGFuZ2VkIEZJTkFMKQpAQCAtNzUs
NiArNzYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkbnNQcmVmZXRjaEVuYWJsZWQoKSBjb25zdDsK
ICAgICB2b2lkIHNldERuc1ByZWZldGNoRW5hYmxlZChib29sIGVuYWJsZSk7CiAKKyAgICBib29s
IG5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0TmF2aWdhdG9y
UXRPYmplY3RFbmFibGVkKGJvb2wpOworCiAgICAgUVN0cmluZyBzdGFuZGFyZEZvbnRGYW1pbHko
KSBjb25zdDsKICAgICB2b2lkIHNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBm
YW1pbHkpOwogCkBAIC0xMTEsNiArMTE1LDcgQEAgUV9TSUdOQUxTOgogICAgIHZvaWQgeHNzQXVk
aXRpbmdFbmFibGVkQ2hhbmdlZCgpOwogICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZENo
YW5nZWQoKTsKICAgICB2b2lkIGRuc1ByZWZldGNoRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lk
IG5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZENoYW5nZWQoKTsKIAogICAgIHZvaWQgc3RhbmRhcmRG
b250RmFtaWx5Q2hhbmdlZCgpOwogICAgIHZvaWQgZml4ZWRGb250RmFtaWx5Q2hhbmdlZCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0
cy9EZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5x
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGViMWM1MGRkOTNiMzE4MjIyZjgyODg5MGU3NWRmZDQ4MDg3NGQ5YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5xbWwKQEAgLTAsMCArMSwxMDcg
QEAKK2ltcG9ydCBRdFF1aWNrIDIuMAoraW1wb3J0IFF0VGVzdCAxLjAKK2ltcG9ydCBRdFdlYktp
dCAzLjAKKworSXRlbSB7CisgICAgRGVza3RvcFdlYlZpZXcgeworICAgICAgICBpZDogd2ViVmll
dworICAgICAgICBwcm9wZXJ0eSB2YXJpYW50IGxhc3RNZXNzYWdlCisgICAgICAgIHByZWZlcmVu
Y2VzLm5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDogdHJ1ZQorICAgICAgICBvbk1lc3NhZ2VSZWNl
aXZlZDogeworICAgICAgICAgICAgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBEZXNrdG9wV2ViVmlldyB7CisgICAgICAgIGlkOiBvdGhlcldlYlZpZXcKKyAg
ICAgICAgcHJvcGVydHkgdmFyaWFudCBsYXN0TWVzc2FnZQorICAgICAgICBwcmVmZXJlbmNlcy5u
YXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ6IHRydWUKKyAgICAgICAgb25NZXNzYWdlUmVjZWl2ZWQ6
IHsKKyAgICAgICAgICAgIGxhc3RNZXNzYWdlID0gbWVzc2FnZQorICAgICAgICB9CisgICAgfQor
CisgICAgRGVza3RvcFdlYlZpZXcgeworICAgICAgICBpZDogZGlzYWJsZWRXZWJWaWV3CisgICAg
ICAgIHByb3BlcnR5IGJvb2wgcmVjZWl2ZWRNZXNzYWdlCisgICAgICAgIHByZWZlcmVuY2VzLm5h
dmlnYXRvclF0T2JqZWN0RW5hYmxlZDogZmFsc2UKKyAgICAgICAgb25NZXNzYWdlUmVjZWl2ZWQ6
IHsKKyAgICAgICAgICAgIHJlY2VpdmVkTWVzc2FnZSA9IHRydWUKKyAgICAgICAgfQorICAgIH0K
KworICAgIFNpZ25hbFNweSB7CisgICAgICAgIGlkOiBsb2FkU3B5CisgICAgICAgIHRhcmdldDog
d2ViVmlldworICAgICAgICBzaWduYWxOYW1lOiAibG9hZFN1Y2NlZWRlZCIKKyAgICB9CisKKyAg
ICBTaWduYWxTcHkgeworICAgICAgICBpZDogbWVzc2FnZVNweQorICAgICAgICB0YXJnZXQ6IHdl
YlZpZXcKKyAgICAgICAgc2lnbmFsTmFtZTogIm1lc3NhZ2VSZWNlaXZlZCIKKyAgICB9CisKKyAg
ICBTaWduYWxTcHkgeworICAgICAgICBpZDogb3RoZXJMb2FkU3B5CisgICAgICAgIHRhcmdldDog
b3RoZXJXZWJWaWV3CisgICAgICAgIHNpZ25hbE5hbWU6ICJsb2FkU3VjY2VlZGVkIgorICAgIH0K
KworICAgIFNpZ25hbFNweSB7CisgICAgICAgIGlkOiBvdGhlck1lc3NhZ2VTcHkKKyAgICAgICAg
dGFyZ2V0OiBvdGhlcldlYlZpZXcKKyAgICAgICAgc2lnbmFsTmFtZTogIm1lc3NhZ2VSZWNlaXZl
ZCIKKyAgICB9CisKKyAgICBTaWduYWxTcHkgeworICAgICAgICBpZDogZGlzYWJsZWRXZWJWaWV3
TG9hZFNweQorICAgICAgICB0YXJnZXQ6IGRpc2FibGVkV2ViVmlldworICAgICAgICBzaWduYWxO
YW1lOiAibG9hZFN1Y2NlZWRlZCIKKyAgICB9CisKKyAgICBUZXN0Q2FzZSB7CisgICAgICAgIG5h
bWU6ICJEZXNrdG9wV2ViVmlld01lc3NhZ2luZyIKKyAgICAgICAgcHJvcGVydHkgdXJsIHRlc3RV
cmw6IFF0LnJlc29sdmVkVXJsKCIuLi9jb21tb24vbWVzc2FnaW5nLmh0bWwiKQorCisgICAgICAg
IGZ1bmN0aW9uIGluaXQoKSB7CisgICAgICAgICAgICBsb2FkU3B5LmNsZWFyKCkKKyAgICAgICAg
ICAgIG1lc3NhZ2VTcHkuY2xlYXIoKQorICAgICAgICAgICAgd2ViVmlldy5sYXN0TWVzc2FnZSA9
IG51bGwKKyAgICAgICAgICAgIG90aGVyTG9hZFNweS5jbGVhcigpCisgICAgICAgICAgICBvdGhl
ck1lc3NhZ2VTcHkuY2xlYXIoKQorICAgICAgICAgICAgb3RoZXJXZWJWaWV3Lmxhc3RNZXNzYWdl
ID0gbnVsbAorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdF9iYXNpYygpIHsKKyAg
ICAgICAgICAgIHdlYlZpZXcubG9hZCh0ZXN0VXJsKQorICAgICAgICAgICAgbG9hZFNweS53YWl0
KCkKKyAgICAgICAgICAgIHdlYlZpZXcucG9zdE1lc3NhZ2UoIkhFTExPIikKKyAgICAgICAgICAg
IG1lc3NhZ2VTcHkud2FpdCgpCisgICAgICAgICAgICBjb21wYXJlKHdlYlZpZXcubGFzdE1lc3Nh
Z2UuZGF0YSwgIk9MTEVIIikKKyAgICAgICAgICAgIGNvbXBhcmUod2ViVmlldy5sYXN0TWVzc2Fn
ZS5vcmlnaW4udG9TdHJpbmcoKSwgdGVzdFVybC50b1N0cmluZygpKQorICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gdGVzdF90d29XZWJWaWV3cygpIHsKKyAgICAgICAgICAgIHdlYlZpZXcu
bG9hZCh0ZXN0VXJsKQorICAgICAgICAgICAgb3RoZXJXZWJWaWV3LmxvYWQodGVzdFVybCkKKyAg
ICAgICAgICAgIGxvYWRTcHkud2FpdCgpCisgICAgICAgICAgICBvdGhlckxvYWRTcHkud2FpdCgp
CisgICAgICAgICAgICB3ZWJWaWV3LnBvc3RNZXNzYWdlKCJGSVJTVCIpCisgICAgICAgICAgICBv
dGhlcldlYlZpZXcucG9zdE1lc3NhZ2UoIlNFQ09ORCIpCisgICAgICAgICAgICBtZXNzYWdlU3B5
LndhaXQoKQorICAgICAgICAgICAgb3RoZXJNZXNzYWdlU3B5LndhaXQoKQorICAgICAgICAgICAg
Y29tcGFyZSh3ZWJWaWV3Lmxhc3RNZXNzYWdlLmRhdGEsICJUU1JJRiIpCisgICAgICAgICAgICBj
b21wYXJlKG90aGVyV2ViVmlldy5sYXN0TWVzc2FnZS5kYXRhLCAiRE5PQ0VTIikKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RfZGlzYWJsZWQoKSB7CisgICAgICAgICAgICBkaXNh
YmxlZFdlYlZpZXcubG9hZCh0ZXN0VXJsKQorICAgICAgICAgICAgdmVyaWZ5KCFkaXNhYmxlZFdl
YlZpZXcucHJlZmVyZW5jZXMubmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKQorICAgICAgICAgICAg
ZGlzYWJsZWRXZWJWaWV3TG9hZFNweS53YWl0KCkKKyAgICAgICAgICAgIGRpc2FibGVkV2ViVmll
dy5wb3N0TWVzc2FnZSgiSEkiKQorICAgICAgICAgICAgd2FpdCgxMDAwKQorICAgICAgICAgICAg
dmVyaWZ5KCFkaXNhYmxlZFdlYlZpZXcucmVjZWl2ZWRNZXNzYWdlKQorICAgICAgICB9CisgICAg
fQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9jb21tb24vbWVzc2FnaW5nLmh0bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FtbHRlc3RzL2NvbW1vbi9tZXNzYWdpbmcuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
ZTNkZDcyMzA0NjUxNmJhMzg4N2NiYTAzNThkZTMzODcwNjIwZWQwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9jb21tb24v
bWVzc2FnaW5nLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBpbml0aWFsaXplKCkgeworICAgICAgICBu
YXZpZ2F0b3IucXQub25tZXNzYWdlID0gZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgICAgIHZhciBy
ZXZlcnNlZCA9IGV2LmRhdGEuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKTsKKyAgICAgICAg
ICAgIG5hdmlnYXRvci5xdC5wb3N0TWVzc2FnZShyZXZlcnNlZCk7CisgICAgICAgIH0KKyAgICB9
Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iaW5pdGlhbGl6ZSgpOyI+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCmluZGV4IDk2MDM1ZGNjMjcxOTVhZDA4
NzFhYmQ0MjgzMWI2NTI5ZDU2NjFmYjQuLmVjMGU4NGRkZmU0YmQzZDM1NjU2NDIyODczNWMxY2Ji
MTJmMDYyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCkBAIC0xNSw2ICsxNSw3IEBAIE9USEVS
X0ZJTEVTICs9IFwKICAgICBEZXNrdG9wV2ViVmlldy90c3RfbG9hZFByb2dyZXNzLnFtbCBcCiAg
ICAgRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwgXAogICAgIERlc2t0
b3BXZWJWaWV3L3RzdF9saW5rSG92ZXJlZC5xbWwgXAorICAgIERlc2t0b3BXZWJWaWV3L3RzdF9t
ZXNzYWdpbmcucW1sIFwKICAgICBUb3VjaFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMucW1sIFwKICAg
ICBUb3VjaFdlYlZpZXcvdHN0X2xvYWQucW1sIFwKICAgICBUb3VjaFdlYlZpZXcvdHN0X2xvYWRa
ZXJvU2l6ZVZpZXcucW1sIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4
IGYxOTQ3ODczYTAyMWNhYmE2ZDhlNGQ3MWIwNWYzODI2ZjVjODM3N2YuLjY2ZjllY2JiYjBhMzk1
YTkzYjI5OWNlMTFlMjNkMDhjY2MyNzBlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaApAQCAtMTAzLDYgKzEwMyw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShRVCkKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBTdHJp
bmcmKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGI0MDNhNGJmNWI5
YjljOWE5YWQwMGU4MDExMmM3MDI0NjgxZmExZDEuLjQyZWFhMThjZWE1YzRiNDY0YWE0OWIyMzgy
ZGU3NGE3ZDU5YWQ1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCkBAIC0yMjY1LDYgKzIyNjUsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAKICAgICBwcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZpbmRab29tYWJsZUFyZWFGb3JQb2ludChwb2ludCksIG1f
cGFnZUlEKTsKIH0KKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbU5h
dmlnYXRvclF0T2JqZWN0KGNvbnN0IFN0cmluZyYgY29udGVudHMpCit7CisgICAgbV9wYWdlQ2xp
ZW50LT5kaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb250ZW50cyk7Cit9
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZGU2N2Q0NjZjYjc0YjM5ZmFiYTI3NjMyMGFkZThiYWUx
YmY1MWIzMi4uYzNhMWVkZmFjYWNjZWM4MTY4MjA0MmMzOGM1ZmZjMGNlNjRkZjgzYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNTI0LDYgKzUyNCw3IEBAIHB1
YmxpYzoKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCiAgICAgdm9p
ZCBhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKaW5kZXggZWFl
NWYyMTgzNmI0ZGNiYWVlMWE2NGY2OTRmYzc5Y2QwMDg5OWU2NC4uODAyZWRlNmQ2MTM3NzBiNjkx
MGE2ZTNmZGM3ZWFiM2FlZTBiNzY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0NsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9D
bGllbnRJbXBsLmNwcApAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPFdLSGl0VGVzdFJlc3Vs
dC5oPgogI2luY2x1ZGUgPFdLT3BlblBhbmVsUGFyYW1ldGVycy5oPgogI2luY2x1ZGUgPFdLT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxXS1BhZ2UuaD4KKyNpbmNsdWRlIDxX
S1N0cmluZy5oPgogI2luY2x1ZGUgPFdLVHlwZS5oPgogI2luY2x1ZGUgPFdLVVJMUmVxdWVzdC5o
PgogCkBAIC0yNzksNiArMjgxLDI1IEBAIHN0YXRpYyB2b2lkIHF0X3drX2RlY2lkZVBvbGljeUZv
clJlc3BvbnNlKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1VSCiAgICAgV0tG
cmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKIH0KIAordm9pZCBxdF93a19kaWRSZWNl
aXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS0NvbnRleHRSZWYsIFdLU3RyaW5nUmVmIG1l
c3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQqKQoreworICAgIGlm
ICghV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIk1lc3NhZ2VGcm9t
TmF2aWdhdG9yUXRPYmplY3QiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1lc3Nh
Z2VCb2R5KTsKKyAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQXJyYXlH
ZXRUeXBlSUQoKSk7CisKKyAgICBXS0FycmF5UmVmIGJvZHkgPSBzdGF0aWNfY2FzdDxXS0FycmF5
UmVmPihtZXNzYWdlQm9keSk7CisgICAgQVNTRVJUKFdLQXJyYXlHZXRTaXplKGJvZHkpID09IDIp
OworICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMCkp
ID09IFdLUGFnZUdldFR5cGVJRCgpKTsKKyAgICBBU1NFUlQoV0tHZXRUeXBlSUQoV0tBcnJheUdl
dEl0ZW1BdEluZGV4KGJvZHksIDEpKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKKworICAgIFdL
UGFnZVJlZiBwYWdlID0gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoYm9keSwgMCkpOworICAgIFdLU3RyaW5nUmVmIHN0ciA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMSkpOworCisgICAgdG9JbXBsKHBhZ2Up
LT5kaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdCh0b0ltcGwoc3RyKS0+c3Ry
aW5nKCkpOworfQorCiB2b2lkIHNldHVwUGFnZUxvYWRlckNsaWVudChRdFdlYlBhZ2VQcm94eSog
cXRXZWJQYWdlUHJveHksIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogewogICAgIFdLUGFn
ZUxvYWRlckNsaWVudCBsb2FkQ2xpZW50OwpAQCAtMzIzLDMgKzM0NCwxMiBAQCB2b2lkIHNldHVw
UGFnZVBvbGljeUNsaWVudChRdFBvbGljeUludGVyZmFjZSogcG9saWN5SW50ZXJmYWNlLCBXZWJQ
YWdlUHJveHkqIHdlYgogICAgIHBvbGljeUNsaWVudC5kZWNpZGVQb2xpY3lGb3JSZXNwb25zZSA9
IHF0X3drX2RlY2lkZVBvbGljeUZvclJlc3BvbnNlOwogICAgIFdLUGFnZVNldFBhZ2VQb2xpY3lD
bGllbnQodG9BUEkod2ViUGFnZVByb3h5KSwgJnBvbGljeUNsaWVudCk7CiB9CisKK3ZvaWQgc2V0
dXBDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHQpCit7Cisg
ICAgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQgaW5qZWN0ZWRCdW5kbGVDbGllbnQ7Cisg
ICAgbWVtc2V0KCZpbmplY3RlZEJ1bmRsZUNsaWVudCwgMCwgc2l6ZW9mKFdLQ29udGV4dEluamVj
dGVkQnVuZGxlQ2xpZW50KSk7CisgICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQudmVyc2lvbiA9IGtX
S0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudEN1cnJlbnRWZXJzaW9uOworICAgIGluamVjdGVk
QnVuZGxlQ2xpZW50LmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlID0gcXRfd2tf
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGU7CisgICAgV0tDb250ZXh0U2V0SW5q
ZWN0ZWRCdW5kbGVDbGllbnQoY29udGV4dCwgJmluamVjdGVkQnVuZGxlQ2xpZW50KTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oCmluZGV4IGMyOGEwMTBkZDViMzBh
NGVhMzlmMmQwODc0OTIyOGQwYjk1MmViZWUuLjRlZjg5NzVjZGY3Njg1ZmE4M2RkODlhMzYyMjY4
YTlmYjU4NTk2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGll
bnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaApA
QCAtMjAsMTYgKzIwLDE5IEBACiAjaWZuZGVmIENsaWVudEltcGxfaAogI2RlZmluZSBDbGllbnRJ
bXBsX2gKIAotI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9X
S0NvbnRleHQuaD4KIAogY2xhc3MgUXRXZWJQYWdlUHJveHk7CiBuYW1lc3BhY2UgV2ViS2l0IHsK
IGNsYXNzIFF0UG9saWN5SW50ZXJmYWNlOwogY2xhc3MgV2ViUGFnZVByb3h5OwogfQorCiB2b2lk
IHNldHVwUGFnZUxvYWRlckNsaWVudChRdFdlYlBhZ2VQcm94eSosIFdlYktpdDo6V2ViUGFnZVBy
b3h5Kik7CiB2b2lkIHNldHVwUGFnZVVpQ2xpZW50KFF0V2ViUGFnZVByb3h5KiwgV2ViS2l0OjpX
ZWJQYWdlUHJveHkqKTsKIHZvaWQgc2V0dXBQYWdlUG9saWN5Q2xpZW50KFdlYktpdDo6UXRQb2xp
Y3lJbnRlcmZhY2UqLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogCit2b2lkIHNldHVwQ29udGV4
dEluamVjdGVkQnVuZGxlQ2xpZW50KFdLQ29udGV4dFJlZik7CisKICNlbmRpZiAvKiBDbGllbnRJ
bXBsX2ggKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94
eS5jcHAKaW5kZXggNmE0NGFkNWI0ZWRlODI5NzgwOWYxY2IxMzk2OTEzYjMwNDMzNTdlZC4uNjQz
MGEwOTAwNTE2MzlhYzY2NGEwMjFmYzY3ZjMxYmRjN2Q5MzM0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAicXdraGlzdG9yeV9wLmgiCiAjaW5jbHVkZSAiRmluZEluZGljYXRvci5oIgogI2lu
Y2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNdXRhYmxlQXJyYXkuaCIKICNp
bmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJRdFBvbGljeUludGVyZmFjZS5oIgpAQCAtNjEsMTUgKzYyLDE2IEBA
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLQog
UmVmUHRyPFdlYkNvbnRleHQ+IFF0V2ViUGFnZVByb3h5OjpzX2RlZmF1bHRDb250ZXh0OwogCiB1
bnNpZ25lZCBRdFdlYlBhZ2VQcm94eTo6c19kZWZhdWx0UGFnZVByb3h5Q291bnQgPSAwOwogCiBQ
YXNzUmVmUHRyPFdlYkNvbnRleHQ+IFF0V2ViUGFnZVByb3h5OjpkZWZhdWx0V0tDb250ZXh0KCkK
IHsKLSAgICBpZiAoIXNfZGVmYXVsdENvbnRleHQpCisgICAgaWYgKCFzX2RlZmF1bHRDb250ZXh0
KSB7CiAgICAgICAgIHNfZGVmYXVsdENvbnRleHQgPSBXZWJDb250ZXh0OjpjcmVhdGUoU3RyaW5n
KCkpOworICAgICAgICBzZXR1cENvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCh0b0FQSShzX2Rl
ZmF1bHRDb250ZXh0LmdldCgpKSk7CisgICAgfQogICAgIHJldHVybiBzX2RlZmF1bHRDb250ZXh0
OwogfQogCkBAIC0xMDcsNiArMTA5LDcgQEAgUXRXZWJQYWdlUHJveHk6OlF0V2ViUGFnZVByb3h5
KFF0Vmlld0ludGVyZmFjZSogdmlld0ludGVyZmFjZSwgUXRQb2xpY3lJbnRlcmZhY2UKICAgICAs
IG1fY29udGV4dChjb250ZXh0UmVmID8gdG9JbXBsKGNvbnRleHRSZWYpIDogZGVmYXVsdFdLQ29u
dGV4dCgpKQogICAgICwgbV91bmRvU3RhY2soYWRvcHRQdHIobmV3IFFVbmRvU3RhY2sodGhpcykp
KQogICAgICwgbV9sb2FkUHJvZ3Jlc3MoMCkKKyAgICAsIG1fbmF2aWdhdG9yUXRPYmplY3RFbmFi
bGVkKGZhbHNlKQogewogICAgIEFTU0VSVCh2aWV3SW50ZXJmYWNlKTsKICAgICBtX3dlYlBhZ2VQ
cm94eSA9IG1fY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCB0b0ltcGwocGFnZUdyb3VwUmVm
KSk7CkBAIC0zNTEsNiArMzU0LDE0IEBAIHZvaWQgUXRXZWJQYWdlUHJveHk6OmRpZEZpbmRab29t
YWJsZUFyZWEoY29uc3QgSW50UG9pbnQmIHRhcmdldCwgY29uc3QgSW50UmVjdCYKICAgICBtX3Zp
ZXdJbnRlcmZhY2UtPmRpZEZpbmRab29tYWJsZUFyZWEoUVBvaW50KHRhcmdldCksIFFSZWN0KGFy
ZWEpKTsKIH0KIAordm9pZCBRdFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2
aWdhdG9yUXRPYmplY3QoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFFWYXJpYW50TWFw
IHZhcmlhbnRNYXA7CisgICAgdmFyaWFudE1hcC5pbnNlcnQoUUxhdGluMVN0cmluZygiZGF0YSIp
LCBRU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICB2YXJpYW50TWFwLmluc2VydChRTGF0aW4xU3RyaW5n
KCJvcmlnaW4iKSwgdXJsKCkpOworICAgIGVtaXQgcmVjZWl2ZWRNZXNzYWdlRnJvbU5hdmlnYXRv
clF0T2JqZWN0KHZhcmlhbnRNYXApOworfQorCiB2b2lkIFF0V2ViUGFnZVByb3h5OjpkaWRDaGFu
Z2VVcmwoY29uc3QgUVVybCYgdXJsKQogewogICAgIG1fdmlld0ludGVyZmFjZS0+ZGlkQ2hhbmdl
VXJsKHVybCk7CkBAIC00NzUsNiArNDg2LDMxIEBAIFFTdHJpbmcgUXRXZWJQYWdlUHJveHk6OmN1
c3RvbVVzZXJBZ2VudCgpIGNvbnN0CiAgICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoV0tQ
YWdlQ29weUN1c3RvbVVzZXJBZ2VudChwYWdlUmVmKCkpKTsKIH0KIAordm9pZCBRdFdlYlBhZ2VQ
cm94eTo6c2V0TmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBz
dGF0aWMgU3RyaW5nIG1lc3NhZ2VOYW1lKCJTZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQiKTsK
KworICAgIEFTU0VSVChlbmFibGVkICE9IG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKTsKKyAg
ICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGhhdmUgdG8ga2VlcCB0aGlzIGluZm9ybWF0aW9uIGlu
IGJvdGggcHJvY2Vzc2VzIGFuZCB0aGUgc2V0dGluZyBpcyBhc3luY2hyb25vdXMuCisgICAgbV9u
YXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQgPSBlbmFibGVkOworICAgIFJlZlB0cjxNdXRhYmxlQXJy
YXk+IGJvZHkgPSBNdXRhYmxlQXJyYXk6OmNyZWF0ZSgpOworICAgIGJvZHktPmFwcGVuZChtX3dl
YlBhZ2VQcm94eS5nZXQoKSk7CisgICAgUmVmUHRyPFdlYkJvb2xlYW4+IHdlYkVuYWJsZWQgPSBX
ZWJCb29sZWFuOjpjcmVhdGUoZW5hYmxlZCk7CisgICAgYm9keS0+YXBwZW5kKHdlYkVuYWJsZWQu
Z2V0KCkpOworICAgIG1fY29udGV4dC0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKG1lc3Nh
Z2VOYW1lLCBib2R5LmdldCgpKTsKK30KKwordm9pZCBRdFdlYlBhZ2VQcm94eTo6cG9zdE1lc3Nh
Z2VUb05hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgc3Rh
dGljIFN0cmluZyBtZXNzYWdlTmFtZSgiTWVzc2FnZVRvTmF2aWdhdG9yUXRPYmplY3QiKTsKKwor
ICAgIFJlZlB0cjxNdXRhYmxlQXJyYXk+IGJvZHkgPSBNdXRhYmxlQXJyYXk6OmNyZWF0ZSgpOwor
ICAgIGJvZHktPmFwcGVuZChtX3dlYlBhZ2VQcm94eS5nZXQoKSk7CisgICAgUmVmUHRyPFdlYlN0
cmluZz4gY29udGVudHMgPSBXZWJTdHJpbmc6OmNyZWF0ZShTdHJpbmcobWVzc2FnZSkpOworICAg
IGJvZHktPmFwcGVuZChjb250ZW50cy5nZXQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUobWVzc2FnZU5hbWUsIGJvZHkuZ2V0KCkpOworfQorCiB2b2lkIFF0
V2ViUGFnZVByb3h5Ojpsb2FkKGNvbnN0IFFVcmwmIHVybCkKIHsKICAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gd2t1cmwoV0tVUkxDcmVhdGVXaXRoUVVybCh1cmwpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKaW5kZXggMWFmODAwZDUwOTU0YzMzMTRm
YjgwZWU0ZDg0ZmM5ZGUzNWZhMWFjMi4uNGFlNDdjOWM1YjQzZjljZDM2ZDdjZmJiNmVkYmIwYTE2
MzMxNGVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5
LmgKQEAgLTEyNSw2ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvdW50U3Ry
aW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlv
bnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmRab29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRnJvbU5hdmlnYXRv
clF0T2JqZWN0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBkaWRDaGFuZ2VVcmwoY29uc3Qg
UVVybCYpOwogICAgIHZvaWQgZGlkQ2hhbmdlVGl0bGUoY29uc3QgUVN0cmluZyYpOwpAQCAtMTYz
LDYgKzE2NCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXN0b21Vc2VyQWdlbnQoY29uc3Qg
UVN0cmluZyYpOwogICAgIFFTdHJpbmcgY3VzdG9tVXNlckFnZW50KCkgY29uc3Q7CiAKKyAgICB2
b2lkIHNldE5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZChib29sKTsKKyAgICBib29sIG5hdmlnYXRv
clF0T2JqZWN0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdG9yUXRPYmplY3RFbmFi
bGVkOyB9CisKKyAgICB2b2lkIHBvc3RNZXNzYWdlVG9OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBR
U3RyaW5nJik7CisKICAgICBxcmVhbCB0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0OwogICAgIHFyZWFs
IHBhZ2Vab29tRmFjdG9yKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUZXh0Wm9vbUZhY3RvcihxcmVh
bCB6b29tRmFjdG9yKTsKQEAgLTE3OSw2ICsxODUsNyBAQCBwdWJsaWM6CiAgICAgUV9TSUdOQUwg
dm9pZCBzY3JvbGxSZXF1ZXN0ZWQoaW50IGR4LCBpbnQgZHkpOwogICAgIFFfU0lHTkFMIHZvaWQg
em9vbWFibGVBcmVhRm91bmQoY29uc3QgUVJlY3QmKTsKICAgICBRX1NJR05BTCB2b2lkIHVwZGF0
ZU5hdmlnYXRpb25TdGF0ZSgpOworICAgIFFfU0lHTkFMIHZvaWQgcmVjZWl2ZWRNZXNzYWdlRnJv
bU5hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFFWYXJpYW50TWFwJik7CiAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGluaXQoKTsKQEAgLTIwNSw2ICsyMTIsOCBAQCBwcml2YXRlOgogCiAgICAgT3duUHRy
PFFVbmRvU3RhY2s+IG1fdW5kb1N0YWNrOwogICAgIGludCBtX2xvYWRQcm9ncmVzczsKKworICAg
IGJvb2wgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7CiB9OwogCiAjZW5kaWYgLyogUXRXZWJQ
YWdlUHJveHlfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9R
dEJ1aWx0aW5CdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0
aW5CdW5kbGUuY3BwCmluZGV4IDEyNWVjZTAwN2I0NTE0ZWY0Y2Y3Y2ZkN2UyYzFjZTFhNmNmMWJl
NDUuLmFlYTQ1NTIwZmY1ZTNlMmVjNjExMjAwOWNjNDVjMzkwMTgyMzI3NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZS5jcHAKQEAgLTI4LDcg
KzI4LDExIEBACiAjaW5jbHVkZSAiUXRCdWlsdGluQnVuZGxlLmgiCiAKICNpbmNsdWRlICJRdEJ1
aWx0aW5CdW5kbGVQYWdlLmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgogI2luY2x1ZGUgIldLQnVu
ZGxlUGFnZS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcu
aCIKKyNpbmNsdWRlICJXS1N0cmluZ1F0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01Myw3ICs1Nyw3IEBAIHZvaWQgUXRCdWlsdGluQnVu
ZGxlOjppbml0aWFsaXplKFdLQnVuZGxlUmVmIGJ1bmRsZSkKICAgICAgICAgZGlkQ3JlYXRlUGFn
ZSwKICAgICAgICAgd2lsbERlc3Ryb3lQYWdlLAogICAgICAgICAwLCAvLyBkaWRJbml0aWFsaXpl
UGFnZUdyb3VwCi0gICAgICAgIDAsIC8vIGRpZFJlY2VpdmVNZXNzYWdlCisgICAgICAgIGRpZFJl
Y2VpdmVNZXNzYWdlCiAgICAgfTsKICAgICBXS0J1bmRsZVNldENsaWVudChtX2J1bmRsZSwgJmNs
aWVudCk7CiB9CkBAIC02OCw2ICs3MiwxMSBAQCB2b2lkIFF0QnVpbHRpbkJ1bmRsZTo6d2lsbERl
c3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgY29uc3QgdgogICAg
IHN0YXRpY19jYXN0PFF0QnVpbHRpbkJ1bmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudElu
Zm8pKS0+d2lsbERlc3Ryb3lQYWdlKHBhZ2UpOwogfQogCit2b2lkIFF0QnVpbHRpbkJ1bmRsZTo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorewor
ICAgIHN0YXRpY19jYXN0PFF0QnVpbHRpbkJ1bmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVu
dEluZm8pKS0+ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5KTsKK30K
Kwogdm9pZCBRdEJ1aWx0aW5CdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UpCiB7CiAgICAgbV9wYWdlcy5hcHBlbmQoYWRvcHRQdHIobmV3IFF0QnVpbHRpbkJ1bmRsZVBh
Z2UodGhpcywgcGFnZSkpKTsKQEAgLTkyLDQgKzEwMSw1MCBAQCBRdEJ1aWx0aW5CdW5kbGVQYWdl
KiBRdEJ1aWx0aW5CdW5kbGU6OmJ1bmRsZVBhZ2VGb3JQYWdlUmVmKGNvbnN0IFdLQnVuZGxlUGFn
ZVJlZgogICAgIHJldHVybiAwOwogfQogCit2b2lkIFF0QnVpbHRpbkJ1bmRsZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkK
K3sKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIk1l
c3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0IikpCisgICAgICAgIGhhbmRsZU1lc3NhZ2VUb05hdmln
YXRvclF0T2JqZWN0KG1lc3NhZ2VCb2R5KTsKKyAgICBlbHNlIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TmF2aWdhdG9yUXRPYmplY3RFbmFibGVkIikp
CisgICAgICAgIGhhbmRsZVNldE5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZChtZXNzYWdlQm9keSk7
Cit9CisKK3ZvaWQgUXRCdWlsdGluQnVuZGxlOjpoYW5kbGVNZXNzYWdlVG9OYXZpZ2F0b3JRdE9i
amVjdChXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCit7CisgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsK
KyAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQXJyYXlHZXRUeXBlSUQo
KSk7CisKKyAgICBXS0FycmF5UmVmIGJvZHkgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNz
YWdlQm9keSk7CisgICAgQVNTRVJUKFdLQXJyYXlHZXRTaXplKGJvZHkpID09IDIpOworICAgIEFT
U0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMCkpID09IFdLQnVu
ZGxlUGFnZUdldFR5cGVJRCgpKTsKKyAgICBBU1NFUlQoV0tHZXRUeXBlSUQoV0tBcnJheUdldEl0
ZW1BdEluZGV4KGJvZHksIDEpKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKKworICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVQYWdlUmVmPihXS0FycmF5R2V0
SXRlbUF0SW5kZXgoYm9keSwgMCkpOworICAgIFdLU3RyaW5nUmVmIGNvbnRlbnRzID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChib2R5LCAxKSk7CisKKyAg
ICBRdEJ1aWx0aW5CdW5kbGVQYWdlKiBidW5kbGVQYWdlID0gYnVuZGxlUGFnZUZvclBhZ2VSZWYo
cGFnZSk7CisgICAgaWYgKCFidW5kbGVQYWdlKQorICAgICAgICByZXR1cm47CisgICAgYnVuZGxl
UGFnZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KGNvbnRlbnRzKTsKK30K
Kwordm9pZCBRdEJ1aWx0aW5CdW5kbGU6OmhhbmRsZVNldE5hdmlnYXRvclF0T2JqZWN0RW5hYmxl
ZChXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCit7CisgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsKKyAg
ICBBU1NFUlQoV0tHZXRUeXBlSWQobWVzc2FnZUJvZHkpID09IFdLQXJyYXlHZXRUeXBlSUQoKSk7
CisKKyAgICBXS0FycmF5UmVmIGJvZHkgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdl
Qm9keSk7CisgICAgQVNTRVJUKFdLQXJyYXlHZXRTaXplKGJvZHkpID09IDIpOworICAgIEFTU0VS
VChXS0dldFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5kZXgoYm9keSwgMCkpID09IFdLQnVuZGxl
UGFnZUdldFR5cGVJRCgpKTsKKyAgICBBU1NFUlQoV0tHZXRUeXBlSUQoV0tBcnJheUdldEl0ZW1B
dEluZGV4KGJvZHksIDEpKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisKKyAgICBXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlUGFnZVJlZj4oV0tBcnJheUdldEl0
ZW1BdEluZGV4KGJvZHksIDApKTsKKyAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZCA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGJvZHksIDEpKTsKKworICAg
IFF0QnVpbHRpbkJ1bmRsZVBhZ2UqIGJ1bmRsZVBhZ2UgPSBidW5kbGVQYWdlRm9yUGFnZVJlZihw
YWdlKTsKKyAgICBpZiAoIWJ1bmRsZVBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBidW5kbGVQ
YWdlLT5zZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoZW5hYmxlZCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9R
dEJ1aWx0aW5CdW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXRCdWlsdGlu
QnVuZGxlLmgKaW5kZXggMzVmOGIxZmNmYmUyNWQ1NjIzMzg0MmNmNTliM2U2ZjQ3YWZjNDFhYy4u
Njk3ZDI2YmRhNGU4ZmUxMjZhOGFkMDUyNWRjZjU4MTM2MGQwZjNhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZS5oCkBAIC00OCwxMyArNDgsMTgg
QEAgcHVibGljOgogICAgIC8vIEJ1bmRsZSBDbGllbnQuCiAgICAgc3RhdGljIHZvaWQgZGlkQ3Jl
YXRlUGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmLCBjb25zdCB2b2lkKik7CiAgICAg
c3RhdGljIHZvaWQgd2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYs
IGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShXS0J1bmRs
ZVJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSwgY29u
c3Qgdm9pZCopOwogCiAgICAgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZik7CiAg
ICAgdm9pZCB3aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVQYWdlUmVmKTsKKyAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJv
ZHkpOwogCiBwcml2YXRlOgogICAgIFF0QnVpbHRpbkJ1bmRsZVBhZ2UqIGJ1bmRsZVBhZ2VGb3JQ
YWdlUmVmKGNvbnN0IFdLQnVuZGxlUGFnZVJlZikgY29uc3Q7CiAKKyAgICB2b2lkIGhhbmRsZU1l
c3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KFdLVHlwZVJlZiBtZXNzYWdlQm9keSk7CisgICAgdm9p
ZCBoYW5kbGVTZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoV0tUeXBlUmVmIG1lc3NhZ2VCb2R5
KTsKKwogICAgIC8vIEZJWE1FOiBDYW4gd2UgdXNlIEhhc2hNYXAgb2YgT3duUHRycz8gT3Igc29t
ZXRoaW5nIGVxdWl2YWxlbnQ/CiAgICAgVmVjdG9yPE93blB0cjxRdEJ1aWx0aW5CdW5kbGVQYWdl
PiA+IG1fcGFnZXM7CiAgICAgV0tCdW5kbGVSZWYgbV9idW5kbGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZVBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmNwcAppbmRleCA1YTU1
NDFkZTU4ZDBmYjEwYjYxMGY3ZTJmOTczYjY4YWMzZTBlODYxLi40MmIxOWMxOWI3MzZkNWJlNTFk
NGM1YWQ0NmYxMmFkZDhmZTY1NTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZVBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5jcHAKQEAgLTI3LDE4ICsyNywxNjkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJRdEJ1aWx0aW5CdW5kbGVQYWdlLmgiCiAKKyNp
bmNsdWRlICJRdEJ1aWx0aW5CdW5kbGUuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVk
ZSAiV0tCdW5kbGVGcmFtZS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAi
V0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1N0cmluZ1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXS1N0
cmluZ1F0LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTUmV0YWluUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBRdEJ1aWx0aW5CdW5k
bGVQYWdlOjpRdEJ1aWx0aW5CdW5kbGVQYWdlKFF0QnVpbHRpbkJ1bmRsZSogYnVuZGxlLCBXS0J1
bmRsZVBhZ2VSZWYgcGFnZSkKICAgICA6IG1fYnVuZGxlKGJ1bmRsZSkKICAgICAsIG1fcGFnZShw
YWdlKQorICAgICwgbV9uYXZpZ2F0b3JRdE9iamVjdCgwKQorICAgICwgbV9uYXZpZ2F0b3JRdE9i
amVjdEVuYWJsZWQoZmFsc2UpCiB7Ci0gICAgLy8gSGVyZSB3ZSBjYW4gc2V0IHRoZSBidW5kbGUn
cyBwYWdlIGNsaWVudHMuCisgICAgV0tCdW5kbGVQYWdlTG9hZGVyQ2xpZW50IGxvYWRlckNsaWVu
dCA9IHsKKyAgICAgICAga1dLQnVuZGxlUGFnZUxvYWRlckNsaWVudEN1cnJlbnRWZXJzaW9uLAor
ICAgICAgICB0aGlzLAorICAgICAgICAwLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lCisgICAgICAgIDAsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJy
b3JGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRDb21taXRMb2FkRm9yRnJhbWUKKyAgICAgICAg
MCwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkRmlu
aXNoTG9hZEZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJh
bWUKKyAgICAgICAgMCwgLy8gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lCisgICAg
ICAgIDAsIC8vIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZEZpcnN0
TGF5b3V0Rm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0Rm9yRnJhbWUKKyAgICAgICAgMCwgLy8gZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5Cisg
ICAgICAgIDAsIC8vIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZQorICAgICAgICAw
LCAvLyBkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZQorICAgICAgICBkaWRDbGVhcldpbmRv
d0ZvckZyYW1lLAorICAgICAgICAwLCAvLyBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1l
CisgICAgICAgIDAsIC8vIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RGb3JGcmFtZQorICAgICAg
ICAwLCAvLyBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWRM
YXlvdXRGb3JGcmFtZQorICAgIH07CisgICAgV0tCdW5kbGVQYWdlU2V0UGFnZUxvYWRlckNsaWVu
dChtX3BhZ2UsICZsb2FkZXJDbGllbnQpOwogfQogCiBRdEJ1aWx0aW5CdW5kbGVQYWdlOjp+UXRC
dWlsdGluQnVuZGxlUGFnZSgpCiB7CisgICAgaWYgKCFtX25hdmlnYXRvclF0T2JqZWN0KQorICAg
ICAgICByZXR1cm47CisgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShtX3BhZ2UpOworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKKyAgICBKU1ZhbHVlVW5wcm90
ZWN0KGNvbnRleHQsIG1fbmF2aWdhdG9yUXRPYmplY3QpOworfQorCit2b2lkIFF0QnVpbHRpbkJ1
bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UXRCdWlsdGluQnVuZGxlUGFn
ZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+ZGlkQ2xlYXJXaW5kb3dGb3JGcmFt
ZShmcmFtZSwgd29ybGQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBxdF9wb3N0TWVzc2FnZUNh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqKQoreworICAgIC8vIEZJWE1FOiBzaG91bGQgaXQgd29yayByZWdhcmRs
ZXNzIG9mIHRoZSB0aGlzT2JqZWN0PworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxIHx8ICFK
U1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgUXRCdWlsdGluQnVuZGxlUGFnZSog
YnVuZGxlUGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UXRCdWlsdGluQnVuZGxlUGFnZSo+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgQVNTRVJUKGJ1bmRsZVBhZ2UpOworCisg
ICAgLy8gRklYTUU6IG5lZWRlZD8KKyAgICBpZiAoIWJ1bmRsZVBhZ2UtPm5hdmlnYXRvclF0T2Jq
ZWN0RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNDb250ZW50cyA9IEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCAwKTsKKyAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gY29udGVudHMoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
anNDb250ZW50cy5nZXQoKSkpOworICAgIGJ1bmRsZVBhZ2UtPnBvc3RNZXNzYWdlRnJvbU5hdmln
YXRvclF0T2JqZWN0KGNvbnRlbnRzLmdldCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK3ZvaWQgUXRCdWlsdGluQnVuZGxlUGFnZTo6ZGlkQ2xlYXJX
aW5kb3dGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZVNjcmlwdFdvcmxk
UmVmIHdvcmxkKQoreworICAgIGlmICghV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSB8
fCBXS0J1bmRsZVNjcmlwdFdvcmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkKKyAgICAgICAgcmV0
dXJuOworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKKyAgICByZWdpc3Rlck5hdmln
YXRvclF0T2JqZWN0KGNvbnRleHQpOworfQorCit2b2lkIFF0QnVpbHRpbkJ1bmRsZVBhZ2U6OnBv
c3RNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KFdLU3RyaW5nUmVmIGNvbnRlbnRzKQorewor
ICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0Iik7CisgICAgV0tUeXBlUmVm
IGJvZHlbXSA9IHsgcGFnZSgpLCBjb250ZW50cyB9OworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlS
ZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQXJyYXlDcmVhdGUoYm9keSwgc2l6ZW9mKGJvZHkp
IC8gc2l6ZW9mKFdLVHlwZVJlZikpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxl
LT50b1JlZigpLCBtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworfQorCitzdGF0aWMg
SlNPYmplY3RSZWYgY3JlYXRlV3JhcHBlZE1lc3NhZ2UoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRl
eHQsIFdLU3RyaW5nUmVmIGRhdGEpCit7CisgICAgc3RhdGljIEpTU3RyaW5nUmVmIGRhdGFOYW1l
ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRhdGEiKTsKIAorICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBqc0RhdGEgPSBXS1N0cmluZ0NvcHlKU1N0cmluZyhkYXRhKTsKKyAg
ICBKU09iamVjdFJlZiB3cmFwcGVkTWVzc2FnZSA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAwLCAw
KTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdyYXBwZWRNZXNzYWdlLCBkYXRh
TmFtZSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwganNEYXRhLmdldCgpKSwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7
CisgICAgcmV0dXJuIHdyYXBwZWRNZXNzYWdlOworfQorCit2b2lkIFF0QnVpbHRpbkJ1bmRsZVBh
Z2U6OmRpZFJlY2VpdmVNZXNzYWdlVG9OYXZpZ2F0b3JRdE9iamVjdChXS1N0cmluZ1JlZiBjb250
ZW50cykKK3sKKyAgICBzdGF0aWMgSlNTdHJpbmdSZWYgb25tZXNzYWdlTmFtZSA9IEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvbm1lc3NhZ2UiKTsKKworICAgIGlmICghbV9uYXZpZ2F0
b3JRdE9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOworICAgIEpTR2xvYmFsQ29udGV4
dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsK
KworICAgIEpTVmFsdWVSZWYgb25tZXNzYWdlVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIG1fbmF2aWdhdG9yUXRPYmplY3QsIG9ubWVzc2FnZU5hbWUsIDApOworICAgIGlmICgh
SlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIG9ubWVzc2FnZVZhbHVlKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSlNPYmplY3RSZWYgb25tZXNzYWdlRnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgb25tZXNzYWdlVmFsdWUsIDApOworICAgIGlmICghSlNPYmplY3RJc0Z1bmN0aW9u
KGNvbnRleHQsIG9ubWVzc2FnZUZ1bmN0aW9uKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNP
YmplY3RSZWYgd3JhcHBlZE1lc3NhZ2UgPSBjcmVhdGVXcmFwcGVkTWVzc2FnZShjb250ZXh0LCBj
b250ZW50cyk7CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBvbm1lc3NhZ2VG
dW5jdGlvbiwgMCwgMSwgJndyYXBwZWRNZXNzYWdlLCAwKTsKK30KKwordm9pZCBRdEJ1aWx0aW5C
dW5kbGVQYWdlOjpzZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmIChlbmFibGVkID09IG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBvbmx5IGFmdGVy
IHRoZSBuZXh0IHBhZ2UgbG9hZC4KKyAgICBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZCA9IGVu
YWJsZWQ7Cit9CisKK3ZvaWQgUXRCdWlsdGluQnVuZGxlUGFnZTo6cmVnaXN0ZXJOYXZpZ2F0b3JR
dE9iamVjdChKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBzdGF0aWMgSlNTdHJp
bmdSZWYgcG9zdE1lc3NhZ2VOYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBv
c3RNZXNzYWdlIik7CisgICAgc3RhdGljIEpTU3RyaW5nUmVmIG5hdmlnYXRvck5hbWUgPSBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmF2aWdhdG9yIik7CisgICAgc3RhdGljIEpTU3Ry
aW5nUmVmIHF0TmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJxdCIpOworCisg
ICAgaWYgKG1fbmF2aWdhdG9yUXRPYmplY3QpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29u
dGV4dCwgbV9uYXZpZ2F0b3JRdE9iamVjdCk7CisgICAgbV9uYXZpZ2F0b3JRdE9iamVjdCA9IEpT
T2JqZWN0TWFrZShjb250ZXh0LCBuYXZpZ2F0b3JRdE9iamVjdENsYXNzKCksIHRoaXMpOworICAg
IEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIG1fbmF2aWdhdG9yUXRPYmplY3QpOworCisgICAgSlNP
YmplY3RSZWYgcG9zdE1lc3NhZ2UgPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhj
b250ZXh0LCBwb3N0TWVzc2FnZU5hbWUsIHF0X3Bvc3RNZXNzYWdlQ2FsbGJhY2spOworICAgIEpT
T2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgbV9uYXZpZ2F0b3JRdE9iamVjdCwgcG9zdE1lc3Nh
Z2VOYW1lLCBwb3N0TWVzc2FnZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CisKKyAgICBKU1ZhbHVlUmVmIG5hdmlnYXRv
clZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxP
YmplY3QoY29udGV4dCksIG5hdmlnYXRvck5hbWUsIDApOworICAgIGlmICghSlNWYWx1ZUlzT2Jq
ZWN0KGNvbnRleHQsIG5hdmlnYXRvclZhbHVlKSkKKyAgICAgICAgcmV0dXJuOworICAgIEpTT2Jq
ZWN0UmVmIG5hdmlnYXRvck9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBuYXZpZ2F0
b3JWYWx1ZSwgMCk7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBuYXZpZ2F0b3JP
YmplY3QsIHF0TmFtZSwgbV9uYXZpZ2F0b3JRdE9iamVjdCwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7Cit9CisKK0pTQ2xh
c3NSZWYgUXRCdWlsdGluQnVuZGxlUGFnZTo6bmF2aWdhdG9yUXRPYmplY3RDbGFzcygpCit7Cisg
ICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSAwOworICAgIGlmICghY2xhc3NSZWYpIHsK
KyAgICAgICAgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gbmF2aWdhdG9yUXRPYmplY3RDbGFzcyA9
IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgICAgICBjbGFzc1JlZiA9IEpTQ2xhc3NDcmVh
dGUoJm5hdmlnYXRvclF0T2JqZWN0Q2xhc3MpOworICAgIH0KKyAgICByZXR1cm4gY2xhc3NSZWY7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZVBhZ2UuaAppbmRleCAzZjA5OGU5YmE3OTAwNDc1Yzli
M2E5NmZhYWY0NWE2Y2IyODc1NThlLi4zZmZiM2YwMDg5MzNkY2RmODRiMWY0YmJlNjI4NWExMGQy
ZTFjYTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRp
bkJ1bmRsZVBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0QnVpbHRp
bkJ1bmRsZVBhZ2UuaApAQCAtMjcsNyArMjcsOSBAQAogI2lmbmRlZiBRdEJ1aWx0aW5CdW5kbGVQ
YWdlX2gKICNkZWZpbmUgUXRCdWlsdGluQnVuZGxlUGFnZV9oCiAKKyNpbmNsdWRlICJKU09iamVj
dFJlZi5oIgogI2luY2x1ZGUgIldLQnVuZGxlUGFnZS5oIgorI2luY2x1ZGUgIldLQnVuZGxlU2Ny
aXB0V29ybGQuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQwLDkgKzQyLDI2IEBAIHB1
YmxpYzoKIAogICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl
OyB9CiAKKyAgICAvLyBMb2FkZXIgQ2xpZW50LgorICAgIHN0YXRpYyB2b2lkIGRpZENsZWFyV2lu
ZG93Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCBXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmLCBjb25zdCB2b2lkKik7CisKKyAgICB2b2lkIGRpZENsZWFyV2luZG93Rm9y
RnJhbWUoV0tCdW5kbGVGcmFtZVJlZiwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZik7CisKKyAgICB2
b2lkIHBvc3RNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KFdLU3RyaW5nUmVmIG1lc3NhZ2Up
OworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KFdLU3RyaW5n
UmVmIG1lc3NhZ2UpOworCisgICAgYm9vbCBuYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDsgfQorICAgIHZvaWQgc2V0TmF2
aWdhdG9yUXRPYmplY3RFbmFibGVkKGJvb2wpOworCiBwcml2YXRlOgorICAgIHZvaWQgcmVnaXN0
ZXJOYXZpZ2F0b3JRdE9iamVjdChKU0dsb2JhbENvbnRleHRSZWYpOworCisgICAgc3RhdGljIEpT
Q2xhc3NSZWYgbmF2aWdhdG9yUXRPYmplY3RDbGFzcygpOworCiAgICAgUXRCdWlsdGluQnVuZGxl
KiBtX2J1bmRsZTsKICAgICBXS0J1bmRsZVBhZ2VSZWYgbV9wYWdlOworICAgIEpTT2JqZWN0UmVm
IG1fbmF2aWdhdG9yUXRPYmplY3Q7CisgICAgYm9vbCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxl
ZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="111662"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
      

    </bug>

</bugzilla>