<?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>237088</bug_id>
          
          <creation_ts>2022-02-23 08:47:37 -0800</creation_ts>
          <short_desc>[GLib] Expose ArrayBuffer in the public API</short_desc>
          <delta_ts>2022-03-11 14:58:04 -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>JavaScriptCore</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>197535</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrian Perez">aperez</reporter>
          <assigned_to name="Adrian Perez">aperez</assigned_to>
          <cc>berto</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pgriffis</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1845154</commentid>
    <comment_count>0</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-02-23 08:47:37 -0800</bug_when>
    <thetext>To allow passing binary data efficiently between the C/C++ world
and the JavaScript world, we want to expose the ArrayBuffer primitive
in the GLib public API.

This is related to bug #197535 and will be a building block for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845163</commentid>
    <comment_count>1</comment_count>
      <attachid>452988</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-02-23 09:08:22 -0800</bug_when>
    <thetext>Created attachment 452988
Draft Patch

Missing some documentation and API tests, will add them later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845408</commentid>
    <comment_count>2</comment_count>
      <attachid>453048</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-02-23 16:22:13 -0800</bug_when>
    <thetext>Created attachment 453048
Draft patch v2

Now with documentation, tests still missing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847378</commentid>
    <comment_count>3</comment_count>
      <attachid>453048</attachid>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2022-03-02 07:14:43 -0800</bug_when>
    <thetext>Comment on attachment 453048
Draft patch v2

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

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1486
&gt; + * Creates a new %ArrayBuffer from existing @data in memory.

It&apos;s implicit by the context, but you could still say that the new ArrayBuffer does not copy the data so the caller must keep the pointer valid while the object is alive.

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1567
&gt; + * Returns: pointer to memory.

(transfer none) ?

&gt; Source/JavaScriptCore/API/glib/JSCValue.h:261
&gt; +JSC_API JSCValue *
&gt; +jsc_value_new_array_buffer                (JSCContext           *context,
&gt; +                                           gpointer              data,
&gt; +                                           size_t                length,
&gt; +                                           gpointer              user_data,
&gt; +                                           GDestroyNotify        destroy_notify);
&gt; +
&gt; +JSC_API gboolean
&gt; +jsc_value_is_array_buffer                 (JSCValue             *value);
&gt; +
&gt; +JSC_API gpointer
&gt; +jsc_value_array_buffer_get_data           (JSCValue             *value,
&gt; +                                           gsize                *length);

You use size_t in one case and gsize in the other one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847481</commentid>
    <comment_count>4</comment_count>
      <attachid>453048</attachid>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2022-03-02 10:09:18 -0800</bug_when>
    <thetext>Comment on attachment 453048
Draft patch v2

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

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1571
&gt; +gpointer jsc_value_array_buffer_get_data(JSCValue* value, gsize* length)

Could there be a variant of `GBytes* jsc_value_array_buffer_get_data(JSCValue*)`?

It would be safer and nicer for bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847482</commentid>
    <comment_count>5</comment_count>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2022-03-02 10:10:01 -0800</bug_when>
    <thetext>(In reply to Patrick Griffis from comment #4)
&gt; Could there be a variant of `GBytes*
&gt; jsc_value_array_buffer_get_data(JSCValue*)`?

I meant `GBytes* jsc_value_array_buffer_get_bytes(JSCValue*)`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847599</commentid>
    <comment_count>6</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-02 13:35:13 -0800</bug_when>
    <thetext>(In reply to Alberto Garcia from comment #3)
&gt; Comment on attachment 453048 [details]
&gt; Draft patch v2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453048&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1486
&gt; &gt; + * Creates a new %ArrayBuffer from existing @data in memory.
&gt; 
&gt; It&apos;s implicit by the context, but you could still say that the new
&gt; ArrayBuffer does not copy the data so the caller must keep the pointer valid
&gt; while the object is alive.

Good idea, I&apos;ll rewrite the documentation to make this clear.

&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1567
&gt; &gt; + * Returns: pointer to memory.
&gt; 
&gt; (transfer none) ?

Good catch, I&apos;ll add the annotation.

&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.h:261
&gt; &gt; +JSC_API JSCValue *
&gt; &gt; +jsc_value_new_array_buffer                (JSCContext           *context,
&gt; &gt; +                                           gpointer              data,
&gt; &gt; +                                           size_t                length,
&gt; &gt; +                                           gpointer              user_data,
&gt; &gt; +                                           GDestroyNotify        destroy_notify);
&gt; &gt; +
&gt; &gt; +JSC_API gboolean
&gt; &gt; +jsc_value_is_array_buffer                 (JSCValue             *value);
&gt; &gt; +
&gt; &gt; +JSC_API gpointer
&gt; &gt; +jsc_value_array_buffer_get_data           (JSCValue             *value,
&gt; &gt; +                                           gsize                *length);
&gt; 
&gt; You use size_t in one case and gsize in the other one.

In practice doesn&apos;t matter (they are the same type) but for the sake of
consistency let&apos;s use “gsize” as this is a GLib-style API header :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847627</commentid>
    <comment_count>7</comment_count>
      <attachid>453665</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-02 14:56:05 -0800</bug_when>
    <thetext>Created attachment 453665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847779</commentid>
    <comment_count>8</comment_count>
      <attachid>453665</attachid>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2022-03-03 00:54:10 -0800</bug_when>
    <thetext>Comment on attachment 453665
Patch

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

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1484
&gt; + * jsc_value_new_array_buffer:
&gt; + * @context: A #JSCContext
&gt; + * @data: Pointer to a region of memory.
&gt; + * @length: Size in bytes of the memory region.
&gt; + * @user_data: (closure): user data.
&gt; + * @destroy_notify: (nullable): destroy notifier for @user_data.

I think that since @user_data is only used for the destroy notifier it should probably come *afterwards* in the list of parameters.

Compare g_bytes_new_with_free_func(), which has separate @data and @user_data like this one (https://docs.gtk.org/glib/ctor.Bytes.new_with_free_func.html) with g_source_set_callback(), where the same data pointer is also used for the destroy notifier (https://docs.gtk.org/glib/method.Source.set_callback.html).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847785</commentid>
    <comment_count>9</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-03 01:38:44 -0800</bug_when>
    <thetext>(In reply to Alberto Garcia from comment #8)
&gt; Comment on attachment 453665 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453665&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1484
&gt; &gt; + * jsc_value_new_array_buffer:
&gt; &gt; + * @context: A #JSCContext
&gt; &gt; + * @data: Pointer to a region of memory.
&gt; &gt; + * @length: Size in bytes of the memory region.
&gt; &gt; + * @user_data: (closure): user data.
&gt; &gt; + * @destroy_notify: (nullable): destroy notifier for @user_data.
&gt; 
&gt; I think that since @user_data is only used for the destroy notifier it
&gt; should probably come *afterwards* in the list of parameters.
&gt; 
&gt; Compare g_bytes_new_with_free_func(), which has separate @data and
&gt; @user_data like this one
&gt; (https://docs.gtk.org/glib/ctor.Bytes.new_with_free_func.html) with
&gt; g_source_set_callback(), where the same data pointer is also used for the
&gt; destroy notifier (https://docs.gtk.org/glib/method.Source.set_callback.html).

Good point, let&apos;s swap the order of the user_data and destroy_notify
parameters to make this more consistent with other GLib-style APIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847804</commentid>
    <comment_count>10</comment_count>
      <attachid>453715</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-03 03:06:02 -0800</bug_when>
    <thetext>Created attachment 453715
Patch


New version, with parameters for jsc_value_new_array_buffer() swapped as
suggested by Alberto, and documentation for jsc_value_array_buffer_get_data()
hopefully clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848794</commentid>
    <comment_count>11</comment_count>
      <attachid>453715</attachid>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2022-03-07 09:28:02 -0800</bug_when>
    <thetext>Comment on attachment 453715
Patch

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

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1566
&gt; + * will be also stored in the pointed location.

&quot;will be also&quot; -&gt; &quot;will also be&quot;.

The patch looks otherwise fine to me, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848992</commentid>
    <comment_count>12</comment_count>
      <attachid>454042</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-07 15:12:35 -0800</bug_when>
    <thetext>Created attachment 454042
Patch


&gt; &quot;will be also&quot; -&gt; &quot;will also be&quot;.

Change applied, thanks for the suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850438</commentid>
    <comment_count>13</comment_count>
      <attachid>454042</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-11 04:01:04 -0800</bug_when>
    <thetext>Comment on attachment 454042
Patch

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

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1510
&gt; + * Returns: (transfer full): A #JSCValue

or %NULL in case of exception

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1517
&gt; +    g_return_val_if_fail(JSC_IS_CONTEXT(context), nullptr);
&gt; +

g_return_val_if_fail(data || !size, nullptr);

Assuming it&apos;s valid to create and empty array buffer, I would add a test case for that too.

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1527
&gt; +    auto* jsArrayBuffer = JSObjectMakeArrayBufferWithBytesNoCopy(jsContext, data, length, deallocatorContext ? jscArrayBufferDeallocate : nullptr, deallocatorContext, &amp;exception);

Why not just always pass a  function and simply return early if the given context is nullptr? We could use a lambda.

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1551
&gt; +    auto jsTypedArrayType = JSValueGetTypedArrayType(jsContext, value-&gt;priv-&gt;jsValue, &amp;exception);

This is confusing. I know this is how JSValueGetTypedArrayType is implemented, it checks if the given value is an ArrayBuffer and then returns kJSTypedArrayTypeArrayBuffer. I would add a comment here, or even better I prefer to be explicit here even if it&apos;s more code I would do the jsDynamicCast&lt;JSArrayBuffer*&gt;(vm, object) here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850449</commentid>
    <comment_count>14</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-11 05:25:59 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #13)
&gt; Comment on attachment 454042 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454042&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1510
&gt; &gt; + * Returns: (transfer full): A #JSCValue
&gt; 
&gt; or %NULL in case of exception

👌️

&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1517
&gt; &gt; +    g_return_val_if_fail(JSC_IS_CONTEXT(context), nullptr);
&gt; &gt; +
&gt; 
&gt; g_return_val_if_fail(data || !size, nullptr);
&gt; 
&gt; Assuming it&apos;s valid to create and empty array buffer, I would add a test
&gt; case for that too.

Yes, it&apos;s valid to have a zero-sized ArrayBuffer. I missed that
case when writing tests, I&apos;ll add it. 

&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1527
&gt; &gt; +    auto* jsArrayBuffer = JSObjectMakeArrayBufferWithBytesNoCopy(jsContext, data, length, deallocatorContext ? jscArrayBufferDeallocate : nullptr, deallocatorContext, &amp;exception);
&gt; 
&gt; Why not just always pass a  function and simply return early if the given
&gt; context is nullptr? We could use a lambda.

Good idea, the code will look a bit less messy that way. 

&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:1551
&gt; &gt; +    auto jsTypedArrayType = JSValueGetTypedArrayType(jsContext, value-&gt;priv-&gt;jsValue, &amp;exception);
&gt; 
&gt; This is confusing. I know this is how JSValueGetTypedArrayType is
&gt; implemented, it checks if the given value is an ArrayBuffer and then returns
&gt; kJSTypedArrayTypeArrayBuffer. I would add a comment here, or even better I
&gt; prefer to be explicit here even if it&apos;s more code I would do the
&gt; jsDynamicCast&lt;JSArrayBuffer*&gt;(vm, object) here

Sure, I can put the jsDynamicCast directly here for the sake of clarity.

Thanks for all the comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850482</commentid>
    <comment_count>15</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-11 06:21:55 -0800</bug_when>
    <thetext>Also, as per discusstion with Carlos Garcia in a private chat, we are
going to change _array_buffer_get_length() to be _get_size(), because
in GLib style APIs “size” is more commonly used for “amount of bytes”
and “length” for “number of elements”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850502</commentid>
    <comment_count>16</comment_count>
      <attachid>454483</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-11 07:24:21 -0800</bug_when>
    <thetext>Created attachment 454483
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850616</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-11 14:56:58 -0800</bug_when>
    <thetext>Committed r291194 (248350@main): &lt;https://commits.webkit.org/248350@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454483.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452988</attachid>
            <date>2022-02-23 09:08:22 -0800</date>
            <delta_ts>2022-02-23 16:22:08 -0800</delta_ts>
            <desc>Draft Patch</desc>
            <filename>bug-237088-20220223180820.patch</filename>
            <type>text/plain</type>
            <size>8638</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
OGY4YmQyMDYzZjUzMTY1ZWYwNmMwMzYxOTEzZTkyZWMwOTU3NmY2Li42ZWMwZDEyNjhhMTFiZTJi
MzdkMzg5YTdjOGI3ZTNmMzM2MzdmYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMi0yMyAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBFeHBvc2UgQXJyYXlCdWZmZXIgaW4gdGhlIHB1
YmxpYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNzA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgYWRkcyBhIHNldCBvZiBuZXcgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gSlNDVmFsdWUg
b2JqZWN0cyB3aGljaCByZWZlciB0byBhcnJheQorICAgICAgICBidWZmZXJzIGluIHRoZSBKUyBz
aWRlIG9mIHRoZSB3b3JsZC4gVGhpcyBhbGxvd3Mgc2hhcmluZyBjaHVua3Mgb2YgbWVtb3J5IGJ1
ZmZlcnMKKyAgICAgICAgZWZmaWNpZW50bHkgd2l0aCBuYXRpdmUgY29kZSwgd2l0aG91dCBuZWVk
aW5nIHRvIGNvcHkgbm9yIGVuY29kZSBkYXRhIGJhY2sgYW5kIGZvcnRoLgorCisgICAgICAgICog
QVBJL2dsaWIvSlNDVmFsdWUuY3BwOgorICAgICAgICAoanNjQXJyYXlCdWZmZXJEZWFsbG9jYXRl
KToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKToKKyAgICAgICAgKGpzY192
YWx1ZV9pc19hcnJheV9idWZmZXIpOgorICAgICAgICAoanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9n
ZXRfZGF0YSk6CisgICAgICAgIChqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9sZW5ndGgpOgor
ICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmg6CisgICAgICAgICogQVBJL2dsaWIvZG9jcy9q
c2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0OgorCiAyMDIyLTAyLTIzICBBZHJpYW4gUGVyZXogZGUg
Q2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgRW5zdXJlIGdlbmVyYXRlZCBp
bmxpbmUgYXNzZW1ibGVyIHRoYXQgc2V0dXBzIHNlZ21lbnRzIHJldHVybnMgdG8gcHJldmlvdXMg
c3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwCmluZGV4
IGFmOTY4NzQ1MzU2NjJkNTkyOTNlY2MxY2FhMDE4YzRjYTQ5YjNiOGYuLmE1NDJjYTM2ZDJkMTRm
ZTU0Y2E3YjY4NGMwNmQ2NDA4ZTcxZWE0NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ1ZhbHVlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKICNpbmNsdWRlICJKU1JldGFpblB0
ci5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheS5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIu
aCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVl
Y29sbGVjdG9yLmg+CkBAIC0xNDYxLDYgKzE0NjIsMTI4IEBAIEpTQ1ZhbHVlKiBqc2NfdmFsdWVf
Y29uc3RydWN0b3JfY2FsbHYoSlNDVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBwYXJhbWV0ZXJzQ291
bnQsCiAgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQu
Z2V0KCksIHJlc3VsdCkubGVha1JlZigpOwogfQogCitzdHJ1Y3QgQXJyYXlCdWZmZXJEZWFsbG9j
YXRvckNvbnRleHQgeworICAgIGdwb2ludGVyIHVzZXJEYXRhOworICAgIEdEZXN0cm95Tm90aWZ5
IGRlc3Ryb3lOb3RpZnk7Cit9OworV0VCS0lUX0RFRklORV9BU1lOQ19EQVRBX1NUUlVDVChBcnJh
eUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dCkKKworc3RhdGljIHZvaWQganNjQXJyYXlCdWZmZXJE
ZWFsbG9jYXRlKHZvaWQqLCB2b2lkKiBkZWFsbG9jYXRvckNvbnRleHQpCit7CisgICAgYXV0byog
Y29udGV4dCA9IHN0YXRpY19jYXN0PEFycmF5QnVmZmVyRGVhbGxvY2F0b3JDb250ZXh0Kj4oZGVh
bGxvY2F0b3JDb250ZXh0KTsKKyAgICBjb250ZXh0LT5kZXN0cm95Tm90aWZ5KGNvbnRleHQtPnVz
ZXJEYXRhKTsKKyAgICBkZXN0cm95QXJyYXlCdWZmZXJEZWFsbG9jYXRvckNvbnRleHQoY29udGV4
dCk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX25ld19hcnJheV9idWZmZXI6CisgKiBAY29udGV4
dDogQSAjSlNDQ29udGV4dAorICogQGRhdGE6IFBvaW50ZXIgdG8gYSByZWdpb24gb2YgbWVtb3J5
LgorICogQGxlbmd0aDogU2l6ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4KKyAqIEB1
c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhLgorICogQGRlc3Ryb3lfbm90aWZ5OiAobnVs
bGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBAdXNlcl9kYXRhLgorICoKKyAqIENyZWF0ZXMg
YSBuZXcgJUFycmF5QnVmZmVyIGZyb20gZXhpc3RpbmcgQGRhdGEgaW4gbWVtb3J5LgorICoKKyAq
IE9wdGlvbmFsbHksIGEgQGRlc3Ryb3lfbm90aWZ5IGNhbGxiYWNrIGNhbiBiZSBwcm92aWRlZCwg
d2hpY2ggd2lsbCBiZQorICogaW52b2tlZCB3aXRoIEB1c2VyX2RhdGEgYXMgcGFyYW1ldGVyIHdo
ZW4gdGhlICVBcnJheUJ1ZmZlciBvYmplY3QgaXMKKyAqIHJlbGVhc2VkLiBUaGlzIGlzIGludGVu
ZGVkIHRvIGJlIHVzZWQgZm9yIGZyZWVpbmcgcmVzb3VyY2VzIHJlbGF0ZWQgdG8KKyAqIHRoZSBt
ZW1vcnkgcmVnaW9uIHdoaWNoIGNvbnRhaW5zIHRoZSBkYXRhOgorICoKKyAqIHxbITwtLSBsYW5n
dWFnZT0iQyIgLS0+CisgKiBHTWFwcGVkRmlsZSAqZiA9IGdfbWFwcGVkX2ZpbGVfbmV3IChmaWxl
X3BhdGgsIFRSVUUsIE5VTEwpOworICogSlNDVmFsdWUgKnZhbHVlID0ganNjX3ZhbHVlX25ld19h
cnJheV9idWZmZXIgKGNvbnRleHQsCisgKiAgICAgZ19tYXBwZWRfZmlsZV9nZXRfY29udGVudHMg
KGYpLCBnX21hcHBlZF9maWxlX2dldF9sZW5ndGggKGYpLAorICogICAgIGYsIChHRGVzdHJveU5v
dGlmeSkgZ19tYXBwZWRfZmlsZV91bnJlZik7CisgKiBdfAorICoKKyAqIE5vdGUgdGhhdCB0aGUg
QHVzZXJfZGF0YSBjYW4gYmUgdGhlIHNhbWUgdmFsdWUgYXMgQGRhdGE6CisgKgorICogfFshPC0t
IGxhbmd1YWdlPSJDIiAtLT4KKyAqIHZvaWQgKmJ5dGVzID0gZ19tYWxsb2MwICgxMDApOworICog
SlNDVmFsdWUgKnZhbHVlID0ganNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIgKGNvbnRleHQsIGJ5
dGVzLCAxMDAsIGJ5dGVzLCBnX2ZyZWUpOworICogXXwKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI0pTQ1ZhbHVlCisgKgorICogU2luY2U6IDIuMzgKKyAqLworSlNDVmFsdWUq
IGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKEpTQ0NvbnRleHQqIGNvbnRleHQsIHZvaWQqIGRh
dGEsIHNpemVfdCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0
cm95Tm90aWZ5KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNv
bnRleHQpLCBudWxscHRyKTsKKworICAgIEFycmF5QnVmZmVyRGVhbGxvY2F0b3JDb250ZXh0KiBk
ZWFsbG9jYXRvckNvbnRleHQgPSBudWxscHRyOworICAgIGlmIChkZXN0cm95Tm90aWZ5KSB7Cisg
ICAgICAgIGRlYWxsb2NhdG9yQ29udGV4dCA9IGNyZWF0ZUFycmF5QnVmZmVyRGVhbGxvY2F0b3JD
b250ZXh0KCk7CisgICAgICAgIGRlYWxsb2NhdG9yQ29udGV4dC0+ZGVzdHJveU5vdGlmeSA9IGRl
c3Ryb3lOb3RpZnk7CisgICAgICAgIGRlYWxsb2NhdG9yQ29udGV4dC0+dXNlckRhdGEgPSB1c2Vy
RGF0YTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAg
YXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBh
dXRvKiBqc0FycmF5QnVmZmVyID0gSlNPYmplY3RNYWtlQXJyYXlCdWZmZXJXaXRoQnl0ZXNOb0Nv
cHkoanNDb250ZXh0LCBkYXRhLCBsZW5ndGgsIGRlYWxsb2NhdG9yQ29udGV4dCA/IGpzY0FycmF5
QnVmZmVyRGVhbGxvY2F0ZSA6IG51bGxwdHIsIGRlYWxsb2NhdG9yQ29udGV4dCwgJmV4Y2VwdGlv
bik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBl
eGNlcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBqc2NDb250
ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc0FycmF5QnVmZmVyKS5sZWFrUmVmKCk7Cit9
CisKK2dib29sZWFuIGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIoSlNDVmFsdWUqIHZhbHVlKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsK
KworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQodmFsdWUtPnBy
aXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRy
OworICAgIGF1dG8ganNUeXBlZEFycmF5VHlwZSA9IEpTVmFsdWVHZXRUeXBlZEFycmF5VHlwZShq
c0NvbnRleHQsIHZhbHVlLT5wcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNj
Q29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgp
LCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4ganNUeXBl
ZEFycmF5VHlwZSA9PSBrSlNUeXBlZEFycmF5VHlwZUFycmF5QnVmZmVyOworfQorCitncG9pbnRl
ciBqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhKEpTQ1ZhbHVlKiB2YWx1ZSwgZ3NpemUq
IGxlbmd0aCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUp
LCBudWxscHRyKTsKKworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRp
b24gPSBudWxscHRyOworICAgIGF1dG8qIGpzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29u
dGV4dCwgdmFsdWUtPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250
ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCksIGV4
Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YSA9IEpT
T2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlc1B0cihqc0NvbnRleHQsIGpzT2JqZWN0LCAmZXhjZXB0
aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5w
cml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgKmxlbmd0aCA9IEpTT2JqZWN0R2V0QXJyYXlC
dWZmZXJCeXRlTGVuZ3RoKGpzQ29udGV4dCwganNPYmplY3QsICZleGNlcHRpb24pOworICAgICAg
ICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250
ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgcmV0dXJuIGRhdGE7Cit9CisKK2dzaXplIGpzY192YWx1ZV9hcnJheV9idWZmZXJf
Z2V0X2xlbmd0aChKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
SlNDX0lTX1ZBTFVFKHZhbHVlKSwgMCk7CisKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250
ZXh0R2V0SlNDb250ZXh0KHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBhdXRvKiBqc09iamVjdCA9IEpTVmFsdWVU
b09iamVjdChqc0NvbnRleHQsIHZhbHVlLT5wcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAg
ICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250
ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNpemVfdCBs
ZW5ndGggPSBKU09iamVjdEdldEFycmF5QnVmZmVyQnl0ZUxlbmd0aChqc0NvbnRleHQsIGpzT2Jq
ZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBsZW5ndGg7Cit9CisKIC8qKgogICoganNjX3ZhbHVlX25ld19m
cm9tX2pzb246CiAgKiBAY29udGV4dDogYSAjSlNDQ29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDVmFsdWUuaAppbmRleCA1ZjY1NDk3MjViMGVlZjY0ZmZlZjIwNjFkNDYz
ZmNhODczNmJlYmFkLi40NTNiZGUzYjk3MDBhZTMyMWUxNzViMzRjZDFlZTZiNDI0ODE0OTE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApAQCAtMjQ2LDYgKzI0
NiwyMiBAQCBKU0NfQVBJIEpTQ1ZhbHVlICoKIGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsdiAgICAg
ICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIG5fcGFy
YW1ldGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NW
YWx1ZSAgICAgICAgICAgICoqcGFyYW1ldGVycykgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsK
K0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIgICAgICAgICAg
ICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICBkYXRhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICAg
ICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgICAgZGVzdHJveV9ub3RpZnkp
OworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfYXJyYXlfYnVmZmVyICAgICAgICAg
ICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBncG9pbnRl
cgoranNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfZGF0YSAgICAgICAgICAgKEpTQ1ZhbHVlICAg
ICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnc2l6ZSAgICAgICAgICAgICAgICAqbGVuZ3RoKTsKKworSlNDX0FQSSBnc2l6ZQoranNj
X3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfbGVuZ3RoICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAg
ICAgICp2YWx1ZSk7CiAKIEpTQ19BUEkgZ2Jvb2xlYW4KIGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rv
ciAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWdsaWItNC4wLXNl
Y3Rpb25zLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGli
LTQuMC1zZWN0aW9ucy50eHQKaW5kZXggMzZhMGM4ZDczNzQxZGYwMmU0MDUwZDFjNmU2ZDY0NmZh
MDNkZWIwMS4uOWIwZTBmZTkzNmNmOTBkZmZjOWI2OGYwYjEyMDRmODdmZTc2MWNmYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWdsaWItNC4wLXNl
Y3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2Mt
Z2xpYi00LjAtc2VjdGlvbnMudHh0CkBAIC0xMTAsNiArMTEwLDcgQEAganNjX3ZhbHVlX25ld19m
dW5jdGlvbl92YXJpYWRpYwoganNjX3ZhbHVlX2lzX2Z1bmN0aW9uCiBqc2NfdmFsdWVfZnVuY3Rp
b25fY2FsbAoganNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGx2Citqc2NfdmFsdWVfbmV3X2FycmF5X2J1
ZmZlcgoganNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yCiBqc2NfdmFsdWVfY29uc3RydWN0b3JfY2Fs
bAoganNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGx2Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453048</attachid>
            <date>2022-02-23 16:22:13 -0800</date>
            <delta_ts>2022-03-02 14:56:00 -0800</delta_ts>
            <desc>Draft patch v2</desc>
            <filename>bug-237088-20220224012211.patch</filename>
            <type>text/plain</type>
            <size>9712</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
OGY4YmQyMDYzZjUzMTY1ZWYwNmMwMzYxOTEzZTkyZWMwOTU3NmY2Li42ZWMwZDEyNjhhMTFiZTJi
MzdkMzg5YTdjOGI3ZTNmMzM2MzdmYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMi0yMyAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBFeHBvc2UgQXJyYXlCdWZmZXIgaW4gdGhlIHB1
YmxpYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNzA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgYWRkcyBhIHNldCBvZiBuZXcgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gSlNDVmFsdWUg
b2JqZWN0cyB3aGljaCByZWZlciB0byBhcnJheQorICAgICAgICBidWZmZXJzIGluIHRoZSBKUyBz
aWRlIG9mIHRoZSB3b3JsZC4gVGhpcyBhbGxvd3Mgc2hhcmluZyBjaHVua3Mgb2YgbWVtb3J5IGJ1
ZmZlcnMKKyAgICAgICAgZWZmaWNpZW50bHkgd2l0aCBuYXRpdmUgY29kZSwgd2l0aG91dCBuZWVk
aW5nIHRvIGNvcHkgbm9yIGVuY29kZSBkYXRhIGJhY2sgYW5kIGZvcnRoLgorCisgICAgICAgICog
QVBJL2dsaWIvSlNDVmFsdWUuY3BwOgorICAgICAgICAoanNjQXJyYXlCdWZmZXJEZWFsbG9jYXRl
KToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKToKKyAgICAgICAgKGpzY192
YWx1ZV9pc19hcnJheV9idWZmZXIpOgorICAgICAgICAoanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9n
ZXRfZGF0YSk6CisgICAgICAgIChqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9sZW5ndGgpOgor
ICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmg6CisgICAgICAgICogQVBJL2dsaWIvZG9jcy9q
c2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0OgorCiAyMDIyLTAyLTIzICBBZHJpYW4gUGVyZXogZGUg
Q2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgRW5zdXJlIGdlbmVyYXRlZCBp
bmxpbmUgYXNzZW1ibGVyIHRoYXQgc2V0dXBzIHNlZ21lbnRzIHJldHVybnMgdG8gcHJldmlvdXMg
c3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwCmluZGV4
IGFmOTY4NzQ1MzU2NjJkNTkyOTNlY2MxY2FhMDE4YzRjYTQ5YjNiOGYuLjM3MTdkMjUxMzI0YTZh
ODI5ZGEwMjVkNGEwMjg4NjRhNzJlY2IwZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ1ZhbHVlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKICNpbmNsdWRlICJKU1JldGFpblB0
ci5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheS5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIu
aCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVl
Y29sbGVjdG9yLmg+CkBAIC0xNDYxLDYgKzE0NjIsMTY1IEBAIEpTQ1ZhbHVlKiBqc2NfdmFsdWVf
Y29uc3RydWN0b3JfY2FsbHYoSlNDVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBwYXJhbWV0ZXJzQ291
bnQsCiAgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQu
Z2V0KCksIHJlc3VsdCkubGVha1JlZigpOwogfQogCitzdHJ1Y3QgQXJyYXlCdWZmZXJEZWFsbG9j
YXRvckNvbnRleHQgeworICAgIGdwb2ludGVyIHVzZXJEYXRhOworICAgIEdEZXN0cm95Tm90aWZ5
IGRlc3Ryb3lOb3RpZnk7Cit9OworV0VCS0lUX0RFRklORV9BU1lOQ19EQVRBX1NUUlVDVChBcnJh
eUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dCkKKworc3RhdGljIHZvaWQganNjQXJyYXlCdWZmZXJE
ZWFsbG9jYXRlKHZvaWQqLCB2b2lkKiBkZWFsbG9jYXRvckNvbnRleHQpCit7CisgICAgYXV0byog
Y29udGV4dCA9IHN0YXRpY19jYXN0PEFycmF5QnVmZmVyRGVhbGxvY2F0b3JDb250ZXh0Kj4oZGVh
bGxvY2F0b3JDb250ZXh0KTsKKyAgICBjb250ZXh0LT5kZXN0cm95Tm90aWZ5KGNvbnRleHQtPnVz
ZXJEYXRhKTsKKyAgICBkZXN0cm95QXJyYXlCdWZmZXJEZWFsbG9jYXRvckNvbnRleHQoY29udGV4
dCk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX25ld19hcnJheV9idWZmZXI6CisgKiBAY29udGV4
dDogQSAjSlNDQ29udGV4dAorICogQGRhdGE6IFBvaW50ZXIgdG8gYSByZWdpb24gb2YgbWVtb3J5
LgorICogQGxlbmd0aDogU2l6ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4KKyAqIEB1
c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhLgorICogQGRlc3Ryb3lfbm90aWZ5OiAobnVs
bGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBAdXNlcl9kYXRhLgorICoKKyAqIENyZWF0ZXMg
YSBuZXcgJUFycmF5QnVmZmVyIGZyb20gZXhpc3RpbmcgQGRhdGEgaW4gbWVtb3J5LgorICoKKyAq
IE9wdGlvbmFsbHksIGEgQGRlc3Ryb3lfbm90aWZ5IGNhbGxiYWNrIGNhbiBiZSBwcm92aWRlZCwg
d2hpY2ggd2lsbCBiZQorICogaW52b2tlZCB3aXRoIEB1c2VyX2RhdGEgYXMgcGFyYW1ldGVyIHdo
ZW4gdGhlICVBcnJheUJ1ZmZlciBvYmplY3QgaXMKKyAqIHJlbGVhc2VkLiBUaGlzIGlzIGludGVu
ZGVkIHRvIGJlIHVzZWQgZm9yIGZyZWVpbmcgcmVzb3VyY2VzIHJlbGF0ZWQgdG8KKyAqIHRoZSBt
ZW1vcnkgcmVnaW9uIHdoaWNoIGNvbnRhaW5zIHRoZSBkYXRhOgorICoKKyAqIHxbITwtLSBsYW5n
dWFnZT0iQyIgLS0+CisgKiBHTWFwcGVkRmlsZSAqZiA9IGdfbWFwcGVkX2ZpbGVfbmV3IChmaWxl
X3BhdGgsIFRSVUUsIE5VTEwpOworICogSlNDVmFsdWUgKnZhbHVlID0ganNjX3ZhbHVlX25ld19h
cnJheV9idWZmZXIgKGNvbnRleHQsCisgKiAgICAgZ19tYXBwZWRfZmlsZV9nZXRfY29udGVudHMg
KGYpLCBnX21hcHBlZF9maWxlX2dldF9sZW5ndGggKGYpLAorICogICAgIGYsIChHRGVzdHJveU5v
dGlmeSkgZ19tYXBwZWRfZmlsZV91bnJlZik7CisgKiBdfAorICoKKyAqIE5vdGUgdGhhdCB0aGUg
QHVzZXJfZGF0YSBjYW4gYmUgdGhlIHNhbWUgdmFsdWUgYXMgQGRhdGE6CisgKgorICogfFshPC0t
IGxhbmd1YWdlPSJDIiAtLT4KKyAqIHZvaWQgKmJ5dGVzID0gZ19tYWxsb2MwICgxMDApOworICog
SlNDVmFsdWUgKnZhbHVlID0ganNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIgKGNvbnRleHQsIGJ5
dGVzLCAxMDAsIGJ5dGVzLCBnX2ZyZWUpOworICogXXwKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI0pTQ1ZhbHVlCisgKgorICogU2luY2U6IDIuMzgKKyAqLworSlNDVmFsdWUq
IGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKEpTQ0NvbnRleHQqIGNvbnRleHQsIHZvaWQqIGRh
dGEsIHNpemVfdCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0
cm95Tm90aWZ5KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNv
bnRleHQpLCBudWxscHRyKTsKKworICAgIEFycmF5QnVmZmVyRGVhbGxvY2F0b3JDb250ZXh0KiBk
ZWFsbG9jYXRvckNvbnRleHQgPSBudWxscHRyOworICAgIGlmIChkZXN0cm95Tm90aWZ5KSB7Cisg
ICAgICAgIGRlYWxsb2NhdG9yQ29udGV4dCA9IGNyZWF0ZUFycmF5QnVmZmVyRGVhbGxvY2F0b3JD
b250ZXh0KCk7CisgICAgICAgIGRlYWxsb2NhdG9yQ29udGV4dC0+ZGVzdHJveU5vdGlmeSA9IGRl
c3Ryb3lOb3RpZnk7CisgICAgICAgIGRlYWxsb2NhdG9yQ29udGV4dC0+dXNlckRhdGEgPSB1c2Vy
RGF0YTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAg
YXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBh
dXRvKiBqc0FycmF5QnVmZmVyID0gSlNPYmplY3RNYWtlQXJyYXlCdWZmZXJXaXRoQnl0ZXNOb0Nv
cHkoanNDb250ZXh0LCBkYXRhLCBsZW5ndGgsIGRlYWxsb2NhdG9yQ29udGV4dCA/IGpzY0FycmF5
QnVmZmVyRGVhbGxvY2F0ZSA6IG51bGxwdHIsIGRlYWxsb2NhdG9yQ29udGV4dCwgJmV4Y2VwdGlv
bik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBl
eGNlcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBqc2NDb250
ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc0FycmF5QnVmZmVyKS5sZWFrUmVmKCk7Cit9
CisKKy8qKgorICoganNjX3ZhbHVlX2lzX2FycmF5X2J1ZmZlcjoKKyAqIEB2YWx1ZTogQSAjSlND
VmFsdWUuCisgKgorICogQ2hlY2sgd2hldGhlciB0aGUgQHZhbHVlIGlzIGFuICVBcnJheUJ1ZmZl
ci4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhbiAlQXJyYXlCdWZmZXIK
KyAqCisgKiBTaW5jZTogMi4zOAorICovCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfYXJyYXlfYnVm
ZmVyKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNf
VkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0
R2V0SlNDb250ZXh0KHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBhdXRvIGpzVHlwZWRBcnJheVR5cGUgPSBKU1Zh
bHVlR2V0VHlwZWRBcnJheVR5cGUoanNDb250ZXh0LCB2YWx1ZS0+cHJpdi0+anNWYWx1ZSwgJmV4
Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZCh2YWx1
ZS0+cHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworCisgICAgcmV0dXJuIGpzVHlwZWRBcnJheVR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVBcnJh
eUJ1ZmZlcjsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhOgor
ICogQHZhbHVlOiBBICNKU0NWYWx1ZQorICogQGxlbmd0aDogKG51bGxhYmxlKTogbG9jYXRpb24g
d2hlcmUgdG8gc3RvcmUgdGhlIGxlbmd0aCBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4KKyAqCisgKiBP
YnRhaW5zIGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHJlZ2lvbiB0aGF0IGhvbGRzIHRoZSBjb250
ZW50cyBvZiB0aGUKKyAqICVBcnJheUJ1ZmZlci4gSWYgQGxlbmd0aCBpcyBub3QgJU5VTEwsIHRo
ZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeQorICogcmVnaW9uIHdpbGwgYmUgYWxzbyBz
dG9yZWQgaW4gdGhlIHBvaW50ZWQgbG9jYXRpb24uCisgKgorICogTm90ZSB0aGF0IHRoZSBwb2lu
dGVyIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgbm90IGd1YXJhbnRlZWQgdG8gcmVtYWlu
CisgKiB0aGUgc2FtZSBhZnRlciBjYWxscyB0byBvdGhlciBKU0MgQVBJIGZ1bmN0aW9ucy4KKyAq
CisgKiBSZXR1cm5zOiBwb2ludGVyIHRvIG1lbW9yeS4KKyAqCisgKiBTaW5jZTogMi4zOAorICov
CitncG9pbnRlciBqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhKEpTQ1ZhbHVlKiB2YWx1
ZSwgZ3NpemUqIGxlbmd0aCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFM
VUUodmFsdWUpLCBudWxscHRyKTsKKworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgSlNWYWx1ZVJl
ZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpzT2JqZWN0ID0gSlNWYWx1ZVRvT2Jq
ZWN0KGpzQ29udGV4dCwgdmFsdWUtPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlm
IChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQodmFsdWUtPnByaXYtPmNvbnRleHQu
Z2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCog
ZGF0YSA9IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlc1B0cihqc0NvbnRleHQsIGpzT2JqZWN0
LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgKmxlbmd0aCA9IEpTT2JqZWN0
R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGpzQ29udGV4dCwganNPYmplY3QsICZleGNlcHRpb24p
OworICAgICAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5w
cml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGE7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2Fy
cmF5X2J1ZmZlcl9nZXRfbGVuZ3RoOgorICogQHZhbHVlOiBBICNKU0NWYWx1ZQorICoKKyAqIE9i
dGFpbnMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeSByZWdpb24gdGhhdCBob2xkcyB0
aGUgY29udGVudHMgb2YKKyAqIGFuICVBcnJheUJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOiBzaXpl
IGluIGJ5dGVzLgorICoKKyAqIFNpbmNlOiAyLjM4CisgKi8KK2dzaXplIGpzY192YWx1ZV9hcnJh
eV9idWZmZXJfZ2V0X2xlbmd0aChKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgMCk7CisKKyAgICBhdXRvKiBqc0NvbnRleHQg
PSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpKTsKKwor
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBhdXRvKiBqc09iamVjdCA9
IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIHZhbHVlLT5wcml2LT5qc1ZhbHVlLCAmZXhjZXB0
aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5w
cml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHNpemVfdCBsZW5ndGggPSBKU09iamVjdEdldEFycmF5QnVmZmVyQnl0ZUxlbmd0aChqc0NvbnRl
eHQsIGpzT2JqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBsZW5ndGg7Cit9CisKIC8qKgogICoganNjX3Zh
bHVlX25ld19mcm9tX2pzb246CiAgKiBAY29udGV4dDogYSAjSlNDQ29udGV4dApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaAppbmRleCA1ZjY1NDk3MjViMGVlZjY0ZmZl
ZjIwNjFkNDYzZmNhODczNmJlYmFkLi40NTNiZGUzYjk3MDBhZTMyMWUxNzViMzRjZDFlZTZiNDI0
ODE0OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFs
dWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApAQCAt
MjQ2LDYgKzI0NiwyMiBAQCBKU0NfQVBJIEpTQ1ZhbHVlICoKIGpzY192YWx1ZV9mdW5jdGlvbl9j
YWxsdiAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAg
ICAgIG5fcGFyYW1ldGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBKU0NWYWx1ZSAgICAgICAgICAgICoqcGFyYW1ldGVycykgR19HTlVDX1dBUk5fVU5VU0VE
X1JFU1VMVDsKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIg
ICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICBk
YXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAg
ICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgICAgZGVzdHJv
eV9ub3RpZnkpOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfYXJyYXlfYnVmZmVy
ICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQ
SSBncG9pbnRlcgoranNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfZGF0YSAgICAgICAgICAgKEpT
Q1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnc2l6ZSAgICAgICAgICAgICAgICAqbGVuZ3RoKTsKKworSlNDX0FQSSBn
c2l6ZQoranNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfbGVuZ3RoICAgICAgICAgKEpTQ1ZhbHVl
ICAgICAgICAgICAgICp2YWx1ZSk7CiAKIEpTQ19BUEkgZ2Jvb2xlYW4KIGpzY192YWx1ZV9pc19j
b25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWds
aWItNC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2Nz
L2pzYy1nbGliLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggMzZhMGM4ZDczNzQxZGYwMmU0MDUwZDFj
NmU2ZDY0NmZhMDNkZWIwMS4uMjA3NmM2MGQyNTZmYWYxMjdlZWVkMzk2YjUwN2Y0YzZjODY0YWFh
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWds
aWItNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
ZG9jcy9qc2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0CkBAIC0xMTAsNiArMTEwLDEwIEBAIGpzY192
YWx1ZV9uZXdfZnVuY3Rpb25fdmFyaWFkaWMKIGpzY192YWx1ZV9pc19mdW5jdGlvbgoganNjX3Zh
bHVlX2Z1bmN0aW9uX2NhbGwKIGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsdgoranNjX3ZhbHVlX25l
d19hcnJheV9idWZmZXIKK2pzY192YWx1ZV9pc19hcnJheV9idWZmZXIKK2pzY192YWx1ZV9hcnJh
eV9idWZmZXJfZ2V0X2RhdGEKK2pzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2xlbmd0aAoganNj
X3ZhbHVlX2lzX2NvbnN0cnVjdG9yCiBqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbAoganNjX3Zh
bHVlX2NvbnN0cnVjdG9yX2NhbGx2Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453665</attachid>
            <date>2022-03-02 14:56:05 -0800</date>
            <delta_ts>2022-03-03 03:05:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237088-20220303005604.patch</filename>
            <type>text/plain</type>
            <size>17059</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
N2VlNTAyNDEwMzNkOTRhNjAwMjcyYWNhNDI0MmRjNmRjMzRmNjE1Li4yOWJiMDIzNGRjODhmODVl
OGRhODgwMjU0MTdiYzFiNzBmODUwNjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMy0wMiAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBFeHBvc2UgQXJyYXlCdWZmZXIgaW4gdGhlIHB1
YmxpYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNzA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgYWRkcyBhIHNldCBvZiBuZXcgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gSlNDVmFsdWUg
b2JqZWN0cyB3aGljaCByZWZlciB0byBhcnJheQorICAgICAgICBidWZmZXJzIGluIHRoZSBKUyBz
aWRlIG9mIHRoZSB3b3JsZC4gVGhpcyBhbGxvd3Mgc2hhcmluZyBjaHVua3Mgb2YgbWVtb3J5IGJ1
ZmZlcnMKKyAgICAgICAgZWZmaWNpZW50bHkgd2l0aCBuYXRpdmUgY29kZSwgd2l0aG91dCBuZWVk
aW5nIHRvIGNvcHkgbm9yIGVuY29kZSBkYXRhIGJhY2sgYW5kIGZvcnRoLgorCisgICAgICAgICog
QVBJL2dsaWIvSlNDVmFsdWUuY3BwOgorICAgICAgICAoanNjQXJyYXlCdWZmZXJEZWFsbG9jYXRl
KToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKToKKyAgICAgICAgKGpzY192
YWx1ZV9pc19hcnJheV9idWZmZXIpOgorICAgICAgICAoanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9n
ZXRfZGF0YSk6CisgICAgICAgIChqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9sZW5ndGgpOgor
ICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmg6CisgICAgICAgICogQVBJL2dsaWIvZG9jcy9q
c2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0OgorCiAyMDIyLTAyLTI4ICBEZXZpbiBSb3Vzc28gIDxk
cm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRmxleGJveF0gQWRk
IG9wdGlvbnMgdG8gc2hvdyBlYWNoIGFyZWEncyBDU1MgYG9yZGVyYCBhbmQvb3IgRE9NIGluZGV4
IGluIHRoZSBwYXJlbnQgZmxleCBjb250YWluZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuY3BwCmluZGV4IGFmOTY4NzQ1MzU2NjJkNTkyOTNlY2MxY2FhMDE4YzRj
YTQ5YjNiOGYuLjllMGIzNGUzMmI2MzlkY2YyZTNkNmJjNWE3NDFmZGFhOGE2ZjUwYmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUu
aCIKICNpbmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheS5oIgog
I2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgog
I2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVjdG9yLmg+CkBAIC0xNDYxLDYgKzE0NjIsMTY4
IEBAIEpTQ1ZhbHVlKiBqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbHYoSlNDVmFsdWUqIHZhbHVl
LCB1bnNpZ25lZCBwYXJhbWV0ZXJzQ291bnQsCiAgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNy
ZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIHJlc3VsdCkubGVha1JlZigpOwogfQogCitz
dHJ1Y3QgQXJyYXlCdWZmZXJEZWFsbG9jYXRvckNvbnRleHQgeworICAgIGdwb2ludGVyIHVzZXJE
YXRhOworICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnk7Cit9OworV0VCS0lUX0RFRklO
RV9BU1lOQ19EQVRBX1NUUlVDVChBcnJheUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dCkKKworc3Rh
dGljIHZvaWQganNjQXJyYXlCdWZmZXJEZWFsbG9jYXRlKHZvaWQqLCB2b2lkKiBkZWFsbG9jYXRv
ckNvbnRleHQpCit7CisgICAgYXV0byogY29udGV4dCA9IHN0YXRpY19jYXN0PEFycmF5QnVmZmVy
RGVhbGxvY2F0b3JDb250ZXh0Kj4oZGVhbGxvY2F0b3JDb250ZXh0KTsKKyAgICBjb250ZXh0LT5k
ZXN0cm95Tm90aWZ5KGNvbnRleHQtPnVzZXJEYXRhKTsKKyAgICBkZXN0cm95QXJyYXlCdWZmZXJE
ZWFsbG9jYXRvckNvbnRleHQoY29udGV4dCk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX25ld19h
cnJheV9idWZmZXI6CisgKiBAY29udGV4dDogQSAjSlNDQ29udGV4dAorICogQGRhdGE6IFBvaW50
ZXIgdG8gYSByZWdpb24gb2YgbWVtb3J5LgorICogQGxlbmd0aDogU2l6ZSBpbiBieXRlcyBvZiB0
aGUgbWVtb3J5IHJlZ2lvbi4KKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhLgor
ICogQGRlc3Ryb3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBAdXNl
cl9kYXRhLgorICoKKyAqIENyZWF0ZXMgYSBuZXcgJUFycmF5QnVmZmVyIGZyb20gZXhpc3Rpbmcg
QGRhdGEgaW4gbWVtb3J5LiBUaGUgQGRhdGEgaXMgbm90CisgKiBjb3BpZWQ6IHdoaWxlIHRoaXMg
YWxsb3dzIHNoYXJpbmcgZGF0YSB3aXRoIEphdmFTY3JpcHQgZWZmaWNpZW50bHksIHRoZQorICog
Y2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIG1lbW9yeSByZWdpb24gcmVtYWlucyB2YWxpZCB1
bnRpbCB0aGUgbmV3bHkKKyAqIGNyZWF0ZWQgb2JqZWN0IGlzIHJlbGVhc2VkIGJ5IEpTQy4KKyAq
CisgKiBPcHRpb25hbGx5LCBhIEBkZXN0cm95X25vdGlmeSBjYWxsYmFjayBjYW4gYmUgcHJvdmlk
ZWQsIHdoaWNoIHdpbGwgYmUKKyAqIGludm9rZWQgd2l0aCBAdXNlcl9kYXRhIGFzIHBhcmFtZXRl
ciB3aGVuIHRoZSAlQXJyYXlCdWZmZXIgb2JqZWN0IGlzCisgKiByZWxlYXNlZC4gVGhpcyBpcyBp
bnRlbmRlZCB0byBiZSB1c2VkIGZvciBmcmVlaW5nIHJlc291cmNlcyByZWxhdGVkIHRvCisgKiB0
aGUgbWVtb3J5IHJlZ2lvbiB3aGljaCBjb250YWlucyB0aGUgZGF0YToKKyAqCisgKiB8WyE8LS0g
bGFuZ3VhZ2U9IkMiIC0tPgorICogR01hcHBlZEZpbGUgKmYgPSBnX21hcHBlZF9maWxlX25ldyAo
ZmlsZV9wYXRoLCBUUlVFLCBOVUxMKTsKKyAqIEpTQ1ZhbHVlICp2YWx1ZSA9IGpzY192YWx1ZV9u
ZXdfYXJyYXlfYnVmZmVyIChjb250ZXh0LAorICogICAgIGdfbWFwcGVkX2ZpbGVfZ2V0X2NvbnRl
bnRzIChmKSwgZ19tYXBwZWRfZmlsZV9nZXRfbGVuZ3RoIChmKSwKKyAqICAgICBmLCAoR0Rlc3Ry
b3lOb3RpZnkpIGdfbWFwcGVkX2ZpbGVfdW5yZWYpOworICogXXwKKyAqCisgKiBOb3RlIHRoYXQg
dGhlIEB1c2VyX2RhdGEgY2FuIGJlIHRoZSBzYW1lIHZhbHVlIGFzIEBkYXRhOgorICoKKyAqIHxb
ITwtLSBsYW5ndWFnZT0iQyIgLS0+CisgKiB2b2lkICpieXRlcyA9IGdfbWFsbG9jMCAoMTAwKTsK
KyAqIEpTQ1ZhbHVlICp2YWx1ZSA9IGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyIChjb250ZXh0
LCBieXRlcywgMTAwLCBieXRlcywgZ19mcmVlKTsKKyAqIF18CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNKU0NWYWx1ZQorICoKKyAqIFNpbmNlOiAyLjM4CisgKi8KK0pTQ1Zh
bHVlKiBqc2NfdmFsdWVfbmV3X2FycmF5X2J1ZmZlcihKU0NDb250ZXh0KiBjb250ZXh0LCB2b2lk
KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBncG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkg
ZGVzdHJveU5vdGlmeSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVY
VChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICBBcnJheUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4
dCogZGVhbGxvY2F0b3JDb250ZXh0ID0gbnVsbHB0cjsKKyAgICBpZiAoZGVzdHJveU5vdGlmeSkg
eworICAgICAgICBkZWFsbG9jYXRvckNvbnRleHQgPSBjcmVhdGVBcnJheUJ1ZmZlckRlYWxsb2Nh
dG9yQ29udGV4dCgpOworICAgICAgICBkZWFsbG9jYXRvckNvbnRleHQtPmRlc3Ryb3lOb3RpZnkg
PSBkZXN0cm95Tm90aWZ5OworICAgICAgICBkZWFsbG9jYXRvckNvbnRleHQtPnVzZXJEYXRhID0g
dXNlckRhdGE7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwor
ICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7Cisg
ICAgYXV0byoganNBcnJheUJ1ZmZlciA9IEpTT2JqZWN0TWFrZUFycmF5QnVmZmVyV2l0aEJ5dGVz
Tm9Db3B5KGpzQ29udGV4dCwgZGF0YSwgbGVuZ3RoLCBkZWFsbG9jYXRvckNvbnRleHQgPyBqc2NB
cnJheUJ1ZmZlckRlYWxsb2NhdGUgOiBudWxscHRyLCBkZWFsbG9jYXRvckNvbnRleHQsICZleGNl
cHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4
dCwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4ganNj
Q29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNBcnJheUJ1ZmZlcikubGVha1JlZigp
OworfQorCisvKioKKyAqIGpzY192YWx1ZV9pc19hcnJheV9idWZmZXI6CisgKiBAdmFsdWU6IEEg
I0pTQ1ZhbHVlLgorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIEB2YWx1ZSBpcyBhbiAlQXJyYXlC
dWZmZXIuCisgKgorICogUmV0dXJuczogd2hldGhlciB0aGUgdmFsdWUgaXMgYW4gJUFycmF5QnVm
ZmVyCisgKgorICogU2luY2U6IDIuMzgKKyAqLworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX2FycmF5
X2J1ZmZlcihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlND
X0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29u
dGV4dEdldEpTQ29udGV4dCh2YWx1ZS0+cHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byBqc1R5cGVkQXJyYXlUeXBlID0g
SlNWYWx1ZUdldFR5cGVkQXJyYXlUeXBlKGpzQ29udGV4dCwgdmFsdWUtPnByaXYtPmpzVmFsdWUs
ICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQo
dmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBG
QUxTRTsKKworICAgIHJldHVybiBqc1R5cGVkQXJyYXlUeXBlID09IGtKU1R5cGVkQXJyYXlUeXBl
QXJyYXlCdWZmZXI7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfZGF0
YToKKyAqIEB2YWx1ZTogQSAjSlNDVmFsdWUKKyAqIEBsZW5ndGg6IChudWxsYWJsZSk6IGxvY2F0
aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSBsZW5ndGggb2YgdGhlIG1lbW9yeSByZWdpb24uCisgKgor
ICogT2J0YWlucyBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gdGhhdCBob2xkcyB0aGUg
Y29udGVudHMgb2YgdGhlCisgKiAlQXJyYXlCdWZmZXIuIElmIEBsZW5ndGggaXMgbm90ICVOVUxM
LCB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBtZW1vcnkKKyAqIHJlZ2lvbiB3aWxsIGJlIGFs
c28gc3RvcmVkIGluIHRoZSBwb2ludGVkIGxvY2F0aW9uLgorICoKKyAqIE5vdGUgdGhhdCB0aGUg
cG9pbnRlciByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIHJl
bWFpbgorICogdGhlIHNhbWUgYWZ0ZXIgY2FsbHMgdG8gb3RoZXIgSlNDIEFQSSBmdW5jdGlvbnMu
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBwb2ludGVyIHRvIG1lbW9yeS4KKyAq
CisgKiBTaW5jZTogMi4zOAorICovCitncG9pbnRlciBqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dl
dF9kYXRhKEpTQ1ZhbHVlKiB2YWx1ZSwgZ3NpemUqIGxlbmd0aCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKworICAgIGF1dG8qIGpz
Q29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0
KCkpOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpz
T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgdmFsdWUtPnByaXYtPmpzVmFsdWUs
ICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQo
dmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgdm9pZCogZGF0YSA9IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlc1B0
cihqc0NvbnRleHQsIGpzT2JqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRp
b24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChsZW5ndGgpIHsKKyAgICAg
ICAgKmxlbmd0aCA9IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGpzQ29udGV4dCwg
anNPYmplY3QsICZleGNlcHRpb24pOworICAgICAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGE7Cit9CisK
Ky8qKgorICoganNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfbGVuZ3RoOgorICogQHZhbHVlOiBB
ICNKU0NWYWx1ZQorICoKKyAqIE9idGFpbnMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIG1lbW9y
eSByZWdpb24gdGhhdCBob2xkcyB0aGUgY29udGVudHMgb2YKKyAqIGFuICVBcnJheUJ1ZmZlci4K
KyAqCisgKiBSZXR1cm5zOiBzaXplIGluIGJ5dGVzLgorICoKKyAqIFNpbmNlOiAyLjM4CisgKi8K
K2dzaXplIGpzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2xlbmd0aChKU0NWYWx1ZSogdmFsdWUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgMCk7CisK
KyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHZhbHVlLT5wcml2
LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsK
KyAgICBhdXRvKiBqc09iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIHZhbHVlLT5w
cml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHNpemVfdCBsZW5ndGggPSBKU09iamVjdEdldEFycmF5QnVm
ZmVyQnl0ZUxlbmd0aChqc0NvbnRleHQsIGpzT2JqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAo
anNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0Lmdl
dCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBsZW5ndGg7
Cit9CisKIC8qKgogICoganNjX3ZhbHVlX25ld19mcm9tX2pzb246CiAgKiBAY29udGV4dDogYSAj
SlNDQ29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaAppbmRl
eCA1ZjY1NDk3MjViMGVlZjY0ZmZlZjIwNjFkNDYzZmNhODczNmJlYmFkLi42OWE5Nzk0YTljOTk2
ZDYxYWNjNWI4YWZlZDFlZTk2NzNlNzQ2YTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuaApAQCAtMjQ2LDYgKzI0NiwyMiBAQCBKU0NfQVBJIEpTQ1ZhbHVlICoK
IGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsdiAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAg
ICAgICAgICAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3VpbnQgICAgICAgICAgICAgICAgIG5fcGFyYW1ldGVycywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1ZSAgICAgICAgICAgICoqcGFyYW1ldGVy
cykgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3Zh
bHVlX25ld19hcnJheV9idWZmZXIgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAg
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdzaXplICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJf
ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJv
eU5vdGlmeSAgICAgICAgZGVzdHJveV9ub3RpZnkpOworCitKU0NfQVBJIGdib29sZWFuCitqc2Nf
dmFsdWVfaXNfYXJyYXlfYnVmZmVyICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAg
ICAgKnZhbHVlKTsKKworSlNDX0FQSSBncG9pbnRlcgoranNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9n
ZXRfZGF0YSAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAgICAgICAgICAgICAgICAq
bGVuZ3RoKTsKKworSlNDX0FQSSBnc2l6ZQoranNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfbGVu
Z3RoICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CiAKIEpTQ19BUEkgZ2Jv
b2xlYW4KIGpzY192YWx1ZV9pc19jb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgIChKU0NWYWx1
ZSAgICAgICAgICAgICAqdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL2RvY3MvanNjLWdsaWItNC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggMzZh
MGM4ZDczNzQxZGYwMmU0MDUwZDFjNmU2ZDY0NmZhMDNkZWIwMS4uMjA3NmM2MGQyNTZmYWYxMjdl
ZWVkMzk2YjUwN2Y0YzZjODY0YWFhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL2RvY3MvanNjLWdsaWItNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0CkBAIC0x
MTAsNiArMTEwLDEwIEBAIGpzY192YWx1ZV9uZXdfZnVuY3Rpb25fdmFyaWFkaWMKIGpzY192YWx1
ZV9pc19mdW5jdGlvbgoganNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwKIGpzY192YWx1ZV9mdW5jdGlv
bl9jYWxsdgoranNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIKK2pzY192YWx1ZV9pc19hcnJheV9i
dWZmZXIKK2pzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2RhdGEKK2pzY192YWx1ZV9hcnJheV9i
dWZmZXJfZ2V0X2xlbmd0aAoganNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yCiBqc2NfdmFsdWVfY29u
c3RydWN0b3JfY2FsbAoganNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGx2CmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDg1MzE2MzczZWM5MTU4MWUx
YzM5NGNjZTljYWUwM2E2NDc4ZGM5OS4uYTVkNzg0NDk4NmNhYzIzNDI1ZjJmM2FkYmE5NGE1NjVi
NTg5YzUwZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE4IEBACisyMDIyLTAzLTAyICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8
YXBlcmV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dMaWJdIEV4cG9zZSBBcnJheUJ1ZmZlciBp
biB0aGUgcHVibGljIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM3MDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBhZGRzIGEgc2V0IG9mIG5ldyBmdW5jdGlvbnMgdG8gb3BlcmF0ZSBvbiBK
U0NWYWx1ZSBvYmplY3RzIHdoaWNoIHJlZmVyIHRvIGFycmF5CisgICAgICAgIGJ1ZmZlcnMgaW4g
dGhlIEpTIHNpZGUgb2YgdGhlIHdvcmxkLiBUaGlzIGFsbG93cyBzaGFyaW5nIGNodW5rcyBvZiBt
ZW1vcnkgYnVmZmVycworICAgICAgICBlZmZpY2llbnRseSB3aXRoIG5hdGl2ZSBjb2RlLCB3aXRo
b3V0IG5lZWRpbmcgdG8gY29weSBub3IgZW5jb2RlIGRhdGEgYmFjayBhbmQgZm9ydGguCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5j
cHA6IEFkZGVkIHRlc3QgZm9yIGFycmF5IGJ1ZmZlcnMuCisgICAgICAgICh0ZXN0SlNDQXJyYXlC
dWZmZXIpOgorICAgICAgICAobWFpbik6CisKIDIwMjItMDMtMDEgIFNpaHVpIExpdSAgPHNpaHVp
X2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgTWlncmF0ZSB0aGlyZC1wYXJ0eSBJbmRleGVkREIg
ZGF0YSB0byBHZW5lcmFsU3RvcmFnZURpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCmluZGV4IDQ2
YmFkNjA2ZmQxYWQ5MTAzYTEyMzRlYjQ2YmI0YTM0MWQzOGM1ZWUuLjU1YTdmNmZjNzM1ZTY2OTdi
OThiMWExMGIzYzE5NjI5NzVmNjg4Y2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAKQEAgLTI4MjIsNiAr
MjgyMiwxMzYgQEAgc3RhdGljIHZvaWQgdGVzdEpTQ0NsYXNzKCkKICAgICB9CiB9CiAKK3N0YXRp
YyB2b2lkIHRlc3RKU0NBcnJheUJ1ZmZlcigpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tl
ciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0
KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5n
ZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksCisgICAgICAgICAgICAiY29uc3QgYXJy
ID0gbmV3IFVpbnQ4QXJyYXkoNSk7IgorICAgICAgICAgICAgImFyclswXSA9IDB4NzM7IGFyclsx
XSA9IDB4NzA7IGFyclsyXSA9IDB4NjE7IGFyclszXSA9IDB4NkQ7IGFycls0XSA9IDB4MDA7Igor
ICAgICAgICAgICAgImFyci5idWZmZXI7IiwKKyAgICAgICAgICAgIC0xKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9pc19hcnJheV9idWZmZXIocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgZ3NpemUgYnl0
ZUNvdW50ID0gMDsKKyAgICAgICAgYXV0byogZGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihqc2Nf
dmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhKHJlc3VsdC5nZXQoKSwgJmJ5dGVDb3VudCkpOwor
ICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2xlbmd0
aChyZXN1bHQuZ2V0KCkpLCA9PSwgNSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoYnl0ZUNv
dW50LCA9PSwgNSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChkYXRhWzRdLCA9PSwgJ1wwJyk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihkYXRhLCA9PSwgInNwYW0iKTsKKworICAgICAgICBz
bnByaW50ZihkYXRhLCBieXRlQ291bnQsICJZYXkhIik7CisKKyAgICAgICAgcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJhcnJbMF0gPT0gMHg1
OSAmJiBhcnJbMV0gPT0gMHg2MSAmJiBhcnJbMl0gPT0gMHg3OSAmJiBhcnJbM10gPT0gMHgyMSAm
JiBhcnJbNF0gPT0gMHgwMDsiLCAtMSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5n
ZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1
bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbihy
ZXN1bHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNr
ZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsK
KworICAgICAgICBjaGFyIGRhdGFbMTAwXTsKKyAgICAgICAgc25wcmludGYoZGF0YSwgc2l6ZW9m
KGRhdGEpLCAiSGVsbG8sIEpTISIpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVl
ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKGNvbnRleHQuZ2V0KCksIGRh
dGEsIDEwMCwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVl
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYXJyYXlfYnVmZmVy
KHZhbHVlLmdldCgpKSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChqc2NfdmFsdWVfYXJy
YXlfYnVmZmVyX2dldF9sZW5ndGgodmFsdWUuZ2V0KCkpLCA9PSwgMTAwKTsKKworICAgICAgICBq
c2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImRhdGEiLCB2YWx1ZS5nZXQoKSk7
CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIobmV3IFVpbnQ4QXJyYXkoZGF0YSkpWzJdIiwg
LTEpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAg
Z19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgJ2wn
KTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgIihuZXcgVWludDhBcnJheShkYXRhKSlbMF0gPSA2NTsiLCAtMSkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCAnQScpOworICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoZGF0YVswXSwgPT0sICdBJyk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cGludChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRf
ZGF0YSh2YWx1ZS5nZXQoKSwgbnVsbHB0cikpWzBdLCA9PSwgJ0EnKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4
dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0
aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBjaGFyIGRhdGFbXSA9ICJzcGFt
IGFuZCBlZ2dzIjsKKyAgICAgICAgYm9vbCBkZXN0cm95Tm90aWZ5Q2FsbGVkID0gZmFsc2U7CisK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25l
d19hcnJheV9idWZmZXIoY29udGV4dC5nZXQoKSwgZGF0YSwgc3RybGVuKGRhdGEpLCAmZGVzdHJv
eU5vdGlmeUNhbGxlZCwgW10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAgICAgKnN0YXRpY19j
YXN0PGJvb2wqPihkYXRhKSA9IHRydWU7CisgICAgICAgIH0pKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
YXJyYXlfYnVmZmVyKHZhbHVlLmdldCgpKSk7CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3Zh
bHVlKGNvbnRleHQuZ2V0KCksICJkYXRhIiwgdmFsdWUuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9
IG51bGxwdHI7CisKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShkZXN0cm95Tm90aWZ5Q2FsbGVkKTsKKworICAg
ICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQo
KSwgImRhdGEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIodmFsdWUuZ2V0KCkpKTsK
KworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChjb250
ZXh0LmdldCgpKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImRhdGEiLCB2YWx1ZS5nZXQo
KSk7CisKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGRlc3Ryb3lOb3RpZnlDYWxsZWQpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNl
cHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIHN0cnVjdCBIZWFwRGF0YSB7
CisgICAgICAgICAgICBjaGFyIGRhdGEgeyAweDQyIH07CisgICAgICAgICAgICBHUmVmUHRyPEdG
aWxlPiBvYmplY3QgeyBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aCgiLyIpKSB9OworICAg
ICAgICB9OworCisgICAgICAgIGF1dG8qIGRhdGEgPSBuZXcgSGVhcERhdGE7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZGF0YS0+b2JqZWN0LmdldCgpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIoY29udGV4dC5n
ZXQoKSwgZGF0YSwgc2l6ZW9mKEhlYXBEYXRhKSwgZGF0YSwgW10oZ3BvaW50ZXIgZGF0YSkgewor
ICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PEhlYXBEYXRhKj4oZGF0YSk7CisgICAgICAg
IH0pKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGpzY19j
b250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZGF0YSIsIHZhbHVlLmdldCgpKTsKKwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIihuZXcgVWludDhBcnJheShkYXRhKSlbMF07IiwgLTEp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQo
KSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5n
ZXQoKSksID09LCAweDQyKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X3VuZGVmaW5lZChjb250ZXh0LmdldCgpKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFs
dWUuZ2V0KCkpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgp
LCAiZGF0YSIsIHZhbHVlLmdldCgpKTsKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0
KGNvbnRleHQuZ2V0KCkpOworICAgIH0KK30KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIEZvbyBw
YXJlbnQ7CiAgICAgaW50IGJhcjsKQEAgLTQxODIsNiArNDMxMiw3IEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvZnVuY3Rpb24iLCB0
ZXN0SlNDRnVuY3Rpb24pOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9vYmplY3QiLCB0ZXN0
SlNDT2JqZWN0KTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvY2xhc3MiLCB0ZXN0SlNDQ2xh
c3MpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9hcnJheS1idWZmZXIiLCB0ZXN0SlNDQXJy
YXlCdWZmZXIpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm90b3R5cGVzIiwgdGVzdEpT
Q1Byb3RvdHlwZXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9leGNlcHRpb25zIiwgdGVz
dEpTQ0V4Y2VwdGlvbnMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm9taXNlcyIsIHRl
c3RKU0NQcm9taXNlcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453715</attachid>
            <date>2022-03-03 03:06:02 -0800</date>
            <delta_ts>2022-03-07 15:12:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237088-20220303130601.patch</filename>
            <type>text/plain</type>
            <size>17502</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzJlZDE0NWJlODkzYjY2M2YxNmZjNzQ3ZGM4NmU2ZTI3OTZjYmM1Li5mNWM0ZjEyMjQxM2JjYWQy
ZmE1MDI0NmRiNjU3NzllMDgxZjc5NGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMy0wMyAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBFeHBvc2UgQXJyYXlCdWZmZXIgaW4gdGhlIHB1
YmxpYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNzA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgYWRkcyBhIHNldCBvZiBuZXcgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gSlNDVmFsdWUg
b2JqZWN0cyB3aGljaCByZWZlciB0byBhcnJheQorICAgICAgICBidWZmZXJzIGluIHRoZSBKUyBz
aWRlIG9mIHRoZSB3b3JsZC4gVGhpcyBhbGxvd3Mgc2hhcmluZyBjaHVua3Mgb2YgbWVtb3J5IGJ1
ZmZlcnMKKyAgICAgICAgZWZmaWNpZW50bHkgd2l0aCBuYXRpdmUgY29kZSwgd2l0aG91dCBuZWVk
aW5nIHRvIGNvcHkgbm9yIGVuY29kZSBkYXRhIGJhY2sgYW5kIGZvcnRoLgorCisgICAgICAgICog
QVBJL2dsaWIvSlNDVmFsdWUuY3BwOgorICAgICAgICAoanNjQXJyYXlCdWZmZXJEZWFsbG9jYXRl
KToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKToKKyAgICAgICAgKGpzY192
YWx1ZV9pc19hcnJheV9idWZmZXIpOgorICAgICAgICAoanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9n
ZXRfZGF0YSk6CisgICAgICAgIChqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9sZW5ndGgpOgor
ICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmg6CisgICAgICAgICogQVBJL2dsaWIvZG9jcy9q
c2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0OgorCiAyMDIyLTAzLTAyICBDb21taXQgUXVldWUgIDxj
b21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcg
cjI5MDcxNy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NW
YWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwCmlu
ZGV4IGFmOTY4NzQ1MzU2NjJkNTkyOTNlY2MxY2FhMDE4YzRjYTQ5YjNiOGYuLmNmNWJiNTY5YWM0
YWRlMjllYWQ1M2EyZTIzMDdjNzA1ZjA3ZDRjM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKICNpbmNsdWRlICJKU1JldGFp
blB0ci5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheS5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJz
ZXIuaCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgPGdvYmplY3QvZ3Zh
bHVlY29sbGVjdG9yLmg+CkBAIC0xNDYxLDYgKzE0NjIsMTc1IEBAIEpTQ1ZhbHVlKiBqc2NfdmFs
dWVfY29uc3RydWN0b3JfY2FsbHYoSlNDVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBwYXJhbWV0ZXJz
Q291bnQsCiAgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRl
eHQuZ2V0KCksIHJlc3VsdCkubGVha1JlZigpOwogfQogCitzdHJ1Y3QgQXJyYXlCdWZmZXJEZWFs
bG9jYXRvckNvbnRleHQgeworICAgIGdwb2ludGVyIHVzZXJEYXRhOworICAgIEdEZXN0cm95Tm90
aWZ5IGRlc3Ryb3lOb3RpZnk7Cit9OworV0VCS0lUX0RFRklORV9BU1lOQ19EQVRBX1NUUlVDVChB
cnJheUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dCkKKworc3RhdGljIHZvaWQganNjQXJyYXlCdWZm
ZXJEZWFsbG9jYXRlKHZvaWQqLCB2b2lkKiBkZWFsbG9jYXRvckNvbnRleHQpCit7CisgICAgYXV0
byogY29udGV4dCA9IHN0YXRpY19jYXN0PEFycmF5QnVmZmVyRGVhbGxvY2F0b3JDb250ZXh0Kj4o
ZGVhbGxvY2F0b3JDb250ZXh0KTsKKyAgICBjb250ZXh0LT5kZXN0cm95Tm90aWZ5KGNvbnRleHQt
PnVzZXJEYXRhKTsKKyAgICBkZXN0cm95QXJyYXlCdWZmZXJEZWFsbG9jYXRvckNvbnRleHQoY29u
dGV4dCk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX25ld19hcnJheV9idWZmZXI6CisgKiBAY29u
dGV4dDogQSAjSlNDQ29udGV4dAorICogQGRhdGE6IFBvaW50ZXIgdG8gYSByZWdpb24gb2YgbWVt
b3J5LgorICogQGxlbmd0aDogU2l6ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4KKyAq
IEBkZXN0cm95X25vdGlmeTogKG51bGxhYmxlKTogZGVzdHJveSBub3RpZmllciBmb3IgQHVzZXJf
ZGF0YS4KKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhLgorICoKKyAqIENyZWF0
ZXMgYSBuZXcgJUFycmF5QnVmZmVyIGZyb20gZXhpc3RpbmcgQGRhdGEgaW4gbWVtb3J5LiBUaGUg
QGRhdGEgaXMgbm90CisgKiBjb3BpZWQ6IHdoaWxlIHRoaXMgYWxsb3dzIHNoYXJpbmcgZGF0YSB3
aXRoIEphdmFTY3JpcHQgZWZmaWNpZW50bHksIHRoZQorICogY2FsbGVyIG11c3QgZW5zdXJlIHRo
YXQgdGhlIG1lbW9yeSByZWdpb24gcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgbmV3bHkKKyAqIGNy
ZWF0ZWQgb2JqZWN0IGlzIHJlbGVhc2VkIGJ5IEpTQy4KKyAqCisgKiBPcHRpb25hbGx5LCBhIEBk
ZXN0cm95X25vdGlmeSBjYWxsYmFjayBjYW4gYmUgcHJvdmlkZWQsIHdoaWNoIHdpbGwgYmUKKyAq
IGludm9rZWQgd2l0aCBAdXNlcl9kYXRhIGFzIHBhcmFtZXRlciB3aGVuIHRoZSAlQXJyYXlCdWZm
ZXIgb2JqZWN0IGlzCisgKiByZWxlYXNlZC4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZv
ciBmcmVlaW5nIHJlc291cmNlcyByZWxhdGVkIHRvCisgKiB0aGUgbWVtb3J5IHJlZ2lvbiB3aGlj
aCBjb250YWlucyB0aGUgZGF0YToKKyAqCisgKiB8WyE8LS0gbGFuZ3VhZ2U9IkMiIC0tPgorICog
R01hcHBlZEZpbGUgKmYgPSBnX21hcHBlZF9maWxlX25ldyAoZmlsZV9wYXRoLCBUUlVFLCBOVUxM
KTsKKyAqIEpTQ1ZhbHVlICp2YWx1ZSA9IGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyIChjb250
ZXh0LAorICogICAgIGdfbWFwcGVkX2ZpbGVfZ2V0X2NvbnRlbnRzIChmKSwgZ19tYXBwZWRfZmls
ZV9nZXRfbGVuZ3RoIChmKSwKKyAqICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdfbWFwcGVkX2ZpbGVf
dW5yZWYsIGYpOworICogXXwKKyAqCisgKiBOb3RlIHRoYXQgdGhlIEB1c2VyX2RhdGEgY2FuIGJl
IHRoZSBzYW1lIHZhbHVlIGFzIEBkYXRhOgorICoKKyAqIHxbITwtLSBsYW5ndWFnZT0iQyIgLS0+
CisgKiB2b2lkICpieXRlcyA9IGdfbWFsbG9jMCAoMTAwKTsKKyAqIEpTQ1ZhbHVlICp2YWx1ZSA9
IGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyIChjb250ZXh0LCBieXRlcywgMTAwLCBnX2ZyZWUs
IGJ5dGVzKTsKKyAqIF18CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNKU0NW
YWx1ZQorICoKKyAqIFNpbmNlOiAyLjM4CisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Fy
cmF5X2J1ZmZlcihKU0NDb250ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3Ro
LCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7
CisKKyAgICBBcnJheUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dCogZGVhbGxvY2F0b3JDb250ZXh0
ID0gbnVsbHB0cjsKKyAgICBpZiAoZGVzdHJveU5vdGlmeSkgeworICAgICAgICBkZWFsbG9jYXRv
ckNvbnRleHQgPSBjcmVhdGVBcnJheUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dCgpOworICAgICAg
ICBkZWFsbG9jYXRvckNvbnRleHQtPmRlc3Ryb3lOb3RpZnkgPSBkZXN0cm95Tm90aWZ5OworICAg
ICAgICBkZWFsbG9jYXRvckNvbnRleHQtPnVzZXJEYXRhID0gdXNlckRhdGE7CisgICAgfQorCisg
ICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpzQ29udGV4dCA9
IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAgYXV0byoganNBcnJheUJ1ZmZl
ciA9IEpTT2JqZWN0TWFrZUFycmF5QnVmZmVyV2l0aEJ5dGVzTm9Db3B5KGpzQ29udGV4dCwgZGF0
YSwgbGVuZ3RoLCBkZWFsbG9jYXRvckNvbnRleHQgPyBqc2NBcnJheUJ1ZmZlckRlYWxsb2NhdGUg
OiBudWxscHRyLCBkZWFsbG9jYXRvckNvbnRleHQsICZleGNlcHRpb24pOworICAgIGlmIChqc2ND
b250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhjZXB0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFs
dWUoY29udGV4dCwganNBcnJheUJ1ZmZlcikubGVha1JlZigpOworfQorCisvKioKKyAqIGpzY192
YWx1ZV9pc19hcnJheV9idWZmZXI6CisgKiBAdmFsdWU6IEEgI0pTQ1ZhbHVlLgorICoKKyAqIENo
ZWNrIHdoZXRoZXIgdGhlIEB2YWx1ZSBpcyBhbiAlQXJyYXlCdWZmZXIuCisgKgorICogUmV0dXJu
czogd2hldGhlciB0aGUgdmFsdWUgaXMgYW4gJUFycmF5QnVmZmVyCisgKgorICogU2luY2U6IDIu
MzgKKyAqLworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX2FycmF5X2J1ZmZlcihKU0NWYWx1ZSogdmFs
dWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFM
U0UpOworCisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dCh2YWx1
ZS0+cHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7CisgICAgYXV0byBqc1R5cGVkQXJyYXlUeXBlID0gSlNWYWx1ZUdldFR5cGVkQXJyYXlU
eXBlKGpzQ29udGV4dCwgdmFsdWUtPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlm
IChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQodmFsdWUtPnByaXYtPmNvbnRleHQu
Z2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiBq
c1R5cGVkQXJyYXlUeXBlID09IGtKU1R5cGVkQXJyYXlUeXBlQXJyYXlCdWZmZXI7Cit9CisKKy8q
KgorICoganNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfZGF0YToKKyAqIEB2YWx1ZTogQSAjSlND
VmFsdWUKKyAqIEBsZW5ndGg6IChudWxsYWJsZSk6IGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRo
ZSBsZW5ndGggb2YgdGhlIG1lbW9yeSByZWdpb24uCisgKgorICogT2J0YWlucyBhIHBvaW50ZXIg
dG8gdGhlIG1lbW9yeSByZWdpb24gdGhhdCBob2xkcyB0aGUgY29udGVudHMgb2YgdGhlCisgKiAl
QXJyYXlCdWZmZXI7IG1vZGlmaWNhdGlvbnMgZG9uZSB0byB0aGUgZGF0YSB3aWxsIGJlIHZpc2li
bGUgdG8gSmF2YVNjcmlwdAorICogY29kZS4gSWYgQGxlbmd0aCBpcyBub3QgJU5VTEwsIHRoZSBs
ZW5ndGggaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeSByZWdpb24KKyAqIHdpbGwgYmUgYWxzbyBzdG9y
ZWQgaW4gdGhlIHBvaW50ZWQgbG9jYXRpb24uCisgKgorICogTm90ZSB0aGF0IHRoZSBwb2ludGVy
IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgbm90IGd1YXJhbnRlZWQgdG8gcmVtYWluCisg
KiB0aGUgc2FtZSBhZnRlciBjYWxscyB0byBvdGhlciBKU0MgQVBJIGZ1bmN0aW9ucy4gSWYgeW91
IHBsYW4gdG8gYWNjZXNzIHRoZQorICogZGF0YSBvZiB0aGUgJUFycmF5QnVmZmVyIGxhdGVyLCB5
b3UgY2FuIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIEB2YWx1ZSBhbmQKKyAqIG9idGFpbiB0aGUg
ZGF0YSBwb2ludGVyIGF0IGEgbGF0ZXIgcG9pbnQuIEtlZXAgaW4gbWluZCB0aGF0IGlmIEphdmFT
Y3JpcHQKKyAqIGNvZGUgaGFzIGEgY2hhbmNlIHRvIHJ1biwgZm9yIGV4YW1wbGUgZHVlIHRvIG1h
aW4gbG9vcCBldmVudHMgdGhhdCByZXN1bHQKKyAqIGluIEpTQyBiZWluZyBjYWxsZWQsIHRoZSBj
b250ZW50cyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiBtaWdodCBiZSBtb2RpZmllZCBpbgorICogdGhl
IG1lYW50aW1lLiBDb25zaWRlciB0YWtpbmcgYSBjb3B5IG9mIHRoZSBkYXRhIGFuZCB1c2luZyB0
aGUgY29weSBpbnN0ZWFkCisgKiBpbiBhc3luY2hyb25vdXMgY29kZS4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSk6IHBvaW50ZXIgdG8gbWVtb3J5LgorICoKKyAqIFNpbmNlOiAyLjM4
CisgKi8KK2dwb2ludGVyIGpzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2RhdGEoSlNDVmFsdWUq
IHZhbHVlLCBnc2l6ZSogbGVuZ3RoKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19J
U19WQUxVRSh2YWx1ZSksIG51bGxwdHIpOworCisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29u
dGV4dEdldEpTQ29udGV4dCh2YWx1ZS0+cHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byoganNPYmplY3QgPSBKU1ZhbHVl
VG9PYmplY3QoanNDb250ZXh0LCB2YWx1ZS0+cHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7Cisg
ICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZCh2YWx1ZS0+cHJpdi0+Y29u
dGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2
b2lkKiBkYXRhID0gSlNPYmplY3RHZXRBcnJheUJ1ZmZlckJ5dGVzUHRyKGpzQ29udGV4dCwganNP
YmplY3QsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgaWYgKGxlbmd0aCkgeworICAgICAgICAqbGVuZ3RoID0gSlNP
YmplY3RHZXRBcnJheUJ1ZmZlckJ5dGVMZW5ndGgoanNDb250ZXh0LCBqc09iamVjdCwgJmV4Y2Vw
dGlvbik7CisgICAgICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQodmFs
dWUtPnByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiBqc2NfdmFs
dWVfYXJyYXlfYnVmZmVyX2dldF9sZW5ndGg6CisgKiBAdmFsdWU6IEEgI0pTQ1ZhbHVlCisgKgor
ICogT2J0YWlucyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0aGF0IGhv
bGRzIHRoZSBjb250ZW50cyBvZgorICogYW4gJUFycmF5QnVmZmVyLgorICoKKyAqIFJldHVybnM6
IHNpemUgaW4gYnl0ZXMuCisgKgorICogU2luY2U6IDIuMzgKKyAqLworZ3NpemUganNjX3ZhbHVl
X2FycmF5X2J1ZmZlcl9nZXRfbGVuZ3RoKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCAwKTsKKworICAgIGF1dG8qIGpzQ29u
dGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCkp
OworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpzT2Jq
ZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgdmFsdWUtPnByaXYtPmpzVmFsdWUsICZl
eGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQodmFs
dWUtPnByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgc2l6ZV90IGxlbmd0aCA9IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGpz
Q29udGV4dCwganNPYmplY3QsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwogLyoqCiAgKiBq
c2NfdmFsdWVfbmV3X2Zyb21fanNvbjoKICAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCmluZGV4IDVmNjU0OTcyNWIwZWVm
NjRmZmVmMjA2MWQ0NjNmY2E4NzM2YmViYWQuLmFiOWMzZDg0MmNhYzcxMGQwNzJkODI4OWI2MDRh
NmNjZGZhN2UzNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5o
CkBAIC0yNDYsNiArMjQ2LDIyIEBAIEpTQ19BUEkgSlNDVmFsdWUgKgoganNjX3ZhbHVlX2Z1bmN0
aW9uX2NhbGx2ICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAg
ICAgICAgICAgbl9wYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEpTQ1ZhbHVlICAgICAgICAgICAgKipwYXJhbWV0ZXJzKSBHX0dOVUNfV0FSTl9V
TlVTRURfUkVTVUxUOworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X2FycmF5X2J1
ZmZlciAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAg
ICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Np
emUgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgICAgZGVzdHJveV9ub3RpZnksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAg
ICAgIHVzZXJfZGF0YSk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19hcnJheV9i
dWZmZXIgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitK
U0NfQVBJIGdwb2ludGVyCitqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhICAgICAgICAg
ICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdzaXplICAgICAgICAgICAgICAgICpsZW5ndGgpOworCitKU0Nf
QVBJIGdzaXplCitqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9sZW5ndGggICAgICAgICAoSlND
VmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKIAogSlNDX0FQSSBnYm9vbGVhbgoganNjX3ZhbHVl
X2lzX2NvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2
YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9q
c2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L2RvY3MvanNjLWdsaWItNC4wLXNlY3Rpb25zLnR4dAppbmRleCAzNmEwYzhkNzM3NDFkZjAyZTQw
NTBkMWM2ZTZkNjQ2ZmEwM2RlYjAxLi4yMDc2YzYwZDI1NmZhZjEyN2VlZWQzOTZiNTA3ZjRjNmM4
NjRhYWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9q
c2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9kb2NzL2pzYy1nbGliLTQuMC1zZWN0aW9ucy50eHQKQEAgLTExMCw2ICsxMTAsMTAgQEAg
anNjX3ZhbHVlX25ld19mdW5jdGlvbl92YXJpYWRpYwoganNjX3ZhbHVlX2lzX2Z1bmN0aW9uCiBq
c2NfdmFsdWVfZnVuY3Rpb25fY2FsbAoganNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGx2Citqc2NfdmFs
dWVfbmV3X2FycmF5X2J1ZmZlcgoranNjX3ZhbHVlX2lzX2FycmF5X2J1ZmZlcgoranNjX3ZhbHVl
X2FycmF5X2J1ZmZlcl9nZXRfZGF0YQoranNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfbGVuZ3Ro
CiBqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IKIGpzY192YWx1ZV9jb25zdHJ1Y3Rvcl9jYWxsCiBq
c2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbHYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiMDUyNzY5OWY0Y2NlNTA1NmRhYjExNjBlOGQzYjQ1M2E5
ODgzNThlLi44ZDgzMTVhNGRiZmI2ZjBmYTk1YjgyOWNhN2U0N2Q2OGNkODFkNzIzIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMjItMDMtMDMgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR0xpYl0gRXhwb3NlIEFycmF5QnVmZmVyIGluIHRoZSBwdWJsaWMgQVBJ
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwODgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFk
ZHMgYSBzZXQgb2YgbmV3IGZ1bmN0aW9ucyB0byBvcGVyYXRlIG9uIEpTQ1ZhbHVlIG9iamVjdHMg
d2hpY2ggcmVmZXIgdG8gYXJyYXkKKyAgICAgICAgYnVmZmVycyBpbiB0aGUgSlMgc2lkZSBvZiB0
aGUgd29ybGQuIFRoaXMgYWxsb3dzIHNoYXJpbmcgY2h1bmtzIG9mIG1lbW9yeSBidWZmZXJzCisg
ICAgICAgIGVmZmljaWVudGx5IHdpdGggbmF0aXZlIGNvZGUsIHdpdGhvdXQgbmVlZGluZyB0byBj
b3B5IG5vciBlbmNvZGUgZGF0YSBiYWNrIGFuZCBmb3J0aC4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcDogQWRkZWQgdGVzdCBm
b3IgYXJyYXkgYnVmZmVycy4KKyAgICAgICAgKHRlc3RKU0NBcnJheUJ1ZmZlcik6CisgICAgICAg
IChtYWluKToKKwogMjAyMi0wMy0wMyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW1B5dGhvbjNdIFN3aXRjaCBhIGNvdXBsZSBnbGliL2ZsYXRwYWsg
c2NyaXB0cyB0byBQeXRob24zCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAKaW5kZXggNDZiYWQ2MDZmZDFhZDkx
MDNhMTIzNGViNDZiYjRhMzQxZDM4YzVlZS4uN2RiYjM2YmQ4YzhkZjBmOTU5NTIxNjVhNjhjZGE2
NTEzZTliY2E0NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2Ny
aXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
SmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcApAQCAtMjgyMiw2ICsyODIyLDEzNiBAQCBz
dGF0aWMgdm9pZCB0ZXN0SlNDQ2xhc3MoKQogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgdGVzdEpT
Q0FycmF5QnVmZmVyKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7Cisg
ICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAg
IEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwKKyAgICAgICAgICAgICJjb25zdCBhcnIgPSBuZXcgVWludDhB
cnJheSg1KTsiCisgICAgICAgICAgICAiYXJyWzBdID0gMHg3MzsgYXJyWzFdID0gMHg3MDsgYXJy
WzJdID0gMHg2MTsgYXJyWzNdID0gMHg2RDsgYXJyWzRdID0gMHgwMDsiCisgICAgICAgICAgICAi
YXJyLmJ1ZmZlcjsiLAorICAgICAgICAgICAgLTEpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2FycmF5
X2J1ZmZlcihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBnc2l6ZSBieXRlQ291bnQgPSAwOwor
ICAgICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGpzY192YWx1ZV9hcnJheV9i
dWZmZXJfZ2V0X2RhdGEocmVzdWx0LmdldCgpLCAmYnl0ZUNvdW50KSk7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfbGVuZ3RoKHJlc3VsdC5nZXQo
KSksID09LCA1KTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChieXRlQ291bnQsID09LCA1KTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KGRhdGFbNF0sID09LCAnXDAnKTsKKyAgICAgICAgZ19h
c3NlcnRfY21wc3RyKGRhdGEsID09LCAic3BhbSIpOworCisgICAgICAgIHNucHJpbnRmKGRhdGEs
IGJ5dGVDb3VudCwgIllheSEiKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImFyclswXSA9PSAweDU5ICYmIGFyclsxXSA9
PSAweDYxICYmIGFyclsyXSA9PSAweDc5ICYmIGFyclszXSA9PSAweDIxICYmIGFycls0XSA9PSAw
eDAwOyIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAg
R1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0
aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIGNo
YXIgZGF0YVsxMDBdOworICAgICAgICBzbnByaW50ZihkYXRhLCBzaXplb2YoZGF0YSksICJIZWxs
bywgSlMhIik7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIoY29udGV4dC5nZXQoKSwgZGF0YSwgMTAwLCBudWxs
cHRyLCBudWxscHRyKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIodmFsdWUuZ2V0KCkp
KTsKKworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0
X2xlbmd0aCh2YWx1ZS5nZXQoKSksID09LCAxMDApOworCisgICAgICAgIGpzY19jb250ZXh0X3Nl
dF92YWx1ZShjb250ZXh0LmdldCgpLCAiZGF0YSIsIHZhbHVlLmdldCgpKTsKKworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgIihuZXcgVWludDhBcnJheShkYXRhKSlbMl0iLCAtMSkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCAnbCcpOworCisgICAgICAg
IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
KG5ldyBVaW50OEFycmF5KGRhdGEpKVswXSA9IDY1OyIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9p
c19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sICdBJyk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cGludChkYXRhWzBdLCA9PSwgJ0EnKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhKHZhbHVlLmdl
dCgpLCBudWxscHRyKSlbMF0sID09LCAnQScpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVh
a0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250
ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNv
bnRleHQuZ2V0KCkpOworCisgICAgICAgIGNoYXIgZGF0YVtdID0gInNwYW0gYW5kIGVnZ3MiOwor
ICAgICAgICBib29sIGRlc3Ryb3lOb3RpZnlDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5X2J1ZmZl
cihjb250ZXh0LmdldCgpLCBkYXRhLCBzdHJsZW4oZGF0YSksIFtdKGdwb2ludGVyIGRhdGEpIHsK
KyAgICAgICAgICAgICpzdGF0aWNfY2FzdDxib29sKj4oZGF0YSkgPSB0cnVlOworICAgICAgICB9
LCAmZGVzdHJveU5vdGlmeUNhbGxlZCkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdl
dCgpKTsKKworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIo
dmFsdWUuZ2V0KCkpKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5n
ZXQoKSwgImRhdGEiLCB2YWx1ZS5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gbnVsbHB0cjsKKwor
ICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0X2ZhbHNlKGRlc3Ryb3lOb3RpZnlDYWxsZWQpOworCisgICAgICAgIHZhbHVlID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZGF0YSIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX2FycmF5X2J1ZmZlcih2YWx1ZS5nZXQoKSkpOworCisgICAgICAgIHZh
bHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKGNvbnRleHQuZ2V0KCkpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0
X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZGF0YSIsIHZhbHVlLmdldCgpKTsKKworICAgICAg
ICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoZGVzdHJveU5vdGlmeUNhbGxlZCk7CisgICAgfQorCisgICAgeworICAgICAgICBM
ZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIo
Y29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgc3RydWN0IEhlYXBEYXRhIHsKKyAgICAgICAgICAg
IGNoYXIgZGF0YSB7IDB4NDIgfTsKKyAgICAgICAgICAgIEdSZWZQdHI8R0ZpbGU+IG9iamVjdCB7
IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKCIvIikpIH07CisgICAgICAgIH07CisKKyAg
ICAgICAgYXV0byogZGF0YSA9IG5ldyBIZWFwRGF0YTsKKyAgICAgICAgY2hlY2tlci53YXRjaChk
YXRhLT5vYmplY3QuZ2V0KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5X2J1ZmZlcihjb250ZXh0LmdldCgpLCBkYXRhLCBz
aXplb2YoSGVhcERhdGEpLCBbXShncG9pbnRlciBkYXRhKSB7CisgICAgICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8SGVhcERhdGEqPihkYXRhKTsKKyAgICAgICAgfSwgZGF0YSkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3Zh
bHVlKGNvbnRleHQuZ2V0KCksICJkYXRhIiwgdmFsdWUuZ2V0KCkpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiKG5ldyBVaW50OEFycmF5KGRhdGEpKVswXTsiLCAtMSkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDB4
NDIpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5kZWZpbmVk
KGNvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisK
KyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJkYXRhIiwgdmFs
dWUuZ2V0KCkpOworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQo
KSk7CisgICAgfQorfQorCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgRm9vIHBhcmVudDsKICAgICBp
bnQgYmFyOwpAQCAtNDE4Miw2ICs0MzEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9mdW5jdGlvbiIsIHRlc3RKU0NGdW5jdGlv
bik7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL29iamVjdCIsIHRlc3RKU0NPYmplY3QpOwog
ICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9jbGFzcyIsIHRlc3RKU0NDbGFzcyk7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvanNjL2FycmF5LWJ1ZmZlciIsIHRlc3RKU0NBcnJheUJ1ZmZlcik7CiAg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3Byb3RvdHlwZXMiLCB0ZXN0SlNDUHJvdG90eXBlcyk7
CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2V4Y2VwdGlvbnMiLCB0ZXN0SlNDRXhjZXB0aW9u
cyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3Byb21pc2VzIiwgdGVzdEpTQ1Byb21pc2Vz
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454042</attachid>
            <date>2022-03-07 15:12:35 -0800</date>
            <delta_ts>2022-03-11 07:24:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237088-20220308011234.patch</filename>
            <type>text/plain</type>
            <size>17512</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
OTdjMTIzMjY1N2JiZmVjMzZmODc4OWE4NjdkYTgzMmQ4MjJjM2UzLi5mMTJhMWQ3OTFmN2FkMjU5
NmNmYjMyYWFjMDE3ZTg2MDk4Y2Q5ZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMy0wOCAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBFeHBvc2UgQXJyYXlCdWZmZXIgaW4gdGhlIHB1
YmxpYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNzA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgYWRkcyBhIHNldCBvZiBuZXcgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gSlNDVmFsdWUg
b2JqZWN0cyB3aGljaCByZWZlciB0byBhcnJheQorICAgICAgICBidWZmZXJzIGluIHRoZSBKUyBz
aWRlIG9mIHRoZSB3b3JsZC4gVGhpcyBhbGxvd3Mgc2hhcmluZyBjaHVua3Mgb2YgbWVtb3J5IGJ1
ZmZlcnMKKyAgICAgICAgZWZmaWNpZW50bHkgd2l0aCBuYXRpdmUgY29kZSwgd2l0aG91dCBuZWVk
aW5nIHRvIGNvcHkgbm9yIGVuY29kZSBkYXRhIGJhY2sgYW5kIGZvcnRoLgorCisgICAgICAgICog
QVBJL2dsaWIvSlNDVmFsdWUuY3BwOgorICAgICAgICAoanNjQXJyYXlCdWZmZXJEZWFsbG9jYXRl
KToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKToKKyAgICAgICAgKGpzY192
YWx1ZV9pc19hcnJheV9idWZmZXIpOgorICAgICAgICAoanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9n
ZXRfZGF0YSk6CisgICAgICAgIChqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9sZW5ndGgpOgor
ICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmg6CisgICAgICAgICogQVBJL2dsaWIvZG9jcy9q
c2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0OgorCiAyMDIyLTAzLTA3ICBBbmdlbG9zIE9pa29ub21v
cG91bG9zICA8YW5nZWxvc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEFzc2VtYmx5SGVscGVyc1Nw
b29sZXJzOiB1c2UgbG9hZC9zdG9yZSBwYWlyIG9uIEFSTXY3CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcAppbmRleCBhZjk2ODc0NTM1NjYyZDU5MjkzZWNjMWNh
YTAxOGM0Y2E0OWIzYjhmLi5iMWQzMjAzNDEyZGVkOTA2OGUxNzkwMTU2NzVhYjU3ZjYwZGE4ZWFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKQEAgLTI4
LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDVmFsdWVQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiSlNSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXkuaCIKICNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAjaW5jbHVkZSAiT3BhcXVlSlNTdHJp
bmcuaCIKICNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgpAQCAtMTQ2MSw2ICsx
NDYyLDE3NSBAQCBKU0NWYWx1ZSoganNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGx2KEpTQ1ZhbHVl
KiB2YWx1ZSwgdW5zaWduZWQgcGFyYW1ldGVyc0NvdW50LAogICAgIHJldHVybiBqc2NDb250ZXh0
R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCByZXN1bHQpLmxlYWtSZWYoKTsK
IH0KIAorc3RydWN0IEFycmF5QnVmZmVyRGVhbGxvY2F0b3JDb250ZXh0IHsKKyAgICBncG9pbnRl
ciB1c2VyRGF0YTsKKyAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5OworfTsKK1dFQktJ
VF9ERUZJTkVfQVNZTkNfREFUQV9TVFJVQ1QoQXJyYXlCdWZmZXJEZWFsbG9jYXRvckNvbnRleHQp
CisKK3N0YXRpYyB2b2lkIGpzY0FycmF5QnVmZmVyRGVhbGxvY2F0ZSh2b2lkKiwgdm9pZCogZGVh
bGxvY2F0b3JDb250ZXh0KQoreworICAgIGF1dG8qIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxBcnJh
eUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dCo+KGRlYWxsb2NhdG9yQ29udGV4dCk7CisgICAgY29u
dGV4dC0+ZGVzdHJveU5vdGlmeShjb250ZXh0LT51c2VyRGF0YSk7CisgICAgZGVzdHJveUFycmF5
QnVmZmVyRGVhbGxvY2F0b3JDb250ZXh0KGNvbnRleHQpOworfQorCisvKioKKyAqIGpzY192YWx1
ZV9uZXdfYXJyYXlfYnVmZmVyOgorICogQGNvbnRleHQ6IEEgI0pTQ0NvbnRleHQKKyAqIEBkYXRh
OiBQb2ludGVyIHRvIGEgcmVnaW9uIG9mIG1lbW9yeS4KKyAqIEBsZW5ndGg6IFNpemUgaW4gYnl0
ZXMgb2YgdGhlIG1lbW9yeSByZWdpb24uCisgKiBAZGVzdHJveV9ub3RpZnk6IChudWxsYWJsZSk6
IGRlc3Ryb3kgbm90aWZpZXIgZm9yIEB1c2VyX2RhdGEuCisgKiBAdXNlcl9kYXRhOiAoY2xvc3Vy
ZSk6IHVzZXIgZGF0YS4KKyAqCisgKiBDcmVhdGVzIGEgbmV3ICVBcnJheUJ1ZmZlciBmcm9tIGV4
aXN0aW5nIEBkYXRhIGluIG1lbW9yeS4gVGhlIEBkYXRhIGlzIG5vdAorICogY29waWVkOiB3aGls
ZSB0aGlzIGFsbG93cyBzaGFyaW5nIGRhdGEgd2l0aCBKYXZhU2NyaXB0IGVmZmljaWVudGx5LCB0
aGUKKyAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgcmVnaW9uIHJlbWFpbnMg
dmFsaWQgdW50aWwgdGhlIG5ld2x5CisgKiBjcmVhdGVkIG9iamVjdCBpcyByZWxlYXNlZCBieSBK
U0MuCisgKgorICogT3B0aW9uYWxseSwgYSBAZGVzdHJveV9ub3RpZnkgY2FsbGJhY2sgY2FuIGJl
IHByb3ZpZGVkLCB3aGljaCB3aWxsIGJlCisgKiBpbnZva2VkIHdpdGggQHVzZXJfZGF0YSBhcyBw
YXJhbWV0ZXIgd2hlbiB0aGUgJUFycmF5QnVmZmVyIG9iamVjdCBpcworICogcmVsZWFzZWQuIFRo
aXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgZnJlZWluZyByZXNvdXJjZXMgcmVsYXRlZCB0
bworICogdGhlIG1lbW9yeSByZWdpb24gd2hpY2ggY29udGFpbnMgdGhlIGRhdGE6CisgKgorICog
fFshPC0tIGxhbmd1YWdlPSJDIiAtLT4KKyAqIEdNYXBwZWRGaWxlICpmID0gZ19tYXBwZWRfZmls
ZV9uZXcgKGZpbGVfcGF0aCwgVFJVRSwgTlVMTCk7CisgKiBKU0NWYWx1ZSAqdmFsdWUgPSBqc2Nf
dmFsdWVfbmV3X2FycmF5X2J1ZmZlciAoY29udGV4dCwKKyAqICAgICBnX21hcHBlZF9maWxlX2dl
dF9jb250ZW50cyAoZiksIGdfbWFwcGVkX2ZpbGVfZ2V0X2xlbmd0aCAoZiksCisgKiAgICAgKEdE
ZXN0cm95Tm90aWZ5KSBnX21hcHBlZF9maWxlX3VucmVmLCBmKTsKKyAqIF18CisgKgorICogTm90
ZSB0aGF0IHRoZSBAdXNlcl9kYXRhIGNhbiBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBAZGF0YToKKyAq
CisgKiB8WyE8LS0gbGFuZ3VhZ2U9IkMiIC0tPgorICogdm9pZCAqYnl0ZXMgPSBnX21hbGxvYzAg
KDEwMCk7CisgKiBKU0NWYWx1ZSAqdmFsdWUgPSBqc2NfdmFsdWVfbmV3X2FycmF5X2J1ZmZlciAo
Y29udGV4dCwgYnl0ZXMsIDEwMCwgZ19mcmVlLCBieXRlcyk7CisgKiBdfAorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjSlNDVmFsdWUKKyAqCisgKiBTaW5jZTogMi4zOAorICov
CitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIoSlNDQ29udGV4dCogY29udGV4
dCwgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlm
eSwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lT
X0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworCisgICAgQXJyYXlCdWZmZXJEZWFsbG9jYXRv
ckNvbnRleHQqIGRlYWxsb2NhdG9yQ29udGV4dCA9IG51bGxwdHI7CisgICAgaWYgKGRlc3Ryb3lO
b3RpZnkpIHsKKyAgICAgICAgZGVhbGxvY2F0b3JDb250ZXh0ID0gY3JlYXRlQXJyYXlCdWZmZXJE
ZWFsbG9jYXRvckNvbnRleHQoKTsKKyAgICAgICAgZGVhbGxvY2F0b3JDb250ZXh0LT5kZXN0cm95
Tm90aWZ5ID0gZGVzdHJveU5vdGlmeTsKKyAgICAgICAgZGVhbGxvY2F0b3JDb250ZXh0LT51c2Vy
RGF0YSA9IHVzZXJEYXRhOworICAgIH0KKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVs
bHB0cjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRl
eHQpOworICAgIGF1dG8qIGpzQXJyYXlCdWZmZXIgPSBKU09iamVjdE1ha2VBcnJheUJ1ZmZlcldp
dGhCeXRlc05vQ29weShqc0NvbnRleHQsIGRhdGEsIGxlbmd0aCwgZGVhbGxvY2F0b3JDb250ZXh0
ID8ganNjQXJyYXlCdWZmZXJEZWFsbG9jYXRlIDogbnVsbHB0ciwgZGVhbGxvY2F0b3JDb250ZXh0
LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KGNvbnRleHQsIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGpzQXJyYXlCdWZmZXIpLmxl
YWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfaXNfYXJyYXlfYnVmZmVyOgorICogQHZh
bHVlOiBBICNKU0NWYWx1ZS4KKyAqCisgKiBDaGVjayB3aGV0aGVyIHRoZSBAdmFsdWUgaXMgYW4g
JUFycmF5QnVmZmVyLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgdGhlIHZhbHVlIGlzIGFuICVB
cnJheUJ1ZmZlcgorICoKKyAqIFNpbmNlOiAyLjM4CisgKi8KK2dib29sZWFuIGpzY192YWx1ZV9p
c19hcnJheV9idWZmZXIoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIGF1dG8qIGpzQ29udGV4dCA9
IGpzY0NvbnRleHRHZXRKU0NvbnRleHQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCkpOworCisg
ICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8ganNUeXBlZEFycmF5
VHlwZSA9IEpTVmFsdWVHZXRUeXBlZEFycmF5VHlwZShqc0NvbnRleHQsIHZhbHVlLT5wcml2LT5q
c1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklm
TmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4ganNUeXBlZEFycmF5VHlwZSA9PSBrSlNUeXBlZEFy
cmF5VHlwZUFycmF5QnVmZmVyOworfQorCisvKioKKyAqIGpzY192YWx1ZV9hcnJheV9idWZmZXJf
Z2V0X2RhdGE6CisgKiBAdmFsdWU6IEEgI0pTQ1ZhbHVlCisgKiBAbGVuZ3RoOiAobnVsbGFibGUp
OiBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZW1vcnkgcmVnaW9u
LgorICoKKyAqIE9idGFpbnMgYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHRoYXQgaG9s
ZHMgdGhlIGNvbnRlbnRzIG9mIHRoZQorICogJUFycmF5QnVmZmVyOyBtb2RpZmljYXRpb25zIGRv
bmUgdG8gdGhlIGRhdGEgd2lsbCBiZSB2aXNpYmxlIHRvIEphdmFTY3JpcHQKKyAqIGNvZGUuIElm
IEBsZW5ndGggaXMgbm90ICVOVUxMLCB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBtZW1vcnkg
cmVnaW9uCisgKiB3aWxsIGFsc28gYmUgc3RvcmVkIGluIHRoZSBwb2ludGVkIGxvY2F0aW9uLgor
ICoKKyAqIE5vdGUgdGhhdCB0aGUgcG9pbnRlciByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlz
IG5vdCBndWFyYW50ZWVkIHRvIHJlbWFpbgorICogdGhlIHNhbWUgYWZ0ZXIgY2FsbHMgdG8gb3Ro
ZXIgSlNDIEFQSSBmdW5jdGlvbnMuIElmIHlvdSBwbGFuIHRvIGFjY2VzcyB0aGUKKyAqIGRhdGEg
b2YgdGhlICVBcnJheUJ1ZmZlciBsYXRlciwgeW91IGNhbiBrZWVwIGEgcmVmZXJlbmNlIHRvIHRo
ZSBAdmFsdWUgYW5kCisgKiBvYnRhaW4gdGhlIGRhdGEgcG9pbnRlciBhdCBhIGxhdGVyIHBvaW50
LiBLZWVwIGluIG1pbmQgdGhhdCBpZiBKYXZhU2NyaXB0CisgKiBjb2RlIGhhcyBhIGNoYW5jZSB0
byBydW4sIGZvciBleGFtcGxlIGR1ZSB0byBtYWluIGxvb3AgZXZlbnRzIHRoYXQgcmVzdWx0Cisg
KiBpbiBKU0MgYmVpbmcgY2FsbGVkLCB0aGUgY29udGVudHMgb2YgdGhlIG1lbW9yeSByZWdpb24g
bWlnaHQgYmUgbW9kaWZpZWQgaW4KKyAqIHRoZSBtZWFudGltZS4gQ29uc2lkZXIgdGFraW5nIGEg
Y29weSBvZiB0aGUgZGF0YSBhbmQgdXNpbmcgdGhlIGNvcHkgaW5zdGVhZAorICogaW4gYXN5bmNo
cm9ub3VzIGNvZGUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBwb2ludGVyIHRv
IG1lbW9yeS4KKyAqCisgKiBTaW5jZTogMi4zOAorICovCitncG9pbnRlciBqc2NfdmFsdWVfYXJy
YXlfYnVmZmVyX2dldF9kYXRhKEpTQ1ZhbHVlKiB2YWx1ZSwgZ3NpemUqIGxlbmd0aCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKwor
ICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQodmFsdWUtPnByaXYt
PmNvbnRleHQuZ2V0KCkpOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwor
ICAgIGF1dG8qIGpzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgdmFsdWUtPnBy
aXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0
aW9uSWZOZWVkZWQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YSA9IEpTT2JqZWN0R2V0QXJyYXlC
dWZmZXJCeXRlc1B0cihqc0NvbnRleHQsIGpzT2JqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAo
anNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0Lmdl
dCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChsZW5n
dGgpIHsKKyAgICAgICAgKmxlbmd0aCA9IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3Ro
KGpzQ29udGV4dCwganNPYmplY3QsICZleGNlcHRpb24pOworICAgICAgICBpZiAoanNjQ29udGV4
dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNl
cHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IGRhdGE7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfbGVuZ3RoOgor
ICogQHZhbHVlOiBBICNKU0NWYWx1ZQorICoKKyAqIE9idGFpbnMgdGhlIHNpemUgaW4gYnl0ZXMg
b2YgdGhlIG1lbW9yeSByZWdpb24gdGhhdCBob2xkcyB0aGUgY29udGVudHMgb2YKKyAqIGFuICVB
cnJheUJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOiBzaXplIGluIGJ5dGVzLgorICoKKyAqIFNpbmNl
OiAyLjM4CisgKi8KK2dzaXplIGpzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2xlbmd0aChKU0NW
YWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZh
bHVlKSwgMCk7CisKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0
KHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gbnVsbHB0cjsKKyAgICBhdXRvKiBqc09iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRl
eHQsIHZhbHVlLT5wcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4
dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNl
cHRpb24pKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNpemVfdCBsZW5ndGggPSBKU09iamVj
dEdldEFycmF5QnVmZmVyQnl0ZUxlbmd0aChqc0NvbnRleHQsIGpzT2JqZWN0LCAmZXhjZXB0aW9u
KTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2
LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBsZW5ndGg7Cit9CisKIC8qKgogICoganNjX3ZhbHVlX25ld19mcm9tX2pzb246CiAgKiBA
Y29udGV4dDogYSAjSlNDQ29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmFsdWUuaAppbmRleCA1ZjY1NDk3MjViMGVlZjY0ZmZlZjIwNjFkNDYzZmNhODczNmJlYmFkLi5h
YjljM2Q4NDJjYWM3MTBkMDcyZDgyODliNjA0YTZjY2RmYTdlMzVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApAQCAtMjQ2LDYgKzI0NiwyMiBAQCBKU0NfQVBJ
IEpTQ1ZhbHVlICoKIGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsdiAgICAgICAgICAgICAgICAgIChK
U0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIG5fcGFyYW1ldGVycywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1ZSAgICAgICAgICAg
ICoqcGFyYW1ldGVycykgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKK0pTQ19BUEkgSlNDVmFs
dWUgKgoranNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIgICAgICAgICAgICAgICAgKEpTQ0NvbnRl
eHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICAgICAgICAgICAgICAgICBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkg
ICAgICAgIGRlc3Ryb3lfbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitKU0NfQVBJIGdi
b29sZWFuCitqc2NfdmFsdWVfaXNfYXJyYXlfYnVmZmVyICAgICAgICAgICAgICAgICAoSlNDVmFs
dWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBncG9pbnRlcgoranNjX3ZhbHVlX2Fy
cmF5X2J1ZmZlcl9nZXRfZGF0YSAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAgICAg
ICAgICAgICAgICAqbGVuZ3RoKTsKKworSlNDX0FQSSBnc2l6ZQoranNjX3ZhbHVlX2FycmF5X2J1
ZmZlcl9nZXRfbGVuZ3RoICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CiAK
IEpTQ19BUEkgZ2Jvb2xlYW4KIGpzY192YWx1ZV9pc19jb25zdHJ1Y3RvciAgICAgICAgICAgICAg
ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWdsaWItNC4wLXNlY3Rpb25zLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC1zZWN0aW9ucy50
eHQKaW5kZXggMzZhMGM4ZDczNzQxZGYwMmU0MDUwZDFjNmU2ZDY0NmZhMDNkZWIwMS4uMjA3NmM2
MGQyNTZmYWYxMjdlZWVkMzk2YjUwN2Y0YzZjODY0YWFhNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWdsaWItNC4wLXNlY3Rpb25zLnR4dAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAtc2VjdGlv
bnMudHh0CkBAIC0xMTAsNiArMTEwLDEwIEBAIGpzY192YWx1ZV9uZXdfZnVuY3Rpb25fdmFyaWFk
aWMKIGpzY192YWx1ZV9pc19mdW5jdGlvbgoganNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwKIGpzY192
YWx1ZV9mdW5jdGlvbl9jYWxsdgoranNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIKK2pzY192YWx1
ZV9pc19hcnJheV9idWZmZXIKK2pzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2RhdGEKK2pzY192
YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2xlbmd0aAoganNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yCiBq
c2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbAoganNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGx2CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjUzODg2
YTNmMTgyMTI2MTRkMzU3NjEwNTI3ZGRjN2NhNmVmNDNkNS4uODJkMTM0OTY3NTliMzE1OTA0ODVl
Zjg0MDFiMDhlNWE4NWQwYTdkZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIyLTAzLTA4ICBBZHJpYW4gUGVyZXog
ZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dMaWJdIEV4cG9zZSBB
cnJheUJ1ZmZlciBpbiB0aGUgcHVibGljIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgc2V0IG9mIG5ldyBmdW5jdGlvbnMgdG8g
b3BlcmF0ZSBvbiBKU0NWYWx1ZSBvYmplY3RzIHdoaWNoIHJlZmVyIHRvIGFycmF5CisgICAgICAg
IGJ1ZmZlcnMgaW4gdGhlIEpTIHNpZGUgb2YgdGhlIHdvcmxkLiBUaGlzIGFsbG93cyBzaGFyaW5n
IGNodW5rcyBvZiBtZW1vcnkgYnVmZmVycworICAgICAgICBlZmZpY2llbnRseSB3aXRoIG5hdGl2
ZSBjb2RlLCB3aXRob3V0IG5lZWRpbmcgdG8gY29weSBub3IgZW5jb2RlIGRhdGEgYmFjayBhbmQg
Zm9ydGguCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2ds
aWIvVGVzdEpTQy5jcHA6IEFkZGVkIHRlc3QgZm9yIGFycmF5IGJ1ZmZlcnMuCisgICAgICAgICh0
ZXN0SlNDQXJyYXlCdWZmZXIpOgorICAgICAgICAobWFpbik6CisKIDIwMjItMDMtMDcgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBhbGxvdy1jdXN0b20tcHJvdG9j
b2xzLW5hdmlnYXRpb24gc2FuZGJveCBmbGFnLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCmluZGV4IDQ2YmFk
NjA2ZmQxYWQ5MTAzYTEyMzRlYjQ2YmI0YTM0MWQzOGM1ZWUuLjdkYmIzNmJkOGM4ZGYwZjk1OTUy
MTY1YTY4Y2RhNjUxM2U5YmNhNDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAKQEAgLTI4MjIsNiArMjgy
MiwxMzYgQEAgc3RhdGljIHZvaWQgdGVzdEpTQ0NsYXNzKCkKICAgICB9CiB9CiAKK3N0YXRpYyB2
b2lkIHRlc3RKU0NBcnJheUJ1ZmZlcigpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBj
aGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkp
OworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQo
KSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksCisgICAgICAgICAgICAiY29uc3QgYXJyID0g
bmV3IFVpbnQ4QXJyYXkoNSk7IgorICAgICAgICAgICAgImFyclswXSA9IDB4NzM7IGFyclsxXSA9
IDB4NzA7IGFyclsyXSA9IDB4NjE7IGFyclszXSA9IDB4NkQ7IGFycls0XSA9IDB4MDA7IgorICAg
ICAgICAgICAgImFyci5idWZmZXI7IiwKKyAgICAgICAgICAgIC0xKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9pc19hcnJheV9idWZmZXIocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgZ3NpemUgYnl0ZUNv
dW50ID0gMDsKKyAgICAgICAgYXV0byogZGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihqc2NfdmFs
dWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhKHJlc3VsdC5nZXQoKSwgJmJ5dGVDb3VudCkpOworICAg
ICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2xlbmd0aChy
ZXN1bHQuZ2V0KCkpLCA9PSwgNSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoYnl0ZUNvdW50
LCA9PSwgNSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChkYXRhWzRdLCA9PSwgJ1wwJyk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cihkYXRhLCA9PSwgInNwYW0iKTsKKworICAgICAgICBzbnBy
aW50ZihkYXRhLCBieXRlQ291bnQsICJZYXkhIik7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJhcnJbMF0gPT0gMHg1OSAm
JiBhcnJbMV0gPT0gMHg2MSAmJiBhcnJbMl0gPT0gMHg3OSAmJiBhcnJbM10gPT0gMHgyMSAmJiBh
cnJbNF0gPT0gMHgwMDsiLCAtMSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQu
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1
bHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7
CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAg
ICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKwor
ICAgICAgICBjaGFyIGRhdGFbMTAwXTsKKyAgICAgICAgc25wcmludGYoZGF0YSwgc2l6ZW9mKGRh
dGEpLCAiSGVsbG8sIEpTISIpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKGNvbnRleHQuZ2V0KCksIGRhdGEs
IDEwMCwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYXJyYXlfYnVmZmVyKHZh
bHVlLmdldCgpKSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChqc2NfdmFsdWVfYXJyYXlf
YnVmZmVyX2dldF9sZW5ndGgodmFsdWUuZ2V0KCkpLCA9PSwgMTAwKTsKKworICAgICAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImRhdGEiLCB2YWx1ZS5nZXQoKSk7CisK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIobmV3IFVpbnQ4QXJyYXkoZGF0YSkpWzJdIiwgLTEp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgJ2wnKTsK
KworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgIihuZXcgVWludDhBcnJheShkYXRhKSlbMF0gPSA2NTsiLCAtMSkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCAnQScpOworICAgICAgICBn
X2Fzc2VydF9jbXBpbnQoZGF0YVswXSwgPT0sICdBJyk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfZGF0
YSh2YWx1ZS5nZXQoKSwgbnVsbHB0cikpWzBdLCA9PSwgJ0EnKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBjaGFyIGRhdGFbXSA9ICJzcGFtIGFu
ZCBlZ2dzIjsKKyAgICAgICAgYm9vbCBkZXN0cm95Tm90aWZ5Q2FsbGVkID0gZmFsc2U7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19h
cnJheV9idWZmZXIoY29udGV4dC5nZXQoKSwgZGF0YSwgc3RybGVuKGRhdGEpLCBbXShncG9pbnRl
ciBkYXRhKSB7CisgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Ym9vbCo+KGRhdGEpID0gdHJ1ZTsK
KyAgICAgICAgfSwgJmRlc3Ryb3lOb3RpZnlDYWxsZWQpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aCh2YWx1ZS5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYXJy
YXlfYnVmZmVyKHZhbHVlLmdldCgpKSk7CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVl
KGNvbnRleHQuZ2V0KCksICJkYXRhIiwgdmFsdWUuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IG51
bGxwdHI7CisKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydF9mYWxzZShkZXN0cm95Tm90aWZ5Q2FsbGVkKTsKKworICAgICAg
ICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwg
ImRhdGEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIodmFsdWUuZ2V0KCkpKTsKKwor
ICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChjb250ZXh0
LmdldCgpKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBq
c2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImRhdGEiLCB2YWx1ZS5nZXQoKSk7
CisKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGRlc3Ryb3lOb3RpZnlDYWxsZWQpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRp
b25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIHN0cnVjdCBIZWFwRGF0YSB7Cisg
ICAgICAgICAgICBjaGFyIGRhdGEgeyAweDQyIH07CisgICAgICAgICAgICBHUmVmUHRyPEdGaWxl
PiBvYmplY3QgeyBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aCgiLyIpKSB9OworICAgICAg
ICB9OworCisgICAgICAgIGF1dG8qIGRhdGEgPSBuZXcgSGVhcERhdGE7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2goZGF0YS0+b2JqZWN0LmdldCgpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
dmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIoY29udGV4dC5nZXQo
KSwgZGF0YSwgc2l6ZW9mKEhlYXBEYXRhKSwgW10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAg
ICAgZGVsZXRlIHN0YXRpY19jYXN0PEhlYXBEYXRhKj4oZGF0YSk7CisgICAgICAgIH0sIGRhdGEp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGpzY19jb250
ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZGF0YSIsIHZhbHVlLmdldCgpKTsKKworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwgIihuZXcgVWludDhBcnJheShkYXRhKSlbMF07IiwgLTEpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQo
KSksID09LCAweDQyKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3
X3VuZGVmaW5lZChjb250ZXh0LmdldCgpKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUu
Z2V0KCkpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAi
ZGF0YSIsIHZhbHVlLmdldCgpKTsKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNv
bnRleHQuZ2V0KCkpOworICAgIH0KK30KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIEZvbyBwYXJl
bnQ7CiAgICAgaW50IGJhcjsKQEAgLTQxODIsNiArNDMxMiw3IEBAIGludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvZnVuY3Rpb24iLCB0ZXN0
SlNDRnVuY3Rpb24pOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9vYmplY3QiLCB0ZXN0SlND
T2JqZWN0KTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvY2xhc3MiLCB0ZXN0SlNDQ2xhc3Mp
OworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9hcnJheS1idWZmZXIiLCB0ZXN0SlNDQXJyYXlC
dWZmZXIpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm90b3R5cGVzIiwgdGVzdEpTQ1By
b3RvdHlwZXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9leGNlcHRpb25zIiwgdGVzdEpT
Q0V4Y2VwdGlvbnMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm9taXNlcyIsIHRlc3RK
U0NQcm9taXNlcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454483</attachid>
            <date>2022-03-11 07:24:21 -0800</date>
            <delta_ts>2022-03-11 14:57:01 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-237088-20220311172419.patch</filename>
            <type>text/plain</type>
            <size>18625</size>
            <attacher name="Adrian Perez">aperez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
NGFlMjE5ZGNhYTYwMTE2MTMyN2Y1MmE3N2RjMTZlZWZmMzZjMmFlLi5mN2NlNDc5M2YxNWMzM2I3
NDk4ZTMxYjIzOTc0NmMzYjAxMDBkZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMy0xMSAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBFeHBvc2UgQXJyYXlCdWZmZXIgaW4gdGhlIHB1
YmxpYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNzA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisg
ICAgICAgIFRoaXMgYWRkcyBhIHNldCBvZiBuZXcgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gSlND
VmFsdWUgb2JqZWN0cyB3aGljaCByZWZlciB0byBhcnJheQorICAgICAgICBidWZmZXJzIGluIHRo
ZSBKUyBzaWRlIG9mIHRoZSB3b3JsZC4gVGhpcyBhbGxvd3Mgc2hhcmluZyBjaHVua3Mgb2YgbWVt
b3J5IGJ1ZmZlcnMKKyAgICAgICAgZWZmaWNpZW50bHkgd2l0aCBuYXRpdmUgY29kZSwgd2l0aG91
dCBuZWVkaW5nIHRvIGNvcHkgbm9yIGVuY29kZSBkYXRhIGJhY2sgYW5kIGZvcnRoLgorCisgICAg
ICAgICogQVBJL2dsaWIvSlNDVmFsdWUuY3BwOgorICAgICAgICAoanNjQXJyYXlCdWZmZXJEZWFs
bG9jYXRlKToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyKToKKyAgICAgICAg
KGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIpOgorICAgICAgICAoanNjX3ZhbHVlX2FycmF5X2J1
ZmZlcl9nZXRfZGF0YSk6CisgICAgICAgIChqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9sZW5n
dGgpOgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmg6CisgICAgICAgICogQVBJL2dsaWIv
ZG9jcy9qc2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0OgorCiAyMDIyLTAzLTEwICBFbGxpb3R0IFdp
bGxpYW1zICA8ZW13QGFwcGxlLmNvbT4KIAogICAgICAgICBbWENCdWlsZF0gRW1pdCBhIGRpc2Nv
dmVyZWQgZGVwZW5kZW5jeSBmaWxlIGZyb20gb2ZmbGluZWFzbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKaW5kZXggYWY5Njg3NDUzNTY2MmQ1OTI5M2VjYzFj
YWEwMThjNGNhNDliM2I4Zi4uMzIwNDdhMDhkMTRmMDkyMGUwMGU3MjNmOTJhN2QxMjY5Y2YxNzhm
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwCkBAIC0y
MiwxMiArMjIsMTQgQEAKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJBUElVdGls
cy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NDYWxsYmFja0Z1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCiAjaW5jbHVkZSAiSlNDQ29u
dGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDVmFs
dWVQcml2YXRlLmgiCiAjaW5jbHVkZSAiSlNSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJKU1R5cGVk
QXJyYXkuaCIKICNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAjaW5jbHVkZSAiT3BhcXVlSlNT
dHJpbmcuaCIKICNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgpAQCAtMTQ2MSw2
ICsxNDYzLDE4MyBAQCBKU0NWYWx1ZSoganNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGx2KEpTQ1Zh
bHVlKiB2YWx1ZSwgdW5zaWduZWQgcGFyYW1ldGVyc0NvdW50LAogICAgIHJldHVybiBqc2NDb250
ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCByZXN1bHQpLmxlYWtSZWYo
KTsKIH0KIAorc3RydWN0IEFycmF5QnVmZmVyRGVhbGxvY2F0b3JDb250ZXh0IHsKKyAgICBncG9p
bnRlciB1c2VyRGF0YTsKKyAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5OworfTsKK1dF
QktJVF9ERUZJTkVfQVNZTkNfREFUQV9TVFJVQ1QoQXJyYXlCdWZmZXJEZWFsbG9jYXRvckNvbnRl
eHQpCisKKy8qKgorICoganNjX3ZhbHVlX25ld19hcnJheV9idWZmZXI6CisgKiBAY29udGV4dDog
QSAjSlNDQ29udGV4dAorICogQGRhdGE6IFBvaW50ZXIgdG8gYSByZWdpb24gb2YgbWVtb3J5Lgor
ICogQHNpemU6IFNpemUgaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeSByZWdpb24uCisgKiBAZGVzdHJv
eV9ub3RpZnk6IChudWxsYWJsZSk6IGRlc3Ryb3kgbm90aWZpZXIgZm9yIEB1c2VyX2RhdGEuCisg
KiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YS4KKyAqCisgKiBDcmVhdGVzIGEgbmV3
ICVBcnJheUJ1ZmZlciBmcm9tIGV4aXN0aW5nIEBkYXRhIGluIG1lbW9yeS4KKyAqCisgKiBUaGUg
QGRhdGEgaXMgbm90IGNvcGllZDogd2hpbGUgdGhpcyBhbGxvd3Mgc2hhcmluZyBkYXRhIHdpdGgg
SmF2YVNjcmlwdAorICogZWZmaWNpZW50bHksIHRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0
aGUgbWVtb3J5IHJlZ2lvbiByZW1haW5zIHZhbGlkCisgKiB1bnRpbCB0aGUgbmV3bHkgY3JlYXRl
ZCBvYmplY3QgaXMgcmVsZWFzZWQgYnkgSlNDLgorICoKKyAqIE9wdGlvbmFsbHksIGEgQGRlc3Ry
b3lfbm90aWZ5IGNhbGxiYWNrIGNhbiBiZSBwcm92aWRlZCwgd2hpY2ggd2lsbCBiZQorICogaW52
b2tlZCB3aXRoIEB1c2VyX2RhdGEgYXMgcGFyYW1ldGVyIHdoZW4gdGhlICVBcnJheUJ1ZmZlciBv
YmplY3QgaXMKKyAqIHJlbGVhc2VkLiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGZy
ZWVpbmcgcmVzb3VyY2VzIHJlbGF0ZWQgdG8KKyAqIHRoZSBtZW1vcnkgcmVnaW9uIHdoaWNoIGNv
bnRhaW5zIHRoZSBkYXRhOgorICoKKyAqIHxbITwtLSBsYW5ndWFnZT0iQyIgLS0+CisgKiBHTWFw
cGVkRmlsZSAqZiA9IGdfbWFwcGVkX2ZpbGVfbmV3IChmaWxlX3BhdGgsIFRSVUUsIE5VTEwpOwor
ICogSlNDVmFsdWUgKnZhbHVlID0ganNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIgKGNvbnRleHQs
CisgKiAgICAgZ19tYXBwZWRfZmlsZV9nZXRfY29udGVudHMgKGYpLCBnX21hcHBlZF9maWxlX2dl
dF9sZW5ndGggKGYpLAorICogICAgIChHRGVzdHJveU5vdGlmeSkgZ19tYXBwZWRfZmlsZV91bnJl
ZiwgZik7CisgKiBdfAorICoKKyAqIE5vdGUgdGhhdCB0aGUgQHVzZXJfZGF0YSBjYW4gYmUgdGhl
IHNhbWUgdmFsdWUgYXMgQGRhdGE6CisgKgorICogfFshPC0tIGxhbmd1YWdlPSJDIiAtLT4KKyAq
IHZvaWQgKmJ5dGVzID0gZ19tYWxsb2MwICgxMDApOworICogSlNDVmFsdWUgKnZhbHVlID0ganNj
X3ZhbHVlX25ld19hcnJheV9idWZmZXIgKGNvbnRleHQsIGJ5dGVzLCAxMDAsIGdfZnJlZSwgYnl0
ZXMpOworICogXXwKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTog
QSAjSlNDVmFsdWUsIG9yICVOVUxMIGluIGNhc2Ugb2YgZXhjZXB0aW9uLgorICoKKyAqIFNpbmNl
OiAyLjM4CisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2FycmF5X2J1ZmZlcihKU0NDb250
ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBHRGVzdHJveU5vdGlmeSBk
ZXN0cm95Tm90aWZ5LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICBBcnJheUJ1ZmZl
ckRlYWxsb2NhdG9yQ29udGV4dCogZGVhbGxvY2F0b3JDb250ZXh0ID0gbnVsbHB0cjsKKyAgICBp
ZiAoZGVzdHJveU5vdGlmeSkgeworICAgICAgICBkZWFsbG9jYXRvckNvbnRleHQgPSBjcmVhdGVB
cnJheUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dCgpOworICAgICAgICBkZWFsbG9jYXRvckNvbnRl
eHQtPmRlc3Ryb3lOb3RpZnkgPSBkZXN0cm95Tm90aWZ5OworICAgICAgICBkZWFsbG9jYXRvckNv
bnRleHQtPnVzZXJEYXRhID0gdXNlckRhdGE7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0Nv
bnRleHQoY29udGV4dCk7CisgICAgYXV0byoganNBcnJheUJ1ZmZlciA9IEpTT2JqZWN0TWFrZUFy
cmF5QnVmZmVyV2l0aEJ5dGVzTm9Db3B5KGpzQ29udGV4dCwgZGF0YSwgbGVuZ3RoLCBbXSh2b2lk
Kiwgdm9pZCogZGVhbGxvY2F0b3JDb250ZXh0KSB7CisgICAgICAgIGlmIChkZWFsbG9jYXRvckNv
bnRleHQpIHsKKyAgICAgICAgICAgIGF1dG8qIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxBcnJheUJ1
ZmZlckRlYWxsb2NhdG9yQ29udGV4dCo+KGRlYWxsb2NhdG9yQ29udGV4dCk7CisgICAgICAgICAg
ICBjb250ZXh0LT5kZXN0cm95Tm90aWZ5KGNvbnRleHQtPnVzZXJEYXRhKTsKKyAgICAgICAgICAg
IGRlc3Ryb3lBcnJheUJ1ZmZlckRlYWxsb2NhdG9yQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAg
fQorICAgIH0sIGRlYWxsb2NhdG9yQ29udGV4dCwgJmV4Y2VwdGlvbik7CisKKyAgICBpZiAoanNj
Q29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZh
bHVlKGNvbnRleHQsIGpzQXJyYXlCdWZmZXIpLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2Nf
dmFsdWVfaXNfYXJyYXlfYnVmZmVyOgorICogQHZhbHVlOiBBICNKU0NWYWx1ZS4KKyAqCisgKiBD
aGVjayB3aGV0aGVyIHRoZSBAdmFsdWUgaXMgYW4gJUFycmF5QnVmZmVyLgorICoKKyAqIFJldHVy
bnM6IHdoZXRoZXIgdGhlIHZhbHVlIGlzIGFuICVBcnJheUJ1ZmZlcgorICoKKyAqIFNpbmNlOiAy
LjM4CisgKi8KK2dib29sZWFuIGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIoSlNDVmFsdWUqIHZh
bHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZB
TFNFKTsKKworICAgIHVzaW5nIG5hbWVzcGFjZSBKU0M7CisKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdG9KUyhqc2NDb250ZXh0R2V0SlNDb250ZXh0KHZhbHVlLT5wcml2LT5j
b250ZXh0LmdldCgpKSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhnbG9i
YWxPYmplY3QsIHZhbHVlLT5wcml2LT5qc1ZhbHVlKTsKKyAgICBpZiAoIWpzVmFsdWUuaXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuICEhanNEeW5hbWljQ2Fz
dDxKU0FycmF5QnVmZmVyKj4odm0sIGpzVmFsdWUuZ2V0T2JqZWN0KCkpOworfQorCisvKioKKyAq
IGpzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2RhdGE6CisgKiBAdmFsdWU6IEEgI0pTQ1ZhbHVl
CisgKiBAc2l6ZTogKG51bGxhYmxlKTogbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIHNpemUg
b2YgdGhlIG1lbW9yeSByZWdpb24uCisgKgorICogR2V0cyBhIHBvaW50ZXIgdG8gbWVtb3J5IHRo
YXQgY29udGFpbnMgdGhlIGFycmF5IGJ1ZmZlciBkYXRhLgorICoKKyAqIE9idGFpbnMgYSBwb2lu
dGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHRoYXQgaG9sZHMgdGhlIGNvbnRlbnRzIG9mIHRoZQor
ICogJUFycmF5QnVmZmVyOyBtb2RpZmljYXRpb25zIGRvbmUgdG8gdGhlIGRhdGEgd2lsbCBiZSB2
aXNpYmxlIHRvIEphdmFTY3JpcHQKKyAqIGNvZGUuIElmIEBzaXplIGlzIG5vdCAlTlVMTCwgdGhl
IHNpemUgaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeSByZWdpb24KKyAqIHdpbGwgYWxzbyBiZSBzdG9y
ZWQgaW4gdGhlIHBvaW50ZWQgbG9jYXRpb24uCisgKgorICogTm90ZSB0aGF0IHRoZSBwb2ludGVy
IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgbm90IGd1YXJhbnRlZWQgdG8gcmVtYWluCisg
KiB0aGUgc2FtZSBhZnRlciBjYWxscyB0byBvdGhlciBKU0MgQVBJIGZ1bmN0aW9ucy4gSWYgeW91
IHBsYW4gdG8gYWNjZXNzIHRoZQorICogZGF0YSBvZiB0aGUgJUFycmF5QnVmZmVyIGxhdGVyLCB5
b3UgY2FuIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIEB2YWx1ZSBhbmQKKyAqIG9idGFpbiB0aGUg
ZGF0YSBwb2ludGVyIGF0IGEgbGF0ZXIgcG9pbnQuIEtlZXAgaW4gbWluZCB0aGF0IGlmIEphdmFT
Y3JpcHQKKyAqIGNvZGUgaGFzIGEgY2hhbmNlIHRvIHJ1biwgZm9yIGV4YW1wbGUgZHVlIHRvIG1h
aW4gbG9vcCBldmVudHMgdGhhdCByZXN1bHQKKyAqIGluIEpTQyBiZWluZyBjYWxsZWQsIHRoZSBj
b250ZW50cyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiBtaWdodCBiZSBtb2RpZmllZCBpbgorICogdGhl
IG1lYW50aW1lLiBDb25zaWRlciB0YWtpbmcgYSBjb3B5IG9mIHRoZSBkYXRhIGFuZCB1c2luZyB0
aGUgY29weSBpbnN0ZWFkCisgKiBpbiBhc3luY2hyb25vdXMgY29kZS4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSk6IHBvaW50ZXIgdG8gbWVtb3J5LgorICoKKyAqIFNpbmNlOiAyLjM4
CisgKi8KK2dwb2ludGVyIGpzY192YWx1ZV9hcnJheV9idWZmZXJfZ2V0X2RhdGEoSlNDVmFsdWUq
IHZhbHVlLCBnc2l6ZSogc2l6ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNf
VkFMVUUodmFsdWUpLCBudWxscHRyKTsKKworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRl
eHRHZXRKU0NvbnRleHQodmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgSlNWYWx1
ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpzT2JqZWN0ID0gSlNWYWx1ZVRv
T2JqZWN0KGpzQ29udGV4dCwgdmFsdWUtPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAg
IGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQodmFsdWUtPnByaXYtPmNvbnRl
eHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9p
ZCogZGF0YSA9IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlc1B0cihqc0NvbnRleHQsIGpzT2Jq
ZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmIChzaXplKSB7CisgICAgICAgICpzaXplID0gSlNPYmplY3RH
ZXRBcnJheUJ1ZmZlckJ5dGVMZW5ndGgoanNDb250ZXh0LCBqc09iamVjdCwgJmV4Y2VwdGlvbik7
CisgICAgICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQodmFsdWUtPnBy
aXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfYXJy
YXlfYnVmZmVyX2dldF9zaXplOgorICogQHZhbHVlOiBBICNKU0NWYWx1ZQorICoKKyAqIEdldHMg
dGhlIHNpemUgb2YgdGhlIGFycmF5IGJ1ZmZlci4KKyAqCisgKiBPYnRhaW5zIHRoZSBzaXplIGlu
IGJ5dGVzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRoYXQgaG9sZHMgdGhlIGNvbnRlbnRzIG9mCisg
KiBhbiAlQXJyYXlCdWZmZXIuCisgKgorICogUmV0dXJuczogc2l6ZSwgaW4gYnl0ZXMuCisgKgor
ICogU2luY2U6IDIuMzgKKyAqLworZ3NpemUganNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfc2l6
ZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZB
TFVFKHZhbHVlKSwgMCk7CisKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlND
b250ZXh0KHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gbnVsbHB0cjsKKyAgICBhdXRvKiBqc09iamVjdCA9IEpTVmFsdWVUb09iamVjdChq
c0NvbnRleHQsIHZhbHVlLT5wcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNj
Q29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHZhbHVlLT5wcml2LT5jb250ZXh0LmdldCgp
LCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNpemVfdCBzaXplID0gSlNP
YmplY3RHZXRBcnJheUJ1ZmZlckJ5dGVMZW5ndGgoanNDb250ZXh0LCBqc09iamVjdCwgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZCh2YWx1ZS0+
cHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gc2l6ZTsKK30KKwogLyoqCiAgKiBqc2NfdmFsdWVfbmV3X2Zyb21fanNvbjoKICAq
IEBjb250ZXh0OiBhICNKU0NDb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NWYWx1ZS5oCmluZGV4IDVmNjU0OTcyNWIwZWVmNjRmZmVmMjA2MWQ0NjNmY2E4NzM2YmViYWQu
LjgxZTYwZGVlMzU0NDYyZTdiZjEzY2I2ZTRiOGIyOWQxYTg4NzA5NzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCkBAIC0yNDYsNiArMjQ2LDIyIEBAIEpTQ19B
UEkgSlNDVmFsdWUgKgoganNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGx2ICAgICAgICAgICAgICAgICAg
KEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgbl9wYXJhbWV0ZXJzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ1ZhbHVlICAgICAgICAg
ICAgKipwYXJhbWV0ZXJzKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOworSlNDX0FQSSBKU0NW
YWx1ZSAqCitqc2NfdmFsdWVfbmV3X2FycmF5X2J1ZmZlciAgICAgICAgICAgICAgICAoSlNDQ29u
dGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgICAgICAgICAgICAgICAgIHNpemUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkg
ICAgICAgIGRlc3Ryb3lfbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitKU0NfQVBJIGdi
b29sZWFuCitqc2NfdmFsdWVfaXNfYXJyYXlfYnVmZmVyICAgICAgICAgICAgICAgICAoSlNDVmFs
dWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBncG9pbnRlcgoranNjX3ZhbHVlX2Fy
cmF5X2J1ZmZlcl9nZXRfZGF0YSAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAgICAg
ICAgICAgICAgICAqc2l6ZSk7CisKK0pTQ19BUEkgZ3NpemUKK2pzY192YWx1ZV9hcnJheV9idWZm
ZXJfZ2V0X3NpemUgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOwogCiBK
U0NfQVBJIGdib29sZWFuCiBqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IgICAgICAgICAgICAgICAg
ICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC1zZWN0aW9ucy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0
CmluZGV4IDM2YTBjOGQ3Mzc0MWRmMDJlNDA1MGQxYzZlNmQ2NDZmYTAzZGViMDEuLmFkMWVhMTI3
YTVmZjE5NDhlODJhZGQyYzk3YWJjODBmMTNmNTU2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC1zZWN0aW9ucy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWdsaWItNC4wLXNlY3Rpb25z
LnR4dApAQCAtMTEwLDYgKzExMCwxMCBAQCBqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uX3ZhcmlhZGlj
CiBqc2NfdmFsdWVfaXNfZnVuY3Rpb24KIGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsCiBqc2NfdmFs
dWVfZnVuY3Rpb25fY2FsbHYKK2pzY192YWx1ZV9uZXdfYXJyYXlfYnVmZmVyCitqc2NfdmFsdWVf
aXNfYXJyYXlfYnVmZmVyCitqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhCitqc2NfdmFs
dWVfYXJyYXlfYnVmZmVyX2dldF9zaXplCiBqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IKIGpzY192
YWx1ZV9jb25zdHJ1Y3Rvcl9jYWxsCiBqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbHYKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMDA3ZmNiYWIz
NDFhYzUxMzhlMDhjNmY3MDE4NTgwOTZlNDg1YzlhLi43OWExZGNkZTYyY2NhMTY3OGVmZmM4ZTgy
NjFiZDIxMWExNzI3MmMyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDMtMTEgIEFkcmlhbiBQZXJleiBkZSBD
YXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0xpYl0gRXhwb3NlIEFycmF5
QnVmZmVyIGluIHRoZSBwdWJsaWMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzcwODgKKworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2Fy
Y2lhIENhbXBvcy4KKworICAgICAgICBUaGlzIGFkZHMgYSBzZXQgb2YgbmV3IGZ1bmN0aW9ucyB0
byBvcGVyYXRlIG9uIEpTQ1ZhbHVlIG9iamVjdHMgd2hpY2ggcmVmZXIgdG8gYXJyYXkKKyAgICAg
ICAgYnVmZmVycyBpbiB0aGUgSlMgc2lkZSBvZiB0aGUgd29ybGQuIFRoaXMgYWxsb3dzIHNoYXJp
bmcgY2h1bmtzIG9mIG1lbW9yeSBidWZmZXJzCisgICAgICAgIGVmZmljaWVudGx5IHdpdGggbmF0
aXZlIGNvZGUsIHdpdGhvdXQgbmVlZGluZyB0byBjb3B5IG5vciBlbmNvZGUgZGF0YSBiYWNrIGFu
ZCBmb3J0aC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUv
Z2xpYi9UZXN0SlNDLmNwcDogQWRkZWQgdGVzdCBmb3IgYXJyYXkgYnVmZmVycy4KKyAgICAgICAg
KHRlc3RKU0NBcnJheUJ1ZmZlcik6CisgICAgICAgIChtYWluKToKKwogMjAyMi0wMy0xMCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10g
QWRkIGEgdW5pdCB0ZXN0cyB0byBjaGVjayB0aGUgcmVtb3RlIGluc3BlY3RvciBIVFRQIHNlcnZl
cgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9n
bGliL1Rlc3RKU0MuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29y
ZS9nbGliL1Rlc3RKU0MuY3BwCmluZGV4IDQ2YmFkNjA2ZmQxYWQ5MTAzYTEyMzRlYjQ2YmI0YTM0
MWQzOGM1ZWUuLjhlMTkyNWE1MzJlMTYyYmQyOWM5N2UxNGNlMGY1YTk4MzQzOTMzZDYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0
SlNDLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2ds
aWIvVGVzdEpTQy5jcHAKQEAgLTI4MjIsNiArMjgyMiwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdEpT
Q0NsYXNzKCkKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RKU0NBcnJheUJ1ZmZlcigpCit7
CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpT
Q0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVy
IGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksCisgICAgICAgICAgICAiY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoNSk7IgorICAgICAg
ICAgICAgImFyclswXSA9IDB4NzM7IGFyclsxXSA9IDB4NzA7IGFyclsyXSA9IDB4NjE7IGFyclsz
XSA9IDB4NkQ7IGFycls0XSA9IDB4MDA7IgorICAgICAgICAgICAgImFyci5idWZmZXI7IiwKKyAg
ICAgICAgICAgIC0xKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIocmVzdWx0Lmdl
dCgpKSk7CisKKyAgICAgICAgZ3NpemUgYnl0ZUNvdW50ID0gMDsKKyAgICAgICAgYXV0byogZGF0
YSA9IHN0YXRpY19jYXN0PGNoYXIqPihqc2NfdmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhKHJl
c3VsdC5nZXQoKSwgJmJ5dGVDb3VudCkpOworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192
YWx1ZV9hcnJheV9idWZmZXJfZ2V0X3NpemUocmVzdWx0LmdldCgpKSwgPT0sIDUpOworICAgICAg
ICBnX2Fzc2VydF9jbXB1aW50KGJ5dGVDb3VudCwgPT0sIDUpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoZGF0YVs0XSwgPT0sICdcMCcpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZGF0YSwg
PT0sICJzcGFtIik7CisKKyAgICAgICAgc25wcmludGYoZGF0YSwgYnl0ZUNvdW50LCAiWWF5ISIp
OworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiYXJyWzBdID09IDB4NTkgJiYgYXJyWzFdID09IDB4NjEgJiYgYXJyWzJdID09
IDB4NzkgJiYgYXJyWzNdID09IDB4MjEgJiYgYXJyWzRdID09IDB4MDA7IiwgLTEpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgfQorCisgICAgewor
ICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+
IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlv
bkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgY2hhciBkYXRhWzEwMF07CisgICAg
ICAgIHNucHJpbnRmKGRhdGEsIHNpemVvZihkYXRhKSwgIkhlbGxvLCBKUyEiKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5
X2J1ZmZlcihjb250ZXh0LmdldCgpLCBkYXRhLCAxMDAsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX2FycmF5X2J1ZmZlcih2YWx1ZS5nZXQoKSkpOworCisgICAgICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoanNjX3ZhbHVlX2FycmF5X2J1ZmZlcl9nZXRfc2l6ZSh2YWx1ZS5nZXQoKSks
ID09LCAxMDApOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgp
LCAiZGF0YSIsIHZhbHVlLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIihuZXcg
VWludDhBcnJheShkYXRhKSlbMl0iLCAtMSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3Vs
dC5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJl
c3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMy
KHJlc3VsdC5nZXQoKSksID09LCAnbCcpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiKG5ldyBVaW50OEFycmF5KGRhdGEp
KVswXSA9IDY1OyIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0Lmdl
dCgpKSwgPT0sICdBJyk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChkYXRhWzBdLCA9PSwgJ0En
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihqc2Nf
dmFsdWVfYXJyYXlfYnVmZmVyX2dldF9kYXRhKHZhbHVlLmdldCgpLCBudWxscHRyKSlbMF0sID09
LCAnQScpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAg
ICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
RXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAg
ICAgIGNoYXIgZGF0YVtdID0gInNwYW0gYW5kIGVnZ3MiOworICAgICAgICBib29sIGRlc3Ryb3lO
b3RpZnlDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5X2J1ZmZlcihjb250ZXh0LmdldCgpLCBkYXRh
LCBzdHJsZW4oZGF0YSksIFtdKGdwb2ludGVyIGRhdGEpIHsKKyAgICAgICAgICAgICpzdGF0aWNf
Y2FzdDxib29sKj4oZGF0YSkgPSB0cnVlOworICAgICAgICB9LCAmZGVzdHJveU5vdGlmeUNhbGxl
ZCkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9pc19hcnJheV9idWZmZXIodmFsdWUuZ2V0KCkpKTsKKworICAg
ICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImRhdGEiLCB2YWx1ZS5n
ZXQoKSk7CisgICAgICAgIHZhbHVlID0gbnVsbHB0cjsKKworICAgICAgICBqc2NDb250ZXh0R2Fy
YmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGRlc3Ry
b3lOb3RpZnlDYWxsZWQpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZGF0YSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2FycmF5
X2J1ZmZlcih2YWx1ZS5nZXQoKSkpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9uZXdfdW5kZWZpbmVkKGNvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0Lmdl
dCgpLCAiZGF0YSIsIHZhbHVlLmdldCgpKTsKKworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNv
bGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoZGVzdHJveU5vdGlm
eUNhbGxlZCk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOwor
ICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAg
ICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAg
ICAgICAgc3RydWN0IEhlYXBEYXRhIHsKKyAgICAgICAgICAgIGNoYXIgZGF0YSB7IDB4NDIgfTsK
KyAgICAgICAgICAgIEdSZWZQdHI8R0ZpbGU+IG9iamVjdCB7IGFkb3B0R1JlZihnX2ZpbGVfbmV3
X2Zvcl9wYXRoKCIvIikpIH07CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byogZGF0YSA9IG5l
dyBIZWFwRGF0YTsKKyAgICAgICAgY2hlY2tlci53YXRjaChkYXRhLT5vYmplY3QuZ2V0KCkpOwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3
X2FycmF5X2J1ZmZlcihjb250ZXh0LmdldCgpLCBkYXRhLCBzaXplb2YoSGVhcERhdGEpLCBbXShn
cG9pbnRlciBkYXRhKSB7CisgICAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8SGVhcERhdGEq
PihkYXRhKTsKKyAgICAgICAgfSwgZGF0YSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVl
LmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJk
YXRhIiwgdmFsdWUuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiKG5ldyBVaW50
OEFycmF5KGRhdGEpKVswXTsiLCAtMSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2Nf
dmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDB4NDIpOworCisgICAgICAgIHZhbHVl
ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKGNvbnRleHQuZ2V0KCkpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisKKyAgICAgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJkYXRhIiwgdmFsdWUuZ2V0KCkpOworICAgICAgICBq
c2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgfQorCisgICAgewor
ICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+
IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlv
bkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFs
dWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIihuZXcg
VWludDhBcnJheSgwKSkuYnVmZmVyOyIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFs
dWUuZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2FycmF5X2J1
ZmZlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9h
cnJheV9idWZmZXJfZ2V0X3NpemUodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisKKyAgICAgICAgdmFs
dWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheV9idWZmZXIoY29udGV4dC5nZXQoKSwg
bnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZh
bHVlLmdldCgpKTsKKworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19hcnJheV9i
dWZmZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChqc2NfdmFsdWVf
YXJyYXlfYnVmZmVyX2dldF9zaXplKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIH0KK30KKwog
dHlwZWRlZiBzdHJ1Y3QgewogICAgIEZvbyBwYXJlbnQ7CiAgICAgaW50IGJhcjsKQEAgLTQxODIs
NiArNDMzMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi9qc2MvZnVuY3Rpb24iLCB0ZXN0SlNDRnVuY3Rpb24pOwogICAgIGdfdGVzdF9h
ZGRfZnVuYygiL2pzYy9vYmplY3QiLCB0ZXN0SlNDT2JqZWN0KTsKICAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi9qc2MvY2xhc3MiLCB0ZXN0SlNDQ2xhc3MpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pz
Yy9hcnJheS1idWZmZXIiLCB0ZXN0SlNDQXJyYXlCdWZmZXIpOwogICAgIGdfdGVzdF9hZGRfZnVu
YygiL2pzYy9wcm90b3R5cGVzIiwgdGVzdEpTQ1Byb3RvdHlwZXMpOwogICAgIGdfdGVzdF9hZGRf
ZnVuYygiL2pzYy9leGNlcHRpb25zIiwgdGVzdEpTQ0V4Y2VwdGlvbnMpOwogICAgIGdfdGVzdF9h
ZGRfZnVuYygiL2pzYy9wcm9taXNlcyIsIHRlc3RKU0NQcm9taXNlcyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>