<?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>225650</bug_id>
          
          <creation_ts>2021-05-11 05:08:13 -0700</creation_ts>
          <short_desc>[WTF][GStreamer] Add RAII lockers for 3rd party locks</short_desc>
          <delta_ts>2021-06-09 04:39:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alicia Boya García">aboya</reporter>
          <assigned_to name="Alicia Boya García">aboya</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758875</commentid>
    <comment_count>0</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-11 05:08:13 -0700</bug_when>
    <thetext>This patch introduces RAII locker classes that wrap GST_OBJECT_LOCK
and GST_PAD_STREAM_LOCK to match the style, safety and convenience of
locks from WTF.

This patch introduces no behavior changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758877</commentid>
    <comment_count>1</comment_count>
      <attachid>428265</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-11 05:15:31 -0700</bug_when>
    <thetext>Created attachment 428265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758893</commentid>
    <comment_count>2</comment_count>
      <attachid>428265</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-05-11 06:57:16 -0700</bug_when>
    <thetext>Comment on attachment 428265
Patch

Art.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758894</commentid>
    <comment_count>3</comment_count>
      <attachid>428265</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-05-11 07:10:27 -0700</bug_when>
    <thetext>Comment on attachment 428265
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:323
&gt; +    explicit ExternalLocker(T* lockable) : m_lockable(lockable) { lock(); }

I wonder if we should ASSERT(lockable)...

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:332
&gt; +    T* lockable() { return m_lockable; }
&gt; +
&gt; +    explicit operator bool() const { return !!m_lockable; }

Why do you need these?

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:387
&gt; +inline GstObjectLocker holdGstObjectLock(void* gstObject) WARN_UNUSED_RETURN;
&gt; +inline GstObjectLocker holdGstObjectLock(void* gstObject)
&gt; +{
&gt; +    return GstObjectLocker(gstObject);
&gt; +}

Can&apos;t we collapse declaration and implementation?

Independently of asserting above, it could be interesting ASSERT(GST_IS_OBJECT(gstObject))

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:393
&gt; +inline GstPadStreamLocker holdGstPadStreamLock(GstPad*) WARN_UNUSED_RETURN;
&gt; +inline GstPadStreamLocker holdGstPadStreamLock(GstPad* pad)
&gt; +{
&gt; +    return GstPadStreamLocker(pad);
&gt; +}

Ditto.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759097</commentid>
    <comment_count>4</comment_count>
      <attachid>428265</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-11 16:30:10 -0700</bug_when>
    <thetext>Comment on attachment 428265
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:323
&gt;&gt; +    explicit ExternalLocker(T* lockable) : m_lockable(lockable) { lock(); }
&gt; 
&gt; I wonder if we should ASSERT(lockable)...

We definitely can.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:332
&gt;&gt; +    explicit operator bool() const { return !!m_lockable; }
&gt; 
&gt; Why do you need these?

It&apos;s here just for completeness to match WTF::Locker, even though we don&apos;t need all the fancy features at the moment (such as moving locks). This tells you if this locker still holds a lock: it doesn&apos;t if it has been moved.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:387
&gt;&gt; +}
&gt; 
&gt; Can&apos;t we collapse declaration and implementation?
&gt; 
&gt; Independently of asserting above, it could be interesting ASSERT(GST_IS_OBJECT(gstObject))

We can&apos;t collapse declaration and implementation because WARN_UNUSED_RETURN can only be used in declarations, not in function definitions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759199</commentid>
    <comment_count>5</comment_count>
      <attachid>428265</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-05-12 01:12:49 -0700</bug_when>
    <thetext>Comment on attachment 428265
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:332
&gt;&gt;&gt; +    explicit operator bool() const { return !!m_lockable; }
&gt;&gt; 
&gt;&gt; Why do you need these?
&gt; 
&gt; It&apos;s here just for completeness to match WTF::Locker, even though we don&apos;t need all the fancy features at the moment (such as moving locks). This tells you if this locker still holds a lock: it doesn&apos;t if it has been moved.

You can keep them.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:384
&gt; +// We can&apos;t pass macros as template parameters, so we need to wrap them in inline functions.
&gt; +inline void gstObjectLock(void* object) { GST_OBJECT_LOCK(object); }
&gt; +inline void gstObjectUnlock(void* object) { GST_OBJECT_UNLOCK(object); }
&gt; +inline void gstPadStreamLock(GstPad* pad) { GST_PAD_STREAM_LOCK(pad); }
&gt; +inline void gstPadStreamUnlock(GstPad* pad) { GST_PAD_STREAM_UNLOCK(pad); }
&gt; +
&gt; +using GstObjectLocker = ExternalLocker&lt;void, gstObjectLock, gstObjectUnlock&gt;;
&gt; +using GstPadStreamLocker = ExternalLocker&lt;GstPad, gstPadStreamLock, gstPadStreamUnlock&gt;;
&gt; +
&gt; +inline GstObjectLocker holdGstObjectLock(void* gstObject) WARN_UNUSED_RETURN;
&gt; +inline GstObjectLocker holdGstObjectLock(void* gstObject)

I would also be tempted of moving ExternalLocker to WTF and just keeping these functions here. WDYT? (It would need a new review, easy I hope) Besides, I think you can just use holdLock as a name and let function overload do its job. WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760702</commentid>
    <comment_count>6</comment_count>
      <attachid>428817</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-17 02:20:27 -0700</bug_when>
    <thetext>Created attachment 428817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763086</commentid>
    <comment_count>7</comment_count>
      <attachid>428817</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-05-24 03:55:55 -0700</bug_when>
    <thetext>Comment on attachment 428817
Patch

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

&gt; Source/WTF/wtf/Locker.h:188
&gt; +    explicit ExternalLocker(T* lockable) : m_lockable(lockable) { lock(); }

You missed this ASSERT.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:331
&gt; +    return GstObjectLocker(gstObject);

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:337
&gt; +    return GstPadStreamLocker(pad);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763109</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-24 06:59:33 -0700</bug_when>
    <thetext>Can you clarify the difference between this locker and the WTF::Locker we already have? As far as I know WTF supports all types of locks, not just WTF::Lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763113</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-24 07:06:16 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #8)
&gt; Can you clarify the difference between this locker and the WTF::Locker we
&gt; already have? As far as I know WTF supports all types of locks, not just
&gt; WTF::Lock.

I see, you need custom lock()/unlock() functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763114</commentid>
    <comment_count>10</comment_count>
      <attachid>428817</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-24 07:08:34 -0700</bug_when>
    <thetext>Comment on attachment 428817
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:329
&gt; +inline GstObjectLocker holdGstObjectLock(void* gstObject)

What do those hold functions bring? Why not call the constructor directly at call sites like we now do for the regular Locker:
GstObjectLocker locker { object };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763115</commentid>
    <comment_count>11</comment_count>
      <attachid>428817</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-24 07:14:27 -0700</bug_when>
    <thetext>Comment on attachment 428817
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:329
&gt;&gt; +inline GstObjectLocker holdGstObjectLock(void* gstObject)
&gt; 
&gt; What do those hold functions bring? Why not call the constructor directly at call sites like we now do for the regular Locker:
&gt; GstObjectLocker locker { object };

They were there for consistency with holdLock(), which was used all across WebKit, until it stopped being used last Friday because the clang thread safety checker couldn&apos;t support it. https://bugs.webkit.org/show_bug.cgi?id=226119

Now I have to rework this patch a bit to adapt it to the new checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763120</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-24 07:28:15 -0700</bug_when>
    <thetext>(In reply to Alicia Boya García from comment #11)
&gt; Comment on attachment 428817 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428817&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:329
&gt; &gt;&gt; +inline GstObjectLocker holdGstObjectLock(void* gstObject)
&gt; &gt; 
&gt; &gt; What do those hold functions bring? Why not call the constructor directly at call sites like we now do for the regular Locker:
&gt; &gt; GstObjectLocker locker { object };
&gt; 
&gt; They were there for consistency with holdLock(), which was used all across
&gt; WebKit, until it stopped being used last Friday because the clang thread
&gt; safety checker couldn&apos;t support it.
&gt; https://bugs.webkit.org/show_bug.cgi?id=226119
&gt; 
&gt; Now I have to rework this patch a bit to adapt it to the new checker.

I don’t believe clang thread safety analysis will work with GstObject. However, I think it would still be nice to be as consistent as possible with the rest of WebKit. So I think the patch is fine as is but I would just remove the hold functions. I would also have moved the new ExternalLocker to its own header probably.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763469</commentid>
    <comment_count>13</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-05-25 03:46:00 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #12)
&gt; I don’t believe clang thread safety analysis will work with GstObject.
&gt; However, I think it would still be nice to be as consistent as possible with
&gt; the rest of WebKit. So I think the patch is fine as is but I would just
&gt; remove the hold functions. I would also have moved the new ExternalLocker to
&gt; its own header probably.

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767802</commentid>
    <comment_count>14</comment_count>
      <attachid>430851</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-06-08 09:36:51 -0700</bug_when>
    <thetext>Created attachment 430851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768131</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-09 03:58:45 -0700</bug_when>
    <thetext>Committed r278655 (238637@main): &lt;https://commits.webkit.org/238637@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430851.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768132</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-09 03:59:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/79068061&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768138</commentid>
    <comment_count>17</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-06-09 04:39:39 -0700</bug_when>
    <thetext>&gt; I don’t believe clang thread safety analysis will work with GstObject.

You&apos;re right, as even though it would be possible to add lock/unlock annotations, all library GStreamer code would not contain any require_lock annotations.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428265</attachid>
            <date>2021-05-11 05:15:31 -0700</date>
            <delta_ts>2021-05-17 02:20:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225650-20210511141529.patch</filename>
            <type>text/plain</type>
            <size>11600</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZlMjI4Mjc0YjgzNDNk
MTk0ODc5ZGRmNWFhYTM0ZTBmNWIxNGQ4MS4uZGNmZTM1MjcyZDk3Y2IxOWVlYzcxMjI1YmQ3MTFl
MGNhZjMxMjYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTA1LTEwICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBBZGQgUkFJSSBsb2NrZXJzIGZvciBHU3RyZWFtZXIgbG9ja3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTY1MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBSQUlJ
IGxvY2tlciBjbGFzc2VzIHRoYXQgd3JhcCBHU1RfT0JKRUNUX0xPQ0sKKyAgICAgICAgYW5kIEdT
VF9QQURfU1RSRUFNX0xPQ0sgdG8gbWF0Y2ggdGhlIHN0eWxlLCBzYWZldHkgYW5kIGNvbnZlbmll
bmNlIG9mCisgICAgICAgIGxvY2tzIGZyb20gV1RGLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byBjaGFuZ2VzIGFsbCB1c2FnZXMgb2YgR1N0cmVhbWVyIGxvY2tzIGluIHRoZSBXZWJLaXQKKyAg
ICAgICAgY29kZWJhc2UgdG8gdXNlIHRoZXNlIG5ldyBsb2NrZXJzLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW50cm9kdWNlcyBubyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oOgorICAgICAgICAodW5sb2Nr
RnVuY3Rpb24pOgorICAgICAgICAoZ3N0T2JqZWN0TG9jayk6CisgICAgICAgIChnc3RPYmplY3RV
bmxvY2spOgorICAgICAgICAoZ3N0UGFkU3RyZWFtTG9jayk6CisgICAgICAgIChnc3RQYWRTdHJl
YW1VbmxvY2spOgorICAgICAgICAoaG9sZEdzdE9iamVjdExvY2spOgorICAgICAgICAoaG9sZEdz
dFBhZFN0cmVhbUxvY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9U
ZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2Via2l0VGV4dENvbWJpbmVy
UGFkR2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0VGV4dENvbWJpbmVyUGFkU2V0UHJvcGVy
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVk
aWFTb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNXYWl0Rm9yUGFk
TGlua2VkT3JGbHVzaCk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0xvb3ApOgorICAgICAgICAo
d2ViS2l0TWVkaWFTcmNTdHJlYW1GbHVzaCk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0dldFVy
aSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1NldFVyaSk6CisKIDIwMjEtMDUtMTAgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJd
IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC12aWRlby10cmFja3Mt
ZGlzYWJsZWQuaHRtbCBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCmluZGV4IGFiMjc1YWM2
Mzc4YjMwYTFlM2Y3NzY0YmE3ZWZlZDI0ODhjNTU0MTUuLjQ5MmUwOWFlNGI0NWRiMGZlZDNlYWRj
ZGI2YTAyYjY4NDE4MmRhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKQEAgLTMxNiw0ICsz
MTYsODAgQEAgR3N0QnVmZmVyKiBnc3RCdWZmZXJOZXdXcmFwcGVkRmFzdCh2b2lkKiBkYXRhLCBz
aXplX3QgbGVuZ3RoKTsKICNkZWZpbmUgd2Via2l0R3N0QXVkaW9Gb3JtYXRGaWxsU2lsZW5jZSBn
c3RfYXVkaW9fZm9ybWF0X2ZpbGxfc2lsZW5jZQogI2VuZGlmCiAKKy8vIFRoaXMgaXMgYSBjbG9z
ZSByZXBsaWNhIG9mIExvY2tlciwgYnV0IGZvciBnZW5lcmljIGxvY2svdW5sb2NrIGZ1bmN0aW9u
cy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHZvaWQgKGxvY2tGdW5jdGlvbikoVCopLCB2b2lkICgq
dW5sb2NrRnVuY3Rpb24pKFQqKT4KK2NsYXNzIEV4dGVybmFsTG9ja2VyOiBwdWJsaWMgV1RGOjpB
YnN0cmFjdExvY2tlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgRXh0ZXJuYWxMb2NrZXIoVCog
bG9ja2FibGUpIDogbV9sb2NrYWJsZShsb2NrYWJsZSkgeyBsb2NrKCk7IH0KKworICAgIH5FeHRl
cm5hbExvY2tlcigpCisgICAgeworICAgICAgICB1bmxvY2soKTsKKyAgICB9CisKKyAgICBUKiBs
b2NrYWJsZSgpIHsgcmV0dXJuIG1fbG9ja2FibGU7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbG9ja2FibGU7IH0KKworICAgIHZvaWQgdW5sb2Nr
RWFybHkoKQorICAgIHsKKyAgICAgICAgdW5sb2NrKCk7CisgICAgICAgIG1fbG9ja2FibGUgPSBu
dWxscHRyOworICAgIH0KKworICAgIEV4dGVybmFsTG9ja2VyKEV4dGVybmFsTG9ja2VyJiYgb3Ro
ZXIpCisgICAgICAgIDogbV9sb2NrYWJsZShvdGhlci5tX2xvY2thYmxlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCZvdGhlciAhPSB0aGlzKTsKKyAgICAgICAgb3RoZXIubV9sb2NrYWJsZSA9IG51
bGxwdHI7CisgICAgfQorCisgICAgRXh0ZXJuYWxMb2NrZXImIG9wZXJhdG9yPShFeHRlcm5hbExv
Y2tlciYmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCZvdGhlciAhPSB0aGlzKTsKKyAg
ICAgICAgbV9sb2NrYWJsZSA9IG90aGVyLm1fbG9ja2FibGU7CisgICAgICAgIG90aGVyLm1fbG9j
a2FibGUgPSBudWxscHRyOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCitwcml2YXRl
OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIGZyaWVuZCBjbGFzcyBEcm9wTG9ja0ZvclNj
b3BlOworCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fbG9ja2FibGUp
CisgICAgICAgICAgICB1bmxvY2tGdW5jdGlvbihtX2xvY2thYmxlKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fbG9ja2FibGUpCisgICAgICAgICAgICBs
b2NrRnVuY3Rpb24obV9sb2NrYWJsZSk7CisgICAgfQorCisgICAgVCogbV9sb2NrYWJsZTsKK307
CisKKy8vIFdlIGNhbid0IHBhc3MgbWFjcm9zIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnMsIHNvIHdl
IG5lZWQgdG8gd3JhcCB0aGVtIGluIGlubGluZSBmdW5jdGlvbnMuCitpbmxpbmUgdm9pZCBnc3RP
YmplY3RMb2NrKHZvaWQqIG9iamVjdCkgeyBHU1RfT0JKRUNUX0xPQ0sob2JqZWN0KTsgfQoraW5s
aW5lIHZvaWQgZ3N0T2JqZWN0VW5sb2NrKHZvaWQqIG9iamVjdCkgeyBHU1RfT0JKRUNUX1VOTE9D
SyhvYmplY3QpOyB9CitpbmxpbmUgdm9pZCBnc3RQYWRTdHJlYW1Mb2NrKEdzdFBhZCogcGFkKSB7
IEdTVF9QQURfU1RSRUFNX0xPQ0socGFkKTsgfQoraW5saW5lIHZvaWQgZ3N0UGFkU3RyZWFtVW5s
b2NrKEdzdFBhZCogcGFkKSB7IEdTVF9QQURfU1RSRUFNX1VOTE9DSyhwYWQpOyB9CisKK3VzaW5n
IEdzdE9iamVjdExvY2tlciA9IEV4dGVybmFsTG9ja2VyPHZvaWQsIGdzdE9iamVjdExvY2ssIGdz
dE9iamVjdFVubG9jaz47Cit1c2luZyBHc3RQYWRTdHJlYW1Mb2NrZXIgPSBFeHRlcm5hbExvY2tl
cjxHc3RQYWQsIGdzdFBhZFN0cmVhbUxvY2ssIGdzdFBhZFN0cmVhbVVubG9jaz47CisKK2lubGlu
ZSBHc3RPYmplY3RMb2NrZXIgaG9sZEdzdE9iamVjdExvY2sodm9pZCogZ3N0T2JqZWN0KSBXQVJO
X1VOVVNFRF9SRVRVUk47CitpbmxpbmUgR3N0T2JqZWN0TG9ja2VyIGhvbGRHc3RPYmplY3RMb2Nr
KHZvaWQqIGdzdE9iamVjdCkKK3sKKyAgICByZXR1cm4gR3N0T2JqZWN0TG9ja2VyKGdzdE9iamVj
dCk7Cit9CisKK2lubGluZSBHc3RQYWRTdHJlYW1Mb2NrZXIgaG9sZEdzdFBhZFN0cmVhbUxvY2so
R3N0UGFkKikgV0FSTl9VTlVTRURfUkVUVVJOOworaW5saW5lIEdzdFBhZFN0cmVhbUxvY2tlciBo
b2xkR3N0UGFkU3RyZWFtTG9jayhHc3RQYWQqIHBhZCkKK3sKKyAgICByZXR1cm4gR3N0UGFkU3Ry
ZWFtTG9ja2VyKHBhZCk7Cit9CisKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5l
clBhZEdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVGV4dENvbWJpbmVyUGFkR1N0cmVhbWVyLmNwcAppbmRleCA5ZTVlMTc3M2M2NDc0Zjg5
MDBiMjM2ZDNhZTM1YmE4YmNjZTQwNDY1Li4yYzhiZTBkMzU1Y2MyNTlmYjkwYmM1NTIzOTJmMTdk
ZDQzMmE3ZTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVGV4dENvbWJpbmVyUGFkR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENvbWJpbmVyUGFkR1N0cmVhbWVyLmNw
cApAQCAtNjIsMTIgKzYyLDEzIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRUZXh0Q29tYmluZXJQ
YWRFdmVudChHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdEV2CiAgICAgICAgIGdz
dF9ldmVudF9wYXJzZV90YWcoZXZlbnQsICZ0YWdzKTsKICAgICAgICAgQVNTRVJUKHRhZ3MpOwog
Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhwYWQpOwotICAgICAgICBpZiAoIWNvbWJpbmVyUGFk
LT5wcml2LT50YWdzKQotICAgICAgICAgICAgY29tYmluZXJQYWQtPnByaXYtPnRhZ3MgPSBhZG9w
dEdSZWYoZ3N0X3RhZ19saXN0X2NvcHkodGFncykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBnc3RfdGFnX2xpc3RfaW5zZXJ0KGNvbWJpbmVyUGFkLT5wcml2LT50YWdzLmdldCgpLCB0YWdz
LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhwYWQp
OworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRHc3RPYmplY3RMb2Nr
KHBhZCk7CisgICAgICAgICAgICBpZiAoIWNvbWJpbmVyUGFkLT5wcml2LT50YWdzKQorICAgICAg
ICAgICAgICAgIGNvbWJpbmVyUGFkLT5wcml2LT50YWdzID0gYWRvcHRHUmVmKGdzdF90YWdfbGlz
dF9jb3B5KHRhZ3MpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnc3RfdGFn
X2xpc3RfaW5zZXJ0KGNvbWJpbmVyUGFkLT5wcml2LT50YWdzLmdldCgpLCB0YWdzLCBHU1RfVEFH
X01FUkdFX1JFUExBQ0UpOworICAgICAgICB9CiAKICAgICAgICAgZ19vYmplY3Rfbm90aWZ5X2J5
X3BzcGVjKEdfT0JKRUNUKHBhZCksIHNPYmpQcm9wZXJ0aWVzW1BST1BfUEFEX1RBR1NdKTsKICAg
ICAgICAgYnJlYWs7CkBAIC04MiwxNyArODMsMTcgQEAgc3RhdGljIHZvaWQgd2Via2l0VGV4dENv
bWJpbmVyUGFkR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUkK
IHsKICAgICBhdXRvKiBwYWQgPSBXRUJLSVRfVEVYVF9DT01CSU5FUl9QQUQob2JqZWN0KTsKICAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfUEFEX1RBR1M6Ci0gICAgICAg
IEdTVF9PQkpFQ1RfTE9DSyhvYmplY3QpOworICAgIGNhc2UgUFJPUF9QQURfVEFHUzogeworICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRHc3RPYmplY3RMb2NrKG9iamVjdCk7CiAgICAgICAgIGlm
IChwYWQtPnByaXYtPnRhZ3MpCiAgICAgICAgICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQodmFsdWUs
IGdzdF90YWdfbGlzdF9jb3B5KHBhZC0+cHJpdi0+dGFncy5nZXQoKSkpOwotICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhvYmplY3QpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5O
RVJfQ09NQklORVJfUEFEOgotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sob2JqZWN0KTsKKyAgICB9
CisgICAgY2FzZSBQUk9QX0lOTkVSX0NPTUJJTkVSX1BBRDogeworICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRHc3RPYmplY3RMb2NrKG9iamVjdCk7CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgcGFkLT5wcml2LT5pbm5lckNvbWJpbmVyUGFkLmdldCgpKTsKLSAgICAgICAgR1NU
X09CSkVDVF9VTkxPQ0sob2JqZWN0KTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDMsMTEgKzEwNCwxMSBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRUZXh0Q29tYmluZXJQYWRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsCiB7CiAgICAgYXV0byogcGFkID0gV0VCS0lUX1RFWFRfQ09N
QklORVJfUEFEKG9iamVjdCk7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQ
Uk9QX0lOTkVSX0NPTUJJTkVSX1BBRDoKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLKG9iamVjdCk7
CisgICAgY2FzZSBQUk9QX0lOTkVSX0NPTUJJTkVSX1BBRDogeworICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRHc3RPYmplY3RMb2NrKG9iamVjdCk7CiAgICAgICAgIHBhZC0+cHJpdi0+aW5uZXJD
b21iaW5lclBhZCA9IGFkb3B0R1JlZihHU1RfUEFEX0NBU1QoZ192YWx1ZV9nZXRfb2JqZWN0KHZh
bHVlKSkpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhvYmplY3QpOwogICAgICAgICBicmVh
azsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwogICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
V2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKaW5k
ZXggNmQ4MzcwNDU4NjJiNzE5NGRlMDU3OWQzYjI4OTRlNWU5N2FmYTc4MC4uNmQ5OWYyZTFlMzY5
MDA3YWM0MzkzMGQzMGJjMDY2NGNlMzE3YjdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTM2OCw2ICszNjgsMjMgQEAgc3Rh
dGljIHZvaWQgd2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQoR3N0UGFkKiBwYWQsIEdzdFBhZCosIHZv
aWQqKQogICAgIHN0cmVhbWluZ01lbWJlcnMtPnBhZExpbmtlZE9yRmx1c2hlZENvbmRpdGlvbi5u
b3RpZnlPbmUoKTsKIH0KIAorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNXYWl0Rm9yUGFkTGlu
a2VkT3JGbHVzaChHc3RQYWQqIHBhZCwgRGF0YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVy
cz46OkxvY2tlZFdyYXBwZXImIHN0cmVhbWluZ01lbWJlcnMpCit7CisgICAgeworICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRHc3RPYmplY3RMb2NrKHBhZCk7CisgICAgICAgIGlmIChMSUtFTFko
R1NUX1BBRF9JU19MSU5LRUQocGFkKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwYWQsICJXYWl0aW5nIGZvciB0aGUgcGFkIHRvIGJlIGxpbmtlZC4u
LiIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBhZCwgImxpbmtlZCIsIEdfQ0FMTEJBQ0so
d2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBzdHJlYW1p
bmdNZW1iZXJzLT5wYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ud2FpdChzdHJlYW1pbmdNZW1i
ZXJzLm11dGV4KCkpOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KHBhZCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQpLCBu
dWxscHRyKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIkZpbmlzaGVkIHdhaXRpbmcgZm9y
IHRoZSBwYWQgdG8gYmUgbGlua2VkLiIpOworfQorCiAvLyBDYWxsZWQgd2l0aCBTVFJFQU1fTE9D
Sy4KIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjTG9vcCh2b2lkKiB1c2VyRGF0YSkKIHsKQEAg
LTM4MiwyMiArMzk5LDExIEBAIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjTG9vcCh2b2lkKiB1
c2VyRGF0YSkKIAogICAgIC8vIFNpbmNlIHRoZSBwYWQgY2FuIGFuZCB3aWxsIGJlIGFkZGVkIHdo
ZW4gdGhlIGVsZW1lbnQgaXMgaW4gUExBWUlORyBzdGF0ZSwgdGhpcyB0YXNrIGNhbiBzdGFydCBy
dW5uaW5nCiAgICAgLy8gYmVmb3JlIHRoZSBwYWQgaXMgbGlua2VkLiBXYWl0IGZvciB0aGUgcGFk
IHRvIGJlIGxpbmtlZCB0byBhdm9pZCBidWZmZXJzIGJlaW5nIGxvc3QgdG8gbm90LWxpbmtlZCBl
cnJvcnMuCi0gICAgR1NUX09CSkVDVF9MT0NLKHBhZCk7Ci0gICAgaWYgKCFHU1RfUEFEX0lTX0xJ
TktFRChwYWQpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiV2FpdGluZyBmb3Ig
dGhlIHBhZCB0byBiZSBsaW5rZWQuLi4iKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChwYWQs
ICJsaW5rZWQiLCBHX0NBTExCQUNLKHdlYktpdE1lZGlhU3JjUGFkTGlua2VkKSwgbnVsbHB0cik7
Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHBhZCk7Ci0KLSAgICAgICAgc3RyZWFtaW5nTWVt
YmVycy0+cGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0aW9uLndhaXQoc3RyZWFtaW5nTWVtYmVycy5t
dXRleCgpKTsKLQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
cGFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZCksIG51
bGxwdHIpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIkZpbmlzaGVkIHdhaXRpbmcg
Zm9yIHRoZSBwYWQgdG8gYmUgbGlua2VkLiIpOwotICAgICAgICBpZiAoc3RyZWFtaW5nTWVtYmVy
cy0+aXNGbHVzaGluZykgewotICAgICAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0socGFkKTsKKyAgICB3ZWJLaXRNZWRpYVNyY1dhaXRGb3JQYWRMaW5rZWRPckZs
dXNoKHBhZCwgc3RyZWFtaW5nTWVtYmVycyk7CisgICAgaWYgKHN0cmVhbWluZ01lbWJlcnMtPmlz
Rmx1c2hpbmcpIHsKKyAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgQVNTRVJUKGdzdF9wYWRfaXNfbGlua2VkKHBhZCkpOwogCiAgICAg
Ly8gQnkga2VlcGluZyB0aGUgbG9jayB3ZSBhcmUgZ3VhcmFudGVlZCB0aGF0IGEgZmx1c2ggd2ls
bCBub3QgaGFwcGVuIHdoaWxlIHdlIHNlbmQgZXNzZW50aWFsIGV2ZW50cy4KQEAgLTYxMSw3ICs2
MTcsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKFN0cmVhbSogc3Ry
ZWFtLCBib29sIGlzU2Vla2luZ0ZsdXNoKQogICAgIGlmICghc2tpcEZsdXNoKSB7CiAgICAgICAg
IC8vIEJ5IHRha2luZyB0aGUgc3RyZWFtIGxvY2sgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdHJl
YW1pbmcgdGhyZWFkIHRhc2sgdG8gc3RvcCBpZiBpdCBoYWRuJ3QgeWV0LgogICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHN0cmVhbS0+cGFkLmdldCgpLCAiVGFraW5nIHRoZSBTVFJFQU1fTE9DSy4i
KTsKLSAgICAgICAgR1NUX1BBRF9TVFJFQU1fTE9DSyhzdHJlYW0tPnBhZC5nZXQoKSk7CisgICAg
ICAgIGF1dG8gc3RyZWFtTG9jayA9IGhvbGRHc3RQYWRTdHJlYW1Mb2NrKHN0cmVhbS0+cGFkLmdl
dCgpKTsKICAgICAgICAgewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBh
ZC5nZXQoKSwgIlRha2luZyB0aGUgU3RyZWFtaW5nTWVtYmVycyBtdXRleCBhZ2Fpbi4iKTsKICAg
ICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFw
cGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsK
QEAgLTYyNyw3ICs2MzMsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNo
KFN0cmVhbSogc3RyZWFtLCBib29sIGlzU2Vla2luZ0ZsdXNoKQogCiAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0KCksICJTdGFydGluZyB3ZWJLaXRNZWRpYVNyY0xvb3Ag
dGFzayBhbmQgcmVsZWFzaW5nIHRoZSBTVFJFQU1fTE9DSy4iKTsKICAgICAgICAgZ3N0X3BhZF9z
dGFydF90YXNrKHN0cmVhbS0+cGFkLmdldCgpLCB3ZWJLaXRNZWRpYVNyY0xvb3AsIHN0cmVhbS0+
cGFkLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLKHN0cmVh
bS0+cGFkLmdldCgpKTsKICAgICB9CiB9CiAKQEAgLTczOSwxMCArNzQ0LDggQEAgc3RhdGljIGdj
aGFyKiB3ZWJLaXRNZWRpYVNyY0dldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyKQogICAgIFdl
YktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKGhhbmRsZXIpOwogICAgIGdj
aGFyKiByZXN1bHQ7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLSAgICByZXN1bHQg
PSBnX3N0cmR1cChzb3VyY2UtPnByaXYtPnVyaS5nZXQoKSk7Ci0gICAgR1NUX09CSkVDVF9VTkxP
Q0soc291cmNlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbG9ja2VyID0gaG9sZEdz
dE9iamVjdExvY2soc291cmNlKTsKKyAgICByZXR1cm4gZ19zdHJkdXAoc291cmNlLT5wcml2LT51
cmkuZ2V0KCkpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNTZXRVcmkoR3N0
VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSwgR0Vycm9yKiopCkBAIC03NTQs
OSArNzU3LDggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhU3JjU2V0VXJpKEdzdFVSSUhh
bmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEcKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZEdzdE9iamVjdExvY2soc291cmNlKTsKICAgICBzb3VyY2UtPnByaXYtPnVyaSA9IEdV
bmlxdWVQdHI8Y2hhcj4oZ19zdHJkdXAodXJpKSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc291
cmNlKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428817</attachid>
            <date>2021-05-17 02:20:27 -0700</date>
            <delta_ts>2021-06-08 09:36:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225650-20210517112028.patch</filename>
            <type>text/plain</type>
            <size>12818</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRlOTdhM2M4YzIzOGQyMDQzMjM3Zjg1
MTU2ZjZlMDAwNjk4MzAwOGIuLmIwYThjODNlMjY5MzFmYjJkOTdkNTMwMDJhMGYxMDI3ZGVmNjE2
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDUtMTUgIEFsaWNpYSBCb3lhIEdhcmPDrWEg
IDxhYm95YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXVEZdW0dTdHJlYW1lcl0gQWRkIFJBSUkg
bG9ja2VycyBmb3IgM3JkIHBhcnR5IGxvY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU2NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgV1RGOjpFeHRlcm5hbExv
Y2tlciwgd2hpY2ggYWxsb3dzIHRvIGxvY2sgM3JkCisgICAgICAgIHBhcnR5IG11dGV4ZXMgaW4g
YSBSQUlJIGZhc2hpb24sIHZlcnkgc2ltaWxhciB0byBXVEY6OkxvY2tlci4KKworICAgICAgICBU
aGlzIGlzIHVzZWQgYWxzbyBpbiBXZWJDb3JlIHRvIHByb3ZpZGUgUkFJSSBsb2NrZXJzIGZvciBH
U3RyZWFtZXIuCisKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChXVEY6OnVubG9j
a0Z1bmN0aW9uKToKKwogMjAyMS0wNS0xMSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgW1dURl0gQWRkIGhvbGRMb2NrKCkgb3ZlcmxvYWQgZm9yIFdU
Rjo6RGF0YU11dGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDhkZDU4OTUzOGY4ZWFkMTAyMTVlYzFiZjMyMjIz
ZmQ5ZTg1MmFmMi4uMmQ4OWYxNzVjZTRhZGMyYTA0NGZiZjBmM2Y4NWRlMzg5MGIwZTMwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTA1LTEwICBBbGljaWEgQm95YSBHYXJjw61h
ICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1RGXVtHU3RyZWFtZXJdIEFkZCBSQUlJ
IGxvY2tlcnMgZm9yIDNyZCBwYXJ0eSBsb2NrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFJBSUkgbG9ja2VyIGNs
YXNzZXMgdGhhdCB3cmFwIEdTVF9PQkpFQ1RfTE9DSworICAgICAgICBhbmQgR1NUX1BBRF9TVFJF
QU1fTE9DSyB0byBtYXRjaCB0aGUgc3R5bGUsIHNhZmV0eSBhbmQgY29udmVuaWVuY2Ugb2YKKyAg
ICAgICAgbG9ja3MgZnJvbSBXVEYuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNoYW5nZXMg
YWxsIHVzYWdlcyBvZiBHU3RyZWFtZXIgbG9ja3MgaW4gdGhlIFdlYktpdAorICAgICAgICBjb2Rl
YmFzZSB0byB1c2UgdGhlc2UgbmV3IGxvY2tlcnMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRy
b2R1Y2VzIG5vIGJlaGF2aW9yIGNoYW5nZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmg6CisgICAgICAgIChnc3RPYmplY3RMb2NrKToK
KyAgICAgICAgKGdzdE9iamVjdFVubG9jayk6CisgICAgICAgIChnc3RQYWRTdHJlYW1Mb2NrKToK
KyAgICAgICAgKGdzdFBhZFN0cmVhbVVubG9jayk6CisgICAgICAgIChob2xkR3N0T2JqZWN0TG9j
ayk6CisgICAgICAgIChob2xkR3N0UGFkU3RyZWFtTG9jayk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lclBhZEdTdHJlYW1lci5jcHA6CisgICAgICAg
ICh3ZWJraXRUZXh0Q29tYmluZXJQYWRHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRUZXh0
Q29tYmluZXJQYWRTZXRQcm9wZXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJL
aXRNZWRpYVNyY1dhaXRGb3JQYWRMaW5rZWRPckZsdXNoKToKKyAgICAgICAgKHdlYktpdE1lZGlh
U3JjTG9vcCk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKToKKyAgICAgICAg
KHdlYktpdE1lZGlhU3JjR2V0VXJpKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2V0VXJpKToK
KwogMjAyMS0wNS0xMSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1dURl0gQWRkIGhvbGRMb2NrKCkgb3ZlcmxvYWQgZm9yIFdURjo6RGF0YU11dGV4
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Mb2NrZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0xv
Y2tlci5oCmluZGV4IDFmMzMxMTAzN2E5ZDQ1MTI3MGI4ZDc5NzJhZWNmZmU5ZGRiMmVjZGEuLjc2
MjE1MTZhODA4OGI2NDEwOTEyODQ2MGI5NjNiZGNmY2ZlNWNkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0xvY2tlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0xvY2tlci5oCkBAIC0xODEs
NiArMTgxLDYxIEBAIHByaXZhdGU6CiAgICAgTG9ja2VyPExvY2tUeXBlPiYgbV9sb2NrOwogfTsK
IAorLy8gVGhpcyBpcyBhIGNsb3NlIHJlcGxpY2Egb2YgTG9ja2VyLCBidXQgZm9yIGdlbmVyaWMg
bG9jay91bmxvY2sgZnVuY3Rpb25zLgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdm9pZCAobG9ja0Z1
bmN0aW9uKShUKiksIHZvaWQgKCp1bmxvY2tGdW5jdGlvbikoVCopPgorY2xhc3MgRXh0ZXJuYWxM
b2NrZXI6IHB1YmxpYyBXVEY6OkFic3RyYWN0TG9ja2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBFeHRlcm5hbExvY2tlcihUKiBsb2NrYWJsZSkgOiBtX2xvY2thYmxlKGxvY2thYmxlKSB7IGxv
Y2soKTsgfQorCisgICAgfkV4dGVybmFsTG9ja2VyKCkKKyAgICB7CisgICAgICAgIHVubG9jaygp
OworICAgIH0KKworICAgIFQqIGxvY2thYmxlKCkgeyByZXR1cm4gbV9sb2NrYWJsZTsgfQorCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9sb2NrYWJsZTsg
fQorCisgICAgdm9pZCB1bmxvY2tFYXJseSgpCisgICAgeworICAgICAgICB1bmxvY2soKTsKKyAg
ICAgICAgbV9sb2NrYWJsZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgRXh0ZXJuYWxMb2NrZXIo
RXh0ZXJuYWxMb2NrZXImJiBvdGhlcikKKyAgICAgICAgOiBtX2xvY2thYmxlKG90aGVyLm1fbG9j
a2FibGUpCisgICAgeworICAgICAgICBBU1NFUlQoJm90aGVyICE9IHRoaXMpOworICAgICAgICBv
dGhlci5tX2xvY2thYmxlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBFeHRlcm5hbExvY2tlciYg
b3BlcmF0b3I9KEV4dGVybmFsTG9ja2VyJiYgb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQo
Jm90aGVyICE9IHRoaXMpOworICAgICAgICBtX2xvY2thYmxlID0gb3RoZXIubV9sb2NrYWJsZTsK
KyAgICAgICAgb3RoZXIubV9sb2NrYWJsZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgZnJpZW5k
IGNsYXNzIERyb3BMb2NrRm9yU2NvcGU7CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAg
ICAgICBpZiAobV9sb2NrYWJsZSkKKyAgICAgICAgICAgIHVubG9ja0Z1bmN0aW9uKG1fbG9ja2Fi
bGUpOworICAgIH0KKworICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBpZiAobV9sb2Nr
YWJsZSkKKyAgICAgICAgICAgIGxvY2tGdW5jdGlvbihtX2xvY2thYmxlKTsKKyAgICB9CisKKyAg
ICBUKiBtX2xvY2thYmxlOworfTsKKwogfQogCiB1c2luZyBXVEY6OkFic3RyYWN0TG9ja2VyOwpA
QCAtMTkwLDMgKzI0NSw0IEBAIHVzaW5nIFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5OwogdXNpbmcg
V1RGOjpob2xkTG9jazsKIHVzaW5nIFdURjo6aG9sZExvY2tJZjsKIHVzaW5nIFdURjo6RHJvcExv
Y2tGb3JTY29wZTsKK3VzaW5nIFdURjo6RXh0ZXJuYWxMb2NrZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29t
bW9uLmgKaW5kZXggYWIyNzVhYzYzNzhiMzBhMWUzZjc3NjRiYTdlZmVkMjQ4OGM1NTQxNS4uNWJh
OWFiYzc5NzcxN2Y4ZDA4OTA4MzIyMjk4OWFiMmUzZjUxODE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uaApAQCAtMzE2LDQgKzMxNiwyNSBAQCBHc3RCdWZmZXIqIGdzdEJ1ZmZlck5ld1dyYXBw
ZWRGYXN0KHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwogI2RlZmluZSB3ZWJraXRHc3RBdWRp
b0Zvcm1hdEZpbGxTaWxlbmNlIGdzdF9hdWRpb19mb3JtYXRfZmlsbF9zaWxlbmNlCiAjZW5kaWYK
IAorLy8gV2UgY2FuJ3QgcGFzcyBtYWNyb3MgYXMgdGVtcGxhdGUgcGFyYW1ldGVycywgc28gd2Ug
bmVlZCB0byB3cmFwIHRoZW0gaW4gaW5saW5lIGZ1bmN0aW9ucy4KK2lubGluZSB2b2lkIGdzdE9i
amVjdExvY2sodm9pZCogb2JqZWN0KSB7IEdTVF9PQkpFQ1RfTE9DSyhvYmplY3QpOyB9Citpbmxp
bmUgdm9pZCBnc3RPYmplY3RVbmxvY2sodm9pZCogb2JqZWN0KSB7IEdTVF9PQkpFQ1RfVU5MT0NL
KG9iamVjdCk7IH0KK2lubGluZSB2b2lkIGdzdFBhZFN0cmVhbUxvY2soR3N0UGFkKiBwYWQpIHsg
R1NUX1BBRF9TVFJFQU1fTE9DSyhwYWQpOyB9CitpbmxpbmUgdm9pZCBnc3RQYWRTdHJlYW1Vbmxv
Y2soR3N0UGFkKiBwYWQpIHsgR1NUX1BBRF9TVFJFQU1fVU5MT0NLKHBhZCk7IH0KKwordXNpbmcg
R3N0T2JqZWN0TG9ja2VyID0gRXh0ZXJuYWxMb2NrZXI8dm9pZCwgZ3N0T2JqZWN0TG9jaywgZ3N0
T2JqZWN0VW5sb2NrPjsKK3VzaW5nIEdzdFBhZFN0cmVhbUxvY2tlciA9IEV4dGVybmFsTG9ja2Vy
PEdzdFBhZCwgZ3N0UGFkU3RyZWFtTG9jaywgZ3N0UGFkU3RyZWFtVW5sb2NrPjsKKworaW5saW5l
IEdzdE9iamVjdExvY2tlciBob2xkR3N0T2JqZWN0TG9jayh2b2lkKiBnc3RPYmplY3QpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKK2lubGluZSBHc3RPYmplY3RMb2NrZXIgaG9sZEdzdE9iamVjdExvY2so
dm9pZCogZ3N0T2JqZWN0KQoreworICAgIHJldHVybiBHc3RPYmplY3RMb2NrZXIoZ3N0T2JqZWN0
KTsKK30KKworaW5saW5lIEdzdFBhZFN0cmVhbUxvY2tlciBob2xkR3N0UGFkU3RyZWFtTG9jayhH
c3RQYWQqKSBXQVJOX1VOVVNFRF9SRVRVUk47CitpbmxpbmUgR3N0UGFkU3RyZWFtTG9ja2VyIGhv
bGRHc3RQYWRTdHJlYW1Mb2NrKEdzdFBhZCogcGFkKQoreworICAgIHJldHVybiBHc3RQYWRTdHJl
YW1Mb2NrZXIocGFkKTsKK30KKwogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENvbWJpbmVy
UGFkR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwCmluZGV4IDllNWUxNzczYzY0NzRmODkw
MGIyMzZkM2FlMzViYThiY2NlNDA0NjUuLjJjOGJlMGQzNTVjYzI1OWZiOTBiYzU1MjM5MmYxN2Rk
NDMyYTdlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3Bw
CkBAIC02MiwxMiArNjIsMTMgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFRleHRDb21iaW5lclBh
ZEV2ZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0RXYKICAgICAgICAgZ3N0
X2V2ZW50X3BhcnNlX3RhZyhldmVudCwgJnRhZ3MpOwogICAgICAgICBBU1NFUlQodGFncyk7CiAK
LSAgICAgICAgR1NUX09CSkVDVF9MT0NLKHBhZCk7Ci0gICAgICAgIGlmICghY29tYmluZXJQYWQt
PnByaXYtPnRhZ3MpCi0gICAgICAgICAgICBjb21iaW5lclBhZC0+cHJpdi0+dGFncyA9IGFkb3B0
R1JlZihnc3RfdGFnX2xpc3RfY29weSh0YWdzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGdzdF90YWdfbGlzdF9pbnNlcnQoY29tYmluZXJQYWQtPnByaXYtPnRhZ3MuZ2V0KCksIHRhZ3Ms
IEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHBhZCk7
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZEdzdE9iamVjdExvY2so
cGFkKTsKKyAgICAgICAgICAgIGlmICghY29tYmluZXJQYWQtPnByaXYtPnRhZ3MpCisgICAgICAg
ICAgICAgICAgY29tYmluZXJQYWQtPnByaXYtPnRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3RhZ19saXN0
X2NvcHkodGFncykpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdzdF90YWdf
bGlzdF9pbnNlcnQoY29tYmluZXJQYWQtPnByaXYtPnRhZ3MuZ2V0KCksIHRhZ3MsIEdTVF9UQUdf
TUVSR0VfUkVQTEFDRSk7CisgICAgICAgIH0KIAogICAgICAgICBnX29iamVjdF9ub3RpZnlfYnlf
cHNwZWMoR19PQkpFQ1QocGFkKSwgc09ialByb3BlcnRpZXNbUFJPUF9QQURfVEFHU10pOwogICAg
ICAgICBicmVhazsKQEAgLTgyLDE3ICs4MywxNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRUZXh0Q29t
YmluZXJQYWRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5SQog
ewogICAgIGF1dG8qIHBhZCA9IFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRChvYmplY3QpOwogICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9QQURfVEFHUzoKLSAgICAgICAg
R1NUX09CSkVDVF9MT0NLKG9iamVjdCk7CisgICAgY2FzZSBQUk9QX1BBRF9UQUdTOiB7CisgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZEdzdE9iamVjdExvY2sob2JqZWN0KTsKICAgICAgICAgaWYg
KHBhZC0+cHJpdi0+dGFncykKICAgICAgICAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCh2YWx1ZSwg
Z3N0X3RhZ19saXN0X2NvcHkocGFkLT5wcml2LT50YWdzLmdldCgpKSk7Ci0gICAgICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKG9iamVjdCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTk5F
Ul9DT01CSU5FUl9QQUQ6Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhvYmplY3QpOworICAgIH0K
KyAgICBjYXNlIFBST1BfSU5ORVJfQ09NQklORVJfUEFEOiB7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZEdzdE9iamVjdExvY2sob2JqZWN0KTsKICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCBwYWQtPnByaXYtPmlubmVyQ29tYmluZXJQYWQuZ2V0KCkpOwotICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhvYmplY3QpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgZGVmYXVs
dDoKICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOwogICAgICAgICBicmVhazsKQEAgLTEwMywxMSArMTA0LDExIEBAIHN0
YXRpYyB2b2lkIHdlYmtpdFRleHRDb21iaW5lclBhZFNldFByb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwKIHsKICAgICBhdXRvKiBwYWQgPSBXRUJLSVRfVEVYVF9DT01C
SU5FUl9QQUQob2JqZWN0KTsKICAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBS
T1BfSU5ORVJfQ09NQklORVJfUEFEOgotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sob2JqZWN0KTsK
KyAgICBjYXNlIFBST1BfSU5ORVJfQ09NQklORVJfUEFEOiB7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZEdzdE9iamVjdExvY2sob2JqZWN0KTsKICAgICAgICAgcGFkLT5wcml2LT5pbm5lckNv
bWJpbmVyUGFkID0gYWRvcHRHUmVmKEdTVF9QQURfQ0FTVChnX3ZhbHVlX2dldF9vYmplY3QodmFs
dWUpKSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG9iamVjdCk7CiAgICAgICAgIGJyZWFr
OworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CiAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9X
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAppbmRl
eCA2ZDAzZGY5NmFkNDM3OTBkNWFmM2QyYjcyZDc3MDBkMTZmZjJhNGZhLi42ZWYyMGUzZmIzNTli
ZWZiNmNkODE2ZTQ3MzljMWUzNTIzZTIzMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMzY4LDYgKzM2OCwyMyBAQCBzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZChHc3RQYWQqIHBhZCwgR3N0UGFkKiwgdm9p
ZCopCiAgICAgc3RyZWFtaW5nTWVtYmVycy0+cGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0aW9uLm5v
dGlmeU9uZSgpOwogfQogCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1dhaXRGb3JQYWRMaW5r
ZWRPckZsdXNoKEdzdFBhZCogcGFkLCBEYXRhTXV0ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJz
Pjo6TG9ja2VkV3JhcHBlciYgc3RyZWFtaW5nTWVtYmVycykKK3sKKyAgICB7CisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZEdzdE9iamVjdExvY2socGFkKTsKKyAgICAgICAgaWYgKExJS0VMWShH
U1RfUEFEX0lTX0xJTktFRChwYWQpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBhZCwgIldhaXRpbmcgZm9yIHRoZSBwYWQgdG8gYmUgbGlua2VkLi4u
Iik7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFkLCAibGlua2VkIiwgR19DQUxMQkFDSyh3
ZWJLaXRNZWRpYVNyY1BhZExpbmtlZCksIG51bGxwdHIpOworICAgIH0KKworICAgIHN0cmVhbWlu
Z01lbWJlcnMtPnBhZExpbmtlZE9yRmx1c2hlZENvbmRpdGlvbi53YWl0KHN0cmVhbWluZ01lbWJl
cnMubXV0ZXgoKSk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
cGFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZCksIG51
bGxwdHIpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiRmluaXNoZWQgd2FpdGluZyBmb3Ig
dGhlIHBhZCB0byBiZSBsaW5rZWQuIik7Cit9CisKIC8vIENhbGxlZCB3aXRoIFNUUkVBTV9MT0NL
Lgogc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNMb29wKHZvaWQqIHVzZXJEYXRhKQogewpAQCAt
MzgyLDIyICszOTksMTEgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNMb29wKHZvaWQqIHVz
ZXJEYXRhKQogCiAgICAgLy8gU2luY2UgdGhlIHBhZCBjYW4gYW5kIHdpbGwgYmUgYWRkZWQgd2hl
biB0aGUgZWxlbWVudCBpcyBpbiBQTEFZSU5HIHN0YXRlLCB0aGlzIHRhc2sgY2FuIHN0YXJ0IHJ1
bm5pbmcKICAgICAvLyBiZWZvcmUgdGhlIHBhZCBpcyBsaW5rZWQuIFdhaXQgZm9yIHRoZSBwYWQg
dG8gYmUgbGlua2VkIHRvIGF2b2lkIGJ1ZmZlcnMgYmVpbmcgbG9zdCB0byBub3QtbGlua2VkIGVy
cm9ycy4KLSAgICBHU1RfT0JKRUNUX0xPQ0socGFkKTsKLSAgICBpZiAoIUdTVF9QQURfSVNfTElO
S0VEKHBhZCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJXYWl0aW5nIGZvciB0
aGUgcGFkIHRvIGJlIGxpbmtlZC4uLiIpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBhZCwg
ImxpbmtlZCIsIEdfQ0FMTEJBQ0sod2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQpLCBudWxscHRyKTsK
LSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0socGFkKTsKLQotICAgICAgICBzdHJlYW1pbmdNZW1i
ZXJzLT5wYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ud2FpdChzdHJlYW1pbmdNZW1iZXJzLm11
dGV4KCkpOwotCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhw
YWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdlYktpdE1lZGlhU3JjUGFkTGlua2VkKSwgbnVs
bHB0cik7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiRmluaXNoZWQgd2FpdGluZyBm
b3IgdGhlIHBhZCB0byBiZSBsaW5rZWQuIik7Ci0gICAgICAgIGlmIChzdHJlYW1pbmdNZW1iZXJz
LT5pc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICBnc3RfcGFkX3BhdXNlX3Rhc2socGFkKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBHU1RfT0JK
RUNUX1VOTE9DSyhwYWQpOworICAgIHdlYktpdE1lZGlhU3JjV2FpdEZvclBhZExpbmtlZE9yRmx1
c2gocGFkLCBzdHJlYW1pbmdNZW1iZXJzKTsKKyAgICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+aXNG
bHVzaGluZykgeworICAgICAgICBnc3RfcGFkX3BhdXNlX3Rhc2socGFkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICBBU1NFUlQoZ3N0X3BhZF9pc19saW5rZWQocGFkKSk7CiAKICAgICAv
LyBCeSBrZWVwaW5nIHRoZSBsb2NrIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQgYSBmbHVzaCB3aWxs
IG5vdCBoYXBwZW4gd2hpbGUgd2Ugc2VuZCBlc3NlbnRpYWwgZXZlbnRzLgpAQCAtNjExLDcgKzYx
Nyw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjU3RyZWFtRmx1c2goU3RyZWFtKiBzdHJl
YW0sIGJvb2wgaXNTZWVraW5nRmx1c2gpCiAgICAgaWYgKCFza2lwRmx1c2gpIHsKICAgICAgICAg
Ly8gQnkgdGFraW5nIHRoZSBzdHJlYW0gbG9jayB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIHN0cmVh
bWluZyB0aHJlYWQgdGFzayB0byBzdG9wIGlmIGl0IGhhZG4ndCB5ZXQuCiAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0KCksICJUYWtpbmcgdGhlIFNUUkVBTV9MT0NLLiIp
OwotICAgICAgICBHU1RfUEFEX1NUUkVBTV9MT0NLKHN0cmVhbS0+cGFkLmdldCgpKTsKKyAgICAg
ICAgYXV0byBzdHJlYW1Mb2NrID0gaG9sZEdzdFBhZFN0cmVhbUxvY2soc3RyZWFtLT5wYWQuZ2V0
KCkpOwogICAgICAgICB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+cGFk
LmdldCgpLCAiVGFraW5nIHRoZSBTdHJlYW1pbmdNZW1iZXJzIG11dGV4IGFnYWluLiIpOwogICAg
ICAgICAgICAgYXV0byBzdHJlYW1pbmdNZW1iZXJzID0gaG9sZExvY2soc3RyZWFtLT5zdHJlYW1p
bmdNZW1iZXJzRGF0YU11dGV4KTsKQEAgLTYyNyw3ICs2MzMsNiBAQCBzdGF0aWMgdm9pZCB3ZWJL
aXRNZWRpYVNyY1N0cmVhbUZsdXNoKFN0cmVhbSogc3RyZWFtLCBib29sIGlzU2Vla2luZ0ZsdXNo
KQogCiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0KCksICJTdGFydGlu
ZyB3ZWJLaXRNZWRpYVNyY0xvb3AgdGFzayBhbmQgcmVsZWFzaW5nIHRoZSBTVFJFQU1fTE9DSy4i
KTsKICAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrKHN0cmVhbS0+cGFkLmdldCgpLCB3ZWJLaXRN
ZWRpYVNyY0xvb3AsIHN0cmVhbS0+cGFkLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgR1NUX1BB
RF9TVFJFQU1fVU5MT0NLKHN0cmVhbS0+cGFkLmdldCgpKTsKICAgICB9CiB9CiAKQEAgLTczOSwx
MCArNzQ0LDggQEAgc3RhdGljIGdjaGFyKiB3ZWJLaXRNZWRpYVNyY0dldFVyaShHc3RVUklIYW5k
bGVyKiBoYW5kbGVyKQogICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFf
U1JDKGhhbmRsZXIpOwogICAgIGdjaGFyKiByZXN1bHQ7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0so
c291cmNlKTsKLSAgICByZXN1bHQgPSBnX3N0cmR1cChzb3VyY2UtPnByaXYtPnVyaS5nZXQoKSk7
Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IGF1dG8gbG9ja2VyID0gaG9sZEdzdE9iamVjdExvY2soc291cmNlKTsKKyAgICByZXR1cm4gZ19z
dHJkdXAoc291cmNlLT5wcml2LT51cmkuZ2V0KCkpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0TWVkaWFTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVy
aSwgR0Vycm9yKiopCkBAIC03NTQsOSArNzU3LDggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1l
ZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEcK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3Vy
Y2UpOworICAgIGF1dG8gbG9ja2VyID0gaG9sZEdzdE9iamVjdExvY2soc291cmNlKTsKICAgICBz
b3VyY2UtPnByaXYtPnVyaSA9IEdVbmlxdWVQdHI8Y2hhcj4oZ19zdHJkdXAodXJpKSk7Ci0gICAg
R1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430851</attachid>
            <date>2021-06-08 09:36:51 -0700</date>
            <delta_ts>2021-06-09 03:58:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225650-20210608183650.patch</filename>
            <type>text/plain</type>
            <size>12653</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBmMWQxYzNiZTJkZTYxMTY2ZDMwZjJj
N2MyODBlOTVjZjhjZDRhNjQuLjQzMWQ3YzU4M2IwY2EwNjA4NDEzODE2ODU4NWUxZjhlN2M4Y2Rj
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDYtMDggIEFsaWNpYSBCb3lhIEdhcmPDrWEg
IDxhYm95YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXVEZdW0dTdHJlYW1lcl0gQWRkIFJBSUkg
bG9ja2VycyBmb3IgM3JkIHBhcnR5IGxvY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU2NTAKKworICAgICAgICBSZXZpZXdlZCBieSBYYWJpZXIg
Um9kcmlndWV6LUNhbHZhci4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgV1RGOjpF
eHRlcm5hbExvY2tlciwgd2hpY2ggYWxsb3dzIHRvIGxvY2sgM3JkCisgICAgICAgIHBhcnR5IG11
dGV4ZXMgaW4gYSBSQUlJIGZhc2hpb24sIHZlcnkgc2ltaWxhciB0byBXVEY6OkxvY2tlci4KKwor
ICAgICAgICBUaGlzIGlzIHVzZWQgYWxzbyBpbiBXZWJDb3JlIHRvIHByb3ZpZGUgUkFJSSBsb2Nr
ZXJzIGZvciBHU3RyZWFtZXIuCisKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChX
VEY6OnVubG9ja0Z1bmN0aW9uKToKKwogMjAyMS0wNi0wNyAgQWxpY2lhIEJveWEgR2FyY8OtYSAg
PGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dURl1bR1N0cmVhbWVyXSBGaXggY2xhbmcg
VFNBIHdhcm5pbmdzIGluIFdURjo6RGF0YU11dGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGVhNGYzM2ZhYjNl
ZWQ2N2FmNzYyZGUxYzRkMDFkY2IwNDkyODNkZS4uZmJjNzI2NjNjODcwNDNmYzQ0MTM2NWJjY2Yx
OGRlYmY3NDc2MWYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTA2LTA4ICBB
bGljaWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1RGXVtH
U3RyZWFtZXJdIEFkZCBSQUlJIGxvY2tlcnMgZm9yIDNyZCBwYXJ0eSBsb2NrcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjUwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgWGFiaWVyIFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIFJBSUkgbG9ja2VyIGNsYXNzZXMgdGhhdCB3cmFwIEdTVF9PQkpFQ1RfTE9D
SworICAgICAgICBhbmQgR1NUX1BBRF9TVFJFQU1fTE9DSyB0byBtYXRjaCB0aGUgc3R5bGUsIHNh
ZmV0eSBhbmQgY29udmVuaWVuY2Ugb2YKKyAgICAgICAgbG9ja3MgZnJvbSBXVEYuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGNoYW5nZXMgYWxsIHVzYWdlcyBvZiBHU3RyZWFtZXIgbG9ja3Mg
aW4gdGhlIFdlYktpdAorICAgICAgICBjb2RlYmFzZSB0byB1c2UgdGhlc2UgbmV3IGxvY2tlcnMu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIGJlaGF2aW9yIGNoYW5nZXMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmg6
CisgICAgICAgIChnc3RPYmplY3RMb2NrKToKKyAgICAgICAgKGdzdE9iamVjdFVubG9jayk6Cisg
ICAgICAgIChnc3RQYWRTdHJlYW1Mb2NrKToKKyAgICAgICAgKGdzdFBhZFN0cmVhbVVubG9jayk6
CisgICAgICAgIChob2xkR3N0T2JqZWN0TG9jayk6CisgICAgICAgIChob2xkR3N0UGFkU3RyZWFt
TG9jayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5l
clBhZEdTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRUZXh0Q29tYmluZXJQYWRHZXRQcm9w
ZXJ0eSk6CisgICAgICAgICh3ZWJraXRUZXh0Q29tYmluZXJQYWRTZXRQcm9wZXJ0eSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdT
dHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1dhaXRGb3JQYWRMaW5rZWRPckZs
dXNoKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjTG9vcCk6CisgICAgICAgICh3ZWJLaXRNZWRp
YVNyY1N0cmVhbUZsdXNoKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjR2V0VXJpKToKKyAgICAg
ICAgKHdlYktpdE1lZGlhU3JjU2V0VXJpKToKKwogMjAyMS0wNi0wNyAgQWxpY2lhIEJveWEgR2Fy
Y8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gQWRkIGNsYW5n
IFRTQSBhbm5vdGF0aW9uczogTWFpblRocmVhZE5vdGlmaWVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9Mb2NrZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0xvY2tlci5oCmluZGV4IDdlY2JmNDk4
NmVkOThmNmZhZTYwOGMwMjdiZDcyNGM3NjkxYWEzOTguLmUzMWY4OTFkMTI4ZGMyZTJkZWJiZWI3
YWExN2M4ODQwNmIxM2M4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xvY2tlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0xvY2tlci5oCkBAIC0xNjAsNiArMTYwLDY2IEBAIHByaXZhdGU6
CiAgICAgTG9ja2VyPExvY2tUeXBlPiYgbV9sb2NrOwogfTsKIAorLy8gVGhpcyBpcyBhIGNsb3Nl
IHJlcGxpY2Egb2YgTG9ja2VyLCBidXQgZm9yIGdlbmVyaWMgbG9jay91bmxvY2sgZnVuY3Rpb25z
LgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdm9pZCAobG9ja0Z1bmN0aW9uKShUKiksIHZvaWQgKCp1
bmxvY2tGdW5jdGlvbikoVCopPgorY2xhc3MgRXh0ZXJuYWxMb2NrZXI6IHB1YmxpYyBXVEY6OkFi
c3RyYWN0TG9ja2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBFeHRlcm5hbExvY2tlcihUKiBs
b2NrYWJsZSkKKyAgICAgICAgOiBtX2xvY2thYmxlKGxvY2thYmxlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGxvY2thYmxlKTsKKyAgICAgICAgbG9jaygpOworICAgIH0KKworICAgIH5FeHRlcm5h
bExvY2tlcigpCisgICAgeworICAgICAgICB1bmxvY2soKTsKKyAgICB9CisKKyAgICBUKiBsb2Nr
YWJsZSgpIHsgcmV0dXJuIG1fbG9ja2FibGU7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiAhIW1fbG9ja2FibGU7IH0KKworICAgIHZvaWQgdW5sb2NrRWFy
bHkoKQorICAgIHsKKyAgICAgICAgdW5sb2NrKCk7CisgICAgICAgIG1fbG9ja2FibGUgPSBudWxs
cHRyOworICAgIH0KKworICAgIEV4dGVybmFsTG9ja2VyKEV4dGVybmFsTG9ja2VyJiYgb3RoZXIp
CisgICAgICAgIDogbV9sb2NrYWJsZShvdGhlci5tX2xvY2thYmxlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCZvdGhlciAhPSB0aGlzKTsKKyAgICAgICAgb3RoZXIubV9sb2NrYWJsZSA9IG51bGxw
dHI7CisgICAgfQorCisgICAgRXh0ZXJuYWxMb2NrZXImIG9wZXJhdG9yPShFeHRlcm5hbExvY2tl
ciYmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCZvdGhlciAhPSB0aGlzKTsKKyAgICAg
ICAgbV9sb2NrYWJsZSA9IG90aGVyLm1fbG9ja2FibGU7CisgICAgICAgIG90aGVyLm1fbG9ja2Fi
bGUgPSBudWxscHRyOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIGZyaWVuZCBjbGFzcyBEcm9wTG9ja0ZvclNjb3Bl
OworCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fbG9ja2FibGUpCisg
ICAgICAgICAgICB1bmxvY2tGdW5jdGlvbihtX2xvY2thYmxlKTsKKyAgICB9CisKKyAgICB2b2lk
IGxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fbG9ja2FibGUpCisgICAgICAgICAgICBsb2Nr
RnVuY3Rpb24obV9sb2NrYWJsZSk7CisgICAgfQorCisgICAgVCogbV9sb2NrYWJsZTsKK307CisK
IH0KIAogdXNpbmcgV1RGOjpBYnN0cmFjdExvY2tlcjsKQEAgLTE2OCwzICsyMjgsNCBAQCB1c2lu
ZyBXVEY6OkxvY2tlcjsKIHVzaW5nIFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnOwogdXNpbmcg
V1RGOjpOb0xvY2tpbmdOZWNlc3Nhcnk7CiB1c2luZyBXVEY6OkRyb3BMb2NrRm9yU2NvcGU7Cit1
c2luZyBXVEY6OkV4dGVybmFsTG9ja2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCmluZGV4IDJk
YTVjNmRmY2FkYWE2OTE0NTA5ZjJiNDdjNzkxZjQ4MDhiY2ZjNTMuLjNjMGNlN2FiOTRiYmVmYTkz
ZTEzMDExMjAxZDA1MWZhN2YyOGRkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKQEAgLTMy
MCw0ICszMjAsMTMgQEAgR3N0RWxlbWVudCogbWFrZUdTdHJlYW1lckJpbihjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbiwgYm9vbCBnaG9zdFVubGlua2VkUGFkcyk7CiAjZGVmaW5lIHdlYmtpdEdzdEF1
ZGlvRm9ybWF0RmlsbFNpbGVuY2UgZ3N0X2F1ZGlvX2Zvcm1hdF9maWxsX3NpbGVuY2UKICNlbmRp
ZgogCisvLyBXZSBjYW4ndCBwYXNzIG1hY3JvcyBhcyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLCBzbyB3
ZSBuZWVkIHRvIHdyYXAgdGhlbSBpbiBpbmxpbmUgZnVuY3Rpb25zLgoraW5saW5lIHZvaWQgZ3N0
T2JqZWN0TG9jayh2b2lkKiBvYmplY3QpIHsgR1NUX09CSkVDVF9MT0NLKG9iamVjdCk7IH0KK2lu
bGluZSB2b2lkIGdzdE9iamVjdFVubG9jayh2b2lkKiBvYmplY3QpIHsgR1NUX09CSkVDVF9VTkxP
Q0sob2JqZWN0KTsgfQoraW5saW5lIHZvaWQgZ3N0UGFkU3RyZWFtTG9jayhHc3RQYWQqIHBhZCkg
eyBHU1RfUEFEX1NUUkVBTV9MT0NLKHBhZCk7IH0KK2lubGluZSB2b2lkIGdzdFBhZFN0cmVhbVVu
bG9jayhHc3RQYWQqIHBhZCkgeyBHU1RfUEFEX1NUUkVBTV9VTkxPQ0socGFkKTsgfQorCit1c2lu
ZyBHc3RPYmplY3RMb2NrZXIgPSBFeHRlcm5hbExvY2tlcjx2b2lkLCBnc3RPYmplY3RMb2NrLCBn
c3RPYmplY3RVbmxvY2s+OwordXNpbmcgR3N0UGFkU3RyZWFtTG9ja2VyID0gRXh0ZXJuYWxMb2Nr
ZXI8R3N0UGFkLCBnc3RQYWRTdHJlYW1Mb2NrLCBnc3RQYWRTdHJlYW1VbmxvY2s+OworCiAjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lclBhZEdTdHJl
YW1lci5jcHAKaW5kZXggOWU1ZTE3NzNjNjQ3NGY4OTAwYjIzNmQzYWUzNWJhOGJjY2U0MDQ2NS4u
NGVjODRiZTkzZDgwMDA1ZTUyYTc4ZjI5ZjFlOTVkNWNlZjQyNDUxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lclBhZEdT
dHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1RleHRDb21iaW5lclBhZEdTdHJlYW1lci5jcHAKQEAgLTYyLDEyICs2MiwxMyBAQCBzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0VGV4dENvbWJpbmVyUGFkRXZlbnQoR3N0UGFkKiBwYWQsIEdzdE9i
amVjdCogcGFyZW50LCBHc3RFdgogICAgICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnKGV2ZW50LCAm
dGFncyk7CiAgICAgICAgIEFTU0VSVCh0YWdzKTsKIAotICAgICAgICBHU1RfT0JKRUNUX0xPQ0so
cGFkKTsKLSAgICAgICAgaWYgKCFjb21iaW5lclBhZC0+cHJpdi0+dGFncykKLSAgICAgICAgICAg
IGNvbWJpbmVyUGFkLT5wcml2LT50YWdzID0gYWRvcHRHUmVmKGdzdF90YWdfbGlzdF9jb3B5KHRh
Z3MpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydChjb21i
aW5lclBhZC0+cHJpdi0+dGFncy5nZXQoKSwgdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsK
LSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0socGFkKTsKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBHc3RPYmplY3RMb2NrZXIocGFkKTsKKyAgICAgICAgICAgIGlmICghY29t
YmluZXJQYWQtPnByaXYtPnRhZ3MpCisgICAgICAgICAgICAgICAgY29tYmluZXJQYWQtPnByaXYt
PnRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3RhZ19saXN0X2NvcHkodGFncykpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9pbnNlcnQoY29tYmluZXJQYWQtPnBy
aXYtPnRhZ3MuZ2V0KCksIHRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7CisgICAgICAgIH0K
IAogICAgICAgICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoR19PQkpFQ1QocGFkKSwgc09ialBy
b3BlcnRpZXNbUFJPUF9QQURfVEFHU10pOwogICAgICAgICBicmVhazsKQEAgLTgyLDE3ICs4Mywx
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRUZXh0Q29tYmluZXJQYWRHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5SQogewogICAgIGF1dG8qIHBhZCA9IFdFQktJVF9U
RVhUX0NPTUJJTkVSX1BBRChvYmplY3QpOwogICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAg
IGNhc2UgUFJPUF9QQURfVEFHUzoKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLKG9iamVjdCk7Cisg
ICAgY2FzZSBQUk9QX1BBRF9UQUdTOiB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gR3N0T2JqZWN0
TG9ja2VyKG9iamVjdCk7CiAgICAgICAgIGlmIChwYWQtPnByaXYtPnRhZ3MpCiAgICAgICAgICAg
ICBnX3ZhbHVlX3Rha2VfYm94ZWQodmFsdWUsIGdzdF90YWdfbGlzdF9jb3B5KHBhZC0+cHJpdi0+
dGFncy5nZXQoKSkpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhvYmplY3QpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5ORVJfQ09NQklORVJfUEFEOgotICAgICAgICBHU1Rf
T0JKRUNUX0xPQ0sob2JqZWN0KTsKKyAgICB9CisgICAgY2FzZSBQUk9QX0lOTkVSX0NPTUJJTkVS
X1BBRDogeworICAgICAgICBhdXRvIGxvY2tlciA9IEdzdE9iamVjdExvY2tlcihvYmplY3QpOwog
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHBhZC0+cHJpdi0+aW5uZXJDb21iaW5l
clBhZC5nZXQoKSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG9iamVjdCk7CiAgICAgICAg
IGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTAzLDExICsxMDQsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0VGV4dENvbWJpbmVyUGFk
U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLAogewogICAgIGF1
dG8qIHBhZCA9IFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRChvYmplY3QpOwogICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9JTk5FUl9DT01CSU5FUl9QQUQ6Ci0gICAgICAg
IEdTVF9PQkpFQ1RfTE9DSyhvYmplY3QpOworICAgIGNhc2UgUFJPUF9JTk5FUl9DT01CSU5FUl9Q
QUQ6IHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBHc3RPYmplY3RMb2NrZXIob2JqZWN0KTsKICAg
ICAgICAgcGFkLT5wcml2LT5pbm5lckNvbWJpbmVyUGFkID0gYWRvcHRHUmVmKEdTVF9QQURfQ0FT
VChnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KG9iamVjdCk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmNwcAppbmRleCA3ZmNmNDZhNWMxZTZhZTBmZWY2YThhNDlhM2M5MjNm
ODlkNDg2Y2I1Li45ZGZlOTQ1MTM4ZGY4N2U3M2JjNjM2MzU4M2YyOWEwYTRkZDFiNTMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dl
YktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcApA
QCAtMzY4LDYgKzM2OCwyNCBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZChH
c3RQYWQqIHBhZCwgR3N0UGFkKiwgdm9pZCopCiAgICAgc3RyZWFtaW5nTWVtYmVycy0+cGFkTGlu
a2VkT3JGbHVzaGVkQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCitzdGF0aWMgdm9pZCB3ZWJL
aXRNZWRpYVNyY1dhaXRGb3JQYWRMaW5rZWRPckZsdXNoKEdzdFBhZCogcGFkLCBEYXRhTXV0ZXhM
b2NrZXI8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPiYgc3RyZWFtaW5nTWVtYmVycykKK3sKKyAg
ICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gR3N0T2JqZWN0TG9ja2VyKHBhZCk7CisgICAgICAg
IGlmIChMSUtFTFkoR1NUX1BBRF9JU19MSU5LRUQocGFkKSkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJXYWl0aW5nIGZvciB0aGUgcGFkIHRv
IGJlIGxpbmtlZC4uLiIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBhZCwgImxpbmtlZCIs
IEdfQ0FMTEJBQ0sod2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQpLCBudWxscHRyKTsKKyAgICB9CisK
KyAgICBhc3NlcnRJc0hlbGQoc3RyZWFtaW5nTWVtYmVycy5tdXRleCgpKTsKKyAgICBzdHJlYW1p
bmdNZW1iZXJzLT5wYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ud2FpdChzdHJlYW1pbmdNZW1i
ZXJzLm11dGV4KCkpOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KHBhZCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQpLCBu
dWxscHRyKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIkZpbmlzaGVkIHdhaXRpbmcgZm9y
IHRoZSBwYWQgdG8gYmUgbGlua2VkLiIpOworfQorCiAvLyBDYWxsZWQgd2l0aCBTVFJFQU1fTE9D
Sy4KIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjTG9vcCh2b2lkKiB1c2VyRGF0YSkKIHsKQEAg
LTM4MiwyMiArNDAwLDExIEBAIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjTG9vcCh2b2lkKiB1
c2VyRGF0YSkKIAogICAgIC8vIFNpbmNlIHRoZSBwYWQgY2FuIGFuZCB3aWxsIGJlIGFkZGVkIHdo
ZW4gdGhlIGVsZW1lbnQgaXMgaW4gUExBWUlORyBzdGF0ZSwgdGhpcyB0YXNrIGNhbiBzdGFydCBy
dW5uaW5nCiAgICAgLy8gYmVmb3JlIHRoZSBwYWQgaXMgbGlua2VkLiBXYWl0IGZvciB0aGUgcGFk
IHRvIGJlIGxpbmtlZCB0byBhdm9pZCBidWZmZXJzIGJlaW5nIGxvc3QgdG8gbm90LWxpbmtlZCBl
cnJvcnMuCi0gICAgR1NUX09CSkVDVF9MT0NLKHBhZCk7Ci0gICAgaWYgKCFHU1RfUEFEX0lTX0xJ
TktFRChwYWQpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiV2FpdGluZyBmb3Ig
dGhlIHBhZCB0byBiZSBsaW5rZWQuLi4iKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChwYWQs
ICJsaW5rZWQiLCBHX0NBTExCQUNLKHdlYktpdE1lZGlhU3JjUGFkTGlua2VkKSwgbnVsbHB0cik7
Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHBhZCk7Ci0KLSAgICAgICAgc3RyZWFtaW5nTWVt
YmVycy0+cGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0aW9uLndhaXQoc3RyZWFtaW5nTWVtYmVycy5t
dXRleCgpKTsKLQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
cGFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZCksIG51
bGxwdHIpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIkZpbmlzaGVkIHdhaXRpbmcg
Zm9yIHRoZSBwYWQgdG8gYmUgbGlua2VkLiIpOwotICAgICAgICBpZiAoc3RyZWFtaW5nTWVtYmVy
cy0+aXNGbHVzaGluZykgewotICAgICAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0socGFkKTsKKyAgICB3ZWJLaXRNZWRpYVNyY1dhaXRGb3JQYWRMaW5rZWRPckZs
dXNoKHBhZCwgc3RyZWFtaW5nTWVtYmVycyk7CisgICAgaWYgKHN0cmVhbWluZ01lbWJlcnMtPmlz
Rmx1c2hpbmcpIHsKKyAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgQVNTRVJUKGdzdF9wYWRfaXNfbGlua2VkKHBhZCkpOwogCiAgICAg
Ly8gQnkga2VlcGluZyB0aGUgbG9jayB3ZSBhcmUgZ3VhcmFudGVlZCB0aGF0IGEgZmx1c2ggd2ls
bCBub3QgaGFwcGVuIHdoaWxlIHdlIHNlbmQgZXNzZW50aWFsIGV2ZW50cy4KQEAgLTYxMSw3ICs2
MTgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKFN0cmVhbSogc3Ry
ZWFtLCBib29sIGlzU2Vla2luZ0ZsdXNoKQogICAgIGlmICghc2tpcEZsdXNoKSB7CiAgICAgICAg
IC8vIEJ5IHRha2luZyB0aGUgc3RyZWFtIGxvY2sgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdHJl
YW1pbmcgdGhyZWFkIHRhc2sgdG8gc3RvcCBpZiBpdCBoYWRuJ3QgeWV0LgogICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHN0cmVhbS0+cGFkLmdldCgpLCAiVGFraW5nIHRoZSBTVFJFQU1fTE9DSy4i
KTsKLSAgICAgICAgR1NUX1BBRF9TVFJFQU1fTE9DSyhzdHJlYW0tPnBhZC5nZXQoKSk7CisgICAg
ICAgIGF1dG8gc3RyZWFtTG9jayA9IEdzdFBhZFN0cmVhbUxvY2tlcihzdHJlYW0tPnBhZC5nZXQo
KSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYWQu
Z2V0KCksICJUYWtpbmcgdGhlIFN0cmVhbWluZ01lbWJlcnMgbXV0ZXggYWdhaW4uIik7CiAgICAg
ICAgICAgICBEYXRhTXV0ZXhMb2NrZXIgc3RyZWFtaW5nTWVtYmVycyB7IHN0cmVhbS0+c3RyZWFt
aW5nTWVtYmVyc0RhdGFNdXRleCB9OwpAQCAtNjI3LDcgKzYzNCw2IEBAIHN0YXRpYyB2b2lkIHdl
YktpdE1lZGlhU3JjU3RyZWFtRmx1c2goU3RyZWFtKiBzdHJlYW0sIGJvb2wgaXNTZWVraW5nRmx1
c2gpCiAKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhZC5nZXQoKSwgIlN0YXJ0
aW5nIHdlYktpdE1lZGlhU3JjTG9vcCB0YXNrIGFuZCByZWxlYXNpbmcgdGhlIFNUUkVBTV9MT0NL
LiIpOwogICAgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2soc3RyZWFtLT5wYWQuZ2V0KCksIHdlYktp
dE1lZGlhU3JjTG9vcCwgc3RyZWFtLT5wYWQuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICBHU1Rf
UEFEX1NUUkVBTV9VTkxPQ0soc3RyZWFtLT5wYWQuZ2V0KCkpOwogICAgIH0KIH0KIApAQCAtNzM3
LDEyICs3NDMsOSBAQCBzdGF0aWMgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRNZWRpYVNyY0dl
dFByb3RvY29scyhHVHlwZSkKIHN0YXRpYyBnY2hhciogd2ViS2l0TWVkaWFTcmNHZXRVcmkoR3N0
VVJJSGFuZGxlciogaGFuZGxlcikKIHsKICAgICBXZWJLaXRNZWRpYVNyYyogc291cmNlID0gV0VC
S0lUX01FRElBX1NSQyhoYW5kbGVyKTsKLSAgICBnY2hhciogcmVzdWx0OwogCi0gICAgR1NUX09C
SkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgcmVzdWx0ID0gZ19zdHJkdXAoc291cmNlLT5wcml2LT51
cmkuZ2V0KCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBhdXRvIGxvY2tlciA9IEdzdE9iamVjdExvY2tlcihzb3VyY2UpOworICAgIHJl
dHVybiBnX3N0cmR1cChzb3VyY2UtPnByaXYtPnVyaS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBn
Y2hhciogdXJpLCBHRXJyb3IqKikKQEAgLTc1NCw5ICs3NTcsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4g
d2ViS2l0TWVkaWFTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIq
IHVyaSwgRwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR1NUX09CSkVDVF9M
T0NLKHNvdXJjZSk7CisgICAgYXV0byBsb2NrZXIgPSBHc3RPYmplY3RMb2NrZXIoc291cmNlKTsK
ICAgICBzb3VyY2UtPnByaXYtPnVyaSA9IEdVbmlxdWVQdHI8Y2hhcj4oZ19zdHJkdXAodXJpKSk7
Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>