<?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>152830</bug_id>
          
          <creation_ts>2016-01-07 02:35:39 -0800</creation_ts>
          <short_desc>[GTK] Cleanup ScrollbarThemeGtk</short_desc>
          <delta_ts>2016-01-11 02:40:37 -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>WebKitGTK</component>
          <version>WebKit Local 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1153385</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-07 02:35:39 -0800</bug_when>
    <thetext>Use a common path for GTK+ 3.19 and previous versions, simplifying the code and removing a lot of ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153386</commentid>
    <comment_count>1</comment_count>
      <attachid>268447</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-07 02:55:26 -0800</bug_when>
    <thetext>Created attachment 268447
Patch

I&apos;ve tested this with GTK+ from current master and with the wk internal jhbuild</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153387</commentid>
    <comment_count>2</comment_count>
      <attachid>268448</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-07 03:08:59 -0800</bug_when>
    <thetext>Created attachment 268448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153407</commentid>
    <comment_count>3</comment_count>
      <attachid>268448</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-07 07:11:01 -0800</bug_when>
    <thetext>Comment on attachment 268448
Patch

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

This looks like a good patch. r- because I have a few questions and I want to see it again before you push it.

I&apos;m a bit concerned that the correctness of these functions will now depend on nobody ever modifying the cached parentStyleContext outside a save()/restore() pair, but I think that is OK.

&gt; Source/WebCore/ChangeLog:10
&gt; +        GtkStyleContext, but when painting cache the newly created one so

Hm, when I read this first I thought, &quot;Yeah, I had been thinking we should try this approach, both here and in RenderThemeGtk.&quot; But after looking at your code, this is a bit different than what I had been considering. I had been thinking we could cache each style context once per function that needs it, that way we don&apos;t have to worry about creating a bunch of unneeded style contexts, and we don&apos;t have to worry about a bunch of unneeded save()/restore() pairs, getting the best of both worlds. You have it cached once globally, and rely on not changing it to avoid save()/restore(). Your approach is sort of a middle ground; you managed to get rid of the save()/restore() using child style contexts that are created on the spot, but have cached the parent context. I think this is fine.

&gt; Source/WebCore/ChangeLog:15
&gt; +        only cached when we create a new GtkStyleContext.

Hm, when I read this I thought &quot;OK that works, nice,&quot; but looking at your code, it seems you never create a new parent style context, so the cached properties are never invalidated. They&apos;re certainly not checked again on state changes. I don&apos;t understand this.

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:177
&gt; +    if (m_cachedStyleContext)

You ignore the orientation parameter all but the first time this function is called, and return the same style context all the time. I think you need two cached style contexts, so that you can return the proper one dependent on orientation.

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:184
&gt; +    gtk_widget_path_iter_set_object_name(path.get(), -1, &quot;scrollbar&quot;);

This is OK, but as a matter of style, I prefer to pass 0 rather than -1.

-1 means &quot;the last widget in the widget path&quot; and in this case that is indeed widget 0, but I prefer to use -1 only when it&apos;s actually more convenient than passing the exact position. For our purposes in ScrollbarThemeGtk and RenderThemeGtk, it&apos;s always easy to pass the exact position, so I would never use -1. E.g. here it&apos;s clear that you want to apply the object name to widget 0, so I would write 0.

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:186
&gt; +    gtk_widget_path_iter_add_class(path.get(), -1, &quot;scrollbar&quot;);

Ditto.

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:188
&gt; +    gtk_widget_path_iter_add_class(path.get(), -1, orientationStyleClass(orientation));

It&apos;s annoying that we need this. According to https://developer.gnome.org/gtk3/unstable/GtkScrollbar.html the scrollbar is not supposed to receive the orientation (horizontal, vertical) style classes, only the positional (left, right, up, down) classes. So in theory, this should go inside the #else portion of the #ifdef above, so that it doesn&apos;t affect GTK+ 3.19. But if I remember correctly, the scrollbar is not drawn at all without these. I think it&apos;s a bug in GTK+, either the theme or the documentation.

Also, again I prefer 0 rather than -1 here.

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:190
&gt; +    gtk_style_context_set_state(styleContext.get(), gtk_widget_path_iter_get_state(path.get(), -1));

Why this line? You have not set any state flags on the widget path, so won&apos;t it be a no-op?

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:210
&gt; +    gtk_widget_path_iter_set_object_name(path.get(), -1, name);

OK, this is a good example of when I would pass -1.

Were you looking at the foreign drawing test in GTK+? Your code looks similar to that (which is fine).

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:-211
&gt; -    gtk_style_context_invalidate(gtkScrollbarStyleContext());

Can you explain why this isn&apos;t needed anymore? Since you have a cached style context always now, I would think we need to remove the conditional and make this call always, not remove it.

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:357
&gt; +    TemporaryChange&lt;GRefPtr&lt;GtkStyleContext&gt;&gt; tempStyleContext(m_cachedStyleContext, getOrCreateStyleContext(scrollbar.orientation()));

I&apos;m confused; this looks like a no-op (because the orientation parameter to getOrCreateStyleContext() is not properly honored except on the first call).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153771</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-07 23:25:37 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 268448 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268448&amp;action=review
&gt; 
&gt; This looks like a good patch. r- because I have a few questions and I want
&gt; to see it again before you push it.

You can ask any question without rejecting the patch.

&gt; I&apos;m a bit concerned that the correctness of these functions will now depend
&gt; on nobody ever modifying the cached parentStyleContext outside a
&gt; save()/restore() pair, but I think that is OK.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        GtkStyleContext, but when painting cache the newly created one so
&gt; 
&gt; Hm, when I read this first I thought, &quot;Yeah, I had been thinking we should
&gt; try this approach, both here and in RenderThemeGtk.&quot; But after looking at
&gt; your code, this is a bit different than what I had been considering. I had
&gt; been thinking we could cache each style context once per function that needs
&gt; it, that way we don&apos;t have to worry about creating a bunch of unneeded style
&gt; contexts, and we don&apos;t have to worry about a bunch of unneeded
&gt; save()/restore() pairs, getting the best of both worlds. You have it cached
&gt; once globally, and rely on not changing it to avoid save()/restore(). Your
&gt; approach is sort of a middle ground; you managed to get rid of the
&gt; save()/restore() using child style contexts that are created on the spot,
&gt; but have cached the parent context. I think this is fine.

The ScrollbarTheme methods are called either to get layout information (mainly scrollbarThickness) or to actually paint. Paint is the one calling all others (paintScrollbarBackground, paintTrackBackground, paintThumb, etc.). What I&apos;m doing is caching the parent style context only for the paint() scope, to avoid creating new style contexts from any other method called from paint(). The style properties we cache are all properties of the parent scrollbar class.

&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        only cached when we create a new GtkStyleContext.
&gt; 
&gt; Hm, when I read this I thought &quot;OK that works, nice,&quot; but looking at your
&gt; code, it seems you never create a new parent style context, so the cached
&gt; properties are never invalidated. They&apos;re certainly not checked again on
&gt; state changes. I don&apos;t understand this.

The context is only cached when painting, the properties are not invalidated, because they are overwritten when a new style context is created, and only used when after calling getOrCreateStyleContext().

&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:177
&gt; &gt; +    if (m_cachedStyleContext)
&gt; 
&gt; You ignore the orientation parameter all but the first time this function is
&gt; called, and return the same style context all the time. I think you need two
&gt; cached style contexts, so that you can return the proper one dependent on
&gt; orientation.

No, that&apos;s on purpose, when the style context is created outside the paint method, we don&apos;t always know the orientation, for example scrollbarThickness doesn&apos;t receive a Scrollbar&amp;. In that case it&apos;s safe to use the default orientation, since we only need to get layout information.

&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:184
&gt; &gt; +    gtk_widget_path_iter_set_object_name(path.get(), -1, &quot;scrollbar&quot;);
&gt; 
&gt; This is OK, but as a matter of style, I prefer to pass 0 rather than -1.
&gt; 
&gt; -1 means &quot;the last widget in the widget path&quot; and in this case that is
&gt; indeed widget 0, but I prefer to use -1 only when it&apos;s actually more
&gt; convenient than passing the exact position. For our purposes in
&gt; ScrollbarThemeGtk and RenderThemeGtk, it&apos;s always easy to pass the exact
&gt; position, so I would never use -1. E.g. here it&apos;s clear that you want to
&gt; apply the object name to widget 0, so I would write 0.

I think -1 is always safer, it allows to reorder things without having to change all values.

&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:186
&gt; &gt; +    gtk_widget_path_iter_add_class(path.get(), -1, &quot;scrollbar&quot;);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:188
&gt; &gt; +    gtk_widget_path_iter_add_class(path.get(), -1, orientationStyleClass(orientation));
&gt; 
&gt; It&apos;s annoying that we need this. According to
&gt; https://developer.gnome.org/gtk3/unstable/GtkScrollbar.html the scrollbar is
&gt; not supposed to receive the orientation (horizontal, vertical) style
&gt; classes, only the positional (left, right, up, down) classes. So in theory,
&gt; this should go inside the #else portion of the #ifdef above, so that it
&gt; doesn&apos;t affect GTK+ 3.19. But if I remember correctly, the scrollbar is not
&gt; drawn at all without these. I think it&apos;s a bug in GTK+, either the theme or
&gt; the documentation.

No, GtkScrollbar inherits from GtkRange that implements GtkOrientable. See _gtk_orientable_set_style_classes(). There&apos;s indeed some specific CSS depending on the orientation for scrollbars in Adwaita, see:

  &amp;.vertical {

    slider {
      margin-left: 1px + $_slider_margin;

      &amp;:dir(rtl) {
        margin-left: $_slider_margin;
        margin-right: 1px + $_slider_margin;
      }
    }

    &amp;.fine-tune slider {
      margin-left: 1px + $_slider_fine_tune_margin;

      &amp;:dir(rtl) {
        margin-left: $_slider_fine_tune_margin;
        margin-right: 1px + $_slider_fine_tune_margin;
      }
    }

    trough {
      border-left-style: solid;

      &amp;:dir(rtl) {
        border-left-style: none;
        border-right-style: solid;
      }
    }
  }


&gt; Also, again I prefer 0 rather than -1 here.

I don&apos;t

&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:190
&gt; &gt; +    gtk_style_context_set_state(styleContext.get(), gtk_widget_path_iter_get_state(path.get(), -1));
&gt; 
&gt; Why this line? You have not set any state flags on the widget path, so won&apos;t
&gt; it be a no-op?

I had a previous version where I passed a state, this looks like a leftover.

&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:210
&gt; &gt; +    gtk_widget_path_iter_set_object_name(path.get(), -1, name);
&gt; 
&gt; OK, this is a good example of when I would pass -1.
&gt; 
&gt; Were you looking at the foreign drawing test in GTK+? Your code looks
&gt; similar to that (which is fine).

Yes.

&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:-211
&gt; &gt; -    gtk_style_context_invalidate(gtkScrollbarStyleContext());
&gt; 
&gt; Can you explain why this isn&apos;t needed anymore? Since you have a cached style
&gt; context always now, I would think we need to remove the conditional and make
&gt; this call always, not remove it.

Because the style context is only cached for the paint() scope, and the theme can&apos;t change in the middle of paint that is all synchronous.

&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:357
&gt; &gt; +    TemporaryChange&lt;GRefPtr&lt;GtkStyleContext&gt;&gt; tempStyleContext(m_cachedStyleContext, getOrCreateStyleContext(scrollbar.orientation()));
&gt; 
&gt; I&apos;m confused; this looks like a no-op (because the orientation parameter to
&gt; getOrCreateStyleContext() is not properly honored except on the first call).

This is the first call. Note that all other methods calling getOrCreateStyleContext() are not caching it, only paint is caching this context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153824</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-08 07:58:02 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; You can ask any question without rejecting the patch.

I really was rejecting this version of the patch. ;) Because...

&gt; The ScrollbarTheme methods are called either to get layout information
&gt; (mainly scrollbarThickness) or to actually paint. Paint is the one calling
&gt; all others (paintScrollbarBackground, paintTrackBackground, paintThumb,
&gt; etc.). What I&apos;m doing is caching the parent style context only for the
&gt; paint() scope, to avoid creating new style contexts from any other method
&gt; called from paint(). The style properties we cache are all properties of the
&gt; parent scrollbar class.

...I did not understand that this cache existed only for the scope of paint(). This invalidates all of my concerns.
 
&gt; No, GtkScrollbar inherits from GtkRange that implements GtkOrientable. See
&gt; _gtk_orientable_set_style_classes(). There&apos;s indeed some specific CSS
&gt; depending on the orientation for scrollbars in Adwaita, see:

Hm, a documentation issue then; the documentation for other widgets mentions this clearly.

&gt; I had a previous version where I passed a state, this looks like a leftover.

OK. This is the only thing that needs fixed.

&gt; This is the first call. Note that all other methods calling
&gt; getOrCreateStyleContext() are not caching it, only paint is caching this
&gt; context.

OK, I understand now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154340</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-11 02:40:37 -0800</bug_when>
    <thetext>Committed r194844: &lt;http://trac.webkit.org/changeset/194844&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268447</attachid>
            <date>2016-01-07 02:55:26 -0800</date>
            <delta_ts>2016-01-07 03:08:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-scrollbar-theme.diff</filename>
            <type>text/plain</type>
            <size>32437</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZDQ0M2VkLi44ZDM4OWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTgg
QEAKKzIwMTYtMDEtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIENsZWFudXAgU2Nyb2xsYmFyVGhlbWVHdGsKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjgzMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBhIGNvbW1vbiBwYXRoIGZv
ciBHVEsrIDMuMTkgYW5kIHByZXZpb3VzIHZlcnNpb25zLCBzaW1wbGlmeWluZworICAgICAgICB0
aGUgY29kZSBhbmQgcmVtb3ZpbmcgYSBsb3Qgb2YgaWZkZWZzLiBVc2UgYWx3YXlzIGEgbmV3Cisg
ICAgICAgIEd0a1N0eWxlQ29udGV4dCwgYnV0IHdoZW4gcGFpbnRpbmcgY2FjaGUgdGhlIG5ld2x5
IGNyZWF0ZWQgb25lIHNvCisgICAgICAgIGFsbCBwYWludCBtZXRob2RzIHVzZSB0aGF0IG9uZS4g
V2Ugd2VyZSBhbHNvIGNhY2hpbmcgc29tZSB0aGVtZQorICAgICAgICBwcm9wZXJ0aWVzIGFzc3Vt
aW5nIHRoZXkgZG9uJ3QgY2hhbmdlIHVubGVzcyB0aGUgdGhlbWUgY2hhbmdlcywKKyAgICAgICAg
YnV0IHNvbWUgb2YgdGhlbSBjYW4gaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGRlcGVuZGluZyBvbiB0
aGUgc3RhdGUsCisgICAgICAgIGZvciBleGFtcGxlLCB3aGVuIGhvdmVyZWQgb3IgcHJlc3NlZC4g
VGhvc2UgcHJvcGVydGllcyBhcmUgbm93CisgICAgICAgIG9ubHkgY2FjaGVkIHdoZW4gd2UgY3Jl
YXRlIGEgbmV3IEd0a1N0eWxlQ29udGV4dC4KKyAgICAgICAgVGhlIG1ldGhvZCB1cGRhdGVTY3Jv
bGxiYXJzRnJhbWVUaGlja25lc3MoKSBoYXMgYWxzbyBiZWVuIHJlbW92ZWQsCisgICAgICAgIHNp
bmNlIHRoZSBTY3JvbGxiYXIgY29uc3RydWN0b3IgYWxyZWFkeSBpbml0aWFsaXplcyB0aGUgZnJh
bWUgcmVjdAorICAgICAgICB1c2luZyB0aGUgc2Nyb2xsYmFyVGhpY2tuZXNzKCkuIFRoaXMgbWV0
aG9kIHdhcyBub3QgZG9pbmcgYW55dGhpbmcKKyAgICAgICAgYW55d2F5LCBzaW5jZSB0aGF0IHdh
cyBjYWxsZWQgb24gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB0aGVtZSwKKyAgICAgICAgd2hlbiB0
aGVyZSB3ZXJlIG5vIHNjcm9sbGJhcnMgcmVnaXN0ZXJlZC4gVGhpcyBhbHNvIG1lYW5zIHdlIG5v
CisgICAgICAgIGxvbmdlciBuZWVkIHRvIHRyYWNrIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIHNj
cm9sbGJhcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KTog
VXNlIHRoZSBjYWNoZWQKKyAgICAgICAgR3RrU3R5bGVDb250ZXh0IGFuZCBwcm9wZXJ0aWVzIG9y
IGNyZWF0ZSBhIG5ldy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpmb3J3
YXJkQnV0dG9uUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVH
dGs6OnRyYWNrUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6b3JpZW50YXRpb25TdHls
ZUNsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpnZXRPckNyZWF0
ZVN0eWxlQ29udGV4dCk6IENyZWF0ZSBhCisgICAgICAgIG5ldyBHdGtTdHlsZUNvbnRleHQgZm9y
IHRoZSBzY3JvbGxiYXIgaWYgdGhlcmUgaXNuJ3QgYSBjYWNoZWQKKyAgICAgICAgb25lLiBBbHNv
IGluaXRpYWxpemUgdGhlIHByb3BlcnRpZXMgdGhhdCBkZXBlbmQgb24gdGhlIHN0YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2hpbGRTdHlsZUNvbnRleHQpOiBDcmVhdGUgYSBuZXcgR3Rr
U3R5bGVDb250ZXh0CisgICAgICAgIGZyb20gYSBwYXJlbnQgb25lLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRoZW1lUHJvcGVydGllcyk6IEdldCB0aGUKKyAg
ICAgICAgcHJvcGVydGllcyB0aGF0IGNhbiBvbmx5IGNoYW5nZSB3aGVuIHRoZSB0aGVtZSBjaGFu
Z2VzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnRodW1iUmVjdCk6IFVz
ZSB0aGUgY2FjaGVkCisgICAgICAgIEd0a1N0eWxlQ29udGV4dCBhbmQgcHJvcGVydGllcyBvciBj
cmVhdGUgYSBuZXcuCisgICAgICAgIChXZWJDb3JlOjphZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJn
aW4pOiBVc2UgYWx3YXlzIHRoZQorICAgICAgICBHdGtTdHlsZUNvbnRleHQgc3RhdGUgaW5zdGVh
ZCBvZiByZWNlaXZpbmcgaXQgYW5kIHNldHRpbmcgaXQgYWdhaW4uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQpOiBHZXQgb3IgY3JlYXRl
CisgICAgICAgIGEgR3RrU3R5bGVDb250ZXh0IGZvciB0aGUgc2Nyb2xsYmFyIGFuZCBjcmVhdGUg
YSBjaGlsZCBvbmUgZm9yIHRoZSB0cm91Z2guCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKTogVXNlIHRoZQorICAgICAgICBjYWNo
ZWQgR3RrU3R5bGVDb250ZXh0IG9yIGNyZWF0ZSBhIG5ldyBvbmUuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYik6IEdldCBvciBjcmVhdGUgYQorICAgICAg
ICBHdGtTdHlsZUNvbnRleHQgZm9yIHRoZSBzY3JvbGxiYXIgYW5kIGNyZWF0ZSBhIGNoaWxkIG9u
ZXMgZm9yCisgICAgICAgIHRyb3VnaCBhbmQgc2xpZGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKTogR2V0IG9yIGNyZWF0ZSBhCisgICAgICAgIEd0
a1N0eWxlQ29udGV4dCBmb3IgdGhlIHNjcm9sbGJhciBhbmQgY3JlYXRlIGEgY2hpbGQgb25lIGZv
ciB0aGUgYnV0dG9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50
KTogQ3JlYXRlIGEgR3RrU3R5bGVDb250ZXh0IGFuZAorICAgICAgICBjYWNoZSBpdCB0ZW1wb3Jh
cmlseSB1c2luZyBUZW1wb3JhcnlDaGFuZ2UgdW50aWwgdGhlIG1ldGhvZCBmaW5pc2hlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MpOiBV
c2UgdGhlIGNhY2hlZAorICAgICAgICBHdGtTdHlsZUNvbnRleHQgYW5kIHByb3BlcnRpZXMgb3Ig
Y3JlYXRlIGEgbmV3LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmJ1dHRv
blNpemUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsu
aDoKKwogMjAxNi0wMS0wNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1BlcmZvcm1hbmNlVGltaW5nXSBEb24ndCBleHBvc2UgdGhlIHJlc3RyaWN0ZWRL
ZXlNYXAoKSBIYXNoTWFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bGJhclRoZW1lR3RrLmNwcAppbmRleCA3MGM1OGYwLi45N2ZiZTU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKQEAgLTMzLDcgKzMz
LDcgQEAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC02NywxOCArNjcsMTkgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1
dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGEKICAgICBpZiAo
cGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBpbnQgeCA9IHNjcm9sbGJhci54KCkg
KyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIGludCB5ID0gc2Nyb2xsYmFyLnkoKSArIG1fdHJv
dWdoQm9yZGVyV2lkdGg7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4
dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCk7CisgICAgaW50IHggPSBzY3JvbGxiYXIueCgp
ICsgbV9jYWNoZWRQcm9wZXJ0aWVzLnRyb3VnaEJvcmRlcldpZHRoOworICAgIGludCB5ID0gc2Ny
b2xsYmFyLnkoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aDsKICAgICBJ
bnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7CiAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvblN0YXJ0UGFydCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKIAogICAgIC8vIEJhY2tCdXR0b25FbmRQYXJ0IChhbHRlcm5h
dGUgYnV0dG9uKQogICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXIueCgpICsgc2Nyb2xs
YmFyLndpZHRoKCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoIC0gKDIgKiBzaXplLndpZHRoKCkpLCB5
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gSW50UmVjdChz
Y3JvbGxiYXIueCgpICsgc2Nyb2xsYmFyLndpZHRoKCkgLSBtX2NhY2hlZFByb3BlcnRpZXMudHJv
dWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUud2lkdGgoKSksIHksIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7CiAKICAgICAvLyBWZXJ0aWNhbFNjcm9sbGJhciBhbHRlcm5hdGUgYnV0dG9u
Ci0gICAgcmV0dXJuIEludFJlY3QoeCwgc2Nyb2xsYmFyLnkoKSArIHNjcm9sbGJhci5oZWlnaHQo
KSAtIG1fdHJvdWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci55KCkg
KyBzY3JvbGxiYXIuaGVpZ2h0KCkgLSBtX2NhY2hlZFByb3BlcnRpZXMudHJvdWdoQm9yZGVyV2lk
dGggLSAoMiAqIHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKICAgICBVTlVTRURfUEFSQU0ocGFy
dCk7CkBAIC05NCwyMyArOTUsMjQgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6Zm9yd2Fy
ZEJ1dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQKICAgICBpZiAo
cGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFy
dCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpOwogICAgIEludFNp
emUgc2l6ZSA9IGJ1dHRvblNpemUoc2Nyb2xsYmFyKTsKICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgeSA9IHNjcm9s
bGJhci55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOworICAgICAgICBpbnQgeSA9IHNjcm9sbGJh
ci55KCkgKyBtX2NhY2hlZFByb3BlcnRpZXMudHJvdWdoQm9yZGVyV2lkdGg7CiAgICAgICAgIGlm
IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0KQotICAgICAgICAgICAgcmV0dXJuIEludFJl
Y3Qoc2Nyb2xsYmFyLngoKSArIHNjcm9sbGJhci53aWR0aCgpIC0gc2l6ZS53aWR0aCgpIC0gbV90
cm91Z2hCb3JkZXJXaWR0aCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci54KCkgKyBzY3JvbGxiYXIud2lkdGgoKSAt
IHNpemUud2lkdGgoKSAtIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aCwgeSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIAogICAgICAgICAvLyBGb3J3YXJkQnV0dG9u
U3RhcnRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQotICAgICAgICByZXR1cm4gSW50UmVjdChzY3Jv
bGxiYXIueCgpICsgbV90cm91Z2hCb3JkZXJXaWR0aCArIHNpemUud2lkdGgoKSwgeSwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFy
LngoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aCArIHNpemUud2lkdGgo
KSwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICB9CiAKICAgICAvLyBWZXJ0
aWNhbFNjcm9sbGJhcgotICAgIGludCB4ID0gc2Nyb2xsYmFyLngoKSArIG1fdHJvdWdoQm9yZGVy
V2lkdGg7CisgICAgaW50IHggPSBzY3JvbGxiYXIueCgpICsgbV9jYWNoZWRQcm9wZXJ0aWVzLnRy
b3VnaEJvcmRlcldpZHRoOwogICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0KQot
ICAgICAgICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxiYXIueSgpICsgc2Nyb2xsYmFyLmhlaWdo
dCgpIC0gc2l6ZS5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci55KCkg
KyBzY3JvbGxiYXIuaGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpIC0gbV9jYWNoZWRQcm9wZXJ0aWVz
LnRyb3VnaEJvcmRlcldpZHRoLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogCiAgICAg
Ly8gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKLSAgICByZXR1cm4g
SW50UmVjdCh4LCBzY3JvbGxiYXIueSgpICsgbV90cm91Z2hCb3JkZXJXaWR0aCArIHNpemUuaGVp
Z2h0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEludFJlY3Qo
eCwgc2Nyb2xsYmFyLnkoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aCAr
IHNpemUuaGVpZ2h0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwogICAgIFVOVVNFRF9QQVJBTShwYXJ0KTsKQEAgLTEy
MSwxMCArMTIzLDExIEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25S
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0CiBJbnRSZWN0IFNjcm9sbGJh
clRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCiB7CiAjaWZu
ZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxl
Q29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCk7CiAgICAgLy8gVGhlIHBhZGRpbmcg
YWxvbmcgdGhlIHRodW1iIG1vdmVtZW50IGF4aXMgaW5jbHVkZXMgdGhlIHRyb3VnaCBib3JkZXIK
ICAgICAvLyBwbHVzIHRoZSBzaXplIG9mIHN0ZXBwZXIgc3BhY2luZyAodGhlIHNwYWNlIGJldHdl
ZW4gdGhlIHN0ZXBwZXIgYW5kCiAgICAgLy8gdGhlIHBsYWNlIHdoZXJlIHRoZSB0aHVtYiBzdG9w
cykuIFRoZXJlIGlzIG9mdGVuIG5vIHN0ZXBwZXIgc3BhY2luZy4KLSAgICBpbnQgbW92ZW1lbnRB
eGlzUGFkZGluZyA9IG1fdHJvdWdoQm9yZGVyV2lkdGggKyBtX3N0ZXBwZXJTcGFjaW5nOworICAg
IGludCBtb3ZlbWVudEF4aXNQYWRkaW5nID0gbV9jYWNoZWRQcm9wZXJ0aWVzLnRyb3VnaEJvcmRl
cldpZHRoICsgbV9jYWNoZWRQcm9wZXJ0aWVzLnN0ZXBwZXJTcGFjaW5nOwogCiAgICAgLy8gVGhl
IGZhdG5lc3Mgb2YgdGhlIHNjcm9sbGJhciBvbiB0aGUgbm9uLW1vdmVtZW50IGF4aXMuCiAgICAg
aW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXIuY29udHJvbFNpemUo
KSk7CkBAIC0xMzIsMTcgKzEzNSwxNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFj
a1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCiAgICAgaW50IHN0YXJ0QnV0dG9uc09m
ZnNldCA9IDA7CiAgICAgaW50IGJ1dHRvbnNXaWR0aCA9IDA7CiAgICAgaWYgKG1faGFzRm9yd2Fy
ZEJ1dHRvblN0YXJ0UGFydCkgewotICAgICAgICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gbV9zdGVw
cGVyU2l6ZTsKLSAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7CisgICAgICAg
IHN0YXJ0QnV0dG9uc09mZnNldCArPSBtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNpemU7Cisg
ICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNpemU7CiAg
ICAgfQogICAgIGlmIChtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQpIHsKLSAgICAgICAgc3RhcnRC
dXR0b25zT2Zmc2V0ICs9IG1fc3RlcHBlclNpemU7Ci0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBt
X3N0ZXBwZXJTaXplOworICAgICAgICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gbV9jYWNoZWRQcm9w
ZXJ0aWVzLnN0ZXBwZXJTaXplOworICAgICAgICBidXR0b25zV2lkdGggKz0gbV9jYWNoZWRQcm9w
ZXJ0aWVzLnN0ZXBwZXJTaXplOwogICAgIH0KICAgICBpZiAobV9oYXNCYWNrQnV0dG9uRW5kUGFy
dCkKLSAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7CisgICAgICAgIGJ1dHRv
bnNXaWR0aCArPSBtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNpemU7CiAgICAgaWYgKG1faGFz
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQpCi0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJT
aXplOworICAgICAgICBidXR0b25zV2lkdGggKz0gbV9jYWNoZWRQcm9wZXJ0aWVzLnN0ZXBwZXJT
aXplOwogCiAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKICAgICAgICAgLy8gT25jZSB0aGUgc2Nyb2xsYmFyIGJlY29tZXMgc21hbGxlciB0
aGFuIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlCkBAIC0xNjQsNDIgKzE2Nyw1NyBAQCBJbnRSZWN0
IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wp
CiB9CiAKICNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hh
ciogb3JpZW50YXRpb25TdHlsZUNsYXNzKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQoreworICAgIHJldHVybiBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/ICJ2ZXJ0
aWNhbCIgOiAiaG9yaXpvbnRhbCI7Cit9CiAKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMTks
IDIpCi0vLyBDdXJyZW50bHkgd2UgdXNlIGEgc3RhdGljIEd0a1N0eWxlQ29udGV4dCBmb3IgR1RL
KyA8IDMuMTksIGFuZCBhIGJ1bmNoIG9mIHVuaXF1ZQotLy8gR3RrU3R5bGVDb250ZXh0cyBmb3Ig
R1RLKyA+PSAzLjE5LiBUaGlzIGlzIGNyYXp5IGFuZCBkZWZpbml0ZWx5IHNob3VsZCBub3QgYmUg
bmVjZXNzYXJ5LCBidXQgSQotLy8gY291bGRuJ3QgZmluZCBhbnkgb3RoZXIgd2F5IHRvIG5vdCBi
cmVhayBvbmUgdmVyc2lvbiBvciB0aGUgb3RoZXIuIElkZWFsbHkgb25lIG9mIHRoZSB0d28KLS8v
IHBlb3BsZSBvbiB0aGUgcGxhbmV0IHdobyByZWFsbHkgdW5kZXJzdGFuZCBHVEsrIHN0eWxlcyB3
b3VsZCBmaXggdGhpcy4KLWNsYXNzIFNjcm9sbGJhclN0eWxlQ29udGV4dCB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyU3R5bGVDb250ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsYmFyU3R5bGVDb250ZXh0KCkKLSAgICAgICAgOiBt
X2NvbnRleHQoYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKSkKLSAgICB7Ci0gICAg
ICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7Ci0gICAgICAg
IGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCBHVEtfVFlQRV9TQ1JPTExCQVIpOwot
ICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxF
X0NMQVNTX1NDUk9MTEJBUik7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKG1f
Y29udGV4dC5nZXQoKSwgcGF0aCk7Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgp
OwotICAgIH0KK0dSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBTY3JvbGxiYXJUaGVtZUd0azo6Z2V0
T3JDcmVhdGVTdHlsZUNvbnRleHQoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7
CisgICAgaWYgKG1fY2FjaGVkU3R5bGVDb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jYWNoZWRT
dHlsZUNvbnRleHQ7CiAKLSAgICB+U2Nyb2xsYmFyU3R5bGVDb250ZXh0KCkKLSAgICB7Ci0gICAg
fQorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBhZG9wdEdSZWYo
Z3RrX3N0eWxlX2NvbnRleHRfbmV3KCkpOworICAgIEdSZWZQdHI8R3RrV2lkZ2V0UGF0aD4gcGF0
aCA9IGFkb3B0R1JlZihndGtfd2lkZ2V0X3BhdGhfbmV3KCkpOworICAgIGd0a193aWRnZXRfcGF0
aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ1JPTExCQVIpOworI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDE5LCAyKQorICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmpl
Y3RfbmFtZShwYXRoLmdldCgpLCAtMSwgInNjcm9sbGJhciIpOworI2Vsc2UKKyAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJzY3JvbGxiYXIiKTsKKyNl
bmRpZgorICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwg
b3JpZW50YXRpb25TdHlsZUNsYXNzKG9yaWVudGF0aW9uKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3BhdGgoc3R5bGVDb250ZXh0LmdldCgpLCBwYXRoLmdldCgpKTsKKyAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfc3RhdGUoc3R5bGVDb250ZXh0LmdldCgpLCBndGtfd2lkZ2V0X3BhdGhf
aXRlcl9nZXRfc3RhdGUocGF0aC5nZXQoKSwgLTEpKTsKIAotICAgIEd0a1N0eWxlQ29udGV4dCog
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZSgKKyAgICAgICAgc3R5bGVDb250ZXh0LmdldCgpLAorICAgICAg
ICAic2xpZGVyLXdpZHRoIiwgJm1fY2FjaGVkUHJvcGVydGllcy50aHVtYkZhdG5lc3MsCisgICAg
ICAgICJ0cm91Z2gtYm9yZGVyIiwgJm1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0
aCwKKyAgICAgICAgInN0ZXBwZXItc2l6ZSIsICZtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNp
emUsCisgICAgICAgICJzdGVwcGVyLXNwYWNpbmciLCAmbV9jYWNoZWRQcm9wZXJ0aWVzLnN0ZXBw
ZXJTcGFjaW5nLAorICAgICAgICAidHJvdWdoLXVuZGVyLXN0ZXBwZXJzIiwgJm1fY2FjaGVkUHJv
cGVydGllcy50cm91Z2hVbmRlclN0ZXBwZXJzLAorICAgICAgICBudWxscHRyKTsKIAotcHJpdmF0
ZToKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gbV9jb250ZXh0OwotfTsKKyAgICByZXR1
cm4gc3R5bGVDb250ZXh0OworfQogCi1zdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBndGtTY3JvbGxi
YXJTdHlsZUNvbnRleHQoKQorc3RhdGljIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjcmVhdGVD
aGlsZFN0eWxlQ29udGV4dChHdGtTdHlsZUNvbnRleHQqIHBhcmVudCwgY29uc3QgY2hhciogbmFt
ZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2Nyb2xsYmFyU3R5bGVDb250ZXh0PiBz
dHlsZUNvbnRleHQ7Ci0gICAgcmV0dXJuIHN0eWxlQ29udGV4dC5nZXQoKS5jb250ZXh0KCk7Ci19
CisgICAgQVNTRVJUKHBhcmVudCk7CisgICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0g
YWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9jb3B5KGd0a19zdHlsZV9jb250ZXh0X2dldF9wYXRo
KHBhcmVudCkpKTsKKyAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwg
R1RLX1RZUEVfU0NST0xMQkFSKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKKyAg
ICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsIG5h
bWUpOworI2Vsc2UKKyAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQo
KSwgLTEsIG5hbWUpOwogI2VuZGlmCiAKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5
bGVDb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfcGF0aChzdHlsZUNvbnRleHQuZ2V0KCksIHBhdGguZ2V0KCkpOwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShzdHlsZUNvbnRleHQuZ2V0KCksIGd0a193
aWRnZXRfcGF0aF9pdGVyX2dldF9zdGF0ZShwYXRoLmdldCgpLCAtMSkpOworICAgIHJldHVybiBz
dHlsZUNvbnRleHQ7Cit9CisKIFNjcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygp
CiB7CiAgICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7CkBAIC0yMDcsMTExICsyMjUsMzcgQEAg
U2Nyb2xsYmFyVGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3RrKCkKIAogdm9pZCBTY3JvbGxiYXJU
aGVtZUd0azo6dGhlbWVDaGFuZ2VkKCkKIHsKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMTks
IDIpCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShndGtTY3JvbGxiYXJTdHlsZUNv
bnRleHQoKSk7Ci0jZW5kaWYKICAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKIH0KIAogdm9p
ZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKIHsKLSNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5
bGVDb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKLSAgICBHUmVm
UHRyPEd0a1dpZGdldFBhdGg+IHBhdGggPSBhZG9wdEdSZWYoZ3RrX3dpZGdldF9wYXRoX25ldygp
KTsKLQotICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQ
RV9TQ1JPTExCQVIpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShw
YXRoLmdldCgpLCAwLCAic2Nyb2xsYmFyIik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRf
cGF0aChzdHlsZUNvbnRleHQuZ2V0KCksIHBhdGguZ2V0KCkpOwotI2Vsc2UKLSAgICBHUmVmUHRy
PEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ3RrU2Nyb2xsYmFyU3R5bGVDb250ZXh0
KCk7Ci0jZW5kaWYKLQorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQg
PSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9z
dHlsZSgKICAgICAgICAgc3R5bGVDb250ZXh0LmdldCgpLAogICAgICAgICAibWluLXNsaWRlci1s
ZW5ndGgiLCAmbV9taW5UaHVtYkxlbmd0aCwKLSAgICAgICAgInNsaWRlci13aWR0aCIsICZtX3Ro
dW1iRmF0bmVzcywKLSAgICAgICAgInRyb3VnaC1ib3JkZXIiLCAmbV90cm91Z2hCb3JkZXJXaWR0
aCwKLSAgICAgICAgInN0ZXBwZXItc2l6ZSIsICZtX3N0ZXBwZXJTaXplLAotICAgICAgICAic3Rl
cHBlci1zcGFjaW5nIiwgJm1fc3RlcHBlclNwYWNpbmcsCi0gICAgICAgICJ0cm91Z2gtdW5kZXIt
c3RlcHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAogICAgICAgICAiaGFzLWJhY2t3YXJk
LXN0ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0LAogICAgICAgICAiaGFzLWZvcndh
cmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAogICAgICAgICAiaGFzLXNl
Y29uZGFyeS1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRvbkVuZFBhcnQsCiAgICAg
ICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25T
dGFydFBhcnQsCiAgICAgICAgIG51bGxwdHIpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRo
aWNrbmVzcygpOwotfQotCi10eXBlZGVmIEhhc2hTZXQ8U2Nyb2xsYmFyKj4gU2Nyb2xsYmFyTWFw
OwotCi1zdGF0aWMgU2Nyb2xsYmFyTWFwJiBzY3JvbGxiYXJNYXAoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTY3JvbGxiYXJNYXA+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi12
b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXImIHNjcm9s
bGJhcikKLXsKLSAgICBzY3JvbGxiYXJNYXAoKS5hZGQoJnNjcm9sbGJhcik7Ci19Ci0KLXZvaWQg
U2Nyb2xsYmFyVGhlbWVHdGs6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxi
YXIpCi17Ci0gICAgc2Nyb2xsYmFyTWFwKCkucmVtb3ZlKCZzY3JvbGxiYXIpOwotfQotCi12b2lk
IFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKQotewot
ICAgIGlmIChzY3JvbGxiYXJNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFVwZGF0ZSB0aGUgdGhpY2tuZXNzIG9mIGV2ZXJ5IGludGVyaW9yIGZyYW1lIHNjcm9sbGJh
ciB3aWRnZXQuIFRoZQotICAgIC8vIHBsYXRmb3JtLWluZGVwZW5kZW50IHNjcm9sbGJhciB0aGVt
IGNvZGUgaXNuJ3QgeWV0IHNtYXJ0IGVub3VnaCB0byBnZXQKLSAgICAvLyB0aGlzIGluZm9ybWF0
aW9uIHdoZW4gaXQgcGFpbnRzLgotICAgIGZvciAoY29uc3QgYXV0byYgc2Nyb2xsYmFyIDogc2Ny
b2xsYmFyTWFwKCkpIHsKLSAgICAgICAgLy8gVG9wLWxldmVsIHNjcm9sbGJhciBpLmUuIHNjcm9s
bGJhcnMgd2hvIGhhdmUgYSBwYXJlbnQgU2Nyb2xsVmlldwotICAgICAgICAvLyB3aXRoIG5vIHBh
cmVudCBhcmUgbmF0aXZlLCBhbmQgdGh1cyBkbyBub3QgbmVlZCB0byBiZSByZXNpemVkLgotICAg
ICAgICBpZiAoIXNjcm9sbGJhci0+cGFyZW50KCkgfHwgIXNjcm9sbGJhci0+cGFyZW50KCktPnBh
cmVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGludCB0aGlja25lc3MgPSBz
Y3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAgICAgICAgaWYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAg
ICAgICAgc2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCBzY3JvbGxiYXItPnBhcmVu
dCgpLT5oZWlnaHQoKSAtIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT53aWR0aCgpLCB0aGlja25lc3Mp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50
UmVjdChzY3JvbGxiYXItPnBhcmVudCgpLT53aWR0aCgpIC0gdGhpY2tuZXNzLCAwLCB0aGlja25l
c3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKLSAgICB9CiB9CiAKIEludFJlY3QgU2Nyb2xsYmFy
VGhlbWVHdGs6OnRodW1iUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
dW5jb25zdHJhaW5lZFRyYWNrUmVjdCkKIHsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4g
c3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFyLm9yaWVudGF0
aW9uKCkpOwogICAgIEludFJlY3QgdHJhY2tSZWN0ID0gY29uc3RyYWluVHJhY2tSZWN0VG9UcmFj
a1BpZWNlcyhzY3JvbGxiYXIsIHVuY29uc3RyYWluZWRUcmFja1JlY3QpOwogICAgIGludCB0aHVt
YlBvcyA9IHRodW1iUG9zaXRpb24oc2Nyb2xsYmFyKTsKICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
dHJhY2tSZWN0LngoKSArIHRodW1iUG9zLCB0cmFja1JlY3QueSgpICsgKHRyYWNrUmVjdC5oZWln
aHQoKSAtIG1fdGh1bWJGYXRuZXNzKSAvIDIsIHRodW1iTGVuZ3RoKHNjcm9sbGJhciksIG1fdGh1
bWJGYXRuZXNzKTsgCisgICAgICAgIHJldHVybiBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVt
YlBvcywgdHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSBtX2NhY2hlZFByb3Bl
cnRpZXMudGh1bWJGYXRuZXNzKSAvIDIsIHRodW1iTGVuZ3RoKHNjcm9sbGJhciksIG1fY2FjaGVk
UHJvcGVydGllcy50aHVtYkZhdG5lc3MpOwogCiAgICAgLy8gVmVydGljYWxTY3JvbGxiYXIKLSAg
ICByZXR1cm4gSW50UmVjdCh0cmFja1JlY3QueCgpICsgKHRyYWNrUmVjdC53aWR0aCgpIC0gbV90
aHVtYkZhdG5lc3MpIC8gMiwgdHJhY2tSZWN0LnkoKSArIHRodW1iUG9zLCBtX3RodW1iRmF0bmVz
cywgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIEludFJlY3QodHJhY2tSZWN0
LngoKSArICh0cmFja1JlY3Qud2lkdGgoKSAtIG1fY2FjaGVkUHJvcGVydGllcy50aHVtYkZhdG5l
c3MpIC8gMiwgdHJhY2tSZWN0LnkoKSArIHRodW1iUG9zLCBtX2NhY2hlZFByb3BlcnRpZXMudGh1
bWJGYXRuZXNzLCB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKTsKIH0KIAotCi1zdGF0aWMgY29uc3Qg
Y2hhciogb3JpZW50YXRpb25TdHlsZUNsYXNzKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQotewotICAgIHJldHVybiBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/ICJ2
ZXJ0aWNhbCIgOiAiaG9yaXpvbnRhbCI7Ci19Ci0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywg
MTksIDIpCi1zdGF0aWMgdm9pZCBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMoR3Rr
U3R5bGVDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
LXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NM
QVNTX1NDUk9MTEJBUik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQs
IG9yaWVudGF0aW9uU3R5bGVDbGFzcyhvcmllbnRhdGlvbikpOwotfQotI2VuZGlmCi0KLXN0YXRp
YyB2b2lkIGFkanVzdFJlY3RBY2NvcmRpbmdUb01hcmdpbihHdGtTdHlsZUNvbnRleHQqIGNvbnRl
eHQsIEd0a1N0YXRlRmxhZ3Mgc3RhdGUsIEludFJlY3QmIHJlY3QpCitzdGF0aWMgdm9pZCBhZGp1
c3RSZWN0QWNjb3JkaW5nVG9NYXJnaW4oR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBJbnRSZWN0
JiByZWN0KQogewogICAgIEd0a0JvcmRlciBtYXJnaW47Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X3N0YXRlKGNvbnRleHQsIHN0YXRlKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfbWFy
Z2luKGNvbnRleHQsIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0KSwgJm1hcmdp
bik7CiAgICAgcmVjdC5tb3ZlKG1hcmdpbi5sZWZ0LCBtYXJnaW4ucmlnaHQpOwogICAgIHJlY3Qu
Y29udHJhY3QobWFyZ2luLmxlZnQgKyBtYXJnaW4ucmlnaHQsIG1hcmdpbi50b3AgKyBtYXJnaW4u
Ym90dG9tKTsKQEAgLTMxOSw5NyArMjYzLDM0IEBAIHN0YXRpYyB2b2lkIGFkanVzdFJlY3RBY2Nv
cmRpbmdUb01hcmdpbihHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEd0a1N0YXRlRmxhZ3MKIAog
dm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFyZW50U3R5bGVDb250ZXh0ID0gZ2V0
T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpOwogICAgIC8vIFBh
aW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHBy
b3BlcnR5IGlzIHRydWUsIHRoaXMKICAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0
aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQogICAg
IC8vIHRyYWNrIHJlY3QuCiAgICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsKLSAg
ICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzKQorICAgIGlmIChtX2NhY2hlZFByb3BlcnRpZXMu
dHJvdWdoVW5kZXJTdGVwcGVycykKICAgICAgICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0
KHNjcm9sbGJhci54KCksIHNjcm9sbGJhci55KCksIHNjcm9sbGJhci53aWR0aCgpLCBzY3JvbGxi
YXIuaGVpZ2h0KCkpOwogCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgR1Jl
ZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGFkb3B0R1JlZihndGtfc3R5bGVf
Y29udGV4dF9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0gYWRvcHRH
UmVmKGd0a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5k
X3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKLSAgICBndGtfd2lkZ2V0X3Bh
dGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMCwgInNjcm9sbGJhciIpOwotICAg
IGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAwLCBvcmllbnRhdGlv
blN0eWxlQ2xhc3Moc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpKTsKLQotICAgIGd0a193aWRnZXRf
cGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ1JPTExCQVIpOwotICAgIGd0
a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAxLCAidHJvdWdo
Iik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChzdHlsZUNvbnRleHQuZ2V0KCks
IHBhdGguZ2V0KCkpOwotI2Vsc2UKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVD
b250ZXh0ID0gZ3RrU2Nyb2xsYmFyU3R5bGVDb250ZXh0KCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2F2ZShzdHlsZUNvbnRleHQuZ2V0KCkpOwotCi0gICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNv
bnRleHRDbGFzc2VzKHN0eWxlQ29udGV4dC5nZXQoKSwgc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkp
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhzdHlsZUNvbnRleHQuZ2V0KCksIEdU
S19TVFlMRV9DTEFTU19UUk9VR0gpOwotI2VuZGlmCi0KLSAgICBhZGp1c3RSZWN0QWNjb3JkaW5n
VG9NYXJnaW4oc3R5bGVDb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigw
KSwgZnVsbFNjcm9sbGJhclJlY3QpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHls
ZUNvbnRleHQgPSBjcmVhdGVDaGlsZFN0eWxlQ29udGV4dChwYXJlbnRTdHlsZUNvbnRleHQuZ2V0
KCksICJ0cm91Z2giKTsKKyAgICBhZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJnaW4oc3R5bGVDb250
ZXh0LmdldCgpLCBmdWxsU2Nyb2xsYmFyUmVjdCk7CiAgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5k
KHN0eWxlQ29udGV4dC5nZXQoKSwgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgZnVs
bFNjcm9sbGJhclJlY3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3JvbGxiYXJS
ZWN0LndpZHRoKCksIGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKICAgICBndGtfcmVuZGVy
X2ZyYW1lKHN0eWxlQ29udGV4dC5nZXQoKSwgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgZnVsbFNjcm9sbGJhclJlY3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3Jv
bGxiYXJSZWN0LndpZHRoKCksIGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKLQotI2lmICFH
VEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3Jl
KHN0eWxlQ29udGV4dC5nZXQoKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Ny
b2xsYmFyJiBzY3JvbGxiYXIpCiB7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0g
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGFkb3B0R1JlZihndGtf
c3R5bGVfY29udGV4dF9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0g
YWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhf
YXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKLSAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMCwgInNjcm9sbGJhciIp
OwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAwLCBvcmll
bnRhdGlvblN0eWxlQ2xhc3Moc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpKTsKLQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9wYXRoKHN0eWxlQ29udGV4dC5nZXQoKSwgcGF0aC5nZXQoKSk7Ci0j
ZWxzZQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBndGtTY3Jv
bGxiYXJTdHlsZUNvbnRleHQoKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKHN0eWxlQ29u
dGV4dC5nZXQoKSk7Ci0KLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMoc3R5
bGVDb250ZXh0LmdldCgpLCBzY3JvbGxiYXIub3JpZW50YXRpb24oKSk7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKHN0eWxlQ29udGV4dC5nZXQoKSwgInNjcm9sbGVkLXdpbmRvdyIp
OwotI2VuZGlmCi0KKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0g
Z2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpOwogICAgIGd0
a19yZW5kZXJfZnJhbWUoc3R5bGVDb250ZXh0LmdldCgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpLCBzY3JvbGxiYXIueCgpLCBzY3JvbGxiYXIueSgpLCBzY3JvbGxiYXIud2lkdGgo
KSwgc2Nyb2xsYmFyLmhlaWdodCgpKTsKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwg
MikKLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHN0eWxlQ29udGV4dC5nZXQoKSk7Ci0j
ZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIEdSZWZQdHI8R3RrU3R5
bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX3N0eWxlX2NvbnRleHRfbmV3
KCkpOwotICAgIEdSZWZQdHI8R3RrV2lkZ2V0UGF0aD4gcGF0aCA9IGFkb3B0R1JlZihndGtfd2lk
Z2V0X3BhdGhfbmV3KCkpOwotCi0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgu
Z2V0KCksIEdUS19UWVBFX1NDUk9MTEJBUik7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0
X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJzY3JvbGxiYXIiKTsKLSAgICBndGtfd2lkZ2V0
X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgMCwgb3JpZW50YXRpb25TdHlsZUNsYXNz
KHNjcm9sbGJhci5vcmllbnRhdGlvbigpKSk7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5k
X3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKLSAgICBndGtfd2lkZ2V0X3Bh
dGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMSwgInRyb3VnaCIpOwotCi0gICAg
Z3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1NDUk9MTEJB
Uik7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCks
IDIsICJzbGlkZXIiKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKHN0eWxlQ29u
dGV4dC5nZXQoKSwgcGF0aC5nZXQoKSk7Ci0jZWxzZQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBzdHlsZUNvbnRleHQgPSBndGtTY3JvbGxiYXJTdHlsZUNvbnRleHQoKTsKLSAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKHN0eWxlQ29udGV4dC5nZXQoKSk7Ci0jZW5kaWYKLQogICAgIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCk7
Ci0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIGFwcGx5U2Nyb2xsYmFyU3R5
bGVDb250ZXh0Q2xhc3NlcyhzdHlsZUNvbnRleHQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Moc3R5bGVDb250ZXh0LmdldCgpLCBHVEtfU1RZTEVf
Q0xBU1NfU0xJREVSKTsKLSNlbmRpZgorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJl
bnRTdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChvcmllbnRhdGlvbik7Cisg
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHRyb3VnaFN0eWxlQ29udGV4dCA9IGNyZWF0ZUNo
aWxkU3R5bGVDb250ZXh0KHBhcmVudFN0eWxlQ29udGV4dC5nZXQoKSwgInRyb3VnaCIpOworICAg
IEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBjcmVhdGVDaGlsZFN0eWxl
Q29udGV4dCh0cm91Z2hTdHlsZUNvbnRleHQuZ2V0KCksICJzbGlkZXIiKTsKIAotICAgIGd1aW50
IGZsYWdzID0gMDsKKyAgICB1bnNpZ25lZCBmbGFncyA9IDA7CiAgICAgaWYgKHNjcm9sbGJhci5w
cmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZM
QUdfQUNUSVZFOwogICAgIGlmIChzY3JvbGxiYXIuaG92ZXJlZFBhcnQoKSA9PSBUaHVtYlBhcnQp
CkBAIC00MTcsNDAgKzI5OCwxOCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1i
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYQogICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9zdGF0ZShzdHlsZUNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0
a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CiAKICAgICBJbnRSZWN0IHRodW1iUmVjdChyZWN0KTsKLSAg
ICBhZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJnaW4oc3R5bGVDb250ZXh0LmdldCgpLCBzdGF0aWNf
Y2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncyksIHRodW1iUmVjdCk7CisgICAgYWRqdXN0UmVjdEFj
Y29yZGluZ1RvTWFyZ2luKHN0eWxlQ29udGV4dC5nZXQoKSwgdGh1bWJSZWN0KTsKICAgICBndGtf
cmVuZGVyX3NsaWRlcihzdHlsZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIHRodW1iUmVjdC54KCksIHRodW1iUmVjdC55KCksIHRodW1iUmVjdC53aWR0aCgp
LCB0aHVtYlJlY3QuaGVpZ2h0KCksCiAgICAgICAgIG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Ny
b2xsYmFyID8gR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9OX0hPUkla
T05UQUwpOwotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIGd0a19zdHls
ZV9jb250ZXh0X3Jlc3RvcmUoc3R5bGVDb250ZXh0LmdldCgpKTsKLSNlbmRpZgogfQogCiB2b2lk
IFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0
IHBhcnQpCiB7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgR1JlZlB0cjxH
dGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGFkb3B0R1JlZihndGtfc3R5bGVfY29udGV4
dF9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0gYWRvcHRHUmVmKGd0
a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUo
cGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfaXRl
cl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMCwgInNjcm9sbGJhciIpOwotICAgIGd0a193
aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAwLCBvcmllbnRhdGlvblN0eWxl
Q2xhc3Moc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpKTsKLQotICAgIGd0a193aWRnZXRfcGF0aF9h
cHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ1JPTExCQVIpOwotICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAxLCAiYnV0dG9uIik7Ci0K
LSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChzdHlsZUNvbnRleHQuZ2V0KCksIHBhdGgu
Z2V0KCkpOwotI2Vsc2UKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0
ID0gZ3RrU2Nyb2xsYmFyU3R5bGVDb250ZXh0KCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2
ZShzdHlsZUNvbnRleHQuZ2V0KCkpOwotI2VuZGlmCi0KICAgICBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiA9IHNjcm9sbGJhci5vcmllbnRhdGlvbigpOwotI2lmICFHVEtfQ0hFQ0tf
VkVSU0lPTigzLCAxOSwgMikKLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMo
c3R5bGVDb250ZXh0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0jZW5kaWYKKyAgICBHUmVmUHRyPEd0
a1N0eWxlQ29udGV4dD4gcGFyZW50U3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRl
eHQob3JpZW50YXRpb24pOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRl
eHQgPSBjcmVhdGVDaGlsZFN0eWxlQ29udGV4dChwYXJlbnRTdHlsZUNvbnRleHQuZ2V0KCksICJi
dXR0b24iKTsKIAotICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICB1bnNpZ25lZCBmbGFncyA9IDA7
CiAgICAgaWYgKChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLmN1cnJl
bnRQb3MoKSkKICAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xs
YmFyLmN1cnJlbnRQb3MoKSkKICAgICAgICAgfHwgKEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBh
cnQgJiYgc2Nyb2xsYmFyLmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXIubWF4aW11bSgpKQpAQCAt
NDYzLDEwICszMjIsNiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYgogICAgICAgICBmbGFncyB8
PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRf
c3RhdGUoc3R5bGVDb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFn
cykpOwogCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhzdHlsZUNvbnRleHQuZ2V0KCksIEdUS19TVFlMRV9DTEFTU19CVVRU
T04pOwotI2VuZGlmCi0KICAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoc3R5bGVDb250ZXh0Lmdl
dCgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgZ3RrX3JlbmRlcl9mcmFtZShzdHls
ZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIApAQCAtNDkxLDEwICsz
NDYsNiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYgogICAgICAgICBhbmdsZSA9IChwYXJ0ID09
IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkg
PyBHX1BJIC8gMiA6IDMgKiAoR19QSSAvIDIpOwogCiAgICAgZ3RrX3JlbmRlcl9hcnJvdyhzdHls
ZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGFuZ2xlLCBh
cnJvd1BvaW50LngoKSwgYXJyb3dQb2ludC55KCksIGFycm93U2l6ZSk7Ci0KLSNpZiAhR1RLX0NI
RUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShzdHls
ZUNvbnRleHQuZ2V0KCkpOwotI2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBh
aW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKQEAgLTUwMiw2ICszNTMsOCBAQCBib29sIFNj
cm9sbGJhclRoZW1lR3RrOjpwYWludChTY3JvbGxiYXImIHNjcm9sbGJhciwgR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbgogICAgIGlmIChncmFwaGljc0NvbnRleHQucGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBUZW1wb3JhcnlDaGFuZ2U8R1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+PiB0ZW1wU3R5bGVDb250ZXh0KG1fY2FjaGVkU3R5bGVDb250ZXh0
LCBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChzY3JvbGxiYXIub3JpZW50YXRpb24oKSkpOworCiAg
ICAgLy8gQ3JlYXRlIHRoZSBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYmFzZWQgb24gdGhlIGRh
bWFnZVJlY3QKICAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgc2Nyb2xsTWFzayA9IE5vUGFy
dDsKIApAQCAtNTI4LDcgKzM4MSw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KFNj
cm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAgaWYg
KGRhbWFnZVJlY3QuaW50ZXJzZWN0cyh0cmFja1BhaW50UmVjdCkpCiAgICAgICAgIHNjcm9sbE1h
c2sgfD0gVHJhY2tCR1BhcnQ7CiAKLSAgICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzICYmIChz
Y3JvbGxNYXNrICYgQmFja0J1dHRvblN0YXJ0UGFydAorICAgIGlmIChtX2NhY2hlZFByb3BlcnRp
ZXMudHJvdWdoVW5kZXJTdGVwcGVycyAmJiAoc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25TdGFydFBh
cnQKICAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uRW5kUGFydAogICAgICAg
ICAgICAgfHwgc2Nyb2xsTWFzayAmIEZvcndhcmRCdXR0b25TdGFydFBhcnQKICAgICAgICAgICAg
IHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uRW5kUGFydCkpCkBAIC01NzIsMTYgKzQyNSwx
OCBAQCBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJh
ciYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudAogCiBpbnQgU2Nyb2xsYmFyVGhlbWVHdGs6OnNj
cm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKIHsKLSAgICByZXR1cm4gbV90
aHVtYkZhdG5lc3MgKyAobV90cm91Z2hCb3JkZXJXaWR0aCAqIDIpOworICAgIEdSZWZQdHI8R3Rr
U3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpOwor
ICAgIHJldHVybiBtX2NhY2hlZFByb3BlcnRpZXMudGh1bWJGYXRuZXNzICsgKG1fY2FjaGVkUHJv
cGVydGllcy50cm91Z2hCb3JkZXJXaWR0aCAqIDIpOwogfQogCiBJbnRTaXplIFNjcm9sbGJhclRo
ZW1lR3RrOjpidXR0b25TaXplKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQogeworICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChz
Y3JvbGxiYXIub3JpZW50YXRpb24oKSk7CiAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50U2l6ZShtX3RodW1iRmF0
bmVzcywgbV9zdGVwcGVyU2l6ZSk7CisgICAgICAgIHJldHVybiBJbnRTaXplKG1fY2FjaGVkUHJv
cGVydGllcy50aHVtYkZhdG5lc3MsIG1fY2FjaGVkUHJvcGVydGllcy5zdGVwcGVyU2l6ZSk7CiAK
ICAgICAvLyBIb3Jpem9udGFsU2Nyb2xsYmFyCi0gICAgcmV0dXJuIEludFNpemUobV9zdGVwcGVy
U2l6ZSwgbV90aHVtYkZhdG5lc3MpOworICAgIHJldHVybiBJbnRTaXplKG1fY2FjaGVkUHJvcGVy
dGllcy5zdGVwcGVyU2l6ZSwgbV9jYWNoZWRQcm9wZXJ0aWVzLnRodW1iRmF0bmVzcyk7CiB9CiAK
IGludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciYpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCmluZGV4
IDdlODJjYTcuLmZjMDU3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9T
Y3JvbGxiYXJUaGVtZUd0ay5oCkBAIC0yNyw1MyArMjcsNTggQEAKICNkZWZpbmUgU2Nyb2xsYmFy
VGhlbWVHdGtfaAogCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
U2Nyb2xsYmFyOwogCi1jbGFzcyBTY3JvbGxiYXJUaGVtZUd0ayA6IHB1YmxpYyBTY3JvbGxiYXJU
aGVtZUNvbXBvc2l0ZSB7CitjbGFzcyBTY3JvbGxiYXJUaGVtZUd0ayBmaW5hbCA6IHB1YmxpYyBT
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsYmFy
VGhlbWVHdGsoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciYpIHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyJik7Ci0g
ICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYsIFNjcm9sbGJhclBh
cnQsIGJvb2wpOwotICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxi
YXImLCBTY3JvbGxiYXJQYXJ0LCBib29sKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0
KFNjcm9sbGJhciYsIGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJh
ciYpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIo
U2Nyb2xsYmFyJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0
KFNjcm9sbGJhciYsIFNjcm9sbGJhclBhcnQsIGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
SW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXImLCBTY3JvbGxiYXJQYXJ0LCBib29s
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhciYsIGJv
b2wpIG92ZXJyaWRlOwogCiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgU2Nyb2xsYmFy
VGhlbWVHdGsoKTsKIAogICAgIHVzaW5nIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0aHVtYlJl
Y3Q7CiAgICAgSW50UmVjdCB0aHVtYlJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYgdW5j
b25zdHJhaW5lZFRyYWNrUmVjdCk7Ci0gICAgYm9vbCBwYWludChTY3JvbGxiYXImLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50U2Ny
b2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBTY3JvbGxiYXImKTsKLSAgICB2b2lk
IHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0JiwgU2Nyb2xs
YmFyJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFw
aGljc0NvbnRleHQmLCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyJiwgY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNz
KFNjcm9sbGJhckNvbnRyb2xTaXplKTsKLSAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShT
Y3JvbGxiYXImKTsKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFy
Jik7CisgICAgYm9vbCBwYWludChTY3JvbGxiYXImLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsYmFyQmFj
a2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBTY3JvbGxiYXImKSBvdmVycmlkZTsKKyAgICB2b2lk
IHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0
JiwgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQmLCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0
JiwgU2Nyb2xsYmFyUGFydCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHNob3VsZENlbnRl
ck9uVGh1bWIoU2Nyb2xsYmFyJiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXpl
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFy
Jikgb3ZlcnJpZGU7CiAKICAgICAvLyBUT0RPOiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgR1RLKyB2
YWx1ZXMuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHB1bGwgdGhlc2UgZnJvbSB0aGUgdGhlbWUg
aXRzZWxmLgotICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgp
IHsgcmV0dXJuIDAuMjA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxh
eSgpIHsgcmV0dXJuIDAuMDI7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9s
bFRpbWVyRGVsYXkoKSBvdmVycmlkZSB7IHJldHVybiAwLjIwOyB9CisgICAgdmlydHVhbCBkb3Vi
bGUgYXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBvdmVycmlkZSB7IHJldHVybiAwLjAyOyB9CiAgICAg
dm9pZCB0aGVtZUNoYW5nZWQoKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNr
bmVzcygpOwotICAgIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyJik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciYpOwogCi1wcm90ZWN0ZWQ6Citwcml2YXRl
OgogICAgIHZvaWQgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7CisgICAgR1JlZlB0cjxHdGtTdHls
ZUNvbnRleHQ+IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KFNjcm9sbGJhck9yaWVudGF0aW9uID0g
VmVydGljYWxTY3JvbGxiYXIpOwogCi0gICAgaW50IG1fdGh1bWJGYXRuZXNzOwotICAgIGludCBt
X3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIGludCBtX3N0ZXBwZXJTaXplOwotICAgIGludCBtX3N0
ZXBwZXJTcGFjaW5nOworICAgIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXImKTsKKworICAg
IHN0cnVjdCBQcm9wZXJ0aWVzIHsKKyAgICAgICAgaW50IHRodW1iRmF0bmVzczsKKyAgICAgICAg
aW50IHRyb3VnaEJvcmRlcldpZHRoOworICAgICAgICBpbnQgc3RlcHBlclNpemU7CisgICAgICAg
IGludCBzdGVwcGVyU3BhY2luZzsKKyAgICAgICAgZ2Jvb2xlYW4gdHJvdWdoVW5kZXJTdGVwcGVy
czsKKyAgICB9OworCisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IG1fY2FjaGVkU3R5bGVD
b250ZXh0OworICAgIFByb3BlcnRpZXMgbV9jYWNoZWRQcm9wZXJ0aWVzOwogICAgIGludCBtX21p
blRodW1iTGVuZ3RoOwotICAgIGdib29sZWFuIG1fdHJvdWdoVW5kZXJTdGVwcGVyczsKICAgICBn
Ym9vbGVhbiBtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQ7CiAgICAgZ2Jvb2xlYW4gbV9oYXNG
b3J3YXJkQnV0dG9uRW5kUGFydDsKICAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0b25TdGFydFBh
cnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268448</attachid>
            <date>2016-01-07 03:08:59 -0800</date>
            <delta_ts>2016-01-08 07:58:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-scrollbar-theme.diff</filename>
            <type>text/plain</type>
            <size>32500</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZDQ0M2VkLi44ZDM4OWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTgg
QEAKKzIwMTYtMDEtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIENsZWFudXAgU2Nyb2xsYmFyVGhlbWVHdGsKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjgzMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBhIGNvbW1vbiBwYXRoIGZv
ciBHVEsrIDMuMTkgYW5kIHByZXZpb3VzIHZlcnNpb25zLCBzaW1wbGlmeWluZworICAgICAgICB0
aGUgY29kZSBhbmQgcmVtb3ZpbmcgYSBsb3Qgb2YgaWZkZWZzLiBVc2UgYWx3YXlzIGEgbmV3Cisg
ICAgICAgIEd0a1N0eWxlQ29udGV4dCwgYnV0IHdoZW4gcGFpbnRpbmcgY2FjaGUgdGhlIG5ld2x5
IGNyZWF0ZWQgb25lIHNvCisgICAgICAgIGFsbCBwYWludCBtZXRob2RzIHVzZSB0aGF0IG9uZS4g
V2Ugd2VyZSBhbHNvIGNhY2hpbmcgc29tZSB0aGVtZQorICAgICAgICBwcm9wZXJ0aWVzIGFzc3Vt
aW5nIHRoZXkgZG9uJ3QgY2hhbmdlIHVubGVzcyB0aGUgdGhlbWUgY2hhbmdlcywKKyAgICAgICAg
YnV0IHNvbWUgb2YgdGhlbSBjYW4gaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGRlcGVuZGluZyBvbiB0
aGUgc3RhdGUsCisgICAgICAgIGZvciBleGFtcGxlLCB3aGVuIGhvdmVyZWQgb3IgcHJlc3NlZC4g
VGhvc2UgcHJvcGVydGllcyBhcmUgbm93CisgICAgICAgIG9ubHkgY2FjaGVkIHdoZW4gd2UgY3Jl
YXRlIGEgbmV3IEd0a1N0eWxlQ29udGV4dC4KKyAgICAgICAgVGhlIG1ldGhvZCB1cGRhdGVTY3Jv
bGxiYXJzRnJhbWVUaGlja25lc3MoKSBoYXMgYWxzbyBiZWVuIHJlbW92ZWQsCisgICAgICAgIHNp
bmNlIHRoZSBTY3JvbGxiYXIgY29uc3RydWN0b3IgYWxyZWFkeSBpbml0aWFsaXplcyB0aGUgZnJh
bWUgcmVjdAorICAgICAgICB1c2luZyB0aGUgc2Nyb2xsYmFyVGhpY2tuZXNzKCkuIFRoaXMgbWV0
aG9kIHdhcyBub3QgZG9pbmcgYW55dGhpbmcKKyAgICAgICAgYW55d2F5LCBzaW5jZSB0aGF0IHdh
cyBjYWxsZWQgb24gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB0aGVtZSwKKyAgICAgICAgd2hlbiB0
aGVyZSB3ZXJlIG5vIHNjcm9sbGJhcnMgcmVnaXN0ZXJlZC4gVGhpcyBhbHNvIG1lYW5zIHdlIG5v
CisgICAgICAgIGxvbmdlciBuZWVkIHRvIHRyYWNrIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIHNj
cm9sbGJhcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KTog
VXNlIHRoZSBjYWNoZWQKKyAgICAgICAgR3RrU3R5bGVDb250ZXh0IGFuZCBwcm9wZXJ0aWVzIG9y
IGNyZWF0ZSBhIG5ldy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpmb3J3
YXJkQnV0dG9uUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVH
dGs6OnRyYWNrUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6b3JpZW50YXRpb25TdHls
ZUNsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpnZXRPckNyZWF0
ZVN0eWxlQ29udGV4dCk6IENyZWF0ZSBhCisgICAgICAgIG5ldyBHdGtTdHlsZUNvbnRleHQgZm9y
IHRoZSBzY3JvbGxiYXIgaWYgdGhlcmUgaXNuJ3QgYSBjYWNoZWQKKyAgICAgICAgb25lLiBBbHNv
IGluaXRpYWxpemUgdGhlIHByb3BlcnRpZXMgdGhhdCBkZXBlbmQgb24gdGhlIHN0YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2hpbGRTdHlsZUNvbnRleHQpOiBDcmVhdGUgYSBuZXcgR3Rr
U3R5bGVDb250ZXh0CisgICAgICAgIGZyb20gYSBwYXJlbnQgb25lLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRoZW1lUHJvcGVydGllcyk6IEdldCB0aGUKKyAg
ICAgICAgcHJvcGVydGllcyB0aGF0IGNhbiBvbmx5IGNoYW5nZSB3aGVuIHRoZSB0aGVtZSBjaGFu
Z2VzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnRodW1iUmVjdCk6IFVz
ZSB0aGUgY2FjaGVkCisgICAgICAgIEd0a1N0eWxlQ29udGV4dCBhbmQgcHJvcGVydGllcyBvciBj
cmVhdGUgYSBuZXcuCisgICAgICAgIChXZWJDb3JlOjphZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJn
aW4pOiBVc2UgYWx3YXlzIHRoZQorICAgICAgICBHdGtTdHlsZUNvbnRleHQgc3RhdGUgaW5zdGVh
ZCBvZiByZWNlaXZpbmcgaXQgYW5kIHNldHRpbmcgaXQgYWdhaW4uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQpOiBHZXQgb3IgY3JlYXRl
CisgICAgICAgIGEgR3RrU3R5bGVDb250ZXh0IGZvciB0aGUgc2Nyb2xsYmFyIGFuZCBjcmVhdGUg
YSBjaGlsZCBvbmUgZm9yIHRoZSB0cm91Z2guCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKTogVXNlIHRoZQorICAgICAgICBjYWNo
ZWQgR3RrU3R5bGVDb250ZXh0IG9yIGNyZWF0ZSBhIG5ldyBvbmUuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYik6IEdldCBvciBjcmVhdGUgYQorICAgICAg
ICBHdGtTdHlsZUNvbnRleHQgZm9yIHRoZSBzY3JvbGxiYXIgYW5kIGNyZWF0ZSBhIGNoaWxkIG9u
ZXMgZm9yCisgICAgICAgIHRyb3VnaCBhbmQgc2xpZGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKTogR2V0IG9yIGNyZWF0ZSBhCisgICAgICAgIEd0
a1N0eWxlQ29udGV4dCBmb3IgdGhlIHNjcm9sbGJhciBhbmQgY3JlYXRlIGEgY2hpbGQgb25lIGZv
ciB0aGUgYnV0dG9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50
KTogQ3JlYXRlIGEgR3RrU3R5bGVDb250ZXh0IGFuZAorICAgICAgICBjYWNoZSBpdCB0ZW1wb3Jh
cmlseSB1c2luZyBUZW1wb3JhcnlDaGFuZ2UgdW50aWwgdGhlIG1ldGhvZCBmaW5pc2hlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MpOiBV
c2UgdGhlIGNhY2hlZAorICAgICAgICBHdGtTdHlsZUNvbnRleHQgYW5kIHByb3BlcnRpZXMgb3Ig
Y3JlYXRlIGEgbmV3LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmJ1dHRv
blNpemUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsu
aDoKKwogMjAxNi0wMS0wNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1BlcmZvcm1hbmNlVGltaW5nXSBEb24ndCBleHBvc2UgdGhlIHJlc3RyaWN0ZWRL
ZXlNYXAoKSBIYXNoTWFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bGJhclRoZW1lR3RrLmNwcAppbmRleCA3MGM1OGYwLi40YzM0MzFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKQEAgLTMzLDcgKzMz
LDcgQEAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC02NywxOCArNjcsMTkgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1
dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGEKICAgICBpZiAo
cGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBpbnQgeCA9IHNjcm9sbGJhci54KCkg
KyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIGludCB5ID0gc2Nyb2xsYmFyLnkoKSArIG1fdHJv
dWdoQm9yZGVyV2lkdGg7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4
dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCk7CisgICAgaW50IHggPSBzY3JvbGxiYXIueCgp
ICsgbV9jYWNoZWRQcm9wZXJ0aWVzLnRyb3VnaEJvcmRlcldpZHRoOworICAgIGludCB5ID0gc2Ny
b2xsYmFyLnkoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aDsKICAgICBJ
bnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7CiAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvblN0YXJ0UGFydCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKIAogICAgIC8vIEJhY2tCdXR0b25FbmRQYXJ0IChhbHRlcm5h
dGUgYnV0dG9uKQogICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXIueCgpICsgc2Nyb2xs
YmFyLndpZHRoKCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoIC0gKDIgKiBzaXplLndpZHRoKCkpLCB5
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gSW50UmVjdChz
Y3JvbGxiYXIueCgpICsgc2Nyb2xsYmFyLndpZHRoKCkgLSBtX2NhY2hlZFByb3BlcnRpZXMudHJv
dWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUud2lkdGgoKSksIHksIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7CiAKICAgICAvLyBWZXJ0aWNhbFNjcm9sbGJhciBhbHRlcm5hdGUgYnV0dG9u
Ci0gICAgcmV0dXJuIEludFJlY3QoeCwgc2Nyb2xsYmFyLnkoKSArIHNjcm9sbGJhci5oZWlnaHQo
KSAtIG1fdHJvdWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci55KCkg
KyBzY3JvbGxiYXIuaGVpZ2h0KCkgLSBtX2NhY2hlZFByb3BlcnRpZXMudHJvdWdoQm9yZGVyV2lk
dGggLSAoMiAqIHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKICAgICBVTlVTRURfUEFSQU0ocGFy
dCk7CkBAIC05NCwyMyArOTUsMjQgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6Zm9yd2Fy
ZEJ1dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQKICAgICBpZiAo
cGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFy
dCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpOwogICAgIEludFNp
emUgc2l6ZSA9IGJ1dHRvblNpemUoc2Nyb2xsYmFyKTsKICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgeSA9IHNjcm9s
bGJhci55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOworICAgICAgICBpbnQgeSA9IHNjcm9sbGJh
ci55KCkgKyBtX2NhY2hlZFByb3BlcnRpZXMudHJvdWdoQm9yZGVyV2lkdGg7CiAgICAgICAgIGlm
IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0KQotICAgICAgICAgICAgcmV0dXJuIEludFJl
Y3Qoc2Nyb2xsYmFyLngoKSArIHNjcm9sbGJhci53aWR0aCgpIC0gc2l6ZS53aWR0aCgpIC0gbV90
cm91Z2hCb3JkZXJXaWR0aCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci54KCkgKyBzY3JvbGxiYXIud2lkdGgoKSAt
IHNpemUud2lkdGgoKSAtIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aCwgeSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIAogICAgICAgICAvLyBGb3J3YXJkQnV0dG9u
U3RhcnRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQotICAgICAgICByZXR1cm4gSW50UmVjdChzY3Jv
bGxiYXIueCgpICsgbV90cm91Z2hCb3JkZXJXaWR0aCArIHNpemUud2lkdGgoKSwgeSwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFy
LngoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aCArIHNpemUud2lkdGgo
KSwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICB9CiAKICAgICAvLyBWZXJ0
aWNhbFNjcm9sbGJhcgotICAgIGludCB4ID0gc2Nyb2xsYmFyLngoKSArIG1fdHJvdWdoQm9yZGVy
V2lkdGg7CisgICAgaW50IHggPSBzY3JvbGxiYXIueCgpICsgbV9jYWNoZWRQcm9wZXJ0aWVzLnRy
b3VnaEJvcmRlcldpZHRoOwogICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0KQot
ICAgICAgICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxiYXIueSgpICsgc2Nyb2xsYmFyLmhlaWdo
dCgpIC0gc2l6ZS5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci55KCkg
KyBzY3JvbGxiYXIuaGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpIC0gbV9jYWNoZWRQcm9wZXJ0aWVz
LnRyb3VnaEJvcmRlcldpZHRoLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogCiAgICAg
Ly8gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKLSAgICByZXR1cm4g
SW50UmVjdCh4LCBzY3JvbGxiYXIueSgpICsgbV90cm91Z2hCb3JkZXJXaWR0aCArIHNpemUuaGVp
Z2h0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEludFJlY3Qo
eCwgc2Nyb2xsYmFyLnkoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aCAr
IHNpemUuaGVpZ2h0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwogICAgIFVOVVNFRF9QQVJBTShwYXJ0KTsKQEAgLTEy
MSwxMCArMTIzLDExIEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25S
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0CiBJbnRSZWN0IFNjcm9sbGJh
clRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCiB7CiAjaWZu
ZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxl
Q29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCk7CiAgICAgLy8gVGhlIHBhZGRpbmcg
YWxvbmcgdGhlIHRodW1iIG1vdmVtZW50IGF4aXMgaW5jbHVkZXMgdGhlIHRyb3VnaCBib3JkZXIK
ICAgICAvLyBwbHVzIHRoZSBzaXplIG9mIHN0ZXBwZXIgc3BhY2luZyAodGhlIHNwYWNlIGJldHdl
ZW4gdGhlIHN0ZXBwZXIgYW5kCiAgICAgLy8gdGhlIHBsYWNlIHdoZXJlIHRoZSB0aHVtYiBzdG9w
cykuIFRoZXJlIGlzIG9mdGVuIG5vIHN0ZXBwZXIgc3BhY2luZy4KLSAgICBpbnQgbW92ZW1lbnRB
eGlzUGFkZGluZyA9IG1fdHJvdWdoQm9yZGVyV2lkdGggKyBtX3N0ZXBwZXJTcGFjaW5nOworICAg
IGludCBtb3ZlbWVudEF4aXNQYWRkaW5nID0gbV9jYWNoZWRQcm9wZXJ0aWVzLnRyb3VnaEJvcmRl
cldpZHRoICsgbV9jYWNoZWRQcm9wZXJ0aWVzLnN0ZXBwZXJTcGFjaW5nOwogCiAgICAgLy8gVGhl
IGZhdG5lc3Mgb2YgdGhlIHNjcm9sbGJhciBvbiB0aGUgbm9uLW1vdmVtZW50IGF4aXMuCiAgICAg
aW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXIuY29udHJvbFNpemUo
KSk7CkBAIC0xMzIsMTcgKzEzNSwxNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFj
a1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCiAgICAgaW50IHN0YXJ0QnV0dG9uc09m
ZnNldCA9IDA7CiAgICAgaW50IGJ1dHRvbnNXaWR0aCA9IDA7CiAgICAgaWYgKG1faGFzRm9yd2Fy
ZEJ1dHRvblN0YXJ0UGFydCkgewotICAgICAgICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gbV9zdGVw
cGVyU2l6ZTsKLSAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7CisgICAgICAg
IHN0YXJ0QnV0dG9uc09mZnNldCArPSBtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNpemU7Cisg
ICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNpemU7CiAg
ICAgfQogICAgIGlmIChtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQpIHsKLSAgICAgICAgc3RhcnRC
dXR0b25zT2Zmc2V0ICs9IG1fc3RlcHBlclNpemU7Ci0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBt
X3N0ZXBwZXJTaXplOworICAgICAgICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gbV9jYWNoZWRQcm9w
ZXJ0aWVzLnN0ZXBwZXJTaXplOworICAgICAgICBidXR0b25zV2lkdGggKz0gbV9jYWNoZWRQcm9w
ZXJ0aWVzLnN0ZXBwZXJTaXplOwogICAgIH0KICAgICBpZiAobV9oYXNCYWNrQnV0dG9uRW5kUGFy
dCkKLSAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7CisgICAgICAgIGJ1dHRv
bnNXaWR0aCArPSBtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNpemU7CiAgICAgaWYgKG1faGFz
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQpCi0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJT
aXplOworICAgICAgICBidXR0b25zV2lkdGggKz0gbV9jYWNoZWRQcm9wZXJ0aWVzLnN0ZXBwZXJT
aXplOwogCiAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKICAgICAgICAgLy8gT25jZSB0aGUgc2Nyb2xsYmFyIGJlY29tZXMgc21hbGxlciB0
aGFuIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlCkBAIC0xNjQsNDIgKzE2Nyw1OCBAQCBJbnRSZWN0
IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wp
CiB9CiAKICNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hh
ciogb3JpZW50YXRpb25TdHlsZUNsYXNzKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQoreworICAgIHJldHVybiBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/ICJ2ZXJ0
aWNhbCIgOiAiaG9yaXpvbnRhbCI7Cit9CiAKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMTks
IDIpCi0vLyBDdXJyZW50bHkgd2UgdXNlIGEgc3RhdGljIEd0a1N0eWxlQ29udGV4dCBmb3IgR1RL
KyA8IDMuMTksIGFuZCBhIGJ1bmNoIG9mIHVuaXF1ZQotLy8gR3RrU3R5bGVDb250ZXh0cyBmb3Ig
R1RLKyA+PSAzLjE5LiBUaGlzIGlzIGNyYXp5IGFuZCBkZWZpbml0ZWx5IHNob3VsZCBub3QgYmUg
bmVjZXNzYXJ5LCBidXQgSQotLy8gY291bGRuJ3QgZmluZCBhbnkgb3RoZXIgd2F5IHRvIG5vdCBi
cmVhayBvbmUgdmVyc2lvbiBvciB0aGUgb3RoZXIuIElkZWFsbHkgb25lIG9mIHRoZSB0d28KLS8v
IHBlb3BsZSBvbiB0aGUgcGxhbmV0IHdobyByZWFsbHkgdW5kZXJzdGFuZCBHVEsrIHN0eWxlcyB3
b3VsZCBmaXggdGhpcy4KLWNsYXNzIFNjcm9sbGJhclN0eWxlQ29udGV4dCB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyU3R5bGVDb250ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsYmFyU3R5bGVDb250ZXh0KCkKLSAgICAgICAgOiBt
X2NvbnRleHQoYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKSkKLSAgICB7Ci0gICAg
ICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7Ci0gICAgICAg
IGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCBHVEtfVFlQRV9TQ1JPTExCQVIpOwot
ICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxF
X0NMQVNTX1NDUk9MTEJBUik7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKG1f
Y29udGV4dC5nZXQoKSwgcGF0aCk7Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgp
OwotICAgIH0KK0dSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBTY3JvbGxiYXJUaGVtZUd0azo6Z2V0
T3JDcmVhdGVTdHlsZUNvbnRleHQoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7
CisgICAgaWYgKG1fY2FjaGVkU3R5bGVDb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jYWNoZWRT
dHlsZUNvbnRleHQ7CiAKLSAgICB+U2Nyb2xsYmFyU3R5bGVDb250ZXh0KCkKLSAgICB7Ci0gICAg
fQorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBhZG9wdEdSZWYo
Z3RrX3N0eWxlX2NvbnRleHRfbmV3KCkpOworICAgIEdSZWZQdHI8R3RrV2lkZ2V0UGF0aD4gcGF0
aCA9IGFkb3B0R1JlZihndGtfd2lkZ2V0X3BhdGhfbmV3KCkpOworICAgIGd0a193aWRnZXRfcGF0
aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ1JPTExCQVIpOworI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDE5LCAyKQorICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmpl
Y3RfbmFtZShwYXRoLmdldCgpLCAtMSwgInNjcm9sbGJhciIpOworI2Vsc2UKKyAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJzY3JvbGxiYXIiKTsKKyNl
bmRpZgorICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwg
b3JpZW50YXRpb25TdHlsZUNsYXNzKG9yaWVudGF0aW9uKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3BhdGgoc3R5bGVDb250ZXh0LmdldCgpLCBwYXRoLmdldCgpKTsKKyAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfc3RhdGUoc3R5bGVDb250ZXh0LmdldCgpLCBndGtfd2lkZ2V0X3BhdGhf
aXRlcl9nZXRfc3RhdGUocGF0aC5nZXQoKSwgLTEpKTsKIAotICAgIEd0a1N0eWxlQ29udGV4dCog
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZSgKKyAgICAgICAgc3R5bGVDb250ZXh0LmdldCgpLAorICAgICAg
ICAic2xpZGVyLXdpZHRoIiwgJm1fY2FjaGVkUHJvcGVydGllcy50aHVtYkZhdG5lc3MsCisgICAg
ICAgICJ0cm91Z2gtYm9yZGVyIiwgJm1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0
aCwKKyAgICAgICAgInN0ZXBwZXItc2l6ZSIsICZtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNp
emUsCisgICAgICAgICJzdGVwcGVyLXNwYWNpbmciLCAmbV9jYWNoZWRQcm9wZXJ0aWVzLnN0ZXBw
ZXJTcGFjaW5nLAorICAgICAgICAidHJvdWdoLXVuZGVyLXN0ZXBwZXJzIiwgJm1fY2FjaGVkUHJv
cGVydGllcy50cm91Z2hVbmRlclN0ZXBwZXJzLAorICAgICAgICBudWxscHRyKTsKIAotcHJpdmF0
ZToKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gbV9jb250ZXh0OwotfTsKKyAgICByZXR1
cm4gc3R5bGVDb250ZXh0OworfQogCi1zdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBndGtTY3JvbGxi
YXJTdHlsZUNvbnRleHQoKQorc3RhdGljIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjcmVhdGVD
aGlsZFN0eWxlQ29udGV4dChHdGtTdHlsZUNvbnRleHQqIHBhcmVudCwgY29uc3QgY2hhciogbmFt
ZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2Nyb2xsYmFyU3R5bGVDb250ZXh0PiBz
dHlsZUNvbnRleHQ7Ci0gICAgcmV0dXJuIHN0eWxlQ29udGV4dC5nZXQoKS5jb250ZXh0KCk7Ci19
CisgICAgQVNTRVJUKHBhcmVudCk7CisgICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0g
YWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9jb3B5KGd0a19zdHlsZV9jb250ZXh0X2dldF9wYXRo
KHBhcmVudCkpKTsKKyAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwg
R1RLX1RZUEVfU0NST0xMQkFSKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKKyAg
ICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsIG5h
bWUpOworI2Vsc2UKKyAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQo
KSwgLTEsIG5hbWUpOwogI2VuZGlmCiAKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5
bGVDb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfcGF0aChzdHlsZUNvbnRleHQuZ2V0KCksIHBhdGguZ2V0KCkpOwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXJlbnQoc3R5bGVDb250ZXh0LmdldCgpLCBwYXJl
bnQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShzdHlsZUNvbnRleHQuZ2V0KCks
IGd0a193aWRnZXRfcGF0aF9pdGVyX2dldF9zdGF0ZShwYXRoLmdldCgpLCAtMSkpOworICAgIHJl
dHVybiBzdHlsZUNvbnRleHQ7Cit9CisKIFNjcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVt
ZUd0aygpCiB7CiAgICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7CkBAIC0yMDcsMTExICsyMjYs
MzcgQEAgU2Nyb2xsYmFyVGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3RrKCkKIAogdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6dGhlbWVDaGFuZ2VkKCkKIHsKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04o
MywgMTksIDIpCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShndGtTY3JvbGxiYXJT
dHlsZUNvbnRleHQoKSk7Ci0jZW5kaWYKICAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKIH0K
IAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKIHsKLSNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4
dD4gc3R5bGVDb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKLSAg
ICBHUmVmUHRyPEd0a1dpZGdldFBhdGg+IHBhdGggPSBhZG9wdEdSZWYoZ3RrX3dpZGdldF9wYXRo
X25ldygpKTsKLQotICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBH
VEtfVFlQRV9TQ1JPTExCQVIpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3Rf
bmFtZShwYXRoLmdldCgpLCAwLCAic2Nyb2xsYmFyIik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChzdHlsZUNvbnRleHQuZ2V0KCksIHBhdGguZ2V0KCkpOwotI2Vsc2UKLSAgICBH
UmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ3RrU2Nyb2xsYmFyU3R5bGVD
b250ZXh0KCk7Ci0jZW5kaWYKLQorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNv
bnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpOwogICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdHlsZSgKICAgICAgICAgc3R5bGVDb250ZXh0LmdldCgpLAogICAgICAgICAibWluLXNs
aWRlci1sZW5ndGgiLCAmbV9taW5UaHVtYkxlbmd0aCwKLSAgICAgICAgInNsaWRlci13aWR0aCIs
ICZtX3RodW1iRmF0bmVzcywKLSAgICAgICAgInRyb3VnaC1ib3JkZXIiLCAmbV90cm91Z2hCb3Jk
ZXJXaWR0aCwKLSAgICAgICAgInN0ZXBwZXItc2l6ZSIsICZtX3N0ZXBwZXJTaXplLAotICAgICAg
ICAic3RlcHBlci1zcGFjaW5nIiwgJm1fc3RlcHBlclNwYWNpbmcsCi0gICAgICAgICJ0cm91Z2gt
dW5kZXItc3RlcHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAogICAgICAgICAiaGFzLWJh
Y2t3YXJkLXN0ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0LAogICAgICAgICAiaGFz
LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAogICAgICAgICAi
aGFzLXNlY29uZGFyeS1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRvbkVuZFBhcnQs
CiAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRC
dXR0b25TdGFydFBhcnQsCiAgICAgICAgIG51bGxwdHIpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnNG
cmFtZVRoaWNrbmVzcygpOwotfQotCi10eXBlZGVmIEhhc2hTZXQ8U2Nyb2xsYmFyKj4gU2Nyb2xs
YmFyTWFwOwotCi1zdGF0aWMgU2Nyb2xsYmFyTWFwJiBzY3JvbGxiYXJNYXAoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTY3JvbGxiYXJNYXA+IG1hcDsKLSAgICByZXR1cm4gbWFwOwot
fQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIm
IHNjcm9sbGJhcikKLXsKLSAgICBzY3JvbGxiYXJNYXAoKS5hZGQoJnNjcm9sbGJhcik7Ci19Ci0K
LXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIpCi17Ci0gICAgc2Nyb2xsYmFyTWFwKCkucmVtb3ZlKCZzY3JvbGxiYXIpOwotfQot
Ci12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3Mo
KQotewotICAgIGlmIChzY3JvbGxiYXJNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFVwZGF0ZSB0aGUgdGhpY2tuZXNzIG9mIGV2ZXJ5IGludGVyaW9yIGZyYW1lIHNj
cm9sbGJhciB3aWRnZXQuIFRoZQotICAgIC8vIHBsYXRmb3JtLWluZGVwZW5kZW50IHNjcm9sbGJh
ciB0aGVtIGNvZGUgaXNuJ3QgeWV0IHNtYXJ0IGVub3VnaCB0byBnZXQKLSAgICAvLyB0aGlzIGlu
Zm9ybWF0aW9uIHdoZW4gaXQgcGFpbnRzLgotICAgIGZvciAoY29uc3QgYXV0byYgc2Nyb2xsYmFy
IDogc2Nyb2xsYmFyTWFwKCkpIHsKLSAgICAgICAgLy8gVG9wLWxldmVsIHNjcm9sbGJhciBpLmUu
IHNjcm9sbGJhcnMgd2hvIGhhdmUgYSBwYXJlbnQgU2Nyb2xsVmlldwotICAgICAgICAvLyB3aXRo
IG5vIHBhcmVudCBhcmUgbmF0aXZlLCBhbmQgdGh1cyBkbyBub3QgbmVlZCB0byBiZSByZXNpemVk
LgotICAgICAgICBpZiAoIXNjcm9sbGJhci0+cGFyZW50KCkgfHwgIXNjcm9sbGJhci0+cGFyZW50
KCktPnBhcmVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGludCB0aGlja25l
c3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAgICAg
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQot
ICAgICAgICAgICAgc2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCBzY3JvbGxiYXIt
PnBhcmVudCgpLT5oZWlnaHQoKSAtIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT53aWR0aCgpLCB0aGlj
a25lc3MpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYmFyLT5zZXRGcmFtZVJl
Y3QoSW50UmVjdChzY3JvbGxiYXItPnBhcmVudCgpLT53aWR0aCgpIC0gdGhpY2tuZXNzLCAwLCB0
aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKLSAgICB9CiB9CiAKIEludFJlY3QgU2Ny
b2xsYmFyVGhlbWVHdGs6OnRodW1iUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCkKIHsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29u
dGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFyLm9y
aWVudGF0aW9uKCkpOwogICAgIEludFJlY3QgdHJhY2tSZWN0ID0gY29uc3RyYWluVHJhY2tSZWN0
VG9UcmFja1BpZWNlcyhzY3JvbGxiYXIsIHVuY29uc3RyYWluZWRUcmFja1JlY3QpOwogICAgIGlu
dCB0aHVtYlBvcyA9IHRodW1iUG9zaXRpb24oc2Nyb2xsYmFyKTsKICAgICBpZiAoc2Nyb2xsYmFy
Lm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIElu
dFJlY3QodHJhY2tSZWN0LngoKSArIHRodW1iUG9zLCB0cmFja1JlY3QueSgpICsgKHRyYWNrUmVj
dC5oZWlnaHQoKSAtIG1fdGh1bWJGYXRuZXNzKSAvIDIsIHRodW1iTGVuZ3RoKHNjcm9sbGJhciks
IG1fdGh1bWJGYXRuZXNzKTsgCisgICAgICAgIHJldHVybiBJbnRSZWN0KHRyYWNrUmVjdC54KCkg
KyB0aHVtYlBvcywgdHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSBtX2NhY2hl
ZFByb3BlcnRpZXMudGh1bWJGYXRuZXNzKSAvIDIsIHRodW1iTGVuZ3RoKHNjcm9sbGJhciksIG1f
Y2FjaGVkUHJvcGVydGllcy50aHVtYkZhdG5lc3MpOwogCiAgICAgLy8gVmVydGljYWxTY3JvbGxi
YXIKLSAgICByZXR1cm4gSW50UmVjdCh0cmFja1JlY3QueCgpICsgKHRyYWNrUmVjdC53aWR0aCgp
IC0gbV90aHVtYkZhdG5lc3MpIC8gMiwgdHJhY2tSZWN0LnkoKSArIHRodW1iUG9zLCBtX3RodW1i
RmF0bmVzcywgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIEludFJlY3QodHJh
Y2tSZWN0LngoKSArICh0cmFja1JlY3Qud2lkdGgoKSAtIG1fY2FjaGVkUHJvcGVydGllcy50aHVt
YkZhdG5lc3MpIC8gMiwgdHJhY2tSZWN0LnkoKSArIHRodW1iUG9zLCBtX2NhY2hlZFByb3BlcnRp
ZXMudGh1bWJGYXRuZXNzLCB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKTsKIH0KIAotCi1zdGF0aWMg
Y29uc3QgY2hhciogb3JpZW50YXRpb25TdHlsZUNsYXNzKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKQotewotICAgIHJldHVybiBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJh
ciA/ICJ2ZXJ0aWNhbCIgOiAiaG9yaXpvbnRhbCI7Ci19Ci0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMTksIDIpCi1zdGF0aWMgdm9pZCBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNz
ZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX1NDUk9MTEJBUik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNv
bnRleHQsIG9yaWVudGF0aW9uU3R5bGVDbGFzcyhvcmllbnRhdGlvbikpOwotfQotI2VuZGlmCi0K
LXN0YXRpYyB2b2lkIGFkanVzdFJlY3RBY2NvcmRpbmdUb01hcmdpbihHdGtTdHlsZUNvbnRleHQq
IGNvbnRleHQsIEd0a1N0YXRlRmxhZ3Mgc3RhdGUsIEludFJlY3QmIHJlY3QpCitzdGF0aWMgdm9p
ZCBhZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJnaW4oR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBJ
bnRSZWN0JiByZWN0KQogewogICAgIEd0a0JvcmRlciBtYXJnaW47Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRlKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfbWFyZ2luKGNvbnRleHQsIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0KSwg
Jm1hcmdpbik7CiAgICAgcmVjdC5tb3ZlKG1hcmdpbi5sZWZ0LCBtYXJnaW4ucmlnaHQpOwogICAg
IHJlY3QuY29udHJhY3QobWFyZ2luLmxlZnQgKyBtYXJnaW4ucmlnaHQsIG1hcmdpbi50b3AgKyBt
YXJnaW4uYm90dG9tKTsKQEAgLTMxOSw5NyArMjY0LDM0IEBAIHN0YXRpYyB2b2lkIGFkanVzdFJl
Y3RBY2NvcmRpbmdUb01hcmdpbihHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEd0a1N0YXRlRmxh
Z3MKIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFyZW50U3R5bGVDb250ZXh0
ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpOwogICAg
IC8vIFBhaW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBw
ZXJzIHByb3BlcnR5IGlzIHRydWUsIHRoaXMKICAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6
ZSBvZiB0aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRo
ZQogICAgIC8vIHRyYWNrIHJlY3QuCiAgICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0
KTsKLSAgICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzKQorICAgIGlmIChtX2NhY2hlZFByb3Bl
cnRpZXMudHJvdWdoVW5kZXJTdGVwcGVycykKICAgICAgICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJ
bnRSZWN0KHNjcm9sbGJhci54KCksIHNjcm9sbGJhci55KCksIHNjcm9sbGJhci53aWR0aCgpLCBz
Y3JvbGxiYXIuaGVpZ2h0KCkpOwogCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0g
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGFkb3B0R1JlZihndGtf
c3R5bGVfY29udGV4dF9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0g
YWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhf
YXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKLSAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMCwgInNjcm9sbGJhciIp
OwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAwLCBvcmll
bnRhdGlvblN0eWxlQ2xhc3Moc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpKTsKLQotICAgIGd0a193
aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ1JPTExCQVIpOwot
ICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAxLCAi
dHJvdWdoIik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChzdHlsZUNvbnRleHQu
Z2V0KCksIHBhdGguZ2V0KCkpOwotI2Vsc2UKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4g
c3R5bGVDb250ZXh0ID0gZ3RrU2Nyb2xsYmFyU3R5bGVDb250ZXh0KCk7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShzdHlsZUNvbnRleHQuZ2V0KCkpOwotCi0gICAgYXBwbHlTY3JvbGxiYXJT
dHlsZUNvbnRleHRDbGFzc2VzKHN0eWxlQ29udGV4dC5nZXQoKSwgc2Nyb2xsYmFyLm9yaWVudGF0
aW9uKCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhzdHlsZUNvbnRleHQuZ2V0
KCksIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwotI2VuZGlmCi0KLSAgICBhZGp1c3RSZWN0QWNj
b3JkaW5nVG9NYXJnaW4oc3R5bGVDb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZs
YWdzPigwKSwgZnVsbFNjcm9sbGJhclJlY3QpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBzdHlsZUNvbnRleHQgPSBjcmVhdGVDaGlsZFN0eWxlQ29udGV4dChwYXJlbnRTdHlsZUNvbnRl
eHQuZ2V0KCksICJ0cm91Z2giKTsKKyAgICBhZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJnaW4oc3R5
bGVDb250ZXh0LmdldCgpLCBmdWxsU2Nyb2xsYmFyUmVjdCk7CiAgICAgZ3RrX3JlbmRlcl9iYWNr
Z3JvdW5kKHN0eWxlQ29udGV4dC5nZXQoKSwgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgZnVsbFNjcm9sbGJhclJlY3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3Jv
bGxiYXJSZWN0LndpZHRoKCksIGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKICAgICBndGtf
cmVuZGVyX2ZyYW1lKHN0eWxlQ29udGV4dC5nZXQoKSwgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKSwgZnVsbFNjcm9sbGJhclJlY3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1
bGxTY3JvbGxiYXJSZWN0LndpZHRoKCksIGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKLQot
I2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBndGtfc3R5bGVfY29udGV4dF9y
ZXN0b3JlKHN0eWxlQ29udGV4dC5nZXQoKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpCiB7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTks
IDIpCi0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGFkb3B0R1Jl
ZihndGtfc3R5bGVfY29udGV4dF9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBw
YXRoID0gYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0KLSAgICBndGtfd2lkZ2V0
X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKLSAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMCwgInNjcm9s
bGJhciIpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAw
LCBvcmllbnRhdGlvblN0eWxlQ2xhc3Moc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpKTsKLQotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKHN0eWxlQ29udGV4dC5nZXQoKSwgcGF0aC5nZXQo
KSk7Ci0jZWxzZQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBn
dGtTY3JvbGxiYXJTdHlsZUNvbnRleHQoKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKHN0
eWxlQ29udGV4dC5nZXQoKSk7Ci0KLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNz
ZXMoc3R5bGVDb250ZXh0LmdldCgpLCBzY3JvbGxiYXIub3JpZW50YXRpb24oKSk7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHN0eWxlQ29udGV4dC5nZXQoKSwgInNjcm9sbGVkLXdp
bmRvdyIpOwotI2VuZGlmCi0KKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250
ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpOwog
ICAgIGd0a19yZW5kZXJfZnJhbWUoc3R5bGVDb250ZXh0LmdldCgpLCBjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCBzY3JvbGxiYXIueCgpLCBzY3JvbGxiYXIueSgpLCBzY3JvbGxiYXIu
d2lkdGgoKSwgc2Nyb2xsYmFyLmhlaWdodCgpKTsKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigz
LCAxOSwgMikKLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHN0eWxlQ29udGV4dC5nZXQo
KSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX3N0eWxlX2NvbnRl
eHRfbmV3KCkpOwotICAgIEdSZWZQdHI8R3RrV2lkZ2V0UGF0aD4gcGF0aCA9IGFkb3B0R1JlZihn
dGtfd2lkZ2V0X3BhdGhfbmV3KCkpOwotCi0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBl
KHBhdGguZ2V0KCksIEdUS19UWVBFX1NDUk9MTEJBUik7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJzY3JvbGxiYXIiKTsKLSAgICBndGtf
d2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgMCwgb3JpZW50YXRpb25TdHls
ZUNsYXNzKHNjcm9sbGJhci5vcmllbnRhdGlvbigpKSk7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhf
YXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKLSAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMSwgInRyb3VnaCIpOwot
Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1ND
Uk9MTEJBUik7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGgu
Z2V0KCksIDIsICJzbGlkZXIiKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKHN0
eWxlQ29udGV4dC5nZXQoKSwgcGF0aC5nZXQoKSk7Ci0jZWxzZQotICAgIEdSZWZQdHI8R3RrU3R5
bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBndGtTY3JvbGxiYXJTdHlsZUNvbnRleHQoKTsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKHN0eWxlQ29udGV4dC5nZXQoKSk7Ci0jZW5kaWYKLQog
ICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLm9yaWVudGF0
aW9uKCk7Ci0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIGFwcGx5U2Nyb2xs
YmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhzdHlsZUNvbnRleHQuZ2V0KCksIG9yaWVudGF0aW9uKTsK
LSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Moc3R5bGVDb250ZXh0LmdldCgpLCBHVEtf
U1RZTEVfQ0xBU1NfU0xJREVSKTsKLSNlbmRpZgorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBwYXJlbnRTdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChvcmllbnRhdGlv
bik7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHRyb3VnaFN0eWxlQ29udGV4dCA9IGNy
ZWF0ZUNoaWxkU3R5bGVDb250ZXh0KHBhcmVudFN0eWxlQ29udGV4dC5nZXQoKSwgInRyb3VnaCIp
OworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBjcmVhdGVDaGls
ZFN0eWxlQ29udGV4dCh0cm91Z2hTdHlsZUNvbnRleHQuZ2V0KCksICJzbGlkZXIiKTsKIAotICAg
IGd1aW50IGZsYWdzID0gMDsKKyAgICB1bnNpZ25lZCBmbGFncyA9IDA7CiAgICAgaWYgKHNjcm9s
bGJhci5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKICAgICAgICAgZmxhZ3MgfD0gR1RLX1NU
QVRFX0ZMQUdfQUNUSVZFOwogICAgIGlmIChzY3JvbGxiYXIuaG92ZXJlZFBhcnQoKSA9PSBUaHVt
YlBhcnQpCkBAIC00MTcsNDAgKzI5OSwxOCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWlu
dFRodW1iKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYQogICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShzdHlsZUNvbnRleHQuZ2V0KCksIHN0YXRpY19j
YXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CiAKICAgICBJbnRSZWN0IHRodW1iUmVjdChyZWN0
KTsKLSAgICBhZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJnaW4oc3R5bGVDb250ZXh0LmdldCgpLCBz
dGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncyksIHRodW1iUmVjdCk7CisgICAgYWRqdXN0
UmVjdEFjY29yZGluZ1RvTWFyZ2luKHN0eWxlQ29udGV4dC5nZXQoKSwgdGh1bWJSZWN0KTsKICAg
ICBndGtfcmVuZGVyX3NsaWRlcihzdHlsZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIHRodW1iUmVjdC54KCksIHRodW1iUmVjdC55KCksIHRodW1iUmVjdC53
aWR0aCgpLCB0aHVtYlJlY3QuaGVpZ2h0KCksCiAgICAgICAgIG9yaWVudGF0aW9uID09IFZlcnRp
Y2FsU2Nyb2xsYmFyID8gR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9O
X0hPUklaT05UQUwpOwotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc3R5bGVDb250ZXh0LmdldCgpKTsKLSNlbmRpZgogfQog
CiB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxi
YXJQYXJ0IHBhcnQpCiB7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgR1Jl
ZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGFkb3B0R1JlZihndGtfc3R5bGVf
Y29udGV4dF9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0gYWRvcHRH
UmVmKGd0a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5k
X3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKLSAgICBndGtfd2lkZ2V0X3Bh
dGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMCwgInNjcm9sbGJhciIpOwotICAg
IGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAwLCBvcmllbnRhdGlv
blN0eWxlQ2xhc3Moc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpKTsKLQotICAgIGd0a193aWRnZXRf
cGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ1JPTExCQVIpOwotICAgIGd0
a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAxLCAiYnV0dG9u
Iik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChzdHlsZUNvbnRleHQuZ2V0KCks
IHBhdGguZ2V0KCkpOwotI2Vsc2UKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVD
b250ZXh0ID0gZ3RrU2Nyb2xsYmFyU3R5bGVDb250ZXh0KCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2F2ZShzdHlsZUNvbnRleHQuZ2V0KCkpOwotI2VuZGlmCi0KICAgICBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiA9IHNjcm9sbGJhci5vcmllbnRhdGlvbigpOwotI2lmICFHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENs
YXNzZXMoc3R5bGVDb250ZXh0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0jZW5kaWYKKyAgICBHUmVm
UHRyPEd0a1N0eWxlQ29udGV4dD4gcGFyZW50U3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHls
ZUNvbnRleHQob3JpZW50YXRpb24pOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHls
ZUNvbnRleHQgPSBjcmVhdGVDaGlsZFN0eWxlQ29udGV4dChwYXJlbnRTdHlsZUNvbnRleHQuZ2V0
KCksICJidXR0b24iKTsKIAotICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICB1bnNpZ25lZCBmbGFn
cyA9IDA7CiAgICAgaWYgKChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFy
LmN1cnJlbnRQb3MoKSkKICAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYg
c2Nyb2xsYmFyLmN1cnJlbnRQb3MoKSkKICAgICAgICAgfHwgKEZvcndhcmRCdXR0b25FbmRQYXJ0
ID09IHBhcnQgJiYgc2Nyb2xsYmFyLmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXIubWF4aW11bSgp
KQpAQCAtNDYzLDEwICszMjMsNiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRv
bihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYgogICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKICAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfc3RhdGUoc3R5bGVDb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdz
PihmbGFncykpOwogCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhzdHlsZUNvbnRleHQuZ2V0KCksIEdUS19TVFlMRV9DTEFT
U19CVVRUT04pOwotI2VuZGlmCi0KICAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoc3R5bGVDb250
ZXh0LmdldCgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgZ3RrX3JlbmRlcl9mcmFt
ZShzdHlsZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIApAQCAtNDkx
LDEwICszNDcsNiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYgogICAgICAgICBhbmdsZSA9IChw
YXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0
UGFydCkgPyBHX1BJIC8gMiA6IDMgKiAoR19QSSAvIDIpOwogCiAgICAgZ3RrX3JlbmRlcl9hcnJv
dyhzdHlsZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGFu
Z2xlLCBhcnJvd1BvaW50LngoKSwgYXJyb3dQb2ludC55KCksIGFycm93U2l6ZSk7Ci0KLSNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9y
ZShzdHlsZUNvbnRleHQuZ2V0KCkpOwotI2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVH
dGs6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKQEAgLTUwMiw2ICszNTQsOCBAQCBi
b29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChTY3JvbGxiYXImIHNjcm9sbGJhciwgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbgogICAgIGlmIChncmFwaGljc0NvbnRleHQucGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBUZW1wb3JhcnlDaGFuZ2U8
R1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+PiB0ZW1wU3R5bGVDb250ZXh0KG1fY2FjaGVkU3R5bGVD
b250ZXh0LCBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChzY3JvbGxiYXIub3JpZW50YXRpb24oKSkp
OworCiAgICAgLy8gQ3JlYXRlIHRoZSBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYmFzZWQgb24g
dGhlIGRhbWFnZVJlY3QKICAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgc2Nyb2xsTWFzayA9
IE5vUGFydDsKIApAQCAtNTI4LDcgKzM4Miw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBh
aW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAg
ICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyh0cmFja1BhaW50UmVjdCkpCiAgICAgICAgIHNj
cm9sbE1hc2sgfD0gVHJhY2tCR1BhcnQ7CiAKLSAgICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJz
ICYmIChzY3JvbGxNYXNrICYgQmFja0J1dHRvblN0YXJ0UGFydAorICAgIGlmIChtX2NhY2hlZFBy
b3BlcnRpZXMudHJvdWdoVW5kZXJTdGVwcGVycyAmJiAoc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25T
dGFydFBhcnQKICAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uRW5kUGFydAog
ICAgICAgICAgICAgfHwgc2Nyb2xsTWFzayAmIEZvcndhcmRCdXR0b25TdGFydFBhcnQKICAgICAg
ICAgICAgIHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uRW5kUGFydCkpCkBAIC01NzIsMTYg
KzQyNiwxOCBAQCBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpzaG91bGRDZW50ZXJPblRodW1iKFNj
cm9sbGJhciYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudAogCiBpbnQgU2Nyb2xsYmFyVGhlbWVH
dGs6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKIHsKLSAgICByZXR1
cm4gbV90aHVtYkZhdG5lc3MgKyAobV90cm91Z2hCb3JkZXJXaWR0aCAqIDIpOworICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4
dCgpOworICAgIHJldHVybiBtX2NhY2hlZFByb3BlcnRpZXMudGh1bWJGYXRuZXNzICsgKG1fY2Fj
aGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aCAqIDIpOwogfQogCiBJbnRTaXplIFNjcm9s
bGJhclRoZW1lR3RrOjpidXR0b25TaXplKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQogeworICAgIEdS
ZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29u
dGV4dChzY3JvbGxiYXIub3JpZW50YXRpb24oKSk7CiAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRh
dGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50U2l6ZShtX3Ro
dW1iRmF0bmVzcywgbV9zdGVwcGVyU2l6ZSk7CisgICAgICAgIHJldHVybiBJbnRTaXplKG1fY2Fj
aGVkUHJvcGVydGllcy50aHVtYkZhdG5lc3MsIG1fY2FjaGVkUHJvcGVydGllcy5zdGVwcGVyU2l6
ZSk7CiAKICAgICAvLyBIb3Jpem9udGFsU2Nyb2xsYmFyCi0gICAgcmV0dXJuIEludFNpemUobV9z
dGVwcGVyU2l6ZSwgbV90aHVtYkZhdG5lc3MpOworICAgIHJldHVybiBJbnRTaXplKG1fY2FjaGVk
UHJvcGVydGllcy5zdGVwcGVyU2l6ZSwgbV9jYWNoZWRQcm9wZXJ0aWVzLnRodW1iRmF0bmVzcyk7
CiB9CiAKIGludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJh
ciYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhl
bWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5o
CmluZGV4IDdlODJjYTcuLmZjMDU3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCkBAIC0yNyw1MyArMjcsNTggQEAKICNkZWZpbmUgU2Ny
b2xsYmFyVGhlbWVHdGtfaAogCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIK
KyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU2Nyb2xsYmFyOwogCi1jbGFzcyBTY3JvbGxiYXJUaGVtZUd0ayA6IHB1YmxpYyBTY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZSB7CitjbGFzcyBTY3JvbGxiYXJUaGVtZUd0ayBmaW5hbCA6IHB1
YmxpYyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Ny
b2xsYmFyVGhlbWVHdGsoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJh
ciYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFy
Jik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYsIFNjcm9s
bGJhclBhcnQsIGJvb2wpOwotICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChT
Y3JvbGxiYXImLCBTY3JvbGxiYXJQYXJ0LCBib29sKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdHJh
Y2tSZWN0KFNjcm9sbGJhciYsIGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNj
cm9sbGJhciYpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFz
VGh1bWIoU2Nyb2xsYmFyJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0
b25SZWN0KFNjcm9sbGJhciYsIFNjcm9sbGJhclBhcnQsIGJvb2wpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXImLCBTY3JvbGxiYXJQYXJ0
LCBib29sKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJh
ciYsIGJvb2wpIG92ZXJyaWRlOwogCiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgU2Ny
b2xsYmFyVGhlbWVHdGsoKTsKIAogICAgIHVzaW5nIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0
aHVtYlJlY3Q7CiAgICAgSW50UmVjdCB0aHVtYlJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVj
dCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCk7Ci0gICAgYm9vbCBwYWludChTY3JvbGxiYXImLCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBh
aW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBTY3JvbGxiYXImKTsKLSAg
ICB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0Jiwg
U2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRv
bihHcmFwaGljc0NvbnRleHQmLCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFy
UGFydCk7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyJiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhp
Y2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKTsKLSAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9u
U2l6ZShTY3JvbGxiYXImKTsKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Ny
b2xsYmFyJik7CisgICAgYm9vbCBwYWludChTY3JvbGxiYXImLCBHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50U2Nyb2xs
YmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBTY3JvbGxiYXImKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3ND
b250ZXh0JiwgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQmLCBTY3JvbGxiYXImLCBjb25zdCBJ
bnRSZWN0JiwgU2Nyb2xsYmFyUGFydCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyJiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRy
b2xTaXplKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Ny
b2xsYmFyJikgb3ZlcnJpZGU7CiAKICAgICAvLyBUT0RPOiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQg
R1RLKyB2YWx1ZXMuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHB1bGwgdGhlc2UgZnJvbSB0aGUg
dGhlbWUgaXRzZWxmLgotICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJE
ZWxheSgpIHsgcmV0dXJuIDAuMjA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGlt
ZXJEZWxheSgpIHsgcmV0dXJuIDAuMDI7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0
b3Njcm9sbFRpbWVyRGVsYXkoKSBvdmVycmlkZSB7IHJldHVybiAwLjIwOyB9CisgICAgdmlydHVh
bCBkb3VibGUgYXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBvdmVycmlkZSB7IHJldHVybiAwLjAyOyB9
CiAgICAgdm9pZCB0aGVtZUNoYW5nZWQoKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNGcmFt
ZVRoaWNrbmVzcygpOwotICAgIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyJik7Ci0g
ICAgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciYpOwogCi1wcm90ZWN0ZWQ6Citw
cml2YXRlOgogICAgIHZvaWQgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7CisgICAgR1JlZlB0cjxH
dGtTdHlsZUNvbnRleHQ+IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KFNjcm9sbGJhck9yaWVudGF0
aW9uID0gVmVydGljYWxTY3JvbGxiYXIpOwogCi0gICAgaW50IG1fdGh1bWJGYXRuZXNzOwotICAg
IGludCBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIGludCBtX3N0ZXBwZXJTaXplOwotICAgIGlu
dCBtX3N0ZXBwZXJTcGFjaW5nOworICAgIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXImKTsK
KworICAgIHN0cnVjdCBQcm9wZXJ0aWVzIHsKKyAgICAgICAgaW50IHRodW1iRmF0bmVzczsKKyAg
ICAgICAgaW50IHRyb3VnaEJvcmRlcldpZHRoOworICAgICAgICBpbnQgc3RlcHBlclNpemU7Cisg
ICAgICAgIGludCBzdGVwcGVyU3BhY2luZzsKKyAgICAgICAgZ2Jvb2xlYW4gdHJvdWdoVW5kZXJT
dGVwcGVyczsKKyAgICB9OworCisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IG1fY2FjaGVk
U3R5bGVDb250ZXh0OworICAgIFByb3BlcnRpZXMgbV9jYWNoZWRQcm9wZXJ0aWVzOwogICAgIGlu
dCBtX21pblRodW1iTGVuZ3RoOwotICAgIGdib29sZWFuIG1fdHJvdWdoVW5kZXJTdGVwcGVyczsK
ICAgICBnYm9vbGVhbiBtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQ7CiAgICAgZ2Jvb2xlYW4g
bV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydDsKICAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0b25T
dGFydFBhcnQ7Cg==
</data>
<flag name="review"
          id="293399"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>