<?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>99114</bug_id>
          
          <creation_ts>2012-10-11 16:30:48 -0700</creation_ts>
          <short_desc>[EFL][WK2] Add Ewk_Window_Features API and related UI callbacks</short_desc>
          <delta_ts>2012-11-20 19:22:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jinwoo Song">jinwoo7.song</reporter>
          <assigned_to name="Jinwoo Song">jinwoo7.song</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>740399</commentid>
    <comment_count>0</comment_count>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-10-11 16:30:48 -0700</bug_when>
    <thetext>UI client callbacks related to window features such as toobars, menuBar, statusBar, resize should be added
so that it is possible to control the window features in the browser applications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759368</commentid>
    <comment_count>1</comment_count>
      <attachid>172512</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-06 01:18:22 -0800</bug_when>
    <thetext>Created attachment 172512
initial work.

This is a working draft, so please do not review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759413</commentid>
    <comment_count>2</comment_count>
      <attachid>172512</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-11-06 01:50:59 -0800</bug_when>
    <thetext>Comment on attachment 172512
initial work.

You can set r- by yourself. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765524</commentid>
    <comment_count>3</comment_count>
      <attachid>173881</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-13 06:06:08 -0800</bug_when>
    <thetext>Created attachment 173881
working patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766729</commentid>
    <comment_count>4</comment_count>
      <attachid>174124</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-14 04:06:37 -0800</bug_when>
    <thetext>Created attachment 174124
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767650</commentid>
    <comment_count>5</comment_count>
      <attachid>174327</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-14 19:55:25 -0800</bug_when>
    <thetext>Created attachment 174327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767651</commentid>
    <comment_count>6</comment_count>
      <attachid>174328</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-14 19:57:47 -0800</bug_when>
    <thetext>Created attachment 174328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767663</commentid>
    <comment_count>7</comment_count>
      <attachid>174328</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-11-14 20:22:01 -0800</bug_when>
    <thetext>Comment on attachment 174328
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h:196
&gt; +DECLARE_EWK_VIEW_CALLBACK(ScrollbarsVisible, &quot;scorllbars,visible&quot;, bool);
&gt; +DECLARE_EWK_VIEW_CALLBACK(StatusbarVisible, &quot;statusbar,visible&quot;, bool);

Should we send this signal to applications?

And don&apos;t you need to remove CloseWindow signal?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:41
&gt; +        if (booleanValue)
&gt; +            m_toolbarVisible = booleanValue-&gt;value();

How about adding simple inline method to reduce duplication.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:83
&gt; +        WebCore::WindowFeatures* coreFeatures = new WebCore::WindowFeatures();

Why we should create WindowFeatures?

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:79
&gt; +    bool toolbarVisible = viewImpl-&gt;windowFeatures()-&gt;toolbarVisible();
&gt; +
&gt; +    return toolbarVisible;

Just return looks enough</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767675</commentid>
    <comment_count>8</comment_count>
      <attachid>174328</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-14 20:41:38 -0800</bug_when>
    <thetext>Comment on attachment 174328
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h:196
&gt;&gt; +DECLARE_EWK_VIEW_CALLBACK(StatusbarVisible, &quot;statusbar,visible&quot;, bool);
&gt; 
&gt; Should we send this signal to applications?
&gt; 
&gt; And don&apos;t you need to remove CloseWindow signal?

Missing signal description in ewk_view.h

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:83
&gt; +EAPI void ewk_window_features_int_property_get(const Ewk_Window_Features *window_features, int *x, int *y, int *w, int *h);

I think *_int_* is meaningless.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features_private.h:74
&gt; +    explicit EwkWindowFeatures(ImmutableDictionary* windowFeatures, EwkViewImpl* viewImpl);

You don&apos;t need to use *explicit* when there are two parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767691</commentid>
    <comment_count>9</comment_count>
      <attachid>174328</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-14 21:32:21 -0800</bug_when>
    <thetext>Comment on attachment 174328
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:64
&gt; +EAPI void ewk_window_features_bool_property_get(const Ewk_Window_Features *window_features, Eina_Bool *toolbar_visible, Eina_Bool *statusbar_visible, Eina_Bool *scrollbars_visible, Eina_Bool *menubar_visible, Eina_Bool *locationbar_visible, Eina_Bool *resizable, Eina_Bool *fullscreen);

Can&apos;t we have separate functions to get each property? All in one like this is just awful.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:83
&gt;&gt; +EAPI void ewk_window_features_int_property_get(const Ewk_Window_Features *window_features, int *x, int *y, int *w, int *h);
&gt; 
&gt; I think *_int_* is meaningless.

ewk_window_features_geometry_get() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767699</commentid>
    <comment_count>10</comment_count>
      <attachid>174328</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-14 21:38:47 -0800</bug_when>
    <thetext>Comment on attachment 174328
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h:195
&gt; +DECLARE_EWK_VIEW_CALLBACK(ScrollbarsVisible, &quot;scorllbars,visible&quot;, bool);

typo in a signal..

&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp:841
&gt; +        return static_cast&lt;WKPageRef&gt;(WKRetain(viewImpl-&gt;page()));

We used to return 0 in this case, why the change?

&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h:107
&gt; +    EwkWindowFeatures* windowFeatures() { return m_windowFeatures.get(); }

This returns NULL if the view was not created via window.create(), right?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:38
&gt; +    if (windowFeatures) {

You never seem to create EwkWindowFeatures with windowFeatures == NULL. Why is this needed?

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:86
&gt; +    viewImpl-&gt;windowFeatures()-&gt;setToolbarVisible(toolbarVisible);

What if windowFeatures() returns NULL? It seems perfectly possible with the current code. For e.g. I have a feeling the main view has windowFeature set to NULL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767703</commentid>
    <comment_count>11</comment_count>
      <attachid>174328</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-14 21:42:40 -0800</bug_when>
    <thetext>Comment on attachment 174328
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h:196
&gt;&gt;&gt; +DECLARE_EWK_VIEW_CALLBACK(StatusbarVisible, &quot;statusbar,visible&quot;, bool);
&gt;&gt; 
&gt;&gt; Should we send this signal to applications?
&gt;&gt; 
&gt;&gt; And don&apos;t you need to remove CloseWindow signal?
&gt; 
&gt; Missing signal description in ewk_view.h

Ryuan, as window features are sent to application by smart callback function now, those callbacks are duplicated. I&apos;ll remove them and upload a new patch.
I&apos;ll also remove &apos;CloseWindow&apos; and &apos;CreateWindow&apos; callbacks.
Gyuyoung, I&apos;ll do not add signals.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:41
&gt;&gt; +            m_toolbarVisible = booleanValue-&gt;value();
&gt; 
&gt; How about adding simple inline method to reduce duplication.

Good suggestion, I&apos;ll do it.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:83
&gt;&gt; +        WebCore::WindowFeatures* coreFeatures = new WebCore::WindowFeatures();
&gt; 
&gt; Why we should create WindowFeatures?

It&apos;s for initializing member variables when &apos;windowFeature&apos; is NULL.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:83
&gt;&gt; +EAPI void ewk_window_features_int_property_get(const Ewk_Window_Features *window_features, int *x, int *y, int *w, int *h);
&gt; 
&gt; I think *_int_* is meaningless.

This API returns the *int* values such as window position and size and the other API returns the *bool* values.
That&apos;s the reason why *_int_* is in the API name.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features_private.h:74
&gt;&gt; +    explicit EwkWindowFeatures(ImmutableDictionary* windowFeatures, EwkViewImpl* viewImpl);
&gt; 
&gt; You don&apos;t need to use *explicit* when there are two parameters.

You&apos;re right. I&apos;ll remove it.

&gt;&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:79
&gt;&gt; +    return toolbarVisible;
&gt; 
&gt; Just return looks enough

I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767769</commentid>
    <comment_count>12</comment_count>
      <attachid>174328</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-14 23:32:02 -0800</bug_when>
    <thetext>Comment on attachment 174328
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h:195
&gt;&gt; +DECLARE_EWK_VIEW_CALLBACK(ScrollbarsVisible, &quot;scorllbars,visible&quot;, bool);
&gt; 
&gt; typo in a signal..

Ops, my mistake. As I commented, I&apos;ll remove the callbacks.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp:841
&gt;&gt; +        return static_cast&lt;WKPageRef&gt;(WKRetain(viewImpl-&gt;page()));
&gt; 
&gt; We used to return 0 in this case, why the change?

If we return 0, web page isn&apos;t loaded and nothing happens as you know. 
With this change, new page is loaded in the same window when the window_create is not implemented by app.
I think it&apos;s more kind policy to the webkit/efl clients. :)

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h:107
&gt;&gt; +    EwkWindowFeatures* windowFeatures() { return m_windowFeatures.get(); }
&gt; 
&gt; This returns NULL if the view was not created via window.create(), right?

Yes, it is not initialized in EwkViewImpl(). I&apos;ll add the initialization code.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:38
&gt;&gt; +    if (windowFeatures) {
&gt; 
&gt; You never seem to create EwkWindowFeatures with windowFeatures == NULL. Why is this needed?

I&apos;ll add initialization code with NULL to EwkViewImpl() constructor.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:64
&gt;&gt; +EAPI void ewk_window_features_bool_property_get(const Ewk_Window_Features *window_features, Eina_Bool *toolbar_visible, Eina_Bool *statusbar_visible, Eina_Bool *scrollbars_visible, Eina_Bool *menubar_visible, Eina_Bool *locationbar_visible, Eina_Bool *resizable, Eina_Bool *fullscreen);
&gt; 
&gt; Can&apos;t we have separate functions to get each property? All in one like this is just awful.

I agree and will separate functions.

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:83
&gt;&gt;&gt;&gt; +EAPI void ewk_window_features_int_property_get(const Ewk_Window_Features *window_features, int *x, int *y, int *w, int *h);
&gt;&gt;&gt; 
&gt;&gt;&gt; I think *_int_* is meaningless.
&gt;&gt; 
&gt;&gt; ewk_window_features_geometry_get() ?
&gt; 
&gt; This API returns the *int* values such as window position and size and the other API returns the *bool* values.
&gt; That&apos;s the reason why *_int_* is in the API name.

Thanks for good naming, Chris.

&gt;&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:86
&gt;&gt; +    viewImpl-&gt;windowFeatures()-&gt;setToolbarVisible(toolbarVisible);
&gt; 
&gt; What if windowFeatures() returns NULL? It seems perfectly possible with the current code. For e.g. I have a feeling the main view has windowFeature set to NULL.

setToolbarsAreVisible is called in createWindow() of FrameLoader.cpp . So I think windowFeatures() does not return NULL in the current code.
But I&apos;ll change the patch to initialize m_windowFeatures and also add NULL check code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767951</commentid>
    <comment_count>13</comment_count>
      <attachid>174404</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-15 04:40:29 -0800</bug_when>
    <thetext>Created attachment 174404
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767960</commentid>
    <comment_count>14</comment_count>
      <attachid>174404</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-15 04:50:13 -0800</bug_when>
    <thetext>Comment on attachment 174404
Patch

Attachment 174404 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14832809</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767977</commentid>
    <comment_count>15</comment_count>
      <attachid>174404</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-15 05:16:40 -0800</bug_when>
    <thetext>Comment on attachment 174404
Patch

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

&gt; Source/WebKit2/ChangeLog:29
&gt; +        * UIProcess/API/efl/ewk_window_features.h: Added.

You apparently failed to add this new public header to EWebKit2.h

&gt; Source/WebKit2/PlatformEfl.cmake:76
&gt; +    UIProcess/API/efl/ewk_window_features.cpp

The corresponding public header should be installed (below in the same file)

&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp:842
&gt; +        return static_cast&lt;WKPageRef&gt;(WKRetain(viewImpl-&gt;page()));

I don&apos;t think this is right. We should probably return 0 here.
If a web page tries to open a popup window, as a user I would prefer if the popup was not opened instead of having the popup content replace my current page. Wouldn&apos;t you?

&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp:853
&gt; +    newViewImpl-&gt;m_windowFeatures = ewkWindowFeatures;

The EwkWindowFeatures object will be created twice in this case. Once in this function, and a second time in the EwkViewImpl constructor (with empty features).
I think m_windowFeatures should be lazily created instead of initializing it in EwkViewImpl constructor to avoid this issue.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:35
&gt; +bool getWindowFeatureValue(ImmutableDictionary* windowFeatures, const char* featureName)

This should be static and added to the class as private.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:42
&gt; +    return 0;

false not 0

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:45
&gt; +double getWindowFeatureGeometry(ImmutableDictionary* windowFeatures, const char* featureName)

This should be static and added to the class as private.
It feels like getWindowFeatureValue() and getWindowFeatureGeometry() would be replaced by one templated function?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:58
&gt; +    if (windowFeatures) {

We should probably add an ASSERT(viewImpl); at the beginning of the constructor.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:72
&gt; +        WebCore::WindowFeatures* coreFeatures = new WebCore::WindowFeatures();

This seems to be leaking, please use smart pointer to avoid this.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:89
&gt; +Eina_Bool ewk_window_features_toolbar_visible_get(const Ewk_Window_Features *window_features)

star on wrong side

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:91
&gt; +    EWK_OBJ_GET_IMPL_OR_RETURN(const EwkWindowFeatures, window_features, impl, 0);

false not 0

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:96
&gt; +Eina_Bool ewk_window_features_statusbar_visible_get(const Ewk_Window_Features *window_features)

star on wrong side

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:98
&gt; +    EWK_OBJ_GET_IMPL_OR_RETURN(const EwkWindowFeatures, window_features, impl, 0);

false not 0

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:103
&gt; +Eina_Bool ewk_window_features_scrollbars_visible_get(const Ewk_Window_Features *window_features)

star on wrong side

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:105
&gt; +    EWK_OBJ_GET_IMPL_OR_RETURN(const EwkWindowFeatures, window_features, impl, 0);

false not 0

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:110
&gt; +Eina_Bool ewk_window_features_menubar_visible_get(const Ewk_Window_Features *window_features)

star on wrong side

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:119
&gt; +    EWK_OBJ_GET_IMPL_OR_RETURN(const EwkWindowFeatures, window_features, impl, 0);

false not 0

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:124
&gt; +Eina_Bool ewk_window_features_resizable_get(const Ewk_Window_Features *window_features)

star on wrong side

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:126
&gt; +    EWK_OBJ_GET_IMPL_OR_RETURN(const EwkWindowFeatures, window_features, impl, 0);

false not 0

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:131
&gt; +Eina_Bool ewk_window_features_fullscreen_get(const Ewk_Window_Features *window_features)

star on wrong side

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:133
&gt; +    EWK_OBJ_GET_IMPL_OR_RETURN(const EwkWindowFeatures, window_features, impl, 0);

false not 0

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:52
&gt; + * @return The property value which indicates if toolbar is visible

@c EINA_TRUE is the toolbar should be visible, @c EINA_FALSE otherwise.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:61
&gt; + * @return The property value which indicates if statusbar is visible

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:70
&gt; + * @return The property value which indicates if scrollbar are visible

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:79
&gt; + * @return The property value which indicates if menubar is visible

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:88
&gt; + * @return The property value which indicates if locationbar is visible

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:97
&gt; + * @return The property value which indicates if the window is resizable

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:106
&gt; + * @return The property value which indicates if the window is fullscreen

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:122
&gt; +EAPI void ewk_window_features_geometry_get(const Ewk_Window_Features *window_features, int *x, int *y, int *w, int *h);

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features_private.h:36
&gt; +using namespace WebKit;

We avoid this in headers (even private ones).

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features_private.h:37
&gt; +using namespace WebCore;

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features_private.h:61
&gt; +    bool menubarVisible() const { return m_menubarVisible; }

menuBar? Feels like the camel case is wrong here.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features_private.h:64
&gt; +    bool locationbarVisible() const { return m_locationbarVisible; }

locationBar? Feels like the camel case is wrong here.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features_private.h:70
&gt; +    bool fullscreen() const { return m_fullscreen; }

fullScreen? Feels like the camel case is wrong here.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_window_features.cpp:37
&gt; +static Evas_Object* createDefaultWindow(Ewk_View_Smart_Data *smartData, const Ewk_Window_Features *windowFeatures)

&quot;stars on wrong side&quot;

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_window_features.cpp:39
&gt; +    // default vales of WebCore:WindowFeatures()

&quot;values&quot;

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_window_features.cpp:72
&gt; +    const char* windowHTML = &quot;&lt;html&gt;&lt;body onLoad=\&quot;window.open(&apos;&apos;, &apos;&apos;);\&quot;&gt;&lt;/body&gt;&lt;/html&gt;&quot;;

const char windowHTML[] may be better here (slight difference).

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_window_features.cpp:105
&gt; +    const char* windowHTML = &quot;&lt;html&gt;&lt;body onLoad=\&quot;window.open(&apos;&apos;, &apos;&apos;, &apos;left=100,top=150,width=400,height=400,location=no,menubar=no,status=yes,toolbar=no,scrollbars=yes,resizable=yes,fullscreen=no&apos;);\&quot;&gt;&lt;/body&gt;&lt;/html&gt;&quot;;

const char windowHTML[] may be better here.

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:77
&gt; +    return features ? features-&gt;toolbarVisible() : false;

Null check should probably be replaced by an assertion as it should never be NULL with your current implementation.

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:83
&gt; +    if (features)

Ditto.

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:90
&gt; +    return features ? features-&gt;menubarVisible() : false;

Ditto

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:96
&gt; +    if (features)

Ditto.

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:97
&gt; +        features-&gt;setMenubarVisible(menubarVisible);

What&apos;s the point of updating features if the client (browser) has no way to know about it? (you removed the signals and windowFeatures is not exposed to the client).

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:103
&gt; +    return features ? features-&gt;statusbarVisible() : false;

Ditto.

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:109
&gt; +    if (features)

Ditto.

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:116
&gt; +    return features ? features-&gt;resizable() : false;

Ditto.

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:122
&gt; +    if (features)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768943</commentid>
    <comment_count>16</comment_count>
      <attachid>174404</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-15 22:42:57 -0800</bug_when>
    <thetext>Comment on attachment 174404
Patch

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

Fixed the issues commented by Chris.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp:842
&gt;&gt; +        return static_cast&lt;WKPageRef&gt;(WKRetain(viewImpl-&gt;page()));
&gt; 
&gt; I don&apos;t think this is right. We should probably return 0 here.
&gt; If a web page tries to open a popup window, as a user I would prefer if the popup was not opened instead of having the popup content replace my current page. Wouldn&apos;t you?

From the users side, they may want to exact behavior. Okay, I&apos;ll return 0 here.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp:853
&gt;&gt; +    newViewImpl-&gt;m_windowFeatures = ewkWindowFeatures;
&gt; 
&gt; The EwkWindowFeatures object will be created twice in this case. Once in this function, and a second time in the EwkViewImpl constructor (with empty features).
&gt; I think m_windowFeatures should be lazily created instead of initializing it in EwkViewImpl constructor to avoid this issue.

Okay, I&apos;ll apply your advice.

&gt;&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:97
&gt;&gt; +        features-&gt;setMenubarVisible(menubarVisible);
&gt; 
&gt; What&apos;s the point of updating features if the client (browser) has no way to know about it? (you removed the signals and windowFeatures is not exposed to the client).

Window.menubar.visible gets the property value from PageUIClientEfl::menuBarIsVisible(), so we update the value here.
If there is a use case the client application should know the value changes, I&apos;ll add a signal in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768951</commentid>
    <comment_count>17</comment_count>
      <attachid>174611</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-15 23:01:04 -0800</bug_when>
    <thetext>Created attachment 174611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768970</commentid>
    <comment_count>18</comment_count>
      <attachid>174611</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-15 23:51:44 -0800</bug_when>
    <thetext>Comment on attachment 174611
Patch

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

&gt; Source/WebKit2/ChangeLog:13
&gt; +        so that it is possible to retreive the window object property values.

&quot;retrieve&quot;

&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h:107
&gt; +    EwkWindowFeatures* windowFeatures() { return m_windowFeatures.get(); }

You missing lazy initialization here? It will return NULL for windows not created by JS.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:56
&gt; +T1 EwkWindowFeatures::getWindowFeatureValue(ImmutableDictionary* windowFeatures, const char* featureName)

Seems to me featureName could be a String here since this is a C++ method

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:60
&gt; +    if (featureValue)

nit: we usually do the opposite:
if (!featureValue)
  return false;

return featureValue-&gt;value();

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:85
&gt; +    features-&gt;setToolbarVisible(toolbarVisible);

We should really notify the app in these setters, why did you remove the signals?
The app has currently no way of knowing that it changed and that it should update its UI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769179</commentid>
    <comment_count>19</comment_count>
      <attachid>174611</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-16 06:05:18 -0800</bug_when>
    <thetext>Comment on attachment 174611
Patch

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

&gt;&gt; Source/WebKit2/ChangeLog:13
&gt;&gt; +        so that it is possible to retreive the window object property values.
&gt; 
&gt; &quot;retrieve&quot;

fixed.

&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp:851
&gt; +    newViewImpl-&gt;m_windowFeatures = ewkWindowFeatures;

I tried to find a way to lazy initialization, but in the case the window is created by JS, m_windowFeatures should be initialized with the parameters.
So I left it here. Chris, what do you think about this?

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h:107
&gt;&gt; +    EwkWindowFeatures* windowFeatures() { return m_windowFeatures.get(); }
&gt; 
&gt; You missing lazy initialization here? It will return NULL for windows not created by JS.

I added m_windowFeatures initialization code here for the cases when the window is not created by JS.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:56
&gt;&gt; +T1 EwkWindowFeatures::getWindowFeatureValue(ImmutableDictionary* windowFeatures, const char* featureName)
&gt; 
&gt; Seems to me featureName could be a String here since this is a C++ method

fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:60
&gt;&gt; +    if (featureValue)
&gt; 
&gt; nit: we usually do the opposite:
&gt; if (!featureValue)
&gt;   return false;
&gt; 
&gt; return featureValue-&gt;value();

fixed.

&gt;&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:85
&gt;&gt; +    features-&gt;setToolbarVisible(toolbarVisible);
&gt; 
&gt; We should really notify the app in these setters, why did you remove the signals?
&gt; The app has currently no way of knowing that it changed and that it should update its UI.

I added signal again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769181</commentid>
    <comment_count>20</comment_count>
      <attachid>174663</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-16 06:05:50 -0800</bug_when>
    <thetext>Created attachment 174663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769206</commentid>
    <comment_count>21</comment_count>
      <attachid>174663</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-16 06:30:05 -0800</bug_when>
    <thetext>Comment on attachment 174663
Patch

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

Ah, better :)

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:51
&gt; +        WebCore::WindowFeatures* coreFeatures = new WebCore::WindowFeatures();

No raw pointers please.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:66
&gt; +        delete coreFeatures;

Those 2 lines will be useless if you use a smart pointer (and you should)

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:72
&gt; +T1 EwkWindowFeatures::getWindowFeatureValue(ImmutableDictionary* windowFeatures, const String featureName)

Missing reference: const String&amp;

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:131
&gt; +void ewk_window_features_geometry_get(const Ewk_Window_Features* window_features, int* x, int* y, int* width, int* height)

Should we use Evas_Coord instead of int since this is public EFL/C API? It seems EFL is using Evas_Coord:
http://docs.enlightenment.org/auto/evas/group__Evas__Object__Group__Basic.html#ga6f52fab1a96dc58c85ee481d84bac871

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:88
&gt; +    viewImpl-&gt;smartCallback&lt;ToolbarVisible&gt;().call(&amp;toolbarVisible);

The callbacks could be called by the EwkWindowFeatures setters. This would be less error prone (if someone calls a EwkWindowFeatures setters but forgets the emit callback on the view).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770295</commentid>
    <comment_count>22</comment_count>
      <attachid>174663</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-18 20:01:07 -0800</bug_when>
    <thetext>Comment on attachment 174663
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:51
&gt;&gt; +        WebCore::WindowFeatures* coreFeatures = new WebCore::WindowFeatures();
&gt; 
&gt; No raw pointers please.

Opps, I missed it. I fixed to use smart pointer.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:66
&gt;&gt; +        delete coreFeatures;
&gt; 
&gt; Those 2 lines will be useless if you use a smart pointer (and you should)

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:72
&gt;&gt; +T1 EwkWindowFeatures::getWindowFeatureValue(ImmutableDictionary* windowFeatures, const String featureName)
&gt; 
&gt; Missing reference: const String&amp;

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:131
&gt;&gt; +void ewk_window_features_geometry_get(const Ewk_Window_Features* window_features, int* x, int* y, int* width, int* height)
&gt; 
&gt; Should we use Evas_Coord instead of int since this is public EFL/C API? It seems EFL is using Evas_Coord:
&gt; http://docs.enlightenment.org/auto/evas/group__Evas__Object__Group__Basic.html#ga6f52fab1a96dc58c85ee481d84bac871

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:88
&gt;&gt; +    viewImpl-&gt;smartCallback&lt;ToolbarVisible&gt;().call(&amp;toolbarVisible);
&gt; 
&gt; The callbacks could be called by the EwkWindowFeatures setters. This would be less error prone (if someone calls a EwkWindowFeatures setters but forgets the emit callback on the view).

Changed callbacks to be called in the setters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770298</commentid>
    <comment_count>23</comment_count>
      <attachid>174880</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-18 20:06:52 -0800</bug_when>
    <thetext>Created attachment 174880
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770363</commentid>
    <comment_count>24</comment_count>
      <attachid>174880</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-18 22:35:02 -0800</bug_when>
    <thetext>Comment on attachment 174880
Patch

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

LGTM with minor comment:

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:83
&gt; +    EwkViewImpl* viewImpl = toPageUIClientEfl(clientInfo)-&gt;m_viewImpl;

nit: Be consistent, sometimes you have 1 variable (features), sometimes you have 2 (viewImpl and features). IMO, you need only 1 (features) so let&apos;s get rid of the viewImpl temporary variable and make it consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770434</commentid>
    <comment_count>25</comment_count>
      <attachid>174908</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 00:47:44 -0800</bug_when>
    <thetext>Created attachment 174908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770435</commentid>
    <comment_count>26</comment_count>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 00:48:13 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 174880 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174880&amp;action=review
&gt; 
&gt; LGTM with minor comment:
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:83
&gt; &gt; +    EwkViewImpl* viewImpl = toPageUIClientEfl(clientInfo)-&gt;m_viewImpl;
&gt; 
&gt; nit: Be consistent, sometimes you have 1 variable (features), sometimes you have 2 (viewImpl and features). IMO, you need only 1 (features) so let&apos;s get rid of the viewImpl temporary variable and make it consistent.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770448</commentid>
    <comment_count>27</comment_count>
      <attachid>174908</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-19 01:03:05 -0800</bug_when>
    <thetext>Comment on attachment 174908
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:46
&gt; +typedef struct Ewk_Object Ewk_Window_Features;

Ewk_Object -&gt; EwkObject

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:53
&gt; + * @return @c EINA_TRUE is the toolbar should be visible, @c EINA_FALSE otherwise.

Do not use . at the end of line.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:62
&gt; + * @return @c EINA_TRUE is the statusbar should be visible, @c EINA_FALSE otherwise.

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:71
&gt; + * @return @c EINA_TRUE is the scrollbars should be visible, @c EINA_FALSE otherwise.

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:80
&gt; + * @return @c EINA_TRUE is the menubar should be visible, @c EINA_FALSE otherwise.

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:89
&gt; + * @return @c EINA_TRUE is the locationbar should be visible, @c EINA_FALSE otherwise.

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.h:107
&gt; + * @return @c EINA_TRUE is the window should be fullscreen, @c EINA_FALSE otherwise.

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features_private.h:25
&gt; +

Unneeded line.

&gt; Tools/MiniBrowser/efl/main.c:1054
&gt; +

Looks unneeded line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770531</commentid>
    <comment_count>28</comment_count>
      <attachid>174931</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 02:57:51 -0800</bug_when>
    <thetext>Created attachment 174931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770532</commentid>
    <comment_count>29</comment_count>
      <attachid>174908</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 03:00:17 -0800</bug_when>
    <thetext>Comment on attachment 174908
Patch

all fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770545</commentid>
    <comment_count>30</comment_count>
      <attachid>174931</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-11-19 03:16:45 -0800</bug_when>
    <thetext>Comment on attachment 174931
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:55
&gt; +        m_geometry.setHeight(getWindowFeatureValue&lt;double, WebDouble&gt;(windowFeatures, ASCIILiteral(&quot;height&quot;)));
&gt; +    } else {
&gt; +        OwnPtr&lt;WebCore::WindowFeatures&gt; coreFeatures = adoptPtr(new WebCore::WindowFeatures());
&gt; +
&gt; +        m_toolbarVisible = coreFeatures-&gt;toolBarVisible;
&gt; +        m_statusBarVisible = coreFeatures-&gt;statusBarVisible;

This is a bit ugly

&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:128
&gt; +void PageUIClientEfl::setIsResizable(WKPageRef, bool resizable, const void* clientInfo)
&gt; +{
&gt; +    EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)-&gt;m_viewImpl-&gt;windowFeatures();
&gt; +    ASSERT(features);
&gt; +    features-&gt;setResizable(resizable);
&gt; +}

why are these overwritable at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770547</commentid>
    <comment_count>31</comment_count>
      <attachid>174931</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-19 03:18:22 -0800</bug_when>
    <thetext>Comment on attachment 174931
Patch

Attachment 174931 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14908137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770555</commentid>
    <comment_count>32</comment_count>
      <attachid>174937</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 03:29:08 -0800</bug_when>
    <thetext>Created attachment 174937
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770559</commentid>
    <comment_count>33</comment_count>
      <attachid>174937</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-19 03:33:49 -0800</bug_when>
    <thetext>Comment on attachment 174937
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_window_features.cpp:32
&gt; +#include &lt;gtest/gtest.h&gt;

Why do you include &lt;gtest/gtest.h&gt; again ? EWK2UnitTestBase.h already included it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770591</commentid>
    <comment_count>34</comment_count>
      <attachid>174931</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 04:21:04 -0800</bug_when>
    <thetext>Comment on attachment 174931
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:55
&gt;&gt; +        m_statusBarVisible = coreFeatures-&gt;statusBarVisible;
&gt; 
&gt; This is a bit ugly

I thought the EwkWindowFeatures should be initialized with the default values of WebCore::WindowFeatures when the webview is not created by JS.
In this case, as the windowFeatures parameter is not passed, we needs some default values to be returned when window.statusbar.visible is called.
Could you please let me know the better way or approach?

&gt;&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:128
&gt;&gt; +}
&gt; 
&gt; why are these overwritable at all?

Are you concerning about the &apos;resizable&apos; variable or all of the variables?
EwkWindowFeatures store the parameters passed by window.open() and the values are returned when the property values of window object, such as window.statusbar.visible, are accessed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770593</commentid>
    <comment_count>35</comment_count>
      <attachid>174937</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 04:22:18 -0800</bug_when>
    <thetext>Comment on attachment 174937
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_window_features.cpp:32
&gt;&gt; +#include &lt;gtest/gtest.h&gt;
&gt; 
&gt; Why do you include &lt;gtest/gtest.h&gt; again ? EWK2UnitTestBase.h already included it.

I&apos;ll remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770621</commentid>
    <comment_count>36</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-11-19 05:00:54 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 174931 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174931&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:55
&gt; &gt;&gt; +        m_statusBarVisible = coreFeatures-&gt;statusBarVisible;
&gt; &gt; 
&gt; &gt; This is a bit ugly
&gt; 
&gt; I thought the EwkWindowFeatures should be initialized with the default values of WebCore::WindowFeatures when the webview is not created by JS.
&gt; In this case, as the windowFeatures parameter is not passed, we needs some default values to be returned when window.statusbar.visible is called.
&gt; Could you please let me know the better way or approach?

Just initialize them in the initialization list with the same defaults. These default are not supposed to change anyway.

&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:128
&gt; &gt;&gt; +}
&gt; &gt; 
&gt; &gt; why are these overwritable at all?
&gt; 
&gt; Are you concerning about the &apos;resizable&apos; variable or all of the variables?
&gt; EwkWindowFeatures store the parameters passed by window.open() and the values are returned when the property values of window object, such as window.statusbar.visible, are accessed.

But those are all turned into a WebCore::WindowFeatures and not changed one-per-one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770653</commentid>
    <comment_count>37</comment_count>
      <attachid>174931</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 05:45:48 -0800</bug_when>
    <thetext>Comment on attachment 174931
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:55
&gt;&gt;&gt;&gt; +        m_statusBarVisible = coreFeatures-&gt;statusBarVisible;
&gt;&gt;&gt; 
&gt;&gt;&gt; This is a bit ugly
&gt;&gt; 
&gt;&gt; I thought the EwkWindowFeatures should be initialized with the default values of WebCore::WindowFeatures when the webview is not created by JS.
&gt;&gt; In this case, as the windowFeatures parameter is not passed, we needs some default values to be returned when window.statusbar.visible is called.
&gt;&gt; Could you please let me know the better way or approach?
&gt; 
&gt; Just initialize them in the initialization list with the same defaults. These default are not supposed to change anyway.

Yes, that would be more simpler and clearer. I&apos;ll initialize with the default values.

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp:128
&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt; 
&gt;&gt;&gt; why are these overwritable at all?
&gt;&gt; 
&gt;&gt; Are you concerning about the &apos;resizable&apos; variable or all of the variables?
&gt;&gt; EwkWindowFeatures store the parameters passed by window.open() and the values are returned when the property values of window object, such as window.statusbar.visible, are accessed.
&gt; 
&gt; But those are all turned into a WebCore::WindowFeatures and not changed one-per-one.

These setter methods are called in createWindow() of FrameLoader.cpp with the parameter set by JavaScript as following,
page-&gt;chrome()-&gt;setStatusbarVisible(features.statusBarVisible);
Is there anything I misunderstood?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770715</commentid>
    <comment_count>38</comment_count>
      <attachid>174975</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 07:09:40 -0800</bug_when>
    <thetext>Created attachment 174975
Patch

Applied</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770716</commentid>
    <comment_count>39</comment_count>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 07:10:26 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; Created an attachment (id=174975) [details]
&gt; Patch
&gt; 
&gt; Applied
Applied comments by Kenneth and Gyuyoung.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770738</commentid>
    <comment_count>40</comment_count>
      <attachid>174975</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-11-19 07:36:49 -0800</bug_when>
    <thetext>Comment on attachment 174975
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_window_features.cpp:37
&gt; +    , m_geometry(0, 0, 0, 0)

Normally the minimum size is supposed to be 100x100. WebCore has code for ensuring that</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770814</commentid>
    <comment_count>41</comment_count>
      <attachid>174996</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-19 09:36:15 -0800</bug_when>
    <thetext>Created attachment 174996
Patch

Changed the default window size to 100x100.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771185</commentid>
    <comment_count>42</comment_count>
      <attachid>174996</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-19 16:38:02 -0800</bug_when>
    <thetext>Comment on attachment 174996
Patch

Looks good to me. However, Kenneth might to want to take a final look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771692</commentid>
    <comment_count>43</comment_count>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-20 02:29:19 -0800</bug_when>
    <thetext>Kenneth, do you have any other comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772384</commentid>
    <comment_count>44</comment_count>
      <attachid>174996</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-20 19:21:52 -0800</bug_when>
    <thetext>Comment on attachment 174996
Patch

Clearing flags on attachment: 174996

Committed r135343: &lt;http://trac.webkit.org/changeset/135343&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772387</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-20 19:22:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172512</attachid>
            <date>2012-11-06 01:18:22 -0800</date>
            <delta_ts>2012-11-13 06:06:08 -0800</delta_ts>
            <desc>initial work.</desc>
            <filename>windowFeatures7.patch</filename>
            <type>text/plain</type>
            <size>34235</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggODQyZGY2Ni4uYzI2YWVjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTcyLDYgKzcyLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3df
ZmVhdHVyZXMuY3BwCiAKICAgICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdD
YWxsYmFja3MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxs
YmFja3MuaAppbmRleCA3MGIyN2M3Li4wN2JmYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCkBAIC02Myw2ICs2Myw3IEBA
IGVudW0gQ2FsbGJhY2tUeXBlIHsKICAgICBMb2FkRXJyb3IsCiAgICAgTG9hZEZpbmlzaGVkLAog
ICAgIExvYWRQcm9ncmVzcywKKyAgICBNZW51YmFyVmlzaWJsZSwKICAgICBQcm92aXNpb25hbExv
YWRGYWlsZWQsCiAgICAgUHJvdmlzaW9uYWxMb2FkUmVkaXJlY3QsCiAgICAgUHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCwKQEAgLTczLDExICs3NCwxNSBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAg
UmVzb3VyY2VSZXF1ZXN0U2VudCwKICAgICBOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sCiAgICAg
TmV3V2luZG93UG9saWN5RGVjaXNpb24sCisgICAgU2Nyb2xsYmFyc1Zpc2libGUsCisgICAgU3Rh
dHVzYmFyVmlzaWJsZSwKICAgICBUZXh0Rm91bmQsCiAgICAgVGl0bGVDaGFuZ2UsCisgICAgVG9v
bGJhclZpc2libGUsCiAgICAgVG9vbHRpcFRleHRVbnNldCwKICAgICBUb29sdGlwVGV4dFNldCwK
ICAgICBXZWJQcm9jZXNzQ3Jhc2hlZCwKKyAgICBXaW5kb3dSZXNpemFibGUsCiAjaWYgRU5BQkxF
KFdFQl9JTlRFTlRTKQogICAgIEludGVudFJlcXVlc3QsCiAjZW5kaWYKQEAgLTE2Miw2ICsxNjcs
NyBAQCBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKExvYWRQcm9ncmVzcywgImxvYWQscHJvZ3Jl
c3MiLCBkb3VibGUpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25hbExvYWRG
YWlsZWQsICJsb2FkLHByb3Zpc2lvbmFsLGZhaWxlZCIsIEV3a19FcnJvcik7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKFByb3Zpc2lvbmFsTG9hZFJlZGlyZWN0LCAibG9hZCxwcm92aXNpb25h
bCxyZWRpcmVjdCIsIHZvaWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25h
bExvYWRTdGFydGVkLCAibG9hZCxwcm92aXNpb25hbCxzdGFydGVkIiwgdm9pZCk7CitERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKE1lbnViYXJWaXNpYmxlLCAibWVudWJhcix2aXNpYmxlIiwgYm9v
bCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiwg
InBvbGljeSxkZWNpc2lvbixuYXZpZ2F0aW9uIiwgRXdrX05hdmlnYXRpb25fUG9saWN5X0RlY2lz
aW9uKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTmV3V2luZG93UG9saWN5RGVjaXNpb24s
ICJwb2xpY3ksZGVjaXNpb24sbmV3LHdpbmRvdyIsIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNp
c2lvbik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291cmNlTG9hZFN0YXJ0ZWQsICJy
ZXNvdXJjZSxyZXF1ZXN0LG5ldyIsIEV3a19SZXNvdXJjZV9SZXF1ZXN0KTsKQEAgLTE2OSwxMSAr
MTc1LDE1IEBAIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkUmVzcG9uc2Us
ICJyZXNvdXJjZSxyZXF1ZXN0LHJlc3BvbnNlIiwgRXdrCiBERUNMQVJFX0VXS19WSUVXX0NBTExC
QUNLKFJlc291cmNlTG9hZEZhaWxlZCwgInJlc291cmNlLHJlcXVlc3QsZmFpbGVkIiwgRXdrX1Jl
c291cmNlX0xvYWRfRXJyb3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxv
YWRGaW5pc2hlZCwgInJlc291cmNlLHJlcXVlc3QsZmluaXNoZWQiLCBFd2tfUmVzb3VyY2UpOwog
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZVJlcXVlc3RTZW50LCAicmVzb3VyY2Us
cmVxdWVzdCxzZW50IiwgRXdrX1Jlc291cmNlX1JlcXVlc3QpOworREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhTY3JvbGxiYXJzVmlzaWJsZSwgInNjb3JsbGJhcnMsdmlzaWJsZSIsIGJvb2wpOwor
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhTdGF0dXNiYXJWaXNpYmxlLCAic3RhdHVzYmFyLHZp
c2libGUiLCBib29sKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVGV4dEZvdW5kLCAidGV4
dCxmb3VuZCIsIHVuc2lnbmVkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVGl0bGVDaGFu
Z2UsICJ0aXRsZSxjaGFuZ2VkIiwgY2hhcik7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRv
b2xiYXJWaXNpYmxlLCAidG9vbGJhcix2aXNpYmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKFRvb2x0aXBUZXh0VW5zZXQsICJ0b29sdGlwLHRleHQsdW5zZXQiLCB2b2lkKTsK
IERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVG9vbHRpcFRleHRTZXQsICJ0b29sdGlwLHRleHQs
c2V0IiwgY2hhcik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFzaGVk
LCAid2VicHJvY2VzcyxjcmFzaGVkIiwgYm9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNL
KFdpbmRvd1Jlc2l6YWJsZSwgIndpbmRvdyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFCTEUo
V0VCX0lOVEVOVFMpCiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3QsICJp
bnRlbnQscmVxdWVzdCxuZXciLCBFd2tfSW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmluZGV4IDQxZWZjM2MuLjEw
ODJiNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
SW1wbC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5o
IgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVj
b3JlX0V2YXMuaD4KICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5oPgpAQCAt
MTEzLDYgKzExNCw3IEBAIEV3a1ZpZXdJbXBsOjpFd2tWaWV3SW1wbChFdmFzX09iamVjdCogdmll
dywgUGFzc1JlZlB0cjxFd2tfQ29udGV4dD4gY29udGV4dCwgUGFzCiAgICAgLCBtX3BhZ2VWaWV3
cG9ydENvbnRyb2xsZXIoYWRvcHRQdHIobmV3IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIobV9wYWdl
UHJveHkuZ2V0KCksIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC5nZXQoKSkpKQogI2Vu
ZGlmCiAgICAgLCBtX3NldHRpbmdzKEV3a19TZXR0aW5nczo6Y3JlYXRlKHRoaXMpKQorLy8gICAg
LCBtX3dpbmRvd0ZlYXR1cmVzKEV3a19XaW5kb3dfRmVhdHVyZXM6OmNyZWF0ZSgwLCB0aGlzKSkK
ICAgICAsIG1fY3Vyc29yR3JvdXAoMCkKICAgICAsIG1fbW91c2VFdmVudHNFbmFibGVkKGZhbHNl
KQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC03NDYsMjMgKzc0OCwzNyBAQCB2b2lkIEV3
a1ZpZXdJbXBsOjppbmZvcm1VUkxDaGFuZ2UoKQogICAgIGluZm9ybUljb25DaGFuZ2UoKTsKIH0K
IAotV0tQYWdlUmVmIEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQYWdlKCkKK1dLUGFnZVJlZiBFd2tW
aWV3SW1wbDo6Y3JlYXRlTmV3UGFnZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJl
cykKIHsKLSAgICBFdmFzX09iamVjdCogbmV3RXdrVmlldyA9IDA7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChtX3ZpZXcsICJjcmVhdGUsd2luZG93IiwgJm5ld0V3a1ZpZXcp
OworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJU
KHNkLT5hcGkpOwogCi0gICAgaWYgKCFuZXdFd2tWaWV3KQotICAgICAgICByZXR1cm4gMDsKKyAg
ICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobV92
aWV3KTsKKyAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXS1BhZ2VSZWY+KFdLUmV0YWluKHZpZXdJbXBsLT5wYWdlKCkpKTsKKworICAg
IFBhc3NPd25QdHI8RXdrX1dpbmRvd19GZWF0dXJlcz4gZXdrV2luZG93RmVhdHVyZXMgPSBFd2tf
V2luZG93X0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVyZXMsIHRoaXMpOworCisgICAgRXZh
c19PYmplY3QqIG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlKHNkLCBld2tXaW5k
b3dGZWF0dXJlcy5nZXQoKSk7CisgICAgQVNTRVJUKG5ld0V3a1ZpZXcpOwogCiAgICAgRXdrVmll
d0ltcGwqIG5ld1ZpZXdJbXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG5ld0V3a1Zp
ZXcpOwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKKyAgICBuZXdWaWV3SW1wbC0+bV93aW5k
b3dGZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOworCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdLUGFnZVJlZj4oV0tSZXRhaW4obmV3Vmlld0ltcGwtPnBhZ2UoKSkpOwogfQogCiB2b2lkIEV3
a1ZpZXdJbXBsOjpjbG9zZVBhZ2UoKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwobV92aWV3LCAiY2xvc2Usd2luZG93IiwgMCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CisKKyAgICBpZiAoIXNk
LT5hcGktPndpbmRvd19jbG9zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2QtPmFwaS0+d2lu
ZG93X2Nsb3NlKHNkKTsKIH0KIAogdm9pZCBFd2tWaWV3SW1wbDo6b25Nb3VzZURvd24odm9pZCog
ZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgKaW5kZXggZWQ1OTkyNi4uMzJh
OTM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
d0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1w
bC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiUmVmUHRyRWZsLmgiCiAjaW5jbHVkZSAi
V0tFaW5hU2hhcmVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRl
ICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RGlyZWN0aW9u
Lmg+CkBAIC04Miw2ICs4Myw3IEBAIGNsYXNzIEV3a19Qb3B1cF9NZW51OwogY2xhc3MgRXdrX1Nl
dHRpbmdzOwogY2xhc3MgRXdrX1VybF9SZXF1ZXN0OwogY2xhc3MgRXdrX1VybF9SZXNwb25zZTsK
K2NsYXNzIEV3a19XaW5kb3dfRmVhdHVyZXM7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0IEV2YXNfR0xfQ29udGV4dDsK
QEAgLTEwMyw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQo
KSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdz
KCkgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a19CYWNrX0ZvcndhcmRfTGlz
dCogYmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0K
KyAgICBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcygpIHsgcmV0dXJuIG1fd2lu
ZG93RmVhdHVyZXMuZ2V0KCk7IH0KIAogICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0
OwogICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Q7CkBAIC0xNTQsNyArMTU3LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZGlzbWlzc0NvbG9yUGlja2VyKCk7CiAjZW5kaWYKIAotICAgIFdLUGFnZVJl
ZiBjcmVhdGVOZXdQYWdlKCk7CisgICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV2ViS2l0OjpJ
bW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcyk7CiAgICAgdm9pZCBjbG9zZVBhZ2Uo
KTsKIAogICAgIHZvaWQgcmVxdWVzdFBvcHVwTWVudShXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5
RWZsKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGRv
dWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBvcHVwSXRlbT4m
IGl0ZW1zLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpOwpAQCAtMjMxLDYgKzIzNCw3IEBAIHByaXZh
dGU6CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcj4gbV9wYWdlVmll
d3BvcnRDb250cm9sbGVyOwogI2VuZGlmCiAgICAgT3duUHRyPEV3a19TZXR0aW5ncz4gbV9zZXR0
aW5nczsKKyAgICBPd25QdHI8RXdrX1dpbmRvd19GZWF0dXJlcz4gbV93aW5kb3dGZWF0dXJlczsK
ICAgICBjb25zdCBjaGFyKiBtX2N1cnNvckdyb3VwOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRv
IG5vdCBmcmVlIGl0IG9yIHVzZSBXS0VpbmFTaGFyZWRTdHJpbmcuCiAgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIG1fZmF2aWNvblVSTDsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV91cmw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNmRhMThi
Ny4uMjQyMDlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmNwcApAQCAtOTA2LDMgKzkwNiwxMCBAQCBFd2tfUGFnaW5hdGlvbl9Nb2RlIGV3a192aWV3
X3BhZ2luYXRpb25fbW9kZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RXdrX1BhZ2luYXRpb25fTW9kZT4oaW1wbC0+cGFnZSgpLT5wYWdp
bmF0aW9uTW9kZSgpKTsKIH0KKworRXdrX1dpbmRvd19GZWF0dXJlcyogZXdrX3ZpZXdfd2luZG93
X2ZlYXR1cmVzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBFV0tfVklF
V19JTVBMX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgaW1wbCwgMCk7CisKKyAgICByZXR1cm4gaW1w
bC0+d2luZG93RmVhdHVyZXMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5oCmluZGV4IDE3NWMyOGMuLjgyNDA4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtOTEsNiArOTEsNyBAQAogI2luY2x1ZGUg
ImV3a190b3VjaC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3
a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCiAjaW5j
bHVkZSA8RXZhcy5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE0MiwxMyArMTQzLDE4IEBA
IHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyB7CiAgICAgLy8gc3RvcmFnZToKICAgICAvLyAg
IC0gV2ViIGRhdGFiYXNlLgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAoKmV4Y2VlZGVkX2RhdGFi
YXNlX3F1b3RhKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29uc3QgY2hhciAqZGF0YWJhc2VO
YW1lLCBjb25zdCBjaGFyICpkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRR
dW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5Vc2FnZSwgdW5zaWduZWQgbG9u
ZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRV
c2FnZSk7CisKKyAgICAvLyB3aW5kb3cgaGFuZGxpbmc6CisgICAgLy8gICAtIGNyZWF0ZSBhbmQg
Y2xvc2Ugd2luZG93LgorICAgIEV2YXNfT2JqZWN0ICooKndpbmRvd19jcmVhdGUpKEV3a19WaWV3
X1NtYXJ0X0RhdGEgKnNkLCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVy
ZXMpOworICAgIHZvaWQgKCp3aW5kb3dfY2xvc2UpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsK
IH07CiAKIC8qKgogICogVGhlIHZlcnNpb24geW91IGhhdmUgdG8gcHV0IGludG8gdGhlIHZlcnNp
b24gZmllbGQKICAqIGluIHRoZSBAYSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCiAg
Ki8KLSNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiA2VUwKKyNkZWZpbmUgRVdL
X1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiA3VUwKIAogLyoqCiAgKiBJbml0aWFsaXplciBmb3Ig
d2hvbGUgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgpAQCAtMTYwLDcgKzE2Niw3IEBA
IHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyB7CiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NM
QVNTX0lOSVRfVkVSU0lPTgogICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVf
VkVSU0lPTgogICovCi0jZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xh
c3NfaW5pdCkge3NtYXJ0X2NsYXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04s
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9Cisj
ZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkge3NtYXJ0
X2NsYXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CiAKIC8qKgogICog
SW5pdGlhbGl6ZXIgdG8gemVybyBhIHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVy
ZS4KQEAgLTc5Niw2ICs4MDIsMTUgQEAgRUFQSSBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFnaW5hdGlv
bl9tb2RlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1BhZ2luYXRpb25fTW9kZQogICovCiBFQVBJ
IEV3a19QYWdpbmF0aW9uX01vZGUgZXdrX3ZpZXdfcGFnaW5hdGlvbl9tb2RlX2dldChjb25zdCBF
dmFzX09iamVjdCAqbyk7CiAKKy8qKgorICogR2V0cyB0aGUgRXdrX1dpbmRvd19GZWF0dXJlcyBv
ZiB0aGlzIHZpZXcuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IEV3a19XaW5k
b3dfRmVhdHVyZXMKKyAqCisgKiBAcmV0dXJuIHRoZSBFd2tfV2luZG93X0ZlYXR1cmVzIG9mIHRo
aXMgdmlldyBvciBAYyBOVUxMIG9uIGZhaWx1cmUKKyAqLworRUFQSSBFd2tfV2luZG93X0ZlYXR1
cmVzICpld2tfdmlld193aW5kb3dfZmVhdHVyZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsK
KwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3OTY0MQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCkBA
IC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCisKKyNpbmNsdWRlICJXZWJOdW1i
ZXIuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKKyNpbmNsdWRl
IDxFaW5hLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a19XaW5kb3dfRmVhdHVy
ZXM6OkV3a19XaW5kb3dfRmVhdHVyZXMoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVy
ZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCit7
CisgICAgaWYod2luZG93RmVhdHVyZXMpCisgICAgeworICAgICAgICBwcmludGYoIkV3a19XaW5k
b3dfRmVhdHVyZTo6Q3JlYXRlKFNvbWV0aGluZylcbiIpOworICAgICAgICBtX3Rvb2xiYXJWaXNp
YmxlID0gd2luZG93RmVhdHVyZXMtPmdldCgidG9vbEJhclZpc2libGUiKTsKKyAgICAgICAgbV9z
dGF0dXNiYXJWaXNpYmxlID0gd2luZG93RmVhdHVyZXMtPmdldCgic3RhdHVzQmFyVmlzaWJsZSIp
OworICAgICAgICBtX3Njcm9sbGJhcnNWaXNpYmxlID0gd2luZG93RmVhdHVyZXMtPmdldCgic2Ny
b2xsYmFyc1Zpc2libGUiKTsKKyAgICAgICAgbV9tZW51YmFyVmlzaWJsZSA9IHdpbmRvd0ZlYXR1
cmVzLT5nZXQoIm1lbnVCYXJWaXNpYmxlIik7CisgICAgICAgIG1fbG9jYXRpb25iYXJWaXNpYmxl
ID0gd2luZG93RmVhdHVyZXMtPmdldCgibG9jYXRpb25CYXJWaXNpYmxlIik7CisgICAgICAgIG1f
cmVzaXphYmxlID0gd2luZG93RmVhdHVyZXMtPmdldCgicmVzaXphYmxlIik7CisgICAgICAgIG1f
ZnVsbHNjcmVlbiA9IHdpbmRvd0ZlYXR1cmVzLT5nZXQoImZ1bGxzY3JlZW4iKTsKKworICAgICAg
ICBXZWJEb3VibGUqIGRvdWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViRG91YmxlKj4od2luZG93
RmVhdHVyZXMtPmdldCgieCIpKTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlKQorICAgICAgICAg
ICAgbV9nZW9tZXRyeS5zZXRYKGRvdWJsZVZhbHVlLT52YWx1ZSgpKTsKKworICAgICAgICBkb3Vi
bGVWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYkRvdWJsZSo+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoInki
KSk7CisgICAgICAgIGlmIChkb3VibGVWYWx1ZSkKKyAgICAgICAgICAgIG1fZ2VvbWV0cnkuc2V0
WShkb3VibGVWYWx1ZS0+dmFsdWUoKSk7CisKKyAgICAgICAgZG91YmxlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxXZWJEb3VibGUqPih3aW5kb3dGZWF0dXJlcy0+Z2V0KCJ3aWR0aCIpKTsKKyAgICAgICAg
aWYgKGRvdWJsZVZhbHVlKQorICAgICAgICAgICAgbV9nZW9tZXRyeS5zZXRXaWR0aChkb3VibGVW
YWx1ZS0+dmFsdWUoKSk7CisKKyAgICAgICAgZG91YmxlVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJE
b3VibGUqPih3aW5kb3dGZWF0dXJlcy0+Z2V0KCJoZWlnaHQiKSk7CisgICAgICAgIGlmIChkb3Vi
bGVWYWx1ZSkKKyAgICAgICAgICAgIG1fZ2VvbWV0cnkuc2V0SGVpZ2h0KGRvdWJsZVZhbHVlLT52
YWx1ZSgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJFd2tfV2lu
ZG93X0ZlYXR1cmU6OkNyZWF0ZShOVUxMKVxuIik7CisgICAgICAgIFdlYkNvcmU6OldpbmRvd0Zl
YXR1cmVzKiBjb3JlRmVhdHVyZXMgPSBuZXcgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMoKTsKKyAg
ICAgICAgbV90b29sYmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+dG9vbEJhclZpc2libGU7Cisg
ICAgICAgIG1fc3RhdHVzYmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+c3RhdHVzQmFyVmlzaWJs
ZTsKKyAgICAgICAgbV9zY3JvbGxiYXJzVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+c2Nyb2xsYmFy
c1Zpc2libGU7CisgICAgICAgIG1fbWVudWJhclZpc2libGUgPSBjb3JlRmVhdHVyZXMtPm1lbnVC
YXJWaXNpYmxlOworICAgICAgICBtX2xvY2F0aW9uYmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+
bG9jYXRpb25CYXJWaXNpYmxlOworICAgICAgICBtX3Jlc2l6YWJsZSA9IGNvcmVGZWF0dXJlcy0+
cmVzaXphYmxlOworICAgICAgICBtX2Z1bGxzY3JlZW4gPSBjb3JlRmVhdHVyZXMtPmZ1bGxzY3Jl
ZW47CisKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRYKGNvcmVGZWF0dXJlcy0+eCk7CisgICAgICAg
IG1fZ2VvbWV0cnkuc2V0WShjb3JlRmVhdHVyZXMtPnkpOworICAgICAgICBtX2dlb21ldHJ5LnNl
dFdpZHRoKGNvcmVGZWF0dXJlcy0+d2lkdGgpOworICAgICAgICBtX2dlb21ldHJ5LnNldEhlaWdo
dChjb3JlRmVhdHVyZXMtPmhlaWdodCk7CisgICAgfQorfQorCit2b2lkIGV3a193aW5kb3dfZmVh
dHVyZXNfYm9vbF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93
RmVhdHVyZXMsIEVpbmFfQm9vbCogdG9vbGJhclZpc2libGUsIEVpbmFfQm9vbCogc3RhdHVzYmFy
VmlzaWJsZSwgRWluYV9Cb29sKiBzY3JvbGxiYXJzVmlzaWJsZSwgRWluYV9Cb29sKiBtZW51YmFy
VmlzaWJsZSwgRWluYV9Cb29sICpsb2NhdGlvbmJhclZpc2libGUsIEVpbmFfQm9vbCAqcmVzaXph
YmxlLCBFaW5hX0Jvb2wgKmZ1bGxzY3JlZW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4od2luZG93RmVhdHVyZXMpOworCisgICAgaWYgKHRvb2xiYXJWaXNpYmxlKQorICAgICAg
ICAqdG9vbGJhclZpc2libGUgPSB3aW5kb3dGZWF0dXJlcy0+dG9vbGJhclZpc2libGUoKTsKKwor
ICAgIGlmIChzdGF0dXNiYXJWaXNpYmxlKQorICAgICAgICAqc3RhdHVzYmFyVmlzaWJsZSA9IHdp
bmRvd0ZlYXR1cmVzLT5zdGF0dXNiYXJWaXNpYmxlKCk7CisKKyAgICBpZiAoc2Nyb2xsYmFyc1Zp
c2libGUpCisgICAgICAgICpzY3JvbGxiYXJzVmlzaWJsZSA9IHdpbmRvd0ZlYXR1cmVzLT5zY3Jv
bGxiYXJzVmlzaWJsZSgpOworCisgICAgaWYgKG1lbnViYXJWaXNpYmxlKQorICAgICAgICAqbWVu
dWJhclZpc2libGUgPSB3aW5kb3dGZWF0dXJlcy0+bWVudWJhclZpc2libGUoKTsKKworICAgIGlm
IChsb2NhdGlvbmJhclZpc2libGUpCisgICAgICAgICpsb2NhdGlvbmJhclZpc2libGUgPSB3aW5k
b3dGZWF0dXJlcy0+bG9jYXRpb25iYXJWaXNpYmxlKCk7CisKKyAgICBpZiAocmVzaXphYmxlKQor
ICAgICAgICAqcmVzaXphYmxlID0gd2luZG93RmVhdHVyZXMtPnJlc2l6YWJsZSgpOworCisgICAg
aWYgKGZ1bGxzY3JlZW4pCisgICAgICAgICpmdWxsc2NyZWVuID0gd2luZG93RmVhdHVyZXMtPmZ1
bGxzY3JlZW4oKTsKK30KKwordm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9n
ZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93RmVhdHVyZXMsIGludCogeCwgaW50
KiB5LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih3aW5kb3dGZWF0dXJlcyk7CisKKyAgICBpZiAod2luZG93RmVhdHVyZXMtPmdlb21l
dHJ5KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoeCkKKyAgICAgICAg
KnggPSBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd0ZlYXR1cmVzLT5nZW9tZXRyeSgpLngoKSk7CisK
KyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd0ZlYXR1cmVz
LT5nZW9tZXRyeSgpLnkoKSk7CisKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHN0
YXRpY19jYXN0PGludD4od2luZG93RmVhdHVyZXMtPmdlb21ldHJ5KCkud2lkdGgoKSk7CisKKyAg
ICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dG
ZWF0dXJlcy0+Z2VvbWV0cnkoKS5oZWlnaHQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlYjI0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaApAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgICAgZXdrX3dp
bmRvd19mZWF0dXJlcy5oCisgKiBAYnJpZWYgICBBY2Nlc3MgdG8gdGhlIGZlYXR1cmVzIG9mIHdp
bmRvdy4KKyAqLworCisjaWZuZGVmIGV3a193aW5kb3dfZmVhdHVyZXNfaAorI2RlZmluZSBld2tf
d2luZG93X2ZlYXR1cmVzX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNw
bHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3Ig
QGEgRXdrX1dpbmRvd19GZWF0dXJlcy4gKi8KK3R5cGVkZWYgc3RydWN0IEV3a19XaW5kb3dfRmVh
dHVyZXMgRXdrX1dpbmRvd19GZWF0dXJlczsKKworLyoqCisgKiBHZXRzIGJvb2xlYW4gcHJvcGVy
dGllcyBvZiBhbiBFd2tfV2luZG93X0ZlYXR1cmVzLgorICoKKyAqIFByb3BlcnRpZXMgYXJlIHJl
dHVybmVkIGluIHRoZSByZXNwZWN0aXZlIHBvaW50ZXJzLiBQYXNzaW5nIEBjIE5VTEwgdG8gYW55
IG9mCisgKiB0aGVzZSBwb2ludGVycyB3aWxsIGNhdXNlIHRoYXQgcHJvcGVydHkgdG8gbm90IGJl
IHJldHVybmVkLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBn
ZXQgYm9vbGVhbiBwcm9wZXJ0aWVzCisgKiBAcGFyYW0gdG9vbGJhcl92aXNpYmxlIHRoZSBwb2lu
dGVyIHRvIHN0b3JlIGlmIHRvb2xiYXIgaXMgdmlzaWJsZQorICogQHBhcmFtIHN0YXR1c2Jhcl92
aXNpYmxlIHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIHN0YXR1c2JhciBpcyB2aXNpYmxlCisgKiBA
cGFyYW0gc2Nyb2xsYmFyc192aXNpYmxlIHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIHNjcm9sbGJh
cnMgaXMgdmlzaWJsZQorICogQHBhcmFtIG1lbnViYXJfdmlzaWJsZSB0aGUgcG9pbnRlciB0byBz
dG9yZSBpZiBtZW51YmFyIGlzIHZpc2libGUKKyAqIEBwYXJhbSBsb2NhdGlvbmJhcl92aXNpYmxl
IHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIGxvY2F0aW9uYmFyIGlzIHZpc2libGUKKyAqIEBwYXJh
bSByZXNpemFibGUgdGhlIHBvaW50ZXIgdG8gc3RvcmUgaWYgcmVzaXphYmxlIGlzIGVuYWJsZWQK
KyAqIEBwYXJhbSBmdWxsc2NyZWVuIHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIGZ1bGxzY3JlZW4g
aXMgZW5hYmxlZAorICoKKyAqIEBzZWUgZXdrX3dpbmRvd19mZWF0dXJlc19pbnRfcHJvcGVydHlf
Z2V0CisgKi8KK0VBUEkgdm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0
KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcywgRWluYV9Cb29sICp0
b29sYmFyX3Zpc2libGUsIEVpbmFfQm9vbCAqc3RhdHVzYmFyX3Zpc2libGUsIEVpbmFfQm9vbCAq
c2Nyb2xsYmFyc192aXNpYmxlLCBFaW5hX0Jvb2wgKm1lbnViYXJfdmlzaWJsZSwgRWluYV9Cb29s
ICpsb2NhdGlvbmJhcl92aXNpYmxlLCBFaW5hX0Jvb2wgKnJlc2l6YWJsZSwgRWluYV9Cb29sICpm
dWxsc2NyZWVuKTsKKworLyoqCisgKiBHZXRzIGludCBwcm9wZXJ0aWVzIG9mIGFuIEV3a19XaW5k
b3dfRmVhdHVyZXMuCisgKgorICogUHJvcGVydGllcyBhcmUgcmV0dXJuZWQgaW4gdGhlIHJlc3Bl
Y3RpdmUgcG9pbnRlcnMuIFBhc3NpbmcgQGMgTlVMTCB0byBhbnkgb2YKKyAqIHRoZXNlIHBvaW50
ZXJzIHdpbGwgY2F1c2UgdGhhdCBwcm9wZXJ0eSB0byBub3QgYmUgcmV0dXJuZWQuCisgKgorICog
TWFrZSBzdXJlIHRvIGNoZWNrIGlmIHRoZSB2YWx1ZSByZXR1cm5lZCBpcyBsZXNzIHRoYW4gMCBi
ZWZvcmUgdXNpbmcgaXQsIHNpbmNlIGluCisgKiB0aGF0IGNhc2UgaXQgbWVhbnMgdGhhdCBwcm9w
ZXJ0eSB3YXMgbm90IHNldCBpbiB3aW5kb3dfZmVhdHVyZXMgb2JqZWN0LgorICoKKyAqIEBwYXJh
bSB3aW5kb3dfZmVhdHVyZXMgdGhlIHdpbmRvdydzIGZlYXR1cmVzCisgKiBAcGFyYW0geCB0aGUg
cG9pbnRlciB0byBzdG9yZSB4IHBvc2l0aW9uCisgKiBAcGFyYW0geSB0aGUgcG9pbnRlciB0byBz
dG9yZSB5IHBvc2l0aW9uCisgKiBAcGFyYW0gdyB0aGUgcG9pbnRlciB0byBzdG9yZSB3aWR0aAor
ICogQHBhcmFtIGggdGhlIHBvaW50ZXIgdG8gc3RvcmUgaGVpZ2h0CisgKgorICogQHNlZSBld2tf
d2luZG93X2ZlYXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0CisgKi8KK0VBUEkgdm9pZCBld2tfd2lu
ZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAq
d2luZG93X2ZlYXR1cmVzLCBpbnQgKngsIGludCAqeSwgaW50ICp3LCBpbnQgKmgpOworCisjaWZk
ZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gZXdrX3dpbmRvd19mZWF0dXJl
c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2lu
ZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjVjMzRkYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaApAQCAtMCwwICsxLDg1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBld2tfd2luZG93X2ZlYXR1cmVz
X3ByaXZhdGVfaAorI2RlZmluZSBld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGVfaAorCisjaW5j
bHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVj
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK2NsYXNzIEV3a1ZpZXdJbXBsOworCitjbGFzcyBFd2tfV2luZG93X0ZlYXR1cmVzIHsgCitw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RXdrX1dpbmRvd19GZWF0dXJlcz4gY3JlYXRl
KEltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0lt
cGwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV3a19XaW5kb3dfRmVhdHVy
ZXMod2luZG93RmVhdHVyZXMsIHZpZXdJbXBsKSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IGdl
b21ldHJ5KCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeTsgfQorICAgIHZvaWQgc2V0R2VvbWV0
cnkoRmxvYXRSZWN0JiBnZW9tZXRyeSkgeyBtX2dlb21ldHJ5ID0gZ2VvbWV0cnk7IH0KKyAgICAK
KyAgICBib29sIHRvb2xiYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90b29sYmFyVmlzaWJs
ZTsgfQorICAgIHZvaWQgc2V0VG9vbGJhclZpc2libGUoYm9vbCB0b29sYmFyVmlzaWJsZSkgeyBt
X3Rvb2xiYXJWaXNpYmxlID0gdG9vbGJhclZpc2libGU7IH0KKyAgICBib29sIHN0YXR1c2JhclZp
c2libGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1c2JhclZpc2libGU7IH0KKyAgICB2b2lkIHNl
dFN0YXR1c2JhclZpc2libGUoYm9vbCBzdGF0dXNiYXJWaXNpYmxlKSB7IG1fc3RhdHVzYmFyVmlz
aWJsZSA9IHN0YXR1c2JhclZpc2libGU7IH0KKworICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhcnNWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRTY3Jv
bGxiYXJzVmlzaWJsZShib29sIHNjcm9sbGJhcnNWaXNpYmxlKSB7IG1fc2Nyb2xsYmFyc1Zpc2li
bGUgPSBzY3JvbGxiYXJzVmlzaWJsZTsgfQorCisgICAgYm9vbCBtZW51YmFyVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVudWJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldE1lbnViYXJWaXNp
YmxlKGJvb2wgbWVudWJhclZpc2libGUpIHsgbV9tZW51YmFyVmlzaWJsZSA9IG1lbnViYXJWaXNp
YmxlOyB9CisKKyAgICBib29sIGxvY2F0aW9uYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYXRpb25iYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRMb2NhdGlvbmJhclZpc2libGUoYm9v
bCBsb2NhdGlvbmJhclZpc2libGUpIHsgbV9sb2NhdGlvbmJhclZpc2libGUgPSBsb2NhdGlvbmJh
clZpc2libGU7IH0KKworICAgIGJvb2wgcmVzaXphYmxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNp
emFibGU7IH0KKyAgICB2b2lkIHNldFJlc2l6YWJsZShib29sIHJlc2l6YWJsZSkgeyBtX3Jlc2l6
YWJsZSA9IHJlc2l6YWJsZTsgfQorCisgICAgYm9vbCBmdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1
cm4gbV9mdWxsc2NyZWVuOyB9CisgICAgdm9pZCBzZXRGdWxsc2NyZWVuKGJvb2wgZnVsbHNjcmVl
bikgeyBtX2Z1bGxzY3JlZW4gPSBmdWxsc2NyZWVuOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgRXdrX1dpbmRvd19GZWF0dXJlcyhJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJl
cywgRXdrVmlld0ltcGwqIHZpZXdJbXBsKTsKKworICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBs
OworCisgICAgRmxvYXRSZWN0IG1fZ2VvbWV0cnk7CisgICAgYm9vbCBtX3Rvb2xiYXJWaXNpYmxl
OworICAgIGJvb2wgbV9zdGF0dXNiYXJWaXNpYmxlOworICAgIGJvb2wgbV9zY3JvbGxiYXJzVmlz
aWJsZTsKKyAgICBib29sIG1fbWVudWJhclZpc2libGU7CisgICAgYm9vbCBtX2xvY2F0aW9uYmFy
VmlzaWJsZTsKKyAgICBib29sIG1fcmVzaXphYmxlOworICAgIGJvb2wgbV9mdWxsc2NyZWVuOwor
fTsKKworI2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKaW5kZXggNDExMGI2
Yi4uYjM5YTM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
VUlDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJ
Q2xpZW50RWZsLmNwcApAQCAtNDksOSArNDksOSBAQCB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6Y2xv
c2VQYWdlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKICAgICB0b1BhZ2VVSUNs
aWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+Y2xvc2VQYWdlKCk7CiB9CiAKLVdLUGFn
ZVJlZiBQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVl
c3RSZWYsIFdLRGljdGlvbmFyeVJlZiwgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0
dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorV0tQYWdlUmVmIFBhZ2VVSUNsaWVudEVmbDo6
Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVxdWVzdFJlZiwgV0tEaWN0aW9uYXJ5UmVm
IHdrV2luZG93RmVhdHVyZXMsIFdLRXZlbnRNb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICByZXR1cm4gdG9QYWdlVUlDbGllbnRFZmwo
Y2xpZW50SW5mbyktPm1fdmlld0ltcGwtPmNyZWF0ZU5ld1BhZ2UoKTsKKyAgICByZXR1cm4gdG9Q
YWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPmNyZWF0ZU5ld1BhZ2UodG9J
bXBsKHdrV2luZG93RmVhdHVyZXMpKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnJ1bkph
dmFTY3JpcHRBbGVydChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIGFsZXJ0VGV4dCwgV0tGcmFtZVJl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTcwLDYgKzcwLDcwIEBAIFdLU3RyaW5nUmVm
IFBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdFByb21wdChXS1BhZ2VSZWYsIFdLU3RyaW5n
UmVmIG1lc3NhZ2UsCiAgICAgcmV0dXJuIHZhbHVlID8gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcodmFsdWUpIDogMDsKIH0KIAorYm9vbCBQYWdlVUlDbGllbnRFZmw6OnRvb2xiYXJzQXJl
VmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmll
d0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0lt
cGw7CisgICAgYm9vbCB0b29sYmFyVmlzaWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygp
LT50b29sYmFyVmlzaWJsZSgpOworCisgICAgcmV0dXJuIHRvb2xiYXJWaXNpYmxlOworfQorCit2
b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgYm9v
bCB0b29sYmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tWaWV3
SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1w
bDsKKworICAgIHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5zZXRUb29sYmFyVmlzaWJsZSh0
b29sYmFyVmlzaWJsZSk7CisgICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8VG9vbGJhclZpc2li
bGU+KCkuY2FsbCgmdG9vbGJhclZpc2libGUpOworfQorCitib29sIFBhZ2VVSUNsaWVudEVmbDo6
bWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbykt
Pm1fdmlld0ltcGw7CisgICAgYm9vbCBtZW51YmFyVmlzaWJsZSA9IHZpZXdJbXBsLT53aW5kb3dG
ZWF0dXJlcygpLT5tZW51YmFyVmlzaWJsZSgpOworCisgICAgcmV0dXJuIG1lbnViYXJWaXNpYmxl
OworfQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0TWVudUJhcklzVmlzaWJsZShXS1BhZ2VS
ZWYsIGJvb2wgbWVudWJhclZpc2libGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
RXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1f
dmlld0ltcGw7CisKKyAgICB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+c2V0TWVudWJhclZp
c2libGUobWVudWJhclZpc2libGUpOworICAgIHZpZXdJbXBsLT5zbWFydENhbGxiYWNrPE1lbnVi
YXJWaXNpYmxlPigpLmNhbGwoJm1lbnViYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGll
bnRFZmw6OnN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlVUlDbGllbnRFZmwoY2xp
ZW50SW5mbyktPm1fdmlld0ltcGw7CisgICAgYm9vbCBzdGF0dXNiYXJWaXNpYmxlID0gdmlld0lt
cGwtPndpbmRvd0ZlYXR1cmVzKCktPnN0YXR1c2JhclZpc2libGUoKTsKKworICAgIHJldHVybiBz
dGF0dXNiYXJWaXNpYmxlOworfQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0U3RhdHVzQmFy
SXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50
RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworCisgICAgdmlld0ltcGwtPndpbmRvd0ZlYXR1
cmVzKCktPnNldE1lbnViYXJWaXNpYmxlKHN0YXR1c2JhclZpc2libGUpOworICAgIHZpZXdJbXBs
LT5zbWFydENhbGxiYWNrPE1lbnViYXJWaXNpYmxlPigpLmNhbGwoJnN0YXR1c2JhclZpc2libGUp
OworfQorCitib29sIFBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIGJvb2wgcmVzaXphYmxl
ID0gdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCktPnJlc2l6YWJsZSgpOworCisgICAgcmV0dXJu
IHJlc2l6YWJsZTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldElzUmVzaXphYmxlKFdL
UGFnZVJlZiwgYm9vbCByZXNpemFibGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
RXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1f
dmlld0ltcGw7CisKKyAgICB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+c2V0UmVzaXphYmxl
KHJlc2l6YWJsZSk7CisgICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8V2luZG93UmVzaXphYmxl
PigpLmNhbGwoJnJlc2l6YWJsZSk7Cit9CisKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikK
IHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzaG93Q29sb3JQaWNrZXIoV0tQYWdlUmVmLCBXS1N0cmlu
Z1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5l
ciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKQEAgLTEwOSwxMyArMTczLDEyIEBAIHZvaWQg
UGFnZVVJQ2xpZW50RWZsOjp0YWtlRm9jdXMoV0tQYWdlUmVmLCBXS0ZvY3VzRGlyZWN0aW9uLCBj
b25zdCB2b2lkKiBjbGllbnRJCiAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xp
ZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT52aWV3KCksIGZhbHNlKTsKIH0KIAotV0tS
ZWN0IFBhZ2VVSUNsaWVudEVmbDo6Z2V0V2luZG93RnJhbWUoV0tQYWdlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQorV0tSZWN0IFBhZ2VVSUNsaWVudEVmbDo6Z2V0V2luZG93RnJhbWUoV0tQ
YWdlUmVmIHBhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgaW50IHgsIHks
IHdpZHRoLCBoZWlnaHQ7CiAKICAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVf
ZXZhc19nZXQoZXZhc19vYmplY3RfZXZhc19nZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5m
byktPm1fdmlld0ltcGwtPnZpZXcoKSkpOwogICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRy
eV9nZXQoZWUsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKLQogICAgIHJldHVybiBXS1JlY3RN
YWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCkBAIC0xMjMsNiArMTg2LDE1IEBAIHZvaWQg
UGFnZVVJQ2xpZW50RWZsOjpzZXRXaW5kb3dGcmFtZShXS1BhZ2VSZWYsIFdLUmVjdCBmcmFtZSwg
Y29uc3Qgdm9pZCogY2xpZW50CiB7CiAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vj
b3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVu
dEluZm8pLT5tX3ZpZXdJbXBsLT52aWV3KCkpKTsKICAgICBlY29yZV9ldmFzX21vdmVfcmVzaXpl
KGVlLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZy
YW1lLnNpemUuaGVpZ2h0KTsKKyAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNs
aWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbDsKKyAgICBGbG9hdFJlY3QgcmVjdCA9IHZp
ZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5nZW9tZXRyeSgpOworLy8gICAgZWNvcmVfZXZhc19t
b3ZlX3Jlc2l6ZShlZSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOworIHByaW50ZigiUGFnZVVJQ2xpZW50RWZsOjpzZXRXaW5kb3dGcmFtZS4uLmZyYW1l
KCVmLCVmKVxuIiwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworIHByaW50
ZigiUGFnZVVJQ2xpZW50RWZsOjpzZXRXaW5kb3dGcmFtZSglZiwlZilcbiIsIHZpZXdJbXBsLT53
aW5kb3dGZWF0dXJlcygpLT5nZW9tZXRyeSgpLndpZHRoKCksIHZpZXdJbXBsLT53aW5kb3dGZWF0
dXJlcygpLT5nZW9tZXRyeSgpLmhlaWdodCgpKTsKKworICAgIGludCB4LCB5LCB3aWR0aCwgaGVp
Z2h0OworICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRyeV9nZXQoZWUsICZ4LCAmeSwgJndp
ZHRoLCAmaGVpZ2h0KTsKKyAgICBwcmludGYoInNldFdpbmRvd0ZyYW1lKCVkLCAlZCwgJWQsICVk
KVxuIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpy
dW5PcGVuUGFuZWwoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNS
ZWYgcGFyYW1ldGVycywgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTE0Nyw2ICsyMTksMTQgQEAgUGFnZVVJQ2xpZW50RWZs
OjpQYWdlVUlDbGllbnRFZmwoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQogICAgIHVpQ2xpZW50LnJ1
bkphdmFTY3JpcHRBbGVydCA9IHJ1bkphdmFTY3JpcHRBbGVydDsKICAgICB1aUNsaWVudC5ydW5K
YXZhU2NyaXB0Q29uZmlybSA9IHJ1bkphdmFTY3JpcHRDb25maXJtOwogICAgIHVpQ2xpZW50LnJ1
bkphdmFTY3JpcHRQcm9tcHQgPSBydW5KYXZhU2NyaXB0UHJvbXB0OworICAgIHVpQ2xpZW50LnRv
b2xiYXJzQXJlVmlzaWJsZSA9IHRvb2xiYXJzQXJlVmlzaWJsZTsKKyAgICB1aUNsaWVudC5zZXRU
b29sYmFyc0FyZVZpc2libGUgPSBzZXRUb29sYmFyc0FyZVZpc2libGU7CisgICAgdWlDbGllbnQu
bWVudUJhcklzVmlzaWJsZSA9IG1lbnVCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuc2V0TWVu
dUJhcklzVmlzaWJsZSA9IHNldE1lbnVCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuc3RhdHVz
QmFySXNWaXNpYmxlID0gc3RhdHVzQmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnNldFN0YXR1
c0JhcklzVmlzaWJsZSA9IHNldFN0YXR1c0JhcklzVmlzaWJsZTsKKyAgICB1aUNsaWVudC5pc1Jl
c2l6YWJsZSA9IGlzUmVzaXphYmxlOworICAgIHVpQ2xpZW50LnNldElzUmVzaXphYmxlID0gc2V0
SXNSZXNpemFibGU7CiAgICAgdWlDbGllbnQudGFrZUZvY3VzID0gdGFrZUZvY3VzOwogICAgIHVp
Q2xpZW50LmZvY3VzID0gZm9jdXM7CiAgICAgdWlDbGllbnQudW5mb2N1cyA9IHVuZm9jdXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaAppbmRleCAy
ZjU0MTkyLi4zYzY4ZDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VVSUNsaWVudEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZVVJQ2xpZW50RWZsLmgKQEAgLTUwLDYgKzUwLDE0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYs
IGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXS1Bh
Z2VSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGlj
IFdLU3RyaW5nUmVmIHJ1bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwg
V0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgYm9vbCB0
b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OworICAgIHN0YXRpYyB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYgcGFnZSwg
Ym9vbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgbWVudUJhcklz
VmlzaWJsZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgc2V0TWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYgcGFnZSwgYm9vbCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgc3RhdHVzQmFySXNWaXNpYmxlKFdL
UGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRTdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmIHBhZ2UsIGJvb2wsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzUmVzaXphYmxlKFdLUGFnZVJlZiBwYWdlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJc1Jlc2l6YWJsZShX
S1BhZ2VSZWYgcGFnZSwgYm9vbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAjaWYgRU5BQkxF
KElOUFVUX1RZUEVfQ09MT1IpCiAgICAgc3RhdGljIHZvaWQgc2hvd0NvbG9yUGlja2VyKFdLUGFn
ZVJlZiwgV0tTdHJpbmdSZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9yUGlja2VyUmVzdWx0TGlzdGVu
ZXJSZWYsIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCBoaWRlQ29sb3JQaWNrZXIoV0tQ
YWdlUmVmLCBjb25zdCB2b2lkKik7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwv
bWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCA3NTNhYTZlLi40NTMy
ZTBjIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCisrKyBiL1Rvb2xz
L01pbmlCcm93c2VyL2VmbC9tYWluLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxFbGVt
ZW50YXJ5Lmg+CiAjaW5jbHVkZSA8RXZhcy5oPgogCi1zdGF0aWMgY29uc3QgaW50IERFRkFVTFRf
V0lEVEggPSA4MDA7CitzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfV0lEVEggPSAxMDAwOwogc3Rh
dGljIGNvbnN0IGludCBERUZBVUxUX0hFSUdIVCA9IDYwMDsKIHN0YXRpYyBjb25zdCBjaGFyIERF
RkFVTFRfVVJMW10gPSAiaHR0cDovL3d3dy5nb29nbGUuY29tLyI7CiBzdGF0aWMgY29uc3QgY2hh
ciBBUFBfTkFNRVtdID0gIkVGTCBNaW5pQnJvd3NlciI7CkBAIC02MzksNiArNjM5LDQyIEBAIG9u
X2phdmFzY3JpcHRfcHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgY29uc3Qg
Y2hhciAqbWVzc2FnZSwgY29uc3QKICAgICByZXR1cm4gcHJvbXB0X3RleHQ7CiB9CiAKK3N0YXRp
YyBFdmFzX09iamVjdCAqCitvbl93aW5kb3dfY3JlYXRlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNt
YXJ0RGF0YSwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQorewor
ICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfY3JlYXRlKE5VTEwpOworICAgIEV2
YXNfT2JqZWN0ICpuZXdfdmlldyA9IHdpbmRvdy0+d2VidmlldzsKKyAgICBpbnQgeCA9IDA7Cisg
ICAgaW50IHkgPSAwOworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7Cisg
ICAgCisgICAgd2luZG93cyA9IGVpbmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKKwor
ICAgIGV3a193aW5kb3dfZmVhdHVyZXNfaW50X3Byb3BlcnR5X2dldCh3aW5kb3dfZmVhdHVyZXMs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAg
ICB3aWR0aCA9IERFRkFVTFRfV0lEVEg7CisgICAgaWYgKGhlaWdodCA9PSAwKQorICAgICAgICBo
ZWlnaHQgPSBERUZBVUxUX0hFSUdIVDsKKworICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZh
c19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldChuZXdfdmlldykpOworICAgIGVj
b3JlX2V2YXNfbW92ZV9yZXNpemUoZWUsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworLy8gICAgZXZh
c19vYmplY3RfbW92ZSh3aW5kb3ctPndpbmRvdywgeCwgeSk7CisvLyAgICBldmFzX29iamVjdF9y
ZXNpemUod2luZG93LT53aW5kb3csIHdpZHRoLCBoZWlnaHQpOworLy8gICAgZXZhc19vYmplY3Rf
c2hvdyh3aW5kb3ctPndpbmRvdyk7CisgICAgaW5mbygibWluaWJyb3dzZXI6IGxvY2F0aW9uKCVk
LCVkKSBzaXplPSglZCwlZClcbiIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJu
IG5ld192aWV3OworfQorCitzdGF0aWMgRXZhc19PYmplY3QgKgorb25fd2luZG93X2Nsb3NlKEV3
a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSkKK3sKKyAgICBCcm93c2VyX1dpbmRvdyAqd2lu
ZG93ID0gYnJvd3Nlcl92aWV3X2ZpbmQoc21hcnREYXRhLT5zZWxmKTsKKyAgICB3aW5kb3dfY2xv
c2Uod2luZG93KTsKK30KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIEV2YXNfT2JqZWN0ICpwb3B1
cDsKICAgICBFd2tfQXV0aF9SZXF1ZXN0ICpyZXF1ZXN0OwpAQCAtOTA5LDYgKzk0NSw4IEBAIHN0
YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0ZShjb25zdCBjaGFyICp1cmwpCiAgICAg
ZXdrVmlld0NsYXNzLT5ydW5famF2YXNjcmlwdF9hbGVydCA9IG9uX2phdmFzY3JpcHRfYWxlcnQ7
CiAgICAgZXdrVmlld0NsYXNzLT5ydW5famF2YXNjcmlwdF9jb25maXJtID0gb25famF2YXNjcmlw
dF9jb25maXJtOwogICAgIGV3a1ZpZXdDbGFzcy0+cnVuX2phdmFzY3JpcHRfcHJvbXB0ID0gb25f
amF2YXNjcmlwdF9wcm9tcHQ7CisgICAgZXdrVmlld0NsYXNzLT53aW5kb3dfY3JlYXRlID0gb25f
d2luZG93X2NyZWF0ZTsKKyAgICBld2tWaWV3Q2xhc3MtPndpbmRvd19jbG9zZSA9IG9uX3dpbmRv
d19jbG9zZTsKIAogICAgIEV2YXMgKmV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChhcHBfZGF0
YS0+d2luZG93KTsKICAgICBFdmFzX1NtYXJ0ICpzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3
KCZld2tWaWV3Q2xhc3MtPnNjKTsKQEAgLTkyMSw4ICs5NTksOCBAQCBzdGF0aWMgQnJvd3Nlcl9X
aW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3QgY2hhciAqdXJsKQogICAgIGV3a19zZXR0aW5nc19k
ZXZlbG9wZXJfZXh0cmFzX2VuYWJsZWRfc2V0KHNldHRpbmdzLCBFSU5BX1RSVUUpOwogCiAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFwcF9kYXRhLT53ZWJ2aWV3LCAiYXV0aGVu
dGljYXRpb24scmVxdWVzdCIsIG9uX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QsIGFwcF9kYXRhKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwX2RhdGEtPndlYnZpZXcsICJj
bG9zZSx3aW5kb3ciLCBvbl9jbG9zZV93aW5kb3csIGFwcF9kYXRhKTsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQoYXBwX2RhdGEtPndlYnZpZXcsICJjcmVhdGUsd2luZG93Iiwg
b25fbmV3X3dpbmRvdywgYXBwX2RhdGEpOworLy8gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKGFwcF9kYXRhLT53ZWJ2aWV3LCAiY2xvc2Usd2luZG93Iiwgb25fY2xvc2Vfd2luZG93
LCBhcHBfZGF0YSk7CisvLyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwX2Rh
dGEtPndlYnZpZXcsICJjcmVhdGUsd2luZG93Iiwgb25fbmV3X3dpbmRvdywgYXBwX2RhdGEpOwog
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHBfZGF0YS0+d2VidmlldywgImRv
d25sb2FkLGZhaWxlZCIsIG9uX2Rvd25sb2FkX2ZhaWxlZCwgYXBwX2RhdGEpOwogICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHBfZGF0YS0+d2VidmlldywgImRvd25sb2FkLGZp
bmlzaGVkIiwgb25fZG93bmxvYWRfZmluaXNoZWQsIGFwcF9kYXRhKTsKICAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQoYXBwX2RhdGEtPndlYnZpZXcsICJkb3dubG9hZCxyZXF1ZXN0
Iiwgb25fZG93bmxvYWRfcmVxdWVzdCwgYXBwX2RhdGEpOwo=
</data>
<flag name="review"
          id="186866"
          type_id="1"
          status="-"
          setter="kangil.han"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173881</attachid>
            <date>2012-11-13 06:06:08 -0800</date>
            <delta_ts>2012-11-14 04:06:37 -0800</delta_ts>
            <desc>working patch.</desc>
            <filename>windowFeatures8.patch</filename>
            <type>text/plain</type>
            <size>21916</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYmI4NzQ3Yi4uNjYwNjg1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTczLDYgKzczLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3df
ZmVhdHVyZXMuY3BwCiAKICAgICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
CiAKQEAgLTM3Niw2ICszNzcsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRl
c3RfZXdrMl9zdG9yYWdlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfdGV4dF9jaGVja2VyCiAgICAg
dGVzdF9ld2syX3ZpZXcKKyAgICB0ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzCiApCiAKIElGIChF
TkFCTEVfQVBJX1RFU1RTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oCmluZGV4IDk4NTI1OTkuLjc1Y2U1YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKQEAg
LTY5LDYgKzY5LDcgQEAgZW51bSBDYWxsYmFja1R5cGUgewogICAgIExvYWRFcnJvciwKICAgICBM
b2FkRmluaXNoZWQsCiAgICAgTG9hZFByb2dyZXNzLAorICAgIE1lbnViYXJWaXNpYmxlLAogICAg
IFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKICAgICBQcm92aXNpb25hbExvYWRSZWRpcmVjdCwKICAg
ICBQcm92aXNpb25hbExvYWRTdGFydGVkLApAQCAtNzcsMTUgKzc4LDE5IEBAIGVudW0gQ2FsbGJh
Y2tUeXBlIHsKICAgICBSZXNvdXJjZUxvYWRGYWlsZWQsCiAgICAgUmVzb3VyY2VMb2FkRmluaXNo
ZWQsCiAgICAgUmVzb3VyY2VSZXF1ZXN0U2VudCwKKyAgICBTY3JvbGxiYXJzVmlzaWJsZSwKKyAg
ICBTdGF0dXNiYXJWaXNpYmxlLAogICAgIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiwKICAgICBO
ZXdXaW5kb3dQb2xpY3lEZWNpc2lvbiwKICAgICBUZXh0Rm91bmQsCiAgICAgVGl0bGVDaGFuZ2Us
CisgICAgVG9vbGJhclZpc2libGUsCiAgICAgVG9vbHRpcFRleHRVbnNldCwKICAgICBUb29sdGlw
VGV4dFNldCwKICAgICBVUkxDaGFuZ2VkLAogICAgIFZpYnJhdGUsCiAgICAgV2ViUHJvY2Vzc0Ny
YXNoZWQsCisgICAgV2luZG93UmVzaXphYmxlLAogI2lmIEVOQUJMRShXRUJfSU5URU5UUykKICAg
ICBJbnRlbnRSZXF1ZXN0LAogI2VuZGlmCkBAIC0xNzksNiArMTg0LDcgQEAgREVDTEFSRV9FV0tf
VklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jlc3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKTsKIERF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkRmFpbGVkLCAibG9hZCxwcm92
aXNpb25hbCxmYWlsZWQiLCBFd2tfRXJyb3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQ
cm92aXNpb25hbExvYWRSZWRpcmVjdCwgImxvYWQscHJvdmlzaW9uYWwscmVkaXJlY3QiLCB2b2lk
KTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwgImxv
YWQscHJvdmlzaW9uYWwsc3RhcnRlZCIsIHZvaWQpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFD
SyhNZW51YmFyVmlzaWJsZSwgIm1lbnViYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tf
VklFV19DQUxMQkFDSyhOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVjaXNpb24s
bmF2aWdhdGlvbiIsIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKE5ld1dpbmRvd1BvbGljeURlY2lzaW9uLCAicG9saWN5LGRlY2lzaW9u
LG5ldyx3aW5kb3ciLCBFd2tfTmF2aWdhdGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVDTEFSRV9F
V0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRTdGFydGVkLCAicmVzb3VyY2UscmVxdWVzdCxu
ZXciLCBFd2tfUmVzb3VyY2VfUmVxdWVzdCk7CkBAIC0xODYsMTMgKzE5MiwxNyBAQCBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKFJlc291cmNlTG9hZFJlc3BvbnNlLCAicmVzb3VyY2UscmVxdWVz
dCxyZXNwb25zZSIsIEV3awogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRG
YWlsZWQsICJyZXNvdXJjZSxyZXF1ZXN0LGZhaWxlZCIsIEV3a19SZXNvdXJjZV9Mb2FkX0Vycm9y
KTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkRmluaXNoZWQsICJyZXNv
dXJjZSxyZXF1ZXN0LGZpbmlzaGVkIiwgRXdrX1Jlc291cmNlKTsKIERFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soUmVzb3VyY2VSZXF1ZXN0U2VudCwgInJlc291cmNlLHJlcXVlc3Qsc2VudCIsIEV3
a19SZXNvdXJjZV9SZXF1ZXN0KTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soU2Nyb2xsYmFy
c1Zpc2libGUsICJzY29ybGxiYXJzLHZpc2libGUiLCBib29sKTsKK0RFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soU3RhdHVzYmFyVmlzaWJsZSwgInN0YXR1c2Jhcix2aXNpYmxlIiwgYm9vbCk7CiBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRleHRGb3VuZCwgInRleHQsZm91bmQiLCB1bnNpZ25l
ZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRpdGxlQ2hhbmdlLCAidGl0bGUsY2hhbmdl
ZCIsIGNoYXIpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sYmFyVmlzaWJsZSwgInRv
b2xiYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sdGlw
VGV4dFVuc2V0LCAidG9vbHRpcCx0ZXh0LHVuc2V0Iiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKFRvb2x0aXBUZXh0U2V0LCAidG9vbHRpcCx0ZXh0LHNldCIsIGNoYXIpOwogREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhVUkxDaGFuZ2VkLCAidXJsLGNoYW5nZWQiLCBjaGFyKTsK
IERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVmlicmF0ZSwgInZpYnJhdGUiLCB1aW50NjRfdCk7
CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFzaGVkLCAid2VicHJvY2Vz
cyxjcmFzaGVkIiwgYm9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdpbmRvd1Jlc2l6
YWJsZSwgIndpbmRvdyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3QsICJpbnRlbnQscmVxdWVz
dCxuZXciLCBFd2tfSW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmluZGV4IDY4NDNkY2UuLmJmYmQyYmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKQEAg
LTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4K
ICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5oPgpAQCAtODI2LDIzICs4Mjcs
MzcgQEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJMQ2hhbmdlKCkKICAgICBpbmZvcm1JY29u
Q2hhbmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3SW1wbDo6Y3JlYXRlTmV3UGFnZSgpCitX
S1BhZ2VSZWYgRXdrVmlld0ltcGw6OmNyZWF0ZU5ld1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSog
d2luZG93RmVhdHVyZXMpCiB7Ci0gICAgRXZhc19PYmplY3QqIG5ld0V3a1ZpZXcgPSAwOwotICAg
IHNtYXJ0Q2FsbGJhY2s8Q3JlYXRlV2luZG93PigpLmNhbGwoJm5ld0V3a1ZpZXcpOworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkp
OwogCi0gICAgaWYgKCFuZXdFd2tWaWV3KQotICAgICAgICByZXR1cm4gMDsKKyAgICBFd2tWaWV3
SW1wbCogdmlld0ltcGwgPSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobV92aWV3KTsKKyAg
ICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXS1BhZ2VSZWY+KFdLUmV0YWluKHZpZXdJbXBsLT5wYWdlKCkpKTsKKworICAgIFBhc3NPd25Q
dHI8RXdrX1dpbmRvd19GZWF0dXJlcz4gZXdrV2luZG93RmVhdHVyZXMgPSBFd2tfV2luZG93X0Zl
YXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVyZXMsIHRoaXMpOworCisgICAgRXZhc19PYmplY3Qq
IG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlKHNkLCBld2tXaW5kb3dGZWF0dXJl
cy5nZXQoKSk7CisgICAgQVNTRVJUKG5ld0V3a1ZpZXcpOwogCiAgICAgRXdrVmlld0ltcGwqIG5l
d1ZpZXdJbXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG5ld0V3a1ZpZXcpOwogICAg
IEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKKyAgICBuZXdWaWV3SW1wbC0+bV93aW5kb3dGZWF0dXJl
cyA9IGV3a1dpbmRvd0ZlYXR1cmVzOworCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLUGFnZVJl
Zj4oV0tSZXRhaW4obmV3Vmlld0ltcGwtPnBhZ2UoKSkpOwogfQogCiB2b2lkIEV3a1ZpZXdJbXBs
OjpjbG9zZVBhZ2UoKQogewotICAgIHNtYXJ0Q2FsbGJhY2s8Q2xvc2VXaW5kb3c+KCkuY2FsbCgp
OworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJU
KHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xvc2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CiB9CiAKIHZvaWQgRXdrVmll
d0ltcGw6Om9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQq
IGV2ZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
SW1wbC5oCmluZGV4IGMzOWY5YzguLjM5MDJkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNsdWRl
ICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5o
IgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RleHREaXJlY3Rpb24uaD4KQEAgLTc2LDYgKzc3LDcgQEAgY2xhc3MgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0OwogY2xhc3MgRXdrX0NvbG9yX1BpY2tlcjsKIGNsYXNzIEV3a19Q
b3B1cF9NZW51OwogY2xhc3MgRXdrX1NldHRpbmdzOworY2xhc3MgRXdrX1dpbmRvd19GZWF0dXJl
czsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHR5cGVkZWYgc3RydWN0IF9F
dmFzX0dMX0NvbnRleHQgRXZhc19HTF9Db250ZXh0OwpAQCAtMTAyLDYgKzEwNCw3IEBAIHB1Ymxp
YzoKICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgp
OyB9CiAgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0
KCk7IH0KICAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGJhY2tGb3J3YXJkTGlzdCgpIHsgcmV0
dXJuIG1fYmFja0ZvcndhcmRMaXN0LmdldCgpOyB9CisgICAgRXdrX1dpbmRvd19GZWF0dXJlcyog
d2luZG93RmVhdHVyZXMoKSB7IHJldHVybiBtX3dpbmRvd0ZlYXR1cmVzLmdldCgpOyB9CiAKICAg
ICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdDsKICAgICBib29sIGlzRm9jdXNlZCgpIGNv
bnN0OwpAQCAtMTU2LDcgKzE1OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc21pc3NDb2xvclBp
Y2tlcigpOwogI2VuZGlmCiAKLSAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZSgpOworICAgIFdL
UGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93
RmVhdHVyZXMpOwogICAgIHZvaWQgY2xvc2VQYWdlKCk7CiAKICAgICB2b2lkIHJlcXVlc3RQb3B1
cE1lbnUoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25z
dCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJfdCBzZWxlY3RlZElu
ZGV4KTsKQEAgLTI0Myw2ICsyNDYsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFBvaW50
IG1fc2Nyb2xsUG9zaXRpb247CiAjZW5kaWYKICAgICBPd25QdHI8RXdrX1NldHRpbmdzPiBtX3Nl
dHRpbmdzOworICAgIE93blB0cjxFd2tfV2luZG93X0ZlYXR1cmVzPiBtX3dpbmRvd0ZlYXR1cmVz
OwogICAgIGNvbnN0IHZvaWQqIG1fY3Vyc29ySWRlbnRpZmllcjsgLy8gVGhpcyBpcyBhbiBhZGRy
ZXNzLCBkbyBub3QgZnJlZSBpdC4KICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV9mYXZpY29uVVJM
OwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX3VybDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA5MDU2ZTFjLi44ZGQwYzhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC05MjEsMyAr
OTIxLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19mdWxsc2NyZWVuX2V4aXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiB9CisKK0V3a19XaW5kb3dfRmVh
dHVyZXMqIGV3a192aWV3X3dpbmRvd19mZWF0dXJlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfSU1QTF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIGltcGws
IDApOworCisgICAgcmV0dXJuIGltcGwtPndpbmRvd0ZlYXR1cmVzKCk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAppbmRleCA4NWI5NzYyLi40MDNmMDg2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKQEAgLTk0
LDYgKzk0LDcgQEAKICNpbmNsdWRlICJld2tfdG91Y2guaCIKICNpbmNsdWRlICJld2tfdXJsX3Jl
cXVlc3QuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCisjaW5jbHVkZSAiZXdrX3dp
bmRvd19mZWF0dXJlcy5oIgogI2luY2x1ZGUgPEV2YXMuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVz
CkBAIC0xNDcsMTMgKzE0OCwxOSBAQCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgewogICAg
IC8vIHN0b3JhZ2U6CiAgICAgLy8gICAtIFdlYiBkYXRhYmFzZS4KICAgICB1bnNpZ25lZCBsb25n
IGxvbmcgKCpleGNlZWRlZF9kYXRhYmFzZV9xdW90YSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2Qs
IGNvbnN0IGNoYXIgKmRhdGFiYXNlTmFtZSwgY29uc3QgY2hhciAqZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3Jp
Z2luVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWdu
ZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UpOworCisgICAgLy8gd2luZG93IGhhbmRsaW5nOgor
ICAgIC8vICAgLSBjcmVhdGUgYW5kIGNsb3NlIHdpbmRvdy4KKyAgICBFdmFzX09iamVjdCAqKCp3
aW5kb3dfY3JlYXRlKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29uc3QgRXdrX1dpbmRvd19G
ZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKyAgICB2b2lkICgqd2luZG93X2Nsb3NlKShFd2tf
Vmlld19TbWFydF9EYXRhICpzZCk7CiB9OwogCisKIC8qKgogICogVGhlIHZlcnNpb24geW91IGhh
dmUgdG8gcHV0IGludG8gdGhlIHZlcnNpb24gZmllbGQKICAqIGluIHRoZSBAYSBFd2tfVmlld19T
bWFydF9DbGFzcyBzdHJ1Y3R1cmUuCiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1Nf
VkVSU0lPTiA3VUwKKyNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiA4ODg4ODg4
OFVMCiAKIC8qKgogICogSW5pdGlhbGl6ZXIgZm9yIHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNz
IHN0cnVjdHVyZS4KQEAgLTE2NSw3ICsxNzIsNyBAQCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xh
c3MgewogICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX1ZFUlNJT04KICAqIEBzZWUg
RVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04KICAqLwotI2RlZmluZSBFV0tf
VklFV19TTUFSVF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0
LCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQorI2RlZmluZSBFV0tfVklFV19TTUFS
VF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklF
V19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQogCiAvKioKICAqIEluaXRpYWxpemVyIHRv
IHplcm8gYSB3aG9sZSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCkBAIC04MTAsNiAr
ODE3LDE1IEBAIEVBUEkgRXdrX1BhZ2luYXRpb25fTW9kZSBld2tfdmlld19wYWdpbmF0aW9uX21v
ZGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKICAqLwogRUFQSSBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfZnVsbHNjcmVlbl9leGl0KEV2YXNfT2JqZWN0ICpvKTsKIAorLyoqCisgKiBHZXRzIHRoZSBF
d2tfV2luZG93X0ZlYXR1cmVzIG9mIHRoaXMgdmlldy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB0byBnZXQgRXdrX1dpbmRvd19GZWF0dXJlcworICoKKyAqIEByZXR1cm4gdGhlIEV3a19X
aW5kb3dfRmVhdHVyZXMgb2YgdGhpcyB2aWV3IG9yIEBjIE5VTEwgb24gZmFpbHVyZQorICovCitF
QVBJIEV3a19XaW5kb3dfRmVhdHVyZXMgKmV3a192aWV3X3dpbmRvd19mZWF0dXJlc19nZXQoY29u
c3QgRXZhc19PYmplY3QgKm8pOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0
dXJlc19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2lu
ZG93X2ZlYXR1cmVzX3ByaXZhdGUuaAppbmRleCA1YzM0ZGJkLi5iNzk3NWFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3By
aXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93
X2ZlYXR1cmVzX3ByaXZhdGUuaApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogY2xhc3MgRXdrVmlld0ltcGw7CiAKLWNsYXNzIEV3a19XaW5kb3dfRmVhdHVyZXMg
eyAKK2NsYXNzIEV3a19XaW5kb3dfRmVhdHVyZXMgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPEV3a19XaW5kb3dfRmVhdHVyZXM+IGNyZWF0ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3
aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJbXBsKQogICAgIHsKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4g
bV9nZW9tZXRyeTsgfQogICAgIHZvaWQgc2V0R2VvbWV0cnkoRmxvYXRSZWN0JiBnZW9tZXRyeSkg
eyBtX2dlb21ldHJ5ID0gZ2VvbWV0cnk7IH0KLSAgICAKKwogICAgIGJvb2wgdG9vbGJhclZpc2li
bGUoKSBjb25zdCB7IHJldHVybiBtX3Rvb2xiYXJWaXNpYmxlOyB9CiAgICAgdm9pZCBzZXRUb29s
YmFyVmlzaWJsZShib29sIHRvb2xiYXJWaXNpYmxlKSB7IG1fdG9vbGJhclZpc2libGUgPSB0b29s
YmFyVmlzaWJsZTsgfQogICAgIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzYmFyVmlzaWJsZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlVUlDbGllbnRFZmwuY3BwCmluZGV4IGY4YWQ5ZDkuLjAwMzBmYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKQEAgLTQ5LDkg
KzQ5LDkgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OmNsb3NlUGFnZShXS1BhZ2VSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiAgICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1f
dmlld0ltcGwtPmNsb3NlUGFnZSgpOwogfQogCi1XS1BhZ2VSZWYgUGFnZVVJQ2xpZW50RWZsOjpj
cmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYs
IFdLRXZlbnRNb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK1dLUGFnZVJlZiBQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVm
LCBXS1VSTFJlcXVlc3RSZWYsIFdLRGljdGlvbmFyeVJlZiB3a1dpbmRvd0ZlYXR1cmVzLCBXS0V2
ZW50TW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CiB7Ci0gICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBs
LT5jcmVhdGVOZXdQYWdlKCk7CisgICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQYWdlKHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7
CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVm
LCBXS1N0cmluZ1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCkBAIC03MCw2ICs3MCw3MCBAQCBXS1N0cmluZ1JlZiBQYWdlVUlDbGllbnRFZmw6OnJ1bkph
dmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLAogICAgIHJldHVy
biB2YWx1ZSA/IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAK
K2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjp0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIGJvb2wgdG9vbGJhclZp
c2libGUgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+dG9vbGJhclZpc2libGUoKTsKKwor
ICAgIHJldHVybiB0b29sYmFyVmlzaWJsZTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNl
dFRvb2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgdG9vbGJhclZpc2libGUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdl
VUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7CisKKyAgICB2aWV3SW1wbC0+d2lu
ZG93RmVhdHVyZXMoKS0+c2V0VG9vbGJhclZpc2libGUodG9vbGJhclZpc2libGUpOworICAgIHZp
ZXdJbXBsLT5zbWFydENhbGxiYWNrPFRvb2xiYXJWaXNpYmxlPigpLmNhbGwoJnRvb2xiYXJWaXNp
YmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRFZmw6Om1lbnVCYXJJc1Zpc2libGUoV0tQYWdl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1w
bCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIGJvb2wg
bWVudWJhclZpc2libGUgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+bWVudWJhclZpc2li
bGUoKTsKKworICAgIHJldHVybiBtZW51YmFyVmlzaWJsZTsKK30KKwordm9pZCBQYWdlVUlDbGll
bnRFZmw6OnNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIG1lbnViYXJWaXNpYmxl
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9
IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworCisgICAgdmlld0lt
cGwtPndpbmRvd0ZlYXR1cmVzKCktPnNldE1lbnViYXJWaXNpYmxlKG1lbnViYXJWaXNpYmxlKTsK
KyAgICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxNZW51YmFyVmlzaWJsZT4oKS5jYWxsKCZtZW51
YmFyVmlzaWJsZSk7Cit9CisKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2li
bGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBs
KiB2aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOwor
ICAgIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5z
dGF0dXNiYXJWaXNpYmxlKCk7CisKKyAgICByZXR1cm4gc3RhdHVzYmFyVmlzaWJsZTsKK30KKwor
dm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJv
b2wgc3RhdHVzYmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tW
aWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3
SW1wbDsKKworICAgIHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5zZXRNZW51YmFyVmlzaWJs
ZShzdGF0dXNiYXJWaXNpYmxlKTsKKyAgICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxNZW51YmFy
VmlzaWJsZT4oKS5jYWxsKCZzdGF0dXNiYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGll
bnRFZmw6OmlzUmVzaXphYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZv
KS0+bV92aWV3SW1wbDsKKyAgICBib29sIHJlc2l6YWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0
dXJlcygpLT5yZXNpemFibGUoKTsKKworICAgIHJldHVybiByZXNpemFibGU7Cit9CisKK3ZvaWQg
UGFnZVVJQ2xpZW50RWZsOjpzZXRJc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGJvb2wgcmVzaXphYmxl
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9
IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworCisgICAgdmlld0lt
cGwtPndpbmRvd0ZlYXR1cmVzKCktPnNldFJlc2l6YWJsZShyZXNpemFibGUpOworICAgIHZpZXdJ
bXBsLT5zbWFydENhbGxiYWNrPFdpbmRvd1Jlc2l6YWJsZT4oKS5jYWxsKCZyZXNpemFibGUpOwor
fQorCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6
c2hvd0NvbG9yUGlja2VyKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgaW5pdGlhbENvbG9yLCBXS0Nv
bG9yUGlja2VyUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7CkBAIC0xMTYsNiArMTgwLDExIEBAIFdLUmVjdCBQYWdlVUlDbGllbnRFZmw6OmdldFdp
bmRvd0ZyYW1lKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIAogdm9pZCBQYWdl
VUlDbGllbnRFZmw6OnNldFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiwgV0tSZWN0IGZyYW1lLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQogeworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIC8vRmxvYXRSZWN0IHJl
Y3QgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+Z2VvbWV0cnkoKTsKKyAgICBwcmludGYo
IlBhZ2VVSUNsaWVudEVmbDo6c2V0V2luZG93RnJhbWUuLi5mcmFtZSglZiwlZilcbiIsIGZyYW1l
LnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKKyAgICBwcmludGYoIlBhZ2VVSUNsaWVu
dEVmbDo6c2V0V2luZG93RnJhbWUoJWYsJWYpXG4iLCB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMo
KS0+Z2VvbWV0cnkoKS53aWR0aCgpLCB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+Z2VvbWV0
cnkoKS5oZWlnaHQoKSk7CisKICAgICB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92
aWV3SW1wbC0+c2V0V2luZG93R2VvbWV0cnkoZnJhbWUpOwogfQogCkBAIC0xNDEsNiArMjEwLDE0
IEBAIFBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1w
bCkKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0QWxlcnQgPSBydW5KYXZhU2NyaXB0QWxlcnQ7
CiAgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdENvbmZpcm0gPSBydW5KYXZhU2NyaXB0Q29uZmly
bTsKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0ID0gcnVuSmF2YVNjcmlwdFByb21w
dDsKKyAgICB1aUNsaWVudC50b29sYmFyc0FyZVZpc2libGUgPSB0b29sYmFyc0FyZVZpc2libGU7
CisgICAgdWlDbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlID0gc2V0VG9vbGJhcnNBcmVWaXNp
YmxlOworICAgIHVpQ2xpZW50Lm1lbnVCYXJJc1Zpc2libGUgPSBtZW51QmFySXNWaXNpYmxlOwor
ICAgIHVpQ2xpZW50LnNldE1lbnVCYXJJc1Zpc2libGUgPSBzZXRNZW51QmFySXNWaXNpYmxlOwor
ICAgIHVpQ2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSA9IHN0YXR1c0JhcklzVmlzaWJsZTsKKyAg
ICB1aUNsaWVudC5zZXRTdGF0dXNCYXJJc1Zpc2libGUgPSBzZXRTdGF0dXNCYXJJc1Zpc2libGU7
CisgICAgdWlDbGllbnQuaXNSZXNpemFibGUgPSBpc1Jlc2l6YWJsZTsKKyAgICB1aUNsaWVudC5z
ZXRJc1Jlc2l6YWJsZSA9IHNldElzUmVzaXphYmxlOwogICAgIHVpQ2xpZW50LnRha2VGb2N1cyA9
IHRha2VGb2N1czsKICAgICB1aUNsaWVudC5mb2N1cyA9IGZvY3VzOwogICAgIHVpQ2xpZW50LnVu
Zm9jdXMgPSB1bmZvY3VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlVUlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJ
Q2xpZW50RWZsLmgKaW5kZXggMmY1NDE5Mi4uM2M2OGQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCkBAIC01MCw2ICs1MCwxNCBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChXS1BhZ2VSZWYsIFdLU3Ry
aW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIGJvb2wgcnVuSmF2
YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwgV0tGcmFtZVJlZiwgY29uc3Qg
dm9pZCopOwogICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBydW5KYXZhU2NyaXB0UHJvbXB0KFdLUGFn
ZVJlZiwgV0tTdHJpbmdSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7
CisgICAgc3RhdGljIGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiBwYWdlLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2li
bGUoV0tQYWdlUmVmIHBhZ2UsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0
YXRpYyBib29sIG1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVm
IHBhZ2UsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIHN0
YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
CisgICAgc3RhdGljIHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiBwYWdlLCBi
b29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBpc1Jlc2l6YWJs
ZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZv
aWQgc2V0SXNSZXNpemFibGUoV0tQYWdlUmVmIHBhZ2UsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOwogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQogICAgIHN0YXRpYyB2b2lkIHNo
b3dDb2xvclBpY2tlcihXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIGluaXRpYWxDb2xvciwgV0tDb2xv
clBpY2tlclJlc3VsdExpc3RlbmVyUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQg
aGlkZUNvbG9yUGlja2VyKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFr
ZQppbmRleCBjMmZkNDNjLi40YjMyMjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtODUsNyAr
ODUsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0lOVEVO
VFNfVEFHIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9U
SU1JTkcgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV09SS0VS
UyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9YSFJfVElNRU9V
VCBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKFdURl9VU0VfVElMRURfQkFD
S0lOR19TVE9SRSBPTikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKFdURl9VU0Vf
VElMRURfQkFDS0lOR19TVE9SRSBPRkYpCiAKICMgRklYTUU6IFBlcmhhcHMgd2UgbmVlZCBhIG1v
cmUgZ2VuZXJpYyB3YXkgb2YgZGVmaW5pbmcgZGVwZW5kZW5jaWVzIGJldHdlZW4gZmVhdHVyZXMu
CiAjIFZJREVPX1RSQUNLIGRlcGVuZHMgb24gVklERU8uCmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci9lZmwvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCBi
ZjQ2MGNlLi4wZmFkMmMxIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5j
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKQEAgLTc1Niw2ICs3NTYsNDIgQEAg
c3RhdGljIEVpbmFfQm9vbCBvbl9mdWxsc2NyZWVuX2V4aXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAorc3RhdGljIEV2YXNfT2JqZWN0ICoKK29u
X3dpbmRvd19jcmVhdGUoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBjb25zdCBFd2tf
V2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IHdpbmRvd19jcmVhdGUoTlVMTCk7CisgICAgRXZhc19PYmplY3QgKm5ld192aWV3
ID0gd2luZG93LT53ZWJ2aWV3OworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAg
aW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKworICAgIHdpbmRvd3MgPSBlaW5h
X2xpc3RfYXBwZW5kKHdpbmRvd3MsIHdpbmRvdyk7CisKKyAgICBld2tfd2luZG93X2ZlYXR1cmVz
X2ludF9wcm9wZXJ0eV9nZXQod2luZG93X2ZlYXR1cmVzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCk7CisKKyAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgd2lkdGggPSB3aW5kb3dfd2lkdGg7
CisgICAgaWYgKGhlaWdodCA9PSAwKQorICAgICAgICBoZWlnaHQgPSB3aW5kb3dfaGVpZ2h0Owor
CisvLyAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhc19v
YmplY3RfZXZhc19nZXQobmV3X3ZpZXcpKTsKKy8vICAgIGVjb3JlX2V2YXNfbW92ZV9yZXNpemUo
ZWUsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworLy8gICAgZXZhc19vYmplY3RfbW92ZSh3aW5kb3ct
PndpbmRvdywgeCwgeSk7CisvLyAgICBldmFzX29iamVjdF9yZXNpemUod2luZG93LT53aW5kb3cs
IHdpZHRoLCBoZWlnaHQpOworLy8gICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPndpbmRvdyk7
CisgICAgaW5mbygibWluaWJyb3dzZXI6IGxvY2F0aW9uKCVkLCVkKSBzaXplPSglZCwlZClcbiIs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIG5ld192aWV3OworfQorCitzdGF0
aWMgRXZhc19PYmplY3QgKgorb25fd2luZG93X2Nsb3NlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNt
YXJ0RGF0YSkKK3sKKyAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gYnJvd3Nlcl92aWV3X2Zp
bmQoc21hcnREYXRhLT5zZWxmKTsKKyAgICB3aW5kb3dfY2xvc2Uod2luZG93KTsKK30KKwogdHlw
ZWRlZiBzdHJ1Y3QgewogICAgIEV2YXNfT2JqZWN0ICpwb3B1cDsKICAgICBFd2tfQXV0aF9SZXF1
ZXN0ICpyZXF1ZXN0OwpAQCAtMTAyNiw2ICsxMDYyLDggQEAgc3RhdGljIEJyb3dzZXJfV2luZG93
ICp3aW5kb3dfY3JlYXRlKGNvbnN0IGNoYXIgKnVybCkKICAgICBld2tWaWV3Q2xhc3MtPnJ1bl9q
YXZhc2NyaXB0X2FsZXJ0ID0gb25famF2YXNjcmlwdF9hbGVydDsKICAgICBld2tWaWV3Q2xhc3Mt
PnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0gPSBvbl9qYXZhc2NyaXB0X2NvbmZpcm07CiAgICAgZXdr
Vmlld0NsYXNzLT5ydW5famF2YXNjcmlwdF9wcm9tcHQgPSBvbl9qYXZhc2NyaXB0X3Byb21wdDsK
KyAgICBld2tWaWV3Q2xhc3MtPndpbmRvd19jcmVhdGUgPSBvbl93aW5kb3dfY3JlYXRlOworICAg
IGV3a1ZpZXdDbGFzcy0+d2luZG93X2Nsb3NlID0gb25fd2luZG93X2Nsb3NlOwogICAgIGV3a1Zp
ZXdDbGFzcy0+d2luZG93X2dlb21ldHJ5X2dldCA9IG9uX3dpbmRvd19nZW9tZXRyeV9nZXQ7CiAg
ICAgZXdrVmlld0NsYXNzLT53aW5kb3dfZ2VvbWV0cnlfc2V0ID0gb25fd2luZG93X2dlb21ldHJ5
X3NldDsKICAgICBld2tWaWV3Q2xhc3MtPmZ1bGxzY3JlZW5fZW50ZXIgPSBvbl9mdWxsc2NyZWVu
X2VudGVyOwpAQCAtMTA0Niw4ICsxMDg0LDggQEAgc3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5k
b3dfY3JlYXRlKGNvbnN0IGNoYXIgKnVybCkKICAgICBld2tfc2V0dGluZ3NfcHJlZmVycmVkX21p
bmltdW1fY29udGVudHNfd2lkdGhfc2V0KHNldHRpbmdzLCAwKTsKIAogICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHBfZGF0YS0+d2VidmlldywgImF1dGhlbnRpY2F0aW9uLHJl
cXVlc3QiLCBvbl9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0LCBhcHBfZGF0YSk7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFwcF9kYXRhLT53ZWJ2aWV3LCAiY2xvc2Usd2luZG93
Iiwgb25fY2xvc2Vfd2luZG93LCBhcHBfZGF0YSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKGFwcF9kYXRhLT53ZWJ2aWV3LCAiY3JlYXRlLHdpbmRvdyIsIG9uX25ld193aW5k
b3csIGFwcF9kYXRhKTsKKy8vICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHBf
ZGF0YS0+d2VidmlldywgImNsb3NlLHdpbmRvdyIsIG9uX2Nsb3NlX3dpbmRvdywgYXBwX2RhdGEp
OworLy8gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFwcF9kYXRhLT53ZWJ2aWV3
LCAiY3JlYXRlLHdpbmRvdyIsIG9uX25ld193aW5kb3csIGFwcF9kYXRhKTsKICAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwX2RhdGEtPndlYnZpZXcsICJkb3dubG9hZCxmYWls
ZWQiLCBvbl9kb3dubG9hZF9mYWlsZWQsIGFwcF9kYXRhKTsKICAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQoYXBwX2RhdGEtPndlYnZpZXcsICJkb3dubG9hZCxmaW5pc2hlZCIsIG9u
X2Rvd25sb2FkX2ZpbmlzaGVkLCBhcHBfZGF0YSk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKGFwcF9kYXRhLT53ZWJ2aWV3LCAiZG93bmxvYWQscmVxdWVzdCIsIG9uX2Rvd25s
b2FkX3JlcXVlc3QsIGFwcF9kYXRhKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cGVybC9GZWF0dXJlTGlzdC5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlz
dC5wbQppbmRleCBjYzVmMGRlLi45NGYwMDk5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0Zl
YXR1cmVMaXN0LnBtCkBAIC0zOTEsNyArMzkxLDcgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAg
ZGVmaW5lID0+ICJFTkFCTEVfVEVYVF9BVVRPU0laSU5HIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9
PiBcJHRleHRBdXRvc2l6aW5nU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gInRpbGVkLWJh
Y2tpbmctc3RvcmUiLCBkZXNjID0+ICJUb2dnbGUgVGlsZWQgQmFja2luZyBTdG9yZSBzdXBwb3J0
IiwKLSAgICAgIGRlZmluZSA9PiAiV1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFIiwgZGVmYXVs
dCA9PiAoaXNRdCgpIHx8IGlzRWZsKCkpLCB2YWx1ZSA9PiBcJHRpbGVkQmFja2luZ1N0b3JlU3Vw
cG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUiLCBk
ZWZhdWx0ID0+IChpc1F0KCkpLCB2YWx1ZSA9PiBcJHRpbGVkQmFja2luZ1N0b3JlU3VwcG9ydCB9
LAogCiAgICAgeyBvcHRpb24gPT4gInRvdWNoLWV2ZW50cyIsIGRlc2MgPT4gIlRvZ2dsZSBUb3Vj
aCBFdmVudHMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9UT1VDSF9FVkVOVFMi
LCBkZWZhdWx0ID0+IChpc1F0KCkgfHwgaXNCbGFja0JlcnJ5KCkgfHwgaXNFZmwoKSksIHZhbHVl
ID0+IFwkdG91Y2hFdmVudHNTdXBwb3J0IH0sCg==
</data>
<flag name="review"
          id="188732"
          type_id="1"
          status="-"
          setter="jinwoo7.song"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174124</attachid>
            <date>2012-11-14 04:06:37 -0800</date>
            <delta_ts>2012-11-14 19:55:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>windowFeatures10.patch</filename>
            <type>text/plain</type>
            <size>37607</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYmI4NzQ3Yi4uNjYwNjg1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTczLDYgKzczLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3df
ZmVhdHVyZXMuY3BwCiAKICAgICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
CiAKQEAgLTM3Niw2ICszNzcsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRl
c3RfZXdrMl9zdG9yYWdlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfdGV4dF9jaGVja2VyCiAgICAg
dGVzdF9ld2syX3ZpZXcKKyAgICB0ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzCiApCiAKIElGIChF
TkFCTEVfQVBJX1RFU1RTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oCmluZGV4IDk4NTI1OTkuLjc1Y2U1YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKQEAg
LTY5LDYgKzY5LDcgQEAgZW51bSBDYWxsYmFja1R5cGUgewogICAgIExvYWRFcnJvciwKICAgICBM
b2FkRmluaXNoZWQsCiAgICAgTG9hZFByb2dyZXNzLAorICAgIE1lbnViYXJWaXNpYmxlLAogICAg
IFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKICAgICBQcm92aXNpb25hbExvYWRSZWRpcmVjdCwKICAg
ICBQcm92aXNpb25hbExvYWRTdGFydGVkLApAQCAtNzcsMTUgKzc4LDE5IEBAIGVudW0gQ2FsbGJh
Y2tUeXBlIHsKICAgICBSZXNvdXJjZUxvYWRGYWlsZWQsCiAgICAgUmVzb3VyY2VMb2FkRmluaXNo
ZWQsCiAgICAgUmVzb3VyY2VSZXF1ZXN0U2VudCwKKyAgICBTY3JvbGxiYXJzVmlzaWJsZSwKKyAg
ICBTdGF0dXNiYXJWaXNpYmxlLAogICAgIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiwKICAgICBO
ZXdXaW5kb3dQb2xpY3lEZWNpc2lvbiwKICAgICBUZXh0Rm91bmQsCiAgICAgVGl0bGVDaGFuZ2Us
CisgICAgVG9vbGJhclZpc2libGUsCiAgICAgVG9vbHRpcFRleHRVbnNldCwKICAgICBUb29sdGlw
VGV4dFNldCwKICAgICBVUkxDaGFuZ2VkLAogICAgIFZpYnJhdGUsCiAgICAgV2ViUHJvY2Vzc0Ny
YXNoZWQsCisgICAgV2luZG93UmVzaXphYmxlLAogI2lmIEVOQUJMRShXRUJfSU5URU5UUykKICAg
ICBJbnRlbnRSZXF1ZXN0LAogI2VuZGlmCkBAIC0xNzksNiArMTg0LDcgQEAgREVDTEFSRV9FV0tf
VklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jlc3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKTsKIERF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkRmFpbGVkLCAibG9hZCxwcm92
aXNpb25hbCxmYWlsZWQiLCBFd2tfRXJyb3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQ
cm92aXNpb25hbExvYWRSZWRpcmVjdCwgImxvYWQscHJvdmlzaW9uYWwscmVkaXJlY3QiLCB2b2lk
KTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwgImxv
YWQscHJvdmlzaW9uYWwsc3RhcnRlZCIsIHZvaWQpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFD
SyhNZW51YmFyVmlzaWJsZSwgIm1lbnViYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tf
VklFV19DQUxMQkFDSyhOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVjaXNpb24s
bmF2aWdhdGlvbiIsIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKE5ld1dpbmRvd1BvbGljeURlY2lzaW9uLCAicG9saWN5LGRlY2lzaW9u
LG5ldyx3aW5kb3ciLCBFd2tfTmF2aWdhdGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVDTEFSRV9F
V0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRTdGFydGVkLCAicmVzb3VyY2UscmVxdWVzdCxu
ZXciLCBFd2tfUmVzb3VyY2VfUmVxdWVzdCk7CkBAIC0xODYsMTMgKzE5MiwxNyBAQCBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKFJlc291cmNlTG9hZFJlc3BvbnNlLCAicmVzb3VyY2UscmVxdWVz
dCxyZXNwb25zZSIsIEV3awogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRG
YWlsZWQsICJyZXNvdXJjZSxyZXF1ZXN0LGZhaWxlZCIsIEV3a19SZXNvdXJjZV9Mb2FkX0Vycm9y
KTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkRmluaXNoZWQsICJyZXNv
dXJjZSxyZXF1ZXN0LGZpbmlzaGVkIiwgRXdrX1Jlc291cmNlKTsKIERFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soUmVzb3VyY2VSZXF1ZXN0U2VudCwgInJlc291cmNlLHJlcXVlc3Qsc2VudCIsIEV3
a19SZXNvdXJjZV9SZXF1ZXN0KTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soU2Nyb2xsYmFy
c1Zpc2libGUsICJzY29ybGxiYXJzLHZpc2libGUiLCBib29sKTsKK0RFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soU3RhdHVzYmFyVmlzaWJsZSwgInN0YXR1c2Jhcix2aXNpYmxlIiwgYm9vbCk7CiBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRleHRGb3VuZCwgInRleHQsZm91bmQiLCB1bnNpZ25l
ZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRpdGxlQ2hhbmdlLCAidGl0bGUsY2hhbmdl
ZCIsIGNoYXIpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sYmFyVmlzaWJsZSwgInRv
b2xiYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sdGlw
VGV4dFVuc2V0LCAidG9vbHRpcCx0ZXh0LHVuc2V0Iiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKFRvb2x0aXBUZXh0U2V0LCAidG9vbHRpcCx0ZXh0LHNldCIsIGNoYXIpOwogREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhVUkxDaGFuZ2VkLCAidXJsLGNoYW5nZWQiLCBjaGFyKTsK
IERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVmlicmF0ZSwgInZpYnJhdGUiLCB1aW50NjRfdCk7
CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFzaGVkLCAid2VicHJvY2Vz
cyxjcmFzaGVkIiwgYm9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdpbmRvd1Jlc2l6
YWJsZSwgIndpbmRvdyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3QsICJpbnRlbnQscmVxdWVz
dCxuZXciLCBFd2tfSW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmluZGV4IDJhNWQ5YTIuLjViZDkxZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKQEAg
LTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4K
ICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5oPgpAQCAtODI5LDM3ICs4MzAs
MzggQEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJMQ2hhbmdlKCkKICAgICBpbmZvcm1JY29u
Q2hhbmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3SW1wbDo6Y3JlYXRlTmV3UGFnZShXS0Rp
Y3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMpCitXS1BhZ2VSZWYgRXdrVmlld0ltcGw6OmNyZWF0
ZU5ld1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpCiB7CiAgICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKICAgICBBU1NFUlQoc2QtPmFwaSk7
CiAKLSAgICBFdmFzX09iamVjdCogbmV3RXdrVmlldyA9IDA7CisgICAgRXdrVmlld0ltcGwqIHZp
ZXdJbXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG1fdmlldyk7CisgICAgaWYgKCFz
ZC0+YXBpLT53aW5kb3dfY3JlYXRlKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdl
UmVmPihXS1JldGFpbih2aWV3SW1wbC0+cGFnZSgpKSk7CiAKLSAgICAvLyBFeHRyYWN0IHRoZSB3
aWR0aCBhbmQgaGVpZ2h0IGZyb20gdGhlIHdpbmRvdyBhdHRyaWJ1dGVzIGFuZCBwYXNzIHRoZW0g
YWxvbmcgdG8gdGhlIGVtYmVkZGVyLgotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0
aFN0cihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodFN0cihBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOworICAgIFBhc3NPd25QdHI8RXdrX1dpbmRv
d19GZWF0dXJlcz4gZXdrV2luZG93RmVhdHVyZXMgPSBFd2tfV2luZG93X0ZlYXR1cmVzOjpjcmVh
dGUod2luZG93RmVhdHVyZXMsIHRoaXMpOwogCi0gICAgV0tUeXBlUmVmIHJlZiA9IFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkod2luZG93RmVhdHVyZXMsIHdpZHRoU3RyLmdldCgpKTsKLSAgICB1
bnNpZ25lZCB3aWR0aCA9IHJlZiA/IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KHJlZikpIDogMDsKLSAgICByZWYgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdp
bmRvd0ZlYXR1cmVzLCBoZWlnaHRTdHIuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGhlaWdodCA9IHJl
ZiA/IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KHJlZikpIDogMDsK
LQotICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZV9uZXcpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKCEobmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGVfbmV3KHNk
LCB3aWR0aCwgaGVpZ2h0KSkpCisgICAgRXZhc19PYmplY3QqIG5ld0V3a1ZpZXcgPSBzZC0+YXBp
LT53aW5kb3dfY3JlYXRlKHNkLCBld2tXaW5kb3dGZWF0dXJlcy5nZXQoKSk7CisgICAgaWYgKCFu
ZXdFd2tWaWV3KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEV3a1ZpZXdJbXBsKiBuZXdWaWV3
SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZhc09iamVjdChuZXdFd2tWaWV3KTsKICAgICBBU1NF
UlQobmV3Vmlld0ltcGwpOwogCisgICAgbmV3Vmlld0ltcGwtPm1fd2luZG93RmVhdHVyZXMgPSBl
d2tXaW5kb3dGZWF0dXJlczsKKwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+KFdL
UmV0YWluKG5ld1ZpZXdJbXBsLT5wYWdlKCkpKTsKIH0KIAogdm9pZCBFd2tWaWV3SW1wbDo6Y2xv
c2VQYWdlKCkKIHsKLSAgICBzbWFydENhbGxiYWNrPENsb3NlV2luZG93PigpLmNhbGwoKTsKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAgIEFTU0VSVChzZC0+
YXBpKTsKKworICAgIGlmICghc2QtPmFwaS0+d2luZG93X2Nsb3NlKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwogfQogCiB2b2lkIEV3a1ZpZXdJbXBs
Ojpvbk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVu
dEluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwu
aAppbmRleCA3MGE2NjIxLi4wMmEyNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgKQEAgLTIyLDEwICsyMiwxMSBAQAogI2RlZmluZSBFd2tW
aWV3SW1wbF9oCiAKICNpbmNsdWRlICJFd2tWaWV3Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSW1t
dXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIlJlZlB0ckVmbC5oIgogI2luY2x1ZGUgIldL
RWluYVNoYXJlZFN0cmluZy5oIgotI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNsdWRlICJX
S1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNsdWRlIDxFdmFzLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RGly
ZWN0aW9uLmg+CkBAIC03Niw2ICs3Nyw3IEBAIGNsYXNzIEV3a19CYWNrX0ZvcndhcmRfTGlzdDsK
IGNsYXNzIEV3a19Db2xvcl9QaWNrZXI7CiBjbGFzcyBFd2tfUG9wdXBfTWVudTsKIGNsYXNzIEV3
a19TZXR0aW5nczsKK2NsYXNzIEV3a19XaW5kb3dfRmVhdHVyZXM7CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0IEV2YXNf
R0xfQ29udGV4dDsKQEAgLTEwMiw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgRXdrQ29udGV4dCog
ZXdrQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEV3a19TZXR0aW5n
cyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tGb3J3YXJkTGlz
dC5nZXQoKTsgfQorICAgIEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzKCkgeyBy
ZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQoKTsgfQogCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBz
aXplKCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdDsKQEAgLTE1Niw3ICsxNTks
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNtaXNzQ29sb3JQaWNrZXIoKTsKICNlbmRpZgogCi0g
ICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVz
KTsKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25h
cnkqIHdpbmRvd0ZlYXR1cmVzKTsKICAgICB2b2lkIGNsb3NlUGFnZSgpOwogCiAgICAgdm9pZCBy
ZXF1ZXN0UG9wdXBNZW51KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlFZmwqLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZh
Y3RvciwgY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMyX3Qg
c2VsZWN0ZWRJbmRleCk7CkBAIC0yNDMsNiArMjQ2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogI2VuZGlmCiAgICAgT3duUHRyPEV3a19TZXR0
aW5ncz4gbV9zZXR0aW5nczsKKyAgICBPd25QdHI8RXdrX1dpbmRvd19GZWF0dXJlcz4gbV93aW5k
b3dGZWF0dXJlczsKICAgICBjb25zdCB2b2lkKiBtX2N1cnNvcklkZW50aWZpZXI7IC8vIFRoaXMg
aXMgYW4gYWRkcmVzcywgZG8gbm90IGZyZWUgaXQuCiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1f
ZmF2aWNvblVSTDsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV91cmw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggOTA1NmUxYy4uOGRkMGM4
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApA
QCAtOTIxLDMgKzkyMSwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfZnVsbHNjcmVlbl9leGl0KEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQorCitFd2tf
V2luZG93X0ZlYXR1cmVzKiBld2tfdmlld193aW5kb3dfZmVhdHVyZXNfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQoreworICAgIEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBpbXBsLCAwKTsKKworICAgIHJldHVybiBpbXBsLT53aW5kb3dGZWF0dXJlcygpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5kZXggOGEzOTQ2
ZS4uZDFkODBjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5oCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAiZXdrX3RvdWNoLmgiCiAjaW5jbHVkZSAi
ZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgorI2luY2x1
ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAKICNpZmRlZiBf
X2NwbHVzcGx1cwpAQCAtMTUwLDE0ICsxNTEsMTcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0Ns
YXNzIHsKIAogICAgIC8vIG5ldyB3aW5kb3c6CiAgICAgLy8gICAtIENyZWF0ZSBhIG5ldyB3aW5k
b3cgd2l0aCBzcGVjaWZpZWQgc2l6ZQotICAgIEV2YXNfT2JqZWN0KiAoKndpbmRvd19jcmVhdGVf
bmV3KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29y
ZCBoZWlnaHQpOworICAgIC8vIHdpbmRvdyBoYW5kbGluZzoKKyAgICAvLyAgIC0gY3JlYXRlIGFu
ZCBjbG9zZSB3aW5kb3cuCisgICAgRXZhc19PYmplY3QgKigqd2luZG93X2NyZWF0ZSkoRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0
dXJlcyk7CisgICAgdm9pZCAoKndpbmRvd19jbG9zZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2Qp
OwogfTsKIAogLyoqCiAgKiBUaGUgdmVyc2lvbiB5b3UgaGF2ZSB0byBwdXQgaW50byB0aGUgdmVy
c2lvbiBmaWVsZAogICogaW4gdGhlIEBhIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4K
ICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDdVTAorI2RlZmluZSBF
V0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDhVTAogCiAvKioKICAqIEluaXRpYWxpemVyIGZv
ciB3aG9sZSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCkBAIC0xNjksNyArMTczLDcg
QEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRf
Q0xBU1NfSU5JVF9WRVJTSU9OCiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFN
RV9WRVJTSU9OCiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChzbWFydF9j
bGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lP
TiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMH0KKyNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChzbWFydF9jbGFzc19p
bml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMH0KIAogLyoqCiAgKiBJbml0aWFsaXplciB0byB6ZXJvIGEgd2hvbGUgRXdrX1ZpZXdfU21h
cnRfQ2xhc3Mgc3RydWN0dXJlLgpAQCAtODE0LDYgKzgxOCwxNSBAQCBFQVBJIEV3a19QYWdpbmF0
aW9uX01vZGUgZXdrX3ZpZXdfcGFnaW5hdGlvbl9tb2RlX2dldChjb25zdCBFdmFzX09iamVjdCAq
byk7CiAgKi8KIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X2Z1bGxzY3JlZW5fZXhpdChFdmFzX09i
amVjdCAqbyk7CiAKKy8qKgorICogR2V0cyB0aGUgRXdrX1dpbmRvd19GZWF0dXJlcyBvZiB0aGlz
IHZpZXcuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IEV3a19XaW5kb3dfRmVh
dHVyZXMKKyAqCisgKiBAcmV0dXJuIHRoZSBFd2tfV2luZG93X0ZlYXR1cmVzIG9mIHRoaXMgdmll
dyBvciBAYyBOVUxMIG9uIGZhaWx1cmUKKyAqLworRUFQSSBFd2tfV2luZG93X0ZlYXR1cmVzICpl
d2tfdmlld193aW5kb3dfZmVhdHVyZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKwogI2lm
ZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5NTBmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCkBAIC0wLDAg
KzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCisKKyNpbmNsdWRlICJXZWJOdW1iZXIuaCIK
KyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFaW5h
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a19XaW5kb3dfRmVhdHVyZXM6OkV3
a19XaW5kb3dfRmVhdHVyZXMoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMsIEV3
a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCit7CisgICAg
aWYod2luZG93RmVhdHVyZXMpCisgICAgeworICAgICAgICBXZWJCb29sZWFuKiBib29sZWFuVmFs
dWUgPSBzdGF0aWNfY2FzdDxXZWJCb29sZWFuKj4od2luZG93RmVhdHVyZXMtPmdldCgidG9vbEJh
clZpc2libGUiKSk7CisgICAgICAgIGlmIChib29sZWFuVmFsdWUpCisgICAgICAgICAgICBtX3Rv
b2xiYXJWaXNpYmxlID0gYm9vbGVhblZhbHVlLT52YWx1ZSgpOworCisgICAgICAgIGJvb2xlYW5W
YWx1ZSA9IHN0YXRpY19jYXN0PFdlYkJvb2xlYW4qPih3aW5kb3dGZWF0dXJlcy0+Z2V0KCJzdGF0
dXNCYXJWaXNpYmxlIikpOworICAgICAgICBpZiAoYm9vbGVhblZhbHVlKQorICAgICAgICAgICAg
bV9zdGF0dXNiYXJWaXNpYmxlID0gYm9vbGVhblZhbHVlLT52YWx1ZSgpOworCisgICAgICAgIGJv
b2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PFdlYkJvb2xlYW4qPih3aW5kb3dGZWF0dXJlcy0+Z2V0
KCJzY3JvbGxiYXJzVmlzaWJsZSIpKTsKKyAgICAgICAgaWYgKGJvb2xlYW5WYWx1ZSkKKyAgICAg
ICAgICAgIG1fc2Nyb2xsYmFyc1Zpc2libGUgPSBib29sZWFuVmFsdWUtPnZhbHVlKCk7CisKKyAg
ICAgICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViQm9vbGVhbio+KHdpbmRvd0ZlYXR1
cmVzLT5nZXQoIm1lbnVCYXJWaXNpYmxlIikpOworICAgICAgICBpZiAoYm9vbGVhblZhbHVlKQor
ICAgICAgICAgICAgbV9tZW51YmFyVmlzaWJsZSA9IGJvb2xlYW5WYWx1ZS0+dmFsdWUoKTsKKwor
ICAgICAgICBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJCb29sZWFuKj4od2luZG93RmVh
dHVyZXMtPmdldCgibG9jYXRpb25CYXJWaXNpYmxlIikpOworICAgICAgICBpZiAoYm9vbGVhblZh
bHVlKQorICAgICAgICAgICAgbV9sb2NhdGlvbmJhclZpc2libGUgPSBib29sZWFuVmFsdWUtPnZh
bHVlKCk7CisKKyAgICAgICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViQm9vbGVhbio+
KHdpbmRvd0ZlYXR1cmVzLT5nZXQoInJlc2l6YWJsZSIpKTsKKyAgICAgICAgaWYgKGJvb2xlYW5W
YWx1ZSkKKyAgICAgICAgICAgIG1fcmVzaXphYmxlID0gYm9vbGVhblZhbHVlLT52YWx1ZSgpOwor
CisgICAgICAgIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PFdlYkJvb2xlYW4qPih3aW5kb3dG
ZWF0dXJlcy0+Z2V0KCJmdWxsc2NyZWVuIikpOworICAgICAgICBpZiAoYm9vbGVhblZhbHVlKQor
ICAgICAgICAgICAgbV9mdWxsc2NyZWVuID0gYm9vbGVhblZhbHVlLT52YWx1ZSgpOworCisgICAg
ICAgIFdlYkRvdWJsZSogZG91YmxlVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJEb3VibGUqPih3aW5k
b3dGZWF0dXJlcy0+Z2V0KCJ4IikpOworICAgICAgICBpZiAoZG91YmxlVmFsdWUpCisgICAgICAg
ICAgICBtX2dlb21ldHJ5LnNldFgoZG91YmxlVmFsdWUtPnZhbHVlKCkpOworCisgICAgICAgIGRv
dWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViRG91YmxlKj4od2luZG93RmVhdHVyZXMtPmdldCgi
eSIpKTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlKQorICAgICAgICAgICAgbV9nZW9tZXRyeS5z
ZXRZKGRvdWJsZVZhbHVlLT52YWx1ZSgpKTsKKworICAgICAgICBkb3VibGVWYWx1ZSA9IHN0YXRp
Y19jYXN0PFdlYkRvdWJsZSo+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoIndpZHRoIikpOworICAgICAg
ICBpZiAoZG91YmxlVmFsdWUpCisgICAgICAgICAgICBtX2dlb21ldHJ5LnNldFdpZHRoKGRvdWJs
ZVZhbHVlLT52YWx1ZSgpKTsKKworICAgICAgICBkb3VibGVWYWx1ZSA9IHN0YXRpY19jYXN0PFdl
YkRvdWJsZSo+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoImhlaWdodCIpKTsKKyAgICAgICAgaWYgKGRv
dWJsZVZhbHVlKQorICAgICAgICAgICAgbV9nZW9tZXRyeS5zZXRIZWlnaHQoZG91YmxlVmFsdWUt
PnZhbHVlKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBXZWJDb3JlOjpXaW5k
b3dGZWF0dXJlcyogY29yZUZlYXR1cmVzID0gbmV3IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzKCk7
CisKKyAgICAgICAgbV90b29sYmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+dG9vbEJhclZpc2li
bGU7CisgICAgICAgIG1fc3RhdHVzYmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+c3RhdHVzQmFy
VmlzaWJsZTsKKyAgICAgICAgbV9zY3JvbGxiYXJzVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+c2Ny
b2xsYmFyc1Zpc2libGU7CisgICAgICAgIG1fbWVudWJhclZpc2libGUgPSBjb3JlRmVhdHVyZXMt
Pm1lbnVCYXJWaXNpYmxlOworICAgICAgICBtX2xvY2F0aW9uYmFyVmlzaWJsZSA9IGNvcmVGZWF0
dXJlcy0+bG9jYXRpb25CYXJWaXNpYmxlOworICAgICAgICBtX3Jlc2l6YWJsZSA9IGNvcmVGZWF0
dXJlcy0+cmVzaXphYmxlOworICAgICAgICBtX2Z1bGxzY3JlZW4gPSBjb3JlRmVhdHVyZXMtPmZ1
bGxzY3JlZW47CisKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRYKGNvcmVGZWF0dXJlcy0+eCk7Cisg
ICAgICAgIG1fZ2VvbWV0cnkuc2V0WShjb3JlRmVhdHVyZXMtPnkpOworICAgICAgICBtX2dlb21l
dHJ5LnNldFdpZHRoKGNvcmVGZWF0dXJlcy0+d2lkdGgpOworICAgICAgICBtX2dlb21ldHJ5LnNl
dEhlaWdodChjb3JlRmVhdHVyZXMtPmhlaWdodCk7CisgICAgfQorfQorCit2b2lkIGV3a193aW5k
b3dfZmVhdHVyZXNfYm9vbF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyog
d2luZG93RmVhdHVyZXMsIEVpbmFfQm9vbCogdG9vbGJhclZpc2libGUsIEVpbmFfQm9vbCogc3Rh
dHVzYmFyVmlzaWJsZSwgRWluYV9Cb29sKiBzY3JvbGxiYXJzVmlzaWJsZSwgRWluYV9Cb29sKiBt
ZW51YmFyVmlzaWJsZSwgRWluYV9Cb29sICpsb2NhdGlvbmJhclZpc2libGUsIEVpbmFfQm9vbCAq
cmVzaXphYmxlLCBFaW5hX0Jvb2wgKmZ1bGxzY3JlZW4pCit7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4od2luZG93RmVhdHVyZXMpOworCisgICAgaWYgKHRvb2xiYXJWaXNpYmxlKQor
ICAgICAgICAqdG9vbGJhclZpc2libGUgPSB3aW5kb3dGZWF0dXJlcy0+dG9vbGJhclZpc2libGUo
KTsKKworICAgIGlmIChzdGF0dXNiYXJWaXNpYmxlKQorICAgICAgICAqc3RhdHVzYmFyVmlzaWJs
ZSA9IHdpbmRvd0ZlYXR1cmVzLT5zdGF0dXNiYXJWaXNpYmxlKCk7CisKKyAgICBpZiAoc2Nyb2xs
YmFyc1Zpc2libGUpCisgICAgICAgICpzY3JvbGxiYXJzVmlzaWJsZSA9IHdpbmRvd0ZlYXR1cmVz
LT5zY3JvbGxiYXJzVmlzaWJsZSgpOworCisgICAgaWYgKG1lbnViYXJWaXNpYmxlKQorICAgICAg
ICAqbWVudWJhclZpc2libGUgPSB3aW5kb3dGZWF0dXJlcy0+bWVudWJhclZpc2libGUoKTsKKwor
ICAgIGlmIChsb2NhdGlvbmJhclZpc2libGUpCisgICAgICAgICpsb2NhdGlvbmJhclZpc2libGUg
PSB3aW5kb3dGZWF0dXJlcy0+bG9jYXRpb25iYXJWaXNpYmxlKCk7CisKKyAgICBpZiAocmVzaXph
YmxlKQorICAgICAgICAqcmVzaXphYmxlID0gd2luZG93RmVhdHVyZXMtPnJlc2l6YWJsZSgpOwor
CisgICAgaWYgKGZ1bGxzY3JlZW4pCisgICAgICAgICpmdWxsc2NyZWVuID0gd2luZG93RmVhdHVy
ZXMtPmZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9w
ZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93RmVhdHVyZXMsIGludCog
eCwgaW50KiB5LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTih3aW5kb3dGZWF0dXJlcyk7CisKKyAgICBpZiAod2luZG93RmVhdHVyZXMt
Pmdlb21ldHJ5KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoeCkKKyAg
ICAgICAgKnggPSBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd0ZlYXR1cmVzLT5nZW9tZXRyeSgpLngo
KSk7CisKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd0Zl
YXR1cmVzLT5nZW9tZXRyeSgpLnkoKSk7CisKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0
aCA9IHN0YXRpY19jYXN0PGludD4od2luZG93RmVhdHVyZXMtPmdlb21ldHJ5KCkud2lkdGgoKSk7
CisKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pih3
aW5kb3dGZWF0dXJlcy0+Z2VvbWV0cnkoKS5oZWlnaHQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlYjI0NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaApA
QCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgICAg
ZXdrX3dpbmRvd19mZWF0dXJlcy5oCisgKiBAYnJpZWYgICBBY2Nlc3MgdG8gdGhlIGZlYXR1cmVz
IG9mIHdpbmRvdy4KKyAqLworCisjaWZuZGVmIGV3a193aW5kb3dfZmVhdHVyZXNfaAorI2RlZmlu
ZSBld2tfd2luZG93X2ZlYXR1cmVzX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFt
ZSBmb3IgQGEgRXdrX1dpbmRvd19GZWF0dXJlcy4gKi8KK3R5cGVkZWYgc3RydWN0IEV3a19XaW5k
b3dfRmVhdHVyZXMgRXdrX1dpbmRvd19GZWF0dXJlczsKKworLyoqCisgKiBHZXRzIGJvb2xlYW4g
cHJvcGVydGllcyBvZiBhbiBFd2tfV2luZG93X0ZlYXR1cmVzLgorICoKKyAqIFByb3BlcnRpZXMg
YXJlIHJldHVybmVkIGluIHRoZSByZXNwZWN0aXZlIHBvaW50ZXJzLiBQYXNzaW5nIEBjIE5VTEwg
dG8gYW55IG9mCisgKiB0aGVzZSBwb2ludGVycyB3aWxsIGNhdXNlIHRoYXQgcHJvcGVydHkgdG8g
bm90IGJlIHJldHVybmVkLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVj
dCB0byBnZXQgYm9vbGVhbiBwcm9wZXJ0aWVzCisgKiBAcGFyYW0gdG9vbGJhcl92aXNpYmxlIHRo
ZSBwb2ludGVyIHRvIHN0b3JlIGlmIHRvb2xiYXIgaXMgdmlzaWJsZQorICogQHBhcmFtIHN0YXR1
c2Jhcl92aXNpYmxlIHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIHN0YXR1c2JhciBpcyB2aXNpYmxl
CisgKiBAcGFyYW0gc2Nyb2xsYmFyc192aXNpYmxlIHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIHNj
cm9sbGJhcnMgaXMgdmlzaWJsZQorICogQHBhcmFtIG1lbnViYXJfdmlzaWJsZSB0aGUgcG9pbnRl
ciB0byBzdG9yZSBpZiBtZW51YmFyIGlzIHZpc2libGUKKyAqIEBwYXJhbSBsb2NhdGlvbmJhcl92
aXNpYmxlIHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIGxvY2F0aW9uYmFyIGlzIHZpc2libGUKKyAq
IEBwYXJhbSByZXNpemFibGUgdGhlIHBvaW50ZXIgdG8gc3RvcmUgaWYgcmVzaXphYmxlIGlzIGVu
YWJsZWQKKyAqIEBwYXJhbSBmdWxsc2NyZWVuIHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIGZ1bGxz
Y3JlZW4gaXMgZW5hYmxlZAorICoKKyAqIEBzZWUgZXdrX3dpbmRvd19mZWF0dXJlc19pbnRfcHJv
cGVydHlfZ2V0CisgKi8KK0VBUEkgdm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2Jvb2xfcHJvcGVy
dHlfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcywgRWluYV9C
b29sICp0b29sYmFyX3Zpc2libGUsIEVpbmFfQm9vbCAqc3RhdHVzYmFyX3Zpc2libGUsIEVpbmFf
Qm9vbCAqc2Nyb2xsYmFyc192aXNpYmxlLCBFaW5hX0Jvb2wgKm1lbnViYXJfdmlzaWJsZSwgRWlu
YV9Cb29sICpsb2NhdGlvbmJhcl92aXNpYmxlLCBFaW5hX0Jvb2wgKnJlc2l6YWJsZSwgRWluYV9C
b29sICpmdWxsc2NyZWVuKTsKKworLyoqCisgKiBHZXRzIGludCBwcm9wZXJ0aWVzIG9mIGFuIEV3
a19XaW5kb3dfRmVhdHVyZXMuCisgKgorICogUHJvcGVydGllcyBhcmUgcmV0dXJuZWQgaW4gdGhl
IHJlc3BlY3RpdmUgcG9pbnRlcnMuIFBhc3NpbmcgQGMgTlVMTCB0byBhbnkgb2YKKyAqIHRoZXNl
IHBvaW50ZXJzIHdpbGwgY2F1c2UgdGhhdCBwcm9wZXJ0eSB0byBub3QgYmUgcmV0dXJuZWQuCisg
KgorICogTWFrZSBzdXJlIHRvIGNoZWNrIGlmIHRoZSB2YWx1ZSByZXR1cm5lZCBpcyBsZXNzIHRo
YW4gMCBiZWZvcmUgdXNpbmcgaXQsIHNpbmNlIGluCisgKiB0aGF0IGNhc2UgaXQgbWVhbnMgdGhh
dCBwcm9wZXJ0eSB3YXMgbm90IHNldCBpbiB3aW5kb3dfZmVhdHVyZXMgb2JqZWN0LgorICoKKyAq
IEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIHdpbmRvdydzIGZlYXR1cmVzCisgKiBAcGFyYW0g
eCB0aGUgcG9pbnRlciB0byBzdG9yZSB4IHBvc2l0aW9uCisgKiBAcGFyYW0geSB0aGUgcG9pbnRl
ciB0byBzdG9yZSB5IHBvc2l0aW9uCisgKiBAcGFyYW0gdyB0aGUgcG9pbnRlciB0byBzdG9yZSB3
aWR0aAorICogQHBhcmFtIGggdGhlIHBvaW50ZXIgdG8gc3RvcmUgaGVpZ2h0CisgKgorICogQHNl
ZSBld2tfd2luZG93X2ZlYXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0CisgKi8KK0VBUEkgdm9pZCBl
d2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyAqd2luZG93X2ZlYXR1cmVzLCBpbnQgKngsIGludCAqeSwgaW50ICp3LCBpbnQgKmgpOwor
CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gZXdrX3dpbmRvd19m
ZWF0dXJlc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmI3OTc1YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaApAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBld2tfd2luZG93X2Zl
YXR1cmVzX3ByaXZhdGVfaAorI2RlZmluZSBld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGVfaAor
CisjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIldpbmRvd0ZlYXR1
cmVzLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK2NsYXNzIEV3a1ZpZXdJbXBsOworCitjbGFzcyBFd2tfV2luZG93X0ZlYXR1cmVz
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxFd2tfV2luZG93X0ZlYXR1cmVzPiBj
cmVhdGUoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2
aWV3SW1wbCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXdrX1dpbmRvd19G
ZWF0dXJlcyh3aW5kb3dGZWF0dXJlcywgdmlld0ltcGwpKTsKKyAgICB9CisKKyAgICBGbG9hdFJl
Y3QgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5OyB9CisgICAgdm9pZCBzZXRH
ZW9tZXRyeShGbG9hdFJlY3QmIGdlb21ldHJ5KSB7IG1fZ2VvbWV0cnkgPSBnZW9tZXRyeTsgfQor
CisgICAgYm9vbCB0b29sYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9vbGJhclZpc2li
bGU7IH0KKyAgICB2b2lkIHNldFRvb2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpIHsg
bV90b29sYmFyVmlzaWJsZSA9IHRvb2xiYXJWaXNpYmxlOyB9CisgICAgYm9vbCBzdGF0dXNiYXJW
aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXNiYXJWaXNpYmxlOyB9CisgICAgdm9pZCBz
ZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wgc3RhdHVzYmFyVmlzaWJsZSkgeyBtX3N0YXR1c2JhclZp
c2libGUgPSBzdGF0dXNiYXJWaXNpYmxlOyB9CisKKyAgICBib29sIHNjcm9sbGJhcnNWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXJzVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0U2Ny
b2xsYmFyc1Zpc2libGUoYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSkgeyBtX3Njcm9sbGJhcnNWaXNp
YmxlID0gc2Nyb2xsYmFyc1Zpc2libGU7IH0KKworICAgIGJvb2wgbWVudWJhclZpc2libGUoKSBj
b25zdCB7IHJldHVybiBtX21lbnViYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRNZW51YmFyVmlz
aWJsZShib29sIG1lbnViYXJWaXNpYmxlKSB7IG1fbWVudWJhclZpc2libGUgPSBtZW51YmFyVmlz
aWJsZTsgfQorCisgICAgYm9vbCBsb2NhdGlvbmJhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBt
X2xvY2F0aW9uYmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0TG9jYXRpb25iYXJWaXNpYmxlKGJv
b2wgbG9jYXRpb25iYXJWaXNpYmxlKSB7IG1fbG9jYXRpb25iYXJWaXNpYmxlID0gbG9jYXRpb25i
YXJWaXNpYmxlOyB9CisKKyAgICBib29sIHJlc2l6YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
aXphYmxlOyB9CisgICAgdm9pZCBzZXRSZXNpemFibGUoYm9vbCByZXNpemFibGUpIHsgbV9yZXNp
emFibGUgPSByZXNpemFibGU7IH0KKworICAgIGJvb2wgZnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0
dXJuIG1fZnVsbHNjcmVlbjsgfQorICAgIHZvaWQgc2V0RnVsbHNjcmVlbihib29sIGZ1bGxzY3Jl
ZW4pIHsgbV9mdWxsc2NyZWVuID0gZnVsbHNjcmVlbjsgfQorCitwcml2YXRlOgorICAgIGV4cGxp
Y2l0IEV3a19XaW5kb3dfRmVhdHVyZXMoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVy
ZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCk7CisKKyAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1w
bDsKKworICAgIEZsb2F0UmVjdCBtX2dlb21ldHJ5OworICAgIGJvb2wgbV90b29sYmFyVmlzaWJs
ZTsKKyAgICBib29sIG1fc3RhdHVzYmFyVmlzaWJsZTsKKyAgICBib29sIG1fc2Nyb2xsYmFyc1Zp
c2libGU7CisgICAgYm9vbCBtX21lbnViYXJWaXNpYmxlOworICAgIGJvb2wgbV9sb2NhdGlvbmJh
clZpc2libGU7CisgICAgYm9vbCBtX3Jlc2l6YWJsZTsKKyAgICBib29sIG1fZnVsbHNjcmVlbjsK
K307CisKKyNlbmRpZiAvLyBld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRv
d19mZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90
ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45NmU3ZjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcy5jcHAKQEAgLTAsMCAr
MSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlIDxFV2Vi
S2l0Mi5oPgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVz
dDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdHJ1Y3QgV2luZG93X0ZlYXR1cmVzIHsK
KworICAgIEVpbmFfQm9vbCB0b29sYmFyVmlzaWJsZTsKKyAgICBFaW5hX0Jvb2wgc3RhdHVzYmFy
VmlzaWJsZTsKKyAgICBFaW5hX0Jvb2wgc2Nyb2xsYmFyc1Zpc2libGU7CisgICAgRWluYV9Cb29s
IG1lbnViYXJWaXNpYmxlOworICAgIEVpbmFfQm9vbCBsb2NhdGlvbmJhclZpc2libGU7CisgICAg
RWluYV9Cb29sIHJlc2l6YWJsZTsKKyAgICBFaW5hX0Jvb2wgZnVsbHNjcmVlbjsKKworICAgIFdp
bmRvd19GZWF0dXJlcygpCisgICAgICAgIDogdG9vbGJhclZpc2libGUoZmFsc2UpCisgICAgICAg
ICwgc3RhdHVzYmFyVmlzaWJsZShmYWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzVmlzaWJsZShm
YWxzZSkKKyAgICAgICAgLCBtZW51YmFyVmlzaWJsZShmYWxzZSkKKyAgICAgICAgLCBsb2NhdGlv
bmJhclZpc2libGUoZmFsc2UpCisgICAgICAgICwgcmVzaXphYmxlKGZhbHNlKQorICAgICAgICAs
IGZ1bGxzY3JlZW4oZmFsc2UpCisgICAgeyB9Cit9OworCitzdGF0aWMgRXZhc19PYmplY3QqIGNy
ZWF0ZVdpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMgKndpbmRvd0ZlYXR1cmVzKQoreworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0g
TlVMTDsKKyAgICBXaW5kb3dfRmVhdHVyZXMgZmVhdHVyZXM7CisKKyAgICBld2tfd2luZG93X2Zl
YXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0KHdpbmRvd0ZlYXR1cmVzLCAmZmVhdHVyZXMudG9vbGJh
clZpc2libGUsICZmZWF0dXJlcy5zdGF0dXNiYXJWaXNpYmxlLCAmZmVhdHVyZXMuc2Nyb2xsYmFy
c1Zpc2libGUsICZmZWF0dXJlcy5tZW51YmFyVmlzaWJsZSwgJmZlYXR1cmVzLmxvY2F0aW9uYmFy
VmlzaWJsZSwgJmZlYXR1cmVzLnJlc2l6YWJsZSwgJmZlYXR1cmVzLmZ1bGxzY3JlZW4pOworCisg
ICAgRVhQRUNUX1RSVUUoZmVhdHVyZXMudG9vbGJhclZpc2libGUpOworICAgIEVYUEVDVF9UUlVF
KGZlYXR1cmVzLnN0YXR1c2JhclZpc2libGUpOworICAgIEVYUEVDVF9UUlVFKGZlYXR1cmVzLnNj
cm9sbGJhcnNWaXNpYmxlKTsKKyAgICBFWFBFQ1RfRkFMU0UoZmVhdHVyZXMubWVudWJhclZpc2li
bGUpOworICAgIEVYUEVDVF9GQUxTRShmZWF0dXJlcy5sb2NhdGlvbmJhclZpc2libGUpOworICAg
IEVYUEVDVF9UUlVFKGZlYXR1cmVzLnJlc2l6YWJsZSk7CisgICAgRVhQRUNUX0ZBTFNFKGZlYXR1
cmVzLmZ1bGxzY3JlZW4pOworCisgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisKKyAgICBl
d2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQod2luZG93RmVhdHVyZXMsICZ4LCAm
eSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIEVYUEVDVF9FUSgxMDAsIHgpOworICAgIEVYUEVD
VF9FUSgxNTAsIHkpOworICAgIEVYUEVDVF9FUSg0MDAsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEo
NDAwLCBoZWlnaHQpOworCisgICAgcmV0dXJuIHZpZXc7Cit9CisKK1RFU1RfRihFV0syVW5pdFRl
c3RCYXNlLCBld2tfd2luZG93X2ZlYXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0KQoreworICAgIEV2
YXNfT2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworCisgICAgY29uc3QgY2hhciogd2luZG93SFRN
TCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycsICdsZWZ0PTEwMCx0
b3A9MTUwLHdpZHRoPTQwMCxoZWlnaHQ9NDAwLGxvY2F0aW9uPW5vLG1lbnViYXI9bm8sc3RhdHVz
PXllcyx0b29sYmFyPXllcyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzLGZ1bGxzY3JlZW49
bm8nKTtcIj48L2JvZHk+PC9odG1sPiI7CisKKyAgICBld2tWaWV3Q2xhc3MoKS0+d2luZG93X2Ny
ZWF0ZSA9IGNyZWF0ZVdpbmRvdzsKKworICAgIGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQodmll
dywgd2luZG93SFRNTCwgMCwgMCk7CisgICAgQVNTRVJUX1RSVUUod2FpdFVudGlsTG9hZEZpbmlz
aGVkKCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
VUlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGll
bnRFZmwuY3BwCmluZGV4IDJiNzUwNzEwLi4wYjQxZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiV0tFdmVudC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiZXdr
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2Zl
YXR1cmVzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db2xvci5oPgogCkBAIC00OSw5ICs1MCw5IEBAIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpj
bG9zZVBhZ2UoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogICAgIHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jbG9zZVBhZ2UoKTsKIH0KIAotV0tQ
YWdlUmVmIFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVx
dWVzdFJlZiwgV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJz
LCBXS0V2ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitXS1BhZ2VSZWYg
UGFnZVVJQ2xpZW50RWZsOjpjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVm
LCBXS0RpY3Rpb25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tF
dmVudE1vdXNlQnV0dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJldHVybiB0
b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+Y3JlYXRlTmV3UGFnZSh3
aW5kb3dGZWF0dXJlcyk7CisgICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQYWdlKHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7CiB9
CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBX
S1N0cmluZ1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CkBAIC03MCw2ICs3MSw3MCBAQCBXS1N0cmluZ1JlZiBQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFT
Y3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLAogICAgIHJldHVybiB2
YWx1ZSA/IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAKK2Jv
b2wgUGFnZVVJQ2xpZW50RWZsOjp0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIGJvb2wgdG9vbGJhclZpc2li
bGUgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+dG9vbGJhclZpc2libGUoKTsKKworICAg
IHJldHVybiB0b29sYmFyVmlzaWJsZTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFRv
b2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgdG9vbGJhclZpc2libGUsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlVUlD
bGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7CisKKyAgICB2aWV3SW1wbC0+d2luZG93
RmVhdHVyZXMoKS0+c2V0VG9vbGJhclZpc2libGUodG9vbGJhclZpc2libGUpOworICAgIHZpZXdJ
bXBsLT5zbWFydENhbGxiYWNrPFRvb2xiYXJWaXNpYmxlPigpLmNhbGwoJnRvb2xiYXJWaXNpYmxl
KTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRFZmw6Om1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9
IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIGJvb2wgbWVu
dWJhclZpc2libGUgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+bWVudWJhclZpc2libGUo
KTsKKworICAgIHJldHVybiBtZW51YmFyVmlzaWJsZTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRF
Zmw6OnNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIG1lbnViYXJWaXNpYmxlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRv
UGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworCisgICAgdmlld0ltcGwt
PndpbmRvd0ZlYXR1cmVzKCktPnNldE1lbnViYXJWaXNpYmxlKG1lbnViYXJWaXNpYmxlKTsKKyAg
ICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxNZW51YmFyVmlzaWJsZT4oKS5jYWxsKCZtZW51YmFy
VmlzaWJsZSk7Cit9CisKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUo
V0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2
aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAg
IGJvb2wgc3RhdHVzYmFyVmlzaWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5zdGF0
dXNiYXJWaXNpYmxlKCk7CisKKyAgICByZXR1cm4gc3RhdHVzYmFyVmlzaWJsZTsKK30KKwordm9p
ZCBQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wg
c3RhdHVzYmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tWaWV3
SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1w
bDsKKworICAgIHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5zZXRNZW51YmFyVmlzaWJsZShz
dGF0dXNiYXJWaXNpYmxlKTsKKyAgICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxNZW51YmFyVmlz
aWJsZT4oKS5jYWxsKCZzdGF0dXNiYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRF
Zmw6OmlzUmVzaXphYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+
bV92aWV3SW1wbDsKKyAgICBib29sIHJlc2l6YWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJl
cygpLT5yZXNpemFibGUoKTsKKworICAgIHJldHVybiByZXNpemFibGU7Cit9CisKK3ZvaWQgUGFn
ZVVJQ2xpZW50RWZsOjpzZXRJc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGJvb2wgcmVzaXphYmxlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRv
UGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworCisgICAgdmlld0ltcGwt
PndpbmRvd0ZlYXR1cmVzKCktPnNldFJlc2l6YWJsZShyZXNpemFibGUpOworICAgIHZpZXdJbXBs
LT5zbWFydENhbGxiYWNrPFdpbmRvd1Jlc2l6YWJsZT4oKS5jYWxsKCZyZXNpemFibGUpOworfQor
CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2hv
d0NvbG9yUGlja2VyKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9y
UGlja2VyUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CiB7CkBAIC0xNDEsNiArMjA2LDE0IEBAIFBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZs
KEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0QWxlcnQg
PSBydW5KYXZhU2NyaXB0QWxlcnQ7CiAgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdENvbmZpcm0g
PSBydW5KYXZhU2NyaXB0Q29uZmlybTsKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0
ID0gcnVuSmF2YVNjcmlwdFByb21wdDsKKyAgICB1aUNsaWVudC50b29sYmFyc0FyZVZpc2libGUg
PSB0b29sYmFyc0FyZVZpc2libGU7CisgICAgdWlDbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxl
ID0gc2V0VG9vbGJhcnNBcmVWaXNpYmxlOworICAgIHVpQ2xpZW50Lm1lbnVCYXJJc1Zpc2libGUg
PSBtZW51QmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnNldE1lbnVCYXJJc1Zpc2libGUgPSBz
ZXRNZW51QmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSA9IHN0
YXR1c0JhcklzVmlzaWJsZTsKKyAgICB1aUNsaWVudC5zZXRTdGF0dXNCYXJJc1Zpc2libGUgPSBz
ZXRTdGF0dXNCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuaXNSZXNpemFibGUgPSBpc1Jlc2l6
YWJsZTsKKyAgICB1aUNsaWVudC5zZXRJc1Jlc2l6YWJsZSA9IHNldElzUmVzaXphYmxlOwogICAg
IHVpQ2xpZW50LnRha2VGb2N1cyA9IHRha2VGb2N1czsKICAgICB1aUNsaWVudC5mb2N1cyA9IGZv
Y3VzOwogICAgIHVpQ2xpZW50LnVuZm9jdXMgPSB1bmZvY3VzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKaW5kZXggMmY1NDE5Mi4uM2M2OGQyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCkBA
IC01MCw2ICs1MCwxNCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRB
bGVydChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CiAg
ICAgc3RhdGljIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1Jl
ZiwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBydW5K
YXZhU2NyaXB0UHJvbXB0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLU3RyaW5nUmVmLCBXS0Zy
YW1lUmVmLCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxl
KFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9p
ZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmIHBhZ2UsIGJvb2wsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIG1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVm
IHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldE1lbnVC
YXJJc1Zpc2libGUoV0tQYWdlUmVmIHBhZ2UsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OworICAgIHN0YXRpYyBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYgcGFnZSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0U3RhdHVzQmFySXNWaXNp
YmxlKFdLUGFnZVJlZiBwYWdlLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBz
dGF0aWMgYm9vbCBpc1Jlc2l6YWJsZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0SXNSZXNpemFibGUoV0tQYWdlUmVmIHBhZ2UsIGJv
b2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9S
KQogICAgIHN0YXRpYyB2b2lkIHNob3dDb2xvclBpY2tlcihXS1BhZ2VSZWYsIFdLU3RyaW5nUmVm
IGluaXRpYWxDb2xvciwgV0tDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyUmVmLCBjb25zdCB2b2lk
Kik7CiAgICAgc3RhdGljIHZvaWQgaGlkZUNvbG9yUGlja2VyKFdLUGFnZVJlZiwgY29uc3Qgdm9p
ZCopOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01p
bmlCcm93c2VyL2VmbC9tYWluLmMKaW5kZXggZWYyMGFkNi4uMmFmYTFkMyAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwv
bWFpbi5jCkBAIC0yNzEsMjAgKzI3MSw2IEBAIG9uX2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQo
dm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqd2Vidmlldywgdm9pZCAqZXZlbnRfCiAgICAg
ZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3
X2ZvcndhcmRfcG9zc2libGUod2VidmlldykpOwogfQogCi1zdGF0aWMgRXZhc19PYmplY3QqCi1v
bl9uZXdfd2luZG93KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHdpZHRoLCBF
dmFzX0Nvb3JkIGhlaWdodCkKLXsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93
X2NyZWF0ZShOVUxMLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB3aW5kb3dzID0gZWluYV9saXN0X2Fw
cGVuZCh3aW5kb3dzLCB3aW5kb3cpOwotICAgIHJldHVybiB3aW5kb3ctPndlYnZpZXc7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1vbl9jbG9zZV93aW5kb3codm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVj
dCAqd2Vidmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgICB3aW5kb3dfY2xvc2UoKEJyb3dz
ZXJfV2luZG93ICopdXNlcl9kYXRhKTsKLX0KLQogc3RhdGljIHZvaWQKIG9uX3Byb2dyZXNzKHZv
aWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKndlYnZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7
CkBAIC0zMzQsNiArMzIwLDM4IEBAIG9uX2Rvd25sb2FkX3JlcXVlc3Qodm9pZCAqdXNlcl9kYXRh
LCBFdmFzX09iamVjdCAqd2Vidmlldywgdm9pZCAqZXZlbnRfaW5mbykKICAgICBlaW5hX3N0cmJ1
Zl9mcmVlKGRlc3RpbmF0aW9uX3BhdGgpOwogfQogCitzdGF0aWMgRXZhc19PYmplY3QgKgorb25f
d2luZG93X2NyZWF0ZShFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0IEV3a19X
aW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcykKK3sKKyAgICBpbnQgeCA9IDA7CisgICAg
aW50IHkgPSAwOworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisKKyAg
ICBld2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQod2luZG93X2ZlYXR1cmVzLCAm
eCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAg
d2lkdGggPSB3aW5kb3dfd2lkdGg7CisgICAgaWYgKGhlaWdodCA9PSAwKQorICAgICAgICBoZWln
aHQgPSB3aW5kb3dfaGVpZ2h0OworCisgICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRv
d19jcmVhdGUoTlVMTCwgd2lkdGgsIGhlaWdodCk7CisgICAgRXZhc19PYmplY3QgKm5ld192aWV3
ID0gd2luZG93LT53ZWJ2aWV3OworCisgICAgd2luZG93cyA9IGVpbmFfbGlzdF9hcHBlbmQod2lu
ZG93cywgd2luZG93KTsKKworICAgIGluZm8oIm1pbmlicm93c2VyOiBsb2NhdGlvbiglZCwlZCkg
c2l6ZT0oJWQsJWQpXG4iLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBuZXdf
dmlldzsKK30KKworc3RhdGljIEV2YXNfT2JqZWN0ICoKK29uX3dpbmRvd19jbG9zZShFd2tfVmll
d19TbWFydF9EYXRhICpzbWFydERhdGEpCit7CisgICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9
IGJyb3dzZXJfdmlld19maW5kKHNtYXJ0RGF0YS0+c2VsZik7CisgICAgd2luZG93X2Nsb3NlKHdp
bmRvdyk7Cit9CisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBFdmFzX09iamVjdCAqcGFyZW50Owog
ICAgIEV2YXNfT2JqZWN0ICp3aW5kb3c7CkBAIC0xMDMwLDcgKzEwNDgsOCBAQCBzdGF0aWMgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3QgY2hhciAqdXJsLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCiAgICAgZXdrVmlld0NsYXNzLT53aW5kb3dfZ2VvbWV0cnlfc2V0ID0gb25fd2lu
ZG93X2dlb21ldHJ5X3NldDsKICAgICBld2tWaWV3Q2xhc3MtPmZ1bGxzY3JlZW5fZW50ZXIgPSBv
bl9mdWxsc2NyZWVuX2VudGVyOwogICAgIGV3a1ZpZXdDbGFzcy0+ZnVsbHNjcmVlbl9leGl0ID0g
b25fZnVsbHNjcmVlbl9leGl0OwotICAgIGV3a1ZpZXdDbGFzcy0+d2luZG93X2NyZWF0ZV9uZXcg
PSBvbl9uZXdfd2luZG93OworICAgIGV3a1ZpZXdDbGFzcy0+d2luZG93X2NyZWF0ZSA9IG9uX3dp
bmRvd19jcmVhdGU7CisgICAgZXdrVmlld0NsYXNzLT53aW5kb3dfY2xvc2UgPSBvbl93aW5kb3df
Y2xvc2U7CiAKICAgICBFdmFzICpldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQoYXBwX2RhdGEt
PndpbmRvdyk7CiAgICAgRXZhc19TbWFydCAqc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygm
ZXdrVmlld0NsYXNzLT5zYyk7CkBAIC0xMDQ3LDcgKzEwNjYsNiBAQCBzdGF0aWMgQnJvd3Nlcl9X
aW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3QgY2hhciAqdXJsLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgZXdrX3NldHRpbmdzX3ByZWZlcnJlZF9taW5pbXVtX2NvbnRlbnRzX3dpZHRoX3Nl
dChzZXR0aW5ncywgMCk7CiAKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBw
X2RhdGEtPndlYnZpZXcsICJhdXRoZW50aWNhdGlvbixyZXF1ZXN0Iiwgb25fYXV0aGVudGljYXRp
b25fcmVxdWVzdCwgYXBwX2RhdGEpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Fk
ZChhcHBfZGF0YS0+d2VidmlldywgImNsb3NlLHdpbmRvdyIsIG9uX2Nsb3NlX3dpbmRvdywgYXBw
X2RhdGEpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHBfZGF0YS0+d2Vi
dmlldywgImRvd25sb2FkLGZhaWxlZCIsIG9uX2Rvd25sb2FkX2ZhaWxlZCwgYXBwX2RhdGEpOwog
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHBfZGF0YS0+d2VidmlldywgImRv
d25sb2FkLGZpbmlzaGVkIiwgb25fZG93bmxvYWRfZmluaXNoZWQsIGFwcF9kYXRhKTsKICAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwX2RhdGEtPndlYnZpZXcsICJkb3dubG9h
ZCxyZXF1ZXN0Iiwgb25fZG93bmxvYWRfcmVxdWVzdCwgYXBwX2RhdGEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174327</attachid>
            <date>2012-11-14 19:55:25 -0800</date>
            <delta_ts>2012-11-14 19:57:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121115125322.patch</filename>
            <type>text/plain</type>
            <size>41502</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjRkNWU2YWNkZGZmODgz
ODZkNmQ1OWI0NTUxMjU5NTQxMmY2ODI2OC4uNGJjODc3NmY4NzE0ZGM1YjA5OTAzNTA3NTA3NjM1
MGU1ZGRhZmU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTExLTE0ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBVSSBjYWxsYmFja3MgQVBJIHJlbGF0ZWQgdG8gd2luZG93IGZlYXR1cmVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTExNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEV3a19XaW5kb3df
RmVhdHVyZXMgQVBJIHNvIHRoYXQgd2UgY2FuIGNyZWF0ZSBuZXcgd2luZG93cworICAgICAgICB3
aXRoIHZhcmlvdXMgd2luZG93IGZlYXR1cmVzIHN1Y2ggYXMgbG9jYXRpb24sIHNpemUsIHRvb2xi
YXIsIG1lbnViYXIsCisgICAgICAgIHN0YXR1c2JhciwgbG9jYXRpb25iYXIsIHNjcm9sbGJhciwg
cmVzaXphYmxlLCBhbmQgZnVsbHNjcmVlbi4KKworICAgICAgICBVSSBjbGllbnQgY2FsbGJhY2tz
IHJlbGF0ZWQgdG8gd2luZG93IGZlYXR1cmVzIGFsc28gaW1wbGVtZW50ZWQKKyAgICAgICAgc28g
dGhhdCBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIHRoZSB3aW5kb3cgZmVhdHVyZXMgaW4gdGhl
IGFwcGxpY2F0aW9ucy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaDoKKyAgICAgICAgKEV3a1ZpZXdD
YWxsYmFja3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcDoK
KyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKEV3a1ZpZXdJ
bXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBs
Lmg6CisgICAgICAgIChFd2tWaWV3SW1wbDo6d2luZG93RmVhdHVyZXMpOgorICAgICAgICAoRXdr
Vmlld0ltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAg
KGV3a193aW5kb3dfZmVhdHVyZXNfYm9vbF9wcm9wZXJ0eV9nZXQpOgorICAgICAgICAoZXdrX3dp
bmRvd19mZWF0dXJlc19pbnRfcHJvcGVydHlfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKEV3
a1dpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUpOgor
ICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6Omdlb21ldHJ5KToKKyAgICAgICAgKEV3a1dpbmRv
d0ZlYXR1cmVzOjpzZXRHZW9tZXRyeSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6dG9v
bGJhclZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldFRvb2xiYXJWaXNp
YmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzdGF0dXNiYXJWaXNpYmxlKToKKyAg
ICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRTdGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAg
KEV3a1dpbmRvd0ZlYXR1cmVzOjpzY3JvbGxiYXJzVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5k
b3dGZWF0dXJlczo6c2V0U2Nyb2xsYmFyc1Zpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVh
dHVyZXM6Om1lbnViYXJWaXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRN
ZW51YmFyVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6bG9jYXRpb25iYXJW
aXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRMb2NhdGlvbmJhclZpc2li
bGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnJlc2l6YWJsZSk6CisgICAgICAgIChF
d2tXaW5kb3dGZWF0dXJlczo6c2V0UmVzaXphYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1
cmVzOjpmdWxsc2NyZWVuKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfd2luZG93
X2ZlYXR1cmVzLmNwcDogQWRkZWQgY29ycmVzcG9uZGluZyBBUEkgdGVzdHMuCisgICAgICAgIChX
aW5kb3dfRmVhdHVyZXMpOgorICAgICAgICAoV2luZG93X0ZlYXR1cmVzOjpXaW5kb3dfRmVhdHVy
ZXMpOgorICAgICAgICAoY3JlYXRlV2luZG93KToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAg
ICogVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlVUlDbGllbnRFZmw6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlD
bGllbnRFZmw6OnRvb2xiYXJzQXJlVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldFRvb2xiYXJzQXJlVmlzaWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6bWVudUJhcklzVmlzaWJsZSk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6c2V0TWVudUJhcklzVmlzaWJsZSk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6c3RhdHVzQmFySXNWaXNpYmxlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRTdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OmlzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRJc1Jlc2l6YWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L1BhZ2VVSUNsaWVudEVmbC5oOgorICAgICAgICAoUGFnZVVJQ2xpZW50RWZsKToKKwogMjAxMi0x
MS0xNCAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAg
ICBDb29yZGluYXRlZCBHcmFwaGljczogUmVtb3ZlIHVudXNlZCBtZW1iZXJzIGFuZCBtZXRob2Rz
IGluIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5k
ZXggYmI4NzQ3YjFjYjFmNTgzOGMyZGQ3Y2NkZGY3ODI5MTFlYTY3YzFlNS4uNjYwNjg1YTU5YTYw
OWZjMmU5ODY2YjVmNGU0NTZhNThmZGRkZTVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTczLDYgKzczLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCiAKICAg
ICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKQEAgLTM3Niw2ICszNzcs
NyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdrMl9zdG9yYWdlX21h
bmFnZXIKICAgICB0ZXN0X2V3azJfdGV4dF9jaGVja2VyCiAgICAgdGVzdF9ld2syX3ZpZXcKKyAg
ICB0ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzCiApCiAKIElGIChFTkFCTEVfQVBJX1RFU1RTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxi
YWNrcy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNr
cy5oCmluZGV4IDk4NTI1OTlhMjc4M2E2MWVhNzdjNTdkZWFmNTIxYjJjNTM1NmZmMzQuLjc1Y2U1
YTgxY2U3ZGFlYzlhMGM2MjBiYWMyZTNkNDhkYjQ5ZWE2YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKQEAgLTY5LDYgKzY5
LDcgQEAgZW51bSBDYWxsYmFja1R5cGUgewogICAgIExvYWRFcnJvciwKICAgICBMb2FkRmluaXNo
ZWQsCiAgICAgTG9hZFByb2dyZXNzLAorICAgIE1lbnViYXJWaXNpYmxlLAogICAgIFByb3Zpc2lv
bmFsTG9hZEZhaWxlZCwKICAgICBQcm92aXNpb25hbExvYWRSZWRpcmVjdCwKICAgICBQcm92aXNp
b25hbExvYWRTdGFydGVkLApAQCAtNzcsMTUgKzc4LDE5IEBAIGVudW0gQ2FsbGJhY2tUeXBlIHsK
ICAgICBSZXNvdXJjZUxvYWRGYWlsZWQsCiAgICAgUmVzb3VyY2VMb2FkRmluaXNoZWQsCiAgICAg
UmVzb3VyY2VSZXF1ZXN0U2VudCwKKyAgICBTY3JvbGxiYXJzVmlzaWJsZSwKKyAgICBTdGF0dXNi
YXJWaXNpYmxlLAogICAgIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiwKICAgICBOZXdXaW5kb3dQ
b2xpY3lEZWNpc2lvbiwKICAgICBUZXh0Rm91bmQsCiAgICAgVGl0bGVDaGFuZ2UsCisgICAgVG9v
bGJhclZpc2libGUsCiAgICAgVG9vbHRpcFRleHRVbnNldCwKICAgICBUb29sdGlwVGV4dFNldCwK
ICAgICBVUkxDaGFuZ2VkLAogICAgIFZpYnJhdGUsCiAgICAgV2ViUHJvY2Vzc0NyYXNoZWQsCisg
ICAgV2luZG93UmVzaXphYmxlLAogI2lmIEVOQUJMRShXRUJfSU5URU5UUykKICAgICBJbnRlbnRS
ZXF1ZXN0LAogI2VuZGlmCkBAIC0xNzksNiArMTg0LDcgQEAgREVDTEFSRV9FV0tfVklFV19DQUxM
QkFDSyhMb2FkUHJvZ3Jlc3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKTsKIERFQ0xBUkVfRVdL
X1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkRmFpbGVkLCAibG9hZCxwcm92aXNpb25hbCxm
YWlsZWQiLCBFd2tfRXJyb3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25h
bExvYWRSZWRpcmVjdCwgImxvYWQscHJvdmlzaW9uYWwscmVkaXJlY3QiLCB2b2lkKTsKIERFQ0xB
UkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwgImxvYWQscHJvdmlz
aW9uYWwsc3RhcnRlZCIsIHZvaWQpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhNZW51YmFy
VmlzaWJsZSwgIm1lbnViYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxM
QkFDSyhOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVjaXNpb24sbmF2aWdhdGlv
biIsIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNMQVJFX0VXS19WSUVXX0NB
TExCQUNLKE5ld1dpbmRvd1BvbGljeURlY2lzaW9uLCAicG9saWN5LGRlY2lzaW9uLG5ldyx3aW5k
b3ciLCBFd2tfTmF2aWdhdGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhSZXNvdXJjZUxvYWRTdGFydGVkLCAicmVzb3VyY2UscmVxdWVzdCxuZXciLCBFd2tf
UmVzb3VyY2VfUmVxdWVzdCk7CkBAIC0xODYsMTMgKzE5MiwxNyBAQCBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKFJlc291cmNlTG9hZFJlc3BvbnNlLCAicmVzb3VyY2UscmVxdWVzdCxyZXNwb25z
ZSIsIEV3awogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRGYWlsZWQsICJy
ZXNvdXJjZSxyZXF1ZXN0LGZhaWxlZCIsIEV3a19SZXNvdXJjZV9Mb2FkX0Vycm9yKTsKIERFQ0xB
UkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkRmluaXNoZWQsICJyZXNvdXJjZSxyZXF1
ZXN0LGZpbmlzaGVkIiwgRXdrX1Jlc291cmNlKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
UmVzb3VyY2VSZXF1ZXN0U2VudCwgInJlc291cmNlLHJlcXVlc3Qsc2VudCIsIEV3a19SZXNvdXJj
ZV9SZXF1ZXN0KTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soU2Nyb2xsYmFyc1Zpc2libGUs
ICJzY29ybGxiYXJzLHZpc2libGUiLCBib29sKTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
U3RhdHVzYmFyVmlzaWJsZSwgInN0YXR1c2Jhcix2aXNpYmxlIiwgYm9vbCk7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKFRleHRGb3VuZCwgInRleHQsZm91bmQiLCB1bnNpZ25lZCk7CiBERUNM
QVJFX0VXS19WSUVXX0NBTExCQUNLKFRpdGxlQ2hhbmdlLCAidGl0bGUsY2hhbmdlZCIsIGNoYXIp
OworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sYmFyVmlzaWJsZSwgInRvb2xiYXIsdmlz
aWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sdGlwVGV4dFVuc2V0
LCAidG9vbHRpcCx0ZXh0LHVuc2V0Iiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNL
KFRvb2x0aXBUZXh0U2V0LCAidG9vbHRpcCx0ZXh0LHNldCIsIGNoYXIpOwogREVDTEFSRV9FV0tf
VklFV19DQUxMQkFDSyhVUkxDaGFuZ2VkLCAidXJsLGNoYW5nZWQiLCBjaGFyKTsKIERFQ0xBUkVf
RVdLX1ZJRVdfQ0FMTEJBQ0soVmlicmF0ZSwgInZpYnJhdGUiLCB1aW50NjRfdCk7CiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFzaGVkLCAid2VicHJvY2VzcyxjcmFzaGVk
IiwgYm9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdpbmRvd1Jlc2l6YWJsZSwgIndp
bmRvdyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3QsICJpbnRlbnQscmVxdWVzdCxuZXciLCBF
d2tfSW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0ltcGwuY3BwCmluZGV4IGVjM2YzMjc4MjE5MzVmN2UwZTNmOTA3YzA3NDg5M2Vl
NGViNDJiMDIuLmQ2ZTdjODE0YzQ4ZjdmN2UxOGEzY2I4MzcwYmM0YzllZDJiZTJkMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKQEAg
LTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4K
ICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5oPgpAQCAtODMwLDM3ICs4MzEs
MzggQEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJMQ2hhbmdlKCkKICAgICBpbmZvcm1JY29u
Q2hhbmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3SW1wbDo6Y3JlYXRlTmV3UGFnZShXS0Rp
Y3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMpCitXS1BhZ2VSZWYgRXdrVmlld0ltcGw6OmNyZWF0
ZU5ld1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpCiB7CiAgICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKICAgICBBU1NFUlQoc2QtPmFwaSk7
CiAKLSAgICBFdmFzX09iamVjdCogbmV3RXdrVmlldyA9IDA7CisgICAgRXdrVmlld0ltcGwqIHZp
ZXdJbXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG1fdmlldyk7CisgICAgaWYgKCFz
ZC0+YXBpLT53aW5kb3dfY3JlYXRlKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdl
UmVmPihXS1JldGFpbih2aWV3SW1wbC0+cGFnZSgpKSk7CiAKLSAgICAvLyBFeHRyYWN0IHRoZSB3
aWR0aCBhbmQgaGVpZ2h0IGZyb20gdGhlIHdpbmRvdyBhdHRyaWJ1dGVzIGFuZCBwYXNzIHRoZW0g
YWxvbmcgdG8gdGhlIGVtYmVkZGVyLgotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0
aFN0cihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodFN0cihBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOworICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0
dXJlcz4gZXdrV2luZG93RmVhdHVyZXMgPSBFd2tXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKHdpbmRv
d0ZlYXR1cmVzLCB0aGlzKTsKIAotICAgIFdLVHlwZVJlZiByZWYgPSBXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KHdpbmRvd0ZlYXR1cmVzLCB3aWR0aFN0ci5nZXQoKSk7Ci0gICAgdW5zaWduZWQg
d2lkdGggPSByZWYgPyBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihy
ZWYpKSA6IDA7Ci0gICAgcmVmID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3aW5kb3dGZWF0
dXJlcywgaGVpZ2h0U3RyLmdldCgpKTsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSByZWYgPyBXS0Rv
dWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7Ci0KLSAgICBp
ZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGVfbmV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGlmICghKG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlX25ldyhzZCwgd2lkdGgs
IGhlaWdodCkpKQorICAgIEV2YXNfT2JqZWN0KiBuZXdFd2tWaWV3ID0gc2QtPmFwaS0+d2luZG93
X2NyZWF0ZShzZCwgZXdrV2luZG93RmVhdHVyZXMuZ2V0KCkpOworICAgIGlmICghbmV3RXdrVmll
dykKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBFd2tWaWV3SW1wbCogbmV3Vmlld0ltcGwgPSBF
d2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobmV3RXdrVmlldyk7CiAgICAgQVNTRVJUKG5ld1Zp
ZXdJbXBsKTsKIAorICAgIG5ld1ZpZXdJbXBsLT5tX3dpbmRvd0ZlYXR1cmVzID0gZXdrV2luZG93
RmVhdHVyZXM7CisKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS1JldGFpbihu
ZXdWaWV3SW1wbC0+cGFnZSgpKSk7CiB9CiAKIHZvaWQgRXdrVmlld0ltcGw6OmNsb3NlUGFnZSgp
CiB7Ci0gICAgc21hcnRDYWxsYmFjazxDbG9zZVdpbmRvdz4oKS5jYWxsKCk7CisgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CisK
KyAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jbG9zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2QtPmFwaS0+d2luZG93X2Nsb3NlKHNkKTsKIH0KIAogdm9pZCBFd2tWaWV3SW1wbDo6b25Nb3Vz
ZURvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgKaW5kZXgg
NzBhNjYyMTIyMjA4YmM3ZjQ4NGY5ZTg5YjUzMDgwZGVlMDE5YWM0Mi4uMTlhN2JkOWIxMjdjYTJm
OGM4NGU3ZWI3YjYyMjZhMjcyM2EwN2U2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIEV3a1Zp
ZXdJbXBsX2gKIAogI2luY2x1ZGUgIkV3a1ZpZXdDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJbW11
dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiUmVmUHRyRWZsLmgiCiAjaW5jbHVkZSAiV0tF
aW5hU2hhcmVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgpAQCAtNzYsNiArNzcs
NyBAQCBjbGFzcyBFd2tfQmFja19Gb3J3YXJkX0xpc3Q7CiBjbGFzcyBFd2tfQ29sb3JfUGlja2Vy
OwogY2xhc3MgRXdrX1BvcHVwX01lbnU7CiBjbGFzcyBFd2tfU2V0dGluZ3M7CitjbGFzcyBFd2tX
aW5kb3dGZWF0dXJlczsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHR5cGVk
ZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQgRXZhc19HTF9Db250ZXh0OwpAQCAtMTAyLDYgKzEw
NCw3IEBAIHB1YmxpYzoKICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0LmdldCgpOyB9CiAgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1f
c2V0dGluZ3MuZ2V0KCk7IH0KICAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGJhY2tGb3J3YXJk
TGlzdCgpIHsgcmV0dXJuIG1fYmFja0ZvcndhcmRMaXN0LmdldCgpOyB9CisgICAgRXdrV2luZG93
RmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzKCkgeyByZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQo
KTsgfQogCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpc0Zv
Y3VzZWQoKSBjb25zdDsKQEAgLTE1Niw3ICsxNTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNt
aXNzQ29sb3JQaWNrZXIoKTsKICNlbmRpZgogCi0gICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2Uo
V0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzKTsKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3
UGFnZShXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzKTsKICAgICB2
b2lkIGNsb3NlUGFnZSgpOwogCiAgICAgdm9pZCByZXF1ZXN0UG9wdXBNZW51KFdlYktpdDo6V2Vi
UG9wdXBNZW51UHJveHlFZmwqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4
dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYktpdDo6
V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7CkBAIC0yNDMsNiAr
MjQ2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9u
OwogI2VuZGlmCiAgICAgT3duUHRyPEV3a19TZXR0aW5ncz4gbV9zZXR0aW5nczsKKyAgICBSZWZQ
dHI8RXdrV2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7CiAgICAgY29uc3Qgdm9pZCog
bV9jdXJzb3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0
LgogICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7CiAgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIG1fdXJsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmgKaW5kZXggOGEzOTQ2ZWY5YjU3MjVjMDk0ZTVhN2EwYzhkZWQzOGQ3MTJiMWFjOS4uZjkzOTBj
NWNhYjI5YjdjYjc4M2FiOTY3NGJmZDAyNmJiNGNkYTA4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAi
ZXdrX3RvdWNoLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdr
X3VybF9yZXNwb25zZS5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKICNpbmNs
dWRlIDxFdmFzLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMTUwLDE0ICsxNTEsMTcgQEAg
c3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIHsKIAogICAgIC8vIG5ldyB3aW5kb3c6CiAgICAg
Ly8gICAtIENyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBzcGVjaWZpZWQgc2l6ZQotICAgIEV2YXNf
T2JqZWN0KiAoKndpbmRvd19jcmVhdGVfbmV3KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRXZh
c19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpOworICAgIC8vIHdpbmRvdyBoYW5kbGlu
ZzoKKyAgICAvLyAgIC0gY3JlYXRlIGFuZCBjbG9zZSB3aW5kb3cuCisgICAgRXZhc19PYmplY3Qg
Kigqd2luZG93X2NyZWF0ZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisgICAgdm9pZCAoKndpbmRvd19jbG9zZSko
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOwogfTsKIAogLyoqCiAgKiBUaGUgdmVyc2lvbiB5b3Ug
aGF2ZSB0byBwdXQgaW50byB0aGUgdmVyc2lvbiBmaWVsZAogICogaW4gdGhlIEBhIEV3a19WaWV3
X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFT
U19WRVJTSU9OIDdVTAorI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDhVTAog
CiAvKioKICAqIEluaXRpYWxpemVyIGZvciB3aG9sZSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1
Y3R1cmUuCkBAIC0xNjksNyArMTczLDcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIHsK
ICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9WRVJTSU9OCiAgKiBAc2VlIEVXS19W
SUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OCiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdf
U01BUlRfQ0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdL
X1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KKyNkZWZpbmUgRVdLX1ZJRVdfU01BUlRf
Q0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdf
U01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KIAogLyoqCiAgKiBJbml0aWFsaXplciB0byB6
ZXJvIGEgd2hvbGUgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hMzQ5NjllZGE3NWQzY2VmOTVlZjc5ZTJiYjRlYTk4ZjA3YTJlYjI4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dp
bmRvd19mZWF0dXJlcy5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIK
KworI2luY2x1ZGUgIldlYk51bWJlci5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNf
cHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
KworRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVzKEltbXV0YWJsZURpY3Rpb25h
cnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAgOiBtX3ZpZXdJ
bXBsKHZpZXdJbXBsKQoreworICAgIGlmICh3aW5kb3dGZWF0dXJlcykgeworICAgICAgICBXZWJC
b29sZWFuKiBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJCb29sZWFuKj4od2luZG93RmVh
dHVyZXMtPmdldCgidG9vbEJhclZpc2libGUiKSk7CisgICAgICAgIGlmIChib29sZWFuVmFsdWUp
CisgICAgICAgICAgICBtX3Rvb2xiYXJWaXNpYmxlID0gYm9vbGVhblZhbHVlLT52YWx1ZSgpOwor
CisgICAgICAgIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PFdlYkJvb2xlYW4qPih3aW5kb3dG
ZWF0dXJlcy0+Z2V0KCJzdGF0dXNCYXJWaXNpYmxlIikpOworICAgICAgICBpZiAoYm9vbGVhblZh
bHVlKQorICAgICAgICAgICAgbV9zdGF0dXNiYXJWaXNpYmxlID0gYm9vbGVhblZhbHVlLT52YWx1
ZSgpOworCisgICAgICAgIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PFdlYkJvb2xlYW4qPih3
aW5kb3dGZWF0dXJlcy0+Z2V0KCJzY3JvbGxiYXJzVmlzaWJsZSIpKTsKKyAgICAgICAgaWYgKGJv
b2xlYW5WYWx1ZSkKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyc1Zpc2libGUgPSBib29sZWFuVmFs
dWUtPnZhbHVlKCk7CisKKyAgICAgICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViQm9v
bGVhbio+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoIm1lbnVCYXJWaXNpYmxlIikpOworICAgICAgICBp
ZiAoYm9vbGVhblZhbHVlKQorICAgICAgICAgICAgbV9tZW51YmFyVmlzaWJsZSA9IGJvb2xlYW5W
YWx1ZS0+dmFsdWUoKTsKKworICAgICAgICBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJC
b29sZWFuKj4od2luZG93RmVhdHVyZXMtPmdldCgibG9jYXRpb25CYXJWaXNpYmxlIikpOworICAg
ICAgICBpZiAoYm9vbGVhblZhbHVlKQorICAgICAgICAgICAgbV9sb2NhdGlvbmJhclZpc2libGUg
PSBib29sZWFuVmFsdWUtPnZhbHVlKCk7CisKKyAgICAgICAgYm9vbGVhblZhbHVlID0gc3RhdGlj
X2Nhc3Q8V2ViQm9vbGVhbio+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoInJlc2l6YWJsZSIpKTsKKyAg
ICAgICAgaWYgKGJvb2xlYW5WYWx1ZSkKKyAgICAgICAgICAgIG1fcmVzaXphYmxlID0gYm9vbGVh
blZhbHVlLT52YWx1ZSgpOworCisgICAgICAgIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PFdl
YkJvb2xlYW4qPih3aW5kb3dGZWF0dXJlcy0+Z2V0KCJmdWxsc2NyZWVuIikpOworICAgICAgICBp
ZiAoYm9vbGVhblZhbHVlKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuID0gYm9vbGVhblZhbHVl
LT52YWx1ZSgpOworCisgICAgICAgIFdlYkRvdWJsZSogZG91YmxlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxXZWJEb3VibGUqPih3aW5kb3dGZWF0dXJlcy0+Z2V0KCJ4IikpOworICAgICAgICBpZiAoZG91
YmxlVmFsdWUpCisgICAgICAgICAgICBtX2dlb21ldHJ5LnNldFgoZG91YmxlVmFsdWUtPnZhbHVl
KCkpOworCisgICAgICAgIGRvdWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViRG91YmxlKj4od2lu
ZG93RmVhdHVyZXMtPmdldCgieSIpKTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlKQorICAgICAg
ICAgICAgbV9nZW9tZXRyeS5zZXRZKGRvdWJsZVZhbHVlLT52YWx1ZSgpKTsKKworICAgICAgICBk
b3VibGVWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYkRvdWJsZSo+KHdpbmRvd0ZlYXR1cmVzLT5nZXQo
IndpZHRoIikpOworICAgICAgICBpZiAoZG91YmxlVmFsdWUpCisgICAgICAgICAgICBtX2dlb21l
dHJ5LnNldFdpZHRoKGRvdWJsZVZhbHVlLT52YWx1ZSgpKTsKKworICAgICAgICBkb3VibGVWYWx1
ZSA9IHN0YXRpY19jYXN0PFdlYkRvdWJsZSo+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoImhlaWdodCIp
KTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlKQorICAgICAgICAgICAgbV9nZW9tZXRyeS5zZXRI
ZWlnaHQoZG91YmxlVmFsdWUtPnZhbHVlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdlYkNv
cmU6OldpbmRvd0ZlYXR1cmVzKiBjb3JlRmVhdHVyZXMgPSBuZXcgV2ViQ29yZTo6V2luZG93RmVh
dHVyZXMoKTsKKworICAgICAgICBtX3Rvb2xiYXJWaXNpYmxlID0gY29yZUZlYXR1cmVzLT50b29s
QmFyVmlzaWJsZTsKKyAgICAgICAgbV9zdGF0dXNiYXJWaXNpYmxlID0gY29yZUZlYXR1cmVzLT5z
dGF0dXNCYXJWaXNpYmxlOworICAgICAgICBtX3Njcm9sbGJhcnNWaXNpYmxlID0gY29yZUZlYXR1
cmVzLT5zY3JvbGxiYXJzVmlzaWJsZTsKKyAgICAgICAgbV9tZW51YmFyVmlzaWJsZSA9IGNvcmVG
ZWF0dXJlcy0+bWVudUJhclZpc2libGU7CisgICAgICAgIG1fbG9jYXRpb25iYXJWaXNpYmxlID0g
Y29yZUZlYXR1cmVzLT5sb2NhdGlvbkJhclZpc2libGU7CisgICAgICAgIG1fcmVzaXphYmxlID0g
Y29yZUZlYXR1cmVzLT5yZXNpemFibGU7CisgICAgICAgIG1fZnVsbHNjcmVlbiA9IGNvcmVGZWF0
dXJlcy0+ZnVsbHNjcmVlbjsKKworICAgICAgICBtX2dlb21ldHJ5LnNldFgoY29yZUZlYXR1cmVz
LT54KTsKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRZKGNvcmVGZWF0dXJlcy0+eSk7CisgICAgICAg
IG1fZ2VvbWV0cnkuc2V0V2lkdGgoY29yZUZlYXR1cmVzLT53aWR0aCk7CisgICAgICAgIG1fZ2Vv
bWV0cnkuc2V0SGVpZ2h0KGNvcmVGZWF0dXJlcy0+aGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQg
ZXdrX3dpbmRvd19mZWF0dXJlc19ib29sX3Byb3BlcnR5X2dldChjb25zdCBFd2tfV2luZG93X0Zl
YXR1cmVzKiB3aW5kb3dGZWF0dXJlcywgRWluYV9Cb29sKiB0b29sYmFyVmlzaWJsZSwgRWluYV9C
b29sKiBzdGF0dXNiYXJWaXNpYmxlLCBFaW5hX0Jvb2wqIHNjcm9sbGJhcnNWaXNpYmxlLCBFaW5h
X0Jvb2wqIG1lbnViYXJWaXNpYmxlLCBFaW5hX0Jvb2wgKmxvY2F0aW9uYmFyVmlzaWJsZSwgRWlu
YV9Cb29sICpyZXNpemFibGUsIEVpbmFfQm9vbCAqZnVsbHNjcmVlbikKK3sKKyAgICBFV0tfT0JK
X0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2luZG93RmVhdHVy
ZXMsIGltcGwpOworCisgICAgaWYgKHRvb2xiYXJWaXNpYmxlKQorICAgICAgICAqdG9vbGJhclZp
c2libGUgPSBpbXBsLT50b29sYmFyVmlzaWJsZSgpOworCisgICAgaWYgKHN0YXR1c2JhclZpc2li
bGUpCisgICAgICAgICpzdGF0dXNiYXJWaXNpYmxlID0gaW1wbC0+c3RhdHVzYmFyVmlzaWJsZSgp
OworCisgICAgaWYgKHNjcm9sbGJhcnNWaXNpYmxlKQorICAgICAgICAqc2Nyb2xsYmFyc1Zpc2li
bGUgPSBpbXBsLT5zY3JvbGxiYXJzVmlzaWJsZSgpOworCisgICAgaWYgKG1lbnViYXJWaXNpYmxl
KQorICAgICAgICAqbWVudWJhclZpc2libGUgPSBpbXBsLT5tZW51YmFyVmlzaWJsZSgpOworCisg
ICAgaWYgKGxvY2F0aW9uYmFyVmlzaWJsZSkKKyAgICAgICAgKmxvY2F0aW9uYmFyVmlzaWJsZSA9
IGltcGwtPmxvY2F0aW9uYmFyVmlzaWJsZSgpOworCisgICAgaWYgKHJlc2l6YWJsZSkKKyAgICAg
ICAgKnJlc2l6YWJsZSA9IGltcGwtPnJlc2l6YWJsZSgpOworCisgICAgaWYgKGZ1bGxzY3JlZW4p
CisgICAgICAgICpmdWxsc2NyZWVuID0gaW1wbC0+ZnVsbHNjcmVlbigpOworfQorCit2b2lkIGV3
a193aW5kb3dfZmVhdHVyZXNfaW50X3Byb3BlcnR5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1
cmVzKiB3aW5kb3dGZWF0dXJlcywgaW50KiB4LCBpbnQqIHksIGludCogd2lkdGgsIGludCogaGVp
Z2h0KQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0Zl
YXR1cmVzLCB3aW5kb3dGZWF0dXJlcywgaW1wbCk7CisKKyAgICBpZiAoaW1wbC0+Z2VvbWV0cnko
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh4KQorICAgICAgICAqeCA9
IHN0YXRpY19jYXN0PGludD4oaW1wbC0+Z2VvbWV0cnkoKS54KCkpOworCisgICAgaWYgKHkpCisg
ICAgICAgICp5ID0gc3RhdGljX2Nhc3Q8aW50PihpbXBsLT5nZW9tZXRyeSgpLnkoKSk7CisKKyAg
ICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHN0YXRpY19jYXN0PGludD4oaW1wbC0+Z2Vv
bWV0cnkoKS53aWR0aCgpKTsKKworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KGltcGwtPmdlb21ldHJ5KCkuaGVpZ2h0KCkpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVhODI5MTM3M2NiOGJiNzBiYTA4NWVjZDc3ZWE2ZmJmYzZmYjgxMDgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2lu
ZG93X2ZlYXR1cmVzLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
KioKKyAqIEBmaWxlICAgIGV3a193aW5kb3dfZmVhdHVyZXMuaAorICogQGJyaWVmICAgQWNjZXNz
IHRvIHRoZSBmZWF0dXJlcyBvZiB3aW5kb3cuCisgKi8KKworI2lmbmRlZiBld2tfd2luZG93X2Zl
YXR1cmVzX2gKKyNkZWZpbmUgZXdrX3dpbmRvd19mZWF0dXJlc19oCisKKyNpbmNsdWRlIDxFaW5h
Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisg
KiBEZWNsYXJlIEV3a19XaW5kb3dfRmVhdHVyZXMgYXMgRXdrX09iamVjdC4KKyAqCisgKiBAc2Vl
IEV3a19PYmplY3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRXdrX09iamVjdCBFd2tfV2luZG93X0Zl
YXR1cmVzOworCisvKioKKyAqIEdldHMgYm9vbGVhbiBwcm9wZXJ0aWVzIG9mIGFuIEV3a19XaW5k
b3dfRmVhdHVyZXMuCisgKgorICogUHJvcGVydGllcyBhcmUgcmV0dXJuZWQgaW4gdGhlIHJlc3Bl
Y3RpdmUgcG9pbnRlcnMuIFBhc3NpbmcgQGMgTlVMTCB0byBhbnkgb2YKKyAqIHRoZXNlIHBvaW50
ZXJzIHdpbGwgY2F1c2UgdGhhdCBwcm9wZXJ0eSB0byBub3QgYmUgcmV0dXJuZWQuCisgKgorICog
QHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBib29sZWFuIHByb3BlcnRp
ZXMKKyAqIEBwYXJhbSB0b29sYmFyX3Zpc2libGUgdGhlIHBvaW50ZXIgdG8gc3RvcmUgaWYgdG9v
bGJhciBpcyB2aXNpYmxlCisgKiBAcGFyYW0gc3RhdHVzYmFyX3Zpc2libGUgdGhlIHBvaW50ZXIg
dG8gc3RvcmUgaWYgc3RhdHVzYmFyIGlzIHZpc2libGUKKyAqIEBwYXJhbSBzY3JvbGxiYXJzX3Zp
c2libGUgdGhlIHBvaW50ZXIgdG8gc3RvcmUgaWYgc2Nyb2xsYmFycyBpcyB2aXNpYmxlCisgKiBA
cGFyYW0gbWVudWJhcl92aXNpYmxlIHRoZSBwb2ludGVyIHRvIHN0b3JlIGlmIG1lbnViYXIgaXMg
dmlzaWJsZQorICogQHBhcmFtIGxvY2F0aW9uYmFyX3Zpc2libGUgdGhlIHBvaW50ZXIgdG8gc3Rv
cmUgaWYgbG9jYXRpb25iYXIgaXMgdmlzaWJsZQorICogQHBhcmFtIHJlc2l6YWJsZSB0aGUgcG9p
bnRlciB0byBzdG9yZSBpZiByZXNpemFibGUgaXMgZW5hYmxlZAorICogQHBhcmFtIGZ1bGxzY3Jl
ZW4gdGhlIHBvaW50ZXIgdG8gc3RvcmUgaWYgZnVsbHNjcmVlbiBpcyBlbmFibGVkCisgKgorICog
QHNlZSBld2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQKKyAqLworRUFQSSB2b2lk
IGV3a193aW5kb3dfZmVhdHVyZXNfYm9vbF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19G
ZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzLCBFaW5hX0Jvb2wgKnRvb2xiYXJfdmlzaWJsZSwgRWlu
YV9Cb29sICpzdGF0dXNiYXJfdmlzaWJsZSwgRWluYV9Cb29sICpzY3JvbGxiYXJzX3Zpc2libGUs
IEVpbmFfQm9vbCAqbWVudWJhcl92aXNpYmxlLCBFaW5hX0Jvb2wgKmxvY2F0aW9uYmFyX3Zpc2li
bGUsIEVpbmFfQm9vbCAqcmVzaXphYmxlLCBFaW5hX0Jvb2wgKmZ1bGxzY3JlZW4pOworCisvKioK
KyAqIEdldHMgaW50IHByb3BlcnRpZXMgb2YgYW4gRXdrX1dpbmRvd19GZWF0dXJlcy4KKyAqCisg
KiBQcm9wZXJ0aWVzIGFyZSByZXR1cm5lZCBpbiB0aGUgcmVzcGVjdGl2ZSBwb2ludGVycy4gUGFz
c2luZyBAYyBOVUxMIHRvIGFueSBvZgorICogdGhlc2UgcG9pbnRlcnMgd2lsbCBjYXVzZSB0aGF0
IHByb3BlcnR5IHRvIG5vdCBiZSByZXR1cm5lZC4KKyAqCisgKiBNYWtlIHN1cmUgdG8gY2hlY2sg
aWYgdGhlIHZhbHVlIHJldHVybmVkIGlzIGxlc3MgdGhhbiAwIGJlZm9yZSB1c2luZyBpdCwgc2lu
Y2UgaW4KKyAqIHRoYXQgY2FzZSBpdCBtZWFucyB0aGF0IHByb3BlcnR5IHdhcyBub3Qgc2V0IGlu
IHdpbmRvd19mZWF0dXJlcyBvYmplY3QuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0
aGUgd2luZG93J3MgZmVhdHVyZXMKKyAqIEBwYXJhbSB4IHRoZSBwb2ludGVyIHRvIHN0b3JlIHgg
cG9zaXRpb24KKyAqIEBwYXJhbSB5IHRoZSBwb2ludGVyIHRvIHN0b3JlIHkgcG9zaXRpb24KKyAq
IEBwYXJhbSB3IHRoZSBwb2ludGVyIHRvIHN0b3JlIHdpZHRoCisgKiBAcGFyYW0gaCB0aGUgcG9p
bnRlciB0byBzdG9yZSBoZWlnaHQKKyAqCisgKiBAc2VlIGV3a193aW5kb3dfZmVhdHVyZXNfYm9v
bF9wcm9wZXJ0eV9nZXQKKyAqLworRUFQSSB2b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfaW50X3By
b3BlcnR5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMsIGlu
dCAqeCwgaW50ICp5LCBpbnQgKncsIGludCAqaCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQor
I2VuZGlmCisKKyNlbmRpZiAvLyBld2tfd2luZG93X2ZlYXR1cmVzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJl
c19wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUzOGRjNzExYzBkYzYwNDcwMzkwNGRlNDMzNjNkN2Iz
ZGM2YjdiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9o
CisjZGVmaW5lIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJJbW11
dGFibGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJld2tfb2JqZWN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgRXdrVmlld0ltcGw7CisKK2NsYXNzIEV3
a1dpbmRvd0ZlYXR1cmVzIDogcHVibGljIEV3a19PYmplY3QgeworcHVibGljOgorICAgIEVXS19P
QkpFQ1RfREVDTEFSRShFd2tXaW5kb3dGZWF0dXJlcykKKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEV3a1dpbmRvd0ZlYXR1cmVzPiBjcmVhdGUoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVh
dHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRXdrV2luZG93RmVhdHVyZXMod2luZG93RmVhdHVyZXMsIHZpZXdJbXBsKSk7Cisg
ICAgfQorCisgICAgRmxvYXRSZWN0IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRy
eTsgfQorICAgIHZvaWQgc2V0R2VvbWV0cnkoRmxvYXRSZWN0JiBnZW9tZXRyeSkgeyBtX2dlb21l
dHJ5ID0gZ2VvbWV0cnk7IH0KKworICAgIGJvb2wgdG9vbGJhclZpc2libGUoKSBjb25zdCB7IHJl
dHVybiBtX3Rvb2xiYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRUb29sYmFyVmlzaWJsZShib29s
IHRvb2xiYXJWaXNpYmxlKSB7IG1fdG9vbGJhclZpc2libGUgPSB0b29sYmFyVmlzaWJsZTsgfQor
ICAgIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzYmFyVmlz
aWJsZTsgfQorICAgIHZvaWQgc2V0U3RhdHVzYmFyVmlzaWJsZShib29sIHN0YXR1c2JhclZpc2li
bGUpIHsgbV9zdGF0dXNiYXJWaXNpYmxlID0gc3RhdHVzYmFyVmlzaWJsZTsgfQorCisgICAgYm9v
bCBzY3JvbGxiYXJzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFyc1Zpc2libGU7
IH0KKyAgICB2b2lkIHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUp
IHsgbV9zY3JvbGxiYXJzVmlzaWJsZSA9IHNjcm9sbGJhcnNWaXNpYmxlOyB9CisKKyAgICBib29s
IG1lbnViYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9tZW51YmFyVmlzaWJsZTsgfQorICAg
IHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCBtZW51YmFyVmlzaWJsZSkgeyBtX21lbnViYXJW
aXNpYmxlID0gbWVudWJhclZpc2libGU7IH0KKworICAgIGJvb2wgbG9jYXRpb25iYXJWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbmJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldExv
Y2F0aW9uYmFyVmlzaWJsZShib29sIGxvY2F0aW9uYmFyVmlzaWJsZSkgeyBtX2xvY2F0aW9uYmFy
VmlzaWJsZSA9IGxvY2F0aW9uYmFyVmlzaWJsZTsgfQorCisgICAgYm9vbCByZXNpemFibGUoKSBj
b25zdCB7IHJldHVybiBtX3Jlc2l6YWJsZTsgfQorICAgIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wg
cmVzaXphYmxlKSB7IG1fcmVzaXphYmxlID0gcmVzaXphYmxlOyB9CisKKyAgICBib29sIGZ1bGxz
Y3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW47IH0KKyAgICB2b2lkIHNldEZ1bGxz
Y3JlZW4oYm9vbCBmdWxsc2NyZWVuKSB7IG1fZnVsbHNjcmVlbiA9IGZ1bGxzY3JlZW47IH0KKwor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBFd2tXaW5kb3dGZWF0dXJlcyhJbW11dGFibGVEaWN0aW9u
YXJ5KiB3aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJbXBsKTsKKworICAgIEV3a1Zp
ZXdJbXBsKiBtX3ZpZXdJbXBsOworCisgICAgRmxvYXRSZWN0IG1fZ2VvbWV0cnk7CisgICAgYm9v
bCBtX3Rvb2xiYXJWaXNpYmxlOworICAgIGJvb2wgbV9zdGF0dXNiYXJWaXNpYmxlOworICAgIGJv
b2wgbV9zY3JvbGxiYXJzVmlzaWJsZTsKKyAgICBib29sIG1fbWVudWJhclZpc2libGU7CisgICAg
Ym9vbCBtX2xvY2F0aW9uYmFyVmlzaWJsZTsKKyAgICBib29sIG1fcmVzaXphYmxlOworICAgIGJv
b2wgbV9mdWxsc2NyZWVuOworfTsKKworI2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVyZXNfcHJp
dmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy90ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE0MTk5MjYyMDYwNmM0NGQ3YzNhNGExNzYxZTdjZWIwYjc2YTI1ZDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfd2lu
ZG93X2ZlYXR1cmVzLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRU
ZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1
c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K3N0cnVjdCBXaW5kb3dfRmVhdHVyZXMgeworCisgICAgRWluYV9Cb29sIHRvb2xiYXJWaXNpYmxl
OworICAgIEVpbmFfQm9vbCBzdGF0dXNiYXJWaXNpYmxlOworICAgIEVpbmFfQm9vbCBzY3JvbGxi
YXJzVmlzaWJsZTsKKyAgICBFaW5hX0Jvb2wgbWVudWJhclZpc2libGU7CisgICAgRWluYV9Cb29s
IGxvY2F0aW9uYmFyVmlzaWJsZTsKKyAgICBFaW5hX0Jvb2wgcmVzaXphYmxlOworICAgIEVpbmFf
Qm9vbCBmdWxsc2NyZWVuOworCisgICAgV2luZG93X0ZlYXR1cmVzKCkKKyAgICAgICAgOiB0b29s
YmFyVmlzaWJsZShmYWxzZSkKKyAgICAgICAgLCBzdGF0dXNiYXJWaXNpYmxlKGZhbHNlKQorICAg
ICAgICAsIHNjcm9sbGJhcnNWaXNpYmxlKGZhbHNlKQorICAgICAgICAsIG1lbnViYXJWaXNpYmxl
KGZhbHNlKQorICAgICAgICAsIGxvY2F0aW9uYmFyVmlzaWJsZShmYWxzZSkKKyAgICAgICAgLCBy
ZXNpemFibGUoZmFsc2UpCisgICAgICAgICwgZnVsbHNjcmVlbihmYWxzZSkKKyAgICB7IH0KK307
CisKK3N0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlV2luZG93KEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNtYXJ0RGF0YSwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93RmVhdHVyZXMpCit7
CisgICAgV2luZG93X0ZlYXR1cmVzIGZlYXR1cmVzOworCisgICAgZXdrX3dpbmRvd19mZWF0dXJl
c19ib29sX3Byb3BlcnR5X2dldCh3aW5kb3dGZWF0dXJlcywgJmZlYXR1cmVzLnRvb2xiYXJWaXNp
YmxlLCAmZmVhdHVyZXMuc3RhdHVzYmFyVmlzaWJsZSwgJmZlYXR1cmVzLnNjcm9sbGJhcnNWaXNp
YmxlLCAmZmVhdHVyZXMubWVudWJhclZpc2libGUsICZmZWF0dXJlcy5sb2NhdGlvbmJhclZpc2li
bGUsICZmZWF0dXJlcy5yZXNpemFibGUsICZmZWF0dXJlcy5mdWxsc2NyZWVuKTsKKworICAgIEVY
UEVDVF9UUlVFKGZlYXR1cmVzLnRvb2xiYXJWaXNpYmxlKTsKKyAgICBFWFBFQ1RfVFJVRShmZWF0
dXJlcy5zdGF0dXNiYXJWaXNpYmxlKTsKKyAgICBFWFBFQ1RfVFJVRShmZWF0dXJlcy5zY3JvbGxi
YXJzVmlzaWJsZSk7CisgICAgRVhQRUNUX0ZBTFNFKGZlYXR1cmVzLm1lbnViYXJWaXNpYmxlKTsK
KyAgICBFWFBFQ1RfRkFMU0UoZmVhdHVyZXMubG9jYXRpb25iYXJWaXNpYmxlKTsKKyAgICBFWFBF
Q1RfVFJVRShmZWF0dXJlcy5yZXNpemFibGUpOworICAgIEVYUEVDVF9GQUxTRShmZWF0dXJlcy5m
dWxsc2NyZWVuKTsKKworICAgIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworCisgICAgZXdrX3dp
bmRvd19mZWF0dXJlc19pbnRfcHJvcGVydHlfZ2V0KHdpbmRvd0ZlYXR1cmVzLCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCk7CisKKyAgICBFWFBFQ1RfRVEoMTAwLCB4KTsKKyAgICBFWFBFQ1RfRVEo
MTUwLCB5KTsKKyAgICBFWFBFQ1RfRVEoNDAwLCB3aWR0aCk7CisgICAgRVhQRUNUX0VRKDQwMCwg
aGVpZ2h0KTsKKworICAgIHJldHVybiAwOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX3dpbmRvd19mZWF0dXJlc19ib29sX3Byb3BlcnR5X2dldCkKK3sKKyAgICBFdmFzX09iamVj
dCogdmlldyA9IHdlYlZpZXcoKTsKKworICAgIGNvbnN0IGNoYXIqIHdpbmRvd0hUTUwgPSAiPGh0
bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oJycsICcnLCAnbGVmdD0xMDAsdG9wPTE1MCx3
aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2NhdGlvbj1ubyxtZW51YmFyPW5vLHN0YXR1cz15ZXMsdG9v
bGJhcj15ZXMsc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyxmdWxsc2NyZWVuPW5vJyk7XCI+
PC9ib2R5PjwvaHRtbD4iOworCisgICAgZXdrVmlld0NsYXNzKCktPndpbmRvd19jcmVhdGUgPSBj
cmVhdGVXaW5kb3c7CisKKyAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIHdpbmRv
d0hUTUwsIDAsIDApOworICAgIEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNw
cAppbmRleCAyYjc1MDcxMGY5ZGU0YTdjZTRmODllZDA3NjlmNmU1NzQ1MTg4NTU5Li4wYjQxZDIz
YjRmOGVjODZlNWY1MTNjYWY1NjA4ZDVkNjY5ZTk4NzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiV0tFdmVudC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiZXdr
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2Zl
YXR1cmVzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db2xvci5oPgogCkBAIC00OSw5ICs1MCw5IEBAIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpj
bG9zZVBhZ2UoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogICAgIHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jbG9zZVBhZ2UoKTsKIH0KIAotV0tQ
YWdlUmVmIFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVx
dWVzdFJlZiwgV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJz
LCBXS0V2ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitXS1BhZ2VSZWYg
UGFnZVVJQ2xpZW50RWZsOjpjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVm
LCBXS0RpY3Rpb25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tF
dmVudE1vdXNlQnV0dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJldHVybiB0
b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+Y3JlYXRlTmV3UGFnZSh3
aW5kb3dGZWF0dXJlcyk7CisgICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQYWdlKHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7CiB9
CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBX
S1N0cmluZ1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CkBAIC03MCw2ICs3MSw3MCBAQCBXS1N0cmluZ1JlZiBQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFT
Y3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLAogICAgIHJldHVybiB2
YWx1ZSA/IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAKK2Jv
b2wgUGFnZVVJQ2xpZW50RWZsOjp0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIGJvb2wgdG9vbGJhclZpc2li
bGUgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+dG9vbGJhclZpc2libGUoKTsKKworICAg
IHJldHVybiB0b29sYmFyVmlzaWJsZTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFRv
b2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgdG9vbGJhclZpc2libGUsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlVUlD
bGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7CisKKyAgICB2aWV3SW1wbC0+d2luZG93
RmVhdHVyZXMoKS0+c2V0VG9vbGJhclZpc2libGUodG9vbGJhclZpc2libGUpOworICAgIHZpZXdJ
bXBsLT5zbWFydENhbGxiYWNrPFRvb2xiYXJWaXNpYmxlPigpLmNhbGwoJnRvb2xiYXJWaXNpYmxl
KTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRFZmw6Om1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9
IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIGJvb2wgbWVu
dWJhclZpc2libGUgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+bWVudWJhclZpc2libGUo
KTsKKworICAgIHJldHVybiBtZW51YmFyVmlzaWJsZTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRF
Zmw6OnNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIG1lbnViYXJWaXNpYmxlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRv
UGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworCisgICAgdmlld0ltcGwt
PndpbmRvd0ZlYXR1cmVzKCktPnNldE1lbnViYXJWaXNpYmxlKG1lbnViYXJWaXNpYmxlKTsKKyAg
ICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxNZW51YmFyVmlzaWJsZT4oKS5jYWxsKCZtZW51YmFy
VmlzaWJsZSk7Cit9CisKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUo
V0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2
aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAg
IGJvb2wgc3RhdHVzYmFyVmlzaWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5zdGF0
dXNiYXJWaXNpYmxlKCk7CisKKyAgICByZXR1cm4gc3RhdHVzYmFyVmlzaWJsZTsKK30KKwordm9p
ZCBQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wg
c3RhdHVzYmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tWaWV3
SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1w
bDsKKworICAgIHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5zZXRNZW51YmFyVmlzaWJsZShz
dGF0dXNiYXJWaXNpYmxlKTsKKyAgICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxNZW51YmFyVmlz
aWJsZT4oKS5jYWxsKCZzdGF0dXNiYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRF
Zmw6OmlzUmVzaXphYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+
bV92aWV3SW1wbDsKKyAgICBib29sIHJlc2l6YWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJl
cygpLT5yZXNpemFibGUoKTsKKworICAgIHJldHVybiByZXNpemFibGU7Cit9CisKK3ZvaWQgUGFn
ZVVJQ2xpZW50RWZsOjpzZXRJc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGJvb2wgcmVzaXphYmxlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRv
UGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworCisgICAgdmlld0ltcGwt
PndpbmRvd0ZlYXR1cmVzKCktPnNldFJlc2l6YWJsZShyZXNpemFibGUpOworICAgIHZpZXdJbXBs
LT5zbWFydENhbGxiYWNrPFdpbmRvd1Jlc2l6YWJsZT4oKS5jYWxsKCZyZXNpemFibGUpOworfQor
CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2hv
d0NvbG9yUGlja2VyKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9y
UGlja2VyUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CiB7CkBAIC0xNDEsNiArMjA2LDE0IEBAIFBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZs
KEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0QWxlcnQg
PSBydW5KYXZhU2NyaXB0QWxlcnQ7CiAgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdENvbmZpcm0g
PSBydW5KYXZhU2NyaXB0Q29uZmlybTsKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0
ID0gcnVuSmF2YVNjcmlwdFByb21wdDsKKyAgICB1aUNsaWVudC50b29sYmFyc0FyZVZpc2libGUg
PSB0b29sYmFyc0FyZVZpc2libGU7CisgICAgdWlDbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxl
ID0gc2V0VG9vbGJhcnNBcmVWaXNpYmxlOworICAgIHVpQ2xpZW50Lm1lbnVCYXJJc1Zpc2libGUg
PSBtZW51QmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnNldE1lbnVCYXJJc1Zpc2libGUgPSBz
ZXRNZW51QmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSA9IHN0
YXR1c0JhcklzVmlzaWJsZTsKKyAgICB1aUNsaWVudC5zZXRTdGF0dXNCYXJJc1Zpc2libGUgPSBz
ZXRTdGF0dXNCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuaXNSZXNpemFibGUgPSBpc1Jlc2l6
YWJsZTsKKyAgICB1aUNsaWVudC5zZXRJc1Jlc2l6YWJsZSA9IHNldElzUmVzaXphYmxlOwogICAg
IHVpQ2xpZW50LnRha2VGb2N1cyA9IHRha2VGb2N1czsKICAgICB1aUNsaWVudC5mb2N1cyA9IGZv
Y3VzOwogICAgIHVpQ2xpZW50LnVuZm9jdXMgPSB1bmZvY3VzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKaW5kZXggMmY1NDE5MmEyYWUwZmI3MDM5
ZTEyYmM5MTRiNjc4YzgzNjdmODE2Yi4uZTY4NDE0YWNmYjc0ODhhM2ViOTdmZmI0OGU3ODRlMDEw
MTA1YWFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlD
bGllbnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVu
dEVmbC5oCkBAIC01MCw2ICs1MCwxNCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJ1bkph
dmFTY3JpcHRBbGVydChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2
b2lkKik7CiAgICAgc3RhdGljIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBX
S1N0cmluZ1JlZiwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBXS1N0cmlu
Z1JlZiBydW5KYXZhU2NyaXB0UHJvbXB0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLU3RyaW5n
UmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIGJvb2wgdG9vbGJhcnNB
cmVWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGlj
IHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgbWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldE1lbnVCYXJJc1Zp
c2libGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0
aWMgYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBi
b29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBpc1Jlc2l6YWJs
ZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNl
dElzUmVzaXphYmxlKFdLUGFnZVJlZiwgYm9vbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAj
aWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgc3RhdGljIHZvaWQgc2hvd0NvbG9yUGlj
a2VyKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9yUGlja2VyUmVz
dWx0TGlzdGVuZXJSZWYsIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCBoaWRlQ29sb3JQ
aWNrZXIoV0tQYWdlUmVmLCBjb25zdCB2b2lkKik7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTFiMjk1ZjhkOWU0OGRjYjM1MmJkZTEyOWY0ZDBj
NGQxYmUxM2MxZC4uZTM0M2Y3ZTMxMDM1OTMwMGQ1NjBiOTFjY2E5NzllZGQyMTgwNzI0MSAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDEyLTExLTE0ICBKaW53b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNv
bT4KKworICAgICAgICBbRUZMXVtXSzJdIEFkZCBVSSBjYWxsYmFja3MgQVBJIHJlbGF0ZWQgdG8g
d2luZG93IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05OTExNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudGVkIHdpbmRvd19jcmVhdGUgYW5kIHdpbmRvd19jbG9zZSBzbWFydGNh
bGxiYWNrIGZ1bmN0aW9ucy4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2VmbC9tYWluLmM6Cisg
ICAgICAgIChvbl93aW5kb3dfY3JlYXRlKToKKyAgICAgICAgKG9uX3dpbmRvd19jbG9zZSk6Cisg
ICAgICAgICh3aW5kb3dfY3JlYXRlKToKKwogMjAxMi0xMS0xNCAgRGFuYSBKYW5zZW5zICA8ZGFu
YWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFdlYlByZWZlcmVuY2VzIHJl
c2V0KCkgc2hvdWxkIHNldCBwZXJUaWxlUGFpbnRpbmcgYW5kIGFjY2VsZXJhdGVkQW5pbWF0aW9u
IHNldHRpbmdzIHRvIGZhbHNlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21h
aW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKaW5kZXggOTJkM2YyZmY5ZjNlNDI2
Y2E1YTg5NzEzMTBhMzg0NTY2YTA0Yzg3ZC4uNmUxYmI3OWVhM2U3MmY4NTc2NWJjMzg3ZTk5ZDk1
MmZkN2IzZWY5MSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYworKysg
Yi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCkBAIC0yODQsMjAgKzI4NCw2IEBAIG9uX2Jh
Y2tfZm9yd2FyZF9saXN0X2NoYW5nZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdr
X3ZpZXcsIHZvaWQgKmV2ZW50CiAgICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5m
b3J3YXJkX2J1dHRvbiwgIWV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoZXdrX3ZpZXcpKTsKIH0K
IAotc3RhdGljIEV2YXNfT2JqZWN0Kgotb25fbmV3X3dpbmRvdyhFd2tfVmlld19TbWFydF9EYXRh
ICpzZCwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCi17Ci0gICAgQnJvd3Nl
cl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19jcmVhdGUoTlVMTCwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgd2luZG93cyA9IGVpbmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKLSAgICByZXR1
cm4gd2luZG93LT5ld2tfdmlldzsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2Nsb3NlX3dpbmRvdyh2
b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykK
LXsKLSAgICB3aW5kb3dfY2xvc2UoKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhKTsKLX0KLQog
c3RhdGljIHZvaWQKIG9uX3Byb2dyZXNzKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3
a192aWV3LCB2b2lkICpldmVudF9pbmZvKQogewpAQCAtMzA3LDYgKzI5MywzOSBAQCBvbl9wcm9n
cmVzcyh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRf
aW5mbykKICAgICB0aXRsZV9zZXQod2luZG93LT5lbG1fd2luZG93LCBld2tfdmlld190aXRsZV9n
ZXQod2luZG93LT5ld2tfdmlldyksIHByb2dyZXNzICogMTAwKTsKIH0KIAorc3RhdGljIEV2YXNf
T2JqZWN0ICoKK29uX3dpbmRvd19jcmVhdGUoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRh
LCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgaW50
IHggPSAwOworICAgIGludCB5ID0gMDsKKyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBoZWln
aHQgPSAwOworCisgICAgZXdrX3dpbmRvd19mZWF0dXJlc19pbnRfcHJvcGVydHlfZ2V0KHdpbmRv
d19mZWF0dXJlcywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgaWYgKCF3aWR0aCkK
KyAgICAgICAgd2lkdGggPSB3aW5kb3dfd2lkdGg7CisKKyAgICBpZiAoIWhlaWdodCkKKyAgICAg
ICAgaGVpZ2h0ID0gd2luZG93X2hlaWdodDsKKworICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cg
PSB3aW5kb3dfY3JlYXRlKE5VTEwsIHdpZHRoLCBoZWlnaHQpOworICAgIEV2YXNfT2JqZWN0ICpu
ZXdfdmlldyA9IHdpbmRvdy0+ZXdrX3ZpZXc7CisKKyAgICB3aW5kb3dzID0gZWluYV9saXN0X2Fw
cGVuZCh3aW5kb3dzLCB3aW5kb3cpOworCisgICAgaW5mbygibWluaWJyb3dzZXI6IGxvY2F0aW9u
KCVkLCVkKSBzaXplPSglZCwlZClcbiIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0
dXJuIG5ld192aWV3OworfQorCitzdGF0aWMgRXZhc19PYmplY3QgKgorb25fd2luZG93X2Nsb3Nl
KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSkKK3sKKyAgICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhzbWFydERhdGEtPnNlbGYpOworICAg
IHdpbmRvd19jbG9zZSh3aW5kb3cpOworfQorCiBzdGF0aWMgdm9pZAogb25fZXJyb3Iodm9pZCAq
dXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7CkBA
IC0xMDMwLDcgKzEwNDksOSBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUo
Y29uc3QgY2hhciAqdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZXdrVmlld0NsYXNz
LT53aW5kb3dfZ2VvbWV0cnlfc2V0ID0gb25fd2luZG93X2dlb21ldHJ5X3NldDsKICAgICBld2tW
aWV3Q2xhc3MtPmZ1bGxzY3JlZW5fZW50ZXIgPSBvbl9mdWxsc2NyZWVuX2VudGVyOwogICAgIGV3
a1ZpZXdDbGFzcy0+ZnVsbHNjcmVlbl9leGl0ID0gb25fZnVsbHNjcmVlbl9leGl0OwotICAgIGV3
a1ZpZXdDbGFzcy0+d2luZG93X2NyZWF0ZV9uZXcgPSBvbl9uZXdfd2luZG93OworICAgIGV3a1Zp
ZXdDbGFzcy0+d2luZG93X2NyZWF0ZSA9IG9uX3dpbmRvd19jcmVhdGU7CisgICAgZXdrVmlld0Ns
YXNzLT53aW5kb3dfY2xvc2UgPSBvbl93aW5kb3dfY2xvc2U7CisKIAogICAgIEV2YXMgKmV2YXMg
PSBldmFzX29iamVjdF9ldmFzX2dldCh3aW5kb3ctPmVsbV93aW5kb3cpOwogICAgIEV2YXNfU21h
cnQgKnNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmV3a1ZpZXdDbGFzcy0+c2MpOwpAQCAt
MTA0Nyw3ICsxMDY4LDYgQEAgc3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5kb3dfY3JlYXRlKGNv
bnN0IGNoYXIgKnVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGV3a19zZXR0aW5nc19w
cmVmZXJyZWRfbWluaW11bV9jb250ZW50c193aWR0aF9zZXQoc2V0dGluZ3MsIDApOwogCiAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJhdXRoZW50
aWNhdGlvbixyZXF1ZXN0Iiwgb25fYXV0aGVudGljYXRpb25fcmVxdWVzdCwgd2luZG93KTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImNsb3Nl
LHdpbmRvdyIsIG9uX2Nsb3NlX3dpbmRvdywgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLGZhaWxlZCIsIG9uX2Rv
d25sb2FkX2ZhaWxlZCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLGZpbmlzaGVkIiwgb25fZG93bmxvYWRfZmlu
aXNoZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRv
dy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxyZXF1ZXN0Iiwgb25fZG93bmxvYWRfcmVxdWVzdCwgd2lu
ZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174328</attachid>
            <date>2012-11-14 19:57:47 -0800</date>
            <delta_ts>2012-11-15 04:40:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121115125542.patch</filename>
            <type>text/plain</type>
            <size>41512</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjRkNWU2YWNkZGZmODgz
ODZkNmQ1OWI0NTUxMjU5NTQxMmY2ODI2OC4uYTZlNmEyOGYxMDI2MTNlOTZlZjc2Y2JkNTk5ZDE4
ZWU1ZTExOGQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTExLTE0ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgdGhlIHdpbmRvdyBmZWF0dXJlcyBp
biB0aGUgYXBwbGljYXRpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdr
Vmlld0NhbGxiYWNrcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwu
Y3BwOgorICAgICAgICAoRXdrVmlld0ltcGw6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAoRXdr
Vmlld0ltcGw6OmNsb3NlUGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
d0ltcGwuaDoKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjp3aW5kb3dGZWF0dXJlcyk6CisgICAgICAg
IChFd2tWaWV3SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcDogQWRk
ZWQuCisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6RXdrV2luZG93RmVhdHVyZXMpOgorICAg
ICAgICAoZXdrX3dpbmRvd19mZWF0dXJlc19ib29sX3Byb3BlcnR5X2dldCk6CisgICAgICAgIChl
d2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmg6IEFkZGVkLgorICAgICAg
ICAoRXdrV2luZG93RmVhdHVyZXMpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OmNyZWF0
ZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6Z2VvbWV0cnkpOgorICAgICAgICAoRXdr
V2luZG93RmVhdHVyZXM6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVz
Ojp0b29sYmFyVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6c2V0VG9vbGJh
clZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnN0YXR1c2JhclZpc2libGUp
OgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldFN0YXR1c2JhclZpc2libGUpOgorICAg
ICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNjcm9sbGJhcnNWaXNpYmxlKToKKyAgICAgICAgKEV3
a1dpbmRvd0ZlYXR1cmVzOjpzZXRTY3JvbGxiYXJzVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5k
b3dGZWF0dXJlczo6bWVudWJhclZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6
OnNldE1lbnViYXJWaXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpsb2NhdGlv
bmJhclZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldExvY2F0aW9uYmFy
VmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6cmVzaXphYmxlKToKKyAgICAg
ICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRSZXNpemFibGUpOgorICAgICAgICAoRXdrV2luZG93
RmVhdHVyZXM6OmZ1bGxzY3JlZW4pOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldEZ1
bGxzY3JlZW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93
aW5kb3dfZmVhdHVyZXMuY3BwOiBBZGRlZCBjb3JyZXNwb25kaW5nIEFQSSB0ZXN0cy4KKyAgICAg
ICAgKFdpbmRvd19GZWF0dXJlcyk6CisgICAgICAgIChXaW5kb3dfRmVhdHVyZXM6OldpbmRvd19G
ZWF0dXJlcyk6CisgICAgICAgIChjcmVhdGVXaW5kb3cpOgorICAgICAgICAoVEVTVF9GKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6dG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvUGFnZVVJQ2xpZW50RWZsLmg6CisgICAgICAgIChQYWdlVUlDbGllbnRFZmwpOgorCiAy
MDEyLTExLTE0ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAg
ICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBSZW1vdmUgdW51c2VkIG1lbWJlcnMgYW5kIG1l
dGhvZHMgaW4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBiYjg3NDdiMWNiMWY1ODM4YzJkZDdjY2RkZjc4MjkxMWVhNjdjMWU1Li42NjA2ODVh
NTlhNjA5ZmMyZTk4NjZiNWY0ZTQ1NmE1OGZkZGRlNWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQpAQCAtNzMsNiArNzMsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAK
IAogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKIApAQCAtMzc2LDYg
KzM3Nyw3IEBAIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX3N0b3Jh
Z2VfbWFuYWdlcgogICAgIHRlc3RfZXdrMl90ZXh0X2NoZWNrZXIKICAgICB0ZXN0X2V3azJfdmll
dworICAgIHRlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMKICkKIAogSUYgKEVOQUJMRV9BUElfVEVT
VFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2Fs
bGJhY2tzLmgKaW5kZXggOTg1MjU5OWEyNzgzYTYxZWE3N2M1N2RlYWY1MjFiMmM1MzU2ZmYzNC4u
NzVjZTVhODFjZTdkYWVjOWEwYzYyMGJhYzJlM2Q0OGRiNDllYTZhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApAQCAtNjks
NiArNjksNyBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgTG9hZEVycm9yLAogICAgIExvYWRG
aW5pc2hlZCwKICAgICBMb2FkUHJvZ3Jlc3MsCisgICAgTWVudWJhclZpc2libGUsCiAgICAgUHJv
dmlzaW9uYWxMb2FkRmFpbGVkLAogICAgIFByb3Zpc2lvbmFsTG9hZFJlZGlyZWN0LAogICAgIFBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCkBAIC03NywxNSArNzgsMTkgQEAgZW51bSBDYWxsYmFja1R5
cGUgewogICAgIFJlc291cmNlTG9hZEZhaWxlZCwKICAgICBSZXNvdXJjZUxvYWRGaW5pc2hlZCwK
ICAgICBSZXNvdXJjZVJlcXVlc3RTZW50LAorICAgIFNjcm9sbGJhcnNWaXNpYmxlLAorICAgIFN0
YXR1c2JhclZpc2libGUsCiAgICAgTmF2aWdhdGlvblBvbGljeURlY2lzaW9uLAogICAgIE5ld1dp
bmRvd1BvbGljeURlY2lzaW9uLAogICAgIFRleHRGb3VuZCwKICAgICBUaXRsZUNoYW5nZSwKKyAg
ICBUb29sYmFyVmlzaWJsZSwKICAgICBUb29sdGlwVGV4dFVuc2V0LAogICAgIFRvb2x0aXBUZXh0
U2V0LAogICAgIFVSTENoYW5nZWQsCiAgICAgVmlicmF0ZSwKICAgICBXZWJQcm9jZXNzQ3Jhc2hl
ZCwKKyAgICBXaW5kb3dSZXNpemFibGUsCiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQogICAgIElu
dGVudFJlcXVlc3QsCiAjZW5kaWYKQEAgLTE3OSw2ICsxODQsNyBAQCBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKExvYWRQcm9ncmVzcywgImxvYWQscHJvZ3Jlc3MiLCBkb3VibGUpOwogREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25hbExvYWRGYWlsZWQsICJsb2FkLHByb3Zpc2lv
bmFsLGZhaWxlZCIsIEV3a19FcnJvcik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFByb3Zp
c2lvbmFsTG9hZFJlZGlyZWN0LCAibG9hZCxwcm92aXNpb25hbCxyZWRpcmVjdCIsIHZvaWQpOwog
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25hbExvYWRTdGFydGVkLCAibG9hZCxw
cm92aXNpb25hbCxzdGFydGVkIiwgdm9pZCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKE1l
bnViYXJWaXNpYmxlLCAibWVudWJhcix2aXNpYmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiwgInBvbGljeSxkZWNpc2lvbixuYXZp
Z2F0aW9uIiwgRXdrX05hdmlnYXRpb25fUG9saWN5X0RlY2lzaW9uKTsKIERFQ0xBUkVfRVdLX1ZJ
RVdfQ0FMTEJBQ0soTmV3V2luZG93UG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVjaXNpb24sbmV3
LHdpbmRvdyIsIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNMQVJFX0VXS19W
SUVXX0NBTExCQUNLKFJlc291cmNlTG9hZFN0YXJ0ZWQsICJyZXNvdXJjZSxyZXF1ZXN0LG5ldyIs
IEV3a19SZXNvdXJjZV9SZXF1ZXN0KTsKQEAgLTE4NiwxMyArMTkyLDE3IEBAIERFQ0xBUkVfRVdL
X1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkUmVzcG9uc2UsICJyZXNvdXJjZSxyZXF1ZXN0LHJl
c3BvbnNlIiwgRXdrCiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291cmNlTG9hZEZhaWxl
ZCwgInJlc291cmNlLHJlcXVlc3QsZmFpbGVkIiwgRXdrX1Jlc291cmNlX0xvYWRfRXJyb3IpOwog
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRGaW5pc2hlZCwgInJlc291cmNl
LHJlcXVlc3QsZmluaXNoZWQiLCBFd2tfUmVzb3VyY2UpOwogREVDTEFSRV9FV0tfVklFV19DQUxM
QkFDSyhSZXNvdXJjZVJlcXVlc3RTZW50LCAicmVzb3VyY2UscmVxdWVzdCxzZW50IiwgRXdrX1Jl
c291cmNlX1JlcXVlc3QpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhTY3JvbGxiYXJzVmlz
aWJsZSwgInNjb3JsbGJhcnMsdmlzaWJsZSIsIGJvb2wpOworREVDTEFSRV9FV0tfVklFV19DQUxM
QkFDSyhTdGF0dXNiYXJWaXNpYmxlLCAic3RhdHVzYmFyLHZpc2libGUiLCBib29sKTsKIERFQ0xB
UkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVGV4dEZvdW5kLCAidGV4dCxmb3VuZCIsIHVuc2lnbmVkKTsK
IERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVGl0bGVDaGFuZ2UsICJ0aXRsZSxjaGFuZ2VkIiwg
Y2hhcik7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRvb2xiYXJWaXNpYmxlLCAidG9vbGJh
cix2aXNpYmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRvb2x0aXBUZXh0
VW5zZXQsICJ0b29sdGlwLHRleHQsdW5zZXQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soVG9vbHRpcFRleHRTZXQsICJ0b29sdGlwLHRleHQsc2V0IiwgY2hhcik7CiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKFVSTENoYW5nZWQsICJ1cmwsY2hhbmdlZCIsIGNoYXIpOwogREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhWaWJyYXRlLCAidmlicmF0ZSIsIHVpbnQ2NF90KTsKIERF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soV2ViUHJvY2Vzc0NyYXNoZWQsICJ3ZWJwcm9jZXNzLGNy
YXNoZWQiLCBib29sKTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soV2luZG93UmVzaXphYmxl
LCAid2luZG93LHJlc2l6YWJsZSIsIGJvb2wpOwogI2lmIEVOQUJMRShXRUJfSU5URU5UUykKIERF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soSW50ZW50UmVxdWVzdCwgImludGVudCxyZXF1ZXN0LG5l
dyIsIEV3a19JbnRlbnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKaW5kZXggZWMzZjMyNzgyMTkzNWY3ZTBlM2Y5MDdjMDc0
ODkzZWU0ZWI0MmIwMi4uZDZlN2M4MTRjNDhmN2Y3ZTE4YTNjYjgzNzBiYzRjOWVkMmJlMmQxMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNw
cApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgImV3a19zZXR0aW5nc19wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX3ZpZXcuaCIKICNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5j
bHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZh
cy5oPgogI2luY2x1ZGUgPEVjb3JlX1guaD4KICNpbmNsdWRlIDxFZGplLmg+CkBAIC04MzAsMzcg
KzgzMSwzOCBAQCB2b2lkIEV3a1ZpZXdJbXBsOjppbmZvcm1VUkxDaGFuZ2UoKQogICAgIGluZm9y
bUljb25DaGFuZ2UoKTsKIH0KIAotV0tQYWdlUmVmIEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQYWdl
KFdLRGljdGlvbmFyeVJlZiB3aW5kb3dGZWF0dXJlcykKK1dLUGFnZVJlZiBFd2tWaWV3SW1wbDo6
Y3JlYXRlTmV3UGFnZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcykKIHsKICAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwogICAgIEFTU0VSVChzZC0+
YXBpKTsKIAotICAgIEV2YXNfT2JqZWN0KiBuZXdFd2tWaWV3ID0gMDsKKyAgICBFd2tWaWV3SW1w
bCogdmlld0ltcGwgPSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobV92aWV3KTsKKyAgICBp
ZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
S1BhZ2VSZWY+KFdLUmV0YWluKHZpZXdJbXBsLT5wYWdlKCkpKTsKIAotICAgIC8vIEV4dHJhY3Qg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgZnJvbSB0aGUgd2luZG93IGF0dHJpYnV0ZXMgYW5kIHBhc3Mg
dGhlbSBhbG9uZyB0byB0aGUgZW1iZWRkZXIuCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHdpZHRoU3RyKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0U3RyKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWlnaHQiKSk7CisgICAgUmVmUHRyPEV3a1dpbmRv
d0ZlYXR1cmVzPiBld2tXaW5kb3dGZWF0dXJlcyA9IEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUo
d2luZG93RmVhdHVyZXMsIHRoaXMpOwogCi0gICAgV0tUeXBlUmVmIHJlZiA9IFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkod2luZG93RmVhdHVyZXMsIHdpZHRoU3RyLmdldCgpKTsKLSAgICB1bnNp
Z25lZCB3aWR0aCA9IHJlZiA/IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVS
ZWY+KHJlZikpIDogMDsKLSAgICByZWYgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdpbmRv
d0ZlYXR1cmVzLCBoZWlnaHRTdHIuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGhlaWdodCA9IHJlZiA/
IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KHJlZikpIDogMDsKLQot
ICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZV9uZXcpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgaWYgKCEobmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGVfbmV3KHNkLCB3
aWR0aCwgaGVpZ2h0KSkpCisgICAgRXZhc19PYmplY3QqIG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53
aW5kb3dfY3JlYXRlKHNkLCBld2tXaW5kb3dGZWF0dXJlcy5nZXQoKSk7CisgICAgaWYgKCFuZXdF
d2tWaWV3KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEV3a1ZpZXdJbXBsKiBuZXdWaWV3SW1w
bCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZhc09iamVjdChuZXdFd2tWaWV3KTsKICAgICBBU1NFUlQo
bmV3Vmlld0ltcGwpOwogCisgICAgbmV3Vmlld0ltcGwtPm1fd2luZG93RmVhdHVyZXMgPSBld2tX
aW5kb3dGZWF0dXJlczsKKwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+KFdLUmV0
YWluKG5ld1ZpZXdJbXBsLT5wYWdlKCkpKTsKIH0KIAogdm9pZCBFd2tWaWV3SW1wbDo6Y2xvc2VQ
YWdlKCkKIHsKLSAgICBzbWFydENhbGxiYWNrPENsb3NlV2luZG93PigpLmNhbGwoKTsKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAgIEFTU0VSVChzZC0+YXBp
KTsKKworICAgIGlmICghc2QtPmFwaS0+d2luZG93X2Nsb3NlKQorICAgICAgICByZXR1cm47CisK
KyAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwogfQogCiB2b2lkIEV3a1ZpZXdJbXBsOjpv
bk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudElu
Zm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApp
bmRleCA3MGE2NjIxMjIyMDhiYzdmNDg0ZjllODliNTMwODBkZWUwMTlhYzQyLi4xOWE3YmQ5YjEy
N2NhMmY4Yzg0ZTdlYjdiNjIyNmEyNzIzYTA3ZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUg
RXdrVmlld0ltcGxfaAogCiAjaW5jbHVkZSAiRXdrVmlld0NhbGxiYWNrcy5oIgorI2luY2x1ZGUg
IkltbXV0YWJsZURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJSZWZQdHJFZmwuaCIKICNpbmNsdWRl
ICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKICNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCkBAIC03Niw2
ICs3Nyw3IEBAIGNsYXNzIEV3a19CYWNrX0ZvcndhcmRfTGlzdDsKIGNsYXNzIEV3a19Db2xvcl9Q
aWNrZXI7CiBjbGFzcyBFd2tfUG9wdXBfTWVudTsKIGNsYXNzIEV3a19TZXR0aW5nczsKK2NsYXNz
IEV3a1dpbmRvd0ZlYXR1cmVzOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
dHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29udGV4dCBFdmFzX0dMX0NvbnRleHQ7CkBAIC0xMDIs
NiArMTA0LDcgQEAgcHVibGljOgogICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQoKSB7IHJldHVy
biBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzKCkgeyByZXR1
cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogYmFja0Zv
cndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KKyAgICBFd2tX
aW5kb3dGZWF0dXJlcyogd2luZG93RmVhdHVyZXMoKSB7IHJldHVybiBtX3dpbmRvd0ZlYXR1cmVz
LmdldCgpOyB9CiAKICAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdDsKICAgICBib29s
IGlzRm9jdXNlZCgpIGNvbnN0OwpAQCAtMTU2LDcgKzE1OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpc21pc3NDb2xvclBpY2tlcigpOwogI2VuZGlmCiAKLSAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3
UGFnZShXS0RpY3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMpOworICAgIFdLUGFnZVJlZiBjcmVh
dGVOZXdQYWdlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpOwog
ICAgIHZvaWQgY2xvc2VQYWdlKCk7CiAKICAgICB2b2lkIHJlcXVlc3RQb3B1cE1lbnUoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3Jl
OjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2Vi
S2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJfdCBzZWxlY3RlZEluZGV4KTsKQEAgLTI0
Myw2ICsyNDYsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFBvaW50IG1fc2Nyb2xsUG9z
aXRpb247CiAjZW5kaWYKICAgICBPd25QdHI8RXdrX1NldHRpbmdzPiBtX3NldHRpbmdzOworICAg
IFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gbV93aW5kb3dGZWF0dXJlczsKICAgICBjb25zdCB2
b2lkKiBtX2N1cnNvcklkZW50aWZpZXI7IC8vIFRoaXMgaXMgYW4gYWRkcmVzcywgZG8gbm90IGZy
ZWUgaXQuCiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fZmF2aWNvblVSTDsKICAgICBXS0VpbmFT
aGFyZWRTdHJpbmcgbV91cmw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuaAppbmRleCA4YTM5NDZlZjliNTcyNWMwOTRlNWE3YTBjOGRlZDM4ZDcxMmIxYWM5Li5m
OTM5MGM1Y2FiMjliN2NiNzgzYWI5Njc0YmZkMDI2YmI0Y2RhMDg3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKQEAgLTk0LDYgKzk0LDcgQEAKICNpbmNs
dWRlICJld2tfdG91Y2guaCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIKICNpbmNsdWRl
ICJld2tfdXJsX3Jlc3BvbnNlLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgog
I2luY2x1ZGUgPEV2YXMuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0xNTAsMTQgKzE1MSwx
NyBAQCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgewogCiAgICAgLy8gbmV3IHdpbmRvdzoK
ICAgICAvLyAgIC0gQ3JlYXRlIGEgbmV3IHdpbmRvdyB3aXRoIHNwZWNpZmllZCBzaXplCi0gICAg
RXZhc19PYmplY3QqICgqd2luZG93X2NyZWF0ZV9uZXcpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCk7CisgICAgLy8gd2luZG93IGhh
bmRsaW5nOgorICAgIC8vICAgLSBjcmVhdGUgYW5kIGNsb3NlIHdpbmRvdy4KKyAgICBFdmFzX09i
amVjdCAqKCp3aW5kb3dfY3JlYXRlKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29uc3QgRXdr
X1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKyAgICB2b2lkICgqd2luZG93X2Ns
b3NlKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7CiB9OwogCiAvKioKICAqIFRoZSB2ZXJzaW9u
IHlvdSBoYXZlIHRvIHB1dCBpbnRvIHRoZSB2ZXJzaW9uIGZpZWxkCiAgKiBpbiB0aGUgQGEgRXdr
X1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgogICovCi0jZGVmaW5lIEVXS19WSUVXX1NNQVJU
X0NMQVNTX1ZFUlNJT04gN1VMCisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04g
OFVMCiAKIC8qKgogICogSW5pdGlhbGl6ZXIgZm9yIHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNz
IHN0cnVjdHVyZS4KQEAgLTE2OSw3ICsxNzMsNyBAQCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xh
c3MgewogICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX1ZFUlNJT04KICAqIEBzZWUg
RVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04KICAqLwotI2RlZmluZSBFV0tf
VklFV19TTUFSVF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0
LCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQorI2RlZmluZSBFV0tfVklFV19T
TUFSVF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tf
VklFV19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQogCiAvKioKICAqIEluaXRpYWxpemVy
IHRvIHplcm8gYSB3aG9sZSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVy
ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmEzNDk2OWVkYTc1ZDNjZWY5NWVmNzllMmJiNGVhOThmMDdhMmVi
MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfd2luZG93X2ZlYXR1cmVzLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJl
cy5oIgorCisjaW5jbHVkZSAiV2ViTnVtYmVyLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0
dXJlc19wcml2YXRlLmgiCisjaW5jbHVkZSA8RWluYS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OworCitFd2tXaW5kb3dGZWF0dXJlczo6RXdrV2luZG93RmVhdHVyZXMoSW1tdXRhYmxlRGlj
dGlvbmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1f
dmlld0ltcGwodmlld0ltcGwpCit7CisgICAgaWYgKHdpbmRvd0ZlYXR1cmVzKSB7CisgICAgICAg
IFdlYkJvb2xlYW4qIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PFdlYkJvb2xlYW4qPih3aW5k
b3dGZWF0dXJlcy0+Z2V0KCJ0b29sQmFyVmlzaWJsZSIpKTsKKyAgICAgICAgaWYgKGJvb2xlYW5W
YWx1ZSkKKyAgICAgICAgICAgIG1fdG9vbGJhclZpc2libGUgPSBib29sZWFuVmFsdWUtPnZhbHVl
KCk7CisKKyAgICAgICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViQm9vbGVhbio+KHdp
bmRvd0ZlYXR1cmVzLT5nZXQoInN0YXR1c0JhclZpc2libGUiKSk7CisgICAgICAgIGlmIChib29s
ZWFuVmFsdWUpCisgICAgICAgICAgICBtX3N0YXR1c2JhclZpc2libGUgPSBib29sZWFuVmFsdWUt
PnZhbHVlKCk7CisKKyAgICAgICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViQm9vbGVh
bio+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoInNjcm9sbGJhcnNWaXNpYmxlIikpOworICAgICAgICBp
ZiAoYm9vbGVhblZhbHVlKQorICAgICAgICAgICAgbV9zY3JvbGxiYXJzVmlzaWJsZSA9IGJvb2xl
YW5WYWx1ZS0+dmFsdWUoKTsKKworICAgICAgICBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxX
ZWJCb29sZWFuKj4od2luZG93RmVhdHVyZXMtPmdldCgibWVudUJhclZpc2libGUiKSk7CisgICAg
ICAgIGlmIChib29sZWFuVmFsdWUpCisgICAgICAgICAgICBtX21lbnViYXJWaXNpYmxlID0gYm9v
bGVhblZhbHVlLT52YWx1ZSgpOworCisgICAgICAgIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0
PFdlYkJvb2xlYW4qPih3aW5kb3dGZWF0dXJlcy0+Z2V0KCJsb2NhdGlvbkJhclZpc2libGUiKSk7
CisgICAgICAgIGlmIChib29sZWFuVmFsdWUpCisgICAgICAgICAgICBtX2xvY2F0aW9uYmFyVmlz
aWJsZSA9IGJvb2xlYW5WYWx1ZS0+dmFsdWUoKTsKKworICAgICAgICBib29sZWFuVmFsdWUgPSBz
dGF0aWNfY2FzdDxXZWJCb29sZWFuKj4od2luZG93RmVhdHVyZXMtPmdldCgicmVzaXphYmxlIikp
OworICAgICAgICBpZiAoYm9vbGVhblZhbHVlKQorICAgICAgICAgICAgbV9yZXNpemFibGUgPSBi
b29sZWFuVmFsdWUtPnZhbHVlKCk7CisKKyAgICAgICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nh
c3Q8V2ViQm9vbGVhbio+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoImZ1bGxzY3JlZW4iKSk7CisgICAg
ICAgIGlmIChib29sZWFuVmFsdWUpCisgICAgICAgICAgICBtX2Z1bGxzY3JlZW4gPSBib29sZWFu
VmFsdWUtPnZhbHVlKCk7CisKKyAgICAgICAgV2ViRG91YmxlKiBkb3VibGVWYWx1ZSA9IHN0YXRp
Y19jYXN0PFdlYkRvdWJsZSo+KHdpbmRvd0ZlYXR1cmVzLT5nZXQoIngiKSk7CisgICAgICAgIGlm
IChkb3VibGVWYWx1ZSkKKyAgICAgICAgICAgIG1fZ2VvbWV0cnkuc2V0WChkb3VibGVWYWx1ZS0+
dmFsdWUoKSk7CisKKyAgICAgICAgZG91YmxlVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJEb3VibGUq
Pih3aW5kb3dGZWF0dXJlcy0+Z2V0KCJ5IikpOworICAgICAgICBpZiAoZG91YmxlVmFsdWUpCisg
ICAgICAgICAgICBtX2dlb21ldHJ5LnNldFkoZG91YmxlVmFsdWUtPnZhbHVlKCkpOworCisgICAg
ICAgIGRvdWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViRG91YmxlKj4od2luZG93RmVhdHVyZXMt
PmdldCgid2lkdGgiKSk7CisgICAgICAgIGlmIChkb3VibGVWYWx1ZSkKKyAgICAgICAgICAgIG1f
Z2VvbWV0cnkuc2V0V2lkdGgoZG91YmxlVmFsdWUtPnZhbHVlKCkpOworCisgICAgICAgIGRvdWJs
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViRG91YmxlKj4od2luZG93RmVhdHVyZXMtPmdldCgiaGVp
Z2h0IikpOworICAgICAgICBpZiAoZG91YmxlVmFsdWUpCisgICAgICAgICAgICBtX2dlb21ldHJ5
LnNldEhlaWdodChkb3VibGVWYWx1ZS0+dmFsdWUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
V2ViQ29yZTo6V2luZG93RmVhdHVyZXMqIGNvcmVGZWF0dXJlcyA9IG5ldyBXZWJDb3JlOjpXaW5k
b3dGZWF0dXJlcygpOworCisgICAgICAgIG1fdG9vbGJhclZpc2libGUgPSBjb3JlRmVhdHVyZXMt
PnRvb2xCYXJWaXNpYmxlOworICAgICAgICBtX3N0YXR1c2JhclZpc2libGUgPSBjb3JlRmVhdHVy
ZXMtPnN0YXR1c0JhclZpc2libGU7CisgICAgICAgIG1fc2Nyb2xsYmFyc1Zpc2libGUgPSBjb3Jl
RmVhdHVyZXMtPnNjcm9sbGJhcnNWaXNpYmxlOworICAgICAgICBtX21lbnViYXJWaXNpYmxlID0g
Y29yZUZlYXR1cmVzLT5tZW51QmFyVmlzaWJsZTsKKyAgICAgICAgbV9sb2NhdGlvbmJhclZpc2li
bGUgPSBjb3JlRmVhdHVyZXMtPmxvY2F0aW9uQmFyVmlzaWJsZTsKKyAgICAgICAgbV9yZXNpemFi
bGUgPSBjb3JlRmVhdHVyZXMtPnJlc2l6YWJsZTsKKyAgICAgICAgbV9mdWxsc2NyZWVuID0gY29y
ZUZlYXR1cmVzLT5mdWxsc2NyZWVuOworCisgICAgICAgIG1fZ2VvbWV0cnkuc2V0WChjb3JlRmVh
dHVyZXMtPngpOworICAgICAgICBtX2dlb21ldHJ5LnNldFkoY29yZUZlYXR1cmVzLT55KTsKKyAg
ICAgICAgbV9nZW9tZXRyeS5zZXRXaWR0aChjb3JlRmVhdHVyZXMtPndpZHRoKTsKKyAgICAgICAg
bV9nZW9tZXRyeS5zZXRIZWlnaHQoY29yZUZlYXR1cmVzLT5oZWlnaHQpOworICAgIH0KK30KKwor
dm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0KGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzLCBFaW5hX0Jvb2wqIHRvb2xiYXJWaXNpYmxlLCBF
aW5hX0Jvb2wqIHN0YXR1c2JhclZpc2libGUsIEVpbmFfQm9vbCogc2Nyb2xsYmFyc1Zpc2libGUs
IEVpbmFfQm9vbCogbWVudWJhclZpc2libGUsIEVpbmFfQm9vbCAqbG9jYXRpb25iYXJWaXNpYmxl
LCBFaW5hX0Jvb2wgKnJlc2l6YWJsZSwgRWluYV9Cb29sICpmdWxsc2NyZWVuKQoreworICAgIEVX
S19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dG
ZWF0dXJlcywgaW1wbCk7CisKKyAgICBpZiAodG9vbGJhclZpc2libGUpCisgICAgICAgICp0b29s
YmFyVmlzaWJsZSA9IGltcGwtPnRvb2xiYXJWaXNpYmxlKCk7CisKKyAgICBpZiAoc3RhdHVzYmFy
VmlzaWJsZSkKKyAgICAgICAgKnN0YXR1c2JhclZpc2libGUgPSBpbXBsLT5zdGF0dXNiYXJWaXNp
YmxlKCk7CisKKyAgICBpZiAoc2Nyb2xsYmFyc1Zpc2libGUpCisgICAgICAgICpzY3JvbGxiYXJz
VmlzaWJsZSA9IGltcGwtPnNjcm9sbGJhcnNWaXNpYmxlKCk7CisKKyAgICBpZiAobWVudWJhclZp
c2libGUpCisgICAgICAgICptZW51YmFyVmlzaWJsZSA9IGltcGwtPm1lbnViYXJWaXNpYmxlKCk7
CisKKyAgICBpZiAobG9jYXRpb25iYXJWaXNpYmxlKQorICAgICAgICAqbG9jYXRpb25iYXJWaXNp
YmxlID0gaW1wbC0+bG9jYXRpb25iYXJWaXNpYmxlKCk7CisKKyAgICBpZiAocmVzaXphYmxlKQor
ICAgICAgICAqcmVzaXphYmxlID0gaW1wbC0+cmVzaXphYmxlKCk7CisKKyAgICBpZiAoZnVsbHNj
cmVlbikKKyAgICAgICAgKmZ1bGxzY3JlZW4gPSBpbXBsLT5mdWxsc2NyZWVuKCk7Cit9CisKK3Zv
aWQgZXdrX3dpbmRvd19mZWF0dXJlc19pbnRfcHJvcGVydHlfZ2V0KGNvbnN0IEV3a19XaW5kb3df
RmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzLCBpbnQqIHgsIGludCogeSwgaW50KiB3aWR0aCwgaW50
KiBoZWlnaHQpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2lu
ZG93RmVhdHVyZXMsIHdpbmRvd0ZlYXR1cmVzLCBpbXBsKTsKKworICAgIGlmIChpbXBsLT5nZW9t
ZXRyeSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHgpCisgICAgICAg
ICp4ID0gc3RhdGljX2Nhc3Q8aW50PihpbXBsLT5nZW9tZXRyeSgpLngoKSk7CisKKyAgICBpZiAo
eSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxpbnQ+KGltcGwtPmdlb21ldHJ5KCkueSgpKTsK
KworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihpbXBs
LT5nZW9tZXRyeSgpLndpZHRoKCkpOworCisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdo
dCA9IHN0YXRpY19jYXN0PGludD4oaW1wbC0+Z2VvbWV0cnkoKS5oZWlnaHQoKSk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1
cmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1
cmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWE4MjkxMzczY2I4YmI3MGJhMDg1ZWNkNzdlYTZmYmZjNmZiODEw
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a193aW5kb3dfZmVhdHVyZXMuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8qKgorICogQGZpbGUgICAgZXdrX3dpbmRvd19mZWF0dXJlcy5oCisgKiBAYnJpZWYgICBB
Y2Nlc3MgdG8gdGhlIGZlYXR1cmVzIG9mIHdpbmRvdy4KKyAqLworCisjaWZuZGVmIGV3a193aW5k
b3dfZmVhdHVyZXNfaAorI2RlZmluZSBld2tfd2luZG93X2ZlYXR1cmVzX2gKKworI2luY2x1ZGUg
PEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisv
KioKKyAqIERlY2xhcmUgRXdrX1dpbmRvd19GZWF0dXJlcyBhcyBFd2tfT2JqZWN0LgorICoKKyAq
IEBzZWUgRXdrX09iamVjdAorICovCit0eXBlZGVmIHN0cnVjdCBFd2tfT2JqZWN0IEV3a19XaW5k
b3dfRmVhdHVyZXM7CisKKy8qKgorICogR2V0cyBib29sZWFuIHByb3BlcnRpZXMgb2YgYW4gRXdr
X1dpbmRvd19GZWF0dXJlcy4KKyAqCisgKiBQcm9wZXJ0aWVzIGFyZSByZXR1cm5lZCBpbiB0aGUg
cmVzcGVjdGl2ZSBwb2ludGVycy4gUGFzc2luZyBAYyBOVUxMIHRvIGFueSBvZgorICogdGhlc2Ug
cG9pbnRlcnMgd2lsbCBjYXVzZSB0aGF0IHByb3BlcnR5IHRvIG5vdCBiZSByZXR1cm5lZC4KKyAq
CisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IGJvb2xlYW4gcHJv
cGVydGllcworICogQHBhcmFtIHRvb2xiYXJfdmlzaWJsZSB0aGUgcG9pbnRlciB0byBzdG9yZSBp
ZiB0b29sYmFyIGlzIHZpc2libGUKKyAqIEBwYXJhbSBzdGF0dXNiYXJfdmlzaWJsZSB0aGUgcG9p
bnRlciB0byBzdG9yZSBpZiBzdGF0dXNiYXIgaXMgdmlzaWJsZQorICogQHBhcmFtIHNjcm9sbGJh
cnNfdmlzaWJsZSB0aGUgcG9pbnRlciB0byBzdG9yZSBpZiBzY3JvbGxiYXJzIGlzIHZpc2libGUK
KyAqIEBwYXJhbSBtZW51YmFyX3Zpc2libGUgdGhlIHBvaW50ZXIgdG8gc3RvcmUgaWYgbWVudWJh
ciBpcyB2aXNpYmxlCisgKiBAcGFyYW0gbG9jYXRpb25iYXJfdmlzaWJsZSB0aGUgcG9pbnRlciB0
byBzdG9yZSBpZiBsb2NhdGlvbmJhciBpcyB2aXNpYmxlCisgKiBAcGFyYW0gcmVzaXphYmxlIHRo
ZSBwb2ludGVyIHRvIHN0b3JlIGlmIHJlc2l6YWJsZSBpcyBlbmFibGVkCisgKiBAcGFyYW0gZnVs
bHNjcmVlbiB0aGUgcG9pbnRlciB0byBzdG9yZSBpZiBmdWxsc2NyZWVuIGlzIGVuYWJsZWQKKyAq
CisgKiBAc2VlIGV3a193aW5kb3dfZmVhdHVyZXNfaW50X3Byb3BlcnR5X2dldAorICovCitFQVBJ
IHZvaWQgZXdrX3dpbmRvd19mZWF0dXJlc19ib29sX3Byb3BlcnR5X2dldChjb25zdCBFd2tfV2lu
ZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMsIEVpbmFfQm9vbCAqdG9vbGJhcl92aXNpYmxl
LCBFaW5hX0Jvb2wgKnN0YXR1c2Jhcl92aXNpYmxlLCBFaW5hX0Jvb2wgKnNjcm9sbGJhcnNfdmlz
aWJsZSwgRWluYV9Cb29sICptZW51YmFyX3Zpc2libGUsIEVpbmFfQm9vbCAqbG9jYXRpb25iYXJf
dmlzaWJsZSwgRWluYV9Cb29sICpyZXNpemFibGUsIEVpbmFfQm9vbCAqZnVsbHNjcmVlbik7CisK
Ky8qKgorICogR2V0cyBpbnQgcHJvcGVydGllcyBvZiBhbiBFd2tfV2luZG93X0ZlYXR1cmVzLgor
ICoKKyAqIFByb3BlcnRpZXMgYXJlIHJldHVybmVkIGluIHRoZSByZXNwZWN0aXZlIHBvaW50ZXJz
LiBQYXNzaW5nIEBjIE5VTEwgdG8gYW55IG9mCisgKiB0aGVzZSBwb2ludGVycyB3aWxsIGNhdXNl
IHRoYXQgcHJvcGVydHkgdG8gbm90IGJlIHJldHVybmVkLgorICoKKyAqIE1ha2Ugc3VyZSB0byBj
aGVjayBpZiB0aGUgdmFsdWUgcmV0dXJuZWQgaXMgbGVzcyB0aGFuIDAgYmVmb3JlIHVzaW5nIGl0
LCBzaW5jZSBpbgorICogdGhhdCBjYXNlIGl0IG1lYW5zIHRoYXQgcHJvcGVydHkgd2FzIG5vdCBz
ZXQgaW4gd2luZG93X2ZlYXR1cmVzIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1
cmVzIHRoZSB3aW5kb3cncyBmZWF0dXJlcworICogQHBhcmFtIHggdGhlIHBvaW50ZXIgdG8gc3Rv
cmUgeCBwb3NpdGlvbgorICogQHBhcmFtIHkgdGhlIHBvaW50ZXIgdG8gc3RvcmUgeSBwb3NpdGlv
bgorICogQHBhcmFtIHcgdGhlIHBvaW50ZXIgdG8gc3RvcmUgd2lkdGgKKyAqIEBwYXJhbSBoIHRo
ZSBwb2ludGVyIHRvIHN0b3JlIGhlaWdodAorICoKKyAqIEBzZWUgZXdrX3dpbmRvd19mZWF0dXJl
c19ib29sX3Byb3BlcnR5X2dldAorICovCitFQVBJIHZvaWQgZXdrX3dpbmRvd19mZWF0dXJlc19p
bnRfcHJvcGVydHlfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJl
cywgaW50ICp4LCBpbnQgKnksIGludCAqdywgaW50ICpoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVz
Cit9CisjZW5kaWYKKworI2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVyZXNfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19w
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2Zl
YXR1cmVzX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTM4ZGM3MTFjMGRjNjA0NzAzOTA0ZGU0MzM2
M2Q3YjNkYzZiN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgKQEAgLTAsMCArMSw4OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgZXdrX3dpbmRvd19mZWF0dXJlc19wcml2
YXRlX2gKKyNkZWZpbmUgZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKKworI2luY2x1ZGUg
IkltbXV0YWJsZURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2lu
Y2x1ZGUgImV3a19vYmplY3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBFd2tWaWV3SW1wbDsKKworY2xh
c3MgRXdrV2luZG93RmVhdHVyZXMgOiBwdWJsaWMgRXdrX09iamVjdCB7CitwdWJsaWM6CisgICAg
RVdLX09CSkVDVF9ERUNMQVJFKEV3a1dpbmRvd0ZlYXR1cmVzKQorCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGNyZWF0ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5k
b3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBFd2tXaW5kb3dGZWF0dXJlcyh3aW5kb3dGZWF0dXJlcywgdmlld0ltcGwp
KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX2dl
b21ldHJ5OyB9CisgICAgdm9pZCBzZXRHZW9tZXRyeShGbG9hdFJlY3QmIGdlb21ldHJ5KSB7IG1f
Z2VvbWV0cnkgPSBnZW9tZXRyeTsgfQorCisgICAgYm9vbCB0b29sYmFyVmlzaWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdG9vbGJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldFRvb2xiYXJWaXNpYmxl
KGJvb2wgdG9vbGJhclZpc2libGUpIHsgbV90b29sYmFyVmlzaWJsZSA9IHRvb2xiYXJWaXNpYmxl
OyB9CisgICAgYm9vbCBzdGF0dXNiYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXNi
YXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wgc3RhdHVzYmFy
VmlzaWJsZSkgeyBtX3N0YXR1c2JhclZpc2libGUgPSBzdGF0dXNiYXJWaXNpYmxlOyB9CisKKyAg
ICBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXJzVmlz
aWJsZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCBzY3JvbGxiYXJzVmlz
aWJsZSkgeyBtX3Njcm9sbGJhcnNWaXNpYmxlID0gc2Nyb2xsYmFyc1Zpc2libGU7IH0KKworICAg
IGJvb2wgbWVudWJhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX21lbnViYXJWaXNpYmxlOyB9
CisgICAgdm9pZCBzZXRNZW51YmFyVmlzaWJsZShib29sIG1lbnViYXJWaXNpYmxlKSB7IG1fbWVu
dWJhclZpc2libGUgPSBtZW51YmFyVmlzaWJsZTsgfQorCisgICAgYm9vbCBsb2NhdGlvbmJhclZp
c2libGUoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uYmFyVmlzaWJsZTsgfQorICAgIHZvaWQg
c2V0TG9jYXRpb25iYXJWaXNpYmxlKGJvb2wgbG9jYXRpb25iYXJWaXNpYmxlKSB7IG1fbG9jYXRp
b25iYXJWaXNpYmxlID0gbG9jYXRpb25iYXJWaXNpYmxlOyB9CisKKyAgICBib29sIHJlc2l6YWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzaXphYmxlOyB9CisgICAgdm9pZCBzZXRSZXNpemFibGUo
Ym9vbCByZXNpemFibGUpIHsgbV9yZXNpemFibGUgPSByZXNpemFibGU7IH0KKworICAgIGJvb2wg
ZnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVlbjsgfQorICAgIHZvaWQgc2V0
RnVsbHNjcmVlbihib29sIGZ1bGxzY3JlZW4pIHsgbV9mdWxsc2NyZWVuID0gZnVsbHNjcmVlbjsg
fQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEV3a1dpbmRvd0ZlYXR1cmVzKEltbXV0YWJsZURp
Y3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0ltcGwpOworCisgICAg
RXdrVmlld0ltcGwqIG1fdmlld0ltcGw7CisKKyAgICBGbG9hdFJlY3QgbV9nZW9tZXRyeTsKKyAg
ICBib29sIG1fdG9vbGJhclZpc2libGU7CisgICAgYm9vbCBtX3N0YXR1c2JhclZpc2libGU7Cisg
ICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAgIGJvb2wgbV9tZW51YmFyVmlzaWJsZTsK
KyAgICBib29sIG1fbG9jYXRpb25iYXJWaXNpYmxlOworICAgIGJvb2wgbV9yZXNpemFibGU7Cisg
ICAgYm9vbCBtX2Z1bGxzY3JlZW47Cit9OworCisjZW5kaWYgLy8gZXdrX3dpbmRvd19mZWF0dXJl
c19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTQxOTkyNjIwNjA2YzQ0ZDdjM2E0YTE3NjFlN2NlYjBiNzZhMjVkMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdr
Ml93aW5kb3dfZmVhdHVyZXMuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0sy
VW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29yZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRlc3Q7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RydWN0IFdpbmRvd19GZWF0dXJlcyB7CisKKyAgICBFaW5hX0Jvb2wgdG9vbGJhclZp
c2libGU7CisgICAgRWluYV9Cb29sIHN0YXR1c2JhclZpc2libGU7CisgICAgRWluYV9Cb29sIHNj
cm9sbGJhcnNWaXNpYmxlOworICAgIEVpbmFfQm9vbCBtZW51YmFyVmlzaWJsZTsKKyAgICBFaW5h
X0Jvb2wgbG9jYXRpb25iYXJWaXNpYmxlOworICAgIEVpbmFfQm9vbCByZXNpemFibGU7CisgICAg
RWluYV9Cb29sIGZ1bGxzY3JlZW47CisKKyAgICBXaW5kb3dfRmVhdHVyZXMoKQorICAgICAgICA6
IHRvb2xiYXJWaXNpYmxlKGZhbHNlKQorICAgICAgICAsIHN0YXR1c2JhclZpc2libGUoZmFsc2Up
CisgICAgICAgICwgc2Nyb2xsYmFyc1Zpc2libGUoZmFsc2UpCisgICAgICAgICwgbWVudWJhclZp
c2libGUoZmFsc2UpCisgICAgICAgICwgbG9jYXRpb25iYXJWaXNpYmxlKGZhbHNlKQorICAgICAg
ICAsIHJlc2l6YWJsZShmYWxzZSkKKyAgICAgICAgLCBmdWxsc2NyZWVuKGZhbHNlKQorICAgIHsg
fQorfTsKKworc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVXaW5kb3coRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc21hcnREYXRhLCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dGZWF0dXJl
cykKK3sKKyAgICBXaW5kb3dfRmVhdHVyZXMgZmVhdHVyZXM7CisKKyAgICBld2tfd2luZG93X2Zl
YXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0KHdpbmRvd0ZlYXR1cmVzLCAmZmVhdHVyZXMudG9vbGJh
clZpc2libGUsICZmZWF0dXJlcy5zdGF0dXNiYXJWaXNpYmxlLCAmZmVhdHVyZXMuc2Nyb2xsYmFy
c1Zpc2libGUsICZmZWF0dXJlcy5tZW51YmFyVmlzaWJsZSwgJmZlYXR1cmVzLmxvY2F0aW9uYmFy
VmlzaWJsZSwgJmZlYXR1cmVzLnJlc2l6YWJsZSwgJmZlYXR1cmVzLmZ1bGxzY3JlZW4pOworCisg
ICAgRVhQRUNUX1RSVUUoZmVhdHVyZXMudG9vbGJhclZpc2libGUpOworICAgIEVYUEVDVF9UUlVF
KGZlYXR1cmVzLnN0YXR1c2JhclZpc2libGUpOworICAgIEVYUEVDVF9UUlVFKGZlYXR1cmVzLnNj
cm9sbGJhcnNWaXNpYmxlKTsKKyAgICBFWFBFQ1RfRkFMU0UoZmVhdHVyZXMubWVudWJhclZpc2li
bGUpOworICAgIEVYUEVDVF9GQUxTRShmZWF0dXJlcy5sb2NhdGlvbmJhclZpc2libGUpOworICAg
IEVYUEVDVF9UUlVFKGZlYXR1cmVzLnJlc2l6YWJsZSk7CisgICAgRVhQRUNUX0ZBTFNFKGZlYXR1
cmVzLmZ1bGxzY3JlZW4pOworCisgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisKKyAgICBl
d2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQod2luZG93RmVhdHVyZXMsICZ4LCAm
eSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIEVYUEVDVF9FUSgxMDAsIHgpOworICAgIEVYUEVD
VF9FUSgxNTAsIHkpOworICAgIEVYUEVDVF9FUSg0MDAsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEo
NDAwLCBoZWlnaHQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RC
YXNlLCBld2tfd2luZG93X2ZlYXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0KQoreworICAgIEV2YXNf
T2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworCisgICAgY29uc3QgY2hhciogd2luZG93SFRNTCA9
ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycsICdsZWZ0PTEwMCx0b3A9
MTUwLHdpZHRoPTQwMCxoZWlnaHQ9NDAwLGxvY2F0aW9uPW5vLG1lbnViYXI9bm8sc3RhdHVzPXll
cyx0b29sYmFyPXllcyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzLGZ1bGxzY3JlZW49bm8n
KTtcIj48L2JvZHk+PC9odG1sPiI7CisKKyAgICBld2tWaWV3Q2xhc3MoKS0+d2luZG93X2NyZWF0
ZSA9IGNyZWF0ZVdpbmRvdzsKKworICAgIGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQodmlldywg
d2luZG93SFRNTCwgMCwgMCk7CisgICAgQVNTRVJUX1RSVUUod2FpdFVudGlsTG9hZEZpbmlzaGVk
KCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlD
bGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRF
ZmwuY3BwCmluZGV4IDJiNzUwNzEwZjlkZTRhN2NlNGY4OWVkMDc2OWY2ZTU3NDUxODg1NTkuLjBi
NDFkMjNiNGY4ZWM4NmU1ZjUxM2NhZjU2MDhkNWQ2NjllOTg3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJXS0V2ZW50LmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRl
ICJld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a193aW5k
b3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NvbG9yLmg+CiAKQEAgLTQ5LDkgKzUwLDkgQEAgdm9pZCBQYWdlVUlDbGllbnRF
Zmw6OmNsb3NlUGFnZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiAgICAgdG9Q
YWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPmNsb3NlUGFnZSgpOwogfQog
Ci1XS1BhZ2VSZWYgUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tV
UkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMsIFdLRXZlbnRNb2Rp
ZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK1dLUGFn
ZVJlZiBQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVl
c3RSZWYsIFdLRGljdGlvbmFyeVJlZiB3a1dpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJz
LCBXS0V2ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgcmV0
dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQ
YWdlKHdpbmRvd0ZlYXR1cmVzKTsKKyAgICByZXR1cm4gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50
SW5mbyktPm1fdmlld0ltcGwtPmNyZWF0ZU5ld1BhZ2UodG9JbXBsKHdrV2luZG93RmVhdHVyZXMp
KTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRBbGVydChXS1BhZ2VS
ZWYsIFdLU3RyaW5nUmVmIGFsZXJ0VGV4dCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKQEAgLTcwLDYgKzcxLDcwIEBAIFdLU3RyaW5nUmVmIFBhZ2VVSUNsaWVudEVmbDo6cnVu
SmF2YVNjcmlwdFByb21wdChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2UsCiAgICAgcmV0
dXJuIHZhbHVlID8gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodmFsdWUpIDogMDsKIH0K
IAorYm9vbCBQYWdlVUlDbGllbnRFZmw6OnRvb2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9Q
YWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7CisgICAgYm9vbCB0b29sYmFy
VmlzaWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT50b29sYmFyVmlzaWJsZSgpOwor
CisgICAgcmV0dXJuIHRvb2xiYXJWaXNpYmxlOworfQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6
c2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCB0b29sYmFyVmlzaWJsZSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1Bh
Z2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbDsKKworICAgIHZpZXdJbXBsLT53
aW5kb3dGZWF0dXJlcygpLT5zZXRUb29sYmFyVmlzaWJsZSh0b29sYmFyVmlzaWJsZSk7CisgICAg
dmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8VG9vbGJhclZpc2libGU+KCkuY2FsbCgmdG9vbGJhclZp
c2libGUpOworfQorCitib29sIFBhZ2VVSUNsaWVudEVmbDo6bWVudUJhcklzVmlzaWJsZShXS1Bh
Z2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZpZXdJ
bXBsID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7CisgICAgYm9v
bCBtZW51YmFyVmlzaWJsZSA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpLT5tZW51YmFyVmlz
aWJsZSgpOworCisgICAgcmV0dXJuIG1lbnViYXJWaXNpYmxlOworfQorCit2b2lkIFBhZ2VVSUNs
aWVudEVmbDo6c2V0TWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgbWVudWJhclZpc2li
bGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZpZXdJbXBs
ID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7CisKKyAgICB2aWV3
SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+c2V0TWVudWJhclZpc2libGUobWVudWJhclZpc2libGUp
OworICAgIHZpZXdJbXBsLT5zbWFydENhbGxiYWNrPE1lbnViYXJWaXNpYmxlPigpLmNhbGwoJm1l
bnViYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRFZmw6OnN0YXR1c0JhcklzVmlz
aWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0lt
cGwqIHZpZXdJbXBsID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7
CisgICAgYm9vbCBzdGF0dXNiYXJWaXNpYmxlID0gdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCkt
PnN0YXR1c2JhclZpc2libGUoKTsKKworICAgIHJldHVybiBzdGF0dXNiYXJWaXNpYmxlOworfQor
Cit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiwg
Ym9vbCBzdGF0dXNiYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3
a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3Zp
ZXdJbXBsOworCisgICAgdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCktPnNldE1lbnViYXJWaXNp
YmxlKHN0YXR1c2JhclZpc2libGUpOworICAgIHZpZXdJbXBsLT5zbWFydENhbGxiYWNrPE1lbnVi
YXJWaXNpYmxlPigpLmNhbGwoJnN0YXR1c2JhclZpc2libGUpOworfQorCitib29sIFBhZ2VVSUNs
aWVudEVmbDo6aXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXdJbXBsOworICAgIGJvb2wgcmVzaXphYmxlID0gdmlld0ltcGwtPndpbmRvd0Zl
YXR1cmVzKCktPnJlc2l6YWJsZSgpOworCisgICAgcmV0dXJuIHJlc2l6YWJsZTsKK30KKwordm9p
ZCBQYWdlVUlDbGllbnRFZmw6OnNldElzUmVzaXphYmxlKFdLUGFnZVJlZiwgYm9vbCByZXNpemFi
bGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrVmlld0ltcGwqIHZpZXdJbXBs
ID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGw7CisKKyAgICB2aWV3
SW1wbC0+d2luZG93RmVhdHVyZXMoKS0+c2V0UmVzaXphYmxlKHJlc2l6YWJsZSk7CisgICAgdmll
d0ltcGwtPnNtYXJ0Q2FsbGJhY2s8V2luZG93UmVzaXphYmxlPigpLmNhbGwoJnJlc2l6YWJsZSk7
Cit9CisKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKIHZvaWQgUGFnZVVJQ2xpZW50RWZs
OjpzaG93Q29sb3JQaWNrZXIoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBpbml0aWFsQ29sb3IsIFdL
Q29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKIHsKQEAgLTE0MSw2ICsyMDYsMTQgQEAgUGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGll
bnRFZmwoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRB
bGVydCA9IHJ1bkphdmFTY3JpcHRBbGVydDsKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0Q29u
ZmlybSA9IHJ1bkphdmFTY3JpcHRDb25maXJtOwogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRQ
cm9tcHQgPSBydW5KYXZhU2NyaXB0UHJvbXB0OworICAgIHVpQ2xpZW50LnRvb2xiYXJzQXJlVmlz
aWJsZSA9IHRvb2xiYXJzQXJlVmlzaWJsZTsKKyAgICB1aUNsaWVudC5zZXRUb29sYmFyc0FyZVZp
c2libGUgPSBzZXRUb29sYmFyc0FyZVZpc2libGU7CisgICAgdWlDbGllbnQubWVudUJhcklzVmlz
aWJsZSA9IG1lbnVCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuc2V0TWVudUJhcklzVmlzaWJs
ZSA9IHNldE1lbnVCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuc3RhdHVzQmFySXNWaXNpYmxl
ID0gc3RhdHVzQmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJs
ZSA9IHNldFN0YXR1c0JhcklzVmlzaWJsZTsKKyAgICB1aUNsaWVudC5pc1Jlc2l6YWJsZSA9IGlz
UmVzaXphYmxlOworICAgIHVpQ2xpZW50LnNldElzUmVzaXphYmxlID0gc2V0SXNSZXNpemFibGU7
CiAgICAgdWlDbGllbnQudGFrZUZvY3VzID0gdGFrZUZvY3VzOwogICAgIHVpQ2xpZW50LmZvY3Vz
ID0gZm9jdXM7CiAgICAgdWlDbGllbnQudW5mb2N1cyA9IHVuZm9jdXM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaAppbmRleCAyZjU0MTkyYTJhZTBm
YjcwMzllMTJiYzkxNGI2NzhjODM2N2Y4MTZiLi5lNjg0MTRhY2ZiNzQ4OGEzZWI5N2ZmYjQ4ZTc4
NGUwMTAxMDVhYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Bh
Z2VVSUNsaWVudEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJ
Q2xpZW50RWZsLmgKQEAgLTUwLDYgKzUwLDE0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQg
cnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNv
bnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXS1BhZ2VS
ZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIFdL
U3RyaW5nUmVmIHJ1bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwgV0tT
dHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgYm9vbCB0b29s
YmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBz
dGF0aWMgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBtZW51QmFySXNWaXNpYmxlKFdLUGFn
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0TWVudUJh
cklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAg
IHN0YXRpYyBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VS
ZWYsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzUmVz
aXphYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZv
aWQgc2V0SXNSZXNpemFibGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKICAgICBzdGF0aWMgdm9pZCBzaG93Q29s
b3JQaWNrZXIoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQaWNr
ZXJSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIGhpZGVD
b2xvclBpY2tlcihXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMWIyOTVmOGQ5ZTQ4ZGNiMzUyYmRlMTI5
ZjRkMGM0ZDFiZTEzYzFkLi4xZGQwMDMyYmUwYjljNTgyM2RjNzhkMzBjODlkMGYzOWI0NzcwYWI4
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTItMTEtMTQgIEppbndvbyBTb25nICA8amlud29vNy5zb25nQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gQWRkIEV3a19XaW5kb3dfRmVhdHVyZXMgQVBJ
IGFuZCByZWxhdGVkIFVJIGNhbGxiYWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTkxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCB3aW5kb3dfY3JlYXRlIGFuZCB3aW5kb3dfY2xv
c2Ugc21hcnRjYWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9lZmwv
bWFpbi5jOgorICAgICAgICAob25fd2luZG93X2NyZWF0ZSk6CisgICAgICAgIChvbl93aW5kb3df
Y2xvc2UpOgorICAgICAgICAod2luZG93X2NyZWF0ZSk6CisKIDIwMTItMTEtMTQgIERhbmEgSmFu
c2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBXZWJQcmVm
ZXJlbmNlcyByZXNldCgpIHNob3VsZCBzZXQgcGVyVGlsZVBhaW50aW5nIGFuZCBhY2NlbGVyYXRl
ZEFuaW1hdGlvbiBzZXR0aW5ncyB0byBmYWxzZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL2VmbC9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCmluZGV4IDkyZDNm
MmZmOWYzZTQyNmNhNWE4OTcxMzEwYTM4NDU2NmEwNGM4N2QuLjZlMWJiNzllYTNlNzJmODU3NjVi
YzM4N2U5OWQ5NTJmZDdiM2VmOTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9t
YWluLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwpAQCAtMjg0LDIwICsyODQs
NiBAQCBvbl9iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19P
YmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudAogICAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0
KHdpbmRvdy0+Zm9yd2FyZF9idXR0b24sICFld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKGV3a192
aWV3KSk7CiB9CiAKLXN0YXRpYyBFdmFzX09iamVjdCoKLW9uX25ld193aW5kb3coRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewot
ICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfY3JlYXRlKE5VTEwsIHdpZHRoLCBo
ZWlnaHQpOwotICAgIHdpbmRvd3MgPSBlaW5hX2xpc3RfYXBwZW5kKHdpbmRvd3MsIHdpbmRvdyk7
Ci0gICAgcmV0dXJuIHdpbmRvdy0+ZXdrX3ZpZXc7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9jbG9z
ZV93aW5kb3codm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2
ZW50X2luZm8pCi17Ci0gICAgd2luZG93X2Nsb3NlKChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0
YSk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBvbl9wcm9ncmVzcyh2b2lkICp1c2VyX2RhdGEsIEV2YXNf
T2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsKQEAgLTMwNyw2ICsyOTMsMzkg
QEAgb25fcHJvZ3Jlc3Modm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZv
aWQgKmV2ZW50X2luZm8pCiAgICAgdGl0bGVfc2V0KHdpbmRvdy0+ZWxtX3dpbmRvdywgZXdrX3Zp
ZXdfdGl0bGVfZ2V0KHdpbmRvdy0+ZXdrX3ZpZXcpLCBwcm9ncmVzcyAqIDEwMCk7CiB9CiAKK3N0
YXRpYyBFdmFzX09iamVjdCAqCitvbl93aW5kb3dfY3JlYXRlKEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNtYXJ0RGF0YSwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQor
eworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAgaW50IHdpZHRoID0gMDsKKyAg
ICBpbnQgaGVpZ2h0ID0gMDsKKworICAgIGV3a193aW5kb3dfZmVhdHVyZXNfaW50X3Byb3BlcnR5
X2dldCh3aW5kb3dfZmVhdHVyZXMsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIGlm
ICghd2lkdGgpCisgICAgICAgIHdpZHRoID0gd2luZG93X3dpZHRoOworCisgICAgaWYgKCFoZWln
aHQpCisgICAgICAgIGhlaWdodCA9IHdpbmRvd19oZWlnaHQ7CisKKyAgICBCcm93c2VyX1dpbmRv
dyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBFdmFz
X09iamVjdCAqbmV3X3ZpZXcgPSB3aW5kb3ctPmV3a192aWV3OworCisgICAgd2luZG93cyA9IGVp
bmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKKworICAgIGluZm8oIm1pbmlicm93c2Vy
OiBsb2NhdGlvbiglZCwlZCkgc2l6ZT0oJWQsJWQpXG4iLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgIHJldHVybiBuZXdfdmlldzsKK30KKworc3RhdGljIEV2YXNfT2JqZWN0ICoKK29uX3dp
bmRvd19jbG9zZShFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEpCit7CisgICAgQnJvd3Nl
cl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc21hcnREYXRhLT5z
ZWxmKTsKKyAgICB3aW5kb3dfY2xvc2Uod2luZG93KTsKK30KKwogc3RhdGljIHZvaWQKIG9uX2Vy
cm9yKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9p
bmZvKQogewpAQCAtMTAzMCw3ICsxMDQ5LDkgQEAgc3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5k
b3dfY3JlYXRlKGNvbnN0IGNoYXIgKnVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGV3
a1ZpZXdDbGFzcy0+d2luZG93X2dlb21ldHJ5X3NldCA9IG9uX3dpbmRvd19nZW9tZXRyeV9zZXQ7
CiAgICAgZXdrVmlld0NsYXNzLT5mdWxsc2NyZWVuX2VudGVyID0gb25fZnVsbHNjcmVlbl9lbnRl
cjsKICAgICBld2tWaWV3Q2xhc3MtPmZ1bGxzY3JlZW5fZXhpdCA9IG9uX2Z1bGxzY3JlZW5fZXhp
dDsKLSAgICBld2tWaWV3Q2xhc3MtPndpbmRvd19jcmVhdGVfbmV3ID0gb25fbmV3X3dpbmRvdzsK
KyAgICBld2tWaWV3Q2xhc3MtPndpbmRvd19jcmVhdGUgPSBvbl93aW5kb3dfY3JlYXRlOworICAg
IGV3a1ZpZXdDbGFzcy0+d2luZG93X2Nsb3NlID0gb25fd2luZG93X2Nsb3NlOworCiAKICAgICBF
dmFzICpldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2luZG93LT5lbG1fd2luZG93KTsKICAg
ICBFdmFzX1NtYXJ0ICpzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZld2tWaWV3Q2xhc3Mt
PnNjKTsKQEAgLTEwNDcsNyArMTA2OCw2IEBAIHN0YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93
X2NyZWF0ZShjb25zdCBjaGFyICp1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBld2tf
c2V0dGluZ3NfcHJlZmVycmVkX21pbmltdW1fY29udGVudHNfd2lkdGhfc2V0KHNldHRpbmdzLCAw
KTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3
LCAiYXV0aGVudGljYXRpb24scmVxdWVzdCIsIG9uX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QsIHdp
bmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3Zp
ZXcsICJjbG9zZSx3aW5kb3ciLCBvbl9jbG9zZV93aW5kb3csIHdpbmRvdyk7CiAgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxmYWls
ZWQiLCBvbl9kb3dubG9hZF9mYWlsZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxmaW5pc2hlZCIsIG9uX2Rv
d25sb2FkX2ZpbmlzaGVkLCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxvYWQscmVxdWVzdCIsIG9uX2Rvd25sb2FkX3Jl
cXVlc3QsIHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174404</attachid>
            <date>2012-11-15 04:40:29 -0800</date>
            <delta_ts>2012-11-15 23:00:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121115213825.patch</filename>
            <type>text/plain</type>
            <size>42689</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDAyNGIxZjdhZjk2MWI4
ZTcxMTJmZmYxNzMxN2ZkODExMjExNWQ1Yi4uOThjM2UzODk3Y2M4NjBkNDViOTE1YjIwODllMmM3
NzEwY2M0ZmE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTExLTE0ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgdGhlIHdpbmRvdyBmZWF0dXJlcyBp
biB0aGUgYXBwbGljYXRpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdr
Vmlld0NhbGxiYWNrcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwu
Y3BwOgorICAgICAgICAoRXdrVmlld0ltcGw6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAoRXdr
Vmlld0ltcGw6OmNsb3NlUGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
d0ltcGwuaDoKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjp3aW5kb3dGZWF0dXJlcyk6CisgICAgICAg
IChFd2tWaWV3SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcDogQWRk
ZWQuCisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6RXdrV2luZG93RmVhdHVyZXMpOgorICAg
ICAgICAoZXdrX3dpbmRvd19mZWF0dXJlc19ib29sX3Byb3BlcnR5X2dldCk6CisgICAgICAgIChl
d2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmg6IEFkZGVkLgorICAgICAg
ICAoRXdrV2luZG93RmVhdHVyZXMpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OmNyZWF0
ZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6Z2VvbWV0cnkpOgorICAgICAgICAoRXdr
V2luZG93RmVhdHVyZXM6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVz
Ojp0b29sYmFyVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6c2V0VG9vbGJh
clZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnN0YXR1c2JhclZpc2libGUp
OgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldFN0YXR1c2JhclZpc2libGUpOgorICAg
ICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNjcm9sbGJhcnNWaXNpYmxlKToKKyAgICAgICAgKEV3
a1dpbmRvd0ZlYXR1cmVzOjpzZXRTY3JvbGxiYXJzVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5k
b3dGZWF0dXJlczo6bWVudWJhclZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6
OnNldE1lbnViYXJWaXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpsb2NhdGlv
bmJhclZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldExvY2F0aW9uYmFy
VmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6cmVzaXphYmxlKToKKyAgICAg
ICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRSZXNpemFibGUpOgorICAgICAgICAoRXdrV2luZG93
RmVhdHVyZXM6OmZ1bGxzY3JlZW4pOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldEZ1
bGxzY3JlZW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93
aW5kb3dfZmVhdHVyZXMuY3BwOiBBZGRlZCBjb3JyZXNwb25kaW5nIEFQSSB0ZXN0cy4KKyAgICAg
ICAgKFdpbmRvd19GZWF0dXJlcyk6CisgICAgICAgIChXaW5kb3dfRmVhdHVyZXM6OldpbmRvd19G
ZWF0dXJlcyk6CisgICAgICAgIChjcmVhdGVXaW5kb3cpOgorICAgICAgICAoVEVTVF9GKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6dG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvUGFnZVVJQ2xpZW50RWZsLmg6CisgICAgICAgIChQYWdlVUlDbGllbnRFZmwpOgorCiAy
MDEyLTExLTE0ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBbV2luQ2Fpcm9dIEJ1aWxkIGNvcnJlY3Rpb24gYWZ0ZXIgcjEzNDcwMy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UKaW5kZXggYmI4NzQ3YjFjYjFmNTgzOGMyZGQ3Y2NkZGY3ODI5MTFlYTY3YzFl
NS4uNjYwNjg1YTU5YTYwOWZjMmU5ODY2YjVmNGU0NTZhNThmZGRkZTVlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTczLDYgKzczLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VS
Q0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVh
dHVyZXMuY3BwCiAKICAgICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAK
QEAgLTM3Niw2ICszNzcsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3Rf
ZXdrMl9zdG9yYWdlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfdGV4dF9jaGVja2VyCiAgICAgdGVz
dF9ld2syX3ZpZXcKKyAgICB0ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzCiApCiAKIElGIChFTkFC
TEVfQVBJX1RFU1RTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlld0NhbGxiYWNrcy5oCmluZGV4IDk4NTI1OTlhMjc4M2E2MWVhNzdjNTdkZWFmNTIxYjJj
NTM1NmZmMzQuLmYwZDc1OWEwM2Q4MjAwN2NmNzY2ZjExYWVmZGYzMjZkNDZjZTRiMmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3Mu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tz
LmgKQEAgLTU3LDggKzU3LDYgQEAgZW51bSBDYWxsYmFja1R5cGUgewogICAgIEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCwKICAgICBCYWNrRm9yd2FyZExpc3RDaGFuZ2UsCiAgICAgQ2FuY2VsVmlicmF0
aW9uLAotICAgIENsb3NlV2luZG93LAotICAgIENyZWF0ZVdpbmRvdywKICAgICBEb3dubG9hZEpv
YkNhbmNlbGxlZCwKICAgICBEb3dubG9hZEpvYkZhaWxlZCwKICAgICBEb3dubG9hZEpvYkZpbmlz
aGVkLApAQCAtMTY0LDggKzE2Miw2IEBAIHN0cnVjdCBDYWxsQmFja0luZm88Y2FsbGJhY2tUeXBl
PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogREVDTEFSRV9FV0tfVklFV19DQUxMQkFD
SyhBdXRoZW50aWNhdGlvblJlcXVlc3QsICJhdXRoZW50aWNhdGlvbixyZXF1ZXN0IiwgRXdrX0F1
dGhfUmVxdWVzdCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEJhY2tGb3J3YXJkTGlzdENo
YW5nZSwgImJhY2ssZm9yd2FyZCxsaXN0LGNoYW5nZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJ
RVdfQ0FMTEJBQ0soQ2FuY2VsVmlicmF0aW9uLCAiY2FuY2VsLHZpYnJhdGlvbiIsIHZvaWQpOwot
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhDbG9zZVdpbmRvdywgImNsb3NlLHdpbmRvdyIsIHZv
aWQpOwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhDcmVhdGVXaW5kb3csICJjcmVhdGUsd2lu
ZG93IiwgRXZhc19PYmplY3QqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRK
b2JDYW5jZWxsZWQsICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxvYWRfSm9iKTsKIERF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JGYWlsZWQsICJkb3dubG9hZCxmYWls
ZWQiLCBFd2tfRG93bmxvYWRfSm9iX0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
RG93bmxvYWRKb2JGaW5pc2hlZCwgImRvd25sb2FkLGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pv
Yik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5j
cHAKaW5kZXggZWMzZjMyNzgyMTkzNWY3ZTBlM2Y5MDdjMDc0ODkzZWU0ZWI0MmIwMi4uZDY0Nzdh
MTFhZjIwOGZmMjNmNmVhNTY0YmQwZmMxNTBlZDcyNjc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcApAQCAtNTQsNiArNTQsNyBAQAog
I2luY2x1ZGUgImV3a19zZXR0aW5nc19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIK
ICNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0
dXJlc19wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPEVjb3Jl
X1guaD4KICNpbmNsdWRlIDxFZGplLmg+CkBAIC0xMjQsNiArMTI1LDcgQEAgRXdrVmlld0ltcGw6
OkV3a1ZpZXdJbXBsKEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNv
bnRleHQsIFBhc3MKICAgICAsIG1fc2NhbGVGYWN0b3IoMSkKICNlbmRpZgogICAgICwgbV9zZXR0
aW5ncyhFd2tfU2V0dGluZ3M6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fd2luZG93RmVhdHVyZXMo
RXdrV2luZG93RmVhdHVyZXM6OmNyZWF0ZSgwLCB0aGlzKSkKICAgICAsIG1fY3Vyc29ySWRlbnRp
ZmllcigwKQogICAgICwgbV9tb3VzZUV2ZW50c0VuYWJsZWQoZmFsc2UpCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKQEAgLTgzMCwzNyArODMyLDM4IEBAIHZvaWQgRXdrVmlld0ltcGw6OmluZm9y
bVVSTENoYW5nZSgpCiAgICAgaW5mb3JtSWNvbkNoYW5nZSgpOwogfQogCi1XS1BhZ2VSZWYgRXdr
Vmlld0ltcGw6OmNyZWF0ZU5ld1BhZ2UoV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzKQor
V0tQYWdlUmVmIEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQYWdlKEltbXV0YWJsZURpY3Rpb25hcnkq
IHdpbmRvd0ZlYXR1cmVzKQogewogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnRE
YXRhKCk7CiAgICAgQVNTRVJUKHNkLT5hcGkpOwogCi0gICAgRXZhc19PYmplY3QqIG5ld0V3a1Zp
ZXcgPSAwOworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZh
c09iamVjdChtX3ZpZXcpOworICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4odmlld0ltcGwtPnBhZ2Uo
KSkpOwogCi0gICAgLy8gRXh0cmFjdCB0aGUgd2lkdGggYW5kIGhlaWdodCBmcm9tIHRoZSB3aW5k
b3cgYXR0cmlidXRlcyBhbmQgcGFzcyB0aGVtIGFsb25nIHRvIHRoZSBlbWJlZGRlci4KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhTdHIoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBo
ZWlnaHRTdHIoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIp
KTsKKyAgICBSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGV3a1dpbmRvd0ZlYXR1cmVzID0gRXdr
V2luZG93RmVhdHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcywgdGhpcyk7CiAKLSAgICBXS1R5
cGVSZWYgcmVmID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3aW5kb3dGZWF0dXJlcywgd2lk
dGhTdHIuZ2V0KCkpOwotICAgIHVuc2lnbmVkIHdpZHRoID0gcmVmID8gV0tEb3VibGVHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4ocmVmKSkgOiAwOwotICAgIHJlZiA9IFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkod2luZG93RmVhdHVyZXMsIGhlaWdodFN0ci5nZXQoKSk7Ci0gICAg
dW5zaWduZWQgaGVpZ2h0ID0gcmVmID8gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4ocmVmKSkgOiAwOwotCi0gICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY3JlYXRlX25l
dykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIShuZXdFd2tWaWV3ID0gc2QtPmFwaS0+
d2luZG93X2NyZWF0ZV9uZXcoc2QsIHdpZHRoLCBoZWlnaHQpKSkKKyAgICBFdmFzX09iamVjdCog
bmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGUoc2QsIGV3a1dpbmRvd0ZlYXR1cmVz
LmdldCgpKTsKKyAgICBpZiAoIW5ld0V3a1ZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
RXdrVmlld0ltcGwqIG5ld1ZpZXdJbXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG5l
d0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKKyAgICBuZXdWaWV3SW1wbC0+
bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOworCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4obmV3Vmlld0ltcGwtPnBhZ2UoKSkpOwogfQogCiB2
b2lkIEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UoKQogewotICAgIHNtYXJ0Q2FsbGJhY2s8Q2xvc2VX
aW5kb3c+KCkuY2FsbCgpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRh
KCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xv
c2UpCisgICAgICAgIHJldHVybjsKKworICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CiB9
CiAKIHZvaWQgRXdrVmlld0ltcGw6Om9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFz
X09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3SW1wbC5oCmluZGV4IDcwYTY2MjEyMjIwOGJjN2Y0ODRmOWU4OWI1MzA4
MGRlZTAxOWFjNDIuLjE5YTdiZDliMTI3Y2EyZjhjODRlN2ViN2I2MjI2YTI3MjNhMDdlNmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApAQCAt
MjIsNiArMjIsNyBAQAogI2RlZmluZSBFd2tWaWV3SW1wbF9oCiAKICNpbmNsdWRlICJFd2tWaWV3
Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUg
IlJlZlB0ckVmbC5oIgogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUg
IldLR2VvbWV0cnkuaCIKQEAgLTc2LDYgKzc3LDcgQEAgY2xhc3MgRXdrX0JhY2tfRm9yd2FyZF9M
aXN0OwogY2xhc3MgRXdrX0NvbG9yX1BpY2tlcjsKIGNsYXNzIEV3a19Qb3B1cF9NZW51OwogY2xh
c3MgRXdrX1NldHRpbmdzOworY2xhc3MgRXdrV2luZG93RmVhdHVyZXM7CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0IEV2
YXNfR0xfQ29udGV4dDsKQEAgLTEwMiw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgRXdrQ29udGV4
dCogZXdrQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEV3a19TZXR0
aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tGb3J3YXJk
TGlzdC5nZXQoKTsgfQorICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcygpIHsg
cmV0dXJuIG1fd2luZG93RmVhdHVyZXMuZ2V0KCk7IH0KIAogICAgIFdlYkNvcmU6OkludFNpemUg
c2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Q7CkBAIC0xNTYsNyArMTU5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlzbWlzc0NvbG9yUGlja2VyKCk7CiAjZW5kaWYKIAot
ICAgIFdLUGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdLRGljdGlvbmFyeVJlZiB3aW5kb3dGZWF0dXJl
cyk7CisgICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9u
YXJ5KiB3aW5kb3dGZWF0dXJlcyk7CiAgICAgdm9pZCBjbG9zZVBhZ2UoKTsKIAogICAgIHZvaWQg
cmVxdWVzdFBvcHVwTWVudShXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5RWZsKiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVG
YWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBvcHVwSXRlbT4mIGl0ZW1zLCBpbnQzMl90
IHNlbGVjdGVkSW5kZXgpOwpAQCAtMjQzLDYgKzI0Niw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29y
ZTo6SW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICNlbmRpZgogICAgIE93blB0cjxFd2tfU2V0
dGluZ3M+IG1fc2V0dGluZ3M7CisgICAgUmVmUHRyPEV3a1dpbmRvd0ZlYXR1cmVzPiBtX3dpbmRv
d0ZlYXR1cmVzOwogICAgIGNvbnN0IHZvaWQqIG1fY3Vyc29ySWRlbnRpZmllcjsgLy8gVGhpcyBp
cyBhbiBhZGRyZXNzLCBkbyBub3QgZnJlZSBpdC4KICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV9m
YXZpY29uVVJMOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX3VybDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCmluZGV4IDhhMzk0NmVmOWI1NzI1YzA5NGU1
YTdhMGM4ZGVkMzhkNzEyYjFhYzkuLjBlOTNmYmU4Y2Y4ZjcyNjc4MGRlMmU4ZDJmNWUwZDMyMmI0
Y2I1N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApA
QCAtMzAsOCArMzAsNiBAQAogICogICBld2tfYXV0aF9yZXF1ZXN0X3JlZigpIG9uIHRoZSByZXF1
ZXN0IG9iamVjdCB0byBwcm9jZXNzIHRoZSBhdXRoZW50aWNhdGlvbiBhc3luY2hyb25vdXNseS4K
ICAqIC0gImJhY2ssZm9yd2FyZCxsaXN0LGNoYW5nZWQiLCB2b2lkOiByZXBvcnRzIHRoYXQgdGhl
IHZpZXcncyBiYWNrIC8gZm9yd2FyZCBsaXN0IGhhZCBjaGFuZ2VkLgogICogLSAiY2FuY2VsLHZp
YnJhdGlvbiIsIHZvaWQ6IHJlcXVlc3QgdG8gY2FuY2VsIHRoZSB2aWJyYXRpb24uCi0gKiAtICJj
bG9zZSx3aW5kb3ciLCB2b2lkOiB3aW5kb3cgaXMgY2xvc2VkLgotICogLSAiY3JlYXRlLHdpbmRv
dyIsIEV2YXNfT2JqZWN0Kio6IGEgbmV3IHdpbmRvdyBpcyBjcmVhdGVkLgogICogLSAiZG93bmxv
YWQsY2FuY2VsbGVkIiwgRXdrX0Rvd25sb2FkX0pvYio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2Fk
IHdhcyBlZmZlY3RpdmVseSBjYW5jZWxsZWQuCiAgKiAtICJkb3dubG9hZCxmYWlsZWQiLCBFd2tf
RG93bmxvYWRfSm9iX0Vycm9yKjogcmVwb3J0cyB0aGF0IGEgZG93bmxvYWQgZmFpbGVkIHdpdGgg
dGhlIGdpdmVuIGVycm9yLgogICogLSAiZG93bmxvYWQsZmluaXNoZWQiLCBFd2tfRG93bmxvYWRf
Sm9iKjogcmVwb3J0cyB0aGF0IGEgZG93bmxvYWQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KQEAg
LTk0LDYgKzkyLDcgQEAKICNpbmNsdWRlICJld2tfdG91Y2guaCIKICNpbmNsdWRlICJld2tfdXJs
X3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCisjaW5jbHVkZSAiZXdr
X3dpbmRvd19mZWF0dXJlcy5oIgogI2luY2x1ZGUgPEV2YXMuaD4KIAogI2lmZGVmIF9fY3BsdXNw
bHVzCkBAIC0xNDgsMTYgKzE0NywxNyBAQCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgewog
ICAgIC8vICAgLSBXZWIgZGF0YWJhc2UuCiAgICAgdW5zaWduZWQgbG9uZyBsb25nICgqZXhjZWVk
ZWRfZGF0YWJhc2VfcXVvdGEpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBjb25zdCBjaGFyICpk
YXRhYmFzZU5hbWUsIGNvbnN0IGNoYXIgKmRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcg
Y3VycmVudFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1bnNp
Z25lZCBsb25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBl
eHBlY3RlZFVzYWdlKTsKIAotICAgIC8vIG5ldyB3aW5kb3c6Ci0gICAgLy8gICAtIENyZWF0ZSBh
IG5ldyB3aW5kb3cgd2l0aCBzcGVjaWZpZWQgc2l6ZQotICAgIEV2YXNfT2JqZWN0KiAoKndpbmRv
d19jcmVhdGVfbmV3KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRXZhc19Db29yZCB3aWR0aCwg
RXZhc19Db29yZCBoZWlnaHQpOworICAgIC8vIHdpbmRvdyBjcmVhdGlvbiBhbmQgY2xvc2luZzoK
KyAgICAvLyAgIC0gQ3JlYXRlIGEgbmV3IHdpbmRvdyB3aXRoIHNwZWNpZmllZCBmZWF0dXJlcyBh
bmQgY2xvc2Ugd2luZG93LgorICAgIEV2YXNfT2JqZWN0ICooKndpbmRvd19jcmVhdGUpKEV3a19W
aWV3X1NtYXJ0X0RhdGEgKnNkLCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVh
dHVyZXMpOworICAgIHZvaWQgKCp3aW5kb3dfY2xvc2UpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
KTsKIH07CiAKIC8qKgogICogVGhlIHZlcnNpb24geW91IGhhdmUgdG8gcHV0IGludG8gdGhlIHZl
cnNpb24gZmllbGQKICAqIGluIHRoZSBAYSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUu
CiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiA3VUwKKyNkZWZpbmUg
RVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiA4VUwKIAogLyoqCiAgKiBJbml0aWFsaXplciBm
b3Igd2hvbGUgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgpAQCAtMTY5LDcgKzE2OSw3
IEBAIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyB7CiAgKiBAc2VlIEVXS19WSUVXX1NNQVJU
X0NMQVNTX0lOSVRfVkVSU0lPTgogICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05B
TUVfVkVSU0lPTgogICovCi0jZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRf
Y2xhc3NfaW5pdCkge3NtYXJ0X2NsYXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJ
T04sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDB9CisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3Nf
aW5pdCkge3NtYXJ0X2NsYXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDB9CiAKIC8qKgogICogSW5pdGlhbGl6ZXIgdG8gemVybyBhIHdob2xlIEV3a19WaWV3X1Nt
YXJ0X0NsYXNzIHN0cnVjdHVyZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2EzNjU3ODJh
NzJkM2I0NThlMTY4NTYwOWZiMzEzYTgxYjNjMGQyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCkBAIC0w
LDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCisKKyNpbmNsdWRlICJXZWJOdW1iZXIu
aCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxF
aW5hLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2Jvb2wgZ2V0V2luZG93RmVhdHVy
ZVZhbHVlKEltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBjb25zdCBjaGFyKiBm
ZWF0dXJlTmFtZSkKK3sKKyAgICBXZWJCb29sZWFuKiBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2Fz
dDxXZWJCb29sZWFuKj4od2luZG93RmVhdHVyZXMtPmdldChmZWF0dXJlTmFtZSkpOworCisgICAg
aWYgKGJvb2xlYW5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZS0+dmFsdWUoKTsK
KworICAgIHJldHVybiAwOworfQorCitkb3VibGUgZ2V0V2luZG93RmVhdHVyZUdlb21ldHJ5KElt
bXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBjb25zdCBjaGFyKiBmZWF0dXJlTmFt
ZSkKK3sKKyAgICBXZWJEb3VibGUqIGRvdWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViRG91Ymxl
Kj4od2luZG93RmVhdHVyZXMtPmdldChmZWF0dXJlTmFtZSkpOworICAgIAorICAgIGlmIChkb3Vi
bGVWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGRvdWJsZVZhbHVlLT52YWx1ZSgpOworCisgICAgcmV0
dXJuIDAKK30KKworRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVzKEltbXV0YWJs
ZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAg
OiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQoreworICAgIGlmICh3aW5kb3dGZWF0dXJlcykgeworICAg
ICAgICBtX3Rvb2xiYXJWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlKHdpbmRvd0ZlYXR1
cmVzLCAidG9vbEJhclZpc2libGUiKTsKKyAgICAgICAgbV9zdGF0dXNiYXJWaXNpYmxlID0gZ2V0
V2luZG93RmVhdHVyZVZhbHVlKHdpbmRvd0ZlYXR1cmVzLCAic3RhdHVzQmFyVmlzaWJsZSIpOwor
ICAgICAgICBtX3Njcm9sbGJhcnNWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlKHdpbmRv
d0ZlYXR1cmVzLCAic2Nyb2xsYmFyc1Zpc2libGUiKTsKKyAgICAgICAgbV9tZW51YmFyVmlzaWJs
ZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZSh3aW5kb3dGZWF0dXJlcywgIm1lbnVCYXJWaXNpYmxl
Iik7CisgICAgICAgIG1fbG9jYXRpb25iYXJWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVl
KHdpbmRvd0ZlYXR1cmVzLCAibG9jYXRpb25CYXJWaXNpYmxlIik7CisgICAgICAgIG1fcmVzaXph
YmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlKHdpbmRvd0ZlYXR1cmVzLCAicmVzaXphYmxlIik7
CisgICAgICAgIG1fZnVsbHNjcmVlbiA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZSh3aW5kb3dGZWF0
dXJlcywgImZ1bGxzY3JlZW4iKTsKKworICAgICAgICBtX2dlb21ldHJ5LnNldFgoZ2V0V2luZG93
RmVhdHVyZUdlb21ldHJ5KHdpbmRvd0ZlYXR1cmVzLCAieCIpKTsKKyAgICAgICAgbV9nZW9tZXRy
eS5zZXRZKGdldFdpbmRvd0ZlYXR1cmVHZW9tZXRyeSh3aW5kb3dGZWF0dXJlcywgInkiKSk7Cisg
ICAgICAgIG1fZ2VvbWV0cnkuc2V0V2lkdGgoZ2V0V2luZG93RmVhdHVyZUdlb21ldHJ5KHdpbmRv
d0ZlYXR1cmVzLCAid2lkdGgiKSk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0SGVpZ2h0KGdldFdp
bmRvd0ZlYXR1cmVHZW9tZXRyeSh3aW5kb3dGZWF0dXJlcywgImhlaWdodCIpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyogY29yZUZlYXR1cmVzID0gbmV3
IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzKCk7CisKKyAgICAgICAgbV90b29sYmFyVmlzaWJsZSA9
IGNvcmVGZWF0dXJlcy0+dG9vbEJhclZpc2libGU7CisgICAgICAgIG1fc3RhdHVzYmFyVmlzaWJs
ZSA9IGNvcmVGZWF0dXJlcy0+c3RhdHVzQmFyVmlzaWJsZTsKKyAgICAgICAgbV9zY3JvbGxiYXJz
VmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+c2Nyb2xsYmFyc1Zpc2libGU7CisgICAgICAgIG1fbWVu
dWJhclZpc2libGUgPSBjb3JlRmVhdHVyZXMtPm1lbnVCYXJWaXNpYmxlOworICAgICAgICBtX2xv
Y2F0aW9uYmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+bG9jYXRpb25CYXJWaXNpYmxlOworICAg
ICAgICBtX3Jlc2l6YWJsZSA9IGNvcmVGZWF0dXJlcy0+cmVzaXphYmxlOworICAgICAgICBtX2Z1
bGxzY3JlZW4gPSBjb3JlRmVhdHVyZXMtPmZ1bGxzY3JlZW47CisKKyAgICAgICAgbV9nZW9tZXRy
eS5zZXRYKGNvcmVGZWF0dXJlcy0+eCk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0WShjb3JlRmVh
dHVyZXMtPnkpOworICAgICAgICBtX2dlb21ldHJ5LnNldFdpZHRoKGNvcmVGZWF0dXJlcy0+d2lk
dGgpOworICAgICAgICBtX2dlb21ldHJ5LnNldEhlaWdodChjb3JlRmVhdHVyZXMtPmhlaWdodCk7
CisgICAgfQorfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc190b29sYmFyX3Zpc2li
bGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcykKK3sKKyAg
ICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2lu
ZG93X2ZlYXR1cmVzLCBpbXBsLCAwKTsKKworICAgIHJldHVybiBpbXBsLT50b29sYmFyVmlzaWJs
ZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJs
ZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQoreworICAg
IEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5k
b3dfZmVhdHVyZXMsIGltcGwsIDApOworCisgICAgcmV0dXJuIGltcGwtPnN0YXR1c2JhclZpc2li
bGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfc2Nyb2xsYmFyc192aXNp
YmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpCit7Cisg
ICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdp
bmRvd19mZWF0dXJlcywgaW1wbCwgMCk7CisKKyAgICByZXR1cm4gaW1wbC0+c2Nyb2xsYmFyc1Zp
c2libGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92aXNp
YmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpCit7Cisg
ICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdp
bmRvd19mZWF0dXJlcywgaW1wbCwgMCk7CisKKyAgICByZXR1cm4gaW1wbC0+bWVudWJhclZpc2li
bGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlz
aWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQorewor
ICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3
aW5kb3dfZmVhdHVyZXMsIGltcGwsIDApOworCisgICAgcmV0dXJuIGltcGwtPmxvY2F0aW9uYmFy
VmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19yZXNpemFibGVf
Z2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcykKK3sKKyAgICBF
V0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2luZG93
X2ZlYXR1cmVzLCBpbXBsLCAwKTsKKworICAgIHJldHVybiBpbXBsLT5yZXNpemFibGUoKTsKK30K
KworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfZnVsbHNjcmVlbl9nZXQoY29uc3QgRXdr
X1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lN
UExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGlt
cGwsIDApOworCisgICAgcmV0dXJuIGltcGwtPmZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBld2tf
d2luZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3
aW5kb3dfZmVhdHVyZXMsIGludCogeCwgaW50KiB5LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkK
K3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0dXJl
cywgd2luZG93X2ZlYXR1cmVzLCBpbXBsKTsKKworICAgIGlmICh4KQorICAgICAgICAqeCA9IHN0
YXRpY19jYXN0PGludD4oaW1wbC0+Z2VvbWV0cnkoKS54KCkpOworCisgICAgaWYgKHkpCisgICAg
ICAgICp5ID0gc3RhdGljX2Nhc3Q8aW50PihpbXBsLT5nZW9tZXRyeSgpLnkoKSk7CisKKyAgICBp
ZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHN0YXRpY19jYXN0PGludD4oaW1wbC0+Z2VvbWV0
cnkoKS53aWR0aCgpKTsKKworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBzdGF0
aWNfY2FzdDxpbnQ+KGltcGwtPmdlb21ldHJ5KCkuaGVpZ2h0KCkpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc5MWUyMWNmMDIwNTJiMmYxMzhmYzAwMjI5MWYxODBiNWM4ZDdkNmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93
X2ZlYXR1cmVzLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoq
CisgKiBAZmlsZSAgICBld2tfd2luZG93X2ZlYXR1cmVzLmgKKyAqIEBicmllZiAgIEFjY2VzcyB0
byB0aGUgZmVhdHVyZXMgb2Ygd2luZG93LgorICovCisKKyNpZm5kZWYgZXdrX3dpbmRvd19mZWF0
dXJlc19oCisjZGVmaW5lIGV3a193aW5kb3dfZmVhdHVyZXNfaAorCisjaW5jbHVkZSA8RWluYS5o
PgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICog
RGVjbGFyZSBFd2tfV2luZG93X0ZlYXR1cmVzIGFzIEV3a19PYmplY3QuCisgKgorICogQHNlZSBF
d2tfT2JqZWN0CisgKi8KK3R5cGVkZWYgc3RydWN0IEV3a19PYmplY3QgRXdrX1dpbmRvd19GZWF0
dXJlczsKKworLyoqCisgKiBRdWVyaWVzIHRoZSB0b29sYmFyIHZpc2liaWxpdHkgb2YgdGhlIHdp
bmRvdyBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0
byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1cm4gVGhlIHByb3BlcnR5IHZhbHVlIHdoaWNo
IGluZGljYXRlcyBpZiB0b29sYmFyIGlzIHZpc2libGUKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdr
X3dpbmRvd19mZWF0dXJlc190b29sYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVh
dHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmllcyB0aGUgc3RhdHVzYmFy
IHZpc2liaWxpdHkgb2YgdGhlIHdpbmRvdyBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSB3aW5kb3df
ZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1cm4gVGhl
IHByb3BlcnR5IHZhbHVlIHdoaWNoIGluZGljYXRlcyBpZiBzdGF0dXNiYXIgaXMgdmlzaWJsZQor
ICovCitFQVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxl
X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioK
KyAqIFF1ZXJpZXMgdGhlIHNjcm9sbGJhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVy
ZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3Bl
cnRpZXMKKyAqCisgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSB2YWx1ZSB3aGljaCBpbmRpY2F0ZXMg
aWYgc2Nyb2xsYmFyIGFyZSB2aXNpYmxlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3df
ZmVhdHVyZXNfc2Nyb2xsYmFyc192aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVz
ICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIG1lbnViYXIgdmlzaWJp
bGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJl
cyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBUaGUgcHJvcGVy
dHkgdmFsdWUgd2hpY2ggaW5kaWNhdGVzIGlmIG1lbnViYXIgaXMgdmlzaWJsZQorICovCitFQVBJ
IEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX21lbnViYXJfdmlzaWJsZV9nZXQoY29uc3Qg
RXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKworLyoqCisgKiBRdWVyaWVz
IHRoZSBsb2NhdGlvbmJhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisg
KiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAq
CisgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSB2YWx1ZSB3aGljaCBpbmRpY2F0ZXMgaWYgbG9jYXRp
b25iYXIgaXMgdmlzaWJsZQorICovCitFQVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVz
X2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRv
d19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmllcyBpZiB0aGUgd2luZG93IGlzIHJlc2l6YWJs
ZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3Bl
cnRpZXMKKyAqCisgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSB2YWx1ZSB3aGljaCBpbmRpY2F0ZXMg
aWYgdGhlIHdpbmRvdyBpcyByZXNpemFibGUKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRv
d19mZWF0dXJlc19yZXNpemFibGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRv
d19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmllcyB0aGUgdGhlIHdpbmRvdyBpcyBmdWxsc2Ny
ZWVuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBwcm9w
ZXJ0aWVzCisgKgorICogQHJldHVybiBUaGUgcHJvcGVydHkgdmFsdWUgd2hpY2ggaW5kaWNhdGVz
IGlmIHRoZSB3aW5kb3cgaXMgZnVsbHNjcmVlbgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfd2lu
ZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndp
bmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogR2V0cyBnZW9tZXRyeSBwcm9wZXJ0aWVzIG9mIGFu
IEV3a19XaW5kb3dfRmVhdHVyZXMuCisgKgorICogUHJvcGVydGllcyBhcmUgcmV0dXJuZWQgaW4g
dGhlIHJlc3BlY3RpdmUgcG9pbnRlcnMuIFBhc3NpbmcgQGMgTlVMTCB0byBhbnkgb2YKKyAqIHRo
ZXNlIHBvaW50ZXJzIHdpbGwgY2F1c2UgdGhhdCBwcm9wZXJ0eSB0byBub3QgYmUgcmV0dXJuZWQu
CisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgd2luZG93J3MgZmVhdHVyZXMKKyAq
IEBwYXJhbSB4IHRoZSBwb2ludGVyIHRvIHN0b3JlIHggcG9zaXRpb24KKyAqIEBwYXJhbSB5IHRo
ZSBwb2ludGVyIHRvIHN0b3JlIHkgcG9zaXRpb24KKyAqIEBwYXJhbSB3IHRoZSBwb2ludGVyIHRv
IHN0b3JlIHdpZHRoCisgKiBAcGFyYW0gaCB0aGUgcG9pbnRlciB0byBzdG9yZSBoZWlnaHQKKyAq
LworRUFQSSB2b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV3a19X
aW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcywgaW50ICp4LCBpbnQgKnksIGludCAqdywg
aW50ICpoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIGV3
a193aW5kb3dfZmVhdHVyZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMDI0MmQxNWYxY2Q1YmNkYzMxYmIwNWJhMDU1ZDFmNjE0OWRiYTQ5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJl
c19wcml2YXRlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNp
Zm5kZWYgZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKKyNkZWZpbmUgZXdrX3dpbmRvd19m
ZWF0dXJlc19wcml2YXRlX2gKKworI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIKKyNp
bmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgImV3a19vYmplY3RfcHJpdmF0ZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitjbGFzcyBFd2tWaWV3SW1wbDsKKworY2xhc3MgRXdrV2luZG93RmVhdHVyZXMgOiBwdWJs
aWMgRXdrX09iamVjdCB7CitwdWJsaWM6CisgICAgRVdLX09CSkVDVF9ERUNMQVJFKEV3a1dpbmRv
d0ZlYXR1cmVzKQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGNy
ZWF0ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZp
ZXdJbXBsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tXaW5kb3dGZWF0
dXJlcyh3aW5kb3dGZWF0dXJlcywgdmlld0ltcGwpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qg
Z2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5OyB9CisgICAgdm9pZCBzZXRHZW9t
ZXRyeShGbG9hdFJlY3QmIGdlb21ldHJ5KSB7IG1fZ2VvbWV0cnkgPSBnZW9tZXRyeTsgfQorCisg
ICAgYm9vbCB0b29sYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9vbGJhclZpc2libGU7
IH0KKyAgICB2b2lkIHNldFRvb2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpIHsgbV90
b29sYmFyVmlzaWJsZSA9IHRvb2xiYXJWaXNpYmxlOyB9CisgICAgYm9vbCBzdGF0dXNiYXJWaXNp
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXNiYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRT
dGF0dXNiYXJWaXNpYmxlKGJvb2wgc3RhdHVzYmFyVmlzaWJsZSkgeyBtX3N0YXR1c2JhclZpc2li
bGUgPSBzdGF0dXNiYXJWaXNpYmxlOyB9CisKKyAgICBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXJzVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xs
YmFyc1Zpc2libGUoYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSkgeyBtX3Njcm9sbGJhcnNWaXNpYmxl
ID0gc2Nyb2xsYmFyc1Zpc2libGU7IH0KKworICAgIGJvb2wgbWVudWJhclZpc2libGUoKSBjb25z
dCB7IHJldHVybiBtX21lbnViYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRNZW51YmFyVmlzaWJs
ZShib29sIG1lbnViYXJWaXNpYmxlKSB7IG1fbWVudWJhclZpc2libGUgPSBtZW51YmFyVmlzaWJs
ZTsgfQorCisgICAgYm9vbCBsb2NhdGlvbmJhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uYmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0TG9jYXRpb25iYXJWaXNpYmxlKGJvb2wg
bG9jYXRpb25iYXJWaXNpYmxlKSB7IG1fbG9jYXRpb25iYXJWaXNpYmxlID0gbG9jYXRpb25iYXJW
aXNpYmxlOyB9CisKKyAgICBib29sIHJlc2l6YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzaXph
YmxlOyB9CisgICAgdm9pZCBzZXRSZXNpemFibGUoYm9vbCByZXNpemFibGUpIHsgbV9yZXNpemFi
bGUgPSByZXNpemFibGU7IH0KKworICAgIGJvb2wgZnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJu
IG1fZnVsbHNjcmVlbjsgfQorICAgIHZvaWQgc2V0RnVsbHNjcmVlbihib29sIGZ1bGxzY3JlZW4p
IHsgbV9mdWxsc2NyZWVuID0gZnVsbHNjcmVlbjsgfQorCitwcml2YXRlOgorICAgIEV3a1dpbmRv
d0ZlYXR1cmVzKEltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1w
bCogdmlld0ltcGwpOworCisgICAgRXdrVmlld0ltcGwqIG1fdmlld0ltcGw7CisKKyAgICBGbG9h
dFJlY3QgbV9nZW9tZXRyeTsKKyAgICBib29sIG1fdG9vbGJhclZpc2libGU7CisgICAgYm9vbCBt
X3N0YXR1c2JhclZpc2libGU7CisgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAgIGJv
b2wgbV9tZW51YmFyVmlzaWJsZTsKKyAgICBib29sIG1fbG9jYXRpb25iYXJWaXNpYmxlOworICAg
IGJvb2wgbV9yZXNpemFibGU7CisgICAgYm9vbCBtX2Z1bGxzY3JlZW47Cit9OworCisjZW5kaWYg
Ly8gZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRv
d19mZWF0dXJlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRhOGVlMWUzNTk4MzcyODhjMDY0MTk5NzQ1ZmE0
OTdmNzI2OTk4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwCkBAIC0wLDAgKzEsMTEx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQy
Lmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0Owor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRGVm
YXVsdFdpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMgKndpbmRvd0ZlYXR1cmVzKQoreworICAgIC8vIGRlZmF1bHQgdmFsZXMgb2Yg
V2ViQ29yZTpXaW5kb3dGZWF0dXJlcygpCisgICAgLy8gLSBtZW51QmFyVmlzaWJsZSh0cnVlKQor
ICAgIC8vIC0gc3RhdHVzQmFyVmlzaWJsZSh0cnVlKQorICAgIC8vIC0gdG9vbEJhclZpc2libGUo
dHJ1ZSkKKyAgICAvLyAtIGxvY2F0aW9uQmFyVmlzaWJsZSh0cnVlKQorICAgIC8vIC0gc2Nyb2xs
YmFyc1Zpc2libGUodHJ1ZSkKKyAgICAvLyAtIHJlc2l6YWJsZSh0cnVlKQorICAgIC8vIC0gZnVs
bHNjcmVlbihmYWxzZSkKKworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfdG9v
bGJhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193
aW5kb3dfZmVhdHVyZXNfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7Cisg
ICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0
KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19t
ZW51YmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdr
X3dpbmRvd19mZWF0dXJlc19sb2NhdGlvbmJhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykp
OworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldCh3aW5k
b3dGZWF0dXJlcykpOworCisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfZnVs
bHNjcmVlbl9nZXQod2luZG93RmVhdHVyZXMpKTsKKworICAgIGludCB4LCB5LCB3aWR0aCwgaGVp
Z2h0OworICAgIGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd0ZlYXR1cmVz
LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBFWFBFQ1RfRVEoMCwgeCk7CisgICAg
RVhQRUNUX0VRKDAsIHkpOworICAgIEVYUEVDVF9FUSgwLCB3aWR0aCk7CisgICAgRVhQRUNUX0VR
KDAsIGhlaWdodCk7CisKKyAgICByZXR1cm4gMDsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJh
c2UsIGV3a193aW5kb3dfZmVhdHVyZXNfZGVmYXVsdF9wcm9wZXJ0eV9nZXQpCit7CisgICAgRXZh
c19PYmplY3QqIHZpZXcgPSB3ZWJWaWV3KCk7CisKKyAgICBjb25zdCBjaGFyKiB3aW5kb3dIVE1M
ID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJyk7XCI+PC9ib2R5Pjwv
aHRtbD4iOworCisgICAgZXdrVmlld0NsYXNzKCktPndpbmRvd19jcmVhdGUgPSBjcmVhdGVEZWZh
dWx0V2luZG93OworCisgICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZCh2aWV3LCB3aW5kb3dI
VE1MLCAwLCAwKTsKKyAgICBBU1NFUlRfVFJVRSh3YWl0VW50aWxMb2FkRmluaXNoZWQoKSk7Cit9
CisKK3N0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlV2luZG93KEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNtYXJ0RGF0YSwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93RmVhdHVyZXMpCit7
CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNpYmxlX2dl
dCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNf
c3RhdHVzYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUo
ZXdrX3dpbmRvd19mZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVz
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxl
X2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9GQUxTRShld2tfd2luZG93X2ZlYXR1
cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNU
X1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19yZXNpemFibGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7
CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfZnVsbHNjcmVlbl9nZXQod2lu
ZG93RmVhdHVyZXMpKTsKKworICAgIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV3a193
aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd0ZlYXR1cmVzLCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCk7CisKKyAgICBFWFBFQ1RfRVEoMTAwLCB4KTsKKyAgICBFWFBFQ1RfRVEoMTUw
LCB5KTsKKyAgICBFWFBFQ1RfRVEoNDAwLCB3aWR0aCk7CisgICAgRVhQRUNUX0VRKDQwMCwgaGVp
Z2h0KTsKKworICAgIHJldHVybiAwOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdr
X3dpbmRvd19mZWF0dXJlc19wcm9wZXJ0eV9nZXQpCit7CisgICAgRXZhc19PYmplY3QqIHZpZXcg
PSB3ZWJWaWV3KCk7CisKKyAgICBjb25zdCBjaGFyKiB3aW5kb3dIVE1MID0gIjxodG1sPjxib2R5
IG9uTG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJywgJ2xlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9NDAw
LGhlaWdodD00MDAsbG9jYXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9eWVzLHRvb2xiYXI9bm8s
c2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyxmdWxsc2NyZWVuPW5vJyk7XCI+PC9ib2R5Pjwv
aHRtbD4iOworCisgICAgZXdrVmlld0NsYXNzKCktPndpbmRvd19jcmVhdGUgPSBjcmVhdGVXaW5k
b3c7CisKKyAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIHdpbmRvd0hUTUwsIDAs
IDApOworICAgIEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAppbmRleCAy
Yjc1MDcxMGY5ZGU0YTdjZTRmODllZDA3NjlmNmU1NzQ1MTg4NTU5Li40MDkyMmE2YTIyNzY5Njkz
Njc0YzI3YzVmMjBiNTJhZGE5YTBlNjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
V0tFdmVudC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiZXdrX2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3By
aXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xv
ci5oPgogCkBAIC00OSw5ICs1MCw5IEBAIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpjbG9zZVBhZ2Uo
V0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogICAgIHRvUGFnZVVJQ2xpZW50RWZs
KGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jbG9zZVBhZ2UoKTsKIH0KIAotV0tQYWdlUmVmIFBh
Z2VVSUNsaWVudEVmbDo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVxdWVzdFJlZiwg
V0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2ZW50
TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitXS1BhZ2VSZWYgUGFnZVVJQ2xp
ZW50RWZsOjpjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rp
b25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNl
QnV0dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJldHVybiB0b1BhZ2VVSUNs
aWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+Y3JlYXRlTmV3UGFnZSh3aW5kb3dGZWF0
dXJlcyk7CisgICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJ
bXBsLT5jcmVhdGVOZXdQYWdlKHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7CiB9CiAKIHZvaWQg
UGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBXS1N0cmluZ1Jl
ZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC03MCw2
ICs3MSw1OCBAQCBXS1N0cmluZ1JlZiBQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRQcm9t
cHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLAogICAgIHJldHVybiB2YWx1ZSA/IFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAKK2Jvb2wgUGFnZVVJ
Q2xpZW50RWZsOjp0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xp
ZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIHJl
dHVybiBmZWF0dXJlcyA/IGZlYXR1cmVzLT50b29sYmFyVmlzaWJsZSgpIDogZmFsc2U7Cit9CisK
K3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRUb29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBi
b29sIHRvb2xiYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dp
bmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5t
X3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIGlmIChmZWF0dXJlcykKKyAgICAgICAg
ZmVhdHVyZXMtPnNldFRvb2xiYXJWaXNpYmxlKHRvb2xiYXJWaXNpYmxlKTsKK30KKworYm9vbCBQ
YWdlVUlDbGllbnRFZmw6Om1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAg
IHJldHVybiBmZWF0dXJlcyA/IGZlYXR1cmVzLT5tZW51YmFyVmlzaWJsZSgpIDogZmFsc2U7Cit9
CisKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwg
Ym9vbCBtZW51YmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tX
aW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+
bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBpZiAoZmVhdHVyZXMpCisgICAgICAg
IGZlYXR1cmVzLT5zZXRNZW51YmFyVmlzaWJsZShtZW51YmFyVmlzaWJsZSk7Cit9CisKK2Jvb2wg
UGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOwor
ICAgIHJldHVybiBmZWF0dXJlcyA/IGZlYXR1cmVzLT5zdGF0dXNiYXJWaXNpYmxlKCkgOiBmYWxz
ZTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZShXS1Bh
Z2VSZWYsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGll
bnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBpZiAoZmVhdHVyZXMp
CisgICAgICAgIGZlYXR1cmVzLT5zZXRTdGF0dXNiYXJWaXNpYmxlKHN0YXR1c2JhclZpc2libGUp
OworfQorCitib29sIFBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9
IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJl
cygpOworICAgIHJldHVybiBmZWF0dXJlcyA/IGZlYXR1cmVzLT5yZXNpemFibGUoKSA6IGZhbHNl
OworfQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0SXNSZXNpemFibGUoV0tQYWdlUmVmLCBi
b29sIHJlc2l6YWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dG
ZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3
SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBpZiAoZmVhdHVyZXMpCisgICAgICAgIGZlYXR1
cmVzLT5zZXRSZXNpemFibGUocmVzaXphYmxlKTsKK30KKwogI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0NPTE9SKQogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnNob3dDb2xvclBpY2tlcihXS1BhZ2VSZWYs
IFdLU3RyaW5nUmVmIGluaXRpYWxDb2xvciwgV0tDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyUmVm
IGxpc3RlbmVyLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewpAQCAtMTQxLDYgKzE5NCwxNCBA
QCBQYWdlVUlDbGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbChFd2tWaWV3SW1wbCogdmlld0ltcGwp
CiAgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdEFsZXJ0ID0gcnVuSmF2YVNjcmlwdEFsZXJ0Owog
ICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRDb25maXJtID0gcnVuSmF2YVNjcmlwdENvbmZpcm07
CiAgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdFByb21wdCA9IHJ1bkphdmFTY3JpcHRQcm9tcHQ7
CisgICAgdWlDbGllbnQudG9vbGJhcnNBcmVWaXNpYmxlID0gdG9vbGJhcnNBcmVWaXNpYmxlOwor
ICAgIHVpQ2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSA9IHNldFRvb2xiYXJzQXJlVmlzaWJs
ZTsKKyAgICB1aUNsaWVudC5tZW51QmFySXNWaXNpYmxlID0gbWVudUJhcklzVmlzaWJsZTsKKyAg
ICB1aUNsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlID0gc2V0TWVudUJhcklzVmlzaWJsZTsKKyAg
ICB1aUNsaWVudC5zdGF0dXNCYXJJc1Zpc2libGUgPSBzdGF0dXNCYXJJc1Zpc2libGU7CisgICAg
dWlDbGllbnQuc2V0U3RhdHVzQmFySXNWaXNpYmxlID0gc2V0U3RhdHVzQmFySXNWaXNpYmxlOwor
ICAgIHVpQ2xpZW50LmlzUmVzaXphYmxlID0gaXNSZXNpemFibGU7CisgICAgdWlDbGllbnQuc2V0
SXNSZXNpemFibGUgPSBzZXRJc1Jlc2l6YWJsZTsKICAgICB1aUNsaWVudC50YWtlRm9jdXMgPSB0
YWtlRm9jdXM7CiAgICAgdWlDbGllbnQuZm9jdXMgPSBmb2N1czsKICAgICB1aUNsaWVudC51bmZv
Y3VzID0gdW5mb2N1czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVVJQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNs
aWVudEVmbC5oCmluZGV4IDJmNTQxOTJhMmFlMGZiNzAzOWUxMmJjOTE0YjY3OGM4MzY3ZjgxNmIu
LmU2ODQxNGFjZmI3NDg4YTNlYjk3ZmZiNDhlNzg0ZTAxMDEwNWFhYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaApAQCAtNTAsNiArNTAsMTQg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVm
LCBXS1N0cmluZ1JlZiwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBib29s
IHJ1bkphdmFTY3JpcHRDb25maXJtKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYs
IGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgV0tTdHJpbmdSZWYgcnVuSmF2YVNjcmlwdFByb21w
dChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS1N0cmluZ1JlZiwgV0tGcmFtZVJlZiwgY29uc3Qg
dm9pZCopOworICAgIHN0YXRpYyBib29sIHRvb2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldFRvb2xiYXJzQXJlVmlz
aWJsZShXS1BhZ2VSZWYsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyBib29sIG1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgc3RhdHVzQmFySXNWaXNp
YmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQg
c2V0U3RhdHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbyk7CisgICAgc3RhdGljIGJvb2wgaXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJc1Jlc2l6YWJsZShXS1BhZ2VSZWYs
IGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NP
TE9SKQogICAgIHN0YXRpYyB2b2lkIHNob3dDb2xvclBpY2tlcihXS1BhZ2VSZWYsIFdLU3RyaW5n
UmVmIGluaXRpYWxDb2xvciwgV0tDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyUmVmLCBjb25zdCB2
b2lkKik7CiAgICAgc3RhdGljIHZvaWQgaGlkZUNvbG9yUGlja2VyKFdLUGFnZVJlZiwgY29uc3Qg
dm9pZCopOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDNjNjVjOWJhMzAxMDA3NTZiYjc5OGE4NmQ2NDA1ZTIyZjExNTdlNDkuLmQyNjA1NmU5ODI4
ZTkyYmU4MjNjYTUwZWRkYWJjNDRiNGEyYTM5MjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMS0xNCAgSmlu
d29vIFNvbmcgIDxqaW53b283LnNvbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0sy
XSBBZGQgRXdrX1dpbmRvd19GZWF0dXJlcyBBUEkgYW5kIHJlbGF0ZWQgVUkgY2FsbGJhY2tzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVk
IHdpbmRvd19jcmVhdGUgYW5kIHdpbmRvd19jbG9zZSBzbWFydGNhbGxiYWNrIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIE1pbmlCcm93c2VyL2VmbC9tYWluLmM6CisgICAgICAgIChvbl93aW5kb3df
Y3JlYXRlKToKKyAgICAgICAgKG9uX3dpbmRvd19jbG9zZSk6CisgICAgICAgICh3aW5kb3dfY3Jl
YXRlKToKKwogMjAxMi0xMS0xNCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IHRoZSBidWlsZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9t
YWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCmluZGV4IDkyZDNmMmZmOWYzZTQy
NmNhNWE4OTcxMzEwYTM4NDU2NmEwNGM4N2QuLmM0ZjNjNzc3ZTAzODVlZThhOTlkZWQ3MDgwMTI1
MGE2ZWJmZDA5ZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwpAQCAtMjg0LDIwICsyODQsNiBAQCBvbl9i
YWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3
a192aWV3LCB2b2lkICpldmVudAogICAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRvdy0+
Zm9yd2FyZF9idXR0b24sICFld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKGV3a192aWV3KSk7CiB9
CiAKLXN0YXRpYyBFdmFzX09iamVjdCoKLW9uX25ld193aW5kb3coRXdrX1ZpZXdfU21hcnRfRGF0
YSAqc2QsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIEJyb3dz
ZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfY3JlYXRlKE5VTEwsIHdpZHRoLCBoZWlnaHQpOwot
ICAgIHdpbmRvd3MgPSBlaW5hX2xpc3RfYXBwZW5kKHdpbmRvd3MsIHdpbmRvdyk7Ci0gICAgcmV0
dXJuIHdpbmRvdy0+ZXdrX3ZpZXc7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9jbG9zZV93aW5kb3co
dm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8p
Ci17Ci0gICAgd2luZG93X2Nsb3NlKChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YSk7Ci19Ci0K
IHN0YXRpYyB2b2lkCiBvbl9wcm9ncmVzcyh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpl
d2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsKQEAgLTMwNyw2ICsyOTMsMzkgQEAgb25fcHJv
Z3Jlc3Modm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50
X2luZm8pCiAgICAgdGl0bGVfc2V0KHdpbmRvdy0+ZWxtX3dpbmRvdywgZXdrX3ZpZXdfdGl0bGVf
Z2V0KHdpbmRvdy0+ZXdrX3ZpZXcpLCBwcm9ncmVzcyAqIDEwMCk7CiB9CiAKK3N0YXRpYyBFdmFz
X09iamVjdCAqCitvbl93aW5kb3dfY3JlYXRlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0
YSwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQoreworICAgIGlu
dCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVp
Z2h0ID0gMDsKKworICAgIGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd19m
ZWF0dXJlcywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgaWYgKCF3aWR0aCkKKyAg
ICAgICAgd2lkdGggPSB3aW5kb3dfd2lkdGg7CisKKyAgICBpZiAoIWhlaWdodCkKKyAgICAgICAg
aGVpZ2h0ID0gd2luZG93X2hlaWdodDsKKworICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3
aW5kb3dfY3JlYXRlKE5VTEwsIHdpZHRoLCBoZWlnaHQpOworICAgIEV2YXNfT2JqZWN0ICpuZXdf
dmlldyA9IHdpbmRvdy0+ZXdrX3ZpZXc7CisKKyAgICB3aW5kb3dzID0gZWluYV9saXN0X2FwcGVu
ZCh3aW5kb3dzLCB3aW5kb3cpOworCisgICAgaW5mbygibWluaWJyb3dzZXI6IGxvY2F0aW9uKCVk
LCVkKSBzaXplPSglZCwlZClcbiIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJu
IG5ld192aWV3OworfQorCitzdGF0aWMgdm9pZCAqCitvbl93aW5kb3dfY2xvc2UoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc21hcnREYXRhKQoreworICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3
aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHNtYXJ0RGF0YS0+c2VsZik7CisgICAgd2luZG93X2Ns
b3NlKHdpbmRvdyk7Cit9CisKIHN0YXRpYyB2b2lkCiBvbl9lcnJvcih2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsKQEAgLTEwMzAsNyAr
MTA0OSw5IEBAIHN0YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0ZShjb25zdCBjaGFy
ICp1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBld2tWaWV3Q2xhc3MtPndpbmRvd19n
ZW9tZXRyeV9zZXQgPSBvbl93aW5kb3dfZ2VvbWV0cnlfc2V0OwogICAgIGV3a1ZpZXdDbGFzcy0+
ZnVsbHNjcmVlbl9lbnRlciA9IG9uX2Z1bGxzY3JlZW5fZW50ZXI7CiAgICAgZXdrVmlld0NsYXNz
LT5mdWxsc2NyZWVuX2V4aXQgPSBvbl9mdWxsc2NyZWVuX2V4aXQ7Ci0gICAgZXdrVmlld0NsYXNz
LT53aW5kb3dfY3JlYXRlX25ldyA9IG9uX25ld193aW5kb3c7CisgICAgZXdrVmlld0NsYXNzLT53
aW5kb3dfY3JlYXRlID0gb25fd2luZG93X2NyZWF0ZTsKKyAgICBld2tWaWV3Q2xhc3MtPndpbmRv
d19jbG9zZSA9IG9uX3dpbmRvd19jbG9zZTsKKwogCiAgICAgRXZhcyAqZXZhcyA9IGV2YXNfb2Jq
ZWN0X2V2YXNfZ2V0KHdpbmRvdy0+ZWxtX3dpbmRvdyk7CiAgICAgRXZhc19TbWFydCAqc21hcnQg
PSBldmFzX3NtYXJ0X2NsYXNzX25ldygmZXdrVmlld0NsYXNzLT5zYyk7CkBAIC0xMDQ3LDcgKzEw
NjgsNiBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3QgY2hhciAq
dXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZXdrX3NldHRpbmdzX3ByZWZlcnJlZF9t
aW5pbXVtX2NvbnRlbnRzX3dpZHRoX3NldChzZXR0aW5ncywgMCk7CiAKICAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImF1dGhlbnRpY2F0aW9uLHJl
cXVlc3QiLCBvbl9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0LCB3aW5kb3cpOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiY2xvc2Usd2luZG93Iiwg
b25fY2xvc2Vfd2luZG93LCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmFpbGVkIiwgb25fZG93bmxvYWRfZmFp
bGVkLCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ct
PmV3a192aWV3LCAiZG93bmxvYWQsZmluaXNoZWQiLCBvbl9kb3dubG9hZF9maW5pc2hlZCwgd2lu
ZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmll
dywgImRvd25sb2FkLHJlcXVlc3QiLCBvbl9kb3dubG9hZF9yZXF1ZXN0LCB3aW5kb3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174611</attachid>
            <date>2012-11-15 23:01:04 -0800</date>
            <delta_ts>2012-11-16 06:05:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121116155858.patch</filename>
            <type>text/plain</type>
            <size>42530</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDAyNGIxZjdhZjk2MWI4
ZTcxMTJmZmYxNzMxN2ZkODExMjExNWQ1Yi4uMTMyN2ViMGRlOGUxYTlhN2QzMzIzNTQxNTRkZmUw
M2I1MzU4ZmM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTExLTE0ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJldHJlaXZlIHRoZSB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IHZhbHVlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaDoKKyAgICAgICAgKEV3a1ZpZXdD
YWxsYmFja3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcDoK
KyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKEV3a1ZpZXdJ
bXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBs
Lmg6CisgICAgICAgIChFd2tWaWV3SW1wbDo6d2luZG93RmVhdHVyZXMpOgorICAgICAgICAoRXdr
Vmlld0ltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAg
KGV3a193aW5kb3dfZmVhdHVyZXNfYm9vbF9wcm9wZXJ0eV9nZXQpOgorICAgICAgICAoZXdrX3dp
bmRvd19mZWF0dXJlc19pbnRfcHJvcGVydHlfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKEV3
a1dpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUpOgor
ICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6Omdlb21ldHJ5KToKKyAgICAgICAgKEV3a1dpbmRv
d0ZlYXR1cmVzOjpzZXRHZW9tZXRyeSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6dG9v
bGJhclZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldFRvb2xiYXJWaXNp
YmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzdGF0dXNiYXJWaXNpYmxlKToKKyAg
ICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRTdGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAg
KEV3a1dpbmRvd0ZlYXR1cmVzOjpzY3JvbGxiYXJzVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5k
b3dGZWF0dXJlczo6c2V0U2Nyb2xsYmFyc1Zpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVh
dHVyZXM6Om1lbnViYXJWaXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRN
ZW51YmFyVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6bG9jYXRpb25iYXJW
aXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRMb2NhdGlvbmJhclZpc2li
bGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnJlc2l6YWJsZSk6CisgICAgICAgIChF
d2tXaW5kb3dGZWF0dXJlczo6c2V0UmVzaXphYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1
cmVzOjpmdWxsc2NyZWVuKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfd2luZG93
X2ZlYXR1cmVzLmNwcDogQWRkZWQgY29ycmVzcG9uZGluZyBBUEkgdGVzdHMuCisgICAgICAgIChX
aW5kb3dfRmVhdHVyZXMpOgorICAgICAgICAoV2luZG93X0ZlYXR1cmVzOjpXaW5kb3dfRmVhdHVy
ZXMpOgorICAgICAgICAoY3JlYXRlV2luZG93KToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAg
ICogVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlVUlDbGllbnRFZmw6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlD
bGllbnRFZmw6OnRvb2xiYXJzQXJlVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldFRvb2xiYXJzQXJlVmlzaWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6bWVudUJhcklzVmlzaWJsZSk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6c2V0TWVudUJhcklzVmlzaWJsZSk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6c3RhdHVzQmFySXNWaXNpYmxlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRTdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OmlzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRJc1Jlc2l6YWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L1BhZ2VVSUNsaWVudEVmbC5oOgorICAgICAgICAoUGFnZVVJQ2xpZW50RWZsKToKKwogMjAxMi0x
MS0xNCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dp
bkNhaXJvXSBCdWlsZCBjb3JyZWN0aW9uIGFmdGVyIHIxMzQ3MDMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IGJiODc0N2IxY2IxZjU4MzhjMmRkN2NjZGRmNzgyOTExZWE2N2MxZTUuLjY3
OWE2YTU3YjRjM2FhMmJhZWRkZTNmMmVlMmY5YTIzOGRlMWVlODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCkBAIC03Myw2ICs3Myw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwog
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVz
LmNwcAogCiAgICAgVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcAogCkBAIC0y
NzksNiArMjgwLDcgQEAgU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmgiCiAgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Nj
aGVtZV9yZXF1ZXN0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5oIgogKQogCiBJTlNUQUxMKEZJ
TEVTICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi9lZmwvZXdlYmtpdDIucGMgREVTVElOQVRJ
T04gbGliL3BrZ2NvbmZpZykKQEAgLTM3Niw2ICszNzgsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19C
SU5BUklFUwogICAgIHRlc3RfZXdrMl9zdG9yYWdlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfdGV4
dF9jaGVja2VyCiAgICAgdGVzdF9ld2syX3ZpZXcKKyAgICB0ZXN0X2V3azJfd2luZG93X2ZlYXR1
cmVzCiApCiAKIElGIChFTkFCTEVfQVBJX1RFU1RTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggMDdjYTEyOTM1MGY0ZWRiN2UzZGI0YmY5MmFkNzBi
OGMzYTIwOWNlNC4uYWRhYWUxZWNkZTUwNjc5Yzk5NWNjOTViZWI3ZDE5YTExODYwZTU1YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC01OCw1ICs1
OCw2IEBACiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgogI2luY2x1ZGUgImV3a191cmxf
c2NoZW1lX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgorI2luY2x1ZGUgImV3a193
aW5kb3dfZmVhdHVyZXMuaCIKIAogI2VuZGlmIC8vIEVXZWJLaXQyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaAppbmRleCA5ODUy
NTk5YTI3ODNhNjFlYTc3YzU3ZGVhZjUyMWIyYzUzNTZmZjM0Li5mMGQ3NTlhMDNkODIwMDdjZjc2
NmYxMWFlZmRmMzI2ZDQ2Y2U0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCkBAIC01Nyw4ICs1Nyw2IEBAIGVudW0gQ2Fs
bGJhY2tUeXBlIHsKICAgICBBdXRoZW50aWNhdGlvblJlcXVlc3QsCiAgICAgQmFja0ZvcndhcmRM
aXN0Q2hhbmdlLAogICAgIENhbmNlbFZpYnJhdGlvbiwKLSAgICBDbG9zZVdpbmRvdywKLSAgICBD
cmVhdGVXaW5kb3csCiAgICAgRG93bmxvYWRKb2JDYW5jZWxsZWQsCiAgICAgRG93bmxvYWRKb2JG
YWlsZWQsCiAgICAgRG93bmxvYWRKb2JGaW5pc2hlZCwKQEAgLTE2NCw4ICsxNjIsNiBAQCBzdHJ1
Y3QgQ2FsbEJhY2tJbmZvPGNhbGxiYWNrVHlwZT4geyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soQXV0aGVudGljYXRpb25SZXF1ZXN0LCAiYXV0
aGVudGljYXRpb24scmVxdWVzdCIsIEV3a19BdXRoX1JlcXVlc3QpOwogREVDTEFSRV9FV0tfVklF
V19DQUxMQkFDSyhCYWNrRm9yd2FyZExpc3RDaGFuZ2UsICJiYWNrLGZvcndhcmQsbGlzdCxjaGFu
Z2VkIiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKENhbmNlbFZpYnJhdGlvbiwg
ImNhbmNlbCx2aWJyYXRpb24iLCB2b2lkKTsKLURFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soQ2xv
c2VXaW5kb3csICJjbG9zZSx3aW5kb3ciLCB2b2lkKTsKLURFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJB
Q0soQ3JlYXRlV2luZG93LCAiY3JlYXRlLHdpbmRvdyIsIEV2YXNfT2JqZWN0Kik7CiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iQ2FuY2VsbGVkLCAiZG93bmxvYWQsY2FuY2Vs
bGVkIiwgRXdrX0Rvd25sb2FkX0pvYik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKERvd25s
b2FkSm9iRmFpbGVkLCAiZG93bmxvYWQsZmFpbGVkIiwgRXdrX0Rvd25sb2FkX0pvYl9FcnJvcik7
CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iRmluaXNoZWQsICJkb3dubG9h
ZCxmaW5pc2hlZCIsIEV3a19Eb3dubG9hZF9Kb2IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmluZGV4IGVjM2YzMjc4MjE5MzVmN2UwZTNm
OTA3YzA3NDg5M2VlNGViNDJiMDIuLmNlYzJmNWVkN2Q0ZjVlODhlYWVmYzg3OGVjY2NlYTk4ZjVl
MjMzZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
SW1wbC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5o
IgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVj
b3JlX0V2YXMuaD4KICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5oPgpAQCAt
ODMwLDM3ICs4MzEsMzcgQEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJMQ2hhbmdlKCkKICAg
ICBpbmZvcm1JY29uQ2hhbmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3SW1wbDo6Y3JlYXRl
TmV3UGFnZShXS0RpY3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMpCitXS1BhZ2VSZWYgRXdrVmll
d0ltcGw6OmNyZWF0ZU5ld1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMp
CiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKICAgICBBU1NF
UlQoc2QtPmFwaSk7CiAKLSAgICBFdmFzX09iamVjdCogbmV3RXdrVmlldyA9IDA7Ci0KLSAgICAv
LyBFeHRyYWN0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGZyb20gdGhlIHdpbmRvdyBhdHRyaWJ1dGVz
IGFuZCBwYXNzIHRoZW0gYWxvbmcgdG8gdGhlIGVtYmVkZGVyLgotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB3aWR0aFN0cihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zygid2lkdGgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodFN0cihBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOwotCi0gICAgV0tU
eXBlUmVmIHJlZiA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkod2luZG93RmVhdHVyZXMsIHdp
ZHRoU3RyLmdldCgpKTsKLSAgICB1bnNpZ25lZCB3aWR0aCA9IHJlZiA/IFdLRG91YmxlR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KHJlZikpIDogMDsKLSAgICByZWYgPSBXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KHdpbmRvd0ZlYXR1cmVzLCBoZWlnaHRTdHIuZ2V0KCkpOwotICAg
IHVuc2lnbmVkIGhlaWdodCA9IHJlZiA/IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KHJlZikpIDogMDsKLQotICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZV9u
ZXcpCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY3JlYXRlKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIGlmICghKG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlX25ldyhzZCwg
d2lkdGgsIGhlaWdodCkpKQorICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gZXdrV2luZG93
RmVhdHVyZXMgPSBFd2tXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKHdpbmRvd0ZlYXR1cmVzLCB0aGlz
KTsKKworICAgIEV2YXNfT2JqZWN0KiBuZXdFd2tWaWV3ID0gc2QtPmFwaS0+d2luZG93X2NyZWF0
ZShzZCwgZXdrV2luZG93RmVhdHVyZXMuZ2V0KCkpOworICAgIGlmICghbmV3RXdrVmlldykKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBFd2tWaWV3SW1wbCogbmV3Vmlld0ltcGwgPSBFd2tWaWV3
SW1wbDo6ZnJvbUV2YXNPYmplY3QobmV3RXdrVmlldyk7CiAgICAgQVNTRVJUKG5ld1ZpZXdJbXBs
KTsKIAorICAgIG5ld1ZpZXdJbXBsLT5tX3dpbmRvd0ZlYXR1cmVzID0gZXdrV2luZG93RmVhdHVy
ZXM7CisKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS1JldGFpbihuZXdWaWV3
SW1wbC0+cGFnZSgpKSk7CiB9CiAKIHZvaWQgRXdrVmlld0ltcGw6OmNsb3NlUGFnZSgpCiB7Ci0g
ICAgc21hcnRDYWxsYmFjazxDbG9zZVdpbmRvdz4oKS5jYWxsKCk7CisgICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CisKKyAgICBp
ZiAoIXNkLT5hcGktPndpbmRvd19jbG9zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2QtPmFw
aS0+d2luZG93X2Nsb3NlKHNkKTsKIH0KIAogdm9pZCBFd2tWaWV3SW1wbDo6b25Nb3VzZURvd24o
dm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgKaW5kZXggNzBhNjYy
MTIyMjA4YmM3ZjQ4NGY5ZTg5YjUzMDgwZGVlMDE5YWM0Mi4uMTlhN2JkOWIxMjdjYTJmOGM4NGU3
ZWI3YjYyMjZhMjcyM2EwN2U2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3SW1wbC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIEV3a1ZpZXdJbXBs
X2gKIAogI2luY2x1ZGUgIkV3a1ZpZXdDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJbW11dGFibGVE
aWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiUmVmUHRyRWZsLmgiCiAjaW5jbHVkZSAiV0tFaW5hU2hh
cmVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgpAQCAtNzYsNiArNzcsNyBAQCBj
bGFzcyBFd2tfQmFja19Gb3J3YXJkX0xpc3Q7CiBjbGFzcyBFd2tfQ29sb3JfUGlja2VyOwogY2xh
c3MgRXdrX1BvcHVwX01lbnU7CiBjbGFzcyBFd2tfU2V0dGluZ3M7CitjbGFzcyBFd2tXaW5kb3dG
ZWF0dXJlczsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHR5cGVkZWYgc3Ry
dWN0IF9FdmFzX0dMX0NvbnRleHQgRXZhc19HTF9Db250ZXh0OwpAQCAtMTAyLDYgKzEwNCw3IEBA
IHB1YmxpYzoKICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0
LmdldCgpOyB9CiAgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGlu
Z3MuZ2V0KCk7IH0KICAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGJhY2tGb3J3YXJkTGlzdCgp
IHsgcmV0dXJuIG1fYmFja0ZvcndhcmRMaXN0LmdldCgpOyB9CisgICAgRXdrV2luZG93RmVhdHVy
ZXMqIHdpbmRvd0ZlYXR1cmVzKCkgeyByZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQoKTsgfQog
CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZvY3VzZWQo
KSBjb25zdDsKQEAgLTE1Niw3ICsxNTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNtaXNzQ29s
b3JQaWNrZXIoKTsKICNlbmRpZgogCi0gICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV0tEaWN0
aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzKTsKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShX
ZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzKTsKICAgICB2b2lkIGNs
b3NlUGFnZSgpOwogCiAgICAgdm9pZCByZXF1ZXN0UG9wdXBNZW51KFdlYktpdDo6V2ViUG9wdXBN
ZW51UHJveHlFZmwqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVj
dGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUG9w
dXBJdGVtPiYgaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7CkBAIC0yNDMsNiArMjQ2LDcg
QEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogI2Vu
ZGlmCiAgICAgT3duUHRyPEV3a19TZXR0aW5ncz4gbV9zZXR0aW5nczsKKyAgICBSZWZQdHI8RXdr
V2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7CiAgICAgY29uc3Qgdm9pZCogbV9jdXJz
b3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0LgogICAg
IFdLRWluYVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5n
IG1fdXJsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5k
ZXggOGEzOTQ2ZWY5YjU3MjVjMDk0ZTVhN2EwYzhkZWQzOGQ3MTJiMWFjOS4uMGU5M2ZiZThjZjhm
NzI2NzgwZGUyZThkMmY1ZTBkMzIyYjRjYjU3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC0zMCw4ICszMCw2IEBACiAgKiAgIGV3a19hdXRoX3Jl
cXVlc3RfcmVmKCkgb24gdGhlIHJlcXVlc3Qgb2JqZWN0IHRvIHByb2Nlc3MgdGhlIGF1dGhlbnRp
Y2F0aW9uIGFzeW5jaHJvbm91c2x5LgogICogLSAiYmFjayxmb3J3YXJkLGxpc3QsY2hhbmdlZCIs
IHZvaWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmlldydzIGJhY2sgLyBmb3J3YXJkIGxpc3QgaGFkIGNo
YW5nZWQuCiAgKiAtICJjYW5jZWwsdmlicmF0aW9uIiwgdm9pZDogcmVxdWVzdCB0byBjYW5jZWwg
dGhlIHZpYnJhdGlvbi4KLSAqIC0gImNsb3NlLHdpbmRvdyIsIHZvaWQ6IHdpbmRvdyBpcyBjbG9z
ZWQuCi0gKiAtICJjcmVhdGUsd2luZG93IiwgRXZhc19PYmplY3QqKjogYSBuZXcgd2luZG93IGlz
IGNyZWF0ZWQuCiAgKiAtICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxvYWRfSm9iKjog
cmVwb3J0cyB0aGF0IGEgZG93bmxvYWQgd2FzIGVmZmVjdGl2ZWx5IGNhbmNlbGxlZC4KICAqIC0g
ImRvd25sb2FkLGZhaWxlZCIsIEV3a19Eb3dubG9hZF9Kb2JfRXJyb3IqOiByZXBvcnRzIHRoYXQg
YSBkb3dubG9hZCBmYWlsZWQgd2l0aCB0aGUgZ2l2ZW4gZXJyb3IuCiAgKiAtICJkb3dubG9hZCxm
aW5pc2hlZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBjb21w
bGV0ZWQgc3VjY2Vzc2Z1bGx5LgpAQCAtOTQsNiArOTIsNyBAQAogI2luY2x1ZGUgImV3a190b3Vj
aC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVz
cG9uc2UuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8RXZh
cy5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE0OCwxNiArMTQ3LDE3IEBAIHN0cnVjdCBF
d2tfVmlld19TbWFydF9DbGFzcyB7CiAgICAgLy8gICAtIFdlYiBkYXRhYmFzZS4KICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgKCpleGNlZWRlZF9kYXRhYmFzZV9xdW90YSkoRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc2QsIGNvbnN0IGNoYXIgKmRhdGFiYXNlTmFtZSwgY29uc3QgY2hhciAqZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBj
dXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2Fn
ZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UpOwogCi0gICAgLy8gbmV3IHdpbmRv
dzoKLSAgICAvLyAgIC0gQ3JlYXRlIGEgbmV3IHdpbmRvdyB3aXRoIHNwZWNpZmllZCBzaXplCi0g
ICAgRXZhc19PYmplY3QqICgqd2luZG93X2NyZWF0ZV9uZXcpKEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCk7CisgICAgLy8gd2luZG93
IGNyZWF0aW9uIGFuZCBjbG9zaW5nOgorICAgIC8vICAgLSBDcmVhdGUgYSBuZXcgd2luZG93IHdp
dGggc3BlY2lmaWVkIGZlYXR1cmVzIGFuZCBjbG9zZSB3aW5kb3cuCisgICAgRXZhc19PYmplY3Qg
Kigqd2luZG93X2NyZWF0ZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisgICAgdm9pZCAoKndpbmRvd19jbG9zZSko
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOwogfTsKIAogLyoqCiAgKiBUaGUgdmVyc2lvbiB5b3Ug
aGF2ZSB0byBwdXQgaW50byB0aGUgdmVyc2lvbiBmaWVsZAogICogaW4gdGhlIEBhIEV3a19WaWV3
X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFT
U19WRVJTSU9OIDdVTAorI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDhVTAog
CiAvKioKICAqIEluaXRpYWxpemVyIGZvciB3aG9sZSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1
Y3R1cmUuCkBAIC0xNjksNyArMTY5LDcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIHsK
ICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9WRVJTSU9OCiAgKiBAc2VlIEVXS19W
SUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OCiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdf
U01BUlRfQ0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdL
X1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KKyNkZWZpbmUgRVdLX1ZJRVdfU01BUlRf
Q0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdf
U01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KIAogLyoqCiAgKiBJbml0aWFsaXplciB0byB6
ZXJvIGEgd2hvbGUgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lZTk0NDJlZjhhOTZiMzI5ZDRkYjVkNjFiNDk0ZGZlOTNlOWY2ZmQwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dp
bmRvd19mZWF0dXJlcy5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIK
KworI2luY2x1ZGUgIldlYk51bWJlci5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNf
cHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
KworRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVzKEltbXV0YWJsZURpY3Rpb25h
cnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAgOiBtX3ZpZXdJ
bXBsKHZpZXdJbXBsKQoreworICAgIEFTU0VSVCh3aW5kb3dGZWF0dXJlcyk7CisgICAgQVNTRVJU
KHZpZXdJbXBsKTsKKworICAgIG1fdG9vbGJhclZpc2libGUgPSBnZXRXaW5kb3dGZWF0dXJlVmFs
dWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVhdHVyZXMsICJ0b29sQmFyVmlzaWJsZSIpOwor
ICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJC
b29sZWFuPih3aW5kb3dGZWF0dXJlcywgInN0YXR1c0JhclZpc2libGUiKTsKKyAgICBtX3Njcm9s
bGJhcnNWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdp
bmRvd0ZlYXR1cmVzLCAic2Nyb2xsYmFyc1Zpc2libGUiKTsKKyAgICBtX21lbnVCYXJWaXNpYmxl
ID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVz
LCAibWVudUJhclZpc2libGUiKTsKKyAgICBtX2xvY2F0aW9uQmFyVmlzaWJsZSA9IGdldFdpbmRv
d0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0dXJlcywgImxvY2F0aW9u
QmFyVmlzaWJsZSIpOworICAgIG1fcmVzaXphYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJv
b2wsIFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCAicmVzaXphYmxlIik7CisgICAgbV9mdWxs
U2NyZWVuID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdpbmRvd0Zl
YXR1cmVzLCAiZnVsbHNjcmVlbiIpOworCisgICAgbV9nZW9tZXRyeS5zZXRYKGdldFdpbmRvd0Zl
YXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRvdWJsZT4od2luZG93RmVhdHVyZXMsICJ4IikpOworICAg
IG1fZ2VvbWV0cnkuc2V0WShnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+
KHdpbmRvd0ZlYXR1cmVzLCAieSIpKTsKKyAgICBtX2dlb21ldHJ5LnNldFdpZHRoKGdldFdpbmRv
d0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRvdWJsZT4od2luZG93RmVhdHVyZXMsICJ3aWR0aCIp
KTsKKyAgICBtX2dlb21ldHJ5LnNldEhlaWdodChnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91Ymxl
LCBXZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVzLCAiaGVpZ2h0IikpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorVDEgRXdrV2luZG93RmVhdHVyZXM6OmdldFdpbmRv
d0ZlYXR1cmVWYWx1ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywgY29uc3Qg
Y2hhciogZmVhdHVyZU5hbWUpCit7CisgICAgVDIqIGZlYXR1cmVWYWx1ZSA9IHN0YXRpY19jYXN0
PFQyKj4od2luZG93RmVhdHVyZXMtPmdldChmZWF0dXJlTmFtZSkpOworCisgICAgaWYgKGZlYXR1
cmVWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZS0+dmFsdWUoKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92
aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7
CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMs
IHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwtPnRvb2xi
YXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jh
cl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMp
Cit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVy
ZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwtPnN0
YXR1c0JhclZpc2libGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfc2Ny
b2xsYmFyc192aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVh
dHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93
RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGlt
cGwtPnNjcm9sbGJhcnNWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1
cmVzX21lbnViYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93
X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dp
bmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKworICAgIHJldHVy
biBpbXBsLT5tZW51QmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0
dXJlc19sb2NhdGlvbmJhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3
aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3Qg
RXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAg
cmV0dXJuIGltcGwtPmxvY2F0aW9uQmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dp
bmRvd19mZWF0dXJlc19yZXNpemFibGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdp
bmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBF
d2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICBy
ZXR1cm4gaW1wbC0+cmVzaXphYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1
cmVzX2Z1bGxzY3JlZW5fZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0
dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dG
ZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICByZXR1cm4gaW1w
bC0+ZnVsbFNjcmVlbigpOworfQorCit2b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlf
Z2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcywgaW50KiB4LCBp
bnQqIHksIGludCogd2lkdGgsIGludCogaGVpZ2h0KQoreworICAgIEVXS19PQkpfR0VUX0lNUExf
T1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwp
OworCisgICAgaWYgKHgpCisgICAgICAgICp4ID0gc3RhdGljX2Nhc3Q8aW50PihpbXBsLT5nZW9t
ZXRyeSgpLngoKSk7CisKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxpbnQ+
KGltcGwtPmdlb21ldHJ5KCkueSgpKTsKKworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRo
ID0gc3RhdGljX2Nhc3Q8aW50PihpbXBsLT5nZW9tZXRyeSgpLndpZHRoKCkpOworCisgICAgaWYg
KGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oaW1wbC0+Z2VvbWV0
cnkoKS5oZWlnaHQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTAyZjU0MTY3YTExYjhh
MmI2MjU0N2JmZDg2MTNjNjUxZWVkYjJlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaApAQCAtMCwwICsxLDEy
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a193aW5kb3df
ZmVhdHVyZXMuaAorICogQGJyaWVmICAgQWNjZXNzIHRvIHRoZSBmZWF0dXJlcyBvZiB3aW5kb3cu
CisgKi8KKworI2lmbmRlZiBld2tfd2luZG93X2ZlYXR1cmVzX2gKKyNkZWZpbmUgZXdrX3dpbmRv
d19mZWF0dXJlc19oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBEZWNsYXJlIEV3a19XaW5kb3dfRmVhdHVy
ZXMgYXMgRXdrX09iamVjdC4KKyAqCisgKiBAc2VlIEV3a19PYmplY3QKKyAqLwordHlwZWRlZiBz
dHJ1Y3QgRXdrX09iamVjdCBFd2tfV2luZG93X0ZlYXR1cmVzOworCisvKioKKyAqIFF1ZXJpZXMg
dGhlIHRvb2xiYXIgdmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBh
cmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICog
QHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2libGUsIEBj
IEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2Zl
YXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2lu
ZG93X2ZlYXR1cmVzKTsKKworLyoqCisgKiBRdWVyaWVzIHRoZSBzdGF0dXNiYXIgdmlzaWJpbGl0
eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0
aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUg
aXMgdGhlIHN0YXR1c2JhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfc3RhdHVzYmFyX3Zp
c2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisK
Ky8qKgorICogUXVlcmllcyB0aGUgc2Nyb2xsYmFyIHZpc2liaWxpdHkgb2YgdGhlIHdpbmRvdyBm
ZWF0dXJlLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQg
cHJvcGVydGllcworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSBzY3JvbGxiYXJz
IHNob3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRUFQSSBF
aW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KGNvbnN0
IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmll
cyB0aGUgbWVudWJhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBA
cGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisg
KiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgbWVudWJhciBzaG91bGQgYmUgdmlzaWJsZSwg
QGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3df
ZmVhdHVyZXNfbWVudWJhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3
aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIGxvY2F0aW9uYmFyIHZpc2li
aWxpdHkgb2YgdGhlIHdpbmRvdyBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVy
ZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9U
UlVFIGlzIHRoZSBsb2NhdGlvbmJhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRp
b25iYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1
cmVzKTsKKworLyoqCisgKiBRdWVyaWVzIGlmIHRoZSB3aW5kb3cgaXMgcmVzaXphYmxlLgorICoK
KyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcwor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB3aW5kb3cgc2hvdWxkIGJlIHJlc2l6
YWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193
aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3
aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIHRoZSB3aW5kb3cgaXMgZnVs
bHNjcmVlbgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQg
cHJvcGVydGllcworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB3aW5kb3cgc2hv
dWxkIGJlIGZ1bGxzY3JlZW4sIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitFQVBJIEVp
bmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogR2V0cyBnZW9tZXRyeSBw
cm9wZXJ0aWVzIG9mIGFuIEV3a19XaW5kb3dfRmVhdHVyZXMuCisgKgorICogUHJvcGVydGllcyBh
cmUgcmV0dXJuZWQgaW4gdGhlIHJlc3BlY3RpdmUgcG9pbnRlcnMuIFBhc3NpbmcgQGMgTlVMTCB0
byBhbnkgb2YKKyAqIHRoZXNlIHBvaW50ZXJzIHdpbGwgY2F1c2UgdGhhdCBwcm9wZXJ0eSB0byBu
b3QgYmUgcmV0dXJuZWQuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgd2luZG93
J3MgZmVhdHVyZXMKKyAqIEBwYXJhbSB4IHRoZSBwb2ludGVyIHRvIHN0b3JlIHggcG9zaXRpb24K
KyAqIEBwYXJhbSB5IHRoZSBwb2ludGVyIHRvIHN0b3JlIHkgcG9zaXRpb24KKyAqIEBwYXJhbSB3
IHRoZSBwb2ludGVyIHRvIHN0b3JlIHdpZHRoCisgKiBAcGFyYW0gaCB0aGUgcG9pbnRlciB0byBz
dG9yZSBoZWlnaHQKKyAqLworRUFQSSB2b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlf
Z2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcywgaW50ICp4LCBp
bnQgKnksIGludCAqdywgaW50ICpoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYK
KworI2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVyZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41NGVmNGJmNzM1NWQyMTQxMWNkNmRlZmRmZDNmYzg2NjJlZWY4Y2Uy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisKKyNpZm5kZWYgZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKKyNkZWZp
bmUgZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKKworI2luY2x1ZGUgIkltbXV0YWJsZURp
Y3Rpb25hcnkuaCIKKyNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgImV3a19v
YmplY3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworY2xhc3MgRXdrVmlld0ltcGw7CisKK2NsYXNzIEV3a1dp
bmRvd0ZlYXR1cmVzIDogcHVibGljIEV3a19PYmplY3QgeworcHVibGljOgorICAgIEVXS19PQkpF
Q1RfREVDTEFSRShFd2tXaW5kb3dGZWF0dXJlcykKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3
a1dpbmRvd0ZlYXR1cmVzPiBjcmVhdGUoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5k
b3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBFd2tXaW5kb3dGZWF0dXJlcyh3aW5kb3dGZWF0dXJlcywgdmlld0ltcGwp
KTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZ2VvbWV0cnkoKSBjb25zdCB7IHJl
dHVybiBtX2dlb21ldHJ5OyB9CisgICAgdm9pZCBzZXRHZW9tZXRyeShXZWJDb3JlOjpGbG9hdFJl
Y3QmIGdlb21ldHJ5KSB7IG1fZ2VvbWV0cnkgPSBnZW9tZXRyeTsgfQorCisgICAgYm9vbCB0b29s
YmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9vbGJhclZpc2libGU7IH0KKyAgICB2b2lk
IHNldFRvb2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpIHsgbV90b29sYmFyVmlzaWJs
ZSA9IHRvb2xiYXJWaXNpYmxlOyB9CisKKyAgICBib29sIHN0YXR1c0JhclZpc2libGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXR1c0JhclZpc2libGU7IH0KKyAgICB2b2lkIHNldFN0YXR1c0JhclZp
c2libGUoYm9vbCBzdGF0dXNCYXJWaXNpYmxlKSB7IG1fc3RhdHVzQmFyVmlzaWJsZSA9IHN0YXR1
c0JhclZpc2libGU7IH0KKworICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbGJhcnNWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxiYXJzVmlzaWJs
ZShib29sIHNjcm9sbGJhcnNWaXNpYmxlKSB7IG1fc2Nyb2xsYmFyc1Zpc2libGUgPSBzY3JvbGxi
YXJzVmlzaWJsZTsgfQorCisgICAgYm9vbCBtZW51QmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVudUJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldE1lbnVCYXJWaXNpYmxlKGJvb2wgbWVu
dUJhclZpc2libGUpIHsgbV9tZW51QmFyVmlzaWJsZSA9IG1lbnVCYXJWaXNpYmxlOyB9CisKKyAg
ICBib29sIGxvY2F0aW9uQmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb25CYXJW
aXNpYmxlOyB9CisgICAgdm9pZCBzZXRMb2NhdGlvbkJhclZpc2libGUoYm9vbCBsb2NhdGlvbkJh
clZpc2libGUpIHsgbV9sb2NhdGlvbkJhclZpc2libGUgPSBsb2NhdGlvbkJhclZpc2libGU7IH0K
KworICAgIGJvb2wgcmVzaXphYmxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNpemFibGU7IH0KKyAg
ICB2b2lkIHNldFJlc2l6YWJsZShib29sIHJlc2l6YWJsZSkgeyBtX3Jlc2l6YWJsZSA9IHJlc2l6
YWJsZTsgfQorCisgICAgYm9vbCBmdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsU2Ny
ZWVuOyB9CisgICAgdm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wgZnVsbFNjcmVlbikgeyBtX2Z1bGxT
Y3JlZW4gPSBmdWxsU2NyZWVuOyB9CisKK3ByaXZhdGU6CisgICAgRXdrV2luZG93RmVhdHVyZXMo
V2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwq
IHZpZXdJbXBsKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAg
IHN0YXRpYyBUMSBnZXRXaW5kb3dGZWF0dXJlVmFsdWUoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9u
YXJ5KiB3aW5kb3dGZWF0dXJlcywgY29uc3QgY2hhciogZmVhdHVyZU5hbWUpOworCisgICAgRXdr
Vmlld0ltcGwqIG1fdmlld0ltcGw7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9nZW9tZXRy
eTsKKyAgICBib29sIG1fdG9vbGJhclZpc2libGU7CisgICAgYm9vbCBtX3N0YXR1c0JhclZpc2li
bGU7CisgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAgIGJvb2wgbV9tZW51QmFyVmlz
aWJsZTsKKyAgICBib29sIG1fbG9jYXRpb25CYXJWaXNpYmxlOworICAgIGJvb2wgbV9yZXNpemFi
bGU7CisgICAgYm9vbCBtX2Z1bGxTY3JlZW47Cit9OworCisjZW5kaWYgLy8gZXdrX3dpbmRvd19m
ZWF0dXJlc19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWU1MDMxMzQ2NjA2YzdkM2IyYzBkYTBjYmY4NGRkYWM5Y2Q3MDcxMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRp
bHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8
RWNvcmUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK3N0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRGVmYXVsdFdpbmRvdyhFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdp
bmRvd0ZlYXR1cmVzKQoreworICAgIC8vIGRlZmF1bHQgdmFsdWVzIG9mIFdlYkNvcmU6V2luZG93
RmVhdHVyZXMoKQorICAgIC8vIC0gbWVudUJhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHN0YXR1
c0JhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHRvb2xCYXJWaXNpYmxlKHRydWUpCisgICAgLy8g
LSBsb2NhdGlvbkJhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHNjcm9sbGJhcnNWaXNpYmxlKHRy
dWUpCisgICAgLy8gLSByZXNpemFibGUodHJ1ZSkKKyAgICAvLyAtIGZ1bGxzY3JlZW4oZmFsc2Up
CisKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9n
ZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVz
X3N0YXR1c2Jhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVF
KGV3a193aW5kb3dfZmVhdHVyZXNfc2Nyb2xsYmFyc192aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJl
cykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxl
X2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVy
ZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1Rf
VFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsK
KworICAgIEVYUEVDVF9GQUxTRShld2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KHdp
bmRvd0ZlYXR1cmVzKSk7CisKKyAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKKyAgICBld2tf
d2luZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldCh3aW5kb3dGZWF0dXJlcywgJngsICZ5LCAmd2lk
dGgsICZoZWlnaHQpOworCisgICAgRVhQRUNUX0VRKDAsIHgpOworICAgIEVYUEVDVF9FUSgwLCB5
KTsKKyAgICBFWFBFQ1RfRVEoMCwgd2lkdGgpOworICAgIEVYUEVDVF9FUSgwLCBoZWlnaHQpOwor
CisgICAgcmV0dXJuIDA7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfd2luZG93
X2ZlYXR1cmVzX2RlZmF1bHRfcHJvcGVydHlfZ2V0KQoreworICAgIEV2YXNfT2JqZWN0KiB2aWV3
ID0gd2ViVmlldygpOworCisgICAgY29uc3QgY2hhciB3aW5kb3dIVE1MW10gPSAiPGh0bWw+PGJv
ZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oJycsICcnKTtcIj48L2JvZHk+PC9odG1sPiI7CisKKyAg
ICBld2tWaWV3Q2xhc3MoKS0+d2luZG93X2NyZWF0ZSA9IGNyZWF0ZURlZmF1bHRXaW5kb3c7CisK
KyAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIHdpbmRvd0hUTUwsIDAsIDApOwor
ICAgIEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsKK30KKworc3RhdGljIEV2
YXNfT2JqZWN0KiBjcmVhdGVXaW5kb3coRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBj
b25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dGZWF0dXJlcykKK3sKKyAgICBFWFBFQ1Rf
RkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc190b29sYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1
cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlz
aWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2Zl
YXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0KHdpbmRvd0Zl
YXR1cmVzKSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25i
YXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2lu
ZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19mdWxsc2NyZWVuX2dldCh3aW5kb3dGZWF0dXJlcykp
OworCisgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgZXdrX3dpbmRvd19mZWF0dXJl
c19nZW9tZXRyeV9nZXQod2luZG93RmVhdHVyZXMsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsK
KworICAgIEVYUEVDVF9FUSgxMDAsIHgpOworICAgIEVYUEVDVF9FUSgxNTAsIHkpOworICAgIEVY
UEVDVF9FUSg0MDAsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEoNDAwLCBoZWlnaHQpOworCisgICAg
cmV0dXJuIDA7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfd2luZG93X2ZlYXR1
cmVzX3Byb3BlcnR5X2dldCkKK3sKKyAgICBFdmFzX09iamVjdCogdmlldyA9IHdlYlZpZXcoKTsK
KworICAgIGNvbnN0IGNoYXIgd2luZG93SFRNTFtdID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIndp
bmRvdy5vcGVuKCcnLCAnJywgJ2xlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9NDAwLGhlaWdodD00MDAs
bG9jYXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9eWVzLHRvb2xiYXI9bm8sc2Nyb2xsYmFycz15
ZXMscmVzaXphYmxlPXllcyxmdWxsc2NyZWVuPW5vJyk7XCI+PC9ib2R5PjwvaHRtbD4iOworCisg
ICAgZXdrVmlld0NsYXNzKCktPndpbmRvd19jcmVhdGUgPSBjcmVhdGVXaW5kb3c7CisKKyAgICBl
d2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIHdpbmRvd0hUTUwsIDAsIDApOworICAgIEFT
U0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAppbmRleCAyYjc1MDcxMGY5ZGU0
YTdjZTRmODllZDA3NjlmNmU1NzQ1MTg4NTU5Li4wY2RhODIxOTNkNTE3OTdjNDFlZmNjNDkwYWI5
YTIyNjMyOWMwMGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Bh
Z2VVSUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
VUlDbGllbnRFZmwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV0tFdmVudC5oIgog
I2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKICNp
bmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogCkBAIC00
OSw5ICs1MCw5IEBAIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpjbG9zZVBhZ2UoV0tQYWdlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQogICAgIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsLT5jbG9zZVBhZ2UoKTsKIH0KIAotV0tQYWdlUmVmIFBhZ2VVSUNsaWVudEVm
bDo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVxdWVzdFJlZiwgV0tEaWN0aW9uYXJ5
UmVmIHdpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24s
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitXS1BhZ2VSZWYgUGFnZVVJQ2xpZW50RWZsOjpjcmVh
dGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYgd2tX
aW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJldHVybiB0b1BhZ2VVSUNsaWVudEVmbChjbGll
bnRJbmZvKS0+bV92aWV3SW1wbC0+Y3JlYXRlTmV3UGFnZSh3aW5kb3dGZWF0dXJlcyk7CisgICAg
cmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jcmVhdGVO
ZXdQYWdlKHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50
RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBhbGVydFRleHQs
IFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC03MCw2ICs3MSw2MiBAQCBX
S1N0cmluZ1JlZiBQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVm
LCBXS1N0cmluZ1JlZiBtZXNzYWdlLAogICAgIHJldHVybiB2YWx1ZSA/IFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjp0
b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVu
dEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJl
cyk7CisgICAgcmV0dXJuIGZlYXR1cmVzLT50b29sYmFyVmlzaWJsZSgpOworfQorCit2b2lkIFBh
Z2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCB0b29s
YmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0
dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1w
bC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIGZlYXR1cmVz
LT5zZXRUb29sYmFyVmlzaWJsZSh0b29sYmFyVmlzaWJsZSk7Cit9CisKK2Jvb2wgUGFnZVVJQ2xp
ZW50RWZsOjptZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVm
bChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQo
ZmVhdHVyZXMpOworICAgIHJldHVybiBmZWF0dXJlcy0+bWVudUJhclZpc2libGUoKTsKK30KKwor
dm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29s
IG1lbnViYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRv
d0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3Zp
ZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisgICAgZmVh
dHVyZXMtPnNldE1lbnVCYXJWaXNpYmxlKG1lbnViYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdl
VUlDbGllbnRFZmw6OnN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlD
bGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAg
QVNTRVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4gZmVhdHVyZXMtPnN0YXR1c0JhclZpc2libGUo
KTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZShXS1Bh
Z2VSZWYsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGll
bnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVy
ZXMpOworICAgIGZlYXR1cmVzLT5zZXRTdGF0dXNCYXJWaXNpYmxlKHN0YXR1c2JhclZpc2libGUp
OworfQorCitib29sIFBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9
IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJl
cygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisgICAgcmV0dXJuIGZlYXR1cmVzLT5yZXNpemFi
bGUoKTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldElzUmVzaXphYmxlKFdLUGFnZVJl
ZiwgYm9vbCByZXNpemFibGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2lu
ZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1f
dmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICBm
ZWF0dXJlcy0+c2V0UmVzaXphYmxlKHJlc2l6YWJsZSk7Cit9CisKICNpZiBFTkFCTEUoSU5QVVRf
VFlQRV9DT0xPUikKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzaG93Q29sb3JQaWNrZXIoV0tQYWdl
UmVmLCBXS1N0cmluZ1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5l
clJlZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKQEAgLTE0MSw2ICsxOTgs
MTQgQEAgUGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwoRXdrVmlld0ltcGwqIHZpZXdJ
bXBsKQogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRBbGVydCA9IHJ1bkphdmFTY3JpcHRBbGVy
dDsKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0Q29uZmlybSA9IHJ1bkphdmFTY3JpcHRDb25m
aXJtOwogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRQcm9tcHQgPSBydW5KYXZhU2NyaXB0UHJv
bXB0OworICAgIHVpQ2xpZW50LnRvb2xiYXJzQXJlVmlzaWJsZSA9IHRvb2xiYXJzQXJlVmlzaWJs
ZTsKKyAgICB1aUNsaWVudC5zZXRUb29sYmFyc0FyZVZpc2libGUgPSBzZXRUb29sYmFyc0FyZVZp
c2libGU7CisgICAgdWlDbGllbnQubWVudUJhcklzVmlzaWJsZSA9IG1lbnVCYXJJc1Zpc2libGU7
CisgICAgdWlDbGllbnQuc2V0TWVudUJhcklzVmlzaWJsZSA9IHNldE1lbnVCYXJJc1Zpc2libGU7
CisgICAgdWlDbGllbnQuc3RhdHVzQmFySXNWaXNpYmxlID0gc3RhdHVzQmFySXNWaXNpYmxlOwor
ICAgIHVpQ2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJsZSA9IHNldFN0YXR1c0JhcklzVmlzaWJs
ZTsKKyAgICB1aUNsaWVudC5pc1Jlc2l6YWJsZSA9IGlzUmVzaXphYmxlOworICAgIHVpQ2xpZW50
LnNldElzUmVzaXphYmxlID0gc2V0SXNSZXNpemFibGU7CiAgICAgdWlDbGllbnQudGFrZUZvY3Vz
ID0gdGFrZUZvY3VzOwogICAgIHVpQ2xpZW50LmZvY3VzID0gZm9jdXM7CiAgICAgdWlDbGllbnQu
dW5mb2N1cyA9IHVuZm9jdXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1BhZ2VVSUNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
VUlDbGllbnRFZmwuaAppbmRleCAyZjU0MTkyYTJhZTBmYjcwMzllMTJiYzkxNGI2NzhjODM2N2Y4
MTZiLi5lNjg0MTRhY2ZiNzQ4OGEzZWI5N2ZmYjQ4ZTc4NGUwMTAxMDVhYWFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKQEAgLTUwLDYgKzUw
LDE0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFn
ZVJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMg
Ym9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1l
UmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIFdLU3RyaW5nUmVmIHJ1bkphdmFTY3JpcHRQ
cm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNv
bnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgYm9vbCB0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRUb29sYmFyc0Fy
ZVZpc2libGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBz
dGF0aWMgYm9vbCBtZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0TWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJv
b2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIHN0YXR1c0Jhcklz
VmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2
b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzUmVzaXphYmxlKFdLUGFnZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0SXNSZXNpemFibGUoV0tQYWdl
UmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKICNpZiBFTkFCTEUoSU5QVVRfVFlQ
RV9DT0xPUikKICAgICBzdGF0aWMgdm9pZCBzaG93Q29sb3JQaWNrZXIoV0tQYWdlUmVmLCBXS1N0
cmluZ1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJlZiwgY29u
c3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIGhpZGVDb2xvclBpY2tlcihXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAzYzY1YzliYTMwMTAwNzU2YmI3OThhODZkNjQwNWUyMmYxMTU3ZTQ5Li5kMjYwNTZl
OTgyOGU5MmJlODIzY2E1MGVkZGFiYzQ0YjRhMmEzOTI0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTEtMTQg
IEppbndvbyBTb25nICA8amlud29vNy5zb25nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxd
W1dLMl0gQWRkIEV3a19XaW5kb3dfRmVhdHVyZXMgQVBJIGFuZCByZWxhdGVkIFVJIGNhbGxiYWNr
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkxMTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnRlZCB3aW5kb3dfY3JlYXRlIGFuZCB3aW5kb3dfY2xvc2Ugc21hcnRjYWxsYmFjayBmdW5jdGlv
bnMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9lZmwvbWFpbi5jOgorICAgICAgICAob25fd2lu
ZG93X2NyZWF0ZSk6CisgICAgICAgIChvbl93aW5kb3dfY2xvc2UpOgorICAgICAgICAod2luZG93
X2NyZWF0ZSk6CisKIDIwMTItMTEtMTQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCB0aGUgYnVpbGQuCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9l
ZmwvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCA5MmQzZjJmZjlm
M2U0MjZjYTVhODk3MTMxMGEzODQ1NjZhMDRjODdkLi5kMTk1MThkYTIzNDA3YjY3YWMwYTE4MDg2
YzUxOWM5ODk3N2M0MzI2IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5j
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKQEAgLTI4NCwyMCArMjg0LDYgQEAg
b25fYmFja19mb3J3YXJkX2xpc3RfY2hhbmdlZCh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0
ICpld2tfdmlldywgdm9pZCAqZXZlbnQKICAgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldCh3aW5k
b3ctPmZvcndhcmRfYnV0dG9uLCAhZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShld2tfdmlldykp
OwogfQogCi1zdGF0aWMgRXZhc19PYmplY3QqCi1vbl9uZXdfd2luZG93KEV3a19WaWV3X1NtYXJ0
X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKLXsKLSAgICBC
cm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICB3aW5kb3dzID0gZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCB3aW5kb3cpOwotICAg
IHJldHVybiB3aW5kb3ctPmV3a192aWV3OwotfQotCi1zdGF0aWMgdm9pZAotb25fY2xvc2Vfd2lu
ZG93KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9p
bmZvKQotewotICAgIHdpbmRvd19jbG9zZSgoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGEpOwot
fQotCiBzdGF0aWMgdm9pZAogb25fcHJvZ3Jlc3Modm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVj
dCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7CkBAIC03NjMsNiArNzQ5LDM5IEBAIHN0
YXRpYyBFaW5hX0Jvb2wgb25fZnVsbHNjcmVlbl9leGl0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
KQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKK3N0YXRpYyBFdmFzX09iamVjdCAqCitvbl93
aW5kb3dfY3JlYXRlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgY29uc3QgRXdrX1dp
bmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQoreworICAgIGludCB4ID0gMDsKKyAgICBp
bnQgeSA9IDA7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKworICAg
IGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd19mZWF0dXJlcywgJngsICZ5
LCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgd2lkdGggPSB3
aW5kb3dfd2lkdGg7CisKKyAgICBpZiAoIWhlaWdodCkKKyAgICAgICAgaGVpZ2h0ID0gd2luZG93
X2hlaWdodDsKKworICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfY3JlYXRlKE5V
TEwsIHdpZHRoLCBoZWlnaHQpOworICAgIEV2YXNfT2JqZWN0ICpuZXdfdmlldyA9IHdpbmRvdy0+
ZXdrX3ZpZXc7CisKKyAgICB3aW5kb3dzID0gZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCB3aW5k
b3cpOworCisgICAgaW5mbygibWluaWJyb3dzZXI6IGxvY2F0aW9uKCVkLCVkKSBzaXplPSglZCwl
ZClcbiIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIG5ld192aWV3OworfQor
CitzdGF0aWMgdm9pZAorb25fd2luZG93X2Nsb3NlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0
RGF0YSkKK3sKKyAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9l
d2tfdmlldyhzbWFydERhdGEtPnNlbGYpOworICAgIHdpbmRvd19jbG9zZSh3aW5kb3cpOworfQor
CiBzdGF0aWMgdm9pZAogYXV0aF9wb3B1cF9jbG9zZShBdXRoX0RhdGEgKmF1dGhfZGF0YSkKIHsK
QEAgLTEwMzAsNyArMTA0OSw5IEBAIHN0YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0
ZShjb25zdCBjaGFyICp1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBld2tWaWV3Q2xh
c3MtPndpbmRvd19nZW9tZXRyeV9zZXQgPSBvbl93aW5kb3dfZ2VvbWV0cnlfc2V0OwogICAgIGV3
a1ZpZXdDbGFzcy0+ZnVsbHNjcmVlbl9lbnRlciA9IG9uX2Z1bGxzY3JlZW5fZW50ZXI7CiAgICAg
ZXdrVmlld0NsYXNzLT5mdWxsc2NyZWVuX2V4aXQgPSBvbl9mdWxsc2NyZWVuX2V4aXQ7Ci0gICAg
ZXdrVmlld0NsYXNzLT53aW5kb3dfY3JlYXRlX25ldyA9IG9uX25ld193aW5kb3c7CisgICAgZXdr
Vmlld0NsYXNzLT53aW5kb3dfY3JlYXRlID0gb25fd2luZG93X2NyZWF0ZTsKKyAgICBld2tWaWV3
Q2xhc3MtPndpbmRvd19jbG9zZSA9IG9uX3dpbmRvd19jbG9zZTsKKwogCiAgICAgRXZhcyAqZXZh
cyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHdpbmRvdy0+ZWxtX3dpbmRvdyk7CiAgICAgRXZhc19T
bWFydCAqc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmZXdrVmlld0NsYXNzLT5zYyk7CkBA
IC0xMDQ3LDcgKzEwNjgsNiBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUo
Y29uc3QgY2hhciAqdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZXdrX3NldHRpbmdz
X3ByZWZlcnJlZF9taW5pbXVtX2NvbnRlbnRzX3dpZHRoX3NldChzZXR0aW5ncywgMCk7CiAKICAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImF1dGhl
bnRpY2F0aW9uLHJlcXVlc3QiLCBvbl9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0LCB3aW5kb3cpOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiY2xv
c2Usd2luZG93Iiwgb25fY2xvc2Vfd2luZG93LCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmFpbGVkIiwgb25f
ZG93bmxvYWRfZmFpbGVkLCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmluaXNoZWQiLCBvbl9kb3dubG9hZF9m
aW5pc2hlZCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2lu
ZG93LT5ld2tfdmlldywgImRvd25sb2FkLHJlcXVlc3QiLCBvbl9kb3dubG9hZF9yZXF1ZXN0LCB3
aW5kb3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174663</attachid>
            <date>2012-11-16 06:05:50 -0800</date>
            <delta_ts>2012-11-18 20:06:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121116230343.patch</filename>
            <type>text/plain</type>
            <size>46865</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDAyNGIxZjdhZjk2MWI4
ZTcxMTJmZmYxNzMxN2ZkODExMjExNWQ1Yi4uMzkxOTBhZTIwMjVmYThkNWU3MWUxZmFiNWE1MmM2
YzE1YTFhNWJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTExLTE2ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IHZhbHVlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxiYWNrcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwOgorICAgICAgICAoRXdrVmll
d0ltcGw6OndpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQ
YWdlKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmg6CisgICAgICAgIChFd2tWaWV3SW1wbCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcDogQWRkZWQuCisgICAgICAgIChFd2tXaW5k
b3dGZWF0dXJlczo6RXdrV2luZG93RmVhdHVyZXMpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVy
ZXM6OmdldFdpbmRvd0ZlYXR1cmVWYWx1ZSk6CisgICAgICAgIChld2tfd2luZG93X2ZlYXR1cmVz
X3Rvb2xiYXJfdmlzaWJsZV9nZXQpOgorICAgICAgICAoZXdrX3dpbmRvd19mZWF0dXJlc19zdGF0
dXNiYXJfdmlzaWJsZV9nZXQpOgorICAgICAgICAoZXdrX3dpbmRvd19mZWF0dXJlc19zY3JvbGxi
YXJzX3Zpc2libGVfZ2V0KToKKyAgICAgICAgKGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92
aXNpYmxlX2dldCk6CisgICAgICAgIChld2tfd2luZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zp
c2libGVfZ2V0KToKKyAgICAgICAgKGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldCk6
CisgICAgICAgIChld2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KToKKyAgICAgICAg
KGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAg
KEV3a1dpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUp
OgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6Omdlb21ldHJ5KToKKyAgICAgICAgKEV3a1dp
bmRvd0ZlYXR1cmVzOjpzZXRHZW9tZXRyeSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6
dG9vbGJhclZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldFRvb2xiYXJW
aXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzdGF0dXNCYXJWaXNpYmxlKToK
KyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRTdGF0dXNCYXJWaXNpYmxlKToKKyAgICAg
ICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzY3JvbGxiYXJzVmlzaWJsZSk6CisgICAgICAgIChFd2tX
aW5kb3dGZWF0dXJlczo6c2V0U2Nyb2xsYmFyc1Zpc2libGUpOgorICAgICAgICAoRXdrV2luZG93
RmVhdHVyZXM6Om1lbnVCYXJWaXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpz
ZXRNZW51QmFyVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6bG9jYXRpb25C
YXJWaXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRMb2NhdGlvbkJhclZp
c2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnJlc2l6YWJsZSk6CisgICAgICAg
IChFd2tXaW5kb3dGZWF0dXJlczo6c2V0UmVzaXphYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0Zl
YXR1cmVzOjpmdWxsU2NyZWVuKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRGdWxs
U2NyZWVuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfd2lu
ZG93X2ZlYXR1cmVzLmNwcDogQWRkZWQuCisgICAgICAgIChjcmVhdGVEZWZhdWx0V2luZG93KToK
KyAgICAgICAgKFRFU1RfRik6CisgICAgICAgIChjcmVhdGVXaW5kb3cpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJ
Q2xpZW50RWZsOjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50
RWZsOjp0b29sYmFyc0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRUb29sYmFyc0FyZVZpc2libGUpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6Om1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldE1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVUlDbGllbnRFZmw6OnN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VVSUNsaWVudEVmbDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVVJQ2xpZW50RWZsOjppc1Jlc2l6YWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6c2V0SXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlD
bGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdl
VUlDbGllbnRFZmwuaDoKKyAgICAgICAgKFBhZ2VVSUNsaWVudEVmbCk6CisKIDIwMTItMTEtMTQg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXaW5DYWly
b10gQnVpbGQgY29ycmVjdGlvbiBhZnRlciByMTM0NzAzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBiYjg3NDdiMWNiMWY1ODM4YzJkZDdjY2RkZjc4MjkxMWVhNjdjMWU1Li42NzlhNmE1
N2I0YzNhYTJiYWVkZGUzZjJlZTJmOWEyMzhkZTFlZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQpAQCAtNzMsNiArNzMsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAK
IAogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKIApAQCAtMjc5LDYg
KzI4MCw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oIgogICAgICIke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVf
cmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXcuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaCIKICkKIAogSU5TVEFMTChGSUxFUyAk
e0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDIvZWZsL2V3ZWJraXQyLnBjIERFU1RJTkFUSU9OIGxp
Yi9wa2djb25maWcpCkBAIC0zNzYsNiArMzc4LDcgQEAgU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJ
RVMKICAgICB0ZXN0X2V3azJfc3RvcmFnZV9tYW5hZ2VyCiAgICAgdGVzdF9ld2syX3RleHRfY2hl
Y2tlcgogICAgIHRlc3RfZXdrMl92aWV3CisgICAgdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcwog
KQogCiBJRiAoRU5BQkxFX0FQSV9URVNUUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCmluZGV4IDA3Y2ExMjkzNTBmNGVkYjdlM2RiNGJmOTJhZDcwYjhjM2Ey
MDljZTQuLmFkYWFlMWVjZGU1MDY3OWM5OTVjYzk1YmViN2QxOWExMTg2MGU1NWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtNTgsNSArNTgsNiBA
QAogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVt
ZV9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKKyNpbmNsdWRlICJld2tfd2luZG93
X2ZlYXR1cmVzLmgiCiAKICNlbmRpZiAvLyBFV2ViS2l0Ml9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKaW5kZXggOTg1MjU5OWEy
NzgzYTYxZWE3N2M1N2RlYWY1MjFiMmM1MzU2ZmYzNC4uYTYzYTg1OWE4NzdiNTMxN2EwMjYwNDlk
MTQ3OWNlZWI0NDRlYjc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApAQCAtNTcsOCArNTcsNiBAQCBlbnVtIENhbGxiYWNr
VHlwZSB7CiAgICAgQXV0aGVudGljYXRpb25SZXF1ZXN0LAogICAgIEJhY2tGb3J3YXJkTGlzdENo
YW5nZSwKICAgICBDYW5jZWxWaWJyYXRpb24sCi0gICAgQ2xvc2VXaW5kb3csCi0gICAgQ3JlYXRl
V2luZG93LAogICAgIERvd25sb2FkSm9iQ2FuY2VsbGVkLAogICAgIERvd25sb2FkSm9iRmFpbGVk
LAogICAgIERvd25sb2FkSm9iRmluaXNoZWQsCkBAIC02OSw2ICs2Nyw3IEBAIGVudW0gQ2FsbGJh
Y2tUeXBlIHsKICAgICBMb2FkRXJyb3IsCiAgICAgTG9hZEZpbmlzaGVkLAogICAgIExvYWRQcm9n
cmVzcywKKyAgICBNZW51QmFyVmlzaWJsZSwKICAgICBQcm92aXNpb25hbExvYWRGYWlsZWQsCiAg
ICAgUHJvdmlzaW9uYWxMb2FkUmVkaXJlY3QsCiAgICAgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwK
QEAgLTc3LDE1ICs3NiwxOCBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgUmVzb3VyY2VMb2Fk
RmFpbGVkLAogICAgIFJlc291cmNlTG9hZEZpbmlzaGVkLAogICAgIFJlc291cmNlUmVxdWVzdFNl
bnQsCisgICAgU3RhdHVzQmFyVmlzaWJsZSwKICAgICBOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24s
CiAgICAgTmV3V2luZG93UG9saWN5RGVjaXNpb24sCiAgICAgVGV4dEZvdW5kLAogICAgIFRpdGxl
Q2hhbmdlLAorICAgIFRvb2xiYXJWaXNpYmxlLAogICAgIFRvb2x0aXBUZXh0VW5zZXQsCiAgICAg
VG9vbHRpcFRleHRTZXQsCiAgICAgVVJMQ2hhbmdlZCwKICAgICBWaWJyYXRlLAogICAgIFdlYlBy
b2Nlc3NDcmFzaGVkLAorICAgIFdpbmRvd1Jlc2l6YWJsZSwKICNpZiBFTkFCTEUoV0VCX0lOVEVO
VFMpCiAgICAgSW50ZW50UmVxdWVzdCwKICNlbmRpZgpAQCAtMTY0LDggKzE2Niw2IEBAIHN0cnVj
dCBDYWxsQmFja0luZm88Y2FsbGJhY2tUeXBlPiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhBdXRoZW50aWNhdGlvblJlcXVlc3QsICJhdXRo
ZW50aWNhdGlvbixyZXF1ZXN0IiwgRXdrX0F1dGhfUmVxdWVzdCk7CiBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKEJhY2tGb3J3YXJkTGlzdENoYW5nZSwgImJhY2ssZm9yd2FyZCxsaXN0LGNoYW5n
ZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soQ2FuY2VsVmlicmF0aW9uLCAi
Y2FuY2VsLHZpYnJhdGlvbiIsIHZvaWQpOwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhDbG9z
ZVdpbmRvdywgImNsb3NlLHdpbmRvdyIsIHZvaWQpOwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFD
SyhDcmVhdGVXaW5kb3csICJjcmVhdGUsd2luZG93IiwgRXZhc19PYmplY3QqKTsKIERFQ0xBUkVf
RVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JDYW5jZWxsZWQsICJkb3dubG9hZCxjYW5jZWxs
ZWQiLCBFd2tfRG93bmxvYWRfSm9iKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxv
YWRKb2JGYWlsZWQsICJkb3dubG9hZCxmYWlsZWQiLCBFd2tfRG93bmxvYWRfSm9iX0Vycm9yKTsK
IERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JGaW5pc2hlZCwgImRvd25sb2Fk
LGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pvYik7CkBAIC0xNzksNiArMTc5LDcgQEAgREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jlc3MsICJsb2FkLHByb2dyZXNzIiwgZG91Ymxl
KTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkRmFpbGVkLCAibG9h
ZCxwcm92aXNpb25hbCxmYWlsZWQiLCBFd2tfRXJyb3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxM
QkFDSyhQcm92aXNpb25hbExvYWRSZWRpcmVjdCwgImxvYWQscHJvdmlzaW9uYWwscmVkaXJlY3Qi
LCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCwgImxvYWQscHJvdmlzaW9uYWwsc3RhcnRlZCIsIHZvaWQpOworREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhNZW51QmFyVmlzaWJsZSwgIm1lbnViYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVj
aXNpb24sbmF2aWdhdGlvbiIsIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNM
QVJFX0VXS19WSUVXX0NBTExCQUNLKE5ld1dpbmRvd1BvbGljeURlY2lzaW9uLCAicG9saWN5LGRl
Y2lzaW9uLG5ldyx3aW5kb3ciLCBFd2tfTmF2aWdhdGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRTdGFydGVkLCAicmVzb3VyY2UscmVx
dWVzdCxuZXciLCBFd2tfUmVzb3VyY2VfUmVxdWVzdCk7CkBAIC0xODYsMTMgKzE4NywxNiBAQCBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291cmNlTG9hZFJlc3BvbnNlLCAicmVzb3VyY2Us
cmVxdWVzdCxyZXNwb25zZSIsIEV3awogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJj
ZUxvYWRGYWlsZWQsICJyZXNvdXJjZSxyZXF1ZXN0LGZhaWxlZCIsIEV3a19SZXNvdXJjZV9Mb2Fk
X0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkRmluaXNoZWQs
ICJyZXNvdXJjZSxyZXF1ZXN0LGZpbmlzaGVkIiwgRXdrX1Jlc291cmNlKTsKIERFQ0xBUkVfRVdL
X1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VSZXF1ZXN0U2VudCwgInJlc291cmNlLHJlcXVlc3Qsc2Vu
dCIsIEV3a19SZXNvdXJjZV9SZXF1ZXN0KTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soU3Rh
dHVzQmFyVmlzaWJsZSwgInN0YXR1c2Jhcix2aXNpYmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19W
SUVXX0NBTExCQUNLKFRleHRGb3VuZCwgInRleHQsZm91bmQiLCB1bnNpZ25lZCk7CiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKFRpdGxlQ2hhbmdlLCAidGl0bGUsY2hhbmdlZCIsIGNoYXIpOwor
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sYmFyVmlzaWJsZSwgInRvb2xiYXIsdmlzaWJs
ZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sdGlwVGV4dFVuc2V0LCAi
dG9vbHRpcCx0ZXh0LHVuc2V0Iiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRv
b2x0aXBUZXh0U2V0LCAidG9vbHRpcCx0ZXh0LHNldCIsIGNoYXIpOwogREVDTEFSRV9FV0tfVklF
V19DQUxMQkFDSyhVUkxDaGFuZ2VkLCAidXJsLGNoYW5nZWQiLCBjaGFyKTsKIERFQ0xBUkVfRVdL
X1ZJRVdfQ0FMTEJBQ0soVmlicmF0ZSwgInZpYnJhdGUiLCB1aW50NjRfdCk7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFzaGVkLCAid2VicHJvY2VzcyxjcmFzaGVkIiwg
Ym9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdpbmRvd1Jlc2l6YWJsZSwgIndpbmRv
dyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3QsICJpbnRlbnQscmVxdWVzdCxuZXciLCBFd2tf
SW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlld0ltcGwuY3BwCmluZGV4IGVjM2YzMjc4MjE5MzVmN2UwZTNmOTA3YzA3NDg5M2VlNGVi
NDJiMDIuLjk5MzU3NGM2YTYwNTY1ZWY5ZTcyMDgwNjNjYTk4YWExNGE4NjhiNTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKQEAgLTU0
LDYgKzU0LDcgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3
a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNp
bmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5oPgpAQCAtODMwLDM3ICs4MzEsNDUg
QEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJMQ2hhbmdlKCkKICAgICBpbmZvcm1JY29uQ2hh
bmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3SW1wbDo6Y3JlYXRlTmV3UGFnZShXS0RpY3Rp
b25hcnlSZWYgd2luZG93RmVhdHVyZXMpCitFd2tXaW5kb3dGZWF0dXJlcyogRXdrVmlld0ltcGw6
OndpbmRvd0ZlYXR1cmVzKCkKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0
RGF0YSgpOwotICAgIEFTU0VSVChzZC0+YXBpKTsKKyAgICBpZiAoIW1fd2luZG93RmVhdHVyZXMp
CisgICAgICAgIG1fd2luZG93RmVhdHVyZXMgPSBFd2tXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKDAp
OwogCi0gICAgRXZhc19PYmplY3QqIG5ld0V3a1ZpZXcgPSAwOwotCi0gICAgLy8gRXh0cmFjdCB0
aGUgd2lkdGggYW5kIGhlaWdodCBmcm9tIHRoZSB3aW5kb3cgYXR0cmlidXRlcyBhbmQgcGFzcyB0
aGVtIGFsb25nIHRvIHRoZSBlbWJlZGRlci4KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
d2lkdGhTdHIoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWlnaHRTdHIoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKKyAgICByZXR1cm4gbV93aW5kb3dG
ZWF0dXJlcy5nZXQoKTsKK30KIAotICAgIFdLVHlwZVJlZiByZWYgPSBXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KHdpbmRvd0ZlYXR1cmVzLCB3aWR0aFN0ci5nZXQoKSk7Ci0gICAgdW5zaWduZWQg
d2lkdGggPSByZWYgPyBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihy
ZWYpKSA6IDA7Ci0gICAgcmVmID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3aW5kb3dGZWF0
dXJlcywgaGVpZ2h0U3RyLmdldCgpKTsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSByZWYgPyBXS0Rv
dWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7CitXS1BhZ2VS
ZWYgRXdrVmlld0ltcGw6OmNyZWF0ZU5ld1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93
RmVhdHVyZXMpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsK
KyAgICBBU1NFUlQoc2QtPmFwaSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGVf
bmV3KQorICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBpZiAoIShuZXdFd2tWaWV3ID0gc2QtPmFwaS0+d2luZG93X2NyZWF0ZV9uZXcoc2Qs
IHdpZHRoLCBoZWlnaHQpKSkKKyAgICBSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGV3a1dpbmRv
d0ZlYXR1cmVzID0gRXdrV2luZG93RmVhdHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcyk7CisK
KyAgICBFdmFzX09iamVjdCogbmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGUoc2Qs
IGV3a1dpbmRvd0ZlYXR1cmVzLmdldCgpKTsKKyAgICBpZiAoIW5ld0V3a1ZpZXcpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgRXdrVmlld0ltcGwqIG5ld1ZpZXdJbXBsID0gRXdrVmlld0ltcGw6
OmZyb21FdmFzT2JqZWN0KG5ld0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAK
KyAgICBuZXdWaWV3SW1wbC0+bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOwor
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4obmV3Vmlld0ltcGwt
PnBhZ2UoKSkpOwogfQogCiB2b2lkIEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UoKQogewotICAgIHNt
YXJ0Q2FsbGJhY2s8Q2xvc2VXaW5kb3c+KCkuY2FsbCgpOworICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFz
ZC0+YXBpLT53aW5kb3dfY2xvc2UpCisgICAgICAgIHJldHVybjsKKworICAgIHNkLT5hcGktPndp
bmRvd19jbG9zZShzZCk7CiB9CiAKIHZvaWQgRXdrVmlld0ltcGw6Om9uTW91c2VEb3duKHZvaWQq
IGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oCmluZGV4IDcwYTY2MjEyMjIw
OGJjN2Y0ODRmOWU4OWI1MzA4MGRlZTAxOWFjNDIuLjNmNmY4NGVmNDk3ODBlNTA5ODBjNjI4MzM2
YTk5ODI3ZDhiOWE0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlld0ltcGwuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBFd2tWaWV3SW1wbF9oCiAK
ICNpbmNsdWRlICJFd2tWaWV3Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlv
bmFyeS5oIgogI2luY2x1ZGUgIlJlZlB0ckVmbC5oIgogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0
cmluZy5oIgogI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKQEAgLTc2LDYgKzc3LDcgQEAgY2xhc3Mg
RXdrX0JhY2tfRm9yd2FyZF9MaXN0OwogY2xhc3MgRXdrX0NvbG9yX1BpY2tlcjsKIGNsYXNzIEV3
a19Qb3B1cF9NZW51OwogY2xhc3MgRXdrX1NldHRpbmdzOworY2xhc3MgRXdrV2luZG93RmVhdHVy
ZXM7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB0eXBlZGVmIHN0cnVjdCBf
RXZhc19HTF9Db250ZXh0IEV2YXNfR0xfQ29udGV4dDsKQEAgLTEwMiw2ICsxMDQsNyBAQCBwdWJs
aWM6CiAgICAgRXdrQ29udGV4dCogZXdrQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsgfQogICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdl
dCgpOyB9CiAgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJl
dHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsgfQorICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiB3
aW5kb3dGZWF0dXJlcygpOwogCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdDsKQEAgLTE1Niw3ICsxNTksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaXNtaXNzQ29sb3JQaWNrZXIoKTsKICNlbmRpZgogCi0gICAgV0tQYWdlUmVmIGNy
ZWF0ZU5ld1BhZ2UoV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzKTsKKyAgICBXS1BhZ2VS
ZWYgY3JlYXRlTmV3UGFnZShXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1
cmVzKTsKICAgICB2b2lkIGNsb3NlUGFnZSgpOwogCiAgICAgdm9pZCByZXF1ZXN0UG9wdXBNZW51
KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlFZmwqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
V2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVj
dG9yPFdlYktpdDo6V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7
CkBAIC0yNDMsNiArMjQ2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3Nj
cm9sbFBvc2l0aW9uOwogI2VuZGlmCiAgICAgT3duUHRyPEV3a19TZXR0aW5ncz4gbV9zZXR0aW5n
czsKKyAgICBSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7CiAgICAg
Y29uc3Qgdm9pZCogbV9jdXJzb3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRv
IG5vdCBmcmVlIGl0LgogICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7CiAgICAg
V0tFaW5hU2hhcmVkU3RyaW5nIG1fdXJsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmgKaW5kZXggOGEzOTQ2ZWY5YjU3MjVjMDk0ZTVhN2EwYzhkZWQzOGQ3MTJi
MWFjOS4uMGU5M2ZiZThjZjhmNzI2NzgwZGUyZThkMmY1ZTBkMzIyYjRjYjU3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC0zMCw4ICszMCw2IEBA
CiAgKiAgIGV3a19hdXRoX3JlcXVlc3RfcmVmKCkgb24gdGhlIHJlcXVlc3Qgb2JqZWN0IHRvIHBy
b2Nlc3MgdGhlIGF1dGhlbnRpY2F0aW9uIGFzeW5jaHJvbm91c2x5LgogICogLSAiYmFjayxmb3J3
YXJkLGxpc3QsY2hhbmdlZCIsIHZvaWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmlldydzIGJhY2sgLyBm
b3J3YXJkIGxpc3QgaGFkIGNoYW5nZWQuCiAgKiAtICJjYW5jZWwsdmlicmF0aW9uIiwgdm9pZDog
cmVxdWVzdCB0byBjYW5jZWwgdGhlIHZpYnJhdGlvbi4KLSAqIC0gImNsb3NlLHdpbmRvdyIsIHZv
aWQ6IHdpbmRvdyBpcyBjbG9zZWQuCi0gKiAtICJjcmVhdGUsd2luZG93IiwgRXZhc19PYmplY3Qq
KjogYSBuZXcgd2luZG93IGlzIGNyZWF0ZWQuCiAgKiAtICJkb3dubG9hZCxjYW5jZWxsZWQiLCBF
d2tfRG93bmxvYWRfSm9iKjogcmVwb3J0cyB0aGF0IGEgZG93bmxvYWQgd2FzIGVmZmVjdGl2ZWx5
IGNhbmNlbGxlZC4KICAqIC0gImRvd25sb2FkLGZhaWxlZCIsIEV3a19Eb3dubG9hZF9Kb2JfRXJy
b3IqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBmYWlsZWQgd2l0aCB0aGUgZ2l2ZW4gZXJyb3Iu
CiAgKiAtICJkb3dubG9hZCxmaW5pc2hlZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRo
YXQgYSBkb3dubG9hZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgpAQCAtOTQsNiArOTIsNyBAQAog
I2luY2x1ZGUgImV3a190b3VjaC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgogI2lu
Y2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVz
LmgiCiAjaW5jbHVkZSA8RXZhcy5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE0OCwxNiAr
MTQ3LDE3IEBAIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyB7CiAgICAgLy8gICAtIFdlYiBk
YXRhYmFzZS4KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKCpleGNlZWRlZF9kYXRhYmFzZV9xdW90
YSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IGNoYXIgKmRhdGFiYXNlTmFtZSwgY29u
c3QgY2hhciAqZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEsIHVu
c2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBj
dXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UpOwog
Ci0gICAgLy8gbmV3IHdpbmRvdzoKLSAgICAvLyAgIC0gQ3JlYXRlIGEgbmV3IHdpbmRvdyB3aXRo
IHNwZWNpZmllZCBzaXplCi0gICAgRXZhc19PYmplY3QqICgqd2luZG93X2NyZWF0ZV9uZXcpKEV3
a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdo
dCk7CisgICAgLy8gd2luZG93IGNyZWF0aW9uIGFuZCBjbG9zaW5nOgorICAgIC8vICAgLSBDcmVh
dGUgYSBuZXcgd2luZG93IHdpdGggc3BlY2lmaWVkIGZlYXR1cmVzIGFuZCBjbG9zZSB3aW5kb3cu
CisgICAgRXZhc19PYmplY3QgKigqd2luZG93X2NyZWF0ZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisgICAgdm9p
ZCAoKndpbmRvd19jbG9zZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOwogfTsKIAogLyoqCiAg
KiBUaGUgdmVyc2lvbiB5b3UgaGF2ZSB0byBwdXQgaW50byB0aGUgdmVyc2lvbiBmaWVsZAogICog
aW4gdGhlIEBhIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KICAqLwotI2RlZmluZSBF
V0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDdVTAorI2RlZmluZSBFV0tfVklFV19TTUFSVF9D
TEFTU19WRVJTSU9OIDhVTAogCiAvKioKICAqIEluaXRpYWxpemVyIGZvciB3aG9sZSBFd2tfVmll
d19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCkBAIC0xNjksNyArMTY5LDcgQEAgc3RydWN0IEV3a19W
aWV3X1NtYXJ0X0NsYXNzIHsKICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9WRVJT
SU9OCiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OCiAgKi8K
LSNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21h
cnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KKyNkZWZp
bmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xh
c3NfaW5pdCwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KIAogLyoqCiAg
KiBJbml0aWFsaXplciB0byB6ZXJvIGEgd2hvbGUgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0
dXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dp
bmRvd19mZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
d2luZG93X2ZlYXR1cmVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmMyNzU1NzIxOWYwNjY2MjBlMjliOTA0
NGViNjc2MGNiOTQ1YmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKQEAgLTAsMCArMSwxNDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a193
aW5kb3dfZmVhdHVyZXMuaCIKKworI2luY2x1ZGUgIldlYk51bWJlci5oIgorI2luY2x1ZGUgImV3
a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVz
KEltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzKQoreworICAgIGlmICh3aW5kb3dG
ZWF0dXJlcykgeworICAgICAgICBtX3Rvb2xiYXJWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZh
bHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInRvb2xC
YXJWaXNpYmxlIikpOworICAgICAgICBtX3N0YXR1c0JhclZpc2libGUgPSBnZXRXaW5kb3dGZWF0
dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVhdHVyZXMsIEFTQ0lJTGl0ZXJhbCgi
c3RhdHVzQmFyVmlzaWJsZSIpKTsKKyAgICAgICAgbV9zY3JvbGxiYXJzVmlzaWJsZSA9IGdldFdp
bmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0dXJlcywgQVNDSUlM
aXRlcmFsKCJzY3JvbGxiYXJzVmlzaWJsZSIpKTsKKyAgICAgICAgbV9tZW51QmFyVmlzaWJsZSA9
IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0dXJlcywg
QVNDSUlMaXRlcmFsKCJtZW51QmFyVmlzaWJsZSIpKTsKKyAgICAgICAgbV9sb2NhdGlvbkJhclZp
c2libGUgPSBnZXRXaW5kb3dGZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVh
dHVyZXMsIEFTQ0lJTGl0ZXJhbCgibG9jYXRpb25CYXJWaXNpYmxlIikpOworICAgICAgICBtX3Jl
c2l6YWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dG
ZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJyZXNpemFibGUiKSk7CisgICAgICAgIG1fZnVsbFNjcmVl
biA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0dXJl
cywgQVNDSUlMaXRlcmFsKCJmdWxsc2NyZWVuIikpOworCisgICAgICAgIG1fZ2VvbWV0cnkuc2V0
WChnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVz
LCBBU0NJSUxpdGVyYWwoIngiKSkpOworICAgICAgICBtX2dlb21ldHJ5LnNldFkoZ2V0V2luZG93
RmVhdHVyZVZhbHVlPGRvdWJsZSwgV2ViRG91YmxlPih3aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRl
cmFsKCJ5IikpKTsKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRXaWR0aChnZXRXaW5kb3dGZWF0dXJl
VmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoIndp
ZHRoIikpKTsKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRIZWlnaHQoZ2V0V2luZG93RmVhdHVyZVZh
bHVlPGRvdWJsZSwgV2ViRG91YmxlPih3aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJoZWln
aHQiKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzKiBj
b3JlRmVhdHVyZXMgPSBuZXcgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMoKTsKKworICAgICAgICBt
X3Rvb2xiYXJWaXNpYmxlID0gY29yZUZlYXR1cmVzLT50b29sQmFyVmlzaWJsZTsKKyAgICAgICAg
bV9zdGF0dXNCYXJWaXNpYmxlID0gY29yZUZlYXR1cmVzLT5zdGF0dXNCYXJWaXNpYmxlOworICAg
ICAgICBtX3Njcm9sbGJhcnNWaXNpYmxlID0gY29yZUZlYXR1cmVzLT5zY3JvbGxiYXJzVmlzaWJs
ZTsKKyAgICAgICAgbV9tZW51QmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+bWVudUJhclZpc2li
bGU7CisgICAgICAgIG1fbG9jYXRpb25CYXJWaXNpYmxlID0gY29yZUZlYXR1cmVzLT5sb2NhdGlv
bkJhclZpc2libGU7CisgICAgICAgIG1fcmVzaXphYmxlID0gY29yZUZlYXR1cmVzLT5yZXNpemFi
bGU7CisgICAgICAgIG1fZnVsbFNjcmVlbiA9IGNvcmVGZWF0dXJlcy0+ZnVsbHNjcmVlbjsKKwor
ICAgICAgICBtX2dlb21ldHJ5LnNldFgoY29yZUZlYXR1cmVzLT54KTsKKyAgICAgICAgbV9nZW9t
ZXRyeS5zZXRZKGNvcmVGZWF0dXJlcy0+eSk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0V2lkdGgo
Y29yZUZlYXR1cmVzLT53aWR0aCk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0SGVpZ2h0KGNvcmVG
ZWF0dXJlcy0+aGVpZ2h0KTsKKworICAgICAgICBkZWxldGUgY29yZUZlYXR1cmVzOworICAgICAg
ICBjb3JlRmVhdHVyZXMgPSAwOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMj4KK1QxIEV3a1dpbmRvd0ZlYXR1cmVzOjpnZXRXaW5kb3dGZWF0dXJlVmFsdWUo
SW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMsIGNvbnN0IFN0cmluZyBmZWF0dXJl
TmFtZSkKK3sKKyAgICBUMiogZmVhdHVyZVZhbHVlID0gc3RhdGljX2Nhc3Q8VDIqPih3aW5kb3dG
ZWF0dXJlcy0+Z2V0KGZlYXR1cmVOYW1lKSk7CisKKyAgICBpZiAoIWZlYXR1cmVWYWx1ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZS0+dmFsdWUoKTsK
K30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNpYmxlX2dldChj
b25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09C
Sl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0
dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwtPnRvb2xiYXJWaXNpYmxlKCk7
Cit9CisKK0VpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxlX2dl
dChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdL
X09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19m
ZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwtPnN0YXR1c0JhclZpc2li
bGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfc2Nyb2xsYmFyc192aXNp
YmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7Cisg
ICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdp
bmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwtPnNjcm9sbGJh
cnNWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX21lbnViYXJf
dmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQor
eworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVz
LCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKworICAgIHJldHVybiBpbXBsLT5tZW51
QmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19sb2NhdGlv
bmJhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVy
ZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVh
dHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwt
PmxvY2F0aW9uQmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJl
c19yZXNpemFibGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJl
cykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0
dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICByZXR1cm4gaW1wbC0+
cmVzaXphYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3Jl
ZW5fZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcykKK3sKKyAg
ICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2lu
ZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICByZXR1cm4gaW1wbC0+ZnVsbFNjcmVl
bigpOworfQorCit2b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV3
a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcywgaW50KiB4LCBpbnQqIHksIGludCog
d2lkdGgsIGludCogaGVpZ2h0KQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNv
bnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwpOworCisgICAgaWYg
KHgpCisgICAgICAgICp4ID0gc3RhdGljX2Nhc3Q8aW50PihpbXBsLT5nZW9tZXRyeSgpLngoKSk7
CisKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxpbnQ+KGltcGwtPmdlb21l
dHJ5KCkueSgpKTsKKworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gc3RhdGljX2Nh
c3Q8aW50PihpbXBsLT5nZW9tZXRyeSgpLndpZHRoKCkpOworCisgICAgaWYgKGhlaWdodCkKKyAg
ICAgICAgKmhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oaW1wbC0+Z2VvbWV0cnkoKS5oZWlnaHQo
KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
d2luZG93X2ZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
d2luZG93X2ZlYXR1cmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTAyZjU0MTY3YTExYjhhMmI2MjU0N2JmZDg2
MTNjNjUxZWVkYjJlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a193aW5kb3dfZmVhdHVyZXMuaAor
ICogQGJyaWVmICAgQWNjZXNzIHRvIHRoZSBmZWF0dXJlcyBvZiB3aW5kb3cuCisgKi8KKworI2lm
bmRlZiBld2tfd2luZG93X2ZlYXR1cmVzX2gKKyNkZWZpbmUgZXdrX3dpbmRvd19mZWF0dXJlc19o
CisKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7
CisjZW5kaWYKKworLyoqCisgKiBEZWNsYXJlIEV3a19XaW5kb3dfRmVhdHVyZXMgYXMgRXdrX09i
amVjdC4KKyAqCisgKiBAc2VlIEV3a19PYmplY3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRXdrX09i
amVjdCBFd2tfV2luZG93X0ZlYXR1cmVzOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIHRvb2xiYXIg
dmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19m
ZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaXMgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2libGUsIEBjIEVJTkFfRkFMU0Ug
b3RoZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3Rvb2xi
YXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVz
KTsKKworLyoqCisgKiBRdWVyaWVzIHRoZSBzdGF0dXNiYXIgdmlzaWJpbGl0eSBvZiB0aGUgd2lu
ZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRv
IGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIHN0YXR1
c2JhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VB
UEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KGNv
bnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVl
cmllcyB0aGUgc2Nyb2xsYmFyIHZpc2liaWxpdHkgb2YgdGhlIHdpbmRvdyBmZWF0dXJlLgorICoK
KyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcwor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSBzY3JvbGxiYXJzIHNob3VsZCBiZSB2
aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdr
X3dpbmRvd19mZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3df
RmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmllcyB0aGUgbWVudWJh
ciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93
X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBpcyB0aGUgbWVudWJhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxT
RSBvdGhlcndpc2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbWVu
dWJhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVy
ZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIGxvY2F0aW9uYmFyIHZpc2liaWxpdHkgb2YgdGhl
IHdpbmRvdyBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVj
dCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSBs
b2NhdGlvbmJhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisg
Ki8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlzaWJs
ZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKworLyoq
CisgKiBRdWVyaWVzIGlmIHRoZSB3aW5kb3cgaXMgcmVzaXphYmxlLgorICoKKyAqIEBwYXJhbSB3
aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB3aW5kb3cgc2hvdWxkIGJlIHJlc2l6YWJsZSwgQGMgRUlO
QV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVy
ZXNfcmVzaXphYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVy
ZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIHRoZSB3aW5kb3cgaXMgZnVsbHNjcmVlbgorICoK
KyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcwor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB3aW5kb3cgc2hvdWxkIGJlIGZ1bGxz
Y3JlZW4sIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tf
d2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMg
KndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogR2V0cyBnZW9tZXRyeSBwcm9wZXJ0aWVzIG9m
IGFuIEV3a19XaW5kb3dfRmVhdHVyZXMuCisgKgorICogUHJvcGVydGllcyBhcmUgcmV0dXJuZWQg
aW4gdGhlIHJlc3BlY3RpdmUgcG9pbnRlcnMuIFBhc3NpbmcgQGMgTlVMTCB0byBhbnkgb2YKKyAq
IHRoZXNlIHBvaW50ZXJzIHdpbGwgY2F1c2UgdGhhdCBwcm9wZXJ0eSB0byBub3QgYmUgcmV0dXJu
ZWQuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgd2luZG93J3MgZmVhdHVyZXMK
KyAqIEBwYXJhbSB4IHRoZSBwb2ludGVyIHRvIHN0b3JlIHggcG9zaXRpb24KKyAqIEBwYXJhbSB5
IHRoZSBwb2ludGVyIHRvIHN0b3JlIHkgcG9zaXRpb24KKyAqIEBwYXJhbSB3IHRoZSBwb2ludGVy
IHRvIHN0b3JlIHdpZHRoCisgKiBAcGFyYW0gaCB0aGUgcG9pbnRlciB0byBzdG9yZSBoZWlnaHQK
KyAqLworRUFQSSB2b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV3
a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcywgaW50ICp4LCBpbnQgKnksIGludCAq
dywgaW50ICpoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8v
IGV3a193aW5kb3dfZmVhdHVyZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44OWVmN2E2MWM4YmI5ZTdmNzRiNzViYjUwYmRmYTVhMzkwZjQ5YTBjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0
dXJlc19wcml2YXRlLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNpZm5kZWYgZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKKyNkZWZpbmUgZXdrX3dpbmRv
d19mZWF0dXJlc19wcml2YXRlX2gKKworI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIK
KyNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgImV3a19vYmplY3RfcHJpdmF0
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworY2xhc3MgRXdrVmlld0ltcGw7CisKK2NsYXNzIEV3a1dpbmRvd0ZlYXR1cmVz
IDogcHVibGljIEV3a19PYmplY3QgeworcHVibGljOgorICAgIEVXS19PQkpFQ1RfREVDTEFSRShF
d2tXaW5kb3dGZWF0dXJlcykKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3a1dpbmRvd0ZlYXR1
cmVzPiBjcmVhdGUoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXdrV2luZG93RmVhdHVyZXMod2lu
ZG93RmVhdHVyZXMpKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZ2VvbWV0cnko
KSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5OyB9CisgICAgdm9pZCBzZXRHZW9tZXRyeShXZWJD
b3JlOjpGbG9hdFJlY3QmIGdlb21ldHJ5KSB7IG1fZ2VvbWV0cnkgPSBnZW9tZXRyeTsgfQorCisg
ICAgYm9vbCB0b29sYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9vbGJhclZpc2libGU7
IH0KKyAgICB2b2lkIHNldFRvb2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpIHsgbV90
b29sYmFyVmlzaWJsZSA9IHRvb2xiYXJWaXNpYmxlOyB9CisKKyAgICBib29sIHN0YXR1c0JhclZp
c2libGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1c0JhclZpc2libGU7IH0KKyAgICB2b2lkIHNl
dFN0YXR1c0JhclZpc2libGUoYm9vbCBzdGF0dXNCYXJWaXNpYmxlKSB7IG1fc3RhdHVzQmFyVmlz
aWJsZSA9IHN0YXR1c0JhclZpc2libGU7IH0KKworICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhcnNWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRTY3Jv
bGxiYXJzVmlzaWJsZShib29sIHNjcm9sbGJhcnNWaXNpYmxlKSB7IG1fc2Nyb2xsYmFyc1Zpc2li
bGUgPSBzY3JvbGxiYXJzVmlzaWJsZTsgfQorCisgICAgYm9vbCBtZW51QmFyVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVudUJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldE1lbnVCYXJWaXNp
YmxlKGJvb2wgbWVudUJhclZpc2libGUpIHsgbV9tZW51QmFyVmlzaWJsZSA9IG1lbnVCYXJWaXNp
YmxlOyB9CisKKyAgICBib29sIGxvY2F0aW9uQmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYXRpb25CYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRMb2NhdGlvbkJhclZpc2libGUoYm9v
bCBsb2NhdGlvbkJhclZpc2libGUpIHsgbV9sb2NhdGlvbkJhclZpc2libGUgPSBsb2NhdGlvbkJh
clZpc2libGU7IH0KKworICAgIGJvb2wgcmVzaXphYmxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNp
emFibGU7IH0KKyAgICB2b2lkIHNldFJlc2l6YWJsZShib29sIHJlc2l6YWJsZSkgeyBtX3Jlc2l6
YWJsZSA9IHJlc2l6YWJsZTsgfQorCisgICAgYm9vbCBmdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1
cm4gbV9mdWxsU2NyZWVuOyB9CisgICAgdm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wgZnVsbFNjcmVl
bikgeyBtX2Z1bGxTY3JlZW4gPSBmdWxsU2NyZWVuOyB9CisKK3ByaXZhdGU6CisgICAgRXdrV2lu
ZG93RmVhdHVyZXMoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcyk7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKyAgICBzdGF0aWMgVDEg
Z2V0V2luZG93RmVhdHVyZVZhbHVlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93
RmVhdHVyZXMsIGNvbnN0IFN0cmluZyBmZWF0dXJlTmFtZSk7CisKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgbV9nZW9tZXRyeTsKKyAgICBib29sIG1fdG9vbGJhclZpc2libGU7CisgICAgYm9vbCBt
X3N0YXR1c0JhclZpc2libGU7CisgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAgIGJv
b2wgbV9tZW51QmFyVmlzaWJsZTsKKyAgICBib29sIG1fbG9jYXRpb25CYXJWaXNpYmxlOworICAg
IGJvb2wgbV9yZXNpemFibGU7CisgICAgYm9vbCBtX2Z1bGxTY3JlZW47Cit9OworCisjZW5kaWYg
Ly8gZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRv
d19mZWF0dXJlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWU1MDMxMzQ2NjA2YzdkM2IyYzBkYTBjYmY4NGRk
YWM5Y2Q3MDcxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwCkBAIC0wLDAgKzEsMTEx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQy
Lmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0Owor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRGVm
YXVsdFdpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzKQoreworICAgIC8vIGRlZmF1bHQgdmFsdWVzIG9m
IFdlYkNvcmU6V2luZG93RmVhdHVyZXMoKQorICAgIC8vIC0gbWVudUJhclZpc2libGUodHJ1ZSkK
KyAgICAvLyAtIHN0YXR1c0JhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHRvb2xCYXJWaXNpYmxl
KHRydWUpCisgICAgLy8gLSBsb2NhdGlvbkJhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHNjcm9s
bGJhcnNWaXNpYmxlKHRydWUpCisgICAgLy8gLSByZXNpemFibGUodHJ1ZSkKKyAgICAvLyAtIGZ1
bGxzY3JlZW4oZmFsc2UpCisKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Rv
b2xiYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tf
d2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOwor
ICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfc2Nyb2xsYmFyc192aXNpYmxlX2dl
dCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNf
bWVudWJhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3
a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMp
KTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQod2lu
ZG93RmVhdHVyZXMpKTsKKworICAgIEVYUEVDVF9GQUxTRShld2tfd2luZG93X2ZlYXR1cmVzX2Z1
bGxzY3JlZW5fZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisKKyAgICBpbnQgeCwgeSwgd2lkdGgsIGhl
aWdodDsKKyAgICBld2tfd2luZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldCh3aW5kb3dGZWF0dXJl
cywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgRVhQRUNUX0VRKDAsIHgpOworICAg
IEVYUEVDVF9FUSgwLCB5KTsKKyAgICBFWFBFQ1RfRVEoMCwgd2lkdGgpOworICAgIEVYUEVDVF9F
USgwLCBoZWlnaHQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RC
YXNlLCBld2tfd2luZG93X2ZlYXR1cmVzX2RlZmF1bHRfcHJvcGVydHlfZ2V0KQoreworICAgIEV2
YXNfT2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworCisgICAgY29uc3QgY2hhciB3aW5kb3dIVE1M
W10gPSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oJycsICcnKTtcIj48L2JvZHk+
PC9odG1sPiI7CisKKyAgICBld2tWaWV3Q2xhc3MoKS0+d2luZG93X2NyZWF0ZSA9IGNyZWF0ZURl
ZmF1bHRXaW5kb3c7CisKKyAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIHdpbmRv
d0hUTUwsIDAsIDApOworICAgIEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsK
K30KKworc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVXaW5kb3coRXdrX1ZpZXdfU21hcnRfRGF0
YSAqc21hcnREYXRhLCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dGZWF0dXJlcykK
K3sKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc190b29sYmFyX3Zpc2libGVf
Z2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJl
c19zdGF0dXNiYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJV
RShld2tfd2luZG93X2ZlYXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQod2luZG93RmVhdHVy
ZXMpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2li
bGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVh
dHVyZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBF
Q1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQod2luZG93RmVhdHVyZXMp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19mdWxsc2NyZWVuX2dldCh3
aW5kb3dGZWF0dXJlcykpOworCisgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgZXdr
X3dpbmRvd19mZWF0dXJlc19nZW9tZXRyeV9nZXQod2luZG93RmVhdHVyZXMsICZ4LCAmeSwgJndp
ZHRoLCAmaGVpZ2h0KTsKKworICAgIEVYUEVDVF9FUSgxMDAsIHgpOworICAgIEVYUEVDVF9FUSgx
NTAsIHkpOworICAgIEVYUEVDVF9FUSg0MDAsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEoNDAwLCBo
ZWlnaHQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBl
d2tfd2luZG93X2ZlYXR1cmVzX3Byb3BlcnR5X2dldCkKK3sKKyAgICBFdmFzX09iamVjdCogdmll
dyA9IHdlYlZpZXcoKTsKKworICAgIGNvbnN0IGNoYXIgd2luZG93SFRNTFtdID0gIjxodG1sPjxi
b2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJywgJ2xlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9
NDAwLGhlaWdodD00MDAsbG9jYXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9eWVzLHRvb2xiYXI9
bm8sc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyxmdWxsc2NyZWVuPW5vJyk7XCI+PC9ib2R5
PjwvaHRtbD4iOworCisgICAgZXdrVmlld0NsYXNzKCktPndpbmRvd19jcmVhdGUgPSBjcmVhdGVX
aW5kb3c7CisKKyAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIHdpbmRvd0hUTUws
IDAsIDApOworICAgIEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAppbmRl
eCAyYjc1MDcxMGY5ZGU0YTdjZTRmODllZDA3NjlmNmU1NzQ1MTg4NTU5Li5jNGQ0NDMxZTY2ZDcy
NjQ3M2Y5Y2NiYTNiM2Q3MDRiY2VlNTk5OGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiV0tFdmVudC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiZXdrX2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVz
X3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
b2xvci5oPgogCkBAIC00OSw5ICs1MCw5IEBAIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpjbG9zZVBh
Z2UoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogICAgIHRvUGFnZVVJQ2xpZW50
RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jbG9zZVBhZ2UoKTsKIH0KIAotV0tQYWdlUmVm
IFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVxdWVzdFJl
ZiwgV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2
ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitXS1BhZ2VSZWYgUGFnZVVJ
Q2xpZW50RWZsOjpjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0Rp
Y3Rpb25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1v
dXNlQnV0dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJldHVybiB0b1BhZ2VV
SUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+Y3JlYXRlTmV3UGFnZSh3aW5kb3dG
ZWF0dXJlcyk7CisgICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3Zp
ZXdJbXBsLT5jcmVhdGVOZXdQYWdlKHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7CiB9CiAKIHZv
aWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBXS1N0cmlu
Z1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC03
MCw2ICs3MSw3NCBAQCBXS1N0cmluZ1JlZiBQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRQ
cm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLAogICAgIHJldHVybiB2YWx1ZSA/
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAKK2Jvb2wgUGFn
ZVVJQ2xpZW50RWZsOjp0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAg
IEFTU0VSVChmZWF0dXJlcyk7CisgICAgcmV0dXJuIGZlYXR1cmVzLT50b29sYmFyVmlzaWJsZSgp
OworfQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFn
ZVJlZiwgYm9vbCB0b29sYmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+
bV92aWV3SW1wbDsKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB2aWV3SW1wbC0+
d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworCisgICAgZmVhdHVyZXMt
PnNldFRvb2xiYXJWaXNpYmxlKHRvb2xiYXJWaXNpYmxlKTsKKyAgICB2aWV3SW1wbC0+c21hcnRD
YWxsYmFjazxUb29sYmFyVmlzaWJsZT4oKS5jYWxsKCZ0b29sYmFyVmlzaWJsZSk7Cit9CisKK2Jv
b2wgUGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1Bh
Z2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsK
KyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIHJldHVybiBmZWF0dXJlcy0+bWVudUJhclZpc2li
bGUoKTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldE1lbnVCYXJJc1Zpc2libGUoV0tQ
YWdlUmVmLCBib29sIG1lbnVCYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsOworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHZpZXdJbXBs
LT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisKKyAgICBmZWF0dXJl
cy0+c2V0TWVudUJhclZpc2libGUobWVudUJhclZpc2libGUpOworICAgIHZpZXdJbXBsLT5zbWFy
dENhbGxiYWNrPE1lbnVCYXJWaXNpYmxlPigpLmNhbGwoJm1lbnVCYXJWaXNpYmxlKTsKK30KKwor
Ym9vbCBQYWdlVUlDbGllbnRFZmw6OnN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0g
dG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVz
KCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4gZmVhdHVyZXMtPnN0YXR1c0Jh
clZpc2libGUoKTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlz
aWJsZShXS1BhZ2VSZWYsIGJvb2wgc3RhdHVzQmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChj
bGllbnRJbmZvKS0+bV92aWV3SW1wbDsKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMg
PSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworCisg
ICAgZmVhdHVyZXMtPnNldFN0YXR1c0JhclZpc2libGUoc3RhdHVzQmFyVmlzaWJsZSk7CisgICAg
dmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8U3RhdHVzQmFyVmlzaWJsZT4oKS5jYWxsKCZzdGF0dXNC
YXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRFZmw6OmlzUmVzaXphYmxlKFdLUGFn
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyog
ZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2lu
ZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIHJldHVybiBmZWF0dXJl
cy0+cmVzaXphYmxlKCk7Cit9CisKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRJc1Jlc2l6YWJs
ZShXS1BhZ2VSZWYsIGJvb2wgcmVzaXphYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsOworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHZpZXdJbXBs
LT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisKKyAgICBmZWF0dXJl
cy0+c2V0UmVzaXphYmxlKHJlc2l6YWJsZSk7CisgICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8
V2luZG93UmVzaXphYmxlPigpLmNhbGwoJnJlc2l6YWJsZSk7Cit9CisKICNpZiBFTkFCTEUoSU5Q
VVRfVFlQRV9DT0xPUikKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzaG93Q29sb3JQaWNrZXIoV0tQ
YWdlUmVmLCBXS1N0cmluZ1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0
ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKQEAgLTE0MSw2ICsy
MTAsMTQgQEAgUGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwoRXdrVmlld0ltcGwqIHZp
ZXdJbXBsKQogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRBbGVydCA9IHJ1bkphdmFTY3JpcHRB
bGVydDsKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0Q29uZmlybSA9IHJ1bkphdmFTY3JpcHRD
b25maXJtOwogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRQcm9tcHQgPSBydW5KYXZhU2NyaXB0
UHJvbXB0OworICAgIHVpQ2xpZW50LnRvb2xiYXJzQXJlVmlzaWJsZSA9IHRvb2xiYXJzQXJlVmlz
aWJsZTsKKyAgICB1aUNsaWVudC5zZXRUb29sYmFyc0FyZVZpc2libGUgPSBzZXRUb29sYmFyc0Fy
ZVZpc2libGU7CisgICAgdWlDbGllbnQubWVudUJhcklzVmlzaWJsZSA9IG1lbnVCYXJJc1Zpc2li
bGU7CisgICAgdWlDbGllbnQuc2V0TWVudUJhcklzVmlzaWJsZSA9IHNldE1lbnVCYXJJc1Zpc2li
bGU7CisgICAgdWlDbGllbnQuc3RhdHVzQmFySXNWaXNpYmxlID0gc3RhdHVzQmFySXNWaXNpYmxl
OworICAgIHVpQ2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJsZSA9IHNldFN0YXR1c0JhcklzVmlz
aWJsZTsKKyAgICB1aUNsaWVudC5pc1Jlc2l6YWJsZSA9IGlzUmVzaXphYmxlOworICAgIHVpQ2xp
ZW50LnNldElzUmVzaXphYmxlID0gc2V0SXNSZXNpemFibGU7CiAgICAgdWlDbGllbnQudGFrZUZv
Y3VzID0gdGFrZUZvY3VzOwogICAgIHVpQ2xpZW50LmZvY3VzID0gZm9jdXM7CiAgICAgdWlDbGll
bnQudW5mb2N1cyA9IHVuZm9jdXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Q
YWdlVUlDbGllbnRFZmwuaAppbmRleCAyZjU0MTkyYTJhZTBmYjcwMzllMTJiYzkxNGI2NzhjODM2
N2Y4MTZiLi5lNjg0MTRhY2ZiNzQ4OGEzZWI5N2ZmYjQ4ZTc4NGUwMTAxMDVhYWFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKQEAgLTUwLDYg
KzUwLDE0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdL
UGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0
aWMgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS0Zy
YW1lUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIFdLU3RyaW5nUmVmIHJ1bkphdmFTY3Jp
cHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYs
IGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgYm9vbCB0b29sYmFyc0FyZVZpc2libGUoV0tQYWdl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRUb29sYmFy
c0FyZVZpc2libGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgYm9vbCBtZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0TWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYs
IGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIHN0YXR1c0Jh
cklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzUmVzaXphYmxlKFdLUGFnZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0SXNSZXNpemFibGUoV0tQ
YWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKICNpZiBFTkFCTEUoSU5QVVRf
VFlQRV9DT0xPUikKICAgICBzdGF0aWMgdm9pZCBzaG93Q29sb3JQaWNrZXIoV0tQYWdlUmVmLCBX
S1N0cmluZ1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJlZiwg
Y29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIGhpZGVDb2xvclBpY2tlcihXS1BhZ2VSZWYs
IGNvbnN0IHZvaWQqKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCAzYzY1YzliYTMwMTAwNzU2YmI3OThhODZkNjQwNWUyMmYxMTU3ZTQ5Li5jMTFj
YjQyOGZkNzE0ZDUxMjFkYzAzZjVkMzAzOGM4NzE2MTdiMmM2IDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTEt
MTYgIEppbndvbyBTb25nICA8amlud29vNy5zb25nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtF
RkxdW1dLMl0gQWRkIEV3a19XaW5kb3dfRmVhdHVyZXMgQVBJIGFuZCByZWxhdGVkIFVJIGNhbGxi
YWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkx
MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBs
ZW1lbnRlZCB3aW5kb3dfY3JlYXRlIGFuZCB3aW5kb3dfY2xvc2Ugc21hcnRjYWxsYmFjayBmdW5j
dGlvbnMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9lZmwvbWFpbi5jOgorICAgICAgICAob25f
d2luZG93X2NyZWF0ZSk6CisgICAgICAgIChvbl93aW5kb3dfY2xvc2UpOgorICAgICAgICAod2lu
ZG93X2NyZWF0ZSk6CisKIDIwMTItMTEtMTQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCB0aGUgYnVpbGQuCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nl
ci9lZmwvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCA5MmQzZjJm
ZjlmM2U0MjZjYTVhODk3MTMxMGEzODQ1NjZhMDRjODdkLi5kMTk1MThkYTIzNDA3YjY3YWMwYTE4
MDg2YzUxOWM5ODk3N2M0MzI2IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFp
bi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKQEAgLTI4NCwyMCArMjg0LDYg
QEAgb25fYmFja19mb3J3YXJkX2xpc3RfY2hhbmdlZCh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2Jq
ZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnQKICAgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldCh3
aW5kb3ctPmZvcndhcmRfYnV0dG9uLCAhZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShld2tfdmll
dykpOwogfQogCi1zdGF0aWMgRXZhc19PYmplY3QqCi1vbl9uZXdfd2luZG93KEV3a19WaWV3X1Nt
YXJ0X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKLXsKLSAg
ICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICB3aW5kb3dzID0gZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCB3aW5kb3cpOwot
ICAgIHJldHVybiB3aW5kb3ctPmV3a192aWV3OwotfQotCi1zdGF0aWMgdm9pZAotb25fY2xvc2Vf
d2luZG93KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVu
dF9pbmZvKQotewotICAgIHdpbmRvd19jbG9zZSgoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGEp
OwotfQotCiBzdGF0aWMgdm9pZAogb25fcHJvZ3Jlc3Modm9pZCAqdXNlcl9kYXRhLCBFdmFzX09i
amVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7CkBAIC03NjMsNiArNzQ5LDM5IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgb25fZnVsbHNjcmVlbl9leGl0KEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKK3N0YXRpYyBFdmFzX09iamVjdCAqCitv
bl93aW5kb3dfY3JlYXRlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgY29uc3QgRXdr
X1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQoreworICAgIGludCB4ID0gMDsKKyAg
ICBpbnQgeSA9IDA7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKwor
ICAgIGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd19mZWF0dXJlcywgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgd2lkdGgg
PSB3aW5kb3dfd2lkdGg7CisKKyAgICBpZiAoIWhlaWdodCkKKyAgICAgICAgaGVpZ2h0ID0gd2lu
ZG93X2hlaWdodDsKKworICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfY3JlYXRl
KE5VTEwsIHdpZHRoLCBoZWlnaHQpOworICAgIEV2YXNfT2JqZWN0ICpuZXdfdmlldyA9IHdpbmRv
dy0+ZXdrX3ZpZXc7CisKKyAgICB3aW5kb3dzID0gZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCB3
aW5kb3cpOworCisgICAgaW5mbygibWluaWJyb3dzZXI6IGxvY2F0aW9uKCVkLCVkKSBzaXplPSgl
ZCwlZClcbiIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIG5ld192aWV3Owor
fQorCitzdGF0aWMgdm9pZAorb25fd2luZG93X2Nsb3NlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNt
YXJ0RGF0YSkKK3sKKyAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0
aF9ld2tfdmlldyhzbWFydERhdGEtPnNlbGYpOworICAgIHdpbmRvd19jbG9zZSh3aW5kb3cpOwor
fQorCiBzdGF0aWMgdm9pZAogYXV0aF9wb3B1cF9jbG9zZShBdXRoX0RhdGEgKmF1dGhfZGF0YSkK
IHsKQEAgLTEwMzAsNyArMTA0OSw5IEBAIHN0YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93X2Ny
ZWF0ZShjb25zdCBjaGFyICp1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBld2tWaWV3
Q2xhc3MtPndpbmRvd19nZW9tZXRyeV9zZXQgPSBvbl93aW5kb3dfZ2VvbWV0cnlfc2V0OwogICAg
IGV3a1ZpZXdDbGFzcy0+ZnVsbHNjcmVlbl9lbnRlciA9IG9uX2Z1bGxzY3JlZW5fZW50ZXI7CiAg
ICAgZXdrVmlld0NsYXNzLT5mdWxsc2NyZWVuX2V4aXQgPSBvbl9mdWxsc2NyZWVuX2V4aXQ7Ci0g
ICAgZXdrVmlld0NsYXNzLT53aW5kb3dfY3JlYXRlX25ldyA9IG9uX25ld193aW5kb3c7CisgICAg
ZXdrVmlld0NsYXNzLT53aW5kb3dfY3JlYXRlID0gb25fd2luZG93X2NyZWF0ZTsKKyAgICBld2tW
aWV3Q2xhc3MtPndpbmRvd19jbG9zZSA9IG9uX3dpbmRvd19jbG9zZTsKKwogCiAgICAgRXZhcyAq
ZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHdpbmRvdy0+ZWxtX3dpbmRvdyk7CiAgICAgRXZh
c19TbWFydCAqc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmZXdrVmlld0NsYXNzLT5zYyk7
CkBAIC0xMDQ3LDcgKzEwNjgsNiBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVh
dGUoY29uc3QgY2hhciAqdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZXdrX3NldHRp
bmdzX3ByZWZlcnJlZF9taW5pbXVtX2NvbnRlbnRzX3dpZHRoX3NldChzZXR0aW5ncywgMCk7CiAK
ICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImF1
dGhlbnRpY2F0aW9uLHJlcXVlc3QiLCBvbl9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0LCB3aW5kb3cp
OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAi
Y2xvc2Usd2luZG93Iiwgb25fY2xvc2Vfd2luZG93LCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmFpbGVkIiwg
b25fZG93bmxvYWRfZmFpbGVkLCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmluaXNoZWQiLCBvbl9kb3dubG9h
ZF9maW5pc2hlZCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQo
d2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLHJlcXVlc3QiLCBvbl9kb3dubG9hZF9yZXF1ZXN0
LCB3aW5kb3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174880</attachid>
            <date>2012-11-18 20:06:52 -0800</date>
            <delta_ts>2012-11-19 00:47:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121119130436.patch</filename>
            <type>text/plain</type>
            <size>47475</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDAyNGIxZjdhZjk2MWI4
ZTcxMTJmZmYxNzMxN2ZkODExMjExNWQ1Yi4uMzkxOTBhZTIwMjVmYThkNWU3MWUxZmFiNWE1MmM2
YzE1YTFhNWJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTExLTE2ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IHZhbHVlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxiYWNrcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwOgorICAgICAgICAoRXdrVmll
d0ltcGw6OndpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQ
YWdlKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmg6CisgICAgICAgIChFd2tWaWV3SW1wbCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcDogQWRkZWQuCisgICAgICAgIChFd2tXaW5k
b3dGZWF0dXJlczo6RXdrV2luZG93RmVhdHVyZXMpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVy
ZXM6OmdldFdpbmRvd0ZlYXR1cmVWYWx1ZSk6CisgICAgICAgIChld2tfd2luZG93X2ZlYXR1cmVz
X3Rvb2xiYXJfdmlzaWJsZV9nZXQpOgorICAgICAgICAoZXdrX3dpbmRvd19mZWF0dXJlc19zdGF0
dXNiYXJfdmlzaWJsZV9nZXQpOgorICAgICAgICAoZXdrX3dpbmRvd19mZWF0dXJlc19zY3JvbGxi
YXJzX3Zpc2libGVfZ2V0KToKKyAgICAgICAgKGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92
aXNpYmxlX2dldCk6CisgICAgICAgIChld2tfd2luZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zp
c2libGVfZ2V0KToKKyAgICAgICAgKGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldCk6
CisgICAgICAgIChld2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KToKKyAgICAgICAg
KGV3a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAg
KEV3a1dpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUp
OgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6Omdlb21ldHJ5KToKKyAgICAgICAgKEV3a1dp
bmRvd0ZlYXR1cmVzOjpzZXRHZW9tZXRyeSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6
dG9vbGJhclZpc2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnNldFRvb2xiYXJW
aXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzdGF0dXNCYXJWaXNpYmxlKToK
KyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRTdGF0dXNCYXJWaXNpYmxlKToKKyAgICAg
ICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzY3JvbGxiYXJzVmlzaWJsZSk6CisgICAgICAgIChFd2tX
aW5kb3dGZWF0dXJlczo6c2V0U2Nyb2xsYmFyc1Zpc2libGUpOgorICAgICAgICAoRXdrV2luZG93
RmVhdHVyZXM6Om1lbnVCYXJWaXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpz
ZXRNZW51QmFyVmlzaWJsZSk6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6bG9jYXRpb25C
YXJWaXNpYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRMb2NhdGlvbkJhclZp
c2libGUpOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OnJlc2l6YWJsZSk6CisgICAgICAg
IChFd2tXaW5kb3dGZWF0dXJlczo6c2V0UmVzaXphYmxlKToKKyAgICAgICAgKEV3a1dpbmRvd0Zl
YXR1cmVzOjpmdWxsU2NyZWVuKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRGdWxs
U2NyZWVuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfd2lu
ZG93X2ZlYXR1cmVzLmNwcDogQWRkZWQuCisgICAgICAgIChjcmVhdGVEZWZhdWx0V2luZG93KToK
KyAgICAgICAgKFRFU1RfRik6CisgICAgICAgIChjcmVhdGVXaW5kb3cpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJ
Q2xpZW50RWZsOjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50
RWZsOjp0b29sYmFyc0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRUb29sYmFyc0FyZVZpc2libGUpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6Om1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldE1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVUlDbGllbnRFZmw6OnN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VVSUNsaWVudEVmbDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVVJQ2xpZW50RWZsOjppc1Jlc2l6YWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6c2V0SXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlD
bGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdl
VUlDbGllbnRFZmwuaDoKKyAgICAgICAgKFBhZ2VVSUNsaWVudEVmbCk6CisKIDIwMTItMTEtMTQg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXaW5DYWly
b10gQnVpbGQgY29ycmVjdGlvbiBhZnRlciByMTM0NzAzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBiYjg3NDdiMWNiMWY1ODM4YzJkZDdjY2RkZjc4MjkxMWVhNjdjMWU1Li42NzlhNmE1
N2I0YzNhYTJiYWVkZGUzZjJlZTJmOWEyMzhkZTFlZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQpAQCAtNzMsNiArNzMsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAK
IAogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKIApAQCAtMjc5LDYg
KzI4MCw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oIgogICAgICIke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVf
cmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXcuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaCIKICkKIAogSU5TVEFMTChGSUxFUyAk
e0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDIvZWZsL2V3ZWJraXQyLnBjIERFU1RJTkFUSU9OIGxp
Yi9wa2djb25maWcpCkBAIC0zNzYsNiArMzc4LDcgQEAgU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJ
RVMKICAgICB0ZXN0X2V3azJfc3RvcmFnZV9tYW5hZ2VyCiAgICAgdGVzdF9ld2syX3RleHRfY2hl
Y2tlcgogICAgIHRlc3RfZXdrMl92aWV3CisgICAgdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcwog
KQogCiBJRiAoRU5BQkxFX0FQSV9URVNUUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCmluZGV4IDA3Y2ExMjkzNTBmNGVkYjdlM2RiNGJmOTJhZDcwYjhjM2Ey
MDljZTQuLmFkYWFlMWVjZGU1MDY3OWM5OTVjYzk1YmViN2QxOWExMTg2MGU1NWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtNTgsNSArNTgsNiBA
QAogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVt
ZV9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKKyNpbmNsdWRlICJld2tfd2luZG93
X2ZlYXR1cmVzLmgiCiAKICNlbmRpZiAvLyBFV2ViS2l0Ml9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKaW5kZXggOTg1MjU5OWEy
NzgzYTYxZWE3N2M1N2RlYWY1MjFiMmM1MzU2ZmYzNC4uYTYzYTg1OWE4NzdiNTMxN2EwMjYwNDlk
MTQ3OWNlZWI0NDRlYjc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApAQCAtNTcsOCArNTcsNiBAQCBlbnVtIENhbGxiYWNr
VHlwZSB7CiAgICAgQXV0aGVudGljYXRpb25SZXF1ZXN0LAogICAgIEJhY2tGb3J3YXJkTGlzdENo
YW5nZSwKICAgICBDYW5jZWxWaWJyYXRpb24sCi0gICAgQ2xvc2VXaW5kb3csCi0gICAgQ3JlYXRl
V2luZG93LAogICAgIERvd25sb2FkSm9iQ2FuY2VsbGVkLAogICAgIERvd25sb2FkSm9iRmFpbGVk
LAogICAgIERvd25sb2FkSm9iRmluaXNoZWQsCkBAIC02OSw2ICs2Nyw3IEBAIGVudW0gQ2FsbGJh
Y2tUeXBlIHsKICAgICBMb2FkRXJyb3IsCiAgICAgTG9hZEZpbmlzaGVkLAogICAgIExvYWRQcm9n
cmVzcywKKyAgICBNZW51QmFyVmlzaWJsZSwKICAgICBQcm92aXNpb25hbExvYWRGYWlsZWQsCiAg
ICAgUHJvdmlzaW9uYWxMb2FkUmVkaXJlY3QsCiAgICAgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwK
QEAgLTc3LDE1ICs3NiwxOCBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgUmVzb3VyY2VMb2Fk
RmFpbGVkLAogICAgIFJlc291cmNlTG9hZEZpbmlzaGVkLAogICAgIFJlc291cmNlUmVxdWVzdFNl
bnQsCisgICAgU3RhdHVzQmFyVmlzaWJsZSwKICAgICBOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24s
CiAgICAgTmV3V2luZG93UG9saWN5RGVjaXNpb24sCiAgICAgVGV4dEZvdW5kLAogICAgIFRpdGxl
Q2hhbmdlLAorICAgIFRvb2xiYXJWaXNpYmxlLAogICAgIFRvb2x0aXBUZXh0VW5zZXQsCiAgICAg
VG9vbHRpcFRleHRTZXQsCiAgICAgVVJMQ2hhbmdlZCwKICAgICBWaWJyYXRlLAogICAgIFdlYlBy
b2Nlc3NDcmFzaGVkLAorICAgIFdpbmRvd1Jlc2l6YWJsZSwKICNpZiBFTkFCTEUoV0VCX0lOVEVO
VFMpCiAgICAgSW50ZW50UmVxdWVzdCwKICNlbmRpZgpAQCAtMTY0LDggKzE2Niw2IEBAIHN0cnVj
dCBDYWxsQmFja0luZm88Y2FsbGJhY2tUeXBlPiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhBdXRoZW50aWNhdGlvblJlcXVlc3QsICJhdXRo
ZW50aWNhdGlvbixyZXF1ZXN0IiwgRXdrX0F1dGhfUmVxdWVzdCk7CiBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKEJhY2tGb3J3YXJkTGlzdENoYW5nZSwgImJhY2ssZm9yd2FyZCxsaXN0LGNoYW5n
ZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soQ2FuY2VsVmlicmF0aW9uLCAi
Y2FuY2VsLHZpYnJhdGlvbiIsIHZvaWQpOwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhDbG9z
ZVdpbmRvdywgImNsb3NlLHdpbmRvdyIsIHZvaWQpOwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFD
SyhDcmVhdGVXaW5kb3csICJjcmVhdGUsd2luZG93IiwgRXZhc19PYmplY3QqKTsKIERFQ0xBUkVf
RVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JDYW5jZWxsZWQsICJkb3dubG9hZCxjYW5jZWxs
ZWQiLCBFd2tfRG93bmxvYWRfSm9iKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxv
YWRKb2JGYWlsZWQsICJkb3dubG9hZCxmYWlsZWQiLCBFd2tfRG93bmxvYWRfSm9iX0Vycm9yKTsK
IERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JGaW5pc2hlZCwgImRvd25sb2Fk
LGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pvYik7CkBAIC0xNzksNiArMTc5LDcgQEAgREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jlc3MsICJsb2FkLHByb2dyZXNzIiwgZG91Ymxl
KTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkRmFpbGVkLCAibG9h
ZCxwcm92aXNpb25hbCxmYWlsZWQiLCBFd2tfRXJyb3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxM
QkFDSyhQcm92aXNpb25hbExvYWRSZWRpcmVjdCwgImxvYWQscHJvdmlzaW9uYWwscmVkaXJlY3Qi
LCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCwgImxvYWQscHJvdmlzaW9uYWwsc3RhcnRlZCIsIHZvaWQpOworREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhNZW51QmFyVmlzaWJsZSwgIm1lbnViYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVj
aXNpb24sbmF2aWdhdGlvbiIsIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNM
QVJFX0VXS19WSUVXX0NBTExCQUNLKE5ld1dpbmRvd1BvbGljeURlY2lzaW9uLCAicG9saWN5LGRl
Y2lzaW9uLG5ldyx3aW5kb3ciLCBFd2tfTmF2aWdhdGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRTdGFydGVkLCAicmVzb3VyY2UscmVx
dWVzdCxuZXciLCBFd2tfUmVzb3VyY2VfUmVxdWVzdCk7CkBAIC0xODYsMTMgKzE4NywxNiBAQCBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291cmNlTG9hZFJlc3BvbnNlLCAicmVzb3VyY2Us
cmVxdWVzdCxyZXNwb25zZSIsIEV3awogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJj
ZUxvYWRGYWlsZWQsICJyZXNvdXJjZSxyZXF1ZXN0LGZhaWxlZCIsIEV3a19SZXNvdXJjZV9Mb2Fk
X0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkRmluaXNoZWQs
ICJyZXNvdXJjZSxyZXF1ZXN0LGZpbmlzaGVkIiwgRXdrX1Jlc291cmNlKTsKIERFQ0xBUkVfRVdL
X1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VSZXF1ZXN0U2VudCwgInJlc291cmNlLHJlcXVlc3Qsc2Vu
dCIsIEV3a19SZXNvdXJjZV9SZXF1ZXN0KTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soU3Rh
dHVzQmFyVmlzaWJsZSwgInN0YXR1c2Jhcix2aXNpYmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19W
SUVXX0NBTExCQUNLKFRleHRGb3VuZCwgInRleHQsZm91bmQiLCB1bnNpZ25lZCk7CiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKFRpdGxlQ2hhbmdlLCAidGl0bGUsY2hhbmdlZCIsIGNoYXIpOwor
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sYmFyVmlzaWJsZSwgInRvb2xiYXIsdmlzaWJs
ZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sdGlwVGV4dFVuc2V0LCAi
dG9vbHRpcCx0ZXh0LHVuc2V0Iiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRv
b2x0aXBUZXh0U2V0LCAidG9vbHRpcCx0ZXh0LHNldCIsIGNoYXIpOwogREVDTEFSRV9FV0tfVklF
V19DQUxMQkFDSyhVUkxDaGFuZ2VkLCAidXJsLGNoYW5nZWQiLCBjaGFyKTsKIERFQ0xBUkVfRVdL
X1ZJRVdfQ0FMTEJBQ0soVmlicmF0ZSwgInZpYnJhdGUiLCB1aW50NjRfdCk7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFzaGVkLCAid2VicHJvY2VzcyxjcmFzaGVkIiwg
Ym9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdpbmRvd1Jlc2l6YWJsZSwgIndpbmRv
dyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3QsICJpbnRlbnQscmVxdWVzdCxuZXciLCBFd2tf
SW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlld0ltcGwuY3BwCmluZGV4IGVjM2YzMjc4MjE5MzVmN2UwZTNmOTA3YzA3NDg5M2VlNGVi
NDJiMDIuLjhmZTJjYmY2MDFiZjI5MjljYTg5YmEwOGM2MmZiYWE2OGIyMjlhOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKQEAgLTU0
LDYgKzU0LDcgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3
a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNp
bmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5oPgpAQCAtODMwLDM3ICs4MzEsNDUg
QEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJMQ2hhbmdlKCkKICAgICBpbmZvcm1JY29uQ2hh
bmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3SW1wbDo6Y3JlYXRlTmV3UGFnZShXS0RpY3Rp
b25hcnlSZWYgd2luZG93RmVhdHVyZXMpCitFd2tXaW5kb3dGZWF0dXJlcyogRXdrVmlld0ltcGw6
OndpbmRvd0ZlYXR1cmVzKCkKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0
RGF0YSgpOwotICAgIEFTU0VSVChzZC0+YXBpKTsKKyAgICBpZiAoIW1fd2luZG93RmVhdHVyZXMp
CisgICAgICAgIG1fd2luZG93RmVhdHVyZXMgPSBFd2tXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKDAs
IHRoaXMpOwogCi0gICAgRXZhc19PYmplY3QqIG5ld0V3a1ZpZXcgPSAwOwotCi0gICAgLy8gRXh0
cmFjdCB0aGUgd2lkdGggYW5kIGhlaWdodCBmcm9tIHRoZSB3aW5kb3cgYXR0cmlidXRlcyBhbmQg
cGFzcyB0aGVtIGFsb25nIHRvIHRoZSBlbWJlZGRlci4KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gd2lkdGhTdHIoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndp
ZHRoIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWlnaHRTdHIoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKKyAgICByZXR1cm4gbV93
aW5kb3dGZWF0dXJlcy5nZXQoKTsKK30KIAotICAgIFdLVHlwZVJlZiByZWYgPSBXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KHdpbmRvd0ZlYXR1cmVzLCB3aWR0aFN0ci5nZXQoKSk7Ci0gICAgdW5z
aWduZWQgd2lkdGggPSByZWYgPyBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihyZWYpKSA6IDA7Ci0gICAgcmVmID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3aW5k
b3dGZWF0dXJlcywgaGVpZ2h0U3RyLmdldCgpKTsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSByZWYg
PyBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7CitX
S1BhZ2VSZWYgRXdrVmlld0ltcGw6OmNyZWF0ZU5ld1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSog
d2luZG93RmVhdHVyZXMpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERh
dGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19j
cmVhdGVfbmV3KQorICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBpZiAoIShuZXdFd2tWaWV3ID0gc2QtPmFwaS0+d2luZG93X2NyZWF0ZV9u
ZXcoc2QsIHdpZHRoLCBoZWlnaHQpKSkKKyAgICBSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGV3
a1dpbmRvd0ZlYXR1cmVzID0gRXdrV2luZG93RmVhdHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJl
cywgdGhpcyk7CisKKyAgICBFdmFzX09iamVjdCogbmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRv
d19jcmVhdGUoc2QsIGV3a1dpbmRvd0ZlYXR1cmVzLmdldCgpKTsKKyAgICBpZiAoIW5ld0V3a1Zp
ZXcpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgRXdrVmlld0ltcGwqIG5ld1ZpZXdJbXBsID0g
RXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG5ld0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdW
aWV3SW1wbCk7CiAKKyAgICBuZXdWaWV3SW1wbC0+bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRv
d0ZlYXR1cmVzOworCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4o
bmV3Vmlld0ltcGwtPnBhZ2UoKSkpOwogfQogCiB2b2lkIEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2Uo
KQogewotICAgIHNtYXJ0Q2FsbGJhY2s8Q2xvc2VXaW5kb3c+KCkuY2FsbCgpOworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOwor
CisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xvc2UpCisgICAgICAgIHJldHVybjsKKworICAg
IHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CiB9CiAKIHZvaWQgRXdrVmlld0ltcGw6Om9uTW91
c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oCmluZGV4
IDcwYTY2MjEyMjIwOGJjN2Y0ODRmOWU4OWI1MzA4MGRlZTAxOWFjNDIuLjNmNmY4NGVmNDk3ODBl
NTA5ODBjNjI4MzM2YTk5ODI3ZDhiOWE0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBFd2tW
aWV3SW1wbF9oCiAKICNpbmNsdWRlICJFd2tWaWV3Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSW1t
dXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIlJlZlB0ckVmbC5oIgogI2luY2x1ZGUgIldL
RWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKQEAgLTc2LDYgKzc3
LDcgQEAgY2xhc3MgRXdrX0JhY2tfRm9yd2FyZF9MaXN0OwogY2xhc3MgRXdrX0NvbG9yX1BpY2tl
cjsKIGNsYXNzIEV3a19Qb3B1cF9NZW51OwogY2xhc3MgRXdrX1NldHRpbmdzOworY2xhc3MgRXdr
V2luZG93RmVhdHVyZXM7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB0eXBl
ZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0IEV2YXNfR0xfQ29udGV4dDsKQEAgLTEwMiw2ICsx
MDQsNyBAQCBwdWJsaWM6CiAgICAgRXdrQ29udGV4dCogZXdrQ29udGV4dCgpIHsgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsgfQogICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBt
X3NldHRpbmdzLmdldCgpOyB9CiAgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2Fy
ZExpc3QoKSB7IHJldHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsgfQorICAgIEV3a1dpbmRv
d0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcygpOwogCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXpl
KCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdDsKQEAgLTE1Niw3ICsxNTksNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaXNtaXNzQ29sb3JQaWNrZXIoKTsKICNlbmRpZgogCi0gICAg
V0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzKTsK
KyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkq
IHdpbmRvd0ZlYXR1cmVzKTsKICAgICB2b2lkIGNsb3NlUGFnZSgpOwogCiAgICAgdm9pZCByZXF1
ZXN0UG9wdXBNZW51KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlFZmwqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3Rv
ciwgY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMyX3Qgc2Vs
ZWN0ZWRJbmRleCk7CkBAIC0yNDMsNiArMjQ2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJ
bnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogI2VuZGlmCiAgICAgT3duUHRyPEV3a19TZXR0aW5n
cz4gbV9zZXR0aW5nczsKKyAgICBSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVh
dHVyZXM7CiAgICAgY29uc3Qgdm9pZCogbV9jdXJzb3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFu
IGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0LgogICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX2Zhdmlj
b25VUkw7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdXJsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5kZXggOGEzOTQ2ZWY5YjU3MjVjMDk0ZTVhN2Ew
YzhkZWQzOGQ3MTJiMWFjOS4uMGU5M2ZiZThjZjhmNzI2NzgwZGUyZThkMmY1ZTBkMzIyYjRjYjU3
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC0z
MCw4ICszMCw2IEBACiAgKiAgIGV3a19hdXRoX3JlcXVlc3RfcmVmKCkgb24gdGhlIHJlcXVlc3Qg
b2JqZWN0IHRvIHByb2Nlc3MgdGhlIGF1dGhlbnRpY2F0aW9uIGFzeW5jaHJvbm91c2x5LgogICog
LSAiYmFjayxmb3J3YXJkLGxpc3QsY2hhbmdlZCIsIHZvaWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmll
dydzIGJhY2sgLyBmb3J3YXJkIGxpc3QgaGFkIGNoYW5nZWQuCiAgKiAtICJjYW5jZWwsdmlicmF0
aW9uIiwgdm9pZDogcmVxdWVzdCB0byBjYW5jZWwgdGhlIHZpYnJhdGlvbi4KLSAqIC0gImNsb3Nl
LHdpbmRvdyIsIHZvaWQ6IHdpbmRvdyBpcyBjbG9zZWQuCi0gKiAtICJjcmVhdGUsd2luZG93Iiwg
RXZhc19PYmplY3QqKjogYSBuZXcgd2luZG93IGlzIGNyZWF0ZWQuCiAgKiAtICJkb3dubG9hZCxj
YW5jZWxsZWQiLCBFd2tfRG93bmxvYWRfSm9iKjogcmVwb3J0cyB0aGF0IGEgZG93bmxvYWQgd2Fz
IGVmZmVjdGl2ZWx5IGNhbmNlbGxlZC4KICAqIC0gImRvd25sb2FkLGZhaWxlZCIsIEV3a19Eb3du
bG9hZF9Kb2JfRXJyb3IqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBmYWlsZWQgd2l0aCB0aGUg
Z2l2ZW4gZXJyb3IuCiAgKiAtICJkb3dubG9hZCxmaW5pc2hlZCIsIEV3a19Eb3dubG9hZF9Kb2Iq
OiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgpAQCAtOTQs
NiArOTIsNyBAQAogI2luY2x1ZGUgImV3a190b3VjaC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVx
dWVzdC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfd2lu
ZG93X2ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8RXZhcy5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMK
QEAgLTE0OCwxNiArMTQ3LDE3IEBAIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyB7CiAgICAg
Ly8gICAtIFdlYiBkYXRhYmFzZS4KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKCpleGNlZWRlZF9k
YXRhYmFzZV9xdW90YSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IGNoYXIgKmRhdGFi
YXNlTmFtZSwgY29uc3QgY2hhciAqZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJy
ZW50UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVk
IGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVj
dGVkVXNhZ2UpOwogCi0gICAgLy8gbmV3IHdpbmRvdzoKLSAgICAvLyAgIC0gQ3JlYXRlIGEgbmV3
IHdpbmRvdyB3aXRoIHNwZWNpZmllZCBzaXplCi0gICAgRXZhc19PYmplY3QqICgqd2luZG93X2Ny
ZWF0ZV9uZXcpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFz
X0Nvb3JkIGhlaWdodCk7CisgICAgLy8gd2luZG93IGNyZWF0aW9uIGFuZCBjbG9zaW5nOgorICAg
IC8vICAgLSBDcmVhdGUgYSBuZXcgd2luZG93IHdpdGggc3BlY2lmaWVkIGZlYXR1cmVzIGFuZCBj
bG9zZSB3aW5kb3cuCisgICAgRXZhc19PYmplY3QgKigqd2luZG93X2NyZWF0ZSkoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJl
cyk7CisgICAgdm9pZCAoKndpbmRvd19jbG9zZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOwog
fTsKIAogLyoqCiAgKiBUaGUgdmVyc2lvbiB5b3UgaGF2ZSB0byBwdXQgaW50byB0aGUgdmVyc2lv
biBmaWVsZAogICogaW4gdGhlIEBhIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KICAq
LwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDdVTAorI2RlZmluZSBFV0tf
VklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDhVTAogCiAvKioKICAqIEluaXRpYWxpemVyIGZvciB3
aG9sZSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCkBAIC0xNjksNyArMTY5LDcgQEAg
c3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xB
U1NfSU5JVF9WRVJTSU9OCiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9W
RVJTSU9OCiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChzbWFydF9jbGFz
c19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMH0KKyNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0
KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MH0KIAogLyoqCiAgKiBJbml0aWFsaXplciB0byB6ZXJvIGEgd2hvbGUgRXdrX1ZpZXdfU21hcnRf
Q2xhc3Mgc3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzhiYWE4NDA1Yzk3
ZTAyZTIwY2Q5YmE0MDkzYTZkZDMyMzk2ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKQEAgLTAsMCAr
MSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKKworI2luY2x1ZGUgIldlYk51bWJlci5oIgor
I2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVpbmEu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworRXdrV2luZG93RmVhdHVyZXM6OkV3a1dp
bmRvd0ZlYXR1cmVzKEltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3
SW1wbCogdmlld0ltcGwpCisgICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQoreworICAgIGlmICh3
aW5kb3dGZWF0dXJlcykgeworICAgICAgICBtX3Rvb2xiYXJWaXNpYmxlID0gZ2V0V2luZG93RmVh
dHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwo
InRvb2xCYXJWaXNpYmxlIikpOworICAgICAgICBtX3N0YXR1c0JhclZpc2libGUgPSBnZXRXaW5k
b3dGZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVhdHVyZXMsIEFTQ0lJTGl0
ZXJhbCgic3RhdHVzQmFyVmlzaWJsZSIpKTsKKyAgICAgICAgbV9zY3JvbGxiYXJzVmlzaWJsZSA9
IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0dXJlcywg
QVNDSUlMaXRlcmFsKCJzY3JvbGxiYXJzVmlzaWJsZSIpKTsKKyAgICAgICAgbV9tZW51QmFyVmlz
aWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0
dXJlcywgQVNDSUlMaXRlcmFsKCJtZW51QmFyVmlzaWJsZSIpKTsKKyAgICAgICAgbV9sb2NhdGlv
bkJhclZpc2libGUgPSBnZXRXaW5kb3dGZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2lu
ZG93RmVhdHVyZXMsIEFTQ0lJTGl0ZXJhbCgibG9jYXRpb25CYXJWaXNpYmxlIikpOworICAgICAg
ICBtX3Jlc2l6YWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3
aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJyZXNpemFibGUiKSk7CisgICAgICAgIG1fZnVs
bFNjcmVlbiA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dG
ZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJmdWxsc2NyZWVuIikpOworCisgICAgICAgIG1fZ2VvbWV0
cnkuc2V0WChnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0Zl
YXR1cmVzLCBBU0NJSUxpdGVyYWwoIngiKSkpOworICAgICAgICBtX2dlb21ldHJ5LnNldFkoZ2V0
V2luZG93RmVhdHVyZVZhbHVlPGRvdWJsZSwgV2ViRG91YmxlPih3aW5kb3dGZWF0dXJlcywgQVND
SUlMaXRlcmFsKCJ5IikpKTsKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRXaWR0aChnZXRXaW5kb3dG
ZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVy
YWwoIndpZHRoIikpKTsKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRIZWlnaHQoZ2V0V2luZG93RmVh
dHVyZVZhbHVlPGRvdWJsZSwgV2ViRG91YmxlPih3aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFs
KCJoZWlnaHQiKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE93blB0cjxXZWJDb3JlOjpXaW5k
b3dGZWF0dXJlcz4gY29yZUZlYXR1cmVzID0gYWRvcHRQdHIobmV3IFdlYkNvcmU6OldpbmRvd0Zl
YXR1cmVzKCkpOworCisgICAgICAgIG1fdG9vbGJhclZpc2libGUgPSBjb3JlRmVhdHVyZXMtPnRv
b2xCYXJWaXNpYmxlOworICAgICAgICBtX3N0YXR1c0JhclZpc2libGUgPSBjb3JlRmVhdHVyZXMt
PnN0YXR1c0JhclZpc2libGU7CisgICAgICAgIG1fc2Nyb2xsYmFyc1Zpc2libGUgPSBjb3JlRmVh
dHVyZXMtPnNjcm9sbGJhcnNWaXNpYmxlOworICAgICAgICBtX21lbnVCYXJWaXNpYmxlID0gY29y
ZUZlYXR1cmVzLT5tZW51QmFyVmlzaWJsZTsKKyAgICAgICAgbV9sb2NhdGlvbkJhclZpc2libGUg
PSBjb3JlRmVhdHVyZXMtPmxvY2F0aW9uQmFyVmlzaWJsZTsKKyAgICAgICAgbV9yZXNpemFibGUg
PSBjb3JlRmVhdHVyZXMtPnJlc2l6YWJsZTsKKyAgICAgICAgbV9mdWxsU2NyZWVuID0gY29yZUZl
YXR1cmVzLT5mdWxsc2NyZWVuOworCisgICAgICAgIG1fZ2VvbWV0cnkuc2V0WChjb3JlRmVhdHVy
ZXMtPngpOworICAgICAgICBtX2dlb21ldHJ5LnNldFkoY29yZUZlYXR1cmVzLT55KTsKKyAgICAg
ICAgbV9nZW9tZXRyeS5zZXRXaWR0aChjb3JlRmVhdHVyZXMtPndpZHRoKTsKKyAgICAgICAgbV9n
ZW9tZXRyeS5zZXRIZWlnaHQoY29yZUZlYXR1cmVzLT5oZWlnaHQpOworICAgIH0KK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KK1QxIEV3a1dpbmRvd0ZlYXR1cmVzOjpn
ZXRXaW5kb3dGZWF0dXJlVmFsdWUoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMs
IGNvbnN0IFN0cmluZyYgZmVhdHVyZU5hbWUpCit7CisgICAgVDIqIGZlYXR1cmVWYWx1ZSA9IHN0
YXRpY19jYXN0PFQyKj4od2luZG93RmVhdHVyZXMtPmdldChmZWF0dXJlTmFtZSkpOworCisgICAg
aWYgKCFmZWF0dXJlVmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBm
ZWF0dXJlVmFsdWUtPnZhbHVlKCk7Cit9CisKK3ZvaWQgRXdrV2luZG93RmVhdHVyZXM6OnNldFRv
b2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpCit7CisgICAgbV90b29sYmFyVmlzaWJs
ZSA9IHRvb2xiYXJWaXNpYmxlOworICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8RXdrVmll
d0NhbGxiYWNrczo6VG9vbGJhclZpc2libGU+KCkuY2FsbCgmdG9vbGJhclZpc2libGUpOworfQor
Cit2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRTdGF0dXNCYXJWaXNpYmxlKGJvb2wgc3RhdHVz
QmFyVmlzaWJsZSkKK3sKKyAgICBtX3N0YXR1c0JhclZpc2libGUgPSBzdGF0dXNCYXJWaXNpYmxl
OworICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6U3RhdHVz
QmFyVmlzaWJsZT4oKS5jYWxsKCZzdGF0dXNCYXJWaXNpYmxlKTsKK30KKwordm9pZCBFd2tXaW5k
b3dGZWF0dXJlczo6c2V0TWVudUJhclZpc2libGUoYm9vbCBtZW51QmFyVmlzaWJsZSkKK3sKKyAg
ICBtX21lbnVCYXJWaXNpYmxlID0gbWVudUJhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21h
cnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpNZW51QmFyVmlzaWJsZT4oKS5jYWxsKCZtZW51
QmFyVmlzaWJsZSk7Cit9CisKK3ZvaWQgRXdrV2luZG93RmVhdHVyZXM6OnNldFJlc2l6YWJsZShi
b29sIHJlc2l6YWJsZSkKK3sKKyAgICBtX3Jlc2l6YWJsZSA9IHJlc2l6YWJsZTsKKyAgICBtX3Zp
ZXdJbXBsLT5zbWFydENhbGxiYWNrPEV3a1ZpZXdDYWxsYmFja3M6OldpbmRvd1Jlc2l6YWJsZT4o
KS5jYWxsKCZyZXNpemFibGUpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc190
b29sYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0
dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dG
ZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICByZXR1cm4gaW1w
bC0+dG9vbGJhclZpc2libGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNf
c3RhdHVzYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19m
ZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5k
b3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICByZXR1cm4g
aW1wbC0+c3RhdHVzQmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0
dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdp
bmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBF
d2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICBy
ZXR1cm4gaW1wbC0+c2Nyb2xsYmFyc1Zpc2libGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5k
b3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVz
KiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29u
c3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisg
ICAgcmV0dXJuIGltcGwtPm1lbnVCYXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2lu
ZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVh
dHVyZXMqIHdpbmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVS
Tihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7
CisKKyAgICByZXR1cm4gaW1wbC0+bG9jYXRpb25CYXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9v
bCBld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJO
KGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsK
KworICAgIHJldHVybiBpbXBsLT5yZXNpemFibGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5k
b3dfZmVhdHVyZXNfZnVsbHNjcmVlbl9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2lu
ZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3
a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKworICAgIHJl
dHVybiBpbXBsLT5mdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgZXdrX3dpbmRvd19mZWF0dXJlc19n
ZW9tZXRyeV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzLCBF
dmFzX0Nvb3JkKiB4LCBFdmFzX0Nvb3JkKiB5LCBFdmFzX0Nvb3JkKiB3aWR0aCwgRXZhc19Db29y
ZCogaGVpZ2h0KQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dp
bmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwpOworCisgICAgaWYgKHgpCisgICAg
ICAgICp4ID0gc3RhdGljX2Nhc3Q8RXZhc19Db29yZD4oaW1wbC0+Z2VvbWV0cnkoKS54KCkpOwor
CisgICAgaWYgKHkpCisgICAgICAgICp5ID0gc3RhdGljX2Nhc3Q8RXZhc19Db29yZD4oaW1wbC0+
Z2VvbWV0cnkoKS55KCkpOworCisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSBzdGF0
aWNfY2FzdDxFdmFzX0Nvb3JkPihpbXBsLT5nZW9tZXRyeSgpLndpZHRoKCkpOworCisgICAgaWYg
KGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IHN0YXRpY19jYXN0PEV2YXNfQ29vcmQ+KGltcGwt
Pmdlb21ldHJ5KCkuaGVpZ2h0KCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYjI1ODFk
MDg4MjA2ZmU0MDFmMGRhMWFjZGVlMmExMjBmZjBhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKQEAgLTAs
MCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tf
d2luZG93X2ZlYXR1cmVzLmgKKyAqIEBicmllZiAgIEFjY2VzcyB0byB0aGUgZmVhdHVyZXMgb2Yg
d2luZG93LgorICovCisKKyNpZm5kZWYgZXdrX3dpbmRvd19mZWF0dXJlc19oCisjZGVmaW5lIGV3
a193aW5kb3dfZmVhdHVyZXNfaAorCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPEV2YXMu
aD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAq
IERlY2xhcmUgRXdrX1dpbmRvd19GZWF0dXJlcyBhcyBFd2tfT2JqZWN0LgorICoKKyAqIEBzZWUg
RXdrX09iamVjdAorICovCit0eXBlZGVmIHN0cnVjdCBFd2tfT2JqZWN0IEV3a19XaW5kb3dfRmVh
dHVyZXM7CisKKy8qKgorICogUXVlcmllcyB0aGUgdG9vbGJhciB2aXNpYmlsaXR5IG9mIHRoZSB3
aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3Qg
dG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgdG9v
bGJhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VB
UEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNpYmxlX2dldChjb25z
dCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJp
ZXMgdGhlIHN0YXR1c2JhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisg
KiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAq
CisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgc3RhdHVzYmFyIHNob3VsZCBiZSB2aXNp
YmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dp
bmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKworLyoqCisgKiBRdWVyaWVzIHRoZSBzY3JvbGxiYXIg
dmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19m
ZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaXMgdGhlIHNjcm9sbGJhcnMgc2hvdWxkIGJlIHZpc2libGUsIEBjIEVJTkFfRkFM
U0Ugb3RoZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3Nj
cm9sbGJhcnNfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2Zl
YXR1cmVzKTsKKworLyoqCisgKiBRdWVyaWVzIHRoZSBtZW51YmFyIHZpc2liaWxpdHkgb2YgdGhl
IHdpbmRvdyBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVj
dCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSBt
ZW51YmFyIHNob3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwor
RUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0KGNv
bnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVl
cmllcyB0aGUgbG9jYXRpb25iYXIgdmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisg
KgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVz
CisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIGxvY2F0aW9uYmFyIHNob3VsZCBi
ZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRUFQSSBFaW5hX0Jvb2wg
ZXdrX3dpbmRvd19mZWF0dXJlc19sb2NhdGlvbmJhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2lu
ZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgaWYgdGhl
IHdpbmRvdyBpcyByZXNpemFibGUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUg
b2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMg
dGhlIHdpbmRvdyBzaG91bGQgYmUgcmVzaXphYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4K
KyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19yZXNpemFibGVfZ2V0KGNv
bnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVl
cmllcyB0aGUgdGhlIHdpbmRvdyBpcyBmdWxsc2NyZWVuCisgKgorICogQHBhcmFtIHdpbmRvd19m
ZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaXMgdGhlIHdpbmRvdyBzaG91bGQgYmUgZnVsbHNjcmVlbiwgQGMgRUlOQV9GQUxT
RSBvdGhlcndpc2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfZnVs
bHNjcmVlbl9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsK
KworLyoqCisgKiBHZXRzIGdlb21ldHJ5IHByb3BlcnRpZXMgb2YgYW4gRXdrX1dpbmRvd19GZWF0
dXJlcy4KKyAqCisgKiBQcm9wZXJ0aWVzIGFyZSByZXR1cm5lZCBpbiB0aGUgcmVzcGVjdGl2ZSBw
b2ludGVycy4gUGFzc2luZyBAYyBOVUxMIHRvIGFueSBvZgorICogdGhlc2UgcG9pbnRlcnMgd2ls
bCBjYXVzZSB0aGF0IHByb3BlcnR5IHRvIG5vdCBiZSByZXR1cm5lZC4KKyAqCisgKiBAcGFyYW0g
d2luZG93X2ZlYXR1cmVzIHRoZSB3aW5kb3cncyBmZWF0dXJlcworICogQHBhcmFtIHggdGhlIHBv
aW50ZXIgdG8gc3RvcmUgeCBwb3NpdGlvbgorICogQHBhcmFtIHkgdGhlIHBvaW50ZXIgdG8gc3Rv
cmUgeSBwb3NpdGlvbgorICogQHBhcmFtIHcgdGhlIHBvaW50ZXIgdG8gc3RvcmUgd2lkdGgKKyAq
IEBwYXJhbSBoIHRoZSBwb2ludGVyIHRvIHN0b3JlIGhlaWdodAorICovCitFQVBJIHZvaWQgZXdr
X3dpbmRvd19mZWF0dXJlc19nZW9tZXRyeV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAq
d2luZG93X2ZlYXR1cmVzLCBFdmFzX0Nvb3JkICp4LCBFdmFzX0Nvb3JkICp5LCBFdmFzX0Nvb3Jk
ICp3LCBFdmFzX0Nvb3JkICpoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwor
I2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVyZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41NTE4NzFiOGJlNDI1MzQxMDQwYjhkNjA0YWYyMjA0YWI3NmJmNjdlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dp
bmRvd19mZWF0dXJlc19wcml2YXRlLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisKKyNpZm5kZWYgZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKKyNkZWZpbmUg
ZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gKKworI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgi
CisjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIldpbmRvd0ZlYXR1
cmVzLmgiCisjaW5jbHVkZSAiZXdrX29iamVjdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCitjbGFzcyBFd2tW
aWV3SW1wbDsKKworY2xhc3MgRXdrV2luZG93RmVhdHVyZXMgOiBwdWJsaWMgRXdrX09iamVjdCB7
CitwdWJsaWM6CisgICAgRVdLX09CSkVDVF9ERUNMQVJFKEV3a1dpbmRvd0ZlYXR1cmVzKQorCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGNyZWF0ZShXZWJLaXQ6Oklt
bXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0ltcGwp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a1dpbmRvd0ZlYXR1cmVzKHdp
bmRvd0ZlYXR1cmVzLCB2aWV3SW1wbCkpOworICAgIH0KKworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VvbWV0cnk7IH0KKyAgICB2b2lkIHNldEdl
b21ldHJ5KFdlYkNvcmU6OkZsb2F0UmVjdCYgZ2VvbWV0cnkpIHsgbV9nZW9tZXRyeSA9IGdlb21l
dHJ5OyB9CisKKyAgICBib29sIHRvb2xiYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90b29s
YmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0VG9vbGJhclZpc2libGUoYm9vbCB0b29sYmFyVmlz
aWJsZSk7CisKKyAgICBib29sIHN0YXR1c0JhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXR1c0JhclZpc2libGU7IH0KKyAgICB2b2lkIHNldFN0YXR1c0JhclZpc2libGUoYm9vbCBzdGF0
dXNCYXJWaXNpYmxlKTsKKworICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbGJhcnNWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxiYXJzVmlzaWJs
ZShib29sIHNjcm9sbGJhcnNWaXNpYmxlKSB7IG1fc2Nyb2xsYmFyc1Zpc2libGUgPSBzY3JvbGxi
YXJzVmlzaWJsZTsgfQorCisgICAgYm9vbCBtZW51QmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVudUJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldE1lbnVCYXJWaXNpYmxlKGJvb2wgbWVu
dUJhclZpc2libGUpOworCisgICAgYm9vbCBsb2NhdGlvbkJhclZpc2libGUoKSBjb25zdCB7IHJl
dHVybiBtX2xvY2F0aW9uQmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0TG9jYXRpb25CYXJWaXNp
YmxlKGJvb2wgbG9jYXRpb25CYXJWaXNpYmxlKSB7IG1fbG9jYXRpb25CYXJWaXNpYmxlID0gbG9j
YXRpb25CYXJWaXNpYmxlOyB9CisKKyAgICBib29sIHJlc2l6YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzaXphYmxlOyB9CisgICAgdm9pZCBzZXRSZXNpemFibGUoYm9vbCByZXNpemFibGUpOwor
CisgICAgYm9vbCBmdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsU2NyZWVuOyB9Cisg
ICAgdm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wgZnVsbFNjcmVlbikgeyBtX2Z1bGxTY3JlZW4gPSBm
dWxsU2NyZWVuOyB9CisKK3ByaXZhdGU6CisgICAgRXdrV2luZG93RmVhdHVyZXMoV2ViS2l0OjpJ
bW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJbXBs
KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgIHN0YXRpYyBU
MSBnZXRXaW5kb3dGZWF0dXJlVmFsdWUoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5k
b3dGZWF0dXJlcywgY29uc3QgU3RyaW5nJiBmZWF0dXJlTmFtZSk7CisKKyAgICBFd2tWaWV3SW1w
bCogbV92aWV3SW1wbDsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2dlb21ldHJ5OworICAg
IGJvb2wgbV90b29sYmFyVmlzaWJsZTsKKyAgICBib29sIG1fc3RhdHVzQmFyVmlzaWJsZTsKKyAg
ICBib29sIG1fc2Nyb2xsYmFyc1Zpc2libGU7CisgICAgYm9vbCBtX21lbnVCYXJWaXNpYmxlOwor
ICAgIGJvb2wgbV9sb2NhdGlvbkJhclZpc2libGU7CisgICAgYm9vbCBtX3Jlc2l6YWJsZTsKKyAg
ICBib29sIG1fZnVsbFNjcmVlbjsKK307CisKKyNlbmRpZiAvLyBld2tfd2luZG93X2ZlYXR1cmVz
X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lZTUwMzEzNDY2MDZjN2QzYjJjMGRhMGNiZjg0ZGRhYzljZDcwNzEzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2sy
X3dpbmRvd19mZWF0dXJlcy5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0sy
VW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29yZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRlc3Q7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVEZWZhdWx0V2luZG93KEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93RmVh
dHVyZXMpCit7CisgICAgLy8gZGVmYXVsdCB2YWx1ZXMgb2YgV2ViQ29yZTpXaW5kb3dGZWF0dXJl
cygpCisgICAgLy8gLSBtZW51QmFyVmlzaWJsZSh0cnVlKQorICAgIC8vIC0gc3RhdHVzQmFyVmlz
aWJsZSh0cnVlKQorICAgIC8vIC0gdG9vbEJhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIGxvY2F0
aW9uQmFyVmlzaWJsZSh0cnVlKQorICAgIC8vIC0gc2Nyb2xsYmFyc1Zpc2libGUodHJ1ZSkKKyAg
ICAvLyAtIHJlc2l6YWJsZSh0cnVlKQorICAgIC8vIC0gZnVsbHNjcmVlbihmYWxzZSkKKworICAg
IEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNpYmxlX2dldCh3aW5k
b3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfc3RhdHVz
YmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dp
bmRvd19mZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7Cisg
ICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0KHdp
bmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19sb2Nh
dGlvbmJhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3
a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworCisgICAg
RVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfZnVsbHNjcmVlbl9nZXQod2luZG93RmVh
dHVyZXMpKTsKKworICAgIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV3a193aW5kb3df
ZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd0ZlYXR1cmVzLCAmeCwgJnksICZ3aWR0aCwgJmhl
aWdodCk7CisKKyAgICBFWFBFQ1RfRVEoMCwgeCk7CisgICAgRVhQRUNUX0VRKDAsIHkpOworICAg
IEVYUEVDVF9FUSgwLCB3aWR0aCk7CisgICAgRVhQRUNUX0VRKDAsIGhlaWdodCk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a193aW5kb3dfZmVhdHVy
ZXNfZGVmYXVsdF9wcm9wZXJ0eV9nZXQpCit7CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSB3ZWJW
aWV3KCk7CisKKyAgICBjb25zdCBjaGFyIHdpbmRvd0hUTUxbXSA9ICI8aHRtbD48Ym9keSBvbkxv
YWQ9XCJ3aW5kb3cub3BlbignJywgJycpO1wiPjwvYm9keT48L2h0bWw+IjsKKworICAgIGV3a1Zp
ZXdDbGFzcygpLT53aW5kb3dfY3JlYXRlID0gY3JlYXRlRGVmYXVsdFdpbmRvdzsKKworICAgIGV3
a192aWV3X2h0bWxfc3RyaW5nX2xvYWQodmlldywgd2luZG93SFRNTCwgMCwgMCk7CisgICAgQVNT
RVJUX1RSVUUod2FpdFVudGlsTG9hZEZpbmlzaGVkKCkpOworfQorCitzdGF0aWMgRXZhc19PYmpl
Y3QqIGNyZWF0ZVdpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0IEV3
a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd0ZlYXR1cmVzKQoreworICAgIEVYUEVDVF9GQUxTRShl
d2tfd2luZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsK
KyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxlX2dl
dCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNf
c2Nyb2xsYmFyc192aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9GQUxT
RShld2tfd2luZG93X2ZlYXR1cmVzX21lbnViYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19sb2NhdGlvbmJhcl92aXNp
YmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVh
dHVyZXNfcmVzaXphYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9GQUxTRShl
d2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisKKyAg
ICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKKyAgICBld2tfd2luZG93X2ZlYXR1cmVzX2dlb21l
dHJ5X2dldCh3aW5kb3dGZWF0dXJlcywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisgICAg
RVhQRUNUX0VRKDEwMCwgeCk7CisgICAgRVhQRUNUX0VRKDE1MCwgeSk7CisgICAgRVhQRUNUX0VR
KDQwMCwgd2lkdGgpOworICAgIEVYUEVDVF9FUSg0MDAsIGhlaWdodCk7CisKKyAgICByZXR1cm4g
MDsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a193aW5kb3dfZmVhdHVyZXNfcHJv
cGVydHlfZ2V0KQoreworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworCisgICAg
Y29uc3QgY2hhciB3aW5kb3dIVE1MW10gPSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9w
ZW4oJycsICcnLCAnbGVmdD0xMDAsdG9wPTE1MCx3aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2NhdGlv
bj1ubyxtZW51YmFyPW5vLHN0YXR1cz15ZXMsdG9vbGJhcj1ubyxzY3JvbGxiYXJzPXllcyxyZXNp
emFibGU9eWVzLGZ1bGxzY3JlZW49bm8nKTtcIj48L2JvZHk+PC9odG1sPiI7CisKKyAgICBld2tW
aWV3Q2xhc3MoKS0+d2luZG93X2NyZWF0ZSA9IGNyZWF0ZVdpbmRvdzsKKworICAgIGV3a192aWV3
X2h0bWxfc3RyaW5nX2xvYWQodmlldywgd2luZG93SFRNTCwgMCwgMCk7CisgICAgQVNTRVJUX1RS
VUUod2FpdFVudGlsTG9hZEZpbmlzaGVkKCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCmluZGV4IDJiNzUwNzEwZjlkZTRhN2NlNGY4
OWVkMDc2OWY2ZTU3NDUxODg1NTkuLjFjNWE4YTE5MjU2YTExOGZjNzMzYTEwODY1NTM3MmJlN2Ey
NjJiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xp
ZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVu
dEVmbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXS0V2ZW50LmgiCiAjaW5jbHVk
ZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcHJpdmF0
ZS5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
PEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CiAKQEAgLTQ5LDkgKzUw
LDkgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OmNsb3NlUGFnZShXS1BhZ2VSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCiAgICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmll
d0ltcGwtPmNsb3NlUGFnZSgpOwogfQogCi1XS1BhZ2VSZWYgUGFnZVVJQ2xpZW50RWZsOjpjcmVh
dGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYgd2lu
ZG93RmVhdHVyZXMsIFdLRXZlbnRNb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK1dLUGFnZVJlZiBQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZU5ld1Bh
Z2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVlc3RSZWYsIFdLRGljdGlvbmFyeVJlZiB3a1dpbmRvd0Zl
YXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCiB7Ci0gICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQYWdlKHdpbmRvd0ZlYXR1cmVzKTsKKyAgICByZXR1cm4g
dG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPmNyZWF0ZU5ld1BhZ2Uo
dG9JbXBsKHdrV2luZG93RmVhdHVyZXMpKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnJ1
bkphdmFTY3JpcHRBbGVydChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIGFsZXJ0VGV4dCwgV0tGcmFt
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTcwLDYgKzcxLDcwIEBAIFdLU3RyaW5n
UmVmIFBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdFByb21wdChXS1BhZ2VSZWYsIFdLU3Ry
aW5nUmVmIG1lc3NhZ2UsCiAgICAgcmV0dXJuIHZhbHVlID8gV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcodmFsdWUpIDogMDsKIH0KIAorYm9vbCBQYWdlVUlDbGllbnRFZmw6OnRvb2xiYXJz
QXJlVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdr
V2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbykt
Pm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAg
ICByZXR1cm4gZmVhdHVyZXMtPnRvb2xiYXJWaXNpYmxlKCk7Cit9CisKK3ZvaWQgUGFnZVVJQ2xp
ZW50RWZsOjpzZXRUb29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBib29sIHRvb2xiYXJWaXNp
YmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1w
bCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsOworICAgIEV3a1dp
bmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAg
IEFTU0VSVChmZWF0dXJlcyk7CisKKyAgICBmZWF0dXJlcy0+c2V0VG9vbGJhclZpc2libGUodG9v
bGJhclZpc2libGUpOworfQorCitib29sIFBhZ2VVSUNsaWVudEVmbDo6bWVudUJhcklzVmlzaWJs
ZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVh
dHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0lt
cGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4g
ZmVhdHVyZXMtPm1lbnVCYXJWaXNpYmxlKCk7Cit9CisKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpz
ZXRNZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCBtZW51QmFyVmlzaWJsZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VV
SUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbDsKKyAgICBFd2tXaW5kb3dGZWF0dXJl
cyogZmVhdHVyZXMgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVh
dHVyZXMpOworCisgICAgZmVhdHVyZXMtPnNldE1lbnVCYXJWaXNpYmxlKG1lbnVCYXJWaXNpYmxl
KTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRFZmw6OnN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VS
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZl
YXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRv
d0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4gZmVhdHVyZXMt
PnN0YXR1c0JhclZpc2libGUoKTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1
c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgc3RhdHVzQmFyVmlzaWJsZSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNs
aWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbDsKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyog
ZmVhdHVyZXMgPSB2aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVy
ZXMpOworCisgICAgZmVhdHVyZXMtPnNldFN0YXR1c0JhclZpc2libGUoc3RhdHVzQmFyVmlzaWJs
ZSk7Cit9CisKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjppc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVz
ID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1
cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4gZmVhdHVyZXMtPnJlc2l6
YWJsZSgpOworfQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0SXNSZXNpemFibGUoV0tQYWdl
UmVmLCBib29sIHJlc2l6YWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tW
aWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3
SW1wbDsKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB2aWV3SW1wbC0+d2luZG93
RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworCisgICAgZmVhdHVyZXMtPnNldFJl
c2l6YWJsZShyZXNpemFibGUpOworfQorCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiB2
b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2hvd0NvbG9yUGlja2VyKFdLUGFnZVJlZiwgV0tTdHJpbmdS
ZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9yUGlja2VyUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CkBAIC0xNDEsNiArMjA2LDE0IEBAIFBhZ2VVSUNs
aWVudEVmbDo6UGFnZVVJQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKICAgICB1aUNs
aWVudC5ydW5KYXZhU2NyaXB0QWxlcnQgPSBydW5KYXZhU2NyaXB0QWxlcnQ7CiAgICAgdWlDbGll
bnQucnVuSmF2YVNjcmlwdENvbmZpcm0gPSBydW5KYXZhU2NyaXB0Q29uZmlybTsKICAgICB1aUNs
aWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0ID0gcnVuSmF2YVNjcmlwdFByb21wdDsKKyAgICB1aUNs
aWVudC50b29sYmFyc0FyZVZpc2libGUgPSB0b29sYmFyc0FyZVZpc2libGU7CisgICAgdWlDbGll
bnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlID0gc2V0VG9vbGJhcnNBcmVWaXNpYmxlOworICAgIHVp
Q2xpZW50Lm1lbnVCYXJJc1Zpc2libGUgPSBtZW51QmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50
LnNldE1lbnVCYXJJc1Zpc2libGUgPSBzZXRNZW51QmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50
LnN0YXR1c0JhcklzVmlzaWJsZSA9IHN0YXR1c0JhcklzVmlzaWJsZTsKKyAgICB1aUNsaWVudC5z
ZXRTdGF0dXNCYXJJc1Zpc2libGUgPSBzZXRTdGF0dXNCYXJJc1Zpc2libGU7CisgICAgdWlDbGll
bnQuaXNSZXNpemFibGUgPSBpc1Jlc2l6YWJsZTsKKyAgICB1aUNsaWVudC5zZXRJc1Jlc2l6YWJs
ZSA9IHNldElzUmVzaXphYmxlOwogICAgIHVpQ2xpZW50LnRha2VGb2N1cyA9IHRha2VGb2N1czsK
ICAgICB1aUNsaWVudC5mb2N1cyA9IGZvY3VzOwogICAgIHVpQ2xpZW50LnVuZm9jdXMgPSB1bmZv
Y3VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGll
bnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgK
aW5kZXggMmY1NDE5MmEyYWUwZmI3MDM5ZTEyYmM5MTRiNjc4YzgzNjdmODE2Yi4uZTY4NDE0YWNm
Yjc0ODhhM2ViOTdmZmI0OGU3ODRlMDEwMTA1YWFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCkBAIC01MCw2ICs1MCwxNCBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChXS1BhZ2VSZWYsIFdLU3RyaW5n
UmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIGJvb2wgcnVuSmF2YVNj
cmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwgV0tGcmFtZVJlZiwgY29uc3Qgdm9p
ZCopOwogICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBydW5KYXZhU2NyaXB0UHJvbXB0KFdLUGFnZVJl
ZiwgV0tTdHJpbmdSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7Cisg
ICAgc3RhdGljIGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFn
ZVJlZiwgYm9vbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgbWVu
dUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0
YXRpYyB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTdGF0dXNC
YXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgYm9vbCBpc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworICAgIHN0YXRpYyB2b2lkIHNldElzUmVzaXphYmxlKFdLUGFnZVJlZiwgYm9vbCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAg
c3RhdGljIHZvaWQgc2hvd0NvbG9yUGlja2VyKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgaW5pdGlh
bENvbG9yLCBXS0NvbG9yUGlja2VyUmVzdWx0TGlzdGVuZXJSZWYsIGNvbnN0IHZvaWQqKTsKICAg
ICBzdGF0aWMgdm9pZCBoaWRlQ29sb3JQaWNrZXIoV0tQYWdlUmVmLCBjb25zdCB2b2lkKik7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2M2NWM5
YmEzMDEwMDc1NmJiNzk4YTg2ZDY0MDVlMjJmMTE1N2U0OS4uYzExY2I0MjhmZDcxNGQ1MTIxZGMw
M2Y1ZDMwMzhjODcxNjE3YjJjNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTExLTE2ICBKaW53b28gU29uZyAg
PGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFkZCBFd2tf
V2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgd2luZG93X2Ny
ZWF0ZSBhbmQgd2luZG93X2Nsb3NlIHNtYXJ0Y2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAg
ICogTWluaUJyb3dzZXIvZWZsL21haW4uYzoKKyAgICAgICAgKG9uX3dpbmRvd19jcmVhdGUpOgor
ICAgICAgICAob25fd2luZG93X2Nsb3NlKToKKyAgICAgICAgKHdpbmRvd19jcmVhdGUpOgorCiAy
MDEyLTExLTE0ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXgg
dGhlIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rv
b2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKaW5kZXggOTJkM2YyZmY5ZjNlNDI2Y2E1YTg5NzEz
MTBhMzg0NTY2YTA0Yzg3ZC4uZDE5NTE4ZGEyMzQwN2I2N2FjMGExODA4NmM1MTljOTg5NzdjNDMy
NiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYworKysgYi9Ub29scy9N
aW5pQnJvd3Nlci9lZmwvbWFpbi5jCkBAIC0yODQsMjAgKzI4NCw2IEBAIG9uX2JhY2tfZm9yd2Fy
ZF9saXN0X2NoYW5nZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZv
aWQgKmV2ZW50CiAgICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5mb3J3YXJkX2J1
dHRvbiwgIWV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoZXdrX3ZpZXcpKTsKIH0KIAotc3RhdGlj
IEV2YXNfT2JqZWN0Kgotb25fbmV3X3dpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRXZh
c19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCi17Ci0gICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IHdpbmRvd19jcmVhdGUoTlVMTCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgd2luZG93
cyA9IGVpbmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKLSAgICByZXR1cm4gd2luZG93
LT5ld2tfdmlldzsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2Nsb3NlX3dpbmRvdyh2b2lkICp1c2Vy
X2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgICB3
aW5kb3dfY2xvc2UoKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhKTsKLX0KLQogc3RhdGljIHZv
aWQKIG9uX3Byb2dyZXNzKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2
b2lkICpldmVudF9pbmZvKQogewpAQCAtNzYzLDYgKzc0OSwzOSBAQCBzdGF0aWMgRWluYV9Cb29s
IG9uX2Z1bGxzY3JlZW5fZXhpdChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCitzdGF0aWMgRXZhc19PYmplY3QgKgorb25fd2luZG93X2NyZWF0ZShF
d2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMg
KndpbmRvd19mZWF0dXJlcykKK3sKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOworICAg
IGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisKKyAgICBld2tfd2luZG93X2Zl
YXR1cmVzX2dlb21ldHJ5X2dldCh3aW5kb3dfZmVhdHVyZXMsICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0KTsKKworICAgIGlmICghd2lkdGgpCisgICAgICAgIHdpZHRoID0gd2luZG93X3dpZHRoOwor
CisgICAgaWYgKCFoZWlnaHQpCisgICAgICAgIGhlaWdodCA9IHdpbmRvd19oZWlnaHQ7CisKKyAg
ICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBFdmFzX09iamVjdCAqbmV3X3ZpZXcgPSB3aW5kb3ctPmV3a192aWV3OworCisg
ICAgd2luZG93cyA9IGVpbmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKKworICAgIGlu
Zm8oIm1pbmlicm93c2VyOiBsb2NhdGlvbiglZCwlZCkgc2l6ZT0oJWQsJWQpXG4iLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBuZXdfdmlldzsKK30KKworc3RhdGljIHZvaWQK
K29uX3dpbmRvd19jbG9zZShFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEpCit7CisgICAg
QnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc21hcnRE
YXRhLT5zZWxmKTsKKyAgICB3aW5kb3dfY2xvc2Uod2luZG93KTsKK30KKwogc3RhdGljIHZvaWQK
IGF1dGhfcG9wdXBfY2xvc2UoQXV0aF9EYXRhICphdXRoX2RhdGEpCiB7CkBAIC0xMDMwLDcgKzEw
NDksOSBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3QgY2hhciAq
dXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZXdrVmlld0NsYXNzLT53aW5kb3dfZ2Vv
bWV0cnlfc2V0ID0gb25fd2luZG93X2dlb21ldHJ5X3NldDsKICAgICBld2tWaWV3Q2xhc3MtPmZ1
bGxzY3JlZW5fZW50ZXIgPSBvbl9mdWxsc2NyZWVuX2VudGVyOwogICAgIGV3a1ZpZXdDbGFzcy0+
ZnVsbHNjcmVlbl9leGl0ID0gb25fZnVsbHNjcmVlbl9leGl0OwotICAgIGV3a1ZpZXdDbGFzcy0+
d2luZG93X2NyZWF0ZV9uZXcgPSBvbl9uZXdfd2luZG93OworICAgIGV3a1ZpZXdDbGFzcy0+d2lu
ZG93X2NyZWF0ZSA9IG9uX3dpbmRvd19jcmVhdGU7CisgICAgZXdrVmlld0NsYXNzLT53aW5kb3df
Y2xvc2UgPSBvbl93aW5kb3dfY2xvc2U7CisKIAogICAgIEV2YXMgKmV2YXMgPSBldmFzX29iamVj
dF9ldmFzX2dldCh3aW5kb3ctPmVsbV93aW5kb3cpOwogICAgIEV2YXNfU21hcnQgKnNtYXJ0ID0g
ZXZhc19zbWFydF9jbGFzc19uZXcoJmV3a1ZpZXdDbGFzcy0+c2MpOwpAQCAtMTA0Nyw3ICsxMDY4
LDYgQEAgc3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5kb3dfY3JlYXRlKGNvbnN0IGNoYXIgKnVy
bCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGV3a19zZXR0aW5nc19wcmVmZXJyZWRfbWlu
aW11bV9jb250ZW50c193aWR0aF9zZXQoc2V0dGluZ3MsIDApOwogCiAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJhdXRoZW50aWNhdGlvbixyZXF1
ZXN0Iiwgb25fYXV0aGVudGljYXRpb25fcmVxdWVzdCwgd2luZG93KTsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImNsb3NlLHdpbmRvdyIsIG9u
X2Nsb3NlX3dpbmRvdywgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLGZhaWxlZCIsIG9uX2Rvd25sb2FkX2ZhaWxl
ZCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5l
d2tfdmlldywgImRvd25sb2FkLGZpbmlzaGVkIiwgb25fZG93bmxvYWRfZmluaXNoZWQsIHdpbmRv
dyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcs
ICJkb3dubG9hZCxyZXF1ZXN0Iiwgb25fZG93bmxvYWRfcmVxdWVzdCwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174908</attachid>
            <date>2012-11-19 00:47:44 -0800</date>
            <delta_ts>2012-11-19 03:00:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121119174528.patch</filename>
            <type>text/plain</type>
            <size>45690</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzVkMDczNzg1YzIzZjg0
OTI4ZDdlM2RmNThhNDk5ODA0NThlYTRmNi4uMDdhNzdmODI0OGM5NTVkYWZmOGI0Y2Y2ZThiYmMw
ZjQ1MjQxN2Y2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTE5ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IHZhbHVlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxiYWNrcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwOgorICAgICAgICAoRXdrVmll
d0ltcGw6OndpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQ
YWdlKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmg6CisgICAgICAgIChFd2tWaWV3SW1wbCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVm
bDo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dG9v
bGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
VUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGll
bnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZs
OjpQYWdlVUlDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmg6CisgICAgICAgIChQYWdlVUlDbGllbnRFZmwpOgorCiAyMDEyLTExLTE4ICBZYWVsIEFo
YXJvbiAgPHlhZWwuYWhhcm9uQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFdyb25n
IHRyYW5zZm9ybSB3aGVuIHVzaW5nIHNvZnR3YXJlIHBhdGguCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCmluZGV4IGJiODc0N2IxY2IxZjU4MzhjMmRkN2NjZGRmNzgyOTExZWE2N2MxZTUuLjY3OWE2
YTU3YjRjM2FhMmJhZWRkZTNmMmVlMmY5YTIzOGRlMWVlODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCkBAIC03Myw2ICs3Myw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNw
cAogCiAgICAgVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcAogCkBAIC0yNzks
NiArMjgwLDcgQEAgU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmgiCiAgICAgIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVt
ZV9yZXF1ZXN0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5oIgogKQogCiBJTlNUQUxMKEZJTEVT
ICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi9lZmwvZXdlYmtpdDIucGMgREVTVElOQVRJT04g
bGliL3BrZ2NvbmZpZykKQEAgLTM3Niw2ICszNzgsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5B
UklFUwogICAgIHRlc3RfZXdrMl9zdG9yYWdlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfdGV4dF9j
aGVja2VyCiAgICAgdGVzdF9ld2syX3ZpZXcKKyAgICB0ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVz
CiApCiAKIElGIChFTkFCTEVfQVBJX1RFU1RTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggMDdjYTEyOTM1MGY0ZWRiN2UzZGI0YmY5MmFkNzBiOGMz
YTIwOWNlNC4uYWRhYWUxZWNkZTUwNjc5Yzk5NWNjOTViZWI3ZDE5YTExODYwZTU1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC01OCw1ICs1OCw2
IEBACiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgogI2luY2x1ZGUgImV3a191cmxfc2No
ZW1lX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgorI2luY2x1ZGUgImV3a193aW5k
b3dfZmVhdHVyZXMuaCIKIAogI2VuZGlmIC8vIEVXZWJLaXQyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaAppbmRleCA5ODUyNTk5
YTI3ODNhNjFlYTc3YzU3ZGVhZjUyMWIyYzUzNTZmZjM0Li5hNjNhODU5YTg3N2I1MzE3YTAyNjA0
OWQxNDc5Y2VlYjQ0NGViNzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCkBAIC01Nyw4ICs1Nyw2IEBAIGVudW0gQ2FsbGJh
Y2tUeXBlIHsKICAgICBBdXRoZW50aWNhdGlvblJlcXVlc3QsCiAgICAgQmFja0ZvcndhcmRMaXN0
Q2hhbmdlLAogICAgIENhbmNlbFZpYnJhdGlvbiwKLSAgICBDbG9zZVdpbmRvdywKLSAgICBDcmVh
dGVXaW5kb3csCiAgICAgRG93bmxvYWRKb2JDYW5jZWxsZWQsCiAgICAgRG93bmxvYWRKb2JGYWls
ZWQsCiAgICAgRG93bmxvYWRKb2JGaW5pc2hlZCwKQEAgLTY5LDYgKzY3LDcgQEAgZW51bSBDYWxs
YmFja1R5cGUgewogICAgIExvYWRFcnJvciwKICAgICBMb2FkRmluaXNoZWQsCiAgICAgTG9hZFBy
b2dyZXNzLAorICAgIE1lbnVCYXJWaXNpYmxlLAogICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwK
ICAgICBQcm92aXNpb25hbExvYWRSZWRpcmVjdCwKICAgICBQcm92aXNpb25hbExvYWRTdGFydGVk
LApAQCAtNzcsMTUgKzc2LDE4IEBAIGVudW0gQ2FsbGJhY2tUeXBlIHsKICAgICBSZXNvdXJjZUxv
YWRGYWlsZWQsCiAgICAgUmVzb3VyY2VMb2FkRmluaXNoZWQsCiAgICAgUmVzb3VyY2VSZXF1ZXN0
U2VudCwKKyAgICBTdGF0dXNCYXJWaXNpYmxlLAogICAgIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
biwKICAgICBOZXdXaW5kb3dQb2xpY3lEZWNpc2lvbiwKICAgICBUZXh0Rm91bmQsCiAgICAgVGl0
bGVDaGFuZ2UsCisgICAgVG9vbGJhclZpc2libGUsCiAgICAgVG9vbHRpcFRleHRVbnNldCwKICAg
ICBUb29sdGlwVGV4dFNldCwKICAgICBVUkxDaGFuZ2VkLAogICAgIFZpYnJhdGUsCiAgICAgV2Vi
UHJvY2Vzc0NyYXNoZWQsCisgICAgV2luZG93UmVzaXphYmxlLAogI2lmIEVOQUJMRShXRUJfSU5U
RU5UUykKICAgICBJbnRlbnRSZXF1ZXN0LAogI2VuZGlmCkBAIC0xNjQsOCArMTY2LDYgQEAgc3Ry
dWN0IENhbGxCYWNrSW5mbzxjYWxsYmFja1R5cGU+IHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEF1dGhlbnRpY2F0aW9uUmVxdWVzdCwgImF1
dGhlbnRpY2F0aW9uLHJlcXVlc3QiLCBFd2tfQXV0aF9SZXF1ZXN0KTsKIERFQ0xBUkVfRVdLX1ZJ
RVdfQ0FMTEJBQ0soQmFja0ZvcndhcmRMaXN0Q2hhbmdlLCAiYmFjayxmb3J3YXJkLGxpc3QsY2hh
bmdlZCIsIHZvaWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhDYW5jZWxWaWJyYXRpb24s
ICJjYW5jZWwsdmlicmF0aW9uIiwgdm9pZCk7Ci1ERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKENs
b3NlV2luZG93LCAiY2xvc2Usd2luZG93Iiwgdm9pZCk7Ci1ERUNMQVJFX0VXS19WSUVXX0NBTExC
QUNLKENyZWF0ZVdpbmRvdywgImNyZWF0ZSx3aW5kb3ciLCBFdmFzX09iamVjdCopOwogREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhEb3dubG9hZEpvYkNhbmNlbGxlZCwgImRvd25sb2FkLGNhbmNl
bGxlZCIsIEV3a19Eb3dubG9hZF9Kb2IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3du
bG9hZEpvYkZhaWxlZCwgImRvd25sb2FkLGZhaWxlZCIsIEV3a19Eb3dubG9hZF9Kb2JfRXJyb3Ip
OwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3dubG9hZEpvYkZpbmlzaGVkLCAiZG93bmxv
YWQsZmluaXNoZWQiLCBFd2tfRG93bmxvYWRfSm9iKTsKQEAgLTE3OSw2ICsxNzksNyBAQCBERUNM
QVJFX0VXS19WSUVXX0NBTExCQUNLKExvYWRQcm9ncmVzcywgImxvYWQscHJvZ3Jlc3MiLCBkb3Vi
bGUpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25hbExvYWRGYWlsZWQsICJs
b2FkLHByb3Zpc2lvbmFsLGZhaWxlZCIsIEV3a19FcnJvcik7CiBERUNMQVJFX0VXS19WSUVXX0NB
TExCQUNLKFByb3Zpc2lvbmFsTG9hZFJlZGlyZWN0LCAibG9hZCxwcm92aXNpb25hbCxyZWRpcmVj
dCIsIHZvaWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25hbExvYWRTdGFy
dGVkLCAibG9hZCxwcm92aXNpb25hbCxzdGFydGVkIiwgdm9pZCk7CitERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKE1lbnVCYXJWaXNpYmxlLCAibWVudWJhcix2aXNpYmxlIiwgYm9vbCk7CiBERUNM
QVJFX0VXS19WSUVXX0NBTExCQUNLKE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiwgInBvbGljeSxk
ZWNpc2lvbixuYXZpZ2F0aW9uIiwgRXdrX05hdmlnYXRpb25fUG9saWN5X0RlY2lzaW9uKTsKIERF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTmV3V2luZG93UG9saWN5RGVjaXNpb24sICJwb2xpY3ks
ZGVjaXNpb24sbmV3LHdpbmRvdyIsIEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbik7CiBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291cmNlTG9hZFN0YXJ0ZWQsICJyZXNvdXJjZSxy
ZXF1ZXN0LG5ldyIsIEV3a19SZXNvdXJjZV9SZXF1ZXN0KTsKQEAgLTE4NiwxMyArMTg3LDE2IEBA
IERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkUmVzcG9uc2UsICJyZXNvdXJj
ZSxyZXF1ZXN0LHJlc3BvbnNlIiwgRXdrCiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291
cmNlTG9hZEZhaWxlZCwgInJlc291cmNlLHJlcXVlc3QsZmFpbGVkIiwgRXdrX1Jlc291cmNlX0xv
YWRfRXJyb3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRGaW5pc2hl
ZCwgInJlc291cmNlLHJlcXVlc3QsZmluaXNoZWQiLCBFd2tfUmVzb3VyY2UpOwogREVDTEFSRV9F
V0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZVJlcXVlc3RTZW50LCAicmVzb3VyY2UscmVxdWVzdCxz
ZW50IiwgRXdrX1Jlc291cmNlX1JlcXVlc3QpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhT
dGF0dXNCYXJWaXNpYmxlLCAic3RhdHVzYmFyLHZpc2libGUiLCBib29sKTsKIERFQ0xBUkVfRVdL
X1ZJRVdfQ0FMTEJBQ0soVGV4dEZvdW5kLCAidGV4dCxmb3VuZCIsIHVuc2lnbmVkKTsKIERFQ0xB
UkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVGl0bGVDaGFuZ2UsICJ0aXRsZSxjaGFuZ2VkIiwgY2hhcik7
CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRvb2xiYXJWaXNpYmxlLCAidG9vbGJhcix2aXNp
YmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRvb2x0aXBUZXh0VW5zZXQs
ICJ0b29sdGlwLHRleHQsdW5zZXQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
VG9vbHRpcFRleHRTZXQsICJ0b29sdGlwLHRleHQsc2V0IiwgY2hhcik7CiBERUNMQVJFX0VXS19W
SUVXX0NBTExCQUNLKFVSTENoYW5nZWQsICJ1cmwsY2hhbmdlZCIsIGNoYXIpOwogREVDTEFSRV9F
V0tfVklFV19DQUxMQkFDSyhWaWJyYXRlLCAidmlicmF0ZSIsIHVpbnQ2NF90KTsKIERFQ0xBUkVf
RVdLX1ZJRVdfQ0FMTEJBQ0soV2ViUHJvY2Vzc0NyYXNoZWQsICJ3ZWJwcm9jZXNzLGNyYXNoZWQi
LCBib29sKTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soV2luZG93UmVzaXphYmxlLCAid2lu
ZG93LHJlc2l6YWJsZSIsIGJvb2wpOwogI2lmIEVOQUJMRShXRUJfSU5URU5UUykKIERFQ0xBUkVf
RVdLX1ZJRVdfQ0FMTEJBQ0soSW50ZW50UmVxdWVzdCwgImludGVudCxyZXF1ZXN0LG5ldyIsIEV3
a19JbnRlbnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3SW1wbC5jcHAKaW5kZXggYWNhMmQ0ZGVlMWFhZjJiODNkNjRhMGNjOGY4NDcxODNk
NGY3NzkwMi4uMjRhNzc3ZTA2MzFkZDM3NDZmNTdiY2FiOWY3M2U1NzdkYTIyNjU2OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcApAQCAt
NTQsNiArNTQsNyBAQAogI2luY2x1ZGUgImV3a19zZXR0aW5nc19wcml2YXRlLmgiCiAjaW5jbHVk
ZSAiZXdrX3ZpZXcuaCIKICNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAi
ZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgog
I2luY2x1ZGUgPEVjb3JlX1guaD4KICNpbmNsdWRlIDxFZGplLmg+CkBAIC04MzIsMzcgKzgzMyw0
NSBAQCB2b2lkIEV3a1ZpZXdJbXBsOjppbmZvcm1VUkxDaGFuZ2UoKQogICAgIGluZm9ybUljb25D
aGFuZ2UoKTsKIH0KIAotV0tQYWdlUmVmIEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQYWdlKFdLRGlj
dGlvbmFyeVJlZiB3aW5kb3dGZWF0dXJlcykKK0V3a1dpbmRvd0ZlYXR1cmVzKiBFd2tWaWV3SW1w
bDo6d2luZG93RmVhdHVyZXMoKQogewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21h
cnREYXRhKCk7Ci0gICAgQVNTRVJUKHNkLT5hcGkpOworICAgIGlmICghbV93aW5kb3dGZWF0dXJl
cykKKyAgICAgICAgbV93aW5kb3dGZWF0dXJlcyA9IEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUo
MCwgdGhpcyk7CiAKLSAgICBFdmFzX09iamVjdCogbmV3RXdrVmlldyA9IDA7Ci0KLSAgICAvLyBF
eHRyYWN0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGZyb20gdGhlIHdpbmRvdyBhdHRyaWJ1dGVzIGFu
ZCBwYXNzIHRoZW0gYWxvbmcgdG8gdGhlIGVtYmVkZGVyLgotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB3aWR0aFN0cihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
d2lkdGgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodFN0cihBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOworICAgIHJldHVybiBt
X3dpbmRvd0ZlYXR1cmVzLmdldCgpOworfQogCi0gICAgV0tUeXBlUmVmIHJlZiA9IFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkod2luZG93RmVhdHVyZXMsIHdpZHRoU3RyLmdldCgpKTsKLSAgICB1
bnNpZ25lZCB3aWR0aCA9IHJlZiA/IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KHJlZikpIDogMDsKLSAgICByZWYgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdp
bmRvd0ZlYXR1cmVzLCBoZWlnaHRTdHIuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGhlaWdodCA9IHJl
ZiA/IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KHJlZikpIDogMDsK
K1dLUGFnZVJlZiBFd2tWaWV3SW1wbDo6Y3JlYXRlTmV3UGFnZShJbW11dGFibGVEaWN0aW9uYXJ5
KiB3aW5kb3dGZWF0dXJlcykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0
RGF0YSgpOworICAgIEFTU0VSVChzZC0+YXBpKTsKIAotICAgIGlmICghc2QtPmFwaS0+d2luZG93
X2NyZWF0ZV9uZXcpCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY3JlYXRlKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGlmICghKG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRl
X25ldyhzZCwgd2lkdGgsIGhlaWdodCkpKQorICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4g
ZXdrV2luZG93RmVhdHVyZXMgPSBFd2tXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKHdpbmRvd0ZlYXR1
cmVzLCB0aGlzKTsKKworICAgIEV2YXNfT2JqZWN0KiBuZXdFd2tWaWV3ID0gc2QtPmFwaS0+d2lu
ZG93X2NyZWF0ZShzZCwgZXdrV2luZG93RmVhdHVyZXMuZ2V0KCkpOworICAgIGlmICghbmV3RXdr
VmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBFd2tWaWV3SW1wbCogbmV3Vmlld0ltcGwg
PSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobmV3RXdrVmlldyk7CiAgICAgQVNTRVJUKG5l
d1ZpZXdJbXBsKTsKIAorICAgIG5ld1ZpZXdJbXBsLT5tX3dpbmRvd0ZlYXR1cmVzID0gZXdrV2lu
ZG93RmVhdHVyZXM7CisKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS1JldGFp
bihuZXdWaWV3SW1wbC0+cGFnZSgpKSk7CiB9CiAKIHZvaWQgRXdrVmlld0ltcGw6OmNsb3NlUGFn
ZSgpCiB7Ci0gICAgc21hcnRDYWxsYmFjazxDbG9zZVdpbmRvdz4oKS5jYWxsKCk7CisgICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7
CisKKyAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jbG9zZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc2QtPmFwaS0+d2luZG93X2Nsb3NlKHNkKTsKIH0KIAogdm9pZCBFd2tWaWV3SW1wbDo6b25N
b3VzZURvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZv
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0lt
cGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgKaW5k
ZXggNzI4MDBiYWVkN2RkOTczYjFjZGIxYWFmNmZhZTY1YzlkNzBjNGY0OC4uNDUxZWI1NDMyMjE4
MGZlZDc1NTc1MGNiMTZhMmEwNThmNTczZjFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIEV3
a1ZpZXdJbXBsX2gKIAogI2luY2x1ZGUgIkV3a1ZpZXdDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJ
bW11dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiUmVmUHRyRWZsLmgiCiAjaW5jbHVkZSAi
V0tFaW5hU2hhcmVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgpAQCAtNzYsNiAr
NzcsNyBAQCBjbGFzcyBFd2tfQmFja19Gb3J3YXJkX0xpc3Q7CiBjbGFzcyBFd2tfQ29sb3JfUGlj
a2VyOwogY2xhc3MgRXdrX1BvcHVwX01lbnU7CiBjbGFzcyBFd2tfU2V0dGluZ3M7CitjbGFzcyBF
d2tXaW5kb3dGZWF0dXJlczsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHR5
cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQgRXZhc19HTF9Db250ZXh0OwpAQCAtMTAyLDYg
KzEwNCw3IEBAIHB1YmxpYzoKICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4g
bV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJu
IG1fc2V0dGluZ3MuZ2V0KCk7IH0KICAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGJhY2tGb3J3
YXJkTGlzdCgpIHsgcmV0dXJuIG1fYmFja0ZvcndhcmRMaXN0LmdldCgpOyB9CisgICAgRXdrV2lu
ZG93RmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzKCk7CiAKICAgICBXZWJDb3JlOjpJbnRTaXplIHNp
emUoKSBjb25zdDsKICAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0OwpAQCAtMTU2LDcgKzE1OSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc21pc3NDb2xvclBpY2tlcigpOwogI2VuZGlmCiAKLSAg
ICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXS0RpY3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMp
OworICAgIFdLUGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFy
eSogd2luZG93RmVhdHVyZXMpOwogICAgIHZvaWQgY2xvc2VQYWdlKCk7CiAKICAgICB2b2lkIHJl
cXVlc3RQb3B1cE1lbnUoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFj
dG9yLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJfdCBz
ZWxlY3RlZEluZGV4KTsKQEAgLTI0NCw2ICsyNDcsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6
OkludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAjZW5kaWYKICAgICBPd25QdHI8RXdrX1NldHRp
bmdzPiBtX3NldHRpbmdzOworICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gbV93aW5kb3dG
ZWF0dXJlczsKICAgICBjb25zdCB2b2lkKiBtX2N1cnNvcklkZW50aWZpZXI7IC8vIFRoaXMgaXMg
YW4gYWRkcmVzcywgZG8gbm90IGZyZWUgaXQuCiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fZmF2
aWNvblVSTDsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV91cmw7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAppbmRleCA3NTAxNjExNzRiOWE0NTdmZjJlZGU5
ODg1MThiMGIzNDY3NzJiNTdmLi4zOTE3MGVlNmRjNTY5MmMxNjQ3Mzk0YzRkZDZmMmQxNjg2NTdm
NmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKQEAg
LTMwLDggKzMwLDYgQEAKICAqICAgZXdrX2F1dGhfcmVxdWVzdF9yZWYoKSBvbiB0aGUgcmVxdWVz
dCBvYmplY3QgdG8gcHJvY2VzcyB0aGUgYXV0aGVudGljYXRpb24gYXN5bmNocm9ub3VzbHkuCiAg
KiAtICJiYWNrLGZvcndhcmQsbGlzdCxjaGFuZ2VkIiwgdm9pZDogcmVwb3J0cyB0aGF0IHRoZSB2
aWV3J3MgYmFjayAvIGZvcndhcmQgbGlzdCBoYWQgY2hhbmdlZC4KICAqIC0gImNhbmNlbCx2aWJy
YXRpb24iLCB2b2lkOiByZXF1ZXN0IHRvIGNhbmNlbCB0aGUgdmlicmF0aW9uLgotICogLSAiY2xv
c2Usd2luZG93Iiwgdm9pZDogd2luZG93IGlzIGNsb3NlZC4KLSAqIC0gImNyZWF0ZSx3aW5kb3ci
LCBFdmFzX09iamVjdCoqOiBhIG5ldyB3aW5kb3cgaXMgY3JlYXRlZC4KICAqIC0gImRvd25sb2Fk
LGNhbmNlbGxlZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCB3
YXMgZWZmZWN0aXZlbHkgY2FuY2VsbGVkLgogICogLSAiZG93bmxvYWQsZmFpbGVkIiwgRXdrX0Rv
d25sb2FkX0pvYl9FcnJvcio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGZhaWxlZCB3aXRoIHRo
ZSBnaXZlbiBlcnJvci4KICAqIC0gImRvd25sb2FkLGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pv
Yio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCkBAIC05
NCw2ICs5Miw3IEBACiAjaW5jbHVkZSAiZXdrX3RvdWNoLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9y
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgorI2luY2x1ZGUgImV3a193
aW5kb3dfZmVhdHVyZXMuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1
cwpAQCAtMTQ4LDE2ICsxNDcsMTcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAg
ICAvLyAgIC0gV2ViIGRhdGFiYXNlLgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAoKmV4Y2VlZGVk
X2RhdGFiYXNlX3F1b3RhKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29uc3QgY2hhciAqZGF0
YWJhc2VOYW1lLCBjb25zdCBjaGFyICpkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1
cnJlbnRRdW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5Vc2FnZSwgdW5zaWdu
ZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhw
ZWN0ZWRVc2FnZSk7CiAKLSAgICAvLyBuZXcgd2luZG93OgotICAgIC8vICAgLSBDcmVhdGUgYSBu
ZXcgd2luZG93IHdpdGggc3BlY2lmaWVkIHNpemUKLSAgICBFdmFzX09iamVjdCogKCp3aW5kb3df
Y3JlYXRlX25ldykoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29vcmQgd2lkdGgsIEV2
YXNfQ29vcmQgaGVpZ2h0KTsKKyAgICAvLyB3aW5kb3cgY3JlYXRpb24gYW5kIGNsb3Npbmc6Cisg
ICAgLy8gICAtIENyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBzcGVjaWZpZWQgZmVhdHVyZXMgYW5k
IGNsb3NlIHdpbmRvdy4KKyAgICBFdmFzX09iamVjdCAqKCp3aW5kb3dfY3JlYXRlKShFd2tfVmll
d19TbWFydF9EYXRhICpzZCwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1
cmVzKTsKKyAgICB2b2lkICgqd2luZG93X2Nsb3NlKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7
CiB9OwogCiAvKioKICAqIFRoZSB2ZXJzaW9uIHlvdSBoYXZlIHRvIHB1dCBpbnRvIHRoZSB2ZXJz
aW9uIGZpZWxkCiAgKiBpbiB0aGUgQGEgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgog
ICovCi0jZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gN1VMCisjZGVmaW5lIEVX
S19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gOFVMCiAKIC8qKgogICogSW5pdGlhbGl6ZXIgZm9y
IHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KQEAgLTE2OSw3ICsxNjksNyBA
QCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgewogICogQHNlZSBFV0tfVklFV19TTUFSVF9D
TEFTU19JTklUX1ZFUlNJT04KICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1F
X1ZFUlNJT04KICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUKHNtYXJ0X2Ns
YXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9O
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwfQorI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2lu
aXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwfQogCiAvKioKICAqIEluaXRpYWxpemVyIHRvIHplcm8gYSB3aG9sZSBFd2tfVmlld19TbWFy
dF9DbGFzcyBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjOGJhYTg0MDVj
OTdlMDJlMjBjZDliYTQwOTNhNmRkMzIzOTZlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcApAQCAtMCww
ICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgorCisjaW5jbHVkZSAiV2ViTnVtYmVyLmgi
CisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgiCisjaW5jbHVkZSA8RWlu
YS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tXaW5kb3dGZWF0dXJlczo6RXdr
V2luZG93RmVhdHVyZXMoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1Zp
ZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCit7CisgICAgaWYg
KHdpbmRvd0ZlYXR1cmVzKSB7CisgICAgICAgIG1fdG9vbGJhclZpc2libGUgPSBnZXRXaW5kb3dG
ZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVhdHVyZXMsIEFTQ0lJTGl0ZXJh
bCgidG9vbEJhclZpc2libGUiKSk7CisgICAgICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IGdldFdp
bmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0dXJlcywgQVNDSUlM
aXRlcmFsKCJzdGF0dXNCYXJWaXNpYmxlIikpOworICAgICAgICBtX3Njcm9sbGJhcnNWaXNpYmxl
ID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVz
LCBBU0NJSUxpdGVyYWwoInNjcm9sbGJhcnNWaXNpYmxlIikpOworICAgICAgICBtX21lbnVCYXJW
aXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdpbmRvd0Zl
YXR1cmVzLCBBU0NJSUxpdGVyYWwoIm1lbnVCYXJWaXNpYmxlIikpOworICAgICAgICBtX2xvY2F0
aW9uQmFyVmlzaWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3
aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJsb2NhdGlvbkJhclZpc2libGUiKSk7CisgICAg
ICAgIG1fcmVzaXphYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+
KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInJlc2l6YWJsZSIpKTsKKyAgICAgICAgbV9m
dWxsU2NyZWVuID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdpbmRv
d0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoImZ1bGxzY3JlZW4iKSk7CisKKyAgICAgICAgbV9nZW9t
ZXRyeS5zZXRYKGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRvdWJsZT4od2luZG93
RmVhdHVyZXMsIEFTQ0lJTGl0ZXJhbCgieCIpKSk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0WShn
ZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVzLCBB
U0NJSUxpdGVyYWwoInkiKSkpOworICAgICAgICBtX2dlb21ldHJ5LnNldFdpZHRoKGdldFdpbmRv
d0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRvdWJsZT4od2luZG93RmVhdHVyZXMsIEFTQ0lJTGl0
ZXJhbCgid2lkdGgiKSkpOworICAgICAgICBtX2dlb21ldHJ5LnNldEhlaWdodChnZXRXaW5kb3dG
ZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVy
YWwoImhlaWdodCIpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgT3duUHRyPFdlYkNvcmU6Oldp
bmRvd0ZlYXR1cmVzPiBjb3JlRmVhdHVyZXMgPSBhZG9wdFB0cihuZXcgV2ViQ29yZTo6V2luZG93
RmVhdHVyZXMoKSk7CisKKyAgICAgICAgbV90b29sYmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+
dG9vbEJhclZpc2libGU7CisgICAgICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJl
cy0+c3RhdHVzQmFyVmlzaWJsZTsKKyAgICAgICAgbV9zY3JvbGxiYXJzVmlzaWJsZSA9IGNvcmVG
ZWF0dXJlcy0+c2Nyb2xsYmFyc1Zpc2libGU7CisgICAgICAgIG1fbWVudUJhclZpc2libGUgPSBj
b3JlRmVhdHVyZXMtPm1lbnVCYXJWaXNpYmxlOworICAgICAgICBtX2xvY2F0aW9uQmFyVmlzaWJs
ZSA9IGNvcmVGZWF0dXJlcy0+bG9jYXRpb25CYXJWaXNpYmxlOworICAgICAgICBtX3Jlc2l6YWJs
ZSA9IGNvcmVGZWF0dXJlcy0+cmVzaXphYmxlOworICAgICAgICBtX2Z1bGxTY3JlZW4gPSBjb3Jl
RmVhdHVyZXMtPmZ1bGxzY3JlZW47CisKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRYKGNvcmVGZWF0
dXJlcy0+eCk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0WShjb3JlRmVhdHVyZXMtPnkpOworICAg
ICAgICBtX2dlb21ldHJ5LnNldFdpZHRoKGNvcmVGZWF0dXJlcy0+d2lkdGgpOworICAgICAgICBt
X2dlb21ldHJ5LnNldEhlaWdodChjb3JlRmVhdHVyZXMtPmhlaWdodCk7CisgICAgfQorfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorVDEgRXdrV2luZG93RmVhdHVyZXM6
OmdldFdpbmRvd0ZlYXR1cmVWYWx1ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJl
cywgY29uc3QgU3RyaW5nJiBmZWF0dXJlTmFtZSkKK3sKKyAgICBUMiogZmVhdHVyZVZhbHVlID0g
c3RhdGljX2Nhc3Q8VDIqPih3aW5kb3dGZWF0dXJlcy0+Z2V0KGZlYXR1cmVOYW1lKSk7CisKKyAg
ICBpZiAoIWZlYXR1cmVWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGZlYXR1cmVWYWx1ZS0+dmFsdWUoKTsKK30KKwordm9pZCBFd2tXaW5kb3dGZWF0dXJlczo6c2V0
VG9vbGJhclZpc2libGUoYm9vbCB0b29sYmFyVmlzaWJsZSkKK3sKKyAgICBtX3Rvb2xiYXJWaXNp
YmxlID0gdG9vbGJhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxFd2tW
aWV3Q2FsbGJhY2tzOjpUb29sYmFyVmlzaWJsZT4oKS5jYWxsKCZ0b29sYmFyVmlzaWJsZSk7Cit9
CisKK3ZvaWQgRXdrV2luZG93RmVhdHVyZXM6OnNldFN0YXR1c0JhclZpc2libGUoYm9vbCBzdGF0
dXNCYXJWaXNpYmxlKQoreworICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IHN0YXR1c0JhclZpc2li
bGU7CisgICAgbV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpTdGF0
dXNCYXJWaXNpYmxlPigpLmNhbGwoJnN0YXR1c0JhclZpc2libGUpOworfQorCit2b2lkIEV3a1dp
bmRvd0ZlYXR1cmVzOjpzZXRNZW51QmFyVmlzaWJsZShib29sIG1lbnVCYXJWaXNpYmxlKQorewor
ICAgIG1fbWVudUJhclZpc2libGUgPSBtZW51QmFyVmlzaWJsZTsKKyAgICBtX3ZpZXdJbXBsLT5z
bWFydENhbGxiYWNrPEV3a1ZpZXdDYWxsYmFja3M6Ok1lbnVCYXJWaXNpYmxlPigpLmNhbGwoJm1l
bnVCYXJWaXNpYmxlKTsKK30KKwordm9pZCBFd2tXaW5kb3dGZWF0dXJlczo6c2V0UmVzaXphYmxl
KGJvb2wgcmVzaXphYmxlKQoreworICAgIG1fcmVzaXphYmxlID0gcmVzaXphYmxlOworICAgIG1f
dmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6V2luZG93UmVzaXphYmxl
PigpLmNhbGwoJnJlc2l6YWJsZSk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVz
X3Rvb2xiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2Zl
YXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRv
d0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKworICAgIHJldHVybiBp
bXBsLT50b29sYmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJl
c19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93
X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dp
bmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKworICAgIHJldHVy
biBpbXBsLT5zdGF0dXNCYXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2luZG93X2Zl
YXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyog
d2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0
IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKworICAg
IHJldHVybiBpbXBsLT5zY3JvbGxiYXJzVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dp
bmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVy
ZXMqIHdpbmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihj
b25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisK
KyAgICByZXR1cm4gaW1wbC0+bWVudUJhclZpc2libGUoKTsKK30KKworRWluYV9Cb29sIGV3a193
aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19G
ZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVU
VVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNl
KTsKKworICAgIHJldHVybiBpbXBsLT5sb2NhdGlvbkJhclZpc2libGUoKTsKK30KKworRWluYV9C
b29sIGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldChjb25zdCBFd2tfV2luZG93X0Zl
YXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRV
Uk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2Up
OworCisgICAgcmV0dXJuIGltcGwtPnJlc2l6YWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dp
bmRvd19mZWF0dXJlc19mdWxsc2NyZWVuX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3
aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3Qg
RXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisgICAg
cmV0dXJuIGltcGwtPmZ1bGxTY3JlZW4oKTsKK30KKwordm9pZCBld2tfd2luZG93X2ZlYXR1cmVz
X2dlb21ldHJ5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMs
IEV2YXNfQ29vcmQqIHgsIEV2YXNfQ29vcmQqIHksIEV2YXNfQ29vcmQqIHdpZHRoLCBFdmFzX0Nv
b3JkKiBoZWlnaHQpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdr
V2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCk7CisKKyAgICBpZiAoeCkKKyAg
ICAgICAgKnggPSBzdGF0aWNfY2FzdDxFdmFzX0Nvb3JkPihpbXBsLT5nZW9tZXRyeSgpLngoKSk7
CisKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxFdmFzX0Nvb3JkPihpbXBs
LT5nZW9tZXRyeSgpLnkoKSk7CisKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHN0
YXRpY19jYXN0PEV2YXNfQ29vcmQ+KGltcGwtPmdlb21ldHJ5KCkud2lkdGgoKSk7CisKKyAgICBp
ZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8RXZhc19Db29yZD4oaW1w
bC0+Z2VvbWV0cnkoKS5oZWlnaHQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNiMjU4
MWQwODgyMDZmZTQwMWYwZGExYWNkZWUyYTEyMGZmMGE3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuaApAQCAt
MCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3
a193aW5kb3dfZmVhdHVyZXMuaAorICogQGJyaWVmICAgQWNjZXNzIHRvIHRoZSBmZWF0dXJlcyBv
ZiB3aW5kb3cuCisgKi8KKworI2lmbmRlZiBld2tfd2luZG93X2ZlYXR1cmVzX2gKKyNkZWZpbmUg
ZXdrX3dpbmRvd19mZWF0dXJlc19oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZh
cy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgor
ICogRGVjbGFyZSBFd2tfV2luZG93X0ZlYXR1cmVzIGFzIEV3a19PYmplY3QuCisgKgorICogQHNl
ZSBFd2tfT2JqZWN0CisgKi8KK3R5cGVkZWYgc3RydWN0IEV3a19PYmplY3QgRXdrX1dpbmRvd19G
ZWF0dXJlczsKKworLyoqCisgKiBRdWVyaWVzIHRoZSB0b29sYmFyIHZpc2liaWxpdHkgb2YgdGhl
IHdpbmRvdyBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVj
dCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB0
b29sYmFyIHNob3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwor
RUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc190b29sYmFyX3Zpc2libGVfZ2V0KGNv
bnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVl
cmllcyB0aGUgc3RhdHVzYmFyIHZpc2liaWxpdHkgb2YgdGhlIHdpbmRvdyBmZWF0dXJlLgorICoK
KyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcwor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSBzdGF0dXNiYXIgc2hvdWxkIGJlIHZp
c2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tf
d2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0Zl
YXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIHNjcm9sbGJh
ciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93
X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBpcyB0aGUgc2Nyb2xsYmFycyBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9G
QUxTRSBvdGhlcndpc2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNf
c2Nyb2xsYmFyc192aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3df
ZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIG1lbnViYXIgdmlzaWJpbGl0eSBvZiB0
aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2Jq
ZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhl
IG1lbnViYXIgc2hvdWxkIGJlIHZpc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICov
CitFQVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX21lbnViYXJfdmlzaWJsZV9nZXQo
Y29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKworLyoqCisgKiBR
dWVyaWVzIHRoZSBsb2NhdGlvbmJhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4K
KyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRp
ZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgbG9jYXRpb25iYXIgc2hvdWxk
IGJlIHZpc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9v
bCBld2tfd2luZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19X
aW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmllcyBpZiB0
aGUgd2luZG93IGlzIHJlc2l6YWJsZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRo
ZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBp
cyB0aGUgd2luZG93IHNob3VsZCBiZSByZXNpemFibGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNl
LgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQo
Y29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKworLyoqCisgKiBR
dWVyaWVzIHRoZSB0aGUgd2luZG93IGlzIGZ1bGxzY3JlZW4KKyAqCisgKiBAcGFyYW0gd2luZG93
X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBpcyB0aGUgd2luZG93IHNob3VsZCBiZSBmdWxsc2NyZWVuLCBAYyBFSU5BX0ZB
TFNFIG90aGVyd2lzZS4KKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19m
dWxsc2NyZWVuX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMp
OworCisvKioKKyAqIEdldHMgZ2VvbWV0cnkgcHJvcGVydGllcyBvZiBhbiBFd2tfV2luZG93X0Zl
YXR1cmVzLgorICoKKyAqIFByb3BlcnRpZXMgYXJlIHJldHVybmVkIGluIHRoZSByZXNwZWN0aXZl
IHBvaW50ZXJzLiBQYXNzaW5nIEBjIE5VTEwgdG8gYW55IG9mCisgKiB0aGVzZSBwb2ludGVycyB3
aWxsIGNhdXNlIHRoYXQgcHJvcGVydHkgdG8gbm90IGJlIHJldHVybmVkLgorICoKKyAqIEBwYXJh
bSB3aW5kb3dfZmVhdHVyZXMgdGhlIHdpbmRvdydzIGZlYXR1cmVzCisgKiBAcGFyYW0geCB0aGUg
cG9pbnRlciB0byBzdG9yZSB4IHBvc2l0aW9uCisgKiBAcGFyYW0geSB0aGUgcG9pbnRlciB0byBz
dG9yZSB5IHBvc2l0aW9uCisgKiBAcGFyYW0gdyB0aGUgcG9pbnRlciB0byBzdG9yZSB3aWR0aAor
ICogQHBhcmFtIGggdGhlIHBvaW50ZXIgdG8gc3RvcmUgaGVpZ2h0CisgKi8KK0VBUEkgdm9pZCBl
d2tfd2luZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVz
ICp3aW5kb3dfZmVhdHVyZXMsIEV2YXNfQ29vcmQgKngsIEV2YXNfQ29vcmQgKnksIEV2YXNfQ29v
cmQgKncsIEV2YXNfQ29vcmQgKmgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgor
CisjZW5kaWYgLy8gZXdrX3dpbmRvd19mZWF0dXJlc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU1MTg3MWI4YmU0MjUzNDEwNDBiOGQ2MDRhZjIyMDRhYjc2YmY2N2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
d2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKworI2lmbmRlZiBld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGVfaAorI2RlZmlu
ZSBld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGVfaAorCisjaW5jbHVkZSAiRXdrVmlld0ltcGwu
aCIKKyNpbmNsdWRlICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKKyNpbmNsdWRlICJld2tfb2JqZWN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK2NsYXNzIEV3
a1ZpZXdJbXBsOworCitjbGFzcyBFd2tXaW5kb3dGZWF0dXJlcyA6IHB1YmxpYyBFd2tfT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICBFV0tfT0JKRUNUX0RFQ0xBUkUoRXdrV2luZG93RmVhdHVyZXMpCisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gY3JlYXRlKFdlYktpdDo6
SW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1w
bCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXdrV2luZG93RmVhdHVyZXMo
d2luZG93RmVhdHVyZXMsIHZpZXdJbXBsKSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeTsgfQorICAgIHZvaWQgc2V0
R2VvbWV0cnkoV2ViQ29yZTo6RmxvYXRSZWN0JiBnZW9tZXRyeSkgeyBtX2dlb21ldHJ5ID0gZ2Vv
bWV0cnk7IH0KKworICAgIGJvb2wgdG9vbGJhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Rv
b2xiYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRUb29sYmFyVmlzaWJsZShib29sIHRvb2xiYXJW
aXNpYmxlKTsKKworICAgIGJvb2wgc3RhdHVzQmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdHVzQmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0U3RhdHVzQmFyVmlzaWJsZShib29sIHN0
YXR1c0JhclZpc2libGUpOworCisgICAgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsYmFyc1Zpc2libGU7IH0KKyAgICB2b2lkIHNldFNjcm9sbGJhcnNWaXNp
YmxlKGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUpIHsgbV9zY3JvbGxiYXJzVmlzaWJsZSA9IHNjcm9s
bGJhcnNWaXNpYmxlOyB9CisKKyAgICBib29sIG1lbnVCYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9tZW51QmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0TWVudUJhclZpc2libGUoYm9vbCBt
ZW51QmFyVmlzaWJsZSk7CisKKyAgICBib29sIGxvY2F0aW9uQmFyVmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYXRpb25CYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRMb2NhdGlvbkJhclZp
c2libGUoYm9vbCBsb2NhdGlvbkJhclZpc2libGUpIHsgbV9sb2NhdGlvbkJhclZpc2libGUgPSBs
b2NhdGlvbkJhclZpc2libGU7IH0KKworICAgIGJvb2wgcmVzaXphYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9yZXNpemFibGU7IH0KKyAgICB2b2lkIHNldFJlc2l6YWJsZShib29sIHJlc2l6YWJsZSk7
CisKKyAgICBib29sIGZ1bGxTY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2Z1bGxTY3JlZW47IH0K
KyAgICB2b2lkIHNldEZ1bGxTY3JlZW4oYm9vbCBmdWxsU2NyZWVuKSB7IG1fZnVsbFNjcmVlbiA9
IGZ1bGxTY3JlZW47IH0KKworcHJpdmF0ZToKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyhXZWJLaXQ6
OkltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0lt
cGwpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgc3RhdGlj
IFQxIGdldFdpbmRvd0ZlYXR1cmVWYWx1ZShXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkqIHdp
bmRvd0ZlYXR1cmVzLCBjb25zdCBTdHJpbmcmIGZlYXR1cmVOYW1lKTsKKworICAgIEV3a1ZpZXdJ
bXBsKiBtX3ZpZXdJbXBsOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fZ2VvbWV0cnk7Cisg
ICAgYm9vbCBtX3Rvb2xiYXJWaXNpYmxlOworICAgIGJvb2wgbV9zdGF0dXNCYXJWaXNpYmxlOwor
ICAgIGJvb2wgbV9zY3JvbGxiYXJzVmlzaWJsZTsKKyAgICBib29sIG1fbWVudUJhclZpc2libGU7
CisgICAgYm9vbCBtX2xvY2F0aW9uQmFyVmlzaWJsZTsKKyAgICBib29sIG1fcmVzaXphYmxlOwor
ICAgIGJvb2wgbV9mdWxsU2NyZWVuOworfTsKKworI2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVy
ZXNfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy90ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVlNTAzMTM0NjYwNmM3ZDNiMmMwZGEwY2JmODRkZGFjOWNkNzA3MTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfd2luZG93X2ZlYXR1cmVzLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VX
SzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgorI2luY2x1ZGUgPEVjb3Jl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitzdGF0aWMgRXZhc19PYmplY3QqIGNyZWF0ZURlZmF1bHRXaW5kb3coRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dG
ZWF0dXJlcykKK3sKKyAgICAvLyBkZWZhdWx0IHZhbHVlcyBvZiBXZWJDb3JlOldpbmRvd0ZlYXR1
cmVzKCkKKyAgICAvLyAtIG1lbnVCYXJWaXNpYmxlKHRydWUpCisgICAgLy8gLSBzdGF0dXNCYXJW
aXNpYmxlKHRydWUpCisgICAgLy8gLSB0b29sQmFyVmlzaWJsZSh0cnVlKQorICAgIC8vIC0gbG9j
YXRpb25CYXJWaXNpYmxlKHRydWUpCisgICAgLy8gLSBzY3JvbGxiYXJzVmlzaWJsZSh0cnVlKQor
ICAgIC8vIC0gcmVzaXphYmxlKHRydWUpCisgICAgLy8gLSBmdWxsc2NyZWVuKGZhbHNlKQorCisg
ICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc190b29sYmFyX3Zpc2libGVfZ2V0KHdp
bmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19zdGF0
dXNiYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tf
d2luZG93X2ZlYXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsK
KyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX21lbnViYXJfdmlzaWJsZV9nZXQo
d2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX2xv
Y2F0aW9uYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUo
ZXdrX3dpbmRvd19mZWF0dXJlc19yZXNpemFibGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisKKyAg
ICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19mdWxsc2NyZWVuX2dldCh3aW5kb3dG
ZWF0dXJlcykpOworCisgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgZXdrX3dpbmRv
d19mZWF0dXJlc19nZW9tZXRyeV9nZXQod2luZG93RmVhdHVyZXMsICZ4LCAmeSwgJndpZHRoLCAm
aGVpZ2h0KTsKKworICAgIEVYUEVDVF9FUSgwLCB4KTsKKyAgICBFWFBFQ1RfRVEoMCwgeSk7Cisg
ICAgRVhQRUNUX0VRKDAsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEoMCwgaGVpZ2h0KTsKKworICAg
IHJldHVybiAwOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3dpbmRvd19mZWF0
dXJlc19kZWZhdWx0X3Byb3BlcnR5X2dldCkKK3sKKyAgICBFdmFzX09iamVjdCogdmlldyA9IHdl
YlZpZXcoKTsKKworICAgIGNvbnN0IGNoYXIgd2luZG93SFRNTFtdID0gIjxodG1sPjxib2R5IG9u
TG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJyk7XCI+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZXdr
Vmlld0NsYXNzKCktPndpbmRvd19jcmVhdGUgPSBjcmVhdGVEZWZhdWx0V2luZG93OworCisgICAg
ZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZCh2aWV3LCB3aW5kb3dIVE1MLCAwLCAwKTsKKyAgICBB
U1NFUlRfVFJVRSh3YWl0VW50aWxMb2FkRmluaXNoZWQoKSk7Cit9CisKK3N0YXRpYyBFdmFzX09i
amVjdCogY3JlYXRlV2luZG93KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgY29uc3Qg
RXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93RmVhdHVyZXMpCit7CisgICAgRVhQRUNUX0ZBTFNF
KGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykp
OworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfc3RhdHVzYmFyX3Zpc2libGVf
Z2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJl
c19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJl
cykpOworICAgIEVYUEVDVF9GQUxTRShld2tfd2luZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zp
c2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19m
ZWF0dXJlc19yZXNpemFibGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX0ZBTFNF
KGV3a193aW5kb3dfZmVhdHVyZXNfZnVsbHNjcmVlbl9nZXQod2luZG93RmVhdHVyZXMpKTsKKwor
ICAgIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV3a193aW5kb3dfZmVhdHVyZXNfZ2Vv
bWV0cnlfZ2V0KHdpbmRvd0ZlYXR1cmVzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisKKyAg
ICBFWFBFQ1RfRVEoMTAwLCB4KTsKKyAgICBFWFBFQ1RfRVEoMTUwLCB5KTsKKyAgICBFWFBFQ1Rf
RVEoNDAwLCB3aWR0aCk7CisgICAgRVhQRUNUX0VRKDQwMCwgaGVpZ2h0KTsKKworICAgIHJldHVy
biAwOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3dpbmRvd19mZWF0dXJlc19w
cm9wZXJ0eV9nZXQpCit7CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSB3ZWJWaWV3KCk7CisKKyAg
ICBjb25zdCBjaGFyIHdpbmRvd0hUTUxbXSA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cu
b3BlbignJywgJycsICdsZWZ0PTEwMCx0b3A9MTUwLHdpZHRoPTQwMCxoZWlnaHQ9NDAwLGxvY2F0
aW9uPW5vLG1lbnViYXI9bm8sc3RhdHVzPXllcyx0b29sYmFyPW5vLHNjcm9sbGJhcnM9eWVzLHJl
c2l6YWJsZT15ZXMsZnVsbHNjcmVlbj1ubycpO1wiPjwvYm9keT48L2h0bWw+IjsKKworICAgIGV3
a1ZpZXdDbGFzcygpLT53aW5kb3dfY3JlYXRlID0gY3JlYXRlV2luZG93OworCisgICAgZXdrX3Zp
ZXdfaHRtbF9zdHJpbmdfbG9hZCh2aWV3LCB3aW5kb3dIVE1MLCAwLCAwKTsKKyAgICBBU1NFUlRf
VFJVRSh3YWl0VW50aWxMb2FkRmluaXNoZWQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKaW5kZXggMmI3NTA3MTBmOWRlNGE3Y2U0
Zjg5ZWQwNzY5ZjZlNTc0NTE4ODU1OS4uZjBhN2I0YmYxYTBhZjRiZTY0M2Y3YWQwNGIyYWNhOGQ3
NzQ1NDE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlD
bGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xp
ZW50RWZsLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldLRXZlbnQuaCIKICNpbmNs
dWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgImV3a19maWxlX2Nob29zZXJfcmVxdWVzdF9wcml2
YXRlLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgiCiAjaW5jbHVk
ZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KIApAQCAtNDksOSAr
NTAsOSBAQCB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6Y2xvc2VQYWdlKFdLUGFnZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKICAgICB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92
aWV3SW1wbC0+Y2xvc2VQYWdlKCk7CiB9CiAKLVdLUGFnZVJlZiBQYWdlVUlDbGllbnRFZmw6OmNy
ZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVlc3RSZWYsIFdLRGljdGlvbmFyeVJlZiB3
aW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQorV0tQYWdlUmVmIFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlTmV3
UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVxdWVzdFJlZiwgV0tEaWN0aW9uYXJ5UmVmIHdrV2luZG93
RmVhdHVyZXMsIFdLRXZlbnRNb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKIHsKLSAgICByZXR1cm4gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5m
byktPm1fdmlld0ltcGwtPmNyZWF0ZU5ld1BhZ2Uod2luZG93RmVhdHVyZXMpOworICAgIHJldHVy
biB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+Y3JlYXRlTmV3UGFn
ZSh0b0ltcGwod2tXaW5kb3dGZWF0dXJlcykpOwogfQogCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6
cnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgYWxlcnRUZXh0LCBXS0Zy
YW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtNzAsNiArNzEsNjIgQEAgV0tTdHJp
bmdSZWYgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0UHJvbXB0KFdLUGFnZVJlZiwgV0tT
dHJpbmdSZWYgbWVzc2FnZSwKICAgICByZXR1cm4gdmFsdWUgPyBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyh2YWx1ZSkgOiAwOwogfQogCitib29sIFBhZ2VVSUNsaWVudEVmbDo6dG9vbGJh
cnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBF
d2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZv
KS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOwor
ICAgIHJldHVybiBmZWF0dXJlcy0+dG9vbGJhclZpc2libGUoKTsKK30KKwordm9pZCBQYWdlVUlD
bGllbnRFZmw6OnNldFRvb2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgdG9vbGJhclZp
c2libGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMq
IGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndp
bmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICBmZWF0dXJlcy0+c2V0
VG9vbGJhclZpc2libGUodG9vbGJhclZpc2libGUpOworfQorCitib29sIFBhZ2VVSUNsaWVudEVm
bDo6bWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7
CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xp
ZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1
cmVzKTsKKyAgICByZXR1cm4gZmVhdHVyZXMtPm1lbnVCYXJWaXNpYmxlKCk7Cit9CisKK3ZvaWQg
UGFnZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCBtZW51
QmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0
dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1w
bC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIGZlYXR1cmVz
LT5zZXRNZW51QmFyVmlzaWJsZShtZW51QmFyVmlzaWJsZSk7Cit9CisKK2Jvb2wgUGFnZVVJQ2xp
ZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50
RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VS
VChmZWF0dXJlcyk7CisgICAgcmV0dXJuIGZlYXR1cmVzLT5zdGF0dXNCYXJWaXNpYmxlKCk7Cit9
CisKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRTdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVm
LCBib29sIHN0YXR1c0JhclZpc2libGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
RXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5m
byktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsK
KyAgICBmZWF0dXJlcy0+c2V0U3RhdHVzQmFyVmlzaWJsZShzdGF0dXNCYXJWaXNpYmxlKTsKK30K
KworYm9vbCBQYWdlVUlDbGllbnRFZmw6OmlzUmVzaXphYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1Bh
Z2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsK
KyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIHJldHVybiBmZWF0dXJlcy0+cmVzaXphYmxlKCk7
Cit9CisKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRJc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGJv
b2wgcmVzaXphYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0Zl
YXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJ
bXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisgICAgZmVhdHVy
ZXMtPnNldFJlc2l6YWJsZShyZXNpemFibGUpOworfQorCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVf
Q09MT1IpCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2hvd0NvbG9yUGlja2VyKFdLUGFnZVJlZiwg
V0tTdHJpbmdSZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9yUGlja2VyUmVzdWx0TGlzdGVuZXJSZWYg
bGlzdGVuZXIsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CkBAIC0xNDEsNiArMTk4LDE0IEBA
IFBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkK
ICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0QWxlcnQgPSBydW5KYXZhU2NyaXB0QWxlcnQ7CiAg
ICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdENvbmZpcm0gPSBydW5KYXZhU2NyaXB0Q29uZmlybTsK
ICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0ID0gcnVuSmF2YVNjcmlwdFByb21wdDsK
KyAgICB1aUNsaWVudC50b29sYmFyc0FyZVZpc2libGUgPSB0b29sYmFyc0FyZVZpc2libGU7Cisg
ICAgdWlDbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlID0gc2V0VG9vbGJhcnNBcmVWaXNpYmxl
OworICAgIHVpQ2xpZW50Lm1lbnVCYXJJc1Zpc2libGUgPSBtZW51QmFySXNWaXNpYmxlOworICAg
IHVpQ2xpZW50LnNldE1lbnVCYXJJc1Zpc2libGUgPSBzZXRNZW51QmFySXNWaXNpYmxlOworICAg
IHVpQ2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSA9IHN0YXR1c0JhcklzVmlzaWJsZTsKKyAgICB1
aUNsaWVudC5zZXRTdGF0dXNCYXJJc1Zpc2libGUgPSBzZXRTdGF0dXNCYXJJc1Zpc2libGU7Cisg
ICAgdWlDbGllbnQuaXNSZXNpemFibGUgPSBpc1Jlc2l6YWJsZTsKKyAgICB1aUNsaWVudC5zZXRJ
c1Jlc2l6YWJsZSA9IHNldElzUmVzaXphYmxlOwogICAgIHVpQ2xpZW50LnRha2VGb2N1cyA9IHRh
a2VGb2N1czsKICAgICB1aUNsaWVudC5mb2N1cyA9IGZvY3VzOwogICAgIHVpQ2xpZW50LnVuZm9j
dXMgPSB1bmZvY3VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Q
YWdlVUlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xp
ZW50RWZsLmgKaW5kZXggMmY1NDE5MmEyYWUwZmI3MDM5ZTEyYmM5MTRiNjc4YzgzNjdmODE2Yi4u
ZTY4NDE0YWNmYjc0ODhhM2ViOTdmZmI0OGU3ODRlMDEwMTA1YWFhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCkBAIC01MCw2ICs1MCwxNCBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChXS1BhZ2VSZWYs
IFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIGJvb2wg
cnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwgV0tGcmFtZVJlZiwg
Y29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBydW5KYXZhU2NyaXB0UHJvbXB0
KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2
b2lkKik7CisgICAgc3RhdGljIGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNp
YmxlKFdLUGFnZVJlZiwgYm9vbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGlj
IGJvb2wgbWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OworICAgIHN0YXRpYyB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBzdGF0dXNCYXJJc1Zpc2li
bGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRTdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKKyAgICBzdGF0aWMgYm9vbCBpc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldElzUmVzaXphYmxlKFdLUGFnZVJlZiwg
Ym9vbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09M
T1IpCiAgICAgc3RhdGljIHZvaWQgc2hvd0NvbG9yUGlja2VyKFdLUGFnZVJlZiwgV0tTdHJpbmdS
ZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9yUGlja2VyUmVzdWx0TGlzdGVuZXJSZWYsIGNvbnN0IHZv
aWQqKTsKICAgICBzdGF0aWMgdm9pZCBoaWRlQ29sb3JQaWNrZXIoV0tQYWdlUmVmLCBjb25zdCB2
b2lkKik7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggYjhjODljYzkxNDNlZDFhMzFhMjUwOTBhNzNhNDk4OGNiN2FlN2QwNy4uZjI3Nzc2ODlhOTI0
NTEzYzIyODkyN2JmMDRlMDg4NWFiZjU2M2JlYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTExLTE5ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQg
d2luZG93X2NyZWF0ZSBhbmQgd2luZG93X2Nsb3NlIHNtYXJ0Y2FsbGJhY2sgZnVuY3Rpb25zLgor
CisgICAgICAgICogTWluaUJyb3dzZXIvZWZsL21haW4uYzoKKyAgICAgICAgKG9uX3dpbmRvd19j
cmVhdGUpOgorICAgICAgICAob25fd2luZG93X2Nsb3NlKToKKyAgICAgICAgKHdpbmRvd19jcmVh
dGUpOgorCiAyMDEyLTExLTE4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM1MTA0LgpkaWZmIC0t
Z2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2Vm
bC9tYWluLmMKaW5kZXggOTJkM2YyZmY5ZjNlNDI2Y2E1YTg5NzEzMTBhMzg0NTY2YTA0Yzg3ZC4u
ZDE5NTE4ZGEyMzQwN2I2N2FjMGExODA4NmM1MTljOTg5NzdjNDMyNiAxMDA2NDQKLS0tIGEvVG9v
bHMvTWluaUJyb3dzZXIvZWZsL21haW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFp
bi5jCkBAIC0yODQsMjAgKzI4NCw2IEBAIG9uX2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQodm9p
ZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50CiAgICAgZWxt
X29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3X2Zv
cndhcmRfcG9zc2libGUoZXdrX3ZpZXcpKTsKIH0KIAotc3RhdGljIEV2YXNfT2JqZWN0Kgotb25f
bmV3X3dpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQpCi17Ci0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19j
cmVhdGUoTlVMTCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgd2luZG93cyA9IGVpbmFfbGlzdF9hcHBl
bmQod2luZG93cywgd2luZG93KTsKLSAgICByZXR1cm4gd2luZG93LT5ld2tfdmlldzsKLX0KLQot
c3RhdGljIHZvaWQKLW9uX2Nsb3NlX3dpbmRvdyh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0
ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgICB3aW5kb3dfY2xvc2UoKEJyb3dz
ZXJfV2luZG93ICopdXNlcl9kYXRhKTsKLX0KLQogc3RhdGljIHZvaWQKIG9uX3Byb2dyZXNzKHZv
aWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQog
ewpAQCAtNzYzLDYgKzc0OSwzOSBAQCBzdGF0aWMgRWluYV9Cb29sIG9uX2Z1bGxzY3JlZW5fZXhp
dChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCitz
dGF0aWMgRXZhc19PYmplY3QgKgorb25fd2luZG93X2NyZWF0ZShFd2tfVmlld19TbWFydF9EYXRh
ICpzbWFydERhdGEsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcykK
K3sKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOworICAgIGludCB3aWR0aCA9IDA7Cisg
ICAgaW50IGhlaWdodCA9IDA7CisKKyAgICBld2tfd2luZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dl
dCh3aW5kb3dfZmVhdHVyZXMsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIGlmICgh
d2lkdGgpCisgICAgICAgIHdpZHRoID0gd2luZG93X3dpZHRoOworCisgICAgaWYgKCFoZWlnaHQp
CisgICAgICAgIGhlaWdodCA9IHdpbmRvd19oZWlnaHQ7CisKKyAgICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBFdmFzX09i
amVjdCAqbmV3X3ZpZXcgPSB3aW5kb3ctPmV3a192aWV3OworCisgICAgd2luZG93cyA9IGVpbmFf
bGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKKworICAgIGluZm8oIm1pbmlicm93c2VyOiBs
b2NhdGlvbiglZCwlZCkgc2l6ZT0oJWQsJWQpXG4iLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwor
ICAgIHJldHVybiBuZXdfdmlldzsKK30KKworc3RhdGljIHZvaWQKK29uX3dpbmRvd19jbG9zZShF
d2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEpCit7CisgICAgQnJvd3Nlcl9XaW5kb3cgKndp
bmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc21hcnREYXRhLT5zZWxmKTsKKyAgICB3
aW5kb3dfY2xvc2Uod2luZG93KTsKK30KKwogc3RhdGljIHZvaWQKIGF1dGhfcG9wdXBfY2xvc2Uo
QXV0aF9EYXRhICphdXRoX2RhdGEpCiB7CkBAIC0xMDMwLDcgKzEwNDksOSBAQCBzdGF0aWMgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3QgY2hhciAqdXJsLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCiAgICAgZXdrVmlld0NsYXNzLT53aW5kb3dfZ2VvbWV0cnlfc2V0ID0gb25fd2lu
ZG93X2dlb21ldHJ5X3NldDsKICAgICBld2tWaWV3Q2xhc3MtPmZ1bGxzY3JlZW5fZW50ZXIgPSBv
bl9mdWxsc2NyZWVuX2VudGVyOwogICAgIGV3a1ZpZXdDbGFzcy0+ZnVsbHNjcmVlbl9leGl0ID0g
b25fZnVsbHNjcmVlbl9leGl0OwotICAgIGV3a1ZpZXdDbGFzcy0+d2luZG93X2NyZWF0ZV9uZXcg
PSBvbl9uZXdfd2luZG93OworICAgIGV3a1ZpZXdDbGFzcy0+d2luZG93X2NyZWF0ZSA9IG9uX3dp
bmRvd19jcmVhdGU7CisgICAgZXdrVmlld0NsYXNzLT53aW5kb3dfY2xvc2UgPSBvbl93aW5kb3df
Y2xvc2U7CisKIAogICAgIEV2YXMgKmV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldCh3aW5kb3ct
PmVsbV93aW5kb3cpOwogICAgIEV2YXNfU21hcnQgKnNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19u
ZXcoJmV3a1ZpZXdDbGFzcy0+c2MpOwpAQCAtMTA0Nyw3ICsxMDY4LDYgQEAgc3RhdGljIEJyb3dz
ZXJfV2luZG93ICp3aW5kb3dfY3JlYXRlKGNvbnN0IGNoYXIgKnVybCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQogICAgIGV3a19zZXR0aW5nc19wcmVmZXJyZWRfbWluaW11bV9jb250ZW50c193aWR0
aF9zZXQoc2V0dGluZ3MsIDApOwogCiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KHdpbmRvdy0+ZXdrX3ZpZXcsICJhdXRoZW50aWNhdGlvbixyZXF1ZXN0Iiwgb25fYXV0aGVudGlj
YXRpb25fcmVxdWVzdCwgd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2luZG93LT5ld2tfdmlldywgImNsb3NlLHdpbmRvdyIsIG9uX2Nsb3NlX3dpbmRvdywgd2lu
ZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmll
dywgImRvd25sb2FkLGZhaWxlZCIsIG9uX2Rvd25sb2FkX2ZhaWxlZCwgd2luZG93KTsKICAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2Fk
LGZpbmlzaGVkIiwgb25fZG93bmxvYWRfZmluaXNoZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxyZXF1ZXN0
Iiwgb25fZG93bmxvYWRfcmVxdWVzdCwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174931</attachid>
            <date>2012-11-19 02:57:51 -0800</date>
            <delta_ts>2012-11-19 05:45:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121119195535.patch</filename>
            <type>text/plain</type>
            <size>45644</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzc0MGQ0NzgzYzlhZWQ1
MDBiZDMyYWQ1NjY4MDJhMGVkZjEwMjU5Mi4uN2JhZDE4MjBmY2I3ZjFlZWRkOTc5MzY4YjhkODkz
OTMwZWYxMDhmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTE5ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IHZhbHVlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxiYWNrcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwOgorICAgICAgICAoRXdrVmll
d0ltcGw6OndpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQ
YWdlKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmg6CisgICAgICAgIChFd2tWaWV3SW1wbCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVm
bDo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dG9v
bGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
VUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGll
bnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZs
OjpQYWdlVUlDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmg6CisgICAgICAgIChQYWdlVUlDbGllbnRFZmwpOgorCiAyMDEyLTExLTE5ICBCYWxhenMg
S2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
Zml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiYjg3NDdiMWNiMWY1ODM4YzJkZDdj
Y2RkZjc4MjkxMWVhNjdjMWU1Li42NzlhNmE1N2I0YzNhYTJiYWVkZGUzZjJlZTJmOWEyMzhkZTFl
ZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNzMsNiArNzMsNyBAQCBMSVNUKEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3Bv
bnNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKIAogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5n
U3RvcmVDYWlyby5jcHAKIApAQCAtMjc5LDYgKzI4MCw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVS
UwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3VybF9yZXNwb25zZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCIKKyAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVy
ZXMuaCIKICkKIAogSU5TVEFMTChGSUxFUyAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDIvZWZs
L2V3ZWJraXQyLnBjIERFU1RJTkFUSU9OIGxpYi9wa2djb25maWcpCkBAIC0zNzYsNiArMzc4LDcg
QEAgU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJRVMKICAgICB0ZXN0X2V3azJfc3RvcmFnZV9tYW5h
Z2VyCiAgICAgdGVzdF9ld2syX3RleHRfY2hlY2tlcgogICAgIHRlc3RfZXdrMl92aWV3CisgICAg
dGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcwogKQogCiBJRiAoRU5BQkxFX0FQSV9URVNUUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IDA3Y2ExMjkz
NTBmNGVkYjdlM2RiNGJmOTJhZDcwYjhjM2EyMDljZTQuLmFkYWFlMWVjZGU1MDY3OWM5OTVjYzk1
YmViN2QxOWExMTg2MGU1NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaApAQCAtNTgsNSArNTgsNiBAQAogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2Uu
aCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3Zp
ZXcuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCiAKICNlbmRpZiAvLyBFV2Vi
S2l0Ml9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
Q2FsbGJhY2tzLmgKaW5kZXggYjQxN2I3Y2NjMzVmMmJkY2M0NjVkYjI4MmUyY2IxMjU0ODBhOGUw
MC4uNDE0MGM3NDJiYzg1ZDkwNzk5MGY1Yzk2NTUyYTRkZTM4ZGRkZTVlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApAQCAt
NTcsOCArNTcsNiBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgQXV0aGVudGljYXRpb25SZXF1
ZXN0LAogICAgIEJhY2tGb3J3YXJkTGlzdENoYW5nZSwKICAgICBDYW5jZWxWaWJyYXRpb24sCi0g
ICAgQ2xvc2VXaW5kb3csCi0gICAgQ3JlYXRlV2luZG93LAogICAgIERvd25sb2FkSm9iQ2FuY2Vs
bGVkLAogICAgIERvd25sb2FkSm9iRmFpbGVkLAogICAgIERvd25sb2FkSm9iRmluaXNoZWQsCkBA
IC02OSw2ICs2Nyw3IEBAIGVudW0gQ2FsbGJhY2tUeXBlIHsKICAgICBMb2FkRXJyb3IsCiAgICAg
TG9hZEZpbmlzaGVkLAogICAgIExvYWRQcm9ncmVzcywKKyAgICBNZW51QmFyVmlzaWJsZSwKICAg
ICBQcm92aXNpb25hbExvYWRGYWlsZWQsCiAgICAgUHJvdmlzaW9uYWxMb2FkUmVkaXJlY3QsCiAg
ICAgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwKQEAgLTc3LDE1ICs3NiwxOCBAQCBlbnVtIENhbGxi
YWNrVHlwZSB7CiAgICAgUmVzb3VyY2VMb2FkRmFpbGVkLAogICAgIFJlc291cmNlTG9hZEZpbmlz
aGVkLAogICAgIFJlc291cmNlUmVxdWVzdFNlbnQsCisgICAgU3RhdHVzQmFyVmlzaWJsZSwKICAg
ICBOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sCiAgICAgTmV3V2luZG93UG9saWN5RGVjaXNpb24s
CiAgICAgVGV4dEZvdW5kLAogICAgIFRpdGxlQ2hhbmdlLAorICAgIFRvb2xiYXJWaXNpYmxlLAog
ICAgIFRvb2x0aXBUZXh0VW5zZXQsCiAgICAgVG9vbHRpcFRleHRTZXQsCiAgICAgVVJMQ2hhbmdl
ZCwKICAgICBWaWJyYXRlLAogICAgIFdlYlByb2Nlc3NDcmFzaGVkLAorICAgIFdpbmRvd1Jlc2l6
YWJsZSwKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiAgICAgSW50ZW50UmVxdWVzdCwKICNlbmRp
ZgpAQCAtMTY0LDggKzE2Niw2IEBAIHN0cnVjdCBDYWxsQmFja0luZm88Y2FsbGJhY2tUeXBlPiB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhB
dXRoZW50aWNhdGlvblJlcXVlc3QsICJhdXRoZW50aWNhdGlvbixyZXF1ZXN0IiwgRXdrX0F1dGhf
UmVxdWVzdCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEJhY2tGb3J3YXJkTGlzdENoYW5n
ZSwgImJhY2ssZm9yd2FyZCxsaXN0LGNoYW5nZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soQ2FuY2VsVmlicmF0aW9uLCAiY2FuY2VsLHZpYnJhdGlvbiIsIHZvaWQpOwotREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhDbG9zZVdpbmRvdywgImNsb3NlLHdpbmRvdyIsIHZvaWQp
OwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhDcmVhdGVXaW5kb3csICJjcmVhdGUsd2luZG93
IiwgRXZhc19PYmplY3QqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JD
YW5jZWxsZWQsICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxvYWRfSm9iKTsKIERFQ0xB
UkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JGYWlsZWQsICJkb3dubG9hZCxmYWlsZWQi
LCBFd2tfRG93bmxvYWRfSm9iX0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93
bmxvYWRKb2JGaW5pc2hlZCwgImRvd25sb2FkLGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pvYik7
CkBAIC0xNzksNiArMTc5LDcgQEAgREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jl
c3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
UHJvdmlzaW9uYWxMb2FkRmFpbGVkLCAibG9hZCxwcm92aXNpb25hbCxmYWlsZWQiLCBFd2tfRXJy
b3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25hbExvYWRSZWRpcmVjdCwg
ImxvYWQscHJvdmlzaW9uYWwscmVkaXJlY3QiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwgImxvYWQscHJvdmlzaW9uYWwsc3RhcnRlZCIs
IHZvaWQpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhNZW51QmFyVmlzaWJsZSwgIm1lbnVi
YXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhOYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVjaXNpb24sbmF2aWdhdGlvbiIsIEV3a19OYXZpZ2F0
aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKE5ld1dpbmRv
d1BvbGljeURlY2lzaW9uLCAicG9saWN5LGRlY2lzaW9uLG5ldyx3aW5kb3ciLCBFd2tfTmF2aWdh
dGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJj
ZUxvYWRTdGFydGVkLCAicmVzb3VyY2UscmVxdWVzdCxuZXciLCBFd2tfUmVzb3VyY2VfUmVxdWVz
dCk7CkBAIC0xODYsMTMgKzE4NywxNiBAQCBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291
cmNlTG9hZFJlc3BvbnNlLCAicmVzb3VyY2UscmVxdWVzdCxyZXNwb25zZSIsIEV3awogREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRGYWlsZWQsICJyZXNvdXJjZSxyZXF1ZXN0
LGZhaWxlZCIsIEV3a19SZXNvdXJjZV9Mb2FkX0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soUmVzb3VyY2VMb2FkRmluaXNoZWQsICJyZXNvdXJjZSxyZXF1ZXN0LGZpbmlzaGVkIiwg
RXdrX1Jlc291cmNlKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VSZXF1ZXN0
U2VudCwgInJlc291cmNlLHJlcXVlc3Qsc2VudCIsIEV3a19SZXNvdXJjZV9SZXF1ZXN0KTsKK0RF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soU3RhdHVzQmFyVmlzaWJsZSwgInN0YXR1c2Jhcix2aXNp
YmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRleHRGb3VuZCwgInRleHQs
Zm91bmQiLCB1bnNpZ25lZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRpdGxlQ2hhbmdl
LCAidGl0bGUsY2hhbmdlZCIsIGNoYXIpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29s
YmFyVmlzaWJsZSwgInRvb2xiYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhUb29sdGlwVGV4dFVuc2V0LCAidG9vbHRpcCx0ZXh0LHVuc2V0Iiwgdm9pZCk7CiBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRvb2x0aXBUZXh0U2V0LCAidG9vbHRpcCx0ZXh0LHNl
dCIsIGNoYXIpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhVUkxDaGFuZ2VkLCAidXJsLGNo
YW5nZWQiLCBjaGFyKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVmlicmF0ZSwgInZpYnJh
dGUiLCB1aW50NjRfdCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFz
aGVkLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgYm9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExC
QUNLKFdpbmRvd1Jlc2l6YWJsZSwgIndpbmRvdyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFC
TEUoV0VCX0lOVEVOVFMpCiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3Qs
ICJpbnRlbnQscmVxdWVzdCxuZXciLCBFd2tfSW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmluZGV4IGFjYTJkNGRl
ZTFhYWYyYjgzZDY0YTBjYzhmODQ3MTgzZDRmNzc5MDIuLjI0YTc3N2UwNjMxZGQzNzQ2ZjU3YmNh
YjlmNzNlNTc3ZGEyMjY1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3SW1wbC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJld2tfc2V0
dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3Zp
ZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgog
I2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8
RWRqZS5oPgpAQCAtODMyLDM3ICs4MzMsNDUgQEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJM
Q2hhbmdlKCkKICAgICBpbmZvcm1JY29uQ2hhbmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3
SW1wbDo6Y3JlYXRlTmV3UGFnZShXS0RpY3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMpCitFd2tX
aW5kb3dGZWF0dXJlcyogRXdrVmlld0ltcGw6OndpbmRvd0ZlYXR1cmVzKCkKIHsKLSAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFTU0VSVChzZC0+YXBpKTsK
KyAgICBpZiAoIW1fd2luZG93RmVhdHVyZXMpCisgICAgICAgIG1fd2luZG93RmVhdHVyZXMgPSBF
d2tXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKDAsIHRoaXMpOwogCi0gICAgRXZhc19PYmplY3QqIG5l
d0V3a1ZpZXcgPSAwOwotCi0gICAgLy8gRXh0cmFjdCB0aGUgd2lkdGggYW5kIGhlaWdodCBmcm9t
IHRoZSB3aW5kb3cgYXR0cmlidXRlcyBhbmQgcGFzcyB0aGVtIGFsb25nIHRvIHRoZSBlbWJlZGRl
ci4KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhTdHIoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBoZWlnaHRTdHIoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImhlaWdodCIpKTsKKyAgICByZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQoKTsKK30KIAotICAg
IFdLVHlwZVJlZiByZWYgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdpbmRvd0ZlYXR1cmVz
LCB3aWR0aFN0ci5nZXQoKSk7Ci0gICAgdW5zaWduZWQgd2lkdGggPSByZWYgPyBXS0RvdWJsZUdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7Ci0gICAgcmVmID0gV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3aW5kb3dGZWF0dXJlcywgaGVpZ2h0U3RyLmdldCgpKTsK
LSAgICB1bnNpZ25lZCBoZWlnaHQgPSByZWYgPyBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0
PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7CitXS1BhZ2VSZWYgRXdrVmlld0ltcGw6OmNyZWF0ZU5l
d1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpCit7CisgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CiAK
LSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGVfbmV3KQorICAgIGlmICghc2QtPmFwaS0+
d2luZG93X2NyZWF0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIShuZXdFd2tWaWV3
ID0gc2QtPmFwaS0+d2luZG93X2NyZWF0ZV9uZXcoc2QsIHdpZHRoLCBoZWlnaHQpKSkKKyAgICBS
ZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGV3a1dpbmRvd0ZlYXR1cmVzID0gRXdrV2luZG93RmVh
dHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcywgdGhpcyk7CisKKyAgICBFdmFzX09iamVjdCog
bmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGUoc2QsIGV3a1dpbmRvd0ZlYXR1cmVz
LmdldCgpKTsKKyAgICBpZiAoIW5ld0V3a1ZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
RXdrVmlld0ltcGwqIG5ld1ZpZXdJbXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG5l
d0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKKyAgICBuZXdWaWV3SW1wbC0+
bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOworCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4obmV3Vmlld0ltcGwtPnBhZ2UoKSkpOwogfQogCiB2
b2lkIEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UoKQogewotICAgIHNtYXJ0Q2FsbGJhY2s8Q2xvc2VX
aW5kb3c+KCkuY2FsbCgpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRh
KCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xv
c2UpCisgICAgICAgIHJldHVybjsKKworICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CiB9
CiAKIHZvaWQgRXdrVmlld0ltcGw6Om9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFz
X09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3SW1wbC5oCmluZGV4IDI0Y2E0ZmRiYmM4MjlmY2RkOTlmMDE4Y2RlYzJj
YWI5NDBjOThjZDguLmRlYjhkY2QzZTMzNGY3NjE1MmViNGU4ZTQ0OTI1ZGY4MTY1MzAxMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApAQCAt
MjIsNiArMjIsNyBAQAogI2RlZmluZSBFd2tWaWV3SW1wbF9oCiAKICNpbmNsdWRlICJFd2tWaWV3
Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUg
IlJlZlB0ckVmbC5oIgogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUg
IldLR2VvbWV0cnkuaCIKQEAgLTc2LDYgKzc3LDcgQEAgY2xhc3MgRXdrQmFja0ZvcndhcmRMaXN0
OwogY2xhc3MgRXdrQ29sb3JQaWNrZXI7CiBjbGFzcyBFd2tQb3B1cE1lbnU7CiBjbGFzcyBFd2tT
ZXR0aW5nczsKK2NsYXNzIEV3a1dpbmRvd0ZlYXR1cmVzOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29udGV4dCBFdmFzX0dMX0Nv
bnRleHQ7CkBAIC0xMDIsNiArMTA0LDcgQEAgcHVibGljOgogICAgIEV3a0NvbnRleHQqIGV3a0Nv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBFd2tTZXR0aW5ncyogc2V0
dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgRXdrQmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsg
fQorICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcygpOwogCiAgICAgV2ViQ29y
ZTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdDsKQEAg
LTE1Niw3ICsxNTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNtaXNzQ29sb3JQaWNrZXIoKTsK
ICNlbmRpZgogCi0gICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV0tEaWN0aW9uYXJ5UmVmIHdp
bmRvd0ZlYXR1cmVzKTsKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXZWJLaXQ6OkltbXV0
YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzKTsKICAgICB2b2lkIGNsb3NlUGFnZSgpOwog
CiAgICAgdm9pZCByZXF1ZXN0UG9wdXBNZW51KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlFZmwq
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91Ymxl
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUG9wdXBJdGVtPiYgaXRl
bXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7CkBAIC0yNDQsNiArMjQ3LDcgQEAgcHJpdmF0ZToK
ICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogI2VuZGlmCiAgICAgT3du
UHRyPEV3a1NldHRpbmdzPiBtX3NldHRpbmdzOworICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJl
cz4gbV93aW5kb3dGZWF0dXJlczsKICAgICBjb25zdCB2b2lkKiBtX2N1cnNvcklkZW50aWZpZXI7
IC8vIFRoaXMgaXMgYW4gYWRkcmVzcywgZG8gbm90IGZyZWUgaXQuCiAgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIG1fZmF2aWNvblVSTDsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV91cmw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAppbmRleCA3NTAxNjExNzRi
OWE0NTdmZjJlZGU5ODg1MThiMGIzNDY3NzJiNTdmLi4zOTE3MGVlNmRjNTY5MmMxNjQ3Mzk0YzRk
ZDZmMmQxNjg2NTdmNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmgKQEAgLTMwLDggKzMwLDYgQEAKICAqICAgZXdrX2F1dGhfcmVxdWVzdF9yZWYoKSBv
biB0aGUgcmVxdWVzdCBvYmplY3QgdG8gcHJvY2VzcyB0aGUgYXV0aGVudGljYXRpb24gYXN5bmNo
cm9ub3VzbHkuCiAgKiAtICJiYWNrLGZvcndhcmQsbGlzdCxjaGFuZ2VkIiwgdm9pZDogcmVwb3J0
cyB0aGF0IHRoZSB2aWV3J3MgYmFjayAvIGZvcndhcmQgbGlzdCBoYWQgY2hhbmdlZC4KICAqIC0g
ImNhbmNlbCx2aWJyYXRpb24iLCB2b2lkOiByZXF1ZXN0IHRvIGNhbmNlbCB0aGUgdmlicmF0aW9u
LgotICogLSAiY2xvc2Usd2luZG93Iiwgdm9pZDogd2luZG93IGlzIGNsb3NlZC4KLSAqIC0gImNy
ZWF0ZSx3aW5kb3ciLCBFdmFzX09iamVjdCoqOiBhIG5ldyB3aW5kb3cgaXMgY3JlYXRlZC4KICAq
IC0gImRvd25sb2FkLGNhbmNlbGxlZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRoYXQg
YSBkb3dubG9hZCB3YXMgZWZmZWN0aXZlbHkgY2FuY2VsbGVkLgogICogLSAiZG93bmxvYWQsZmFp
bGVkIiwgRXdrX0Rvd25sb2FkX0pvYl9FcnJvcio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGZh
aWxlZCB3aXRoIHRoZSBnaXZlbiBlcnJvci4KICAqIC0gImRvd25sb2FkLGZpbmlzaGVkIiwgRXdr
X0Rvd25sb2FkX0pvYio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNz
ZnVsbHkuCkBAIC05NCw2ICs5Miw3IEBACiAjaW5jbHVkZSAiZXdrX3RvdWNoLmgiCiAjaW5jbHVk
ZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgorI2lu
Y2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAKICNpZmRl
ZiBfX2NwbHVzcGx1cwpAQCAtMTQ4LDE2ICsxNDcsMTcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0
X0NsYXNzIHsKICAgICAvLyAgIC0gV2ViIGRhdGFiYXNlLgogICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyAoKmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29u
c3QgY2hhciAqZGF0YWJhc2VOYW1lLCBjb25zdCBjaGFyICpkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBsb25nIGN1cnJlbnRRdW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5V
c2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBs
b25nIGxvbmcgZXhwZWN0ZWRVc2FnZSk7CiAKLSAgICAvLyBuZXcgd2luZG93OgotICAgIC8vICAg
LSBDcmVhdGUgYSBuZXcgd2luZG93IHdpdGggc3BlY2lmaWVkIHNpemUKLSAgICBFdmFzX09iamVj
dCogKCp3aW5kb3dfY3JlYXRlX25ldykoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29v
cmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KTsKKyAgICAvLyB3aW5kb3cgY3JlYXRpb24gYW5k
IGNsb3Npbmc6CisgICAgLy8gICAtIENyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBzcGVjaWZpZWQg
ZmVhdHVyZXMgYW5kIGNsb3NlIHdpbmRvdy4KKyAgICBFdmFzX09iamVjdCAqKCp3aW5kb3dfY3Jl
YXRlKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAq
d2luZG93X2ZlYXR1cmVzKTsKKyAgICB2b2lkICgqd2luZG93X2Nsb3NlKShFd2tfVmlld19TbWFy
dF9EYXRhICpzZCk7CiB9OwogCiAvKioKICAqIFRoZSB2ZXJzaW9uIHlvdSBoYXZlIHRvIHB1dCBp
bnRvIHRoZSB2ZXJzaW9uIGZpZWxkCiAgKiBpbiB0aGUgQGEgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
c3RydWN0dXJlLgogICovCi0jZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gN1VM
CisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gOFVMCiAKIC8qKgogICogSW5p
dGlhbGl6ZXIgZm9yIHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KQEAgLTE2
OSw3ICsxNjksNyBAQCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgewogICogQHNlZSBFV0tf
VklFV19TTUFSVF9DTEFTU19JTklUX1ZFUlNJT04KICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xB
U1NfSU5JVF9OQU1FX1ZFUlNJT04KICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19J
TklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9D
TEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwfQorI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUKHNt
YXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9DTEFTU19W
RVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwfQogCiAvKioKICAqIEluaXRpYWxpemVyIHRvIHplcm8gYSB3aG9sZSBF
d2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmNjOGJhYTg0MDVjOTdlMDJlMjBjZDliYTQwOTNhNmRkMzIzOTZlMjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVz
LmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgorCisjaW5jbHVkZSAi
V2ViTnVtYmVyLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgiCisj
aW5jbHVkZSA8RWluYS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tXaW5kb3dG
ZWF0dXJlczo6RXdrV2luZG93RmVhdHVyZXMoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVh
dHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmlld0ltcGwp
Cit7CisgICAgaWYgKHdpbmRvd0ZlYXR1cmVzKSB7CisgICAgICAgIG1fdG9vbGJhclZpc2libGUg
PSBnZXRXaW5kb3dGZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVhdHVyZXMs
IEFTQ0lJTGl0ZXJhbCgidG9vbEJhclZpc2libGUiKSk7CisgICAgICAgIG1fc3RhdHVzQmFyVmlz
aWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0
dXJlcywgQVNDSUlMaXRlcmFsKCJzdGF0dXNCYXJWaXNpYmxlIikpOworICAgICAgICBtX3Njcm9s
bGJhcnNWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdp
bmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInNjcm9sbGJhcnNWaXNpYmxlIikpOworICAgICAg
ICBtX21lbnVCYXJWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xl
YW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoIm1lbnVCYXJWaXNpYmxlIikpOworICAg
ICAgICBtX2xvY2F0aW9uQmFyVmlzaWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBX
ZWJCb29sZWFuPih3aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJsb2NhdGlvbkJhclZpc2li
bGUiKSk7CisgICAgICAgIG1fcmVzaXphYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2ws
IFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInJlc2l6YWJsZSIpKTsK
KyAgICAgICAgbV9mdWxsU2NyZWVuID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJv
b2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoImZ1bGxzY3JlZW4iKSk7CisKKyAg
ICAgICAgbV9nZW9tZXRyeS5zZXRYKGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRv
dWJsZT4od2luZG93RmVhdHVyZXMsIEFTQ0lJTGl0ZXJhbCgieCIpKSk7CisgICAgICAgIG1fZ2Vv
bWV0cnkuc2V0WShnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRv
d0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInkiKSkpOworICAgICAgICBtX2dlb21ldHJ5LnNldFdp
ZHRoKGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRvdWJsZT4od2luZG93RmVhdHVy
ZXMsIEFTQ0lJTGl0ZXJhbCgid2lkdGgiKSkpOworICAgICAgICBtX2dlb21ldHJ5LnNldEhlaWdo
dChnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVz
LCBBU0NJSUxpdGVyYWwoImhlaWdodCIpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgT3duUHRy
PFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzPiBjb3JlRmVhdHVyZXMgPSBhZG9wdFB0cihuZXcgV2Vi
Q29yZTo6V2luZG93RmVhdHVyZXMoKSk7CisKKyAgICAgICAgbV90b29sYmFyVmlzaWJsZSA9IGNv
cmVGZWF0dXJlcy0+dG9vbEJhclZpc2libGU7CisgICAgICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9
IGNvcmVGZWF0dXJlcy0+c3RhdHVzQmFyVmlzaWJsZTsKKyAgICAgICAgbV9zY3JvbGxiYXJzVmlz
aWJsZSA9IGNvcmVGZWF0dXJlcy0+c2Nyb2xsYmFyc1Zpc2libGU7CisgICAgICAgIG1fbWVudUJh
clZpc2libGUgPSBjb3JlRmVhdHVyZXMtPm1lbnVCYXJWaXNpYmxlOworICAgICAgICBtX2xvY2F0
aW9uQmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+bG9jYXRpb25CYXJWaXNpYmxlOworICAgICAg
ICBtX3Jlc2l6YWJsZSA9IGNvcmVGZWF0dXJlcy0+cmVzaXphYmxlOworICAgICAgICBtX2Z1bGxT
Y3JlZW4gPSBjb3JlRmVhdHVyZXMtPmZ1bGxzY3JlZW47CisKKyAgICAgICAgbV9nZW9tZXRyeS5z
ZXRYKGNvcmVGZWF0dXJlcy0+eCk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0WShjb3JlRmVhdHVy
ZXMtPnkpOworICAgICAgICBtX2dlb21ldHJ5LnNldFdpZHRoKGNvcmVGZWF0dXJlcy0+d2lkdGgp
OworICAgICAgICBtX2dlb21ldHJ5LnNldEhlaWdodChjb3JlRmVhdHVyZXMtPmhlaWdodCk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorVDEgRXdrV2lu
ZG93RmVhdHVyZXM6OmdldFdpbmRvd0ZlYXR1cmVWYWx1ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3
aW5kb3dGZWF0dXJlcywgY29uc3QgU3RyaW5nJiBmZWF0dXJlTmFtZSkKK3sKKyAgICBUMiogZmVh
dHVyZVZhbHVlID0gc3RhdGljX2Nhc3Q8VDIqPih3aW5kb3dGZWF0dXJlcy0+Z2V0KGZlYXR1cmVO
YW1lKSk7CisKKyAgICBpZiAoIWZlYXR1cmVWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZS0+dmFsdWUoKTsKK30KKwordm9pZCBFd2tXaW5kb3dG
ZWF0dXJlczo6c2V0VG9vbGJhclZpc2libGUoYm9vbCB0b29sYmFyVmlzaWJsZSkKK3sKKyAgICBt
X3Rvb2xiYXJWaXNpYmxlID0gdG9vbGJhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21hcnRD
YWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpUb29sYmFyVmlzaWJsZT4oKS5jYWxsKCZ0b29sYmFy
VmlzaWJsZSk7Cit9CisKK3ZvaWQgRXdrV2luZG93RmVhdHVyZXM6OnNldFN0YXR1c0JhclZpc2li
bGUoYm9vbCBzdGF0dXNCYXJWaXNpYmxlKQoreworICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IHN0
YXR1c0JhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2Fs
bGJhY2tzOjpTdGF0dXNCYXJWaXNpYmxlPigpLmNhbGwoJnN0YXR1c0JhclZpc2libGUpOworfQor
Cit2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRNZW51QmFyVmlzaWJsZShib29sIG1lbnVCYXJW
aXNpYmxlKQoreworICAgIG1fbWVudUJhclZpc2libGUgPSBtZW51QmFyVmlzaWJsZTsKKyAgICBt
X3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPEV3a1ZpZXdDYWxsYmFja3M6Ok1lbnVCYXJWaXNpYmxl
PigpLmNhbGwoJm1lbnVCYXJWaXNpYmxlKTsKK30KKwordm9pZCBFd2tXaW5kb3dGZWF0dXJlczo6
c2V0UmVzaXphYmxlKGJvb2wgcmVzaXphYmxlKQoreworICAgIG1fcmVzaXphYmxlID0gcmVzaXph
YmxlOworICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6V2lu
ZG93UmVzaXphYmxlPigpLmNhbGwoJnJlc2l6YWJsZSk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2lu
ZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJl
cyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNv
bnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKwor
ICAgIHJldHVybiBpbXBsLT50b29sYmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dp
bmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJO
KGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsK
KworICAgIHJldHVybiBpbXBsLT5zdGF0dXNCYXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBl
d2tfd2luZG93X2ZlYXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRv
d19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1Jf
UkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZh
bHNlKTsKKworICAgIHJldHVybiBpbXBsLT5zY3JvbGxiYXJzVmlzaWJsZSgpOworfQorCitFaW5h
X0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19X
aW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBM
X09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBs
LCBmYWxzZSk7CisKKyAgICByZXR1cm4gaW1wbC0+bWVudUJhclZpc2libGUoKTsKK30KKworRWlu
YV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQoY29uc3Qg
RXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VU
X0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMs
IGltcGwsIGZhbHNlKTsKKworICAgIHJldHVybiBpbXBsLT5sb2NhdGlvbkJhclZpc2libGUoKTsK
K30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldChjb25zdCBF
d2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRf
SU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywg
aW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwtPnJlc2l6YWJsZSgpOworfQorCitFaW5h
X0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19mdWxsc2NyZWVuX2dldChjb25zdCBFd2tfV2luZG93
X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9S
RVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFs
c2UpOworCisgICAgcmV0dXJuIGltcGwtPmZ1bGxTY3JlZW4oKTsKK30KKwordm9pZCBld2tfd2lu
ZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5k
b3dfZmVhdHVyZXMsIEV2YXNfQ29vcmQqIHgsIEV2YXNfQ29vcmQqIHksIEV2YXNfQ29vcmQqIHdp
ZHRoLCBFdmFzX0Nvb3JkKiBoZWlnaHQpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRV
Uk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCk7CisKKyAg
ICBpZiAoeCkKKyAgICAgICAgKnggPSBzdGF0aWNfY2FzdDxFdmFzX0Nvb3JkPihpbXBsLT5nZW9t
ZXRyeSgpLngoKSk7CisKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxFdmFz
X0Nvb3JkPihpbXBsLT5nZW9tZXRyeSgpLnkoKSk7CisKKyAgICBpZiAod2lkdGgpCisgICAgICAg
ICp3aWR0aCA9IHN0YXRpY19jYXN0PEV2YXNfQ29vcmQ+KGltcGwtPmdlb21ldHJ5KCkud2lkdGgo
KSk7CisKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8RXZh
c19Db29yZD4oaW1wbC0+Z2VvbWV0cnkoKS5oZWlnaHQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGU0MzY3NTA2NGY0MDIwOTMyN2UyNDdjYWZjYWIzOGQ5NjdkMzA4NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVh
dHVyZXMuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAq
IEBmaWxlICAgIGV3a193aW5kb3dfZmVhdHVyZXMuaAorICogQGJyaWVmICAgQWNjZXNzIHRvIHRo
ZSBmZWF0dXJlcyBvZiB3aW5kb3cuCisgKi8KKworI2lmbmRlZiBld2tfd2luZG93X2ZlYXR1cmVz
X2gKKyNkZWZpbmUgZXdrX3dpbmRvd19mZWF0dXJlc19oCisKKyNpbmNsdWRlIDxFaW5hLmg+Cisj
aW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKKy8qKgorICogRGVjbGFyZSBFd2tfV2luZG93X0ZlYXR1cmVzIGFzIEV3a19PYmplY3Qu
CisgKgorICogQHNlZSBFd2tfT2JqZWN0CisgKi8KK3R5cGVkZWYgc3RydWN0IEV3a09iamVjdCBF
d2tfV2luZG93X0ZlYXR1cmVzOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIHRvb2xiYXIgdmlzaWJp
bGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJl
cyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaXMgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3
aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNp
YmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisv
KioKKyAqIFF1ZXJpZXMgdGhlIHN0YXR1c2JhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVh
dHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHBy
b3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgc3RhdHVzYmFyIHNo
b3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitFQVBJIEVpbmFf
Qm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxlX2dldChjb25zdCBFd2tf
V2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhl
IHNjcm9sbGJhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFy
YW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBA
cmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgc2Nyb2xsYmFycyBzaG91bGQgYmUgdmlzaWJsZSwg
QGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19m
ZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMg
KndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmllcyB0aGUgbWVudWJhciB2aXNpYmls
aXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVz
IHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBpcyB0aGUgbWVudWJhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2li
bGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8q
KgorICogUXVlcmllcyB0aGUgbG9jYXRpb25iYXIgdmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IGZl
YXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBw
cm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIGxvY2F0aW9uYmFy
IHNob3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitFQVBJIEVp
bmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KGNvbnN0
IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmll
cyBpZiB0aGUgd2luZG93IGlzIHJlc2l6YWJsZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1
cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBpcyB0aGUgd2luZG93IHNob3VsZCBiZSByZXNpemFibGUsIEBjIEVJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxl
X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioK
KyAqIFF1ZXJpZXMgdGhlIHRoZSB3aW5kb3cgaXMgZnVsbHNjcmVlbgorICoKKyAqIEBwYXJhbSB3
aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB3aW5kb3cgc2hvdWxkIGJlIGZ1bGxzY3JlZW4sIEBjIEVJ
TkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVy
ZXNfZnVsbHNjcmVlbl9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1
cmVzKTsKKworLyoqCisgKiBHZXRzIGdlb21ldHJ5IHByb3BlcnRpZXMgb2YgYW4gRXdrX1dpbmRv
d19GZWF0dXJlcy4KKyAqCisgKiBQcm9wZXJ0aWVzIGFyZSByZXR1cm5lZCBpbiB0aGUgcmVzcGVj
dGl2ZSBwb2ludGVycy4gUGFzc2luZyBAYyBOVUxMIHRvIGFueSBvZgorICogdGhlc2UgcG9pbnRl
cnMgd2lsbCBjYXVzZSB0aGF0IHByb3BlcnR5IHRvIG5vdCBiZSByZXR1cm5lZC4KKyAqCisgKiBA
cGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSB3aW5kb3cncyBmZWF0dXJlcworICogQHBhcmFtIHgg
dGhlIHBvaW50ZXIgdG8gc3RvcmUgeCBwb3NpdGlvbgorICogQHBhcmFtIHkgdGhlIHBvaW50ZXIg
dG8gc3RvcmUgeSBwb3NpdGlvbgorICogQHBhcmFtIHcgdGhlIHBvaW50ZXIgdG8gc3RvcmUgd2lk
dGgKKyAqIEBwYXJhbSBoIHRoZSBwb2ludGVyIHRvIHN0b3JlIGhlaWdodAorICovCitFQVBJIHZv
aWQgZXdrX3dpbmRvd19mZWF0dXJlc19nZW9tZXRyeV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyAqd2luZG93X2ZlYXR1cmVzLCBFdmFzX0Nvb3JkICp4LCBFdmFzX0Nvb3JkICp5LCBFdmFz
X0Nvb3JkICp3LCBFdmFzX0Nvb3JkICpoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5k
aWYKKworI2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVyZXNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3By
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kZDNhNTViMDRjNTYzY2RlNTQ4MmYxMWJlYTQ3MzdjMGI0ZjZj
NDkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCisjZGVm
aW5lIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJFd2tWaWV3SW1w
bC5oIgorI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJXaW5kb3dG
ZWF0dXJlcy5oIgorI2luY2x1ZGUgImV3a19vYmplY3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworY2xhc3Mg
RXdrVmlld0ltcGw7CisKK2NsYXNzIEV3a1dpbmRvd0ZlYXR1cmVzIDogcHVibGljIEV3a19PYmpl
Y3QgeworcHVibGljOgorICAgIEVXS19PQkpFQ1RfREVDTEFSRShFd2tXaW5kb3dGZWF0dXJlcykK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3a1dpbmRvd0ZlYXR1cmVzPiBjcmVhdGUoV2ViS2l0
OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJ
bXBsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tXaW5kb3dGZWF0dXJl
cyh3aW5kb3dGZWF0dXJlcywgdmlld0ltcGwpKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5OyB9CisgICAgdm9pZCBz
ZXRHZW9tZXRyeShXZWJDb3JlOjpGbG9hdFJlY3QmIGdlb21ldHJ5KSB7IG1fZ2VvbWV0cnkgPSBn
ZW9tZXRyeTsgfQorCisgICAgYm9vbCB0b29sYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dG9vbGJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldFRvb2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJh
clZpc2libGUpOworCisgICAgYm9vbCBzdGF0dXNCYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0dXNCYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRTdGF0dXNCYXJWaXNpYmxlKGJvb2wg
c3RhdHVzQmFyVmlzaWJsZSk7CisKKyAgICBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxiYXJzVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsYmFyc1Zp
c2libGUoYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSkgeyBtX3Njcm9sbGJhcnNWaXNpYmxlID0gc2Ny
b2xsYmFyc1Zpc2libGU7IH0KKworICAgIGJvb2wgbWVudUJhclZpc2libGUoKSBjb25zdCB7IHJl
dHVybiBtX21lbnVCYXJWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRNZW51QmFyVmlzaWJsZShib29s
IG1lbnVCYXJWaXNpYmxlKTsKKworICAgIGJvb2wgbG9jYXRpb25CYXJWaXNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhdGlvbkJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldExvY2F0aW9uQmFy
VmlzaWJsZShib29sIGxvY2F0aW9uQmFyVmlzaWJsZSkgeyBtX2xvY2F0aW9uQmFyVmlzaWJsZSA9
IGxvY2F0aW9uQmFyVmlzaWJsZTsgfQorCisgICAgYm9vbCByZXNpemFibGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc2l6YWJsZTsgfQorICAgIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wgcmVzaXphYmxl
KTsKKworICAgIGJvb2wgZnVsbFNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNjcmVlbjsg
fQorICAgIHZvaWQgc2V0RnVsbFNjcmVlbihib29sIGZ1bGxTY3JlZW4pIHsgbV9mdWxsU2NyZWVu
ID0gZnVsbFNjcmVlbjsgfQorCitwcml2YXRlOgorICAgIEV3a1dpbmRvd0ZlYXR1cmVzKFdlYktp
dDo6SW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3
SW1wbCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKyAgICBzdGF0
aWMgVDEgZ2V0V2luZG93RmVhdHVyZVZhbHVlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFyeSog
d2luZG93RmVhdHVyZXMsIGNvbnN0IFN0cmluZyYgZmVhdHVyZU5hbWUpOworCisgICAgRXdrVmll
d0ltcGwqIG1fdmlld0ltcGw7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9nZW9tZXRyeTsK
KyAgICBib29sIG1fdG9vbGJhclZpc2libGU7CisgICAgYm9vbCBtX3N0YXR1c0JhclZpc2libGU7
CisgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAgIGJvb2wgbV9tZW51QmFyVmlzaWJs
ZTsKKyAgICBib29sIG1fbG9jYXRpb25CYXJWaXNpYmxlOworICAgIGJvb2wgbV9yZXNpemFibGU7
CisgICAgYm9vbCBtX2Z1bGxTY3JlZW47Cit9OworCisjZW5kaWYgLy8gZXdrX3dpbmRvd19mZWF0
dXJlc19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWU1MDMxMzQ2NjA2YzdkM2IyYzBkYTBjYmY4NGRkYWM5Y2Q3MDcxMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3Rf
ZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMv
RVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNv
cmUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK3N0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRGVmYXVsdFdpbmRvdyhFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRv
d0ZlYXR1cmVzKQoreworICAgIC8vIGRlZmF1bHQgdmFsdWVzIG9mIFdlYkNvcmU6V2luZG93RmVh
dHVyZXMoKQorICAgIC8vIC0gbWVudUJhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHN0YXR1c0Jh
clZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHRvb2xCYXJWaXNpYmxlKHRydWUpCisgICAgLy8gLSBs
b2NhdGlvbkJhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHNjcm9sbGJhcnNWaXNpYmxlKHRydWUp
CisgICAgLy8gLSByZXNpemFibGUodHJ1ZSkKKyAgICAvLyAtIGZ1bGxzY3JlZW4oZmFsc2UpCisK
KyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQo
d2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3N0
YXR1c2Jhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3
a193aW5kb3dfZmVhdHVyZXNfc2Nyb2xsYmFyc192aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykp
OworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxlX2dl
dCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNf
bG9jYXRpb25iYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJV
RShld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKwor
ICAgIEVYUEVDVF9GQUxTRShld2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KHdpbmRv
d0ZlYXR1cmVzKSk7CisKKyAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKKyAgICBld2tfd2lu
ZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldCh3aW5kb3dGZWF0dXJlcywgJngsICZ5LCAmd2lkdGgs
ICZoZWlnaHQpOworCisgICAgRVhQRUNUX0VRKDAsIHgpOworICAgIEVYUEVDVF9FUSgwLCB5KTsK
KyAgICBFWFBFQ1RfRVEoMCwgd2lkdGgpOworICAgIEVYUEVDVF9FUSgwLCBoZWlnaHQpOworCisg
ICAgcmV0dXJuIDA7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfd2luZG93X2Zl
YXR1cmVzX2RlZmF1bHRfcHJvcGVydHlfZ2V0KQoreworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0g
d2ViVmlldygpOworCisgICAgY29uc3QgY2hhciB3aW5kb3dIVE1MW10gPSAiPGh0bWw+PGJvZHkg
b25Mb2FkPVwid2luZG93Lm9wZW4oJycsICcnKTtcIj48L2JvZHk+PC9odG1sPiI7CisKKyAgICBl
d2tWaWV3Q2xhc3MoKS0+d2luZG93X2NyZWF0ZSA9IGNyZWF0ZURlZmF1bHRXaW5kb3c7CisKKyAg
ICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIHdpbmRvd0hUTUwsIDAsIDApOworICAg
IEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsKK30KKworc3RhdGljIEV2YXNf
T2JqZWN0KiBjcmVhdGVXaW5kb3coRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBjb25z
dCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dGZWF0dXJlcykKK3sKKyAgICBFWFBFQ1RfRkFM
U0UoZXdrX3dpbmRvd19mZWF0dXJlc190b29sYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVz
KSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJs
ZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1
cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1
cmVzKSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJf
dmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93
X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoZXdrX3dpbmRvd19mZWF0dXJlc19mdWxsc2NyZWVuX2dldCh3aW5kb3dGZWF0dXJlcykpOwor
CisgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgZXdrX3dpbmRvd19mZWF0dXJlc19n
ZW9tZXRyeV9nZXQod2luZG93RmVhdHVyZXMsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKwor
ICAgIEVYUEVDVF9FUSgxMDAsIHgpOworICAgIEVYUEVDVF9FUSgxNTAsIHkpOworICAgIEVYUEVD
VF9FUSg0MDAsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEoNDAwLCBoZWlnaHQpOworCisgICAgcmV0
dXJuIDA7Cit9CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfd2luZG93X2ZlYXR1cmVz
X3Byb3BlcnR5X2dldCkKK3sKKyAgICBFdmFzX09iamVjdCogdmlldyA9IHdlYlZpZXcoKTsKKwor
ICAgIGNvbnN0IGNoYXIgd2luZG93SFRNTFtdID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRv
dy5vcGVuKCcnLCAnJywgJ2xlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9NDAwLGhlaWdodD00MDAsbG9j
YXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9eWVzLHRvb2xiYXI9bm8sc2Nyb2xsYmFycz15ZXMs
cmVzaXphYmxlPXllcyxmdWxsc2NyZWVuPW5vJyk7XCI+PC9ib2R5PjwvaHRtbD4iOworCisgICAg
ZXdrVmlld0NsYXNzKCktPndpbmRvd19jcmVhdGUgPSBjcmVhdGVXaW5kb3c7CisKKyAgICBld2tf
dmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcsIHdpbmRvd0hUTUwsIDAsIDApOworICAgIEFTU0VS
VF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAppbmRleCAyYjc1MDcxMGY5ZGU0YTdj
ZTRmODllZDA3NjlmNmU1NzQ1MTg4NTU5Li5mMGE3YjRiZjFhMGFmNGJlNjQzZjdhZDA0YjJhY2E4
ZDc3NDU0MTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VV
SUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlD
bGllbnRFZmwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV0tFdmVudC5oIgogI2lu
Y2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3By
aXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKICNpbmNs
dWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogCkBAIC00OSw5
ICs1MCw5IEBAIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpjbG9zZVBhZ2UoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQogICAgIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5t
X3ZpZXdJbXBsLT5jbG9zZVBhZ2UoKTsKIH0KIAotV0tQYWdlUmVmIFBhZ2VVSUNsaWVudEVmbDo6
Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVxdWVzdFJlZiwgV0tEaWN0aW9uYXJ5UmVm
IHdpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24sIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCitXS1BhZ2VSZWYgUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGVO
ZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYgd2tXaW5k
b3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJldHVybiB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJ
bmZvKS0+bV92aWV3SW1wbC0+Y3JlYXRlTmV3UGFnZSh3aW5kb3dGZWF0dXJlcyk7CisgICAgcmV0
dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQ
YWdlKHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZs
OjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBhbGVydFRleHQsIFdL
RnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC03MCw2ICs3MSw2MiBAQCBXS1N0
cmluZ1JlZiBQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBX
S1N0cmluZ1JlZiBtZXNzYWdlLAogICAgIHJldHVybiB2YWx1ZSA/IFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjp0b29s
YmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7
CisgICAgcmV0dXJuIGZlYXR1cmVzLT50b29sYmFyVmlzaWJsZSgpOworfQorCit2b2lkIFBhZ2VV
SUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCB0b29sYmFy
VmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJl
cyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+
d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIGZlYXR1cmVzLT5z
ZXRUb29sYmFyVmlzaWJsZSh0b29sYmFyVmlzaWJsZSk7Cit9CisKK2Jvb2wgUGFnZVVJQ2xpZW50
RWZsOjptZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
K3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChj
bGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVh
dHVyZXMpOworICAgIHJldHVybiBmZWF0dXJlcy0+bWVudUJhclZpc2libGUoKTsKK30KKwordm9p
ZCBQYWdlVUlDbGllbnRFZmw6OnNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIG1l
bnVCYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0Zl
YXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJ
bXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisgICAgZmVhdHVy
ZXMtPnNldE1lbnVCYXJWaXNpYmxlKG1lbnVCYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlD
bGllbnRFZmw6OnN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGll
bnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNT
RVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4gZmVhdHVyZXMtPnN0YXR1c0JhclZpc2libGUoKTsK
K30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VS
ZWYsIGJvb2wgc3RhdHVzQmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJ
bmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMp
OworICAgIGZlYXR1cmVzLT5zZXRTdGF0dXNCYXJWaXNpYmxlKHN0YXR1c0JhclZpc2libGUpOwor
fQorCitib29sIFBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRv
UGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygp
OworICAgIEFTU0VSVChmZWF0dXJlcyk7CisgICAgcmV0dXJuIGZlYXR1cmVzLT5yZXNpemFibGUo
KTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldElzUmVzaXphYmxlKFdLUGFnZVJlZiwg
Ym9vbCByZXNpemFibGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93
RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmll
d0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICBmZWF0
dXJlcy0+c2V0UmVzaXphYmxlKHJlc2l6YWJsZSk7Cit9CisKICNpZiBFTkFCTEUoSU5QVVRfVFlQ
RV9DT0xPUikKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzaG93Q29sb3JQaWNrZXIoV0tQYWdlUmVm
LCBXS1N0cmluZ1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJl
ZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKQEAgLTE0MSw2ICsxOTgsMTQg
QEAgUGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlDbGllbnRFZmwoRXdrVmlld0ltcGwqIHZpZXdJbXBs
KQogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRBbGVydCA9IHJ1bkphdmFTY3JpcHRBbGVydDsK
ICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0Q29uZmlybSA9IHJ1bkphdmFTY3JpcHRDb25maXJt
OwogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRQcm9tcHQgPSBydW5KYXZhU2NyaXB0UHJvbXB0
OworICAgIHVpQ2xpZW50LnRvb2xiYXJzQXJlVmlzaWJsZSA9IHRvb2xiYXJzQXJlVmlzaWJsZTsK
KyAgICB1aUNsaWVudC5zZXRUb29sYmFyc0FyZVZpc2libGUgPSBzZXRUb29sYmFyc0FyZVZpc2li
bGU7CisgICAgdWlDbGllbnQubWVudUJhcklzVmlzaWJsZSA9IG1lbnVCYXJJc1Zpc2libGU7Cisg
ICAgdWlDbGllbnQuc2V0TWVudUJhcklzVmlzaWJsZSA9IHNldE1lbnVCYXJJc1Zpc2libGU7Cisg
ICAgdWlDbGllbnQuc3RhdHVzQmFySXNWaXNpYmxlID0gc3RhdHVzQmFySXNWaXNpYmxlOworICAg
IHVpQ2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJsZSA9IHNldFN0YXR1c0JhcklzVmlzaWJsZTsK
KyAgICB1aUNsaWVudC5pc1Jlc2l6YWJsZSA9IGlzUmVzaXphYmxlOworICAgIHVpQ2xpZW50LnNl
dElzUmVzaXphYmxlID0gc2V0SXNSZXNpemFibGU7CiAgICAgdWlDbGllbnQudGFrZUZvY3VzID0g
dGFrZUZvY3VzOwogICAgIHVpQ2xpZW50LmZvY3VzID0gZm9jdXM7CiAgICAgdWlDbGllbnQudW5m
b2N1cyA9IHVuZm9jdXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VVSUNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlD
bGllbnRFZmwuaAppbmRleCAyZjU0MTkyYTJhZTBmYjcwMzllMTJiYzkxNGI2NzhjODM2N2Y4MTZi
Li5lNjg0MTRhY2ZiNzQ4OGEzZWI5N2ZmYjQ4ZTc4NGUwMTAxMDVhYWFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKQEAgLTUwLDYgKzUwLDE0
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJl
ZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9v
bCBydW5KYXZhU2NyaXB0Q29uZmlybShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVm
LCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIFdLU3RyaW5nUmVmIHJ1bkphdmFTY3JpcHRQcm9t
cHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNvbnN0
IHZvaWQqKTsKKyAgICBzdGF0aWMgYm9vbCB0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRUb29sYmFyc0FyZVZp
c2libGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0
aWMgYm9vbCBtZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7CisgICAgc3RhdGljIHZvaWQgc2V0TWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2ws
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIHN0YXR1c0JhcklzVmlz
aWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lk
IHNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOworICAgIHN0YXRpYyBib29sIGlzUmVzaXphYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0SXNSZXNpemFibGUoV0tQYWdlUmVm
LCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9D
T0xPUikKICAgICBzdGF0aWMgdm9pZCBzaG93Q29sb3JQaWNrZXIoV0tQYWdlUmVmLCBXS1N0cmlu
Z1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3Qg
dm9pZCopOwogICAgIHN0YXRpYyB2b2lkIGhpZGVDb2xvclBpY2tlcihXS1BhZ2VSZWYsIGNvbnN0
IHZvaWQqKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA0MGYyNzg0ODMzNzFlYjM2YzA3MTY2NzYwNDcwNzg1YjI1Nzc2MDEzLi45ZGEyNjJmNTg0
MzllZTUxNGQwNzBkZWI3ZDlmZGMxNTZlY2UzMDkyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTEtMTkgIEpp
bndvbyBTb25nICA8amlud29vNy5zb25nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dL
Ml0gQWRkIEV3a19XaW5kb3dfRmVhdHVyZXMgQVBJIGFuZCByZWxhdGVkIFVJIGNhbGxiYWNrcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkxMTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRl
ZCB3aW5kb3dfY3JlYXRlIGFuZCB3aW5kb3dfY2xvc2Ugc21hcnRjYWxsYmFjayBmdW5jdGlvbnMu
CisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9lZmwvbWFpbi5jOgorICAgICAgICAob25fd2luZG93
X2NyZWF0ZSk6CisgICAgICAgIChvbl93aW5kb3dfY2xvc2UpOgorICAgICAgICAod2luZG93X2Ny
ZWF0ZSk6CisKIDIwMTItMTEtMTggIEt5dW5nVGFlIEtpbSAgPGt0Zi5raW1Ac2Ftc3VuZy5jb20+
CiAKICAgICAgICAgW0VGTF0gTm90IHRvIGluY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIgaW4g
VG9vbHMKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMgYi9Ub29scy9N
aW5pQnJvd3Nlci9lZmwvbWFpbi5jCmluZGV4IDkyZDNmMmZmOWYzZTQyNmNhNWE4OTcxMzEwYTM4
NDU2NmEwNGM4N2QuLjExZjA2NWMzNDRkOWUxYzI4YjI1NDRiNmYxZGU2YzJlZDE0YWE3Y2QgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJy
b3dzZXIvZWZsL21haW4uYwpAQCAtMjg0LDIwICsyODQsNiBAQCBvbl9iYWNrX2ZvcndhcmRfbGlz
dF9jaGFuZ2VkKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpl
dmVudAogICAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRvdy0+Zm9yd2FyZF9idXR0b24s
ICFld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKGV3a192aWV3KSk7CiB9CiAKLXN0YXRpYyBFdmFz
X09iamVjdCoKLW9uX25ld193aW5kb3coRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29v
cmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIEJyb3dzZXJfV2luZG93ICp3aW5k
b3cgPSB3aW5kb3dfY3JlYXRlKE5VTEwsIHdpZHRoLCBoZWlnaHQpOwotICAgIHdpbmRvd3MgPSBl
aW5hX2xpc3RfYXBwZW5kKHdpbmRvd3MsIHdpbmRvdyk7Ci0gICAgcmV0dXJuIHdpbmRvdy0+ZXdr
X3ZpZXc7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9jbG9zZV93aW5kb3codm9pZCAqdXNlcl9kYXRh
LCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICAgd2luZG93
X2Nsb3NlKChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YSk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBv
bl9wcm9ncmVzcyh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAq
ZXZlbnRfaW5mbykKIHsKQEAgLTc2Myw2ICs3NDksMzkgQEAgc3RhdGljIEVpbmFfQm9vbCBvbl9m
dWxsc2NyZWVuX2V4aXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAorc3RhdGljIEV2YXNfT2JqZWN0ICoKK29uX3dpbmRvd19jcmVhdGUoRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5k
b3dfZmVhdHVyZXMpCit7CisgICAgaW50IHggPSAwOworICAgIGludCB5ID0gMDsKKyAgICBpbnQg
d2lkdGggPSAwOworICAgIGludCBoZWlnaHQgPSAwOworCisgICAgZXdrX3dpbmRvd19mZWF0dXJl
c19nZW9tZXRyeV9nZXQod2luZG93X2ZlYXR1cmVzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7
CisKKyAgICBpZiAoIXdpZHRoKQorICAgICAgICB3aWR0aCA9IHdpbmRvd193aWR0aDsKKworICAg
IGlmICghaGVpZ2h0KQorICAgICAgICBoZWlnaHQgPSB3aW5kb3dfaGVpZ2h0OworCisgICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19jcmVhdGUoTlVMTCwgd2lkdGgsIGhlaWdodCk7
CisgICAgRXZhc19PYmplY3QgKm5ld192aWV3ID0gd2luZG93LT5ld2tfdmlldzsKKworICAgIHdp
bmRvd3MgPSBlaW5hX2xpc3RfYXBwZW5kKHdpbmRvd3MsIHdpbmRvdyk7CisKKyAgICBpbmZvKCJt
aW5pYnJvd3NlcjogbG9jYXRpb24oJWQsJWQpIHNpemU9KCVkLCVkKVxuIiwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisKKyAgICByZXR1cm4gbmV3X3ZpZXc7Cit9CisKK3N0YXRpYyB2b2lkCitvbl93
aW5kb3dfY2xvc2UoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhKQoreworICAgIEJyb3dz
ZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHNtYXJ0RGF0YS0+
c2VsZik7CisgICAgd2luZG93X2Nsb3NlKHdpbmRvdyk7Cit9CisKIHN0YXRpYyB2b2lkCiBhdXRo
X3BvcHVwX2Nsb3NlKEF1dGhfRGF0YSAqYXV0aF9kYXRhKQogewpAQCAtMTAzMCw3ICsxMDQ5LDgg
QEAgc3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5kb3dfY3JlYXRlKGNvbnN0IGNoYXIgKnVybCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGV3a1ZpZXdDbGFzcy0+d2luZG93X2dlb21ldHJ5
X3NldCA9IG9uX3dpbmRvd19nZW9tZXRyeV9zZXQ7CiAgICAgZXdrVmlld0NsYXNzLT5mdWxsc2Ny
ZWVuX2VudGVyID0gb25fZnVsbHNjcmVlbl9lbnRlcjsKICAgICBld2tWaWV3Q2xhc3MtPmZ1bGxz
Y3JlZW5fZXhpdCA9IG9uX2Z1bGxzY3JlZW5fZXhpdDsKLSAgICBld2tWaWV3Q2xhc3MtPndpbmRv
d19jcmVhdGVfbmV3ID0gb25fbmV3X3dpbmRvdzsKKyAgICBld2tWaWV3Q2xhc3MtPndpbmRvd19j
cmVhdGUgPSBvbl93aW5kb3dfY3JlYXRlOworICAgIGV3a1ZpZXdDbGFzcy0+d2luZG93X2Nsb3Nl
ID0gb25fd2luZG93X2Nsb3NlOwogCiAgICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNf
Z2V0KHdpbmRvdy0+ZWxtX3dpbmRvdyk7CiAgICAgRXZhc19TbWFydCAqc21hcnQgPSBldmFzX3Nt
YXJ0X2NsYXNzX25ldygmZXdrVmlld0NsYXNzLT5zYyk7CkBAIC0xMDQ3LDcgKzEwNjcsNiBAQCBz
dGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3QgY2hhciAqdXJsLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgZXdrX3NldHRpbmdzX3ByZWZlcnJlZF9taW5pbXVtX2Nv
bnRlbnRzX3dpZHRoX3NldChzZXR0aW5ncywgMCk7CiAKICAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImF1dGhlbnRpY2F0aW9uLHJlcXVlc3QiLCBv
bl9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0LCB3aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiY2xvc2Usd2luZG93Iiwgb25fY2xvc2Vf
d2luZG93LCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5k
b3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmFpbGVkIiwgb25fZG93bmxvYWRfZmFpbGVkLCB3aW5k
b3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3
LCAiZG93bmxvYWQsZmluaXNoZWQiLCBvbl9kb3dubG9hZF9maW5pc2hlZCwgd2luZG93KTsKICAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25s
b2FkLHJlcXVlc3QiLCBvbl9kb3dubG9hZF9yZXF1ZXN0LCB3aW5kb3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174937</attachid>
            <date>2012-11-19 03:29:08 -0800</date>
            <delta_ts>2012-11-19 07:09:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121119202652.patch</filename>
            <type>text/plain</type>
            <size>45643</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzc0MGQ0NzgzYzlhZWQ1
MDBiZDMyYWQ1NjY4MDJhMGVkZjEwMjU5Mi4uN2JhZDE4MjBmY2I3ZjFlZWRkOTc5MzY4YjhkODkz
OTMwZWYxMDhmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTE5ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IHZhbHVlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxiYWNrcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwOgorICAgICAgICAoRXdrVmll
d0ltcGw6OndpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQ
YWdlKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmg6CisgICAgICAgIChFd2tWaWV3SW1wbCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVm
bDo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dG9v
bGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
VUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGll
bnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZs
OjpQYWdlVUlDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmg6CisgICAgICAgIChQYWdlVUlDbGllbnRFZmwpOgorCiAyMDEyLTExLTE5ICBCYWxhenMg
S2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
Zml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiYjg3NDdiMWNiMWY1ODM4YzJkZDdj
Y2RkZjc4MjkxMWVhNjdjMWU1Li42NzlhNmE1N2I0YzNhYTJiYWVkZGUzZjJlZTJmOWEyMzhkZTFl
ZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNzMsNiArNzMsNyBAQCBMSVNUKEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3Bv
bnNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKIAogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5n
U3RvcmVDYWlyby5jcHAKIApAQCAtMjc5LDYgKzI4MCw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVS
UwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3VybF9yZXNwb25zZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCIKKyAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVy
ZXMuaCIKICkKIAogSU5TVEFMTChGSUxFUyAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDIvZWZs
L2V3ZWJraXQyLnBjIERFU1RJTkFUSU9OIGxpYi9wa2djb25maWcpCkBAIC0zNzYsNiArMzc4LDcg
QEAgU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJRVMKICAgICB0ZXN0X2V3azJfc3RvcmFnZV9tYW5h
Z2VyCiAgICAgdGVzdF9ld2syX3RleHRfY2hlY2tlcgogICAgIHRlc3RfZXdrMl92aWV3CisgICAg
dGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcwogKQogCiBJRiAoRU5BQkxFX0FQSV9URVNUUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IDA3Y2ExMjkz
NTBmNGVkYjdlM2RiNGJmOTJhZDcwYjhjM2EyMDljZTQuLmFkYWFlMWVjZGU1MDY3OWM5OTVjYzk1
YmViN2QxOWExMTg2MGU1NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaApAQCAtNTgsNSArNTgsNiBAQAogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2Uu
aCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3Zp
ZXcuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCiAKICNlbmRpZiAvLyBFV2Vi
S2l0Ml9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
Q2FsbGJhY2tzLmgKaW5kZXggYjQxN2I3Y2NjMzVmMmJkY2M0NjVkYjI4MmUyY2IxMjU0ODBhOGUw
MC4uNDE0MGM3NDJiYzg1ZDkwNzk5MGY1Yzk2NTUyYTRkZTM4ZGRkZTVlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApAQCAt
NTcsOCArNTcsNiBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgQXV0aGVudGljYXRpb25SZXF1
ZXN0LAogICAgIEJhY2tGb3J3YXJkTGlzdENoYW5nZSwKICAgICBDYW5jZWxWaWJyYXRpb24sCi0g
ICAgQ2xvc2VXaW5kb3csCi0gICAgQ3JlYXRlV2luZG93LAogICAgIERvd25sb2FkSm9iQ2FuY2Vs
bGVkLAogICAgIERvd25sb2FkSm9iRmFpbGVkLAogICAgIERvd25sb2FkSm9iRmluaXNoZWQsCkBA
IC02OSw2ICs2Nyw3IEBAIGVudW0gQ2FsbGJhY2tUeXBlIHsKICAgICBMb2FkRXJyb3IsCiAgICAg
TG9hZEZpbmlzaGVkLAogICAgIExvYWRQcm9ncmVzcywKKyAgICBNZW51QmFyVmlzaWJsZSwKICAg
ICBQcm92aXNpb25hbExvYWRGYWlsZWQsCiAgICAgUHJvdmlzaW9uYWxMb2FkUmVkaXJlY3QsCiAg
ICAgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwKQEAgLTc3LDE1ICs3NiwxOCBAQCBlbnVtIENhbGxi
YWNrVHlwZSB7CiAgICAgUmVzb3VyY2VMb2FkRmFpbGVkLAogICAgIFJlc291cmNlTG9hZEZpbmlz
aGVkLAogICAgIFJlc291cmNlUmVxdWVzdFNlbnQsCisgICAgU3RhdHVzQmFyVmlzaWJsZSwKICAg
ICBOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sCiAgICAgTmV3V2luZG93UG9saWN5RGVjaXNpb24s
CiAgICAgVGV4dEZvdW5kLAogICAgIFRpdGxlQ2hhbmdlLAorICAgIFRvb2xiYXJWaXNpYmxlLAog
ICAgIFRvb2x0aXBUZXh0VW5zZXQsCiAgICAgVG9vbHRpcFRleHRTZXQsCiAgICAgVVJMQ2hhbmdl
ZCwKICAgICBWaWJyYXRlLAogICAgIFdlYlByb2Nlc3NDcmFzaGVkLAorICAgIFdpbmRvd1Jlc2l6
YWJsZSwKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiAgICAgSW50ZW50UmVxdWVzdCwKICNlbmRp
ZgpAQCAtMTY0LDggKzE2Niw2IEBAIHN0cnVjdCBDYWxsQmFja0luZm88Y2FsbGJhY2tUeXBlPiB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhB
dXRoZW50aWNhdGlvblJlcXVlc3QsICJhdXRoZW50aWNhdGlvbixyZXF1ZXN0IiwgRXdrX0F1dGhf
UmVxdWVzdCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEJhY2tGb3J3YXJkTGlzdENoYW5n
ZSwgImJhY2ssZm9yd2FyZCxsaXN0LGNoYW5nZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soQ2FuY2VsVmlicmF0aW9uLCAiY2FuY2VsLHZpYnJhdGlvbiIsIHZvaWQpOwotREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhDbG9zZVdpbmRvdywgImNsb3NlLHdpbmRvdyIsIHZvaWQp
OwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhDcmVhdGVXaW5kb3csICJjcmVhdGUsd2luZG93
IiwgRXZhc19PYmplY3QqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JD
YW5jZWxsZWQsICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxvYWRfSm9iKTsKIERFQ0xB
UkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JGYWlsZWQsICJkb3dubG9hZCxmYWlsZWQi
LCBFd2tfRG93bmxvYWRfSm9iX0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93
bmxvYWRKb2JGaW5pc2hlZCwgImRvd25sb2FkLGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pvYik7
CkBAIC0xNzksNiArMTc5LDcgQEAgREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jl
c3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
UHJvdmlzaW9uYWxMb2FkRmFpbGVkLCAibG9hZCxwcm92aXNpb25hbCxmYWlsZWQiLCBFd2tfRXJy
b3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25hbExvYWRSZWRpcmVjdCwg
ImxvYWQscHJvdmlzaW9uYWwscmVkaXJlY3QiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwgImxvYWQscHJvdmlzaW9uYWwsc3RhcnRlZCIs
IHZvaWQpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhNZW51QmFyVmlzaWJsZSwgIm1lbnVi
YXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhOYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVjaXNpb24sbmF2aWdhdGlvbiIsIEV3a19OYXZpZ2F0
aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKE5ld1dpbmRv
d1BvbGljeURlY2lzaW9uLCAicG9saWN5LGRlY2lzaW9uLG5ldyx3aW5kb3ciLCBFd2tfTmF2aWdh
dGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJj
ZUxvYWRTdGFydGVkLCAicmVzb3VyY2UscmVxdWVzdCxuZXciLCBFd2tfUmVzb3VyY2VfUmVxdWVz
dCk7CkBAIC0xODYsMTMgKzE4NywxNiBAQCBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291
cmNlTG9hZFJlc3BvbnNlLCAicmVzb3VyY2UscmVxdWVzdCxyZXNwb25zZSIsIEV3awogREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRGYWlsZWQsICJyZXNvdXJjZSxyZXF1ZXN0
LGZhaWxlZCIsIEV3a19SZXNvdXJjZV9Mb2FkX0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soUmVzb3VyY2VMb2FkRmluaXNoZWQsICJyZXNvdXJjZSxyZXF1ZXN0LGZpbmlzaGVkIiwg
RXdrX1Jlc291cmNlKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VSZXF1ZXN0
U2VudCwgInJlc291cmNlLHJlcXVlc3Qsc2VudCIsIEV3a19SZXNvdXJjZV9SZXF1ZXN0KTsKK0RF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soU3RhdHVzQmFyVmlzaWJsZSwgInN0YXR1c2Jhcix2aXNp
YmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRleHRGb3VuZCwgInRleHQs
Zm91bmQiLCB1bnNpZ25lZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRpdGxlQ2hhbmdl
LCAidGl0bGUsY2hhbmdlZCIsIGNoYXIpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29s
YmFyVmlzaWJsZSwgInRvb2xiYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhUb29sdGlwVGV4dFVuc2V0LCAidG9vbHRpcCx0ZXh0LHVuc2V0Iiwgdm9pZCk7CiBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRvb2x0aXBUZXh0U2V0LCAidG9vbHRpcCx0ZXh0LHNl
dCIsIGNoYXIpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhVUkxDaGFuZ2VkLCAidXJsLGNo
YW5nZWQiLCBjaGFyKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVmlicmF0ZSwgInZpYnJh
dGUiLCB1aW50NjRfdCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFz
aGVkLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgYm9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExC
QUNLKFdpbmRvd1Jlc2l6YWJsZSwgIndpbmRvdyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFC
TEUoV0VCX0lOVEVOVFMpCiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3Qs
ICJpbnRlbnQscmVxdWVzdCxuZXciLCBFd2tfSW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmluZGV4IGFjYTJkNGRl
ZTFhYWYyYjgzZDY0YTBjYzhmODQ3MTgzZDRmNzc5MDIuLjI0YTc3N2UwNjMxZGQzNzQ2ZjU3YmNh
YjlmNzNlNTc3ZGEyMjY1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3SW1wbC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJld2tfc2V0
dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3Zp
ZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgog
I2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8
RWRqZS5oPgpAQCAtODMyLDM3ICs4MzMsNDUgQEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJM
Q2hhbmdlKCkKICAgICBpbmZvcm1JY29uQ2hhbmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3
SW1wbDo6Y3JlYXRlTmV3UGFnZShXS0RpY3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMpCitFd2tX
aW5kb3dGZWF0dXJlcyogRXdrVmlld0ltcGw6OndpbmRvd0ZlYXR1cmVzKCkKIHsKLSAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFTU0VSVChzZC0+YXBpKTsK
KyAgICBpZiAoIW1fd2luZG93RmVhdHVyZXMpCisgICAgICAgIG1fd2luZG93RmVhdHVyZXMgPSBF
d2tXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKDAsIHRoaXMpOwogCi0gICAgRXZhc19PYmplY3QqIG5l
d0V3a1ZpZXcgPSAwOwotCi0gICAgLy8gRXh0cmFjdCB0aGUgd2lkdGggYW5kIGhlaWdodCBmcm9t
IHRoZSB3aW5kb3cgYXR0cmlidXRlcyBhbmQgcGFzcyB0aGVtIGFsb25nIHRvIHRoZSBlbWJlZGRl
ci4KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhTdHIoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBoZWlnaHRTdHIoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImhlaWdodCIpKTsKKyAgICByZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQoKTsKK30KIAotICAg
IFdLVHlwZVJlZiByZWYgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdpbmRvd0ZlYXR1cmVz
LCB3aWR0aFN0ci5nZXQoKSk7Ci0gICAgdW5zaWduZWQgd2lkdGggPSByZWYgPyBXS0RvdWJsZUdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7Ci0gICAgcmVmID0gV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3aW5kb3dGZWF0dXJlcywgaGVpZ2h0U3RyLmdldCgpKTsK
LSAgICB1bnNpZ25lZCBoZWlnaHQgPSByZWYgPyBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0
PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7CitXS1BhZ2VSZWYgRXdrVmlld0ltcGw6OmNyZWF0ZU5l
d1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpCit7CisgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CiAK
LSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGVfbmV3KQorICAgIGlmICghc2QtPmFwaS0+
d2luZG93X2NyZWF0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIShuZXdFd2tWaWV3
ID0gc2QtPmFwaS0+d2luZG93X2NyZWF0ZV9uZXcoc2QsIHdpZHRoLCBoZWlnaHQpKSkKKyAgICBS
ZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGV3a1dpbmRvd0ZlYXR1cmVzID0gRXdrV2luZG93RmVh
dHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcywgdGhpcyk7CisKKyAgICBFdmFzX09iamVjdCog
bmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGUoc2QsIGV3a1dpbmRvd0ZlYXR1cmVz
LmdldCgpKTsKKyAgICBpZiAoIW5ld0V3a1ZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
RXdrVmlld0ltcGwqIG5ld1ZpZXdJbXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG5l
d0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKKyAgICBuZXdWaWV3SW1wbC0+
bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOworCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4obmV3Vmlld0ltcGwtPnBhZ2UoKSkpOwogfQogCiB2
b2lkIEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UoKQogewotICAgIHNtYXJ0Q2FsbGJhY2s8Q2xvc2VX
aW5kb3c+KCkuY2FsbCgpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRh
KCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xv
c2UpCisgICAgICAgIHJldHVybjsKKworICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CiB9
CiAKIHZvaWQgRXdrVmlld0ltcGw6Om9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFz
X09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3SW1wbC5oCmluZGV4IDI0Y2E0ZmRiYmM4MjlmY2RkOTlmMDE4Y2RlYzJj
YWI5NDBjOThjZDguLmRlYjhkY2QzZTMzNGY3NjE1MmViNGU4ZTQ0OTI1ZGY4MTY1MzAxMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApAQCAt
MjIsNiArMjIsNyBAQAogI2RlZmluZSBFd2tWaWV3SW1wbF9oCiAKICNpbmNsdWRlICJFd2tWaWV3
Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUg
IlJlZlB0ckVmbC5oIgogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUg
IldLR2VvbWV0cnkuaCIKQEAgLTc2LDYgKzc3LDcgQEAgY2xhc3MgRXdrQmFja0ZvcndhcmRMaXN0
OwogY2xhc3MgRXdrQ29sb3JQaWNrZXI7CiBjbGFzcyBFd2tQb3B1cE1lbnU7CiBjbGFzcyBFd2tT
ZXR0aW5nczsKK2NsYXNzIEV3a1dpbmRvd0ZlYXR1cmVzOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29udGV4dCBFdmFzX0dMX0Nv
bnRleHQ7CkBAIC0xMDIsNiArMTA0LDcgQEAgcHVibGljOgogICAgIEV3a0NvbnRleHQqIGV3a0Nv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBFd2tTZXR0aW5ncyogc2V0
dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgRXdrQmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsg
fQorICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcygpOwogCiAgICAgV2ViQ29y
ZTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdDsKQEAg
LTE1Niw3ICsxNTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNtaXNzQ29sb3JQaWNrZXIoKTsK
ICNlbmRpZgogCi0gICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV0tEaWN0aW9uYXJ5UmVmIHdp
bmRvd0ZlYXR1cmVzKTsKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXZWJLaXQ6OkltbXV0
YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzKTsKICAgICB2b2lkIGNsb3NlUGFnZSgpOwog
CiAgICAgdm9pZCByZXF1ZXN0UG9wdXBNZW51KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlFZmwq
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91Ymxl
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUG9wdXBJdGVtPiYgaXRl
bXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7CkBAIC0yNDQsNiArMjQ3LDcgQEAgcHJpdmF0ZToK
ICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogI2VuZGlmCiAgICAgT3du
UHRyPEV3a1NldHRpbmdzPiBtX3NldHRpbmdzOworICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJl
cz4gbV93aW5kb3dGZWF0dXJlczsKICAgICBjb25zdCB2b2lkKiBtX2N1cnNvcklkZW50aWZpZXI7
IC8vIFRoaXMgaXMgYW4gYWRkcmVzcywgZG8gbm90IGZyZWUgaXQuCiAgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIG1fZmF2aWNvblVSTDsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV91cmw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAppbmRleCA3NTAxNjExNzRi
OWE0NTdmZjJlZGU5ODg1MThiMGIzNDY3NzJiNTdmLi4zOTE3MGVlNmRjNTY5MmMxNjQ3Mzk0YzRk
ZDZmMmQxNjg2NTdmNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmgKQEAgLTMwLDggKzMwLDYgQEAKICAqICAgZXdrX2F1dGhfcmVxdWVzdF9yZWYoKSBv
biB0aGUgcmVxdWVzdCBvYmplY3QgdG8gcHJvY2VzcyB0aGUgYXV0aGVudGljYXRpb24gYXN5bmNo
cm9ub3VzbHkuCiAgKiAtICJiYWNrLGZvcndhcmQsbGlzdCxjaGFuZ2VkIiwgdm9pZDogcmVwb3J0
cyB0aGF0IHRoZSB2aWV3J3MgYmFjayAvIGZvcndhcmQgbGlzdCBoYWQgY2hhbmdlZC4KICAqIC0g
ImNhbmNlbCx2aWJyYXRpb24iLCB2b2lkOiByZXF1ZXN0IHRvIGNhbmNlbCB0aGUgdmlicmF0aW9u
LgotICogLSAiY2xvc2Usd2luZG93Iiwgdm9pZDogd2luZG93IGlzIGNsb3NlZC4KLSAqIC0gImNy
ZWF0ZSx3aW5kb3ciLCBFdmFzX09iamVjdCoqOiBhIG5ldyB3aW5kb3cgaXMgY3JlYXRlZC4KICAq
IC0gImRvd25sb2FkLGNhbmNlbGxlZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRoYXQg
YSBkb3dubG9hZCB3YXMgZWZmZWN0aXZlbHkgY2FuY2VsbGVkLgogICogLSAiZG93bmxvYWQsZmFp
bGVkIiwgRXdrX0Rvd25sb2FkX0pvYl9FcnJvcio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGZh
aWxlZCB3aXRoIHRoZSBnaXZlbiBlcnJvci4KICAqIC0gImRvd25sb2FkLGZpbmlzaGVkIiwgRXdr
X0Rvd25sb2FkX0pvYio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNz
ZnVsbHkuCkBAIC05NCw2ICs5Miw3IEBACiAjaW5jbHVkZSAiZXdrX3RvdWNoLmgiCiAjaW5jbHVk
ZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgorI2lu
Y2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAKICNpZmRl
ZiBfX2NwbHVzcGx1cwpAQCAtMTQ4LDE2ICsxNDcsMTcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0
X0NsYXNzIHsKICAgICAvLyAgIC0gV2ViIGRhdGFiYXNlLgogICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyAoKmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29u
c3QgY2hhciAqZGF0YWJhc2VOYW1lLCBjb25zdCBjaGFyICpkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBsb25nIGN1cnJlbnRRdW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5V
c2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBs
b25nIGxvbmcgZXhwZWN0ZWRVc2FnZSk7CiAKLSAgICAvLyBuZXcgd2luZG93OgotICAgIC8vICAg
LSBDcmVhdGUgYSBuZXcgd2luZG93IHdpdGggc3BlY2lmaWVkIHNpemUKLSAgICBFdmFzX09iamVj
dCogKCp3aW5kb3dfY3JlYXRlX25ldykoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29v
cmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KTsKKyAgICAvLyB3aW5kb3cgY3JlYXRpb24gYW5k
IGNsb3Npbmc6CisgICAgLy8gICAtIENyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBzcGVjaWZpZWQg
ZmVhdHVyZXMgYW5kIGNsb3NlIHdpbmRvdy4KKyAgICBFdmFzX09iamVjdCAqKCp3aW5kb3dfY3Jl
YXRlKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAq
d2luZG93X2ZlYXR1cmVzKTsKKyAgICB2b2lkICgqd2luZG93X2Nsb3NlKShFd2tfVmlld19TbWFy
dF9EYXRhICpzZCk7CiB9OwogCiAvKioKICAqIFRoZSB2ZXJzaW9uIHlvdSBoYXZlIHRvIHB1dCBp
bnRvIHRoZSB2ZXJzaW9uIGZpZWxkCiAgKiBpbiB0aGUgQGEgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
c3RydWN0dXJlLgogICovCi0jZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gN1VM
CisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gOFVMCiAKIC8qKgogICogSW5p
dGlhbGl6ZXIgZm9yIHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KQEAgLTE2
OSw3ICsxNjksNyBAQCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgewogICogQHNlZSBFV0tf
VklFV19TTUFSVF9DTEFTU19JTklUX1ZFUlNJT04KICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xB
U1NfSU5JVF9OQU1FX1ZFUlNJT04KICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19J
TklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9D
TEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwfQorI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUKHNt
YXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9DTEFTU19W
RVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwfQogCiAvKioKICAqIEluaXRpYWxpemVyIHRvIHplcm8gYSB3aG9sZSBF
d2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmNjOGJhYTg0MDVjOTdlMDJlMjBjZDliYTQwOTNhNmRkMzIzOTZlMjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVz
LmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgorCisjaW5jbHVkZSAi
V2ViTnVtYmVyLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgiCisj
aW5jbHVkZSA8RWluYS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tXaW5kb3dG
ZWF0dXJlczo6RXdrV2luZG93RmVhdHVyZXMoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVh
dHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmlld0ltcGwp
Cit7CisgICAgaWYgKHdpbmRvd0ZlYXR1cmVzKSB7CisgICAgICAgIG1fdG9vbGJhclZpc2libGUg
PSBnZXRXaW5kb3dGZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVhdHVyZXMs
IEFTQ0lJTGl0ZXJhbCgidG9vbEJhclZpc2libGUiKSk7CisgICAgICAgIG1fc3RhdHVzQmFyVmlz
aWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0
dXJlcywgQVNDSUlMaXRlcmFsKCJzdGF0dXNCYXJWaXNpYmxlIikpOworICAgICAgICBtX3Njcm9s
bGJhcnNWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdp
bmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInNjcm9sbGJhcnNWaXNpYmxlIikpOworICAgICAg
ICBtX21lbnVCYXJWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xl
YW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoIm1lbnVCYXJWaXNpYmxlIikpOworICAg
ICAgICBtX2xvY2F0aW9uQmFyVmlzaWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBX
ZWJCb29sZWFuPih3aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJsb2NhdGlvbkJhclZpc2li
bGUiKSk7CisgICAgICAgIG1fcmVzaXphYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2ws
IFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInJlc2l6YWJsZSIpKTsK
KyAgICAgICAgbV9mdWxsU2NyZWVuID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJv
b2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoImZ1bGxzY3JlZW4iKSk7CisKKyAg
ICAgICAgbV9nZW9tZXRyeS5zZXRYKGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRv
dWJsZT4od2luZG93RmVhdHVyZXMsIEFTQ0lJTGl0ZXJhbCgieCIpKSk7CisgICAgICAgIG1fZ2Vv
bWV0cnkuc2V0WShnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRv
d0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInkiKSkpOworICAgICAgICBtX2dlb21ldHJ5LnNldFdp
ZHRoKGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRvdWJsZT4od2luZG93RmVhdHVy
ZXMsIEFTQ0lJTGl0ZXJhbCgid2lkdGgiKSkpOworICAgICAgICBtX2dlb21ldHJ5LnNldEhlaWdo
dChnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVz
LCBBU0NJSUxpdGVyYWwoImhlaWdodCIpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgT3duUHRy
PFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzPiBjb3JlRmVhdHVyZXMgPSBhZG9wdFB0cihuZXcgV2Vi
Q29yZTo6V2luZG93RmVhdHVyZXMoKSk7CisKKyAgICAgICAgbV90b29sYmFyVmlzaWJsZSA9IGNv
cmVGZWF0dXJlcy0+dG9vbEJhclZpc2libGU7CisgICAgICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9
IGNvcmVGZWF0dXJlcy0+c3RhdHVzQmFyVmlzaWJsZTsKKyAgICAgICAgbV9zY3JvbGxiYXJzVmlz
aWJsZSA9IGNvcmVGZWF0dXJlcy0+c2Nyb2xsYmFyc1Zpc2libGU7CisgICAgICAgIG1fbWVudUJh
clZpc2libGUgPSBjb3JlRmVhdHVyZXMtPm1lbnVCYXJWaXNpYmxlOworICAgICAgICBtX2xvY2F0
aW9uQmFyVmlzaWJsZSA9IGNvcmVGZWF0dXJlcy0+bG9jYXRpb25CYXJWaXNpYmxlOworICAgICAg
ICBtX3Jlc2l6YWJsZSA9IGNvcmVGZWF0dXJlcy0+cmVzaXphYmxlOworICAgICAgICBtX2Z1bGxT
Y3JlZW4gPSBjb3JlRmVhdHVyZXMtPmZ1bGxzY3JlZW47CisKKyAgICAgICAgbV9nZW9tZXRyeS5z
ZXRYKGNvcmVGZWF0dXJlcy0+eCk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0WShjb3JlRmVhdHVy
ZXMtPnkpOworICAgICAgICBtX2dlb21ldHJ5LnNldFdpZHRoKGNvcmVGZWF0dXJlcy0+d2lkdGgp
OworICAgICAgICBtX2dlb21ldHJ5LnNldEhlaWdodChjb3JlRmVhdHVyZXMtPmhlaWdodCk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorVDEgRXdrV2lu
ZG93RmVhdHVyZXM6OmdldFdpbmRvd0ZlYXR1cmVWYWx1ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3
aW5kb3dGZWF0dXJlcywgY29uc3QgU3RyaW5nJiBmZWF0dXJlTmFtZSkKK3sKKyAgICBUMiogZmVh
dHVyZVZhbHVlID0gc3RhdGljX2Nhc3Q8VDIqPih3aW5kb3dGZWF0dXJlcy0+Z2V0KGZlYXR1cmVO
YW1lKSk7CisKKyAgICBpZiAoIWZlYXR1cmVWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZS0+dmFsdWUoKTsKK30KKwordm9pZCBFd2tXaW5kb3dG
ZWF0dXJlczo6c2V0VG9vbGJhclZpc2libGUoYm9vbCB0b29sYmFyVmlzaWJsZSkKK3sKKyAgICBt
X3Rvb2xiYXJWaXNpYmxlID0gdG9vbGJhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21hcnRD
YWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpUb29sYmFyVmlzaWJsZT4oKS5jYWxsKCZ0b29sYmFy
VmlzaWJsZSk7Cit9CisKK3ZvaWQgRXdrV2luZG93RmVhdHVyZXM6OnNldFN0YXR1c0JhclZpc2li
bGUoYm9vbCBzdGF0dXNCYXJWaXNpYmxlKQoreworICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IHN0
YXR1c0JhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2Fs
bGJhY2tzOjpTdGF0dXNCYXJWaXNpYmxlPigpLmNhbGwoJnN0YXR1c0JhclZpc2libGUpOworfQor
Cit2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRNZW51QmFyVmlzaWJsZShib29sIG1lbnVCYXJW
aXNpYmxlKQoreworICAgIG1fbWVudUJhclZpc2libGUgPSBtZW51QmFyVmlzaWJsZTsKKyAgICBt
X3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPEV3a1ZpZXdDYWxsYmFja3M6Ok1lbnVCYXJWaXNpYmxl
PigpLmNhbGwoJm1lbnVCYXJWaXNpYmxlKTsKK30KKwordm9pZCBFd2tXaW5kb3dGZWF0dXJlczo6
c2V0UmVzaXphYmxlKGJvb2wgcmVzaXphYmxlKQoreworICAgIG1fcmVzaXphYmxlID0gcmVzaXph
YmxlOworICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6V2lu
ZG93UmVzaXphYmxlPigpLmNhbGwoJnJlc2l6YWJsZSk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2lu
ZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJl
cyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNv
bnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKwor
ICAgIHJldHVybiBpbXBsLT50b29sYmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dp
bmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJO
KGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsK
KworICAgIHJldHVybiBpbXBsLT5zdGF0dXNCYXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBl
d2tfd2luZG93X2ZlYXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRv
d19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1Jf
UkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZh
bHNlKTsKKworICAgIHJldHVybiBpbXBsLT5zY3JvbGxiYXJzVmlzaWJsZSgpOworfQorCitFaW5h
X0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19X
aW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBM
X09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBs
LCBmYWxzZSk7CisKKyAgICByZXR1cm4gaW1wbC0+bWVudUJhclZpc2libGUoKTsKK30KKworRWlu
YV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQoY29uc3Qg
RXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VU
X0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMs
IGltcGwsIGZhbHNlKTsKKworICAgIHJldHVybiBpbXBsLT5sb2NhdGlvbkJhclZpc2libGUoKTsK
K30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldChjb25zdCBF
d2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRf
SU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywg
aW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwtPnJlc2l6YWJsZSgpOworfQorCitFaW5h
X0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19mdWxsc2NyZWVuX2dldChjb25zdCBFd2tfV2luZG93
X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9S
RVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFs
c2UpOworCisgICAgcmV0dXJuIGltcGwtPmZ1bGxTY3JlZW4oKTsKK30KKwordm9pZCBld2tfd2lu
ZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5k
b3dfZmVhdHVyZXMsIEV2YXNfQ29vcmQqIHgsIEV2YXNfQ29vcmQqIHksIEV2YXNfQ29vcmQqIHdp
ZHRoLCBFdmFzX0Nvb3JkKiBoZWlnaHQpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRV
Uk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCk7CisKKyAg
ICBpZiAoeCkKKyAgICAgICAgKnggPSBzdGF0aWNfY2FzdDxFdmFzX0Nvb3JkPihpbXBsLT5nZW9t
ZXRyeSgpLngoKSk7CisKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxFdmFz
X0Nvb3JkPihpbXBsLT5nZW9tZXRyeSgpLnkoKSk7CisKKyAgICBpZiAod2lkdGgpCisgICAgICAg
ICp3aWR0aCA9IHN0YXRpY19jYXN0PEV2YXNfQ29vcmQ+KGltcGwtPmdlb21ldHJ5KCkud2lkdGgo
KSk7CisKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8RXZh
c19Db29yZD4oaW1wbC0+Z2VvbWV0cnkoKS5oZWlnaHQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGU0MzY3NTA2NGY0MDIwOTMyN2UyNDdjYWZjYWIzOGQ5NjdkMzA4NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVh
dHVyZXMuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAq
IEBmaWxlICAgIGV3a193aW5kb3dfZmVhdHVyZXMuaAorICogQGJyaWVmICAgQWNjZXNzIHRvIHRo
ZSBmZWF0dXJlcyBvZiB3aW5kb3cuCisgKi8KKworI2lmbmRlZiBld2tfd2luZG93X2ZlYXR1cmVz
X2gKKyNkZWZpbmUgZXdrX3dpbmRvd19mZWF0dXJlc19oCisKKyNpbmNsdWRlIDxFaW5hLmg+Cisj
aW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKKy8qKgorICogRGVjbGFyZSBFd2tfV2luZG93X0ZlYXR1cmVzIGFzIEV3a19PYmplY3Qu
CisgKgorICogQHNlZSBFd2tfT2JqZWN0CisgKi8KK3R5cGVkZWYgc3RydWN0IEV3a09iamVjdCBF
d2tfV2luZG93X0ZlYXR1cmVzOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIHRvb2xiYXIgdmlzaWJp
bGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJl
cyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaXMgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3
aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNp
YmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisv
KioKKyAqIFF1ZXJpZXMgdGhlIHN0YXR1c2JhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVh
dHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHBy
b3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgc3RhdHVzYmFyIHNo
b3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitFQVBJIEVpbmFf
Qm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxlX2dldChjb25zdCBFd2tf
V2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhl
IHNjcm9sbGJhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFy
YW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBA
cmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgc2Nyb2xsYmFycyBzaG91bGQgYmUgdmlzaWJsZSwg
QGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19m
ZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMg
KndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmllcyB0aGUgbWVudWJhciB2aXNpYmls
aXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVz
IHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBpcyB0aGUgbWVudWJhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2li
bGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8q
KgorICogUXVlcmllcyB0aGUgbG9jYXRpb25iYXIgdmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IGZl
YXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBw
cm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIGxvY2F0aW9uYmFy
IHNob3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitFQVBJIEVp
bmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KGNvbnN0
IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmll
cyBpZiB0aGUgd2luZG93IGlzIHJlc2l6YWJsZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1
cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBpcyB0aGUgd2luZG93IHNob3VsZCBiZSByZXNpemFibGUsIEBjIEVJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxl
X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioK
KyAqIFF1ZXJpZXMgdGhlIHRoZSB3aW5kb3cgaXMgZnVsbHNjcmVlbgorICoKKyAqIEBwYXJhbSB3
aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB3aW5kb3cgc2hvdWxkIGJlIGZ1bGxzY3JlZW4sIEBjIEVJ
TkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVy
ZXNfZnVsbHNjcmVlbl9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1
cmVzKTsKKworLyoqCisgKiBHZXRzIGdlb21ldHJ5IHByb3BlcnRpZXMgb2YgYW4gRXdrX1dpbmRv
d19GZWF0dXJlcy4KKyAqCisgKiBQcm9wZXJ0aWVzIGFyZSByZXR1cm5lZCBpbiB0aGUgcmVzcGVj
dGl2ZSBwb2ludGVycy4gUGFzc2luZyBAYyBOVUxMIHRvIGFueSBvZgorICogdGhlc2UgcG9pbnRl
cnMgd2lsbCBjYXVzZSB0aGF0IHByb3BlcnR5IHRvIG5vdCBiZSByZXR1cm5lZC4KKyAqCisgKiBA
cGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSB3aW5kb3cncyBmZWF0dXJlcworICogQHBhcmFtIHgg
dGhlIHBvaW50ZXIgdG8gc3RvcmUgeCBwb3NpdGlvbgorICogQHBhcmFtIHkgdGhlIHBvaW50ZXIg
dG8gc3RvcmUgeSBwb3NpdGlvbgorICogQHBhcmFtIHcgdGhlIHBvaW50ZXIgdG8gc3RvcmUgd2lk
dGgKKyAqIEBwYXJhbSBoIHRoZSBwb2ludGVyIHRvIHN0b3JlIGhlaWdodAorICovCitFQVBJIHZv
aWQgZXdrX3dpbmRvd19mZWF0dXJlc19nZW9tZXRyeV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyAqd2luZG93X2ZlYXR1cmVzLCBFdmFzX0Nvb3JkICp4LCBFdmFzX0Nvb3JkICp5LCBFdmFz
X0Nvb3JkICp3LCBFdmFzX0Nvb3JkICpoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5k
aWYKKworI2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVyZXNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3By
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNmJmODkyMzJiMmRkZDY4NzgxNmI2MWI3Nzc5YzA0N2Y4NmNm
OTU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCisjZGVm
aW5lIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJFd2tWaWV3SW1w
bC5oIgorI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJXaW5kb3dG
ZWF0dXJlcy5oIgorI2luY2x1ZGUgImV3a19vYmplY3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworY2xhc3Mg
RXdrVmlld0ltcGw7CisKK2NsYXNzIEV3a1dpbmRvd0ZlYXR1cmVzIDogcHVibGljIEV3a09iamVj
dCB7CitwdWJsaWM6CisgICAgRVdLX09CSkVDVF9ERUNMQVJFKEV3a1dpbmRvd0ZlYXR1cmVzKQor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGNyZWF0ZShXZWJLaXQ6
OkltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0lt
cGwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a1dpbmRvd0ZlYXR1cmVz
KHdpbmRvd0ZlYXR1cmVzLCB2aWV3SW1wbCkpOworICAgIH0KKworICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VvbWV0cnk7IH0KKyAgICB2b2lkIHNl
dEdlb21ldHJ5KFdlYkNvcmU6OkZsb2F0UmVjdCYgZ2VvbWV0cnkpIHsgbV9nZW9tZXRyeSA9IGdl
b21ldHJ5OyB9CisKKyAgICBib29sIHRvb2xiYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90
b29sYmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0VG9vbGJhclZpc2libGUoYm9vbCB0b29sYmFy
VmlzaWJsZSk7CisKKyAgICBib29sIHN0YXR1c0JhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXR1c0JhclZpc2libGU7IH0KKyAgICB2b2lkIHNldFN0YXR1c0JhclZpc2libGUoYm9vbCBz
dGF0dXNCYXJWaXNpYmxlKTsKKworICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGJhcnNWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxiYXJzVmlz
aWJsZShib29sIHNjcm9sbGJhcnNWaXNpYmxlKSB7IG1fc2Nyb2xsYmFyc1Zpc2libGUgPSBzY3Jv
bGxiYXJzVmlzaWJsZTsgfQorCisgICAgYm9vbCBtZW51QmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVudUJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldE1lbnVCYXJWaXNpYmxlKGJvb2wg
bWVudUJhclZpc2libGUpOworCisgICAgYm9vbCBsb2NhdGlvbkJhclZpc2libGUoKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uQmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0TG9jYXRpb25CYXJW
aXNpYmxlKGJvb2wgbG9jYXRpb25CYXJWaXNpYmxlKSB7IG1fbG9jYXRpb25CYXJWaXNpYmxlID0g
bG9jYXRpb25CYXJWaXNpYmxlOyB9CisKKyAgICBib29sIHJlc2l6YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzaXphYmxlOyB9CisgICAgdm9pZCBzZXRSZXNpemFibGUoYm9vbCByZXNpemFibGUp
OworCisgICAgYm9vbCBmdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsU2NyZWVuOyB9
CisgICAgdm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wgZnVsbFNjcmVlbikgeyBtX2Z1bGxTY3JlZW4g
PSBmdWxsU2NyZWVuOyB9CisKK3ByaXZhdGU6CisgICAgRXdrV2luZG93RmVhdHVyZXMoV2ViS2l0
OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJ
bXBsKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgIHN0YXRp
YyBUMSBnZXRXaW5kb3dGZWF0dXJlVmFsdWUoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3
aW5kb3dGZWF0dXJlcywgY29uc3QgU3RyaW5nJiBmZWF0dXJlTmFtZSk7CisKKyAgICBFd2tWaWV3
SW1wbCogbV92aWV3SW1wbDsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2dlb21ldHJ5Owor
ICAgIGJvb2wgbV90b29sYmFyVmlzaWJsZTsKKyAgICBib29sIG1fc3RhdHVzQmFyVmlzaWJsZTsK
KyAgICBib29sIG1fc2Nyb2xsYmFyc1Zpc2libGU7CisgICAgYm9vbCBtX21lbnVCYXJWaXNpYmxl
OworICAgIGJvb2wgbV9sb2NhdGlvbkJhclZpc2libGU7CisgICAgYm9vbCBtX3Jlc2l6YWJsZTsK
KyAgICBib29sIG1fZnVsbFNjcmVlbjsKK307CisKKyNlbmRpZiAvLyBld2tfd2luZG93X2ZlYXR1
cmVzX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lZTUwMzEzNDY2MDZjN2QzYjJjMGRhMGNiZjg0ZGRhYzljZDcwNzEzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9l
d2syX3dpbmRvd19mZWF0dXJlcy5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29y
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRlc3Q7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVEZWZhdWx0V2luZG93KEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93
RmVhdHVyZXMpCit7CisgICAgLy8gZGVmYXVsdCB2YWx1ZXMgb2YgV2ViQ29yZTpXaW5kb3dGZWF0
dXJlcygpCisgICAgLy8gLSBtZW51QmFyVmlzaWJsZSh0cnVlKQorICAgIC8vIC0gc3RhdHVzQmFy
VmlzaWJsZSh0cnVlKQorICAgIC8vIC0gdG9vbEJhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIGxv
Y2F0aW9uQmFyVmlzaWJsZSh0cnVlKQorICAgIC8vIC0gc2Nyb2xsYmFyc1Zpc2libGUodHJ1ZSkK
KyAgICAvLyAtIHJlc2l6YWJsZSh0cnVlKQorICAgIC8vIC0gZnVsbHNjcmVlbihmYWxzZSkKKwor
ICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNpYmxlX2dldCh3
aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfc3Rh
dHVzYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdr
X3dpbmRvd19mZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7
CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0
KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19s
b2NhdGlvbmJhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVF
KGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworCisg
ICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfZnVsbHNjcmVlbl9nZXQod2luZG93
RmVhdHVyZXMpKTsKKworICAgIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV3a193aW5k
b3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd0ZlYXR1cmVzLCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCk7CisKKyAgICBFWFBFQ1RfRVEoMCwgeCk7CisgICAgRVhQRUNUX0VRKDAsIHkpOwor
ICAgIEVYUEVDVF9FUSgwLCB3aWR0aCk7CisgICAgRVhQRUNUX0VRKDAsIGhlaWdodCk7CisKKyAg
ICByZXR1cm4gMDsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a193aW5kb3dfZmVh
dHVyZXNfZGVmYXVsdF9wcm9wZXJ0eV9nZXQpCit7CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSB3
ZWJWaWV3KCk7CisKKyAgICBjb25zdCBjaGFyIHdpbmRvd0hUTUxbXSA9ICI8aHRtbD48Ym9keSBv
bkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycpO1wiPjwvYm9keT48L2h0bWw+IjsKKworICAgIGV3
a1ZpZXdDbGFzcygpLT53aW5kb3dfY3JlYXRlID0gY3JlYXRlRGVmYXVsdFdpbmRvdzsKKworICAg
IGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQodmlldywgd2luZG93SFRNTCwgMCwgMCk7CisgICAg
QVNTRVJUX1RSVUUod2FpdFVudGlsTG9hZEZpbmlzaGVkKCkpOworfQorCitzdGF0aWMgRXZhc19P
YmplY3QqIGNyZWF0ZVdpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0
IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd0ZlYXR1cmVzKQoreworICAgIEVYUEVDVF9GQUxT
RShld2tfd2luZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMp
KTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxl
X2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVy
ZXNfc2Nyb2xsYmFyc192aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9G
QUxTRShld2tfd2luZG93X2ZlYXR1cmVzX21lbnViYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVy
ZXMpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19sb2NhdGlvbmJhcl92
aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3df
ZmVhdHVyZXNfcmVzaXphYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9GQUxT
RShld2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisK
KyAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKKyAgICBld2tfd2luZG93X2ZlYXR1cmVzX2dl
b21ldHJ5X2dldCh3aW5kb3dGZWF0dXJlcywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisg
ICAgRVhQRUNUX0VRKDEwMCwgeCk7CisgICAgRVhQRUNUX0VRKDE1MCwgeSk7CisgICAgRVhQRUNU
X0VRKDQwMCwgd2lkdGgpOworICAgIEVYUEVDVF9FUSg0MDAsIGhlaWdodCk7CisKKyAgICByZXR1
cm4gMDsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a193aW5kb3dfZmVhdHVyZXNf
cHJvcGVydHlfZ2V0KQoreworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworCisg
ICAgY29uc3QgY2hhciB3aW5kb3dIVE1MW10gPSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93
Lm9wZW4oJycsICcnLCAnbGVmdD0xMDAsdG9wPTE1MCx3aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2Nh
dGlvbj1ubyxtZW51YmFyPW5vLHN0YXR1cz15ZXMsdG9vbGJhcj1ubyxzY3JvbGxiYXJzPXllcyxy
ZXNpemFibGU9eWVzLGZ1bGxzY3JlZW49bm8nKTtcIj48L2JvZHk+PC9odG1sPiI7CisKKyAgICBl
d2tWaWV3Q2xhc3MoKS0+d2luZG93X2NyZWF0ZSA9IGNyZWF0ZVdpbmRvdzsKKworICAgIGV3a192
aWV3X2h0bWxfc3RyaW5nX2xvYWQodmlldywgd2luZG93SFRNTCwgMCwgMCk7CisgICAgQVNTRVJU
X1RSVUUod2FpdFVudGlsTG9hZEZpbmlzaGVkKCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCmluZGV4IDJiNzUwNzEwZjlkZTRhN2Nl
NGY4OWVkMDc2OWY2ZTU3NDUxODg1NTkuLmYwYTdiNGJmMWEwYWY0YmU2NDNmN2FkMDRiMmFjYThk
Nzc0NTQxODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJ
Q2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNs
aWVudEVmbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXS0V2ZW50LmgiCiAjaW5j
bHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJld2tfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcHJp
dmF0ZS5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CiAKQEAgLTQ5LDkg
KzUwLDkgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OmNsb3NlUGFnZShXS1BhZ2VSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiAgICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1f
dmlld0ltcGwtPmNsb3NlUGFnZSgpOwogfQogCi1XS1BhZ2VSZWYgUGFnZVVJQ2xpZW50RWZsOjpj
cmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYg
d2luZG93RmVhdHVyZXMsIFdLRXZlbnRNb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK1dLUGFnZVJlZiBQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZU5l
d1BhZ2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVlc3RSZWYsIFdLRGljdGlvbmFyeVJlZiB3a1dpbmRv
d0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24sIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCiB7Ci0gICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQYWdlKHdpbmRvd0ZlYXR1cmVzKTsKKyAgICByZXR1
cm4gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPmNyZWF0ZU5ld1Bh
Z2UodG9JbXBsKHdrV2luZG93RmVhdHVyZXMpKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6
OnJ1bkphdmFTY3JpcHRBbGVydChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIGFsZXJ0VGV4dCwgV0tG
cmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTcwLDYgKzcxLDYyIEBAIFdLU3Ry
aW5nUmVmIFBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdFByb21wdChXS1BhZ2VSZWYsIFdL
U3RyaW5nUmVmIG1lc3NhZ2UsCiAgICAgcmV0dXJuIHZhbHVlID8gV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcodmFsdWUpIDogMDsKIH0KIAorYm9vbCBQYWdlVUlDbGllbnRFZmw6OnRvb2xi
YXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
RXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5m
byktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsK
KyAgICByZXR1cm4gZmVhdHVyZXMtPnRvb2xiYXJWaXNpYmxlKCk7Cit9CisKK3ZvaWQgUGFnZVVJ
Q2xpZW50RWZsOjpzZXRUb29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBib29sIHRvb2xiYXJW
aXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVz
KiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53
aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisgICAgZmVhdHVyZXMtPnNl
dFRvb2xiYXJWaXNpYmxlKHRvb2xiYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRF
Zmw6Om1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNs
aWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0
dXJlcyk7CisgICAgcmV0dXJuIGZlYXR1cmVzLT5tZW51QmFyVmlzaWJsZSgpOworfQorCit2b2lk
IFBhZ2VVSUNsaWVudEVmbDo6c2V0TWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgbWVu
dUJhclZpc2libGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVh
dHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0lt
cGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICBmZWF0dXJl
cy0+c2V0TWVudUJhclZpc2libGUobWVudUJhclZpc2libGUpOworfQorCitib29sIFBhZ2VVSUNs
aWVudEVmbDo6c3RhdHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVu
dEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NF
UlQoZmVhdHVyZXMpOworICAgIHJldHVybiBmZWF0dXJlcy0+c3RhdHVzQmFyVmlzaWJsZSgpOwor
fQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKFdLUGFnZVJl
ZiwgYm9vbCBzdGF0dXNCYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7
CisgICAgZmVhdHVyZXMtPnNldFN0YXR1c0JhclZpc2libGUoc3RhdHVzQmFyVmlzaWJsZSk7Cit9
CisKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjppc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9Q
YWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7
CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4gZmVhdHVyZXMtPnJlc2l6YWJsZSgp
OworfQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0SXNSZXNpemFibGUoV0tQYWdlUmVmLCBi
b29sIHJlc2l6YWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dG
ZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3
SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIGZlYXR1
cmVzLT5zZXRSZXNpemFibGUocmVzaXphYmxlKTsKK30KKwogI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0NPTE9SKQogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnNob3dDb2xvclBpY2tlcihXS1BhZ2VSZWYs
IFdLU3RyaW5nUmVmIGluaXRpYWxDb2xvciwgV0tDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyUmVm
IGxpc3RlbmVyLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewpAQCAtMTQxLDYgKzE5OCwxNCBA
QCBQYWdlVUlDbGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbChFd2tWaWV3SW1wbCogdmlld0ltcGwp
CiAgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdEFsZXJ0ID0gcnVuSmF2YVNjcmlwdEFsZXJ0Owog
ICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRDb25maXJtID0gcnVuSmF2YVNjcmlwdENvbmZpcm07
CiAgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdFByb21wdCA9IHJ1bkphdmFTY3JpcHRQcm9tcHQ7
CisgICAgdWlDbGllbnQudG9vbGJhcnNBcmVWaXNpYmxlID0gdG9vbGJhcnNBcmVWaXNpYmxlOwor
ICAgIHVpQ2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSA9IHNldFRvb2xiYXJzQXJlVmlzaWJs
ZTsKKyAgICB1aUNsaWVudC5tZW51QmFySXNWaXNpYmxlID0gbWVudUJhcklzVmlzaWJsZTsKKyAg
ICB1aUNsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlID0gc2V0TWVudUJhcklzVmlzaWJsZTsKKyAg
ICB1aUNsaWVudC5zdGF0dXNCYXJJc1Zpc2libGUgPSBzdGF0dXNCYXJJc1Zpc2libGU7CisgICAg
dWlDbGllbnQuc2V0U3RhdHVzQmFySXNWaXNpYmxlID0gc2V0U3RhdHVzQmFySXNWaXNpYmxlOwor
ICAgIHVpQ2xpZW50LmlzUmVzaXphYmxlID0gaXNSZXNpemFibGU7CisgICAgdWlDbGllbnQuc2V0
SXNSZXNpemFibGUgPSBzZXRJc1Jlc2l6YWJsZTsKICAgICB1aUNsaWVudC50YWtlRm9jdXMgPSB0
YWtlRm9jdXM7CiAgICAgdWlDbGllbnQuZm9jdXMgPSBmb2N1czsKICAgICB1aUNsaWVudC51bmZv
Y3VzID0gdW5mb2N1czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVVJQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNs
aWVudEVmbC5oCmluZGV4IDJmNTQxOTJhMmFlMGZiNzAzOWUxMmJjOTE0YjY3OGM4MzY3ZjgxNmIu
LmU2ODQxNGFjZmI3NDg4YTNlYjk3ZmZiNDhlNzg0ZTAxMDEwNWFhYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaApAQCAtNTAsNiArNTAsMTQg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVm
LCBXS1N0cmluZ1JlZiwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBib29s
IHJ1bkphdmFTY3JpcHRDb25maXJtKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYs
IGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgV0tTdHJpbmdSZWYgcnVuSmF2YVNjcmlwdFByb21w
dChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS1N0cmluZ1JlZiwgV0tGcmFtZVJlZiwgY29uc3Qg
dm9pZCopOworICAgIHN0YXRpYyBib29sIHRvb2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldFRvb2xiYXJzQXJlVmlz
aWJsZShXS1BhZ2VSZWYsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyBib29sIG1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgc3RhdHVzQmFySXNWaXNp
YmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQg
c2V0U3RhdHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbyk7CisgICAgc3RhdGljIGJvb2wgaXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJc1Jlc2l6YWJsZShXS1BhZ2VSZWYs
IGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NP
TE9SKQogICAgIHN0YXRpYyB2b2lkIHNob3dDb2xvclBpY2tlcihXS1BhZ2VSZWYsIFdLU3RyaW5n
UmVmIGluaXRpYWxDb2xvciwgV0tDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyUmVmLCBjb25zdCB2
b2lkKik7CiAgICAgc3RhdGljIHZvaWQgaGlkZUNvbG9yUGlja2VyKFdLUGFnZVJlZiwgY29uc3Qg
dm9pZCopOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDQwZjI3ODQ4MzM3MWViMzZjMDcxNjY3NjA0NzA3ODViMjU3NzYwMTMuLjlkYTI2MmY1ODQz
OWVlNTE0ZDA3MGRlYjdkOWZkYzE1NmVjZTMwOTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMS0xOSAgSmlu
d29vIFNvbmcgIDxqaW53b283LnNvbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0sy
XSBBZGQgRXdrX1dpbmRvd19GZWF0dXJlcyBBUEkgYW5kIHJlbGF0ZWQgVUkgY2FsbGJhY2tzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVk
IHdpbmRvd19jcmVhdGUgYW5kIHdpbmRvd19jbG9zZSBzbWFydGNhbGxiYWNrIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIE1pbmlCcm93c2VyL2VmbC9tYWluLmM6CisgICAgICAgIChvbl93aW5kb3df
Y3JlYXRlKToKKyAgICAgICAgKG9uX3dpbmRvd19jbG9zZSk6CisgICAgICAgICh3aW5kb3dfY3Jl
YXRlKToKKwogMjAxMi0xMS0xOCAgS3l1bmdUYWUgS2ltICA8a3RmLmtpbUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBbRUZMXSBOb3QgdG8gaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIiBpbiBU
b29scwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01p
bmlCcm93c2VyL2VmbC9tYWluLmMKaW5kZXggOTJkM2YyZmY5ZjNlNDI2Y2E1YTg5NzEzMTBhMzg0
NTY2YTA0Yzg3ZC4uMTFmMDY1YzM0NGQ5ZTFjMjhiMjU0NGI2ZjFkZTZjMmVkMTRhYTdjZCAxMDA2
NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYworKysgYi9Ub29scy9NaW5pQnJv
d3Nlci9lZmwvbWFpbi5jCkBAIC0yODQsMjAgKzI4NCw2IEBAIG9uX2JhY2tfZm9yd2FyZF9saXN0
X2NoYW5nZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2
ZW50CiAgICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwg
IWV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoZXdrX3ZpZXcpKTsKIH0KIAotc3RhdGljIEV2YXNf
T2JqZWN0Kgotb25fbmV3X3dpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRXZhc19Db29y
ZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCi17Ci0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRv
dyA9IHdpbmRvd19jcmVhdGUoTlVMTCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgd2luZG93cyA9IGVp
bmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKLSAgICByZXR1cm4gd2luZG93LT5ld2tf
dmlldzsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2Nsb3NlX3dpbmRvdyh2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgICB3aW5kb3df
Y2xvc2UoKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhKTsKLX0KLQogc3RhdGljIHZvaWQKIG9u
X3Byb2dyZXNzKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpl
dmVudF9pbmZvKQogewpAQCAtNzYzLDYgKzc0OSwzOSBAQCBzdGF0aWMgRWluYV9Cb29sIG9uX2Z1
bGxzY3JlZW5fZXhpdChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCitzdGF0aWMgRXZhc19PYmplY3QgKgorb25fd2luZG93X2NyZWF0ZShFd2tfVmll
d19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRv
d19mZWF0dXJlcykKK3sKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOworICAgIGludCB3
aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisKKyAgICBld2tfd2luZG93X2ZlYXR1cmVz
X2dlb21ldHJ5X2dldCh3aW5kb3dfZmVhdHVyZXMsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsK
KworICAgIGlmICghd2lkdGgpCisgICAgICAgIHdpZHRoID0gd2luZG93X3dpZHRoOworCisgICAg
aWYgKCFoZWlnaHQpCisgICAgICAgIGhlaWdodCA9IHdpbmRvd19oZWlnaHQ7CisKKyAgICBCcm93
c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBFdmFzX09iamVjdCAqbmV3X3ZpZXcgPSB3aW5kb3ctPmV3a192aWV3OworCisgICAgd2lu
ZG93cyA9IGVpbmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKKworICAgIGluZm8oIm1p
bmlicm93c2VyOiBsb2NhdGlvbiglZCwlZCkgc2l6ZT0oJWQsJWQpXG4iLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKKworICAgIHJldHVybiBuZXdfdmlldzsKK30KKworc3RhdGljIHZvaWQKK29uX3dp
bmRvd19jbG9zZShFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEpCit7CisgICAgQnJvd3Nl
cl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc21hcnREYXRhLT5z
ZWxmKTsKKyAgICB3aW5kb3dfY2xvc2Uod2luZG93KTsKK30KKwogc3RhdGljIHZvaWQKIGF1dGhf
cG9wdXBfY2xvc2UoQXV0aF9EYXRhICphdXRoX2RhdGEpCiB7CkBAIC0xMDMwLDcgKzEwNDksOCBA
QCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3QgY2hhciAqdXJsLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZXdrVmlld0NsYXNzLT53aW5kb3dfZ2VvbWV0cnlf
c2V0ID0gb25fd2luZG93X2dlb21ldHJ5X3NldDsKICAgICBld2tWaWV3Q2xhc3MtPmZ1bGxzY3Jl
ZW5fZW50ZXIgPSBvbl9mdWxsc2NyZWVuX2VudGVyOwogICAgIGV3a1ZpZXdDbGFzcy0+ZnVsbHNj
cmVlbl9leGl0ID0gb25fZnVsbHNjcmVlbl9leGl0OwotICAgIGV3a1ZpZXdDbGFzcy0+d2luZG93
X2NyZWF0ZV9uZXcgPSBvbl9uZXdfd2luZG93OworICAgIGV3a1ZpZXdDbGFzcy0+d2luZG93X2Ny
ZWF0ZSA9IG9uX3dpbmRvd19jcmVhdGU7CisgICAgZXdrVmlld0NsYXNzLT53aW5kb3dfY2xvc2Ug
PSBvbl93aW5kb3dfY2xvc2U7CiAKICAgICBFdmFzICpldmFzID0gZXZhc19vYmplY3RfZXZhc19n
ZXQod2luZG93LT5lbG1fd2luZG93KTsKICAgICBFdmFzX1NtYXJ0ICpzbWFydCA9IGV2YXNfc21h
cnRfY2xhc3NfbmV3KCZld2tWaWV3Q2xhc3MtPnNjKTsKQEAgLTEwNDcsNyArMTA2Nyw2IEBAIHN0
YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0ZShjb25zdCBjaGFyICp1cmwsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKICAgICBld2tfc2V0dGluZ3NfcHJlZmVycmVkX21pbmltdW1fY29u
dGVudHNfd2lkdGhfc2V0KHNldHRpbmdzLCAwKTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiYXV0aGVudGljYXRpb24scmVxdWVzdCIsIG9u
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QsIHdpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJjbG9zZSx3aW5kb3ciLCBvbl9jbG9zZV93
aW5kb3csIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRv
dy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxmYWlsZWQiLCBvbl9kb3dubG9hZF9mYWlsZWQsIHdpbmRv
dyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcs
ICJkb3dubG9hZCxmaW5pc2hlZCIsIG9uX2Rvd25sb2FkX2ZpbmlzaGVkLCB3aW5kb3cpOwogICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxv
YWQscmVxdWVzdCIsIG9uX2Rvd25sb2FkX3JlcXVlc3QsIHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174975</attachid>
            <date>2012-11-19 07:09:40 -0800</date>
            <delta_ts>2012-11-19 09:36:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121120000724.patch</filename>
            <type>text/plain</type>
            <size>45147</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzc0MGQ0NzgzYzlhZWQ1
MDBiZDMyYWQ1NjY4MDJhMGVkZjEwMjU5Mi4uN2JhZDE4MjBmY2I3ZjFlZWRkOTc5MzY4YjhkODkz
OTMwZWYxMDhmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTE5ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IHZhbHVlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxiYWNrcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwOgorICAgICAgICAoRXdrVmll
d0ltcGw6OndpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQ
YWdlKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmg6CisgICAgICAgIChFd2tWaWV3SW1wbCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVm
bDo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dG9v
bGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
VUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGll
bnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZs
OjpQYWdlVUlDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmg6CisgICAgICAgIChQYWdlVUlDbGllbnRFZmwpOgorCiAyMDEyLTExLTE5ICBCYWxhenMg
S2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
Zml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiYjg3NDdiMWNiMWY1ODM4YzJkZDdj
Y2RkZjc4MjkxMWVhNjdjMWU1Li42NzlhNmE1N2I0YzNhYTJiYWVkZGUzZjJlZTJmOWEyMzhkZTFl
ZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNzMsNiArNzMsNyBAQCBMSVNUKEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3Bv
bnNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKIAogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5n
U3RvcmVDYWlyby5jcHAKIApAQCAtMjc5LDYgKzI4MCw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVS
UwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3VybF9yZXNwb25zZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCIKKyAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVy
ZXMuaCIKICkKIAogSU5TVEFMTChGSUxFUyAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDIvZWZs
L2V3ZWJraXQyLnBjIERFU1RJTkFUSU9OIGxpYi9wa2djb25maWcpCkBAIC0zNzYsNiArMzc4LDcg
QEAgU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJRVMKICAgICB0ZXN0X2V3azJfc3RvcmFnZV9tYW5h
Z2VyCiAgICAgdGVzdF9ld2syX3RleHRfY2hlY2tlcgogICAgIHRlc3RfZXdrMl92aWV3CisgICAg
dGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcwogKQogCiBJRiAoRU5BQkxFX0FQSV9URVNUUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IDA3Y2ExMjkz
NTBmNGVkYjdlM2RiNGJmOTJhZDcwYjhjM2EyMDljZTQuLmFkYWFlMWVjZGU1MDY3OWM5OTVjYzk1
YmViN2QxOWExMTg2MGU1NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaApAQCAtNTgsNSArNTgsNiBAQAogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2Uu
aCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3Zp
ZXcuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCiAKICNlbmRpZiAvLyBFV2Vi
S2l0Ml9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
Q2FsbGJhY2tzLmgKaW5kZXggYjQxN2I3Y2NjMzVmMmJkY2M0NjVkYjI4MmUyY2IxMjU0ODBhOGUw
MC4uNDE0MGM3NDJiYzg1ZDkwNzk5MGY1Yzk2NTUyYTRkZTM4ZGRkZTVlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApAQCAt
NTcsOCArNTcsNiBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgQXV0aGVudGljYXRpb25SZXF1
ZXN0LAogICAgIEJhY2tGb3J3YXJkTGlzdENoYW5nZSwKICAgICBDYW5jZWxWaWJyYXRpb24sCi0g
ICAgQ2xvc2VXaW5kb3csCi0gICAgQ3JlYXRlV2luZG93LAogICAgIERvd25sb2FkSm9iQ2FuY2Vs
bGVkLAogICAgIERvd25sb2FkSm9iRmFpbGVkLAogICAgIERvd25sb2FkSm9iRmluaXNoZWQsCkBA
IC02OSw2ICs2Nyw3IEBAIGVudW0gQ2FsbGJhY2tUeXBlIHsKICAgICBMb2FkRXJyb3IsCiAgICAg
TG9hZEZpbmlzaGVkLAogICAgIExvYWRQcm9ncmVzcywKKyAgICBNZW51QmFyVmlzaWJsZSwKICAg
ICBQcm92aXNpb25hbExvYWRGYWlsZWQsCiAgICAgUHJvdmlzaW9uYWxMb2FkUmVkaXJlY3QsCiAg
ICAgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwKQEAgLTc3LDE1ICs3NiwxOCBAQCBlbnVtIENhbGxi
YWNrVHlwZSB7CiAgICAgUmVzb3VyY2VMb2FkRmFpbGVkLAogICAgIFJlc291cmNlTG9hZEZpbmlz
aGVkLAogICAgIFJlc291cmNlUmVxdWVzdFNlbnQsCisgICAgU3RhdHVzQmFyVmlzaWJsZSwKICAg
ICBOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24sCiAgICAgTmV3V2luZG93UG9saWN5RGVjaXNpb24s
CiAgICAgVGV4dEZvdW5kLAogICAgIFRpdGxlQ2hhbmdlLAorICAgIFRvb2xiYXJWaXNpYmxlLAog
ICAgIFRvb2x0aXBUZXh0VW5zZXQsCiAgICAgVG9vbHRpcFRleHRTZXQsCiAgICAgVVJMQ2hhbmdl
ZCwKICAgICBWaWJyYXRlLAogICAgIFdlYlByb2Nlc3NDcmFzaGVkLAorICAgIFdpbmRvd1Jlc2l6
YWJsZSwKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiAgICAgSW50ZW50UmVxdWVzdCwKICNlbmRp
ZgpAQCAtMTY0LDggKzE2Niw2IEBAIHN0cnVjdCBDYWxsQmFja0luZm88Y2FsbGJhY2tUeXBlPiB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhB
dXRoZW50aWNhdGlvblJlcXVlc3QsICJhdXRoZW50aWNhdGlvbixyZXF1ZXN0IiwgRXdrX0F1dGhf
UmVxdWVzdCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEJhY2tGb3J3YXJkTGlzdENoYW5n
ZSwgImJhY2ssZm9yd2FyZCxsaXN0LGNoYW5nZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soQ2FuY2VsVmlicmF0aW9uLCAiY2FuY2VsLHZpYnJhdGlvbiIsIHZvaWQpOwotREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhDbG9zZVdpbmRvdywgImNsb3NlLHdpbmRvdyIsIHZvaWQp
OwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhDcmVhdGVXaW5kb3csICJjcmVhdGUsd2luZG93
IiwgRXZhc19PYmplY3QqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JD
YW5jZWxsZWQsICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxvYWRfSm9iKTsKIERFQ0xB
UkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JGYWlsZWQsICJkb3dubG9hZCxmYWlsZWQi
LCBFd2tfRG93bmxvYWRfSm9iX0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93
bmxvYWRKb2JGaW5pc2hlZCwgImRvd25sb2FkLGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkX0pvYik7
CkBAIC0xNzksNiArMTc5LDcgQEAgREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jl
c3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
UHJvdmlzaW9uYWxMb2FkRmFpbGVkLCAibG9hZCxwcm92aXNpb25hbCxmYWlsZWQiLCBFd2tfRXJy
b3IpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhQcm92aXNpb25hbExvYWRSZWRpcmVjdCwg
ImxvYWQscHJvdmlzaW9uYWwscmVkaXJlY3QiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwgImxvYWQscHJvdmlzaW9uYWwsc3RhcnRlZCIs
IHZvaWQpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhNZW51QmFyVmlzaWJsZSwgIm1lbnVi
YXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhOYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24sICJwb2xpY3ksZGVjaXNpb24sbmF2aWdhdGlvbiIsIEV3a19OYXZpZ2F0
aW9uX1BvbGljeV9EZWNpc2lvbik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKE5ld1dpbmRv
d1BvbGljeURlY2lzaW9uLCAicG9saWN5LGRlY2lzaW9uLG5ldyx3aW5kb3ciLCBFd2tfTmF2aWdh
dGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJj
ZUxvYWRTdGFydGVkLCAicmVzb3VyY2UscmVxdWVzdCxuZXciLCBFd2tfUmVzb3VyY2VfUmVxdWVz
dCk7CkBAIC0xODYsMTMgKzE4NywxNiBAQCBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291
cmNlTG9hZFJlc3BvbnNlLCAicmVzb3VyY2UscmVxdWVzdCxyZXNwb25zZSIsIEV3awogREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhSZXNvdXJjZUxvYWRGYWlsZWQsICJyZXNvdXJjZSxyZXF1ZXN0
LGZhaWxlZCIsIEV3a19SZXNvdXJjZV9Mb2FkX0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soUmVzb3VyY2VMb2FkRmluaXNoZWQsICJyZXNvdXJjZSxyZXF1ZXN0LGZpbmlzaGVkIiwg
RXdrX1Jlc291cmNlKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VSZXF1ZXN0
U2VudCwgInJlc291cmNlLHJlcXVlc3Qsc2VudCIsIEV3a19SZXNvdXJjZV9SZXF1ZXN0KTsKK0RF
Q0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soU3RhdHVzQmFyVmlzaWJsZSwgInN0YXR1c2Jhcix2aXNp
YmxlIiwgYm9vbCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRleHRGb3VuZCwgInRleHQs
Zm91bmQiLCB1bnNpZ25lZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRpdGxlQ2hhbmdl
LCAidGl0bGUsY2hhbmdlZCIsIGNoYXIpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29s
YmFyVmlzaWJsZSwgInRvb2xiYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhUb29sdGlwVGV4dFVuc2V0LCAidG9vbHRpcCx0ZXh0LHVuc2V0Iiwgdm9pZCk7CiBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFRvb2x0aXBUZXh0U2V0LCAidG9vbHRpcCx0ZXh0LHNl
dCIsIGNoYXIpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhVUkxDaGFuZ2VkLCAidXJsLGNo
YW5nZWQiLCBjaGFyKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVmlicmF0ZSwgInZpYnJh
dGUiLCB1aW50NjRfdCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFdlYlByb2Nlc3NDcmFz
aGVkLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgYm9vbCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExC
QUNLKFdpbmRvd1Jlc2l6YWJsZSwgIndpbmRvdyxyZXNpemFibGUiLCBib29sKTsKICNpZiBFTkFC
TEUoV0VCX0lOVEVOVFMpCiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEludGVudFJlcXVlc3Qs
ICJpbnRlbnQscmVxdWVzdCxuZXciLCBFd2tfSW50ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmluZGV4IGFjYTJkNGRl
ZTFhYWYyYjgzZDY0YTBjYzhmODQ3MTgzZDRmNzc5MDIuLjI0YTc3N2UwNjMxZGQzNzQ2ZjU3YmNh
YjlmNzNlNTc3ZGEyMjY1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3SW1wbC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJld2tfc2V0
dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3Zp
ZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgog
I2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8
RWRqZS5oPgpAQCAtODMyLDM3ICs4MzMsNDUgQEAgdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJM
Q2hhbmdlKCkKICAgICBpbmZvcm1JY29uQ2hhbmdlKCk7CiB9CiAKLVdLUGFnZVJlZiBFd2tWaWV3
SW1wbDo6Y3JlYXRlTmV3UGFnZShXS0RpY3Rpb25hcnlSZWYgd2luZG93RmVhdHVyZXMpCitFd2tX
aW5kb3dGZWF0dXJlcyogRXdrVmlld0ltcGw6OndpbmRvd0ZlYXR1cmVzKCkKIHsKLSAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFTU0VSVChzZC0+YXBpKTsK
KyAgICBpZiAoIW1fd2luZG93RmVhdHVyZXMpCisgICAgICAgIG1fd2luZG93RmVhdHVyZXMgPSBF
d2tXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKDAsIHRoaXMpOwogCi0gICAgRXZhc19PYmplY3QqIG5l
d0V3a1ZpZXcgPSAwOwotCi0gICAgLy8gRXh0cmFjdCB0aGUgd2lkdGggYW5kIGhlaWdodCBmcm9t
IHRoZSB3aW5kb3cgYXR0cmlidXRlcyBhbmQgcGFzcyB0aGVtIGFsb25nIHRvIHRoZSBlbWJlZGRl
ci4KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhTdHIoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBoZWlnaHRTdHIoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImhlaWdodCIpKTsKKyAgICByZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQoKTsKK30KIAotICAg
IFdLVHlwZVJlZiByZWYgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdpbmRvd0ZlYXR1cmVz
LCB3aWR0aFN0ci5nZXQoKSk7Ci0gICAgdW5zaWduZWQgd2lkdGggPSByZWYgPyBXS0RvdWJsZUdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7Ci0gICAgcmVmID0gV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3aW5kb3dGZWF0dXJlcywgaGVpZ2h0U3RyLmdldCgpKTsK
LSAgICB1bnNpZ25lZCBoZWlnaHQgPSByZWYgPyBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0
PFdLRG91YmxlUmVmPihyZWYpKSA6IDA7CitXS1BhZ2VSZWYgRXdrVmlld0ltcGw6OmNyZWF0ZU5l
d1BhZ2UoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpCit7CisgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CiAK
LSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGVfbmV3KQorICAgIGlmICghc2QtPmFwaS0+
d2luZG93X2NyZWF0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIShuZXdFd2tWaWV3
ID0gc2QtPmFwaS0+d2luZG93X2NyZWF0ZV9uZXcoc2QsIHdpZHRoLCBoZWlnaHQpKSkKKyAgICBS
ZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGV3a1dpbmRvd0ZlYXR1cmVzID0gRXdrV2luZG93RmVh
dHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcywgdGhpcyk7CisKKyAgICBFdmFzX09iamVjdCog
bmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGUoc2QsIGV3a1dpbmRvd0ZlYXR1cmVz
LmdldCgpKTsKKyAgICBpZiAoIW5ld0V3a1ZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
RXdrVmlld0ltcGwqIG5ld1ZpZXdJbXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KG5l
d0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKKyAgICBuZXdWaWV3SW1wbC0+
bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOworCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4obmV3Vmlld0ltcGwtPnBhZ2UoKSkpOwogfQogCiB2
b2lkIEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UoKQogewotICAgIHNtYXJ0Q2FsbGJhY2s8Q2xvc2VX
aW5kb3c+KCkuY2FsbCgpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRh
KCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xv
c2UpCisgICAgICAgIHJldHVybjsKKworICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CiB9
CiAKIHZvaWQgRXdrVmlld0ltcGw6Om9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFz
X09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3SW1wbC5oCmluZGV4IDI0Y2E0ZmRiYmM4MjlmY2RkOTlmMDE4Y2RlYzJj
YWI5NDBjOThjZDguLmRlYjhkY2QzZTMzNGY3NjE1MmViNGU4ZTQ0OTI1ZGY4MTY1MzAxMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApAQCAt
MjIsNiArMjIsNyBAQAogI2RlZmluZSBFd2tWaWV3SW1wbF9oCiAKICNpbmNsdWRlICJFd2tWaWV3
Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUg
IlJlZlB0ckVmbC5oIgogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUg
IldLR2VvbWV0cnkuaCIKQEAgLTc2LDYgKzc3LDcgQEAgY2xhc3MgRXdrQmFja0ZvcndhcmRMaXN0
OwogY2xhc3MgRXdrQ29sb3JQaWNrZXI7CiBjbGFzcyBFd2tQb3B1cE1lbnU7CiBjbGFzcyBFd2tT
ZXR0aW5nczsKK2NsYXNzIEV3a1dpbmRvd0ZlYXR1cmVzOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29udGV4dCBFdmFzX0dMX0Nv
bnRleHQ7CkBAIC0xMDIsNiArMTA0LDcgQEAgcHVibGljOgogICAgIEV3a0NvbnRleHQqIGV3a0Nv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBFd2tTZXR0aW5ncyogc2V0
dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgRXdrQmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsg
fQorICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcygpOwogCiAgICAgV2ViQ29y
ZTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdDsKQEAg
LTE1Niw3ICsxNTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNtaXNzQ29sb3JQaWNrZXIoKTsK
ICNlbmRpZgogCi0gICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV0tEaWN0aW9uYXJ5UmVmIHdp
bmRvd0ZlYXR1cmVzKTsKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXZWJLaXQ6OkltbXV0
YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzKTsKICAgICB2b2lkIGNsb3NlUGFnZSgpOwog
CiAgICAgdm9pZCByZXF1ZXN0UG9wdXBNZW51KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlFZmwq
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91Ymxl
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUG9wdXBJdGVtPiYgaXRl
bXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7CkBAIC0yNDQsNiArMjQ3LDcgQEAgcHJpdmF0ZToK
ICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogI2VuZGlmCiAgICAgT3du
UHRyPEV3a1NldHRpbmdzPiBtX3NldHRpbmdzOworICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJl
cz4gbV93aW5kb3dGZWF0dXJlczsKICAgICBjb25zdCB2b2lkKiBtX2N1cnNvcklkZW50aWZpZXI7
IC8vIFRoaXMgaXMgYW4gYWRkcmVzcywgZG8gbm90IGZyZWUgaXQuCiAgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIG1fZmF2aWNvblVSTDsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV91cmw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAppbmRleCA3NTAxNjExNzRi
OWE0NTdmZjJlZGU5ODg1MThiMGIzNDY3NzJiNTdmLi4zOTE3MGVlNmRjNTY5MmMxNjQ3Mzk0YzRk
ZDZmMmQxNjg2NTdmNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmgKQEAgLTMwLDggKzMwLDYgQEAKICAqICAgZXdrX2F1dGhfcmVxdWVzdF9yZWYoKSBv
biB0aGUgcmVxdWVzdCBvYmplY3QgdG8gcHJvY2VzcyB0aGUgYXV0aGVudGljYXRpb24gYXN5bmNo
cm9ub3VzbHkuCiAgKiAtICJiYWNrLGZvcndhcmQsbGlzdCxjaGFuZ2VkIiwgdm9pZDogcmVwb3J0
cyB0aGF0IHRoZSB2aWV3J3MgYmFjayAvIGZvcndhcmQgbGlzdCBoYWQgY2hhbmdlZC4KICAqIC0g
ImNhbmNlbCx2aWJyYXRpb24iLCB2b2lkOiByZXF1ZXN0IHRvIGNhbmNlbCB0aGUgdmlicmF0aW9u
LgotICogLSAiY2xvc2Usd2luZG93Iiwgdm9pZDogd2luZG93IGlzIGNsb3NlZC4KLSAqIC0gImNy
ZWF0ZSx3aW5kb3ciLCBFdmFzX09iamVjdCoqOiBhIG5ldyB3aW5kb3cgaXMgY3JlYXRlZC4KICAq
IC0gImRvd25sb2FkLGNhbmNlbGxlZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRoYXQg
YSBkb3dubG9hZCB3YXMgZWZmZWN0aXZlbHkgY2FuY2VsbGVkLgogICogLSAiZG93bmxvYWQsZmFp
bGVkIiwgRXdrX0Rvd25sb2FkX0pvYl9FcnJvcio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGZh
aWxlZCB3aXRoIHRoZSBnaXZlbiBlcnJvci4KICAqIC0gImRvd25sb2FkLGZpbmlzaGVkIiwgRXdr
X0Rvd25sb2FkX0pvYio6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNz
ZnVsbHkuCkBAIC05NCw2ICs5Miw3IEBACiAjaW5jbHVkZSAiZXdrX3RvdWNoLmgiCiAjaW5jbHVk
ZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgorI2lu
Y2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAKICNpZmRl
ZiBfX2NwbHVzcGx1cwpAQCAtMTQ4LDE2ICsxNDcsMTcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0
X0NsYXNzIHsKICAgICAvLyAgIC0gV2ViIGRhdGFiYXNlLgogICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyAoKmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29u
c3QgY2hhciAqZGF0YWJhc2VOYW1lLCBjb25zdCBjaGFyICpkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBsb25nIGN1cnJlbnRRdW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5V
c2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBs
b25nIGxvbmcgZXhwZWN0ZWRVc2FnZSk7CiAKLSAgICAvLyBuZXcgd2luZG93OgotICAgIC8vICAg
LSBDcmVhdGUgYSBuZXcgd2luZG93IHdpdGggc3BlY2lmaWVkIHNpemUKLSAgICBFdmFzX09iamVj
dCogKCp3aW5kb3dfY3JlYXRlX25ldykoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29v
cmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KTsKKyAgICAvLyB3aW5kb3cgY3JlYXRpb24gYW5k
IGNsb3Npbmc6CisgICAgLy8gICAtIENyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBzcGVjaWZpZWQg
ZmVhdHVyZXMgYW5kIGNsb3NlIHdpbmRvdy4KKyAgICBFdmFzX09iamVjdCAqKCp3aW5kb3dfY3Jl
YXRlKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAq
d2luZG93X2ZlYXR1cmVzKTsKKyAgICB2b2lkICgqd2luZG93X2Nsb3NlKShFd2tfVmlld19TbWFy
dF9EYXRhICpzZCk7CiB9OwogCiAvKioKICAqIFRoZSB2ZXJzaW9uIHlvdSBoYXZlIHRvIHB1dCBp
bnRvIHRoZSB2ZXJzaW9uIGZpZWxkCiAgKiBpbiB0aGUgQGEgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
c3RydWN0dXJlLgogICovCi0jZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gN1VM
CisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gOFVMCiAKIC8qKgogICogSW5p
dGlhbGl6ZXIgZm9yIHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KQEAgLTE2
OSw3ICsxNjksNyBAQCBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgewogICogQHNlZSBFV0tf
VklFV19TTUFSVF9DTEFTU19JTklUX1ZFUlNJT04KICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xB
U1NfSU5JVF9OQU1FX1ZFUlNJT04KICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19J
TklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9D
TEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwfQorI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUKHNt
YXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9DTEFTU19W
RVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwfQogCiAvKioKICAqIEluaXRpYWxpemVyIHRvIHplcm8gYSB3aG9sZSBF
d2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmVjYzY3ODUxODJlOWIxYjQ3ZDhlNDdiZDJiOGRmYzRkNWU1ODA2YTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVz
LmNwcApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgorCisjaW5jbHVkZSAi
V2ViTnVtYmVyLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgiCisj
aW5jbHVkZSA8RWluYS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tXaW5kb3dG
ZWF0dXJlczo6RXdrV2luZG93RmVhdHVyZXMoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVh
dHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmlld0ltcGwp
CisgICAgLCBtX2dlb21ldHJ5KDAsIDAsIDAsIDApCisgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHRy
dWUpCisgICAgLCBtX3N0YXR1c0JhclZpc2libGUodHJ1ZSkKKyAgICAsIG1fc2Nyb2xsYmFyc1Zp
c2libGUodHJ1ZSkKKyAgICAsIG1fbWVudUJhclZpc2libGUodHJ1ZSkKKyAgICAsIG1fbG9jYXRp
b25CYXJWaXNpYmxlKHRydWUpCisgICAgLCBtX3Jlc2l6YWJsZSh0cnVlKQorICAgICwgbV9mdWxs
U2NyZWVuKGZhbHNlKQoreworICAgIGlmICh3aW5kb3dGZWF0dXJlcykgeworICAgICAgICBtX2dl
b21ldHJ5LnNldFgoZ2V0V2luZG93RmVhdHVyZVZhbHVlPGRvdWJsZSwgV2ViRG91YmxlPih3aW5k
b3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJ4IikpKTsKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRZ
KGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRvdWJsZT4od2luZG93RmVhdHVyZXMs
IEFTQ0lJTGl0ZXJhbCgieSIpKSk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0V2lkdGgoZ2V0V2lu
ZG93RmVhdHVyZVZhbHVlPGRvdWJsZSwgV2ViRG91YmxlPih3aW5kb3dGZWF0dXJlcywgQVNDSUlM
aXRlcmFsKCJ3aWR0aCIpKSk7CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0SGVpZ2h0KGdldFdpbmRv
d0ZlYXR1cmVWYWx1ZTxkb3VibGUsIFdlYkRvdWJsZT4od2luZG93RmVhdHVyZXMsIEFTQ0lJTGl0
ZXJhbCgiaGVpZ2h0IikpKTsKKworICAgICAgICBtX3Rvb2xiYXJWaXNpYmxlID0gZ2V0V2luZG93
RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVy
YWwoInRvb2xCYXJWaXNpYmxlIikpOworICAgICAgICBtX3N0YXR1c0JhclZpc2libGUgPSBnZXRX
aW5kb3dGZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVhdHVyZXMsIEFTQ0lJ
TGl0ZXJhbCgic3RhdHVzQmFyVmlzaWJsZSIpKTsKKyAgICAgICAgbV9zY3JvbGxiYXJzVmlzaWJs
ZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dGZWF0dXJl
cywgQVNDSUlMaXRlcmFsKCJzY3JvbGxiYXJzVmlzaWJsZSIpKTsKKyAgICAgICAgbV9tZW51QmFy
VmlzaWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dG
ZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJtZW51QmFyVmlzaWJsZSIpKTsKKyAgICAgICAgbV9sb2Nh
dGlvbkJhclZpc2libGUgPSBnZXRXaW5kb3dGZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4o
d2luZG93RmVhdHVyZXMsIEFTQ0lJTGl0ZXJhbCgibG9jYXRpb25CYXJWaXNpYmxlIikpOworICAg
ICAgICBtX3Jlc2l6YWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFu
Pih3aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJyZXNpemFibGUiKSk7CisgICAgICAgIG1f
ZnVsbFNjcmVlbiA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5k
b3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJmdWxsc2NyZWVuIikpOworICAgIH0KK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KK1QxIEV3a1dpbmRvd0ZlYXR1cmVzOjpn
ZXRXaW5kb3dGZWF0dXJlVmFsdWUoSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMs
IGNvbnN0IFN0cmluZyYgZmVhdHVyZU5hbWUpCit7CisgICAgVDIqIGZlYXR1cmVWYWx1ZSA9IHN0
YXRpY19jYXN0PFQyKj4od2luZG93RmVhdHVyZXMtPmdldChmZWF0dXJlTmFtZSkpOworCisgICAg
aWYgKCFmZWF0dXJlVmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBm
ZWF0dXJlVmFsdWUtPnZhbHVlKCk7Cit9CisKK3ZvaWQgRXdrV2luZG93RmVhdHVyZXM6OnNldFRv
b2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpCit7CisgICAgbV90b29sYmFyVmlzaWJs
ZSA9IHRvb2xiYXJWaXNpYmxlOworICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8RXdrVmll
d0NhbGxiYWNrczo6VG9vbGJhclZpc2libGU+KCkuY2FsbCgmdG9vbGJhclZpc2libGUpOworfQor
Cit2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRTdGF0dXNCYXJWaXNpYmxlKGJvb2wgc3RhdHVz
QmFyVmlzaWJsZSkKK3sKKyAgICBtX3N0YXR1c0JhclZpc2libGUgPSBzdGF0dXNCYXJWaXNpYmxl
OworICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6U3RhdHVz
QmFyVmlzaWJsZT4oKS5jYWxsKCZzdGF0dXNCYXJWaXNpYmxlKTsKK30KKwordm9pZCBFd2tXaW5k
b3dGZWF0dXJlczo6c2V0TWVudUJhclZpc2libGUoYm9vbCBtZW51QmFyVmlzaWJsZSkKK3sKKyAg
ICBtX21lbnVCYXJWaXNpYmxlID0gbWVudUJhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21h
cnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpNZW51QmFyVmlzaWJsZT4oKS5jYWxsKCZtZW51
QmFyVmlzaWJsZSk7Cit9CisKK3ZvaWQgRXdrV2luZG93RmVhdHVyZXM6OnNldFJlc2l6YWJsZShi
b29sIHJlc2l6YWJsZSkKK3sKKyAgICBtX3Jlc2l6YWJsZSA9IHJlc2l6YWJsZTsKKyAgICBtX3Zp
ZXdJbXBsLT5zbWFydENhbGxiYWNrPEV3a1ZpZXdDYWxsYmFja3M6OldpbmRvd1Jlc2l6YWJsZT4o
KS5jYWxsKCZyZXNpemFibGUpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc190
b29sYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0
dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dG
ZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICByZXR1cm4gaW1w
bC0+dG9vbGJhclZpc2libGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNf
c3RhdHVzYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19m
ZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tXaW5k
b3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICByZXR1cm4g
aW1wbC0+c3RhdHVzQmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0
dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdp
bmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBF
d2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7CisKKyAgICBy
ZXR1cm4gaW1wbC0+c2Nyb2xsYmFyc1Zpc2libGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5k
b3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVz
KiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29u
c3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFsc2UpOworCisg
ICAgcmV0dXJuIGltcGwtPm1lbnVCYXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2lu
ZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVh
dHVyZXMqIHdpbmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVS
Tihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBsLCBmYWxzZSk7
CisKKyAgICByZXR1cm4gaW1wbC0+bG9jYXRpb25CYXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9v
bCBld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJO
KGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsK
KworICAgIHJldHVybiBpbXBsLT5yZXNpemFibGUoKTsKK30KKworRWluYV9Cb29sIGV3a193aW5k
b3dfZmVhdHVyZXNfZnVsbHNjcmVlbl9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2lu
ZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3
a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKworICAgIHJl
dHVybiBpbXBsLT5mdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgZXdrX3dpbmRvd19mZWF0dXJlc19n
ZW9tZXRyeV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzLCBF
dmFzX0Nvb3JkKiB4LCBFdmFzX0Nvb3JkKiB5LCBFdmFzX0Nvb3JkKiB3aWR0aCwgRXZhc19Db29y
ZCogaGVpZ2h0KQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dp
bmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwpOworCisgICAgaWYgKHgpCisgICAg
ICAgICp4ID0gc3RhdGljX2Nhc3Q8RXZhc19Db29yZD4oaW1wbC0+Z2VvbWV0cnkoKS54KCkpOwor
CisgICAgaWYgKHkpCisgICAgICAgICp5ID0gc3RhdGljX2Nhc3Q8RXZhc19Db29yZD4oaW1wbC0+
Z2VvbWV0cnkoKS55KCkpOworCisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSBzdGF0
aWNfY2FzdDxFdmFzX0Nvb3JkPihpbXBsLT5nZW9tZXRyeSgpLndpZHRoKCkpOworCisgICAgaWYg
KGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IHN0YXRpY19jYXN0PEV2YXNfQ29vcmQ+KGltcGwt
Pmdlb21ldHJ5KCkuaGVpZ2h0KCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlNDM2NzUw
NjRmNDAyMDkzMjdlMjQ3Y2FmY2FiMzhkOTY3ZDMwODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKQEAgLTAs
MCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tf
d2luZG93X2ZlYXR1cmVzLmgKKyAqIEBicmllZiAgIEFjY2VzcyB0byB0aGUgZmVhdHVyZXMgb2Yg
d2luZG93LgorICovCisKKyNpZm5kZWYgZXdrX3dpbmRvd19mZWF0dXJlc19oCisjZGVmaW5lIGV3
a193aW5kb3dfZmVhdHVyZXNfaAorCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPEV2YXMu
aD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAq
IERlY2xhcmUgRXdrX1dpbmRvd19GZWF0dXJlcyBhcyBFd2tfT2JqZWN0LgorICoKKyAqIEBzZWUg
RXdrX09iamVjdAorICovCit0eXBlZGVmIHN0cnVjdCBFd2tPYmplY3QgRXdrX1dpbmRvd19GZWF0
dXJlczsKKworLyoqCisgKiBRdWVyaWVzIHRoZSB0b29sYmFyIHZpc2liaWxpdHkgb2YgdGhlIHdp
bmRvdyBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0
byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB0b29s
YmFyIHNob3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitFQVBJ
IEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQoY29uc3Qg
RXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKworLyoqCisgKiBRdWVyaWVz
IHRoZSBzdGF0dXNiYXIgdmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICog
QHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgor
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIHN0YXR1c2JhciBzaG91bGQgYmUgdmlzaWJs
ZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRv
d19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJl
cyAqd2luZG93X2ZlYXR1cmVzKTsKKworLyoqCisgKiBRdWVyaWVzIHRoZSBzY3JvbGxiYXIgdmlz
aWJpbGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0
dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgaXMgdGhlIHNjcm9sbGJhcnMgc2hvdWxkIGJlIHZpc2libGUsIEBjIEVJTkFfRkFMU0Ug
b3RoZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfc2Nyb2xs
YmFyc192aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVy
ZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIG1lbnViYXIgdmlzaWJpbGl0eSBvZiB0aGUgd2lu
ZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRv
IGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIG1lbnVi
YXIgc2hvdWxkIGJlIHZpc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK0VBUEkg
RWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxlX2dldChjb25zdCBF
d2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMg
dGhlIGxvY2F0aW9uYmFyIHZpc2liaWxpdHkgb2YgdGhlIHdpbmRvdyBmZWF0dXJlLgorICoKKyAq
IEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcworICoK
KyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSBsb2NhdGlvbmJhciBzaG91bGQgYmUgdmlz
aWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dp
bmRvd19mZWF0dXJlc19sb2NhdGlvbmJhcl92aXNpYmxlX2dldChjb25zdCBFd2tfV2luZG93X0Zl
YXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgaWYgdGhlIHdpbmRv
dyBpcyByZXNpemFibGUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0
IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIHdp
bmRvdyBzaG91bGQgYmUgcmVzaXphYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitF
QVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQoY29uc3QgRXdr
X1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsKKworLyoqCisgKiBRdWVyaWVzIHRo
ZSB0aGUgd2luZG93IGlzIGZ1bGxzY3JlZW4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVz
IHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBpcyB0aGUgd2luZG93IHNob3VsZCBiZSBmdWxsc2NyZWVuLCBAYyBFSU5BX0ZBTFNFIG90aGVy
d2lzZQorICovCitFQVBJIEVpbmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX2Z1bGxzY3JlZW5f
Z2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgor
ICogR2V0cyBnZW9tZXRyeSBwcm9wZXJ0aWVzIG9mIGFuIEV3a19XaW5kb3dfRmVhdHVyZXMuCisg
KgorICogUHJvcGVydGllcyBhcmUgcmV0dXJuZWQgaW4gdGhlIHJlc3BlY3RpdmUgcG9pbnRlcnMu
IFBhc3NpbmcgQGMgTlVMTCB0byBhbnkgb2YKKyAqIHRoZXNlIHBvaW50ZXJzIHdpbGwgY2F1c2Ug
dGhhdCBwcm9wZXJ0eSB0byBub3QgYmUgcmV0dXJuZWQuCisgKgorICogQHBhcmFtIHdpbmRvd19m
ZWF0dXJlcyB0aGUgd2luZG93J3MgZmVhdHVyZXMKKyAqIEBwYXJhbSB4IHRoZSBwb2ludGVyIHRv
IHN0b3JlIHggcG9zaXRpb24KKyAqIEBwYXJhbSB5IHRoZSBwb2ludGVyIHRvIHN0b3JlIHkgcG9z
aXRpb24KKyAqIEBwYXJhbSB3IHRoZSBwb2ludGVyIHRvIHN0b3JlIHdpZHRoCisgKiBAcGFyYW0g
aCB0aGUgcG9pbnRlciB0byBzdG9yZSBoZWlnaHQKKyAqLworRUFQSSB2b2lkIGV3a193aW5kb3df
ZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19m
ZWF0dXJlcywgRXZhc19Db29yZCAqeCwgRXZhc19Db29yZCAqeSwgRXZhc19Db29yZCAqdywgRXZh
c19Db29yZCAqaCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAv
LyBld2tfd2luZG93X2ZlYXR1cmVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzZiZjg5MjMyYjJkZGQ2ODc4MTZiNjFiNzc3OWMwNDdmODZjZjk1NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVh
dHVyZXNfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGVfaAorI2RlZmluZSBld2tfd2luZG93
X2ZlYXR1cmVzX3ByaXZhdGVfaAorCisjaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRl
ICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNp
bmNsdWRlICJld2tfb2JqZWN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVj
dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK2NsYXNzIEV3a1ZpZXdJbXBsOwor
CitjbGFzcyBFd2tXaW5kb3dGZWF0dXJlcyA6IHB1YmxpYyBFd2tPYmplY3QgeworcHVibGljOgor
ICAgIEVXS19PQkpFQ1RfREVDTEFSRShFd2tXaW5kb3dGZWF0dXJlcykKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEV3a1dpbmRvd0ZlYXR1cmVzPiBjcmVhdGUoV2ViS2l0OjpJbW11dGFibGVEaWN0
aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tXaW5kb3dGZWF0dXJlcyh3aW5kb3dGZWF0dXJl
cywgdmlld0ltcGwpKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZ2VvbWV0cnko
KSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5OyB9CisgICAgdm9pZCBzZXRHZW9tZXRyeShXZWJD
b3JlOjpGbG9hdFJlY3QmIGdlb21ldHJ5KSB7IG1fZ2VvbWV0cnkgPSBnZW9tZXRyeTsgfQorCisg
ICAgYm9vbCB0b29sYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9vbGJhclZpc2libGU7
IH0KKyAgICB2b2lkIHNldFRvb2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpOworCisg
ICAgYm9vbCBzdGF0dXNCYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXNCYXJWaXNp
YmxlOyB9CisgICAgdm9pZCBzZXRTdGF0dXNCYXJWaXNpYmxlKGJvb2wgc3RhdHVzQmFyVmlzaWJs
ZSk7CisKKyAgICBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxiYXJzVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCBzY3Jv
bGxiYXJzVmlzaWJsZSkgeyBtX3Njcm9sbGJhcnNWaXNpYmxlID0gc2Nyb2xsYmFyc1Zpc2libGU7
IH0KKworICAgIGJvb2wgbWVudUJhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX21lbnVCYXJW
aXNpYmxlOyB9CisgICAgdm9pZCBzZXRNZW51QmFyVmlzaWJsZShib29sIG1lbnVCYXJWaXNpYmxl
KTsKKworICAgIGJvb2wgbG9jYXRpb25CYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
dGlvbkJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldExvY2F0aW9uQmFyVmlzaWJsZShib29sIGxv
Y2F0aW9uQmFyVmlzaWJsZSkgeyBtX2xvY2F0aW9uQmFyVmlzaWJsZSA9IGxvY2F0aW9uQmFyVmlz
aWJsZTsgfQorCisgICAgYm9vbCByZXNpemFibGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc2l6YWJs
ZTsgfQorICAgIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wgcmVzaXphYmxlKTsKKworICAgIGJvb2wg
ZnVsbFNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNjcmVlbjsgfQorICAgIHZvaWQgc2V0
RnVsbFNjcmVlbihib29sIGZ1bGxTY3JlZW4pIHsgbV9mdWxsU2NyZWVuID0gZnVsbFNjcmVlbjsg
fQorCitwcml2YXRlOgorICAgIEV3a1dpbmRvd0ZlYXR1cmVzKFdlYktpdDo6SW1tdXRhYmxlRGlj
dGlvbmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCk7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKyAgICBzdGF0aWMgVDEgZ2V0V2luZG93
RmVhdHVyZVZhbHVlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMs
IGNvbnN0IFN0cmluZyYgZmVhdHVyZU5hbWUpOworCisgICAgRXdrVmlld0ltcGwqIG1fdmlld0lt
cGw7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9nZW9tZXRyeTsKKyAgICBib29sIG1fdG9v
bGJhclZpc2libGU7CisgICAgYm9vbCBtX3N0YXR1c0JhclZpc2libGU7CisgICAgYm9vbCBtX3Nj
cm9sbGJhcnNWaXNpYmxlOworICAgIGJvb2wgbV9tZW51QmFyVmlzaWJsZTsKKyAgICBib29sIG1f
bG9jYXRpb25CYXJWaXNpYmxlOworICAgIGJvb2wgbV9yZXNpemFibGU7CisgICAgYm9vbCBtX2Z1
bGxTY3JlZW47Cit9OworCisjZW5kaWYgLy8gZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3Rf
ZXdrMl93aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZiMGU1
MjAxZmNiNTk1NmJmNDk3MWJjN2JiNThhNzE0OGIxM2VkYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl93aW5kb3dfZmVh
dHVyZXMuY3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFz
ZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgRXZhc19PYmplY3QqIGNyZWF0ZURlZmF1
bHRXaW5kb3coRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFd2tfV2luZG93
X0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcykKK3sKKyAgICAvLyBkZWZhdWx0IHZhbHVlcyBvZiBX
ZWJDb3JlOldpbmRvd0ZlYXR1cmVzKCkKKyAgICAvLyAtIG1lbnVCYXJWaXNpYmxlKHRydWUpCisg
ICAgLy8gLSBzdGF0dXNCYXJWaXNpYmxlKHRydWUpCisgICAgLy8gLSB0b29sQmFyVmlzaWJsZSh0
cnVlKQorICAgIC8vIC0gbG9jYXRpb25CYXJWaXNpYmxlKHRydWUpCisgICAgLy8gLSBzY3JvbGxi
YXJzVmlzaWJsZSh0cnVlKQorICAgIC8vIC0gcmVzaXphYmxlKHRydWUpCisgICAgLy8gLSBmdWxs
c2NyZWVuKGZhbHNlKQorCisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc190b29s
YmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dp
bmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAg
ICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQo
d2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX21l
bnViYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tf
d2luZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7
CisgICAgRVhQRUNUX1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19yZXNpemFibGVfZ2V0KHdpbmRv
d0ZlYXR1cmVzKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19mdWxs
c2NyZWVuX2dldCh3aW5kb3dGZWF0dXJlcykpOworCisgICAgaW50IHgsIHksIHdpZHRoLCBoZWln
aHQ7CisgICAgZXdrX3dpbmRvd19mZWF0dXJlc19nZW9tZXRyeV9nZXQod2luZG93RmVhdHVyZXMs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIEVYUEVDVF9FUSgwLCB4KTsKKyAgICBF
WFBFQ1RfRVEoMCwgeSk7CisgICAgRVhQRUNUX0VRKDAsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEo
MCwgaGVpZ2h0KTsKKworICAgIHJldHVybiAwOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFz
ZSwgZXdrX3dpbmRvd19mZWF0dXJlc19kZWZhdWx0X3Byb3BlcnR5X2dldCkKK3sKKyAgICBFdmFz
X09iamVjdCogdmlldyA9IHdlYlZpZXcoKTsKKworICAgIGNvbnN0IGNoYXIgd2luZG93SFRNTFtd
ID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJyk7XCI+PC9ib2R5Pjwv
aHRtbD4iOworCisgICAgZXdrVmlld0NsYXNzKCktPndpbmRvd19jcmVhdGUgPSBjcmVhdGVEZWZh
dWx0V2luZG93OworCisgICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZCh2aWV3LCB3aW5kb3dI
VE1MLCAwLCAwKTsKKyAgICBBU1NFUlRfVFJVRSh3YWl0VW50aWxMb2FkRmluaXNoZWQoKSk7Cit9
CisKK3N0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlV2luZG93KEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNtYXJ0RGF0YSwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93RmVhdHVyZXMpCit7
CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNpYmxlX2dl
dCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNf
c3RhdHVzYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUo
ZXdrX3dpbmRvd19mZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVz
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxl
X2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9GQUxTRShld2tfd2luZG93X2ZlYXR1
cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNU
X1RSVUUoZXdrX3dpbmRvd19mZWF0dXJlc19yZXNpemFibGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7
CisgICAgRVhQRUNUX0ZBTFNFKGV3a193aW5kb3dfZmVhdHVyZXNfZnVsbHNjcmVlbl9nZXQod2lu
ZG93RmVhdHVyZXMpKTsKKworICAgIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV3a193
aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd0ZlYXR1cmVzLCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCk7CisKKyAgICBFWFBFQ1RfRVEoMTAwLCB4KTsKKyAgICBFWFBFQ1RfRVEoMTUw
LCB5KTsKKyAgICBFWFBFQ1RfRVEoNDAwLCB3aWR0aCk7CisgICAgRVhQRUNUX0VRKDQwMCwgaGVp
Z2h0KTsKKworICAgIHJldHVybiAwOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdr
X3dpbmRvd19mZWF0dXJlc19wcm9wZXJ0eV9nZXQpCit7CisgICAgRXZhc19PYmplY3QqIHZpZXcg
PSB3ZWJWaWV3KCk7CisKKyAgICBjb25zdCBjaGFyIHdpbmRvd0hUTUxbXSA9ICI8aHRtbD48Ym9k
eSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycsICdsZWZ0PTEwMCx0b3A9MTUwLHdpZHRoPTQw
MCxoZWlnaHQ9NDAwLGxvY2F0aW9uPW5vLG1lbnViYXI9bm8sc3RhdHVzPXllcyx0b29sYmFyPW5v
LHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMsZnVsbHNjcmVlbj1ubycpO1wiPjwvYm9keT48
L2h0bWw+IjsKKworICAgIGV3a1ZpZXdDbGFzcygpLT53aW5kb3dfY3JlYXRlID0gY3JlYXRlV2lu
ZG93OworCisgICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZCh2aWV3LCB3aW5kb3dIVE1MLCAw
LCAwKTsKKyAgICBBU1NFUlRfVFJVRSh3YWl0VW50aWxMb2FkRmluaXNoZWQoKSk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKaW5kZXgg
MmI3NTA3MTBmOWRlNGE3Y2U0Zjg5ZWQwNzY5ZjZlNTc0NTE4ODU1OS4uZjBhN2I0YmYxYTBhZjRi
ZTY0M2Y3YWQwNGIyYWNhOGQ3NzQ1NDE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IldLRXZlbnQuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgImV3a19maWxlX2No
b29zZXJfcmVxdWVzdF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlc19w
cml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29s
b3IuaD4KIApAQCAtNDksOSArNTAsOSBAQCB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6Y2xvc2VQYWdl
KFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKICAgICB0b1BhZ2VVSUNsaWVudEVm
bChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+Y2xvc2VQYWdlKCk7CiB9CiAKLVdLUGFnZVJlZiBQ
YWdlVUlDbGllbnRFZmw6OmNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVlc3RSZWYs
IFdLRGljdGlvbmFyeVJlZiB3aW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVu
dE1vdXNlQnV0dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorV0tQYWdlUmVmIFBhZ2VVSUNs
aWVudEVmbDo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdLVVJMUmVxdWVzdFJlZiwgV0tEaWN0
aW9uYXJ5UmVmIHdrV2luZG93RmVhdHVyZXMsIFdLRXZlbnRNb2RpZmllcnMsIFdLRXZlbnRNb3Vz
ZUJ1dHRvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICByZXR1cm4gdG9QYWdlVUlD
bGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPmNyZWF0ZU5ld1BhZ2Uod2luZG93RmVh
dHVyZXMpOworICAgIHJldHVybiB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3
SW1wbC0+Y3JlYXRlTmV3UGFnZSh0b0ltcGwod2tXaW5kb3dGZWF0dXJlcykpOwogfQogCiB2b2lk
IFBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdS
ZWYgYWxlcnRUZXh0LCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtNzAs
NiArNzEsNjIgQEAgV0tTdHJpbmdSZWYgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0UHJv
bXB0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZSwKICAgICByZXR1cm4gdmFsdWUgPyBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh2YWx1ZSkgOiAwOwogfQogCitib29sIFBhZ2VV
SUNsaWVudEVmbDo6dG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNs
aWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBB
U1NFUlQoZmVhdHVyZXMpOworICAgIHJldHVybiBmZWF0dXJlcy0+dG9vbGJhclZpc2libGUoKTsK
K30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldFRvb2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VS
ZWYsIGJvb2wgdG9vbGJhclZpc2libGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
RXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5m
byktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsK
KyAgICBmZWF0dXJlcy0+c2V0VG9vbGJhclZpc2libGUodG9vbGJhclZpc2libGUpOworfQorCiti
b29sIFBhZ2VVSUNsaWVudEVmbDo6bWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9Q
YWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7
CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4gZmVhdHVyZXMtPm1lbnVCYXJWaXNp
YmxlKCk7Cit9CisKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKFdL
UGFnZVJlZiwgYm9vbCBtZW51QmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGll
bnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVy
ZXMpOworICAgIGZlYXR1cmVzLT5zZXRNZW51QmFyVmlzaWJsZShtZW51QmFyVmlzaWJsZSk7Cit9
CisKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJl
cyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0
dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisgICAgcmV0dXJuIGZlYXR1cmVzLT5zdGF0
dXNCYXJWaXNpYmxlKCk7Cit9CisKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRTdGF0dXNCYXJJ
c1Zpc2libGUoV0tQYWdlUmVmLCBib29sIHN0YXR1c0JhclZpc2libGUsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlD
bGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAg
QVNTRVJUKGZlYXR1cmVzKTsKKyAgICBmZWF0dXJlcy0+c2V0U3RhdHVzQmFyVmlzaWJsZShzdGF0
dXNCYXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRFZmw6OmlzUmVzaXphYmxlKFdL
UGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJl
cyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+
d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIHJldHVybiBmZWF0
dXJlcy0+cmVzaXphYmxlKCk7Cit9CisKK3ZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRJc1Jlc2l6
YWJsZShXS1BhZ2VSZWYsIGJvb2wgcmVzaXphYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNs
aWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0
dXJlcyk7CisgICAgZmVhdHVyZXMtPnNldFJlc2l6YWJsZShyZXNpemFibGUpOworfQorCiAjaWYg
RU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2hvd0NvbG9y
UGlja2VyKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9yUGlja2Vy
UmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CkBA
IC0xNDEsNiArMTk4LDE0IEBAIFBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZsKEV3a1Zp
ZXdJbXBsKiB2aWV3SW1wbCkKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0QWxlcnQgPSBydW5K
YXZhU2NyaXB0QWxlcnQ7CiAgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdENvbmZpcm0gPSBydW5K
YXZhU2NyaXB0Q29uZmlybTsKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0ID0gcnVu
SmF2YVNjcmlwdFByb21wdDsKKyAgICB1aUNsaWVudC50b29sYmFyc0FyZVZpc2libGUgPSB0b29s
YmFyc0FyZVZpc2libGU7CisgICAgdWlDbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlID0gc2V0
VG9vbGJhcnNBcmVWaXNpYmxlOworICAgIHVpQ2xpZW50Lm1lbnVCYXJJc1Zpc2libGUgPSBtZW51
QmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnNldE1lbnVCYXJJc1Zpc2libGUgPSBzZXRNZW51
QmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSA9IHN0YXR1c0Jh
cklzVmlzaWJsZTsKKyAgICB1aUNsaWVudC5zZXRTdGF0dXNCYXJJc1Zpc2libGUgPSBzZXRTdGF0
dXNCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuaXNSZXNpemFibGUgPSBpc1Jlc2l6YWJsZTsK
KyAgICB1aUNsaWVudC5zZXRJc1Jlc2l6YWJsZSA9IHNldElzUmVzaXphYmxlOwogICAgIHVpQ2xp
ZW50LnRha2VGb2N1cyA9IHRha2VGb2N1czsKICAgICB1aUNsaWVudC5mb2N1cyA9IGZvY3VzOwog
ICAgIHVpQ2xpZW50LnVuZm9jdXMgPSB1bmZvY3VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKaW5kZXggMmY1NDE5MmEyYWUwZmI3MDM5ZTEyYmM5
MTRiNjc4YzgzNjdmODE2Yi4uZTY4NDE0YWNmYjc0ODhhM2ViOTdmZmI0OGU3ODRlMDEwMTA1YWFh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRF
ZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5o
CkBAIC01MCw2ICs1MCwxNCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJ1bkphdmFTY3Jp
cHRBbGVydChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7
CiAgICAgc3RhdGljIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmlu
Z1JlZiwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBy
dW5KYXZhU2NyaXB0UHJvbXB0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLU3RyaW5nUmVmLCBX
S0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIGJvb2wgdG9vbGJhcnNBcmVWaXNp
YmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQg
c2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbyk7CisgICAgc3RhdGljIGJvb2wgbWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUo
V0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9v
bCBzdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBpc1Jlc2l6YWJsZShXS1Bh
Z2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldElzUmVz
aXphYmxlKFdLUGFnZVJlZiwgYm9vbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAjaWYgRU5B
QkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgc3RhdGljIHZvaWQgc2hvd0NvbG9yUGlja2VyKFdL
UGFnZVJlZiwgV0tTdHJpbmdSZWYgaW5pdGlhbENvbG9yLCBXS0NvbG9yUGlja2VyUmVzdWx0TGlz
dGVuZXJSZWYsIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCBoaWRlQ29sb3JQaWNrZXIo
V0tQYWdlUmVmLCBjb25zdCB2b2lkKik7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggNDBmMjc4NDgzMzcxZWIzNmMwNzE2Njc2MDQ3MDc4NWIyNTc3
NjAxMy4uOWRhMjYyZjU4NDM5ZWU1MTRkMDcwZGViN2Q5ZmRjMTU2ZWNlMzA5MiAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDEyLTExLTE5ICBKaW53b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXSzJdIEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRl
ZCBVSSBjYWxsYmFja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk5MTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW1wbGVtZW50ZWQgd2luZG93X2NyZWF0ZSBhbmQgd2luZG93X2Nsb3NlIHNtYXJ0Y2Fs
bGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAgICogTWluaUJyb3dzZXIvZWZsL21haW4uYzoKKyAg
ICAgICAgKG9uX3dpbmRvd19jcmVhdGUpOgorICAgICAgICAob25fd2luZG93X2Nsb3NlKToKKyAg
ICAgICAgKHdpbmRvd19jcmVhdGUpOgorCiAyMDEyLTExLTE4ICBLeXVuZ1RhZSBLaW0gIDxrdGYu
a2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIE5vdCB0byBpbmNsdWRlICJld2tfdmll
d19wcml2YXRlLmgiIGluIFRvb2xzCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwv
bWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCA5MmQzZjJmZjlmM2U0
MjZjYTVhODk3MTMxMGEzODQ1NjZhMDRjODdkLi4xMWYwNjVjMzQ0ZDllMWMyOGIyNTQ0YjZmMWRl
NmMyZWQxNGFhN2NkIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCisr
KyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKQEAgLTI4NCwyMCArMjg0LDYgQEAgb25f
YmFja19mb3J3YXJkX2xpc3RfY2hhbmdlZCh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpl
d2tfdmlldywgdm9pZCAqZXZlbnQKICAgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldCh3aW5kb3ct
PmZvcndhcmRfYnV0dG9uLCAhZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShld2tfdmlldykpOwog
fQogCi1zdGF0aWMgRXZhc19PYmplY3QqCi1vbl9uZXdfd2luZG93KEV3a19WaWV3X1NtYXJ0X0Rh
dGEgKnNkLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKLXsKLSAgICBCcm93
c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICB3aW5kb3dzID0gZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCB3aW5kb3cpOwotICAgIHJl
dHVybiB3aW5kb3ctPmV3a192aWV3OwotfQotCi1zdGF0aWMgdm9pZAotb25fY2xvc2Vfd2luZG93
KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZv
KQotewotICAgIHdpbmRvd19jbG9zZSgoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGEpOwotfQot
CiBzdGF0aWMgdm9pZAogb25fcHJvZ3Jlc3Modm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAq
ZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7CkBAIC03NjMsNiArNzQ5LDM5IEBAIHN0YXRp
YyBFaW5hX0Jvb2wgb25fZnVsbHNjcmVlbl9leGl0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKK3N0YXRpYyBFdmFzX09iamVjdCAqCitvbl93aW5k
b3dfY3JlYXRlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgY29uc3QgRXdrX1dpbmRv
d19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKQoreworICAgIGludCB4ID0gMDsKKyAgICBpbnQg
eSA9IDA7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKworICAgIGV3
a193aW5kb3dfZmVhdHVyZXNfZ2VvbWV0cnlfZ2V0KHdpbmRvd19mZWF0dXJlcywgJngsICZ5LCAm
d2lkdGgsICZoZWlnaHQpOworCisgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgd2lkdGggPSB3aW5k
b3dfd2lkdGg7CisKKyAgICBpZiAoIWhlaWdodCkKKyAgICAgICAgaGVpZ2h0ID0gd2luZG93X2hl
aWdodDsKKworICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfY3JlYXRlKE5VTEws
IHdpZHRoLCBoZWlnaHQpOworICAgIEV2YXNfT2JqZWN0ICpuZXdfdmlldyA9IHdpbmRvdy0+ZXdr
X3ZpZXc7CisKKyAgICB3aW5kb3dzID0gZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCB3aW5kb3cp
OworCisgICAgaW5mbygibWluaWJyb3dzZXI6IGxvY2F0aW9uKCVkLCVkKSBzaXplPSglZCwlZClc
biIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIG5ld192aWV3OworfQorCitz
dGF0aWMgdm9pZAorb25fd2luZG93X2Nsb3NlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0
YSkKK3sKKyAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tf
dmlldyhzbWFydERhdGEtPnNlbGYpOworICAgIHdpbmRvd19jbG9zZSh3aW5kb3cpOworfQorCiBz
dGF0aWMgdm9pZAogYXV0aF9wb3B1cF9jbG9zZShBdXRoX0RhdGEgKmF1dGhfZGF0YSkKIHsKQEAg
LTEwMzAsNyArMTA0OSw4IEBAIHN0YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0ZShj
b25zdCBjaGFyICp1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBld2tWaWV3Q2xhc3Mt
PndpbmRvd19nZW9tZXRyeV9zZXQgPSBvbl93aW5kb3dfZ2VvbWV0cnlfc2V0OwogICAgIGV3a1Zp
ZXdDbGFzcy0+ZnVsbHNjcmVlbl9lbnRlciA9IG9uX2Z1bGxzY3JlZW5fZW50ZXI7CiAgICAgZXdr
Vmlld0NsYXNzLT5mdWxsc2NyZWVuX2V4aXQgPSBvbl9mdWxsc2NyZWVuX2V4aXQ7Ci0gICAgZXdr
Vmlld0NsYXNzLT53aW5kb3dfY3JlYXRlX25ldyA9IG9uX25ld193aW5kb3c7CisgICAgZXdrVmll
d0NsYXNzLT53aW5kb3dfY3JlYXRlID0gb25fd2luZG93X2NyZWF0ZTsKKyAgICBld2tWaWV3Q2xh
c3MtPndpbmRvd19jbG9zZSA9IG9uX3dpbmRvd19jbG9zZTsKIAogICAgIEV2YXMgKmV2YXMgPSBl
dmFzX29iamVjdF9ldmFzX2dldCh3aW5kb3ctPmVsbV93aW5kb3cpOwogICAgIEV2YXNfU21hcnQg
KnNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmV3a1ZpZXdDbGFzcy0+c2MpOwpAQCAtMTA0
Nyw3ICsxMDY3LDYgQEAgc3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5kb3dfY3JlYXRlKGNvbnN0
IGNoYXIgKnVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGV3a19zZXR0aW5nc19wcmVm
ZXJyZWRfbWluaW11bV9jb250ZW50c193aWR0aF9zZXQoc2V0dGluZ3MsIDApOwogCiAgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJhdXRoZW50aWNh
dGlvbixyZXF1ZXN0Iiwgb25fYXV0aGVudGljYXRpb25fcmVxdWVzdCwgd2luZG93KTsKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImNsb3NlLHdp
bmRvdyIsIG9uX2Nsb3NlX3dpbmRvdywgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLGZhaWxlZCIsIG9uX2Rvd25s
b2FkX2ZhaWxlZCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQo
d2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLGZpbmlzaGVkIiwgb25fZG93bmxvYWRfZmluaXNo
ZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+
ZXdrX3ZpZXcsICJkb3dubG9hZCxyZXF1ZXN0Iiwgb25fZG93bmxvYWRfcmVxdWVzdCwgd2luZG93
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174996</attachid>
            <date>2012-11-19 09:36:15 -0800</date>
            <delta_ts>2012-11-20 19:21:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99114-20121120023404.patch</filename>
            <type>text/plain</type>
            <size>45142</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjRjNzUzMTVhMDMyMWFh
NTE1ZDllMmY2OWY0NzRiOGRmNDMyMjUwNy4uYWNhNjdmYWUzOGFmOWEzM2RhNGIyOTFjMjRiYzU1
YmQyMjJiNWEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTE5ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJd
IEFkZCBFd2tfV2luZG93X0ZlYXR1cmVzIEFQSSBhbmQgcmVsYXRlZCBVSSBjYWxsYmFja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXdrX1dp
bmRvd19GZWF0dXJlcyBBUEkgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCisgICAg
ICAgIHdpdGggdmFyaW91cyB3aW5kb3cgZmVhdHVyZXMgc3VjaCBhcyBsb2NhdGlvbiwgc2l6ZSwg
dG9vbGJhciwgbWVudWJhciwKKyAgICAgICAgc3RhdHVzYmFyLCBsb2NhdGlvbmJhciwgc2Nyb2xs
YmFyLCByZXNpemFibGUsIGFuZCBmdWxsc2NyZWVuLgorCisgICAgICAgIFVJIGNsaWVudCBjYWxs
YmFja3MgcmVsYXRlZCB0byB3aW5kb3cgZmVhdHVyZXMgYWxzbyBpbXBsZW1lbnRlZAorICAgICAg
ICBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IHZhbHVlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oOgorICAgICAgICAoRXdrVmlld0NhbGxiYWNrcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwOgorICAgICAgICAoRXdrVmll
d0ltcGw6OndpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQ
YWdlKToKKyAgICAgICAgKEV3a1ZpZXdJbXBsOjpjbG9zZVBhZ2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmg6CisgICAgICAgIChFd2tWaWV3SW1wbCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVm
bDo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dG9v
bGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
VUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGll
bnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZs
OjpQYWdlVUlDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmg6CisgICAgICAgIChQYWdlVUlDbGllbnRFZmwpOgorCiAyMDEyLTExLTE5ICBLaWhvbmcg
S3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEFkZCBQUk9YSU1JVFlf
RVZFTlRTIGZlYXR1cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYmI4NzQ3YjFjYjFm
NTgzOGMyZGQ3Y2NkZGY3ODI5MTFlYTY3YzFlNS4uNjc5YTZhNTdiNGMzYWEyYmFlZGRlM2YyZWUy
ZjlhMjM4ZGUxZWU4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTczLDYgKzczLDcg
QEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3VybF9yZXNwb25zZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9y
ZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCiAKICAgICBVSVByb2Nlc3MvY2Fp
cm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKQEAgLTI3OSw2ICsyODAsNyBAQCBTRVQgKEVXZWJL
aXQyX0hFQURFUlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgiCisg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2lu
ZG93X2ZlYXR1cmVzLmgiCiApCiAKIElOU1RBTEwoRklMRVMgJHtDTUFLRV9CSU5BUllfRElSfS9X
ZWJLaXQyL2VmbC9ld2Via2l0Mi5wYyBERVNUSU5BVElPTiBsaWIvcGtnY29uZmlnKQpAQCAtMzc2
LDYgKzM3OCw3IEBAIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX3N0
b3JhZ2VfbWFuYWdlcgogICAgIHRlc3RfZXdrMl90ZXh0X2NoZWNrZXIKICAgICB0ZXN0X2V3azJf
dmlldworICAgIHRlc3RfZXdrMl93aW5kb3dfZmVhdHVyZXMKICkKIAogSUYgKEVOQUJMRV9BUElf
VEVTVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2Vi
S2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRl
eCAwN2NhMTI5MzUwZjRlZGI3ZTNkYjRiZjkyYWQ3MGI4YzNhMjA5Y2U0Li5hZGFhZTFlY2RlNTA2
NzljOTk1Y2M5NWJlYjdkMTlhMTE4NjBlNTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTU4LDUgKzU4LDYgQEAKICNpbmNsdWRlICJld2tfdXJs
X3Jlc3BvbnNlLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogI2luY2x1
ZGUgImV3a192aWV3LmgiCisjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgogCiAjZW5k
aWYgLy8gRVdlYktpdDJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlld0NhbGxiYWNrcy5oCmluZGV4IGI0MTdiN2NjYzM1ZjJiZGNjNDY1ZGIyODJlMmNi
MTI1NDgwYThlMDAuLjQxNDBjNzQyYmM4NWQ5MDc5OTBmNWM5NjU1MmE0ZGUzOGRkZGU1ZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFj
a3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJh
Y2tzLmgKQEAgLTU3LDggKzU3LDYgQEAgZW51bSBDYWxsYmFja1R5cGUgewogICAgIEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCwKICAgICBCYWNrRm9yd2FyZExpc3RDaGFuZ2UsCiAgICAgQ2FuY2VsVmli
cmF0aW9uLAotICAgIENsb3NlV2luZG93LAotICAgIENyZWF0ZVdpbmRvdywKICAgICBEb3dubG9h
ZEpvYkNhbmNlbGxlZCwKICAgICBEb3dubG9hZEpvYkZhaWxlZCwKICAgICBEb3dubG9hZEpvYkZp
bmlzaGVkLApAQCAtNjksNiArNjcsNyBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgTG9hZEVy
cm9yLAogICAgIExvYWRGaW5pc2hlZCwKICAgICBMb2FkUHJvZ3Jlc3MsCisgICAgTWVudUJhclZp
c2libGUsCiAgICAgUHJvdmlzaW9uYWxMb2FkRmFpbGVkLAogICAgIFByb3Zpc2lvbmFsTG9hZFJl
ZGlyZWN0LAogICAgIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCkBAIC03NywxNSArNzYsMTggQEAg
ZW51bSBDYWxsYmFja1R5cGUgewogICAgIFJlc291cmNlTG9hZEZhaWxlZCwKICAgICBSZXNvdXJj
ZUxvYWRGaW5pc2hlZCwKICAgICBSZXNvdXJjZVJlcXVlc3RTZW50LAorICAgIFN0YXR1c0JhclZp
c2libGUsCiAgICAgTmF2aWdhdGlvblBvbGljeURlY2lzaW9uLAogICAgIE5ld1dpbmRvd1BvbGlj
eURlY2lzaW9uLAogICAgIFRleHRGb3VuZCwKICAgICBUaXRsZUNoYW5nZSwKKyAgICBUb29sYmFy
VmlzaWJsZSwKICAgICBUb29sdGlwVGV4dFVuc2V0LAogICAgIFRvb2x0aXBUZXh0U2V0LAogICAg
IFVSTENoYW5nZWQsCiAgICAgVmlicmF0ZSwKICAgICBXZWJQcm9jZXNzQ3Jhc2hlZCwKKyAgICBX
aW5kb3dSZXNpemFibGUsCiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQogICAgIEludGVudFJlcXVl
c3QsCiAjZW5kaWYKQEAgLTE2NCw4ICsxNjYsNiBAQCBzdHJ1Y3QgQ2FsbEJhY2tJbmZvPGNhbGxi
YWNrVHlwZT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIERFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soQXV0aGVudGljYXRpb25SZXF1ZXN0LCAiYXV0aGVudGljYXRpb24scmVxdWVzdCIs
IEV3a19BdXRoX1JlcXVlc3QpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhCYWNrRm9yd2Fy
ZExpc3RDaGFuZ2UsICJiYWNrLGZvcndhcmQsbGlzdCxjaGFuZ2VkIiwgdm9pZCk7CiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKENhbmNlbFZpYnJhdGlvbiwgImNhbmNlbCx2aWJyYXRpb24iLCB2
b2lkKTsKLURFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soQ2xvc2VXaW5kb3csICJjbG9zZSx3aW5k
b3ciLCB2b2lkKTsKLURFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soQ3JlYXRlV2luZG93LCAiY3Jl
YXRlLHdpbmRvdyIsIEV2YXNfT2JqZWN0Kik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKERv
d25sb2FkSm9iQ2FuY2VsbGVkLCAiZG93bmxvYWQsY2FuY2VsbGVkIiwgRXdrX0Rvd25sb2FkX0pv
Yik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iRmFpbGVkLCAiZG93bmxv
YWQsZmFpbGVkIiwgRXdrX0Rvd25sb2FkX0pvYl9FcnJvcik7CiBERUNMQVJFX0VXS19WSUVXX0NB
TExCQUNLKERvd25sb2FkSm9iRmluaXNoZWQsICJkb3dubG9hZCxmaW5pc2hlZCIsIEV3a19Eb3du
bG9hZF9Kb2IpOwpAQCAtMTc5LDYgKzE3OSw3IEBAIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
TG9hZFByb2dyZXNzLCAibG9hZCxwcm9ncmVzcyIsIGRvdWJsZSk7CiBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwgImxvYWQscHJvdmlzaW9uYWwsZmFpbGVk
IiwgRXdrX0Vycm9yKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUHJvdmlzaW9uYWxMb2Fk
UmVkaXJlY3QsICJsb2FkLHByb3Zpc2lvbmFsLHJlZGlyZWN0Iiwgdm9pZCk7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsICJsb2FkLHByb3Zpc2lvbmFs
LHN0YXJ0ZWQiLCB2b2lkKTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTWVudUJhclZpc2li
bGUsICJtZW51YmFyLHZpc2libGUiLCBib29sKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLCAicG9saWN5LGRlY2lzaW9uLG5hdmlnYXRpb24iLCBF
d2tfTmF2aWdhdGlvbl9Qb2xpY3lfRGVjaXNpb24pOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFD
SyhOZXdXaW5kb3dQb2xpY3lEZWNpc2lvbiwgInBvbGljeSxkZWNpc2lvbixuZXcsd2luZG93Iiwg
RXdrX05hdmlnYXRpb25fUG9saWN5X0RlY2lzaW9uKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJB
Q0soUmVzb3VyY2VMb2FkU3RhcnRlZCwgInJlc291cmNlLHJlcXVlc3QsbmV3IiwgRXdrX1Jlc291
cmNlX1JlcXVlc3QpOwpAQCAtMTg2LDEzICsxODcsMTYgQEAgREVDTEFSRV9FV0tfVklFV19DQUxM
QkFDSyhSZXNvdXJjZUxvYWRSZXNwb25zZSwgInJlc291cmNlLHJlcXVlc3QscmVzcG9uc2UiLCBF
d2sKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soUmVzb3VyY2VMb2FkRmFpbGVkLCAicmVzb3Vy
Y2UscmVxdWVzdCxmYWlsZWQiLCBFd2tfUmVzb3VyY2VfTG9hZF9FcnJvcik7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKFJlc291cmNlTG9hZEZpbmlzaGVkLCAicmVzb3VyY2UscmVxdWVzdCxm
aW5pc2hlZCIsIEV3a19SZXNvdXJjZSk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFJlc291
cmNlUmVxdWVzdFNlbnQsICJyZXNvdXJjZSxyZXF1ZXN0LHNlbnQiLCBFd2tfUmVzb3VyY2VfUmVx
dWVzdCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFN0YXR1c0JhclZpc2libGUsICJzdGF0
dXNiYXIsdmlzaWJsZSIsIGJvb2wpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUZXh0Rm91
bmQsICJ0ZXh0LGZvdW5kIiwgdW5zaWduZWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhU
aXRsZUNoYW5nZSwgInRpdGxlLGNoYW5nZWQiLCBjaGFyKTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soVG9vbGJhclZpc2libGUsICJ0b29sYmFyLHZpc2libGUiLCBib29sKTsKIERFQ0xBUkVf
RVdLX1ZJRVdfQ0FMTEJBQ0soVG9vbHRpcFRleHRVbnNldCwgInRvb2x0aXAsdGV4dCx1bnNldCIs
IHZvaWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhUb29sdGlwVGV4dFNldCwgInRvb2x0
aXAsdGV4dCxzZXQiLCBjaGFyKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soVVJMQ2hhbmdl
ZCwgInVybCxjaGFuZ2VkIiwgY2hhcik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKFZpYnJh
dGUsICJ2aWJyYXRlIiwgdWludDY0X3QpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhXZWJQ
cm9jZXNzQ3Jhc2hlZCwgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIGJvb2wpOworREVDTEFSRV9FV0tf
VklFV19DQUxMQkFDSyhXaW5kb3dSZXNpemFibGUsICJ3aW5kb3cscmVzaXphYmxlIiwgYm9vbCk7
CiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhJbnRl
bnRSZXF1ZXN0LCAiaW50ZW50LHJlcXVlc3QsbmV3IiwgRXdrX0ludGVudCk7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAppbmRl
eCAwNzU1M2M0OGNjNmNiZTQzMjdkOGEzYjgzM2QzYTFjZTM0ZjZiMWYxLi4wMDQ0MzQxOTI3ZTgy
YjdlZjdjNDFjN2EyMGM2ZWI3MjdmNGQyMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVk
ZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgogI2luY2x1
ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3By
aXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8RWNvcmVfWC5oPgog
I2luY2x1ZGUgPEVkamUuaD4KQEAgLTg1MCwzNyArODUxLDQ1IEBAIHZvaWQgRXdrVmlld0ltcGw6
OmluZm9ybVVSTENoYW5nZSgpCiAgICAgaW5mb3JtSWNvbkNoYW5nZSgpOwogfQogCi1XS1BhZ2VS
ZWYgRXdrVmlld0ltcGw6OmNyZWF0ZU5ld1BhZ2UoV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1
cmVzKQorRXdrV2luZG93RmVhdHVyZXMqIEV3a1ZpZXdJbXBsOjp3aW5kb3dGZWF0dXJlcygpCiB7
Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICBBU1NFUlQo
c2QtPmFwaSk7CisgICAgaWYgKCFtX3dpbmRvd0ZlYXR1cmVzKQorICAgICAgICBtX3dpbmRvd0Zl
YXR1cmVzID0gRXdrV2luZG93RmVhdHVyZXM6OmNyZWF0ZSgwLCB0aGlzKTsKIAotICAgIEV2YXNf
T2JqZWN0KiBuZXdFd2tWaWV3ID0gMDsKLQotICAgIC8vIEV4dHJhY3QgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgZnJvbSB0aGUgd2luZG93IGF0dHJpYnV0ZXMgYW5kIHBhc3MgdGhlbSBhbG9uZyB0byB0
aGUgZW1iZWRkZXIuCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdpZHRoU3RyKEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0U3RyKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJoZWlnaHQiKSk7CisgICAgcmV0dXJuIG1fd2luZG93RmVhdHVyZXMuZ2V0KCk7
Cit9CiAKLSAgICBXS1R5cGVSZWYgcmVmID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3aW5k
b3dGZWF0dXJlcywgd2lkdGhTdHIuZ2V0KCkpOwotICAgIHVuc2lnbmVkIHdpZHRoID0gcmVmID8g
V0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4ocmVmKSkgOiAwOwotICAg
IHJlZiA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkod2luZG93RmVhdHVyZXMsIGhlaWdodFN0
ci5nZXQoKSk7Ci0gICAgdW5zaWduZWQgaGVpZ2h0ID0gcmVmID8gV0tEb3VibGVHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4ocmVmKSkgOiAwOworV0tQYWdlUmVmIEV3a1ZpZXdJbXBs
OjpjcmVhdGVOZXdQYWdlKEltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzKQorewor
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNk
LT5hcGkpOwogCi0gICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY3JlYXRlX25ldykKKyAgICBpZiAo
IXNkLT5hcGktPndpbmRvd19jcmVhdGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCEo
bmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGVfbmV3KHNkLCB3aWR0aCwgaGVpZ2h0
KSkpCisgICAgUmVmUHRyPEV3a1dpbmRvd0ZlYXR1cmVzPiBld2tXaW5kb3dGZWF0dXJlcyA9IEV3
a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVyZXMsIHRoaXMpOworCisgICAgRXZh
c19PYmplY3QqIG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlKHNkLCBld2tXaW5k
b3dGZWF0dXJlcy5nZXQoKSk7CisgICAgaWYgKCFuZXdFd2tWaWV3KQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIEV3a1ZpZXdJbXBsKiBuZXdWaWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZh
c09iamVjdChuZXdFd2tWaWV3KTsKICAgICBBU1NFUlQobmV3Vmlld0ltcGwpOwogCisgICAgbmV3
Vmlld0ltcGwtPm1fd2luZG93RmVhdHVyZXMgPSBld2tXaW5kb3dGZWF0dXJlczsKKwogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+KFdLUmV0YWluKG5ld1ZpZXdJbXBsLT5wYWdlKCkp
KTsKIH0KIAogdm9pZCBFd2tWaWV3SW1wbDo6Y2xvc2VQYWdlKCkKIHsKLSAgICBzbWFydENhbGxi
YWNrPENsb3NlV2luZG93PigpLmNhbGwoKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9
IHNtYXJ0RGF0YSgpOworICAgIEFTU0VSVChzZC0+YXBpKTsKKworICAgIGlmICghc2QtPmFwaS0+
d2luZG93X2Nsb3NlKQorICAgICAgICByZXR1cm47CisKKyAgICBzZC0+YXBpLT53aW5kb3dfY2xv
c2Uoc2QpOwogfQogCiB2b2lkIEV3a1ZpZXdJbXBsOjpvbk1vdXNlRG93bih2b2lkKiBkYXRhLCBF
dmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaAppbmRleCBiZDI1NmJjYWQ1ODE1Y2YyZWVk
MjRiNzAwMzAzMDNiNzBjMDBmZTBiLi5jMGI5N2E4OTk5YThjODIzYTEyZmE0YzM4YjA5YWIxOGE5
NzU0YWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJ
bXBsLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgRXdrVmlld0ltcGxfaAogCiAjaW5jbHVk
ZSAiRXdrVmlld0NhbGxiYWNrcy5oIgorI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIK
ICNpbmNsdWRlICJSZWZQdHJFZmwuaCIKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIK
ICNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCkBAIC04MCw2ICs4MSw3IEBAIGNsYXNzIEV3a0JhY2tG
b3J3YXJkTGlzdDsKIGNsYXNzIEV3a0NvbG9yUGlja2VyOwogY2xhc3MgRXdrUG9wdXBNZW51Owog
Y2xhc3MgRXdrU2V0dGluZ3M7CitjbGFzcyBFd2tXaW5kb3dGZWF0dXJlczsKIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKIHR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQg
RXZhc19HTF9Db250ZXh0OwpAQCAtMTA2LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBFd2tDb250
ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0
dGluZ3MqIHNldHRpbmdzKCkgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0Jh
Y2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExp
c3QuZ2V0KCk7IH0KKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogd2luZG93RmVhdHVyZXMoKTsKIAog
ICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNGb2N1c2VkKCkg
Y29uc3Q7CkBAIC0xNjAsNyArMTYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlzbWlzc0NvbG9y
UGlja2VyKCk7CiAjZW5kaWYKIAotICAgIFdLUGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdLRGljdGlv
bmFyeVJlZiB3aW5kb3dGZWF0dXJlcyk7CisgICAgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV2Vi
S2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcyk7CiAgICAgdm9pZCBjbG9z
ZVBhZ2UoKTsKIAogICAgIHZvaWQgcmVxdWVzdFBvcHVwTWVudShXZWJLaXQ6OldlYlBvcHVwTWVu
dVByb3h5RWZsKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlRleHREaXJlY3Rp
b24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBvcHVw
SXRlbT4mIGl0ZW1zLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpOwpAQCAtMjUyLDYgKzI1NSw3IEBA
IHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICNlbmRp
ZgogICAgIE93blB0cjxFd2tTZXR0aW5ncz4gbV9zZXR0aW5nczsKKyAgICBSZWZQdHI8RXdrV2lu
ZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7CiAgICAgY29uc3Qgdm9pZCogbV9jdXJzb3JJ
ZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0LgogICAgIFdL
RWluYVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1f
dXJsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5kZXgg
NzUwMTYxMTc0YjlhNDU3ZmYyZWRlOTg4NTE4YjBiMzQ2NzcyYjU3Zi4uMzkxNzBlZTZkYzU2OTJj
MTY0NzM5NGM0ZGQ2ZjJkMTY4NjU3ZjZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5oCkBAIC0zMCw4ICszMCw2IEBACiAgKiAgIGV3a19hdXRoX3JlcXVl
c3RfcmVmKCkgb24gdGhlIHJlcXVlc3Qgb2JqZWN0IHRvIHByb2Nlc3MgdGhlIGF1dGhlbnRpY2F0
aW9uIGFzeW5jaHJvbm91c2x5LgogICogLSAiYmFjayxmb3J3YXJkLGxpc3QsY2hhbmdlZCIsIHZv
aWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmlldydzIGJhY2sgLyBmb3J3YXJkIGxpc3QgaGFkIGNoYW5n
ZWQuCiAgKiAtICJjYW5jZWwsdmlicmF0aW9uIiwgdm9pZDogcmVxdWVzdCB0byBjYW5jZWwgdGhl
IHZpYnJhdGlvbi4KLSAqIC0gImNsb3NlLHdpbmRvdyIsIHZvaWQ6IHdpbmRvdyBpcyBjbG9zZWQu
Ci0gKiAtICJjcmVhdGUsd2luZG93IiwgRXZhc19PYmplY3QqKjogYSBuZXcgd2luZG93IGlzIGNy
ZWF0ZWQuCiAgKiAtICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxvYWRfSm9iKjogcmVw
b3J0cyB0aGF0IGEgZG93bmxvYWQgd2FzIGVmZmVjdGl2ZWx5IGNhbmNlbGxlZC4KICAqIC0gImRv
d25sb2FkLGZhaWxlZCIsIEV3a19Eb3dubG9hZF9Kb2JfRXJyb3IqOiByZXBvcnRzIHRoYXQgYSBk
b3dubG9hZCBmYWlsZWQgd2l0aCB0aGUgZ2l2ZW4gZXJyb3IuCiAgKiAtICJkb3dubG9hZCxmaW5p
c2hlZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBjb21wbGV0
ZWQgc3VjY2Vzc2Z1bGx5LgpAQCAtOTQsNiArOTIsNyBAQAogI2luY2x1ZGUgImV3a190b3VjaC5o
IgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9u
c2UuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8RXZhcy5o
PgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE0OCwxNiArMTQ3LDE3IEBAIHN0cnVjdCBFd2tf
Vmlld19TbWFydF9DbGFzcyB7CiAgICAgLy8gICAtIFdlYiBkYXRhYmFzZS4KICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgKCpleGNlZWRlZF9kYXRhYmFzZV9xdW90YSkoRXdrX1ZpZXdfU21hcnRfRGF0
YSAqc2QsIGNvbnN0IGNoYXIgKmRhdGFiYXNlTmFtZSwgY29uc3QgY2hhciAqZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJy
ZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwg
dW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UpOwogCi0gICAgLy8gbmV3IHdpbmRvdzoK
LSAgICAvLyAgIC0gQ3JlYXRlIGEgbmV3IHdpbmRvdyB3aXRoIHNwZWNpZmllZCBzaXplCi0gICAg
RXZhc19PYmplY3QqICgqd2luZG93X2NyZWF0ZV9uZXcpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCk7CisgICAgLy8gd2luZG93IGNy
ZWF0aW9uIGFuZCBjbG9zaW5nOgorICAgIC8vICAgLSBDcmVhdGUgYSBuZXcgd2luZG93IHdpdGgg
c3BlY2lmaWVkIGZlYXR1cmVzIGFuZCBjbG9zZSB3aW5kb3cuCisgICAgRXZhc19PYmplY3QgKigq
d2luZG93X2NyZWF0ZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGNvbnN0IEV3a19XaW5kb3df
RmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisgICAgdm9pZCAoKndpbmRvd19jbG9zZSkoRXdr
X1ZpZXdfU21hcnRfRGF0YSAqc2QpOwogfTsKIAogLyoqCiAgKiBUaGUgdmVyc2lvbiB5b3UgaGF2
ZSB0byBwdXQgaW50byB0aGUgdmVyc2lvbiBmaWVsZAogICogaW4gdGhlIEBhIEV3a19WaWV3X1Nt
YXJ0X0NsYXNzIHN0cnVjdHVyZS4KICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19W
RVJTSU9OIDdVTAorI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDhVTAogCiAv
KioKICAqIEluaXRpYWxpemVyIGZvciB3aG9sZSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1
cmUuCkBAIC0xNjksNyArMTY5LDcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAq
IEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9WRVJTSU9OCiAgKiBAc2VlIEVXS19WSUVX
X1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OCiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdfU01B
UlRfQ0xBU1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJ
RVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KKyNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xB
U1NfSU5JVChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdfU01B
UlRfQ0xBU1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KIAogLyoqCiAgKiBJbml0aWFsaXplciB0byB6ZXJv
IGEgd2hvbGUgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42NmE2YzkxMGY4MThjYjg2ZjY5MWNhYWIxZTkwMWU5NzA3NGY2ZWZiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRv
d19mZWF0dXJlcy5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKKwor
I2luY2x1ZGUgIldlYk51bWJlci5oIgorI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJp
dmF0ZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
RXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVzKEltbXV0YWJsZURpY3Rpb25hcnkq
IHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAgOiBtX3ZpZXdJbXBs
KHZpZXdJbXBsKQorICAgICwgbV9nZW9tZXRyeSgwLCAwLCAxMDAsIDEwMCkKKyAgICAsIG1fdG9v
bGJhclZpc2libGUodHJ1ZSkKKyAgICAsIG1fc3RhdHVzQmFyVmlzaWJsZSh0cnVlKQorICAgICwg
bV9zY3JvbGxiYXJzVmlzaWJsZSh0cnVlKQorICAgICwgbV9tZW51QmFyVmlzaWJsZSh0cnVlKQor
ICAgICwgbV9sb2NhdGlvbkJhclZpc2libGUodHJ1ZSkKKyAgICAsIG1fcmVzaXphYmxlKHRydWUp
CisgICAgLCBtX2Z1bGxTY3JlZW4oZmFsc2UpCit7CisgICAgaWYgKHdpbmRvd0ZlYXR1cmVzKSB7
CisgICAgICAgIG1fZ2VvbWV0cnkuc2V0WChnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBX
ZWJEb3VibGU+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoIngiKSkpOworICAgICAgICBt
X2dlb21ldHJ5LnNldFkoZ2V0V2luZG93RmVhdHVyZVZhbHVlPGRvdWJsZSwgV2ViRG91YmxlPih3
aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJ5IikpKTsKKyAgICAgICAgbV9nZW9tZXRyeS5z
ZXRXaWR0aChnZXRXaW5kb3dGZWF0dXJlVmFsdWU8ZG91YmxlLCBXZWJEb3VibGU+KHdpbmRvd0Zl
YXR1cmVzLCBBU0NJSUxpdGVyYWwoIndpZHRoIikpKTsKKyAgICAgICAgbV9nZW9tZXRyeS5zZXRI
ZWlnaHQoZ2V0V2luZG93RmVhdHVyZVZhbHVlPGRvdWJsZSwgV2ViRG91YmxlPih3aW5kb3dGZWF0
dXJlcywgQVNDSUlMaXRlcmFsKCJoZWlnaHQiKSkpOworCisgICAgICAgIG1fdG9vbGJhclZpc2li
bGUgPSBnZXRXaW5kb3dGZWF0dXJlVmFsdWU8Ym9vbCwgV2ViQm9vbGVhbj4od2luZG93RmVhdHVy
ZXMsIEFTQ0lJTGl0ZXJhbCgidG9vbEJhclZpc2libGUiKSk7CisgICAgICAgIG1fc3RhdHVzQmFy
VmlzaWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29sLCBXZWJCb29sZWFuPih3aW5kb3dG
ZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJzdGF0dXNCYXJWaXNpYmxlIikpOworICAgICAgICBtX3Nj
cm9sbGJhcnNWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJvb2xlYW4+
KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInNjcm9sbGJhcnNWaXNpYmxlIikpOworICAg
ICAgICBtX21lbnVCYXJWaXNpYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdlYkJv
b2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoIm1lbnVCYXJWaXNpYmxlIikpOwor
ICAgICAgICBtX2xvY2F0aW9uQmFyVmlzaWJsZSA9IGdldFdpbmRvd0ZlYXR1cmVWYWx1ZTxib29s
LCBXZWJCb29sZWFuPih3aW5kb3dGZWF0dXJlcywgQVNDSUlMaXRlcmFsKCJsb2NhdGlvbkJhclZp
c2libGUiKSk7CisgICAgICAgIG1fcmVzaXphYmxlID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJv
b2wsIFdlYkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoInJlc2l6YWJsZSIp
KTsKKyAgICAgICAgbV9mdWxsU2NyZWVuID0gZ2V0V2luZG93RmVhdHVyZVZhbHVlPGJvb2wsIFdl
YkJvb2xlYW4+KHdpbmRvd0ZlYXR1cmVzLCBBU0NJSUxpdGVyYWwoImZ1bGxzY3JlZW4iKSk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorVDEgRXdrV2lu
ZG93RmVhdHVyZXM6OmdldFdpbmRvd0ZlYXR1cmVWYWx1ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3
aW5kb3dGZWF0dXJlcywgY29uc3QgU3RyaW5nJiBmZWF0dXJlTmFtZSkKK3sKKyAgICBUMiogZmVh
dHVyZVZhbHVlID0gc3RhdGljX2Nhc3Q8VDIqPih3aW5kb3dGZWF0dXJlcy0+Z2V0KGZlYXR1cmVO
YW1lKSk7CisKKyAgICBpZiAoIWZlYXR1cmVWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZS0+dmFsdWUoKTsKK30KKwordm9pZCBFd2tXaW5kb3dG
ZWF0dXJlczo6c2V0VG9vbGJhclZpc2libGUoYm9vbCB0b29sYmFyVmlzaWJsZSkKK3sKKyAgICBt
X3Rvb2xiYXJWaXNpYmxlID0gdG9vbGJhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21hcnRD
YWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpUb29sYmFyVmlzaWJsZT4oKS5jYWxsKCZ0b29sYmFy
VmlzaWJsZSk7Cit9CisKK3ZvaWQgRXdrV2luZG93RmVhdHVyZXM6OnNldFN0YXR1c0JhclZpc2li
bGUoYm9vbCBzdGF0dXNCYXJWaXNpYmxlKQoreworICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IHN0
YXR1c0JhclZpc2libGU7CisgICAgbV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2Fs
bGJhY2tzOjpTdGF0dXNCYXJWaXNpYmxlPigpLmNhbGwoJnN0YXR1c0JhclZpc2libGUpOworfQor
Cit2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRNZW51QmFyVmlzaWJsZShib29sIG1lbnVCYXJW
aXNpYmxlKQoreworICAgIG1fbWVudUJhclZpc2libGUgPSBtZW51QmFyVmlzaWJsZTsKKyAgICBt
X3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPEV3a1ZpZXdDYWxsYmFja3M6Ok1lbnVCYXJWaXNpYmxl
PigpLmNhbGwoJm1lbnVCYXJWaXNpYmxlKTsKK30KKwordm9pZCBFd2tXaW5kb3dGZWF0dXJlczo6
c2V0UmVzaXphYmxlKGJvb2wgcmVzaXphYmxlKQoreworICAgIG1fcmVzaXphYmxlID0gcmVzaXph
YmxlOworICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6V2lu
ZG93UmVzaXphYmxlPigpLmNhbGwoJnJlc2l6YWJsZSk7Cit9CisKK0VpbmFfQm9vbCBld2tfd2lu
ZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJl
cyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNv
bnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsKKwor
ICAgIHJldHVybiBpbXBsLT50b29sYmFyVmlzaWJsZSgpOworfQorCitFaW5hX0Jvb2wgZXdrX3dp
bmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJO
KGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZhbHNlKTsK
KworICAgIHJldHVybiBpbXBsLT5zdGF0dXNCYXJWaXNpYmxlKCk7Cit9CisKK0VpbmFfQm9vbCBl
d2tfd2luZG93X2ZlYXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRv
d19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VUX0lNUExfT1Jf
UkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMsIGltcGwsIGZh
bHNlKTsKKworICAgIHJldHVybiBpbXBsLT5zY3JvbGxiYXJzVmlzaWJsZSgpOworfQorCitFaW5h
X0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19X
aW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcykKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBM
X09SX1JFVFVSTihjb25zdCBFd2tXaW5kb3dGZWF0dXJlcywgd2luZG93X2ZlYXR1cmVzLCBpbXBs
LCBmYWxzZSk7CisKKyAgICByZXR1cm4gaW1wbC0+bWVudUJhclZpc2libGUoKTsKK30KKworRWlu
YV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQoY29uc3Qg
RXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQoreworICAgIEVXS19PQkpfR0VU
X0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a1dpbmRvd0ZlYXR1cmVzLCB3aW5kb3dfZmVhdHVyZXMs
IGltcGwsIGZhbHNlKTsKKworICAgIHJldHVybiBpbXBsLT5sb2NhdGlvbkJhclZpc2libGUoKTsK
K30KKworRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxlX2dldChjb25zdCBF
d2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRf
SU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywg
aW1wbCwgZmFsc2UpOworCisgICAgcmV0dXJuIGltcGwtPnJlc2l6YWJsZSgpOworfQorCitFaW5h
X0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19mdWxsc2NyZWVuX2dldChjb25zdCBFd2tfV2luZG93
X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9S
RVRVUk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCwgZmFs
c2UpOworCisgICAgcmV0dXJuIGltcGwtPmZ1bGxTY3JlZW4oKTsKK30KKwordm9pZCBld2tfd2lu
ZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5k
b3dfZmVhdHVyZXMsIEV2YXNfQ29vcmQqIHgsIEV2YXNfQ29vcmQqIHksIEV2YXNfQ29vcmQqIHdp
ZHRoLCBFdmFzX0Nvb3JkKiBoZWlnaHQpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRV
Uk4oY29uc3QgRXdrV2luZG93RmVhdHVyZXMsIHdpbmRvd19mZWF0dXJlcywgaW1wbCk7CisKKyAg
ICBpZiAoeCkKKyAgICAgICAgKnggPSBzdGF0aWNfY2FzdDxFdmFzX0Nvb3JkPihpbXBsLT5nZW9t
ZXRyeSgpLngoKSk7CisKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBzdGF0aWNfY2FzdDxFdmFz
X0Nvb3JkPihpbXBsLT5nZW9tZXRyeSgpLnkoKSk7CisKKyAgICBpZiAod2lkdGgpCisgICAgICAg
ICp3aWR0aCA9IHN0YXRpY19jYXN0PEV2YXNfQ29vcmQ+KGltcGwtPmdlb21ldHJ5KCkud2lkdGgo
KSk7CisKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8RXZh
c19Db29yZD4oaW1wbC0+Z2VvbWV0cnkoKS5oZWlnaHQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGU0MzY3NTA2NGY0MDIwOTMyN2UyNDdjYWZjYWIzOGQ5NjdkMzA4NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3dfZmVh
dHVyZXMuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAq
IEBmaWxlICAgIGV3a193aW5kb3dfZmVhdHVyZXMuaAorICogQGJyaWVmICAgQWNjZXNzIHRvIHRo
ZSBmZWF0dXJlcyBvZiB3aW5kb3cuCisgKi8KKworI2lmbmRlZiBld2tfd2luZG93X2ZlYXR1cmVz
X2gKKyNkZWZpbmUgZXdrX3dpbmRvd19mZWF0dXJlc19oCisKKyNpbmNsdWRlIDxFaW5hLmg+Cisj
aW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKKy8qKgorICogRGVjbGFyZSBFd2tfV2luZG93X0ZlYXR1cmVzIGFzIEV3a19PYmplY3Qu
CisgKgorICogQHNlZSBFd2tfT2JqZWN0CisgKi8KK3R5cGVkZWYgc3RydWN0IEV3a09iamVjdCBF
d2tfV2luZG93X0ZlYXR1cmVzOworCisvKioKKyAqIFF1ZXJpZXMgdGhlIHRvb2xiYXIgdmlzaWJp
bGl0eSBvZiB0aGUgd2luZG93IGZlYXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJl
cyB0aGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaXMgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2libGUsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3
aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfdG9vbGJhcl92aXNp
YmxlX2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisv
KioKKyAqIFF1ZXJpZXMgdGhlIHN0YXR1c2JhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVh
dHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHBy
b3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgc3RhdHVzYmFyIHNo
b3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitFQVBJIEVpbmFf
Qm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxlX2dldChjb25zdCBFd2tf
V2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioKKyAqIFF1ZXJpZXMgdGhl
IHNjcm9sbGJhciB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFy
YW0gd2luZG93X2ZlYXR1cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBA
cmV0dXJuIEBjIEVJTkFfVFJVRSBpcyB0aGUgc2Nyb2xsYmFycyBzaG91bGQgYmUgdmlzaWJsZSwg
QGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19m
ZWF0dXJlc19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMg
KndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmllcyB0aGUgbWVudWJhciB2aXNpYmls
aXR5IG9mIHRoZSB3aW5kb3cgZmVhdHVyZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVz
IHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBpcyB0aGUgbWVudWJhciBzaG91bGQgYmUgdmlzaWJsZSwgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3dpbmRvd19mZWF0dXJlc19tZW51YmFyX3Zpc2li
bGVfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8q
KgorICogUXVlcmllcyB0aGUgbG9jYXRpb25iYXIgdmlzaWJpbGl0eSBvZiB0aGUgd2luZG93IGZl
YXR1cmUuCisgKgorICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyB0aGUgb2JqZWN0IHRvIGdldCBw
cm9wZXJ0aWVzCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaXMgdGhlIGxvY2F0aW9uYmFy
IHNob3VsZCBiZSB2aXNpYmxlLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitFQVBJIEVp
bmFfQm9vbCBld2tfd2luZG93X2ZlYXR1cmVzX2xvY2F0aW9uYmFyX3Zpc2libGVfZ2V0KGNvbnN0
IEV3a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7CisKKy8qKgorICogUXVlcmll
cyBpZiB0aGUgd2luZG93IGlzIHJlc2l6YWJsZS4KKyAqCisgKiBAcGFyYW0gd2luZG93X2ZlYXR1
cmVzIHRoZSBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBpcyB0aGUgd2luZG93IHNob3VsZCBiZSByZXNpemFibGUsIEBjIEVJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVyZXNfcmVzaXphYmxl
X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOworCisvKioK
KyAqIFF1ZXJpZXMgdGhlIHRoZSB3aW5kb3cgaXMgZnVsbHNjcmVlbgorICoKKyAqIEBwYXJhbSB3
aW5kb3dfZmVhdHVyZXMgdGhlIG9iamVjdCB0byBnZXQgcHJvcGVydGllcworICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIGlzIHRoZSB3aW5kb3cgc2hvdWxkIGJlIGZ1bGxzY3JlZW4sIEBjIEVJ
TkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a193aW5kb3dfZmVhdHVy
ZXNfZnVsbHNjcmVlbl9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1
cmVzKTsKKworLyoqCisgKiBHZXRzIGdlb21ldHJ5IHByb3BlcnRpZXMgb2YgYW4gRXdrX1dpbmRv
d19GZWF0dXJlcy4KKyAqCisgKiBQcm9wZXJ0aWVzIGFyZSByZXR1cm5lZCBpbiB0aGUgcmVzcGVj
dGl2ZSBwb2ludGVycy4gUGFzc2luZyBAYyBOVUxMIHRvIGFueSBvZgorICogdGhlc2UgcG9pbnRl
cnMgd2lsbCBjYXVzZSB0aGF0IHByb3BlcnR5IHRvIG5vdCBiZSByZXR1cm5lZC4KKyAqCisgKiBA
cGFyYW0gd2luZG93X2ZlYXR1cmVzIHRoZSB3aW5kb3cncyBmZWF0dXJlcworICogQHBhcmFtIHgg
dGhlIHBvaW50ZXIgdG8gc3RvcmUgeCBwb3NpdGlvbgorICogQHBhcmFtIHkgdGhlIHBvaW50ZXIg
dG8gc3RvcmUgeSBwb3NpdGlvbgorICogQHBhcmFtIHcgdGhlIHBvaW50ZXIgdG8gc3RvcmUgd2lk
dGgKKyAqIEBwYXJhbSBoIHRoZSBwb2ludGVyIHRvIHN0b3JlIGhlaWdodAorICovCitFQVBJIHZv
aWQgZXdrX3dpbmRvd19mZWF0dXJlc19nZW9tZXRyeV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyAqd2luZG93X2ZlYXR1cmVzLCBFdmFzX0Nvb3JkICp4LCBFdmFzX0Nvb3JkICp5LCBFdmFz
X0Nvb3JkICp3LCBFdmFzX0Nvb3JkICpoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5k
aWYKKworI2VuZGlmIC8vIGV3a193aW5kb3dfZmVhdHVyZXNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3By
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNmJmODkyMzJiMmRkZDY4NzgxNmI2MWI3Nzc5YzA0N2Y4NmNm
OTU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCisjZGVm
aW5lIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJFd2tWaWV3SW1w
bC5oIgorI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJXaW5kb3dG
ZWF0dXJlcy5oIgorI2luY2x1ZGUgImV3a19vYmplY3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworY2xhc3Mg
RXdrVmlld0ltcGw7CisKK2NsYXNzIEV3a1dpbmRvd0ZlYXR1cmVzIDogcHVibGljIEV3a09iamVj
dCB7CitwdWJsaWM6CisgICAgRVdLX09CSkVDVF9ERUNMQVJFKEV3a1dpbmRvd0ZlYXR1cmVzKQor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGNyZWF0ZShXZWJLaXQ6
OkltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0lt
cGwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a1dpbmRvd0ZlYXR1cmVz
KHdpbmRvd0ZlYXR1cmVzLCB2aWV3SW1wbCkpOworICAgIH0KKworICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VvbWV0cnk7IH0KKyAgICB2b2lkIHNl
dEdlb21ldHJ5KFdlYkNvcmU6OkZsb2F0UmVjdCYgZ2VvbWV0cnkpIHsgbV9nZW9tZXRyeSA9IGdl
b21ldHJ5OyB9CisKKyAgICBib29sIHRvb2xiYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90
b29sYmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0VG9vbGJhclZpc2libGUoYm9vbCB0b29sYmFy
VmlzaWJsZSk7CisKKyAgICBib29sIHN0YXR1c0JhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXR1c0JhclZpc2libGU7IH0KKyAgICB2b2lkIHNldFN0YXR1c0JhclZpc2libGUoYm9vbCBz
dGF0dXNCYXJWaXNpYmxlKTsKKworICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGJhcnNWaXNpYmxlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxiYXJzVmlz
aWJsZShib29sIHNjcm9sbGJhcnNWaXNpYmxlKSB7IG1fc2Nyb2xsYmFyc1Zpc2libGUgPSBzY3Jv
bGxiYXJzVmlzaWJsZTsgfQorCisgICAgYm9vbCBtZW51QmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVudUJhclZpc2libGU7IH0KKyAgICB2b2lkIHNldE1lbnVCYXJWaXNpYmxlKGJvb2wg
bWVudUJhclZpc2libGUpOworCisgICAgYm9vbCBsb2NhdGlvbkJhclZpc2libGUoKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uQmFyVmlzaWJsZTsgfQorICAgIHZvaWQgc2V0TG9jYXRpb25CYXJW
aXNpYmxlKGJvb2wgbG9jYXRpb25CYXJWaXNpYmxlKSB7IG1fbG9jYXRpb25CYXJWaXNpYmxlID0g
bG9jYXRpb25CYXJWaXNpYmxlOyB9CisKKyAgICBib29sIHJlc2l6YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzaXphYmxlOyB9CisgICAgdm9pZCBzZXRSZXNpemFibGUoYm9vbCByZXNpemFibGUp
OworCisgICAgYm9vbCBmdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsU2NyZWVuOyB9
CisgICAgdm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wgZnVsbFNjcmVlbikgeyBtX2Z1bGxTY3JlZW4g
PSBmdWxsU2NyZWVuOyB9CisKK3ByaXZhdGU6CisgICAgRXdrV2luZG93RmVhdHVyZXMoV2ViS2l0
OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywgRXdrVmlld0ltcGwqIHZpZXdJ
bXBsKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgIHN0YXRp
YyBUMSBnZXRXaW5kb3dGZWF0dXJlVmFsdWUoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3
aW5kb3dGZWF0dXJlcywgY29uc3QgU3RyaW5nJiBmZWF0dXJlTmFtZSk7CisKKyAgICBFd2tWaWV3
SW1wbCogbV92aWV3SW1wbDsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2dlb21ldHJ5Owor
ICAgIGJvb2wgbV90b29sYmFyVmlzaWJsZTsKKyAgICBib29sIG1fc3RhdHVzQmFyVmlzaWJsZTsK
KyAgICBib29sIG1fc2Nyb2xsYmFyc1Zpc2libGU7CisgICAgYm9vbCBtX21lbnVCYXJWaXNpYmxl
OworICAgIGJvb2wgbV9sb2NhdGlvbkJhclZpc2libGU7CisgICAgYm9vbCBtX3Jlc2l6YWJsZTsK
KyAgICBib29sIG1fZnVsbFNjcmVlbjsKK307CisKKyNlbmRpZiAvLyBld2tfd2luZG93X2ZlYXR1
cmVzX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX3dpbmRvd19mZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfd2luZG93X2ZlYXR1cmVzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41ZmIwZTUyMDFmY2I1OTU2YmY0OTcxYmM3YmI1OGE3MTQ4YjEzZWRhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9l
d2syX3dpbmRvd19mZWF0dXJlcy5jcHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29y
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdL
MlVuaXRUZXN0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBFdmFzX09iamVj
dCogY3JlYXRlRGVmYXVsdFdpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNv
bnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzKQoreworICAgIC8vIGRlZmF1
bHQgdmFsdWVzIG9mIFdlYkNvcmU6V2luZG93RmVhdHVyZXMoKQorICAgIC8vIC0gbWVudUJhclZp
c2libGUodHJ1ZSkKKyAgICAvLyAtIHN0YXR1c0JhclZpc2libGUodHJ1ZSkKKyAgICAvLyAtIHRv
b2xCYXJWaXNpYmxlKHRydWUpCisgICAgLy8gLSBsb2NhdGlvbkJhclZpc2libGUodHJ1ZSkKKyAg
ICAvLyAtIHNjcm9sbGJhcnNWaXNpYmxlKHRydWUpCisgICAgLy8gLSByZXNpemFibGUodHJ1ZSkK
KyAgICAvLyAtIGZ1bGxzY3JlZW4oZmFsc2UpCisKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93
X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBF
Q1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3N0YXR1c2Jhcl92aXNpYmxlX2dldCh3aW5kb3dG
ZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfc2Nyb2xsYmFy
c192aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVYUEVDVF9UUlVFKGV3a193aW5k
b3dfZmVhdHVyZXNfbWVudWJhcl92aXNpYmxlX2dldCh3aW5kb3dGZWF0dXJlcykpOworICAgIEVY
UEVDVF9UUlVFKGV3a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQod2lu
ZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6
YWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKworICAgIEVYUEVDVF9GQUxTRShld2tfd2luZG93
X2ZlYXR1cmVzX2Z1bGxzY3JlZW5fZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisKKyAgICBpbnQgeCwg
eSwgd2lkdGgsIGhlaWdodDsKKyAgICBld2tfd2luZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldCh3
aW5kb3dGZWF0dXJlcywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgRVhQRUNUX0VR
KDAsIHgpOworICAgIEVYUEVDVF9FUSgwLCB5KTsKKyAgICBFWFBFQ1RfRVEoMCwgd2lkdGgpOwor
ICAgIEVYUEVDVF9FUSgwLCBoZWlnaHQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK1RFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfd2luZG93X2ZlYXR1cmVzX2RlZmF1bHRfcHJvcGVydHlfZ2V0
KQoreworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworCisgICAgY29uc3QgY2hh
ciB3aW5kb3dIVE1MW10gPSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oJycsICcn
KTtcIj48L2JvZHk+PC9odG1sPiI7CisKKyAgICBld2tWaWV3Q2xhc3MoKS0+d2luZG93X2NyZWF0
ZSA9IGNyZWF0ZURlZmF1bHRXaW5kb3c7CisKKyAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2Fk
KHZpZXcsIHdpbmRvd0hUTUwsIDAsIDApOworICAgIEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRG
aW5pc2hlZCgpKTsKK30KKworc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVXaW5kb3coRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5k
b3dGZWF0dXJlcykKK3sKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc190b29s
YmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3dp
bmRvd19mZWF0dXJlc19zdGF0dXNiYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMpKTsKKyAg
ICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQo
d2luZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19t
ZW51YmFyX3Zpc2libGVfZ2V0KHdpbmRvd0ZlYXR1cmVzKSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3
a193aW5kb3dfZmVhdHVyZXNfbG9jYXRpb25iYXJfdmlzaWJsZV9nZXQod2luZG93RmVhdHVyZXMp
KTsKKyAgICBFWFBFQ1RfVFJVRShld2tfd2luZG93X2ZlYXR1cmVzX3Jlc2l6YWJsZV9nZXQod2lu
ZG93RmVhdHVyZXMpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3dpbmRvd19mZWF0dXJlc19mdWxs
c2NyZWVuX2dldCh3aW5kb3dGZWF0dXJlcykpOworCisgICAgaW50IHgsIHksIHdpZHRoLCBoZWln
aHQ7CisgICAgZXdrX3dpbmRvd19mZWF0dXJlc19nZW9tZXRyeV9nZXQod2luZG93RmVhdHVyZXMs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIEVYUEVDVF9FUSgxMDAsIHgpOworICAg
IEVYUEVDVF9FUSgxNTAsIHkpOworICAgIEVYUEVDVF9FUSg0MDAsIHdpZHRoKTsKKyAgICBFWFBF
Q1RfRVEoNDAwLCBoZWlnaHQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK1RFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfd2luZG93X2ZlYXR1cmVzX3Byb3BlcnR5X2dldCkKK3sKKyAgICBFdmFz
X09iamVjdCogdmlldyA9IHdlYlZpZXcoKTsKKworICAgIGNvbnN0IGNoYXIgd2luZG93SFRNTFtd
ID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJywgJ2xlZnQ9MTAwLHRv
cD0xNTAsd2lkdGg9NDAwLGhlaWdodD00MDAsbG9jYXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9
eWVzLHRvb2xiYXI9bm8sc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyxmdWxsc2NyZWVuPW5v
Jyk7XCI+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZXdrVmlld0NsYXNzKCktPndpbmRvd19jcmVh
dGUgPSBjcmVhdGVXaW5kb3c7CisKKyAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKHZpZXcs
IHdpbmRvd0hUTUwsIDAsIDApOworICAgIEFTU0VSVF9UUlVFKHdhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJ
Q2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmNwcAppbmRleCAyYjc1MDcxMGY5ZGU0YTdjZTRmODllZDA3NjlmNmU1NzQ1MTg4NTU5Li5m
MGE3YjRiZjFhMGFmNGJlNjQzZjdhZDA0YjJhY2E4ZDc3NDU0MTg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiV0tFdmVudC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2lu
ZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db2xvci5oPgogCkBAIC00OSw5ICs1MCw5IEBAIHZvaWQgUGFnZVVJQ2xpZW50
RWZsOjpjbG9zZVBhZ2UoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogICAgIHRv
UGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jbG9zZVBhZ2UoKTsKIH0K
IAotV0tQYWdlUmVmIFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYsIFdL
VVJMUmVxdWVzdFJlZiwgV0tEaWN0aW9uYXJ5UmVmIHdpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9k
aWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitXS1Bh
Z2VSZWYgUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1
ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVy
cywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJl
dHVybiB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+Y3JlYXRlTmV3
UGFnZSh3aW5kb3dGZWF0dXJlcyk7CisgICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVu
dEluZm8pLT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQYWdlKHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVz
KSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdl
UmVmLCBXS1N0cmluZ1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCkBAIC03MCw2ICs3MSw2MiBAQCBXS1N0cmluZ1JlZiBQYWdlVUlDbGllbnRFZmw6OnJ1
bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLAogICAgIHJl
dHVybiB2YWx1ZSA/IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9
CiAKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjp0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJl
cyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0
dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7CisgICAgcmV0dXJuIGZlYXR1cmVzLT50b29s
YmFyVmlzaWJsZSgpOworfQorCit2b2lkIFBhZ2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVW
aXNpYmxlKFdLUGFnZVJlZiwgYm9vbCB0b29sYmFyVmlzaWJsZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVu
dEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBBU1NF
UlQoZmVhdHVyZXMpOworICAgIGZlYXR1cmVzLT5zZXRUb29sYmFyVmlzaWJsZSh0b29sYmFyVmlz
aWJsZSk7Cit9CisKK2Jvb2wgUGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKFdLUGFn
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyog
ZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2lu
ZG93RmVhdHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIHJldHVybiBmZWF0dXJl
cy0+bWVudUJhclZpc2libGUoKTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldE1lbnVC
YXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIG1lbnVCYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAg
IEFTU0VSVChmZWF0dXJlcyk7CisgICAgZmVhdHVyZXMtPnNldE1lbnVCYXJWaXNpYmxlKG1lbnVC
YXJWaXNpYmxlKTsKK30KKworYm9vbCBQYWdlVUlDbGllbnRFZmw6OnN0YXR1c0JhcklzVmlzaWJs
ZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVh
dHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0lt
cGwtPndpbmRvd0ZlYXR1cmVzKCk7CisgICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICByZXR1cm4g
ZmVhdHVyZXMtPnN0YXR1c0JhclZpc2libGUoKTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRFZmw6
OnNldFN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgc3RhdHVzQmFyVmlzaWJsZSwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVy
ZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVh
dHVyZXMoKTsKKyAgICBBU1NFUlQoZmVhdHVyZXMpOworICAgIGZlYXR1cmVzLT5zZXRTdGF0dXNC
YXJWaXNpYmxlKHN0YXR1c0JhclZpc2libGUpOworfQorCitib29sIFBhZ2VVSUNsaWVudEVmbDo6
aXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3
a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEFTU0VSVChmZWF0dXJlcyk7Cisg
ICAgcmV0dXJuIGZlYXR1cmVzLT5yZXNpemFibGUoKTsKK30KKwordm9pZCBQYWdlVUlDbGllbnRF
Zmw6OnNldElzUmVzaXphYmxlKFdLUGFnZVJlZiwgYm9vbCByZXNpemFibGUsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdl
VUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7Cisg
ICAgQVNTRVJUKGZlYXR1cmVzKTsKKyAgICBmZWF0dXJlcy0+c2V0UmVzaXphYmxlKHJlc2l6YWJs
ZSk7Cit9CisKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKIHZvaWQgUGFnZVVJQ2xpZW50
RWZsOjpzaG93Q29sb3JQaWNrZXIoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBpbml0aWFsQ29sb3Is
IFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKIHsKQEAgLTE0MSw2ICsxOTgsMTQgQEAgUGFnZVVJQ2xpZW50RWZsOjpQYWdlVUlD
bGllbnRFZmwoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3Jp
cHRBbGVydCA9IHJ1bkphdmFTY3JpcHRBbGVydDsKICAgICB1aUNsaWVudC5ydW5KYXZhU2NyaXB0
Q29uZmlybSA9IHJ1bkphdmFTY3JpcHRDb25maXJtOwogICAgIHVpQ2xpZW50LnJ1bkphdmFTY3Jp
cHRQcm9tcHQgPSBydW5KYXZhU2NyaXB0UHJvbXB0OworICAgIHVpQ2xpZW50LnRvb2xiYXJzQXJl
VmlzaWJsZSA9IHRvb2xiYXJzQXJlVmlzaWJsZTsKKyAgICB1aUNsaWVudC5zZXRUb29sYmFyc0Fy
ZVZpc2libGUgPSBzZXRUb29sYmFyc0FyZVZpc2libGU7CisgICAgdWlDbGllbnQubWVudUJhcklz
VmlzaWJsZSA9IG1lbnVCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuc2V0TWVudUJhcklzVmlz
aWJsZSA9IHNldE1lbnVCYXJJc1Zpc2libGU7CisgICAgdWlDbGllbnQuc3RhdHVzQmFySXNWaXNp
YmxlID0gc3RhdHVzQmFySXNWaXNpYmxlOworICAgIHVpQ2xpZW50LnNldFN0YXR1c0JhcklzVmlz
aWJsZSA9IHNldFN0YXR1c0JhcklzVmlzaWJsZTsKKyAgICB1aUNsaWVudC5pc1Jlc2l6YWJsZSA9
IGlzUmVzaXphYmxlOworICAgIHVpQ2xpZW50LnNldElzUmVzaXphYmxlID0gc2V0SXNSZXNpemFi
bGU7CiAgICAgdWlDbGllbnQudGFrZUZvY3VzID0gdGFrZUZvY3VzOwogICAgIHVpQ2xpZW50LmZv
Y3VzID0gZm9jdXM7CiAgICAgdWlDbGllbnQudW5mb2N1cyA9IHVuZm9jdXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaAppbmRleCAyZjU0MTkyYTJh
ZTBmYjcwMzllMTJiYzkxNGI2NzhjODM2N2Y4MTZiLi5lNjg0MTRhY2ZiNzQ4OGEzZWI5N2ZmYjQ4
ZTc4NGUwMTAxMDVhYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VVSUNsaWVudEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZVVJQ2xpZW50RWZsLmgKQEAgLTUwLDYgKzUwLDE0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYs
IGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXS1Bh
Z2VSZWYsIFdLU3RyaW5nUmVmLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGlj
IFdLU3RyaW5nUmVmIHJ1bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiwg
V0tTdHJpbmdSZWYsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgYm9vbCB0
b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBib29sLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBtZW51QmFySXNWaXNpYmxlKFdL
UGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgc2V0TWVu
dUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
ICAgIHN0YXRpYyBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXS1Bh
Z2VSZWYsIGJvb2wsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlz
UmVzaXphYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGlj
IHZvaWQgc2V0SXNSZXNpemFibGUoV0tQYWdlUmVmLCBib29sLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKICAgICBzdGF0aWMgdm9pZCBzaG93
Q29sb3JQaWNrZXIoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBpbml0aWFsQ29sb3IsIFdLQ29sb3JQ
aWNrZXJSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIGhp
ZGVDb2xvclBpY2tlcihXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MTA0ZTYxNmJlZmYxMTRiZjZlNjk3
MDlmMTMxOTljYWZmMzE2MjY0Li40NDZkYTRlNWVjOGM5MTYyNWIzZGZjN2MxMmFlOGI4OWMwNGZj
OTk5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTItMTEtMTkgIEppbndvbyBTb25nICA8amlud29vNy5zb25nQHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gQWRkIEV3a19XaW5kb3dfRmVhdHVyZXMg
QVBJIGFuZCByZWxhdGVkIFVJIGNhbGxiYWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCB3aW5kb3dfY3JlYXRlIGFuZCB3aW5kb3df
Y2xvc2Ugc21hcnRjYWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9l
ZmwvbWFpbi5jOgorICAgICAgICAob25fd2luZG93X2NyZWF0ZSk6CisgICAgICAgIChvbl93aW5k
b3dfY2xvc2UpOgorICAgICAgICAod2luZG93X2NyZWF0ZSk6CisKIDIwMTItMTEtMTkgIEtpaG9u
ZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRkIFBST1hJTUlU
WV9FVkVOVFMgZmVhdHVyZQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4u
YyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKaW5kZXggOTJkM2YyZmY5ZjNlNDI2Y2E1
YTg5NzEzMTBhMzg0NTY2YTA0Yzg3ZC4uMTFmMDY1YzM0NGQ5ZTFjMjhiMjU0NGI2ZjFkZTZjMmVk
MTRhYTdjZCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYworKysgYi9U
b29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCkBAIC0yODQsMjAgKzI4NCw2IEBAIG9uX2JhY2tf
Zm9yd2FyZF9saXN0X2NoYW5nZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3Zp
ZXcsIHZvaWQgKmV2ZW50CiAgICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5mb3J3
YXJkX2J1dHRvbiwgIWV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoZXdrX3ZpZXcpKTsKIH0KIAot
c3RhdGljIEV2YXNfT2JqZWN0Kgotb25fbmV3X3dpbmRvdyhFd2tfVmlld19TbWFydF9EYXRhICpz
ZCwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCi17Ci0gICAgQnJvd3Nlcl9X
aW5kb3cgKndpbmRvdyA9IHdpbmRvd19jcmVhdGUoTlVMTCwgd2lkdGgsIGhlaWdodCk7Ci0gICAg
d2luZG93cyA9IGVpbmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKLSAgICByZXR1cm4g
d2luZG93LT5ld2tfdmlldzsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2Nsb3NlX3dpbmRvdyh2b2lk
ICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsK
LSAgICB3aW5kb3dfY2xvc2UoKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhKTsKLX0KLQogc3Rh
dGljIHZvaWQKIG9uX3Byb2dyZXNzKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192
aWV3LCB2b2lkICpldmVudF9pbmZvKQogewpAQCAtNzYzLDYgKzc0OSwzOSBAQCBzdGF0aWMgRWlu
YV9Cb29sIG9uX2Z1bGxzY3JlZW5fZXhpdChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCitzdGF0aWMgRXZhc19PYmplY3QgKgorb25fd2luZG93X2Ny
ZWF0ZShFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0IEV3a19XaW5kb3dfRmVh
dHVyZXMgKndpbmRvd19mZWF0dXJlcykKK3sKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAw
OworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisKKyAgICBld2tfd2lu
ZG93X2ZlYXR1cmVzX2dlb21ldHJ5X2dldCh3aW5kb3dfZmVhdHVyZXMsICZ4LCAmeSwgJndpZHRo
LCAmaGVpZ2h0KTsKKworICAgIGlmICghd2lkdGgpCisgICAgICAgIHdpZHRoID0gd2luZG93X3dp
ZHRoOworCisgICAgaWYgKCFoZWlnaHQpCisgICAgICAgIGhlaWdodCA9IHdpbmRvd19oZWlnaHQ7
CisKKyAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShOVUxMLCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICBFdmFzX09iamVjdCAqbmV3X3ZpZXcgPSB3aW5kb3ctPmV3a192aWV3
OworCisgICAgd2luZG93cyA9IGVpbmFfbGlzdF9hcHBlbmQod2luZG93cywgd2luZG93KTsKKwor
ICAgIGluZm8oIm1pbmlicm93c2VyOiBsb2NhdGlvbiglZCwlZCkgc2l6ZT0oJWQsJWQpXG4iLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBuZXdfdmlldzsKK30KKworc3RhdGlj
IHZvaWQKK29uX3dpbmRvd19jbG9zZShFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEpCit7
CisgICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXco
c21hcnREYXRhLT5zZWxmKTsKKyAgICB3aW5kb3dfY2xvc2Uod2luZG93KTsKK30KKwogc3RhdGlj
IHZvaWQKIGF1dGhfcG9wdXBfY2xvc2UoQXV0aF9EYXRhICphdXRoX2RhdGEpCiB7CkBAIC0xMDMw
LDcgKzEwNDksOCBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoY29uc3Qg
Y2hhciAqdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZXdrVmlld0NsYXNzLT53aW5k
b3dfZ2VvbWV0cnlfc2V0ID0gb25fd2luZG93X2dlb21ldHJ5X3NldDsKICAgICBld2tWaWV3Q2xh
c3MtPmZ1bGxzY3JlZW5fZW50ZXIgPSBvbl9mdWxsc2NyZWVuX2VudGVyOwogICAgIGV3a1ZpZXdD
bGFzcy0+ZnVsbHNjcmVlbl9leGl0ID0gb25fZnVsbHNjcmVlbl9leGl0OwotICAgIGV3a1ZpZXdD
bGFzcy0+d2luZG93X2NyZWF0ZV9uZXcgPSBvbl9uZXdfd2luZG93OworICAgIGV3a1ZpZXdDbGFz
cy0+d2luZG93X2NyZWF0ZSA9IG9uX3dpbmRvd19jcmVhdGU7CisgICAgZXdrVmlld0NsYXNzLT53
aW5kb3dfY2xvc2UgPSBvbl93aW5kb3dfY2xvc2U7CiAKICAgICBFdmFzICpldmFzID0gZXZhc19v
YmplY3RfZXZhc19nZXQod2luZG93LT5lbG1fd2luZG93KTsKICAgICBFdmFzX1NtYXJ0ICpzbWFy
dCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZld2tWaWV3Q2xhc3MtPnNjKTsKQEAgLTEwNDcsNyAr
MTA2Nyw2IEBAIHN0YXRpYyBCcm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0ZShjb25zdCBjaGFy
ICp1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBld2tfc2V0dGluZ3NfcHJlZmVycmVk
X21pbmltdW1fY29udGVudHNfd2lkdGhfc2V0KHNldHRpbmdzLCAwKTsKIAogICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiYXV0aGVudGljYXRpb24s
cmVxdWVzdCIsIG9uX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QsIHdpbmRvdyk7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJjbG9zZSx3aW5kb3ci
LCBvbl9jbG9zZV93aW5kb3csIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxmYWlsZWQiLCBvbl9kb3dubG9hZF9m
YWlsZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRv
dy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxmaW5pc2hlZCIsIG9uX2Rvd25sb2FkX2ZpbmlzaGVkLCB3
aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192
aWV3LCAiZG93bmxvYWQscmVxdWVzdCIsIG9uX2Rvd25sb2FkX3JlcXVlc3QsIHdpbmRvdyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>