<?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>224970</bug_id>
          
          <creation_ts>2021-04-22 23:45:59 -0700</creation_ts>
          <short_desc>Add a Condition type that supports thread safety analysis</short_desc>
          <delta_ts>2021-04-30 05:55:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225228</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>221614</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1753466</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-22 23:45:59 -0700</bug_when>
    <thetext>Add a Condition type that supports thread safety analysis
Compile should fail if that condition is waited without holding the corresponding lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753468</commentid>
    <comment_count>1</comment_count>
      <attachid>426890</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-22 23:49:50 -0700</bug_when>
    <thetext>Created attachment 426890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754064</commentid>
    <comment_count>2</comment_count>
      <attachid>426890</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-25 13:53:58 -0700</bug_when>
    <thetext>Comment on attachment 426890
Patch

Even better if we found one place to us this in non-test code and included that in this initial patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754065</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-25 13:54:08 -0700</bug_when>
    <thetext>use</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754546</commentid>
    <comment_count>4</comment_count>
      <attachid>427134</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-27 04:06:46 -0700</bug_when>
    <thetext>Created attachment 427134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754547</commentid>
    <comment_count>5</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-27 04:10:59 -0700</bug_when>
    <thetext>&gt; MediaTime MediaTrackReader::greatestPresentationTime() const

Eric, Jer: 
This modifies MediaTrackReader as an example.
Can you review the fix in the greatestPresentationTime() (unsynchronized access to locked variable --&gt; takes the lock)


Chris:
This modifies Connection.h/.cpp as an example.
Could you check out that the changes are fine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754610</commentid>
    <comment_count>6</comment_count>
      <attachid>427134</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 08:00:45 -0700</bug_when>
    <thetext>Comment on attachment 427134
Patch

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

&gt; Source/WebKit/Platform/IPC/Connection.cpp:524
&gt; +        Locker locker { m_waitForMessageMutex };

The changes to IPC::Connection seem fine although it is kind of sad we have to change our patterns. I was really used to auto / holdLock().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754656</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 09:54:04 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; Comment on attachment 427134 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427134&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/Platform/IPC/Connection.cpp:524
&gt; &gt; +        Locker locker { m_waitForMessageMutex };
&gt; 
&gt; The changes to IPC::Connection seem fine although it is kind of sad we have
&gt; to change our patterns. I was really used to auto / holdLock().

I am also a big fan of tryHoldLock(), which in my opinion is much better than a second Locker parameter (whose name I can never remember).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754681</commentid>
    <comment_count>8</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-27 10:44:50 -0700</bug_when>
    <thetext>&gt; &gt; The changes to IPC::Connection seem fine although it is kind of sad we have
&gt; &gt; to change our patterns. I was really used to auto / holdLock().
&gt; 
&gt; I am also a big fan of tryHoldLock(), which in my opinion is much better
&gt; than a second Locker parameter (whose name I can never remember).

If these two style preferences are weighing more for the project than compiler checking for some thread safety issues I can certainly back the commits out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754683</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 10:47:36 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #8)
&gt; &gt; &gt; The changes to IPC::Connection seem fine although it is kind of sad we have
&gt; &gt; &gt; to change our patterns. I was really used to auto / holdLock().
&gt; &gt; 
&gt; &gt; I am also a big fan of tryHoldLock(), which in my opinion is much better
&gt; &gt; than a second Locker parameter (whose name I can never remember).
&gt; 
&gt; If these two style preferences are weighing more for the project than
&gt; compiler checking for some thread safety issues I can certainly back the
&gt; commits out.

I am not saying we should back things out. As I said, the changes look fine and I view this as a nit.

I am just saying that if there is a way to maintain our existing patterns while making code safer, I&apos;d like the changes a lot more. Is there a reason we cannot make holdLock() / tryHoldLock() work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754695</commentid>
    <comment_count>10</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-27 11:00:50 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; while making code safer, I&apos;d like the changes a lot more. Is there a reason
&gt; we cannot make holdLock() / tryHoldLock() work?

The function holdLock, possibly an old workaround for the lack of language features (ctad), is too expressive. It requires move construction, which to my understanding is too powerful to be analyzed the way current analyzer works. Aliasing and conditionals are needed for move construction but hard to analyze statically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754697</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 11:04:47 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #10)
&gt; (In reply to Chris Dumez from comment #9)
&gt; &gt; while making code safer, I&apos;d like the changes a lot more. Is there a reason
&gt; &gt; we cannot make holdLock() / tryHoldLock() work?
&gt; 
&gt; The function holdLock, possibly an old workaround for the lack of language
&gt; features (ctad), is too expressive. It requires move construction, which to
&gt; my understanding is too powerful to be analyzed the way current analyzer
&gt; works. Aliasing and conditionals are needed for move construction but hard
&gt; to analyze statically.

Ok. If we can&apos;t make it work then fine :)

I don&apos;t know if we support try-locking yet but I&apos;d prefer a TryLocker object instead of a second parameter to the Locker constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754925</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-27 23:26:22 -0700</bug_when>
    <thetext>Committed r276691 (237105@main): &lt;https://commits.webkit.org/237105@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427134.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754926</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-27 23:27:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/77250681&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754927</commentid>
    <comment_count>14</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-27 23:34:25 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #11)
&gt; I don&apos;t know if we support try-locking yet but I&apos;d prefer a TryLocker object
&gt; instead of a second parameter to the Locker constructor.

Currently try pattern would be:

  if (!lock.tryLock())
      return;
  Locker locker { AdoptLockTag {}, lock };

I can of course modify it to:

  if (!lock.tryLock())
      return;
  Locker locker { AdoptLockTag, lock };


Or I can of course change it to:
 
  if (!lock.tryLock())
      return;
  AdoptedLocker locker { lock }; 

.. but I think it&apos;s a bit redundant (opinion).

This one would be not very good (opinion) but I can of course change it to that too:

  TryLocker locker;
  if (!locker.tryLock(lock))
      return;

Personally I&apos;d think the best would be:

  if (!lock.tryLock())
      return;
   std::scoped_lock locker { std::adopt_lock_t {}, lock };

... on the grounds of mindshare, quality of documentation, simplicity, lack of need of personal stylistic opinions etc.

.. but second best in my opinion is what&apos;s there already (e.g. current specialisation Locker&lt;CheckedLock&gt; is a copy of the std::scoped_lock&lt;&gt;). But again, that&apos;s mostly just an opinion and in that way not very defendable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755021</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-28 07:55:58 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #14)
&gt; (In reply to Chris Dumez from comment #11)
&gt; &gt; I don&apos;t know if we support try-locking yet but I&apos;d prefer a TryLocker object
&gt; &gt; instead of a second parameter to the Locker constructor.
&gt; 
&gt; Currently try pattern would be:
&gt; 
&gt;   if (!lock.tryLock())
&gt;       return;
&gt;   Locker locker { AdoptLockTag {}, lock };
&gt; 
&gt; I can of course modify it to:
&gt; 
&gt;   if (!lock.tryLock())
&gt;       return;
&gt;   Locker locker { AdoptLockTag, lock };
&gt; 
&gt; 
&gt; Or I can of course change it to:
&gt;  
&gt;   if (!lock.tryLock())
&gt;       return;
&gt;   AdoptedLocker locker { lock }; 
&gt; 
&gt; .. but I think it&apos;s a bit redundant (opinion).
&gt; 
&gt; This one would be not very good (opinion) but I can of course change it to
&gt; that too:
&gt; 
&gt;   TryLocker locker;
&gt;   if (!locker.tryLock(lock))
&gt;       return;
&gt; 
&gt; Personally I&apos;d think the best would be:
&gt; 
&gt;   if (!lock.tryLock())
&gt;       return;
&gt;    std::scoped_lock locker { std::adopt_lock_t {}, lock };
&gt; 
&gt; ... on the grounds of mindshare, quality of documentation, simplicity, lack
&gt; of need of personal stylistic opinions etc.
&gt; 
&gt; .. but second best in my opinion is what&apos;s there already (e.g. current
&gt; specialisation Locker&lt;CheckedLock&gt; is a copy of the std::scoped_lock&lt;&gt;). But
&gt; again, that&apos;s mostly just an opinion and in that way not very defendable.

My preference would have been:
TryLocker locker(lock);
if (!locker.isLocked())
  return;

This is also what Blink uses.

I dislike any kind of adopted lock. I don&apos;t think we should be interacting with the lock directly or adopting lock as this is a recipe for mistakes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426890</attachid>
            <date>2021-04-22 23:49:50 -0700</date>
            <delta_ts>2021-04-27 04:06:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224970-20210423094948.patch</filename>
            <type>text/plain</type>
            <size>14552</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEyNzUxNDJlNGU1NzU0ZmQ4MDZkYjk5
ODVjZmViYzY0MTFmOTA0ZTUuLmRlMTk3NmRjNWI4NDExM2MzMDQ1MGE0YmY0OTkwMDA2OGUyNzMz
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDQtMjIgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBDb25kaXRpb24gdHlwZSB0aGF0IHN1
cHBvcnRzIHRocmVhZCBzYWZldHkgYW5hbHlzaXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBDaGVja2VkQ29uZGl0aW9uLCBhIGNvbmRpdGlvbiB2
YXJpYWJsZSB0byBiZSB1c2VkIHdpdGggQ2hlY2tlZExvY2suCisgICAgICAgIFVzZSB0aHJlYWQg
c2FmZXR5IGFuYWx5c2lzIGFubm90YXRpb25zIGZvciBDaGVja2VkQ29uZGl0aW9uLgorCisgICAg
ICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9DaGVja2VkQ29uZGl0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAqIHd0Zi9DaGVja2VkTG9jay5oOgorCiAyMDIxLTA0LTIxICBBZGl0eWEgS2VlcnRoaSAg
PGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGaXggaW50ZXJuYWwgYnVpbGRz
IGFmdGVyIHIyNzYzMjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDIzY2E1NTZlYzEyYjU3YzIxYWI1ZjNlMjBlMmU4Njg4MWJmOGEwMDEuLjNiMDMzN2YyNGUx
MTM0YzVmMmUxZTAxZjNjNDM0OTBkN2RjNzBlZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNDU2LDYgKzQ1Niw3IEBACiAJCTdBRkVDNkIwMUVCMjJCNTkw
MERBREUzNiAvKiBVVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVVSUQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjI3MzlEQzI2MjREQUFB
MDA0MEYxODIgLyogVGhyZWFkU2FmZXR5QW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFk
U2FmZXR5QW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IyNzM5REQy
NjI0REFDMzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrZWRM
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMjczOUYwMjYzMTc5QzMwMDQw
RjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrZWRDb25kaXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxMzc5NDEyMjIzMjZDNzAwRDdB
ODI0IC8qIEFVVEhPUlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gQVVUSE9SUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaWVl
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNzk0MzIyMjMyNkQ1MDBEN0E4
MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBwYXRoID0gUkVBRE1FLm1kOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTgxLDYgKzk4Miw3IEBACiAJCQkJNDEzRkU4
RjUxRjhEMkVBQjAwRjZEN0Q3IC8qIENhbGxiYWNrQWdncmVnYXRvci5oICovLAogCQkJCUE4QTQ3
MjZBMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLAogCQkJCUE4QTQ3
MjZCMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQm9vbGVhbi5oICovLAorCQkJCTdCMjczOUYw
MjYzMTc5QzMwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uLmggKi8sCiAJCQkJN0IyNzM5REQy
NjI0REFDMzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrLmggKi8sCiAJCQkJMEY2NkIyODAxREM5N0JB
QjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAgKi8sCiAJCQkJMEY2NkIyODExREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAzODExYTU5YjA4
MjZhMjQ0ZmQ4OGIxOWQwYjM0OTMyOTJmZmEzMDc3Li4wNjZkZmIwZWQ4YTNkNGQwNzlmYTg5Yjg4
ZDdmN2I3MWMwMDRlM2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMjgsNiArMjgsNyBAQCBz
ZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgQ2FsbGJhY2tBZ2dyZWdhdG9yLmgKICAgICBDaGVj
a2VkQXJpdGhtZXRpYy5oCiAgICAgQ2hlY2tlZEJvb2xlYW4uaAorICAgIENoZWNrZWRDb25kaXRp
b24uaAogICAgIENoZWNrZWRMb2NrLmgKICAgICBDbG9ja1R5cGUuaAogICAgIENvbW1hUHJpbnRl
ci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQ29uZGl0aW9uLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9DaGVja2VkQ29uZGl0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE0YjU2ODBjNjU3MGU2
MDU0NGVlMzljNTBmNTYxNDQ4MjFiNjE1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0NoZWNrZWRDb25kaXRpb24uaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0NoZWNrZWRMb2NrLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworLy8gQSBjb25kaXRpb24gdmFyaWFibGUgdHlwZSBmb3IgQ2hlY2tlZExvY2su
CitjbGFzcyBDaGVja2VkQ29uZGl0aW9uIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDaGVja2VkQ29uZGl0aW9uKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBjb25zdGV4cHIgQ2hlY2tlZENvbmRpdGlvbigpID0gZGVmYXVsdDsKKworICAgIGJv
b2wgd2FpdFVudGlsKENoZWNrZWRMb2NrJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUmIHRpbWVvdXQpIFdURl9SRVFVSVJFU19MT0NLKGxvY2spCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9jb25kaXRpb24ud2FpdFVudGlsKHVuY2hlY2tlZENhc3QobG9jayksIHRpbWVvdXQp
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgd2FpdFVu
dGlsKENoZWNrZWRMb2NrJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRp
bWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkgV1RGX1JFUVVJUkVTX0xPQ0sobG9jaykK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbmRpdGlvbi53YWl0VW50aWwodW5jaGVja2VkQ2Fz
dChsb2NrKSwgdGltZW91dCwgcHJlZGljYXRlKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICBib29sIHdhaXRGb3IoQ2hlY2tlZExvY2smIGxvY2ssIFNlY29uZHMg
cmVsYXRpdmVUaW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpIFdURl9SRVFVSVJFU19M
T0NLKGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9jb25kaXRpb24ud2FpdEZvcih1bmNo
ZWNrZWRDYXN0KGxvY2spLCByZWxhdGl2ZVRpbWVvdXQsIHByZWRpY2F0ZSk7CisgICAgfQorICAg
IGJvb2wgd2FpdEZvcihDaGVja2VkTG9jayYgbG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQp
IFdURl9SRVFVSVJFU19MT0NLKGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9jb25kaXRp
b24ud2FpdEZvcih1bmNoZWNrZWRDYXN0KGxvY2spLCByZWxhdGl2ZVRpbWVvdXQpOworICAgIH0K
KyAgICB2b2lkIHdhaXQoQ2hlY2tlZExvY2smIGxvY2spIFdURl9SRVFVSVJFU19MT0NLKGxvY2sp
CisgICAgeworICAgICAgICByZXR1cm4gbV9jb25kaXRpb24ud2FpdCh1bmNoZWNrZWRDYXN0KGxv
Y2spKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdh
aXQoQ2hlY2tlZExvY2smIGxvY2ssIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkgV1RGX1JFUVVJ
UkVTX0xPQ0sobG9jaykKKyAgICB7CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQodW5jaGVja2Vk
Q2FzdChsb2NrKSwgcHJlZGljYXRlKTsKKyAgICB9CisgICAgYm9vbCBub3RpZnlPbmUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fY29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIH0KKyAgICB2
b2lkIG5vdGlmeUFsbCgpCisgICAgeworICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsK
KyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyBMb2NrJiB1bmNoZWNrZWRDYXN0KENoZWNrZWRM
b2NrJiBsb2NrKSB7IHJldHVybiBzdGF0aWNfY2FzdDxMb2NrJj4obG9jayk7IH0KKyAgICBDb25k
aXRpb24gbV9jb25kaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpDaGVja2VkQ29uZGl0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZExv
Y2suaCBiL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRMb2NrLmgKaW5kZXggYzE5YzE3ZTk0NzUwNzQ3
NjRkMjIxYTBlYWRmZjNiNmVlNDI0NDNiZC4uZTk3YjRhOTY5YzE3OGUxMjM1NmFmOWQxYjIyODg1
M2FhOWQ5NmJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ2hlY2tlZExvY2suaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkTG9jay5oCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNhZmVwb2ludCgpIHsgTG9jazo6c2FmZXBvaW50KCk7IH0KICAgICBib29sIGlz
SGVsZCgpIGNvbnN0IHsgcmV0dXJuIExvY2s6OmlzSGVsZCgpOyB9CiAgICAgYm9vbCBpc0xvY2tl
ZCgpIGNvbnN0IHsgcmV0dXJuIExvY2s6OmlzTG9ja2VkKCk7IH0KKyAgICBmcmllbmQgY2xhc3Mg
Q2hlY2tlZENvbmRpdGlvbjsKIH07CiAKIHVzaW5nIEFkb3B0TG9ja1RhZyA9IHN0ZDo6YWRvcHRf
bG9ja190OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IGRlMzJkYTM2OWEyNmNiYWViNTgxMTQ0MDg4NGE2NWI3ZGVjM2YwOWIuLjQyN2Q0ODhiMjU0
MzVlY2U0ZDBkZDI0MzczMGI0OTBiZTc3ZWVmMmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wNC0yMiAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIENvbmRp
dGlvbiB0eXBlIHRoYXQgc3VwcG9ydHMgdGhyZWFkIHNhZmV0eSBhbmFseXNpcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0OTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBzaW1wbGUgdGVzdCBmb3Ig
Q2hlY2tlZENvbmRpdGlvbiB0byBtYWtlIHN1cmUKKyAgICAgICAgaXQgY29tcGlsZXMuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkQ29uZGl0aW9u
VGVzdC5jcHA6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNr
ZWRMb2NrVGVzdC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkTG9ja1Rlc3QuY3BwOgorCiAyMDIxLTA0
LTIxICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCByZXZlcnRpbmcgcjI3NjM4MCBhbmQgcjI3NjM4Ni4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjRmYjFhZjdhNTU1OWJhZjMxYWZmNjg5MTYyZjRmMDQyMDI4NTgyMy4uOWQx
NGY4ZDM3YWQ1MzBiNjYyOTlkOWZkZjA0ZTFjZjQzZWZmNTBhOCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTU4MSw2ICs1ODEsNyBAQAogCQk3QUVBRDQ3RjFFMjAxMTZDMDA0MTZFRkUgLyog
Q3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1lQWNjZXNzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFQUQ0N0MxRTIwMTEzODAwNDE2RUZFIC8qIENyb3Nz
UGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5tbSAqLzsgfTsKIAkJN0FFQUQ0ODExRTIwMTIyNzAw
NDE2RUZFIC8qIENyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRUFENDdEMUUyMDEx
NEUwMDQxNkVGRSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRtbCAqLzsgfTsK
IAkJN0IyNzM5RTAyNjI1NzFDQzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrVGVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjI3MzlERjI2MjU3MUND
MDA0MEYxODIgLyogQ2hlY2tlZExvY2tUZXN0LmNwcCAqLzsgfTsKKwkJN0IyNzM5RUYyNjMxNUU3
RTAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMjczOUVFMjYzMTVFN0QwMDQwRjE4MiAvKiBD
aGVja2VkQ29uZGl0aW9uVGVzdC5jcHAgKi87IH07CiAJCTdCN0QwOTZBMjUxOUY4RjkwMDE3QTA3
OCAvKiBXZWJHTE5vQ3Jhc2hPbk90aGVyVGhyZWFkQWNjZXNzLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I3RDA5NjkyNTE5RjhGOTAwMTdBMDc4IC8q
IFdlYkdMTm9DcmFzaE9uT3RoZXJUaHJlYWRBY2Nlc3MubW0gKi87IH07CiAJCTdDMUFGNzk1MUU4
RENCQUIwMDI2NDVCOSAvKiBQcmVwYXJlRm9yTW92ZVRvV2luZG93Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxQUY3OTMxRThEQ0JBQjAwMjY0NUI5
IC8qIFByZXBhcmVGb3JNb3ZlVG9XaW5kb3cubW0gKi87IH07CiAJCTdDMzk2NTA2MUNERDc0Rjkw
MDk0REJCOCAvKiBDb2xvclRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMzk2NTA1MUNERDc0RjkwMDk0REJCOCAvKiBDb2xvclRlc3RzLmNw
cCAqLzsgfTsKQEAgLTI0MjYsNiArMjQyNyw3IEBACiAJCTdBRUFENDdDMUUyMDExMzgwMDQxNkVG
RSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRUFENDdEMUUyMDExNEUwMDQxNkVGRSAv
KiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgbmFtZSA9IENyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5odG1sOyBwYXRoID0gVGVz
dHMvbWFjL0Nyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5odG1sOyBzb3VyY2VUcmVlID0g
U09VUkNFX1JPT1Q7IH07CiAJCTdCMjczOURGMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVja2VkTG9j
a1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hlY2tlZExv
Y2tUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IyNzM5RUUyNjMxNUU3
RDAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENoZWNrZWRDb25kaXRpb25UZXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0I3RDA5NjkyNTE5RjhGOTAwMTdBMDc4IC8qIFdlYkdMTm9DcmFz
aE9uT3RoZXJUaHJlYWRBY2Nlc3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTE5vQ3Jh
c2hPbk90aGVyVGhyZWFkQWNjZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzFBRjc5MzFFOERDQkFCMDAyNjQ1QjkgLyogUHJlcGFyZUZvck1vdmVUb1dpbmRvdy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByZXBhcmVGb3JNb3ZlVG9XaW5k
b3cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzk2NTA1MUNERDc0RjkwMDk0
REJCOCAvKiBDb2xvclRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbG9yVGVzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDM2Niw2
ICs0MzY4LDcgQEAKIAkJCQk5M0E0MjdBRTE4MERBNjBGMDBDRDI0RDcgLyogQm94UHRyLmNwcCAq
LywKIAkJCQkwNDUxQTVBNjIzNUU0MzhFMDA5REY5NDUgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
Y3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwICovLAorCQkJCTdCMjczOUVFMjYzMTVFN0QwMDQwRjE4MiAvKiBDaGVj
a2VkQ29uZGl0aW9uVGVzdC5jcHAgKi8sCiAJCQkJN0IyNzM5REYyNjI1NzFDQzAwNDBGMTgyIC8q
IENoZWNrZWRMb2NrVGVzdC5jcHAgKi8sCiAJCQkJRTMwMkJEQTkyNDA0QjkyMzAwODY1Mjc3IC8q
IENvbXBhY3RSZWZQdHJUdXBsZS5jcHAgKi8sCiAJCQkJOUIwQzA1MTgyNEZERkI3MDAwRjJGRTMx
IC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgKi8sCkBAIC01MTM4LDYgKzUxNDEsNyBAQAog
CQkJCTZCRkQyOTRDMUQ1RTZDMUQwMDhFQzk2OCAvKiBIYXNoQ291bnRlZFNldC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzNENjMxRDFGQ0I3NjIwMDAzMkVDRDYgLyogSGFzaGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDODNERUQyMUQwQTU5MEMwMEZFQkNGMyAvKiBIYXNoTWFwLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTdCMjczOUVGMjYzMTVFN0UwMDQwRjE4MiAvKiBDaGVja2VkQ29u
ZGl0aW9uVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVENDFEMEE1OTBDMDBGRUJD
RjMgLyogSGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzhCRkY3MTIzQzAxMDdBMDBD
MDA5QjMgLyogSGV4TnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzOTc2RDgzMjREQzQ3
OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRDb25kaXRpb25UZXN0LmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRDb25kaXRpb25UZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MjhhYTE5MDNjZGUzNmVhMzJkYzEwMWYyNmJmM2NjOTkyNjliODkzCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tlZENv
bmRpdGlvblRlc3QuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0NoZWNrZWRDb25kaXRpb24uaD4KKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCitURVNUKFdURl9DaGVja2VkTG9jaywgQ2hlY2tlZENvbmRpdGlv
bkNvbXBpbGVzKQoreworICAgIENoZWNrZWRMb2NrIGxvY2s7CisgICAgQ2hlY2tlZENvbmRpdGlv
biBjb25kaXRpb247CisgICAgTG9ja2VyIGxvY2tlciB7IGxvY2sgfTsgLy8gQ29tbWVudCB0aGlz
IHRvIGVuc3VyZSB0aGF0IHRocmVhZCBzYWZldHkgYW5hbHlzaXMgY3JlYXRlcyBhIGNvbXBpbGUg
ZXJyb3IuCisgICAgYm9vbCByZXN1bHQgPSBjb25kaXRpb24ud2FpdEZvcihsb2NrLCAwX3MpOwor
ICAgIEVYUEVDVF9GQUxTRShyZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkTG9j
a1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tlZExvY2tUZXN0
LmNwcAppbmRleCBhZmY5ODE5ZTkyNTAzYTVjNjY4OGRjMTM2MTVlMzZiY2E5NTQ0ZDVhLi5kODJl
ZTFhMmU1YmRlMGRjYWJmMzVjZTlkYzczMTEyMTEwMjI2MjRhIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkTG9ja1Rlc3QuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRMb2NrVGVzdC5jcHAKQEAgLTI2LDggKzI2LDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvQ2hlY2tlZExvY2suaD4KIAot
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
ewogCiBuYW1lc3BhY2Ugewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427134</attachid>
            <date>2021-04-27 04:06:46 -0700</date>
            <delta_ts>2021-04-27 23:26:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224970-20210427140644.patch</filename>
            <type>text/plain</type>
            <size>24302</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEyNzUxNDJlNGU1NzU0ZmQ4MDZkYjk5
ODVjZmViYzY0MTFmOTA0ZTUuLmE2ZGY5MmRmODM5ZmVmNTk4NDMzNTgxYTI0YjE4NjUxZDE4MGY0
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDQtMjIgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBDb25kaXRpb24gdHlwZSB0aGF0IHN1
cHBvcnRzIHRocmVhZCBzYWZldHkgYW5hbHlzaXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgIEFkZCBDaGVja2VkQ29uZGl0aW9uLCBhIGNvbmRpdGlvbiB2YXJp
YWJsZSB0byBiZSB1c2VkIHdpdGggQ2hlY2tlZExvY2suCisgICAgICAgIFVzZSB0aHJlYWQgc2Fm
ZXR5IGFuYWx5c2lzIGFubm90YXRpb25zIGZvciBDaGVja2VkQ29uZGl0aW9uLgorCisgICAgICAg
ICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIHd0Zi9DaGVja2VkQ29uZGl0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9DaGVja2VkTG9jay5oOgorCiAyMDIxLTA0LTIxICBBZGl0eWEgS2VlcnRoaSAgPGFr
ZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGaXggaW50ZXJuYWwgYnVpbGRzIGFm
dGVyIHIyNzYzMjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDc1MjBlNzFmMmU5OTMwNmIzZDExNTk2MmI4NDUxYTBh
M2U4MmNmMi4uOGIzMjQ1ZmQ0MDA3MDk2MzM0ZDNmMjA2NGFlNWNhMjgxMDhkNDE3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MSBAQAorMjAyMS0wNC0yNyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVu
ZW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIENvbmRpdGlvbiB0eXBlIHRoYXQgc3VwcG9y
dHMgdGhyZWFkIHNhZmV0eSBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI0OTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgVXNlIENoZWNrZWRDb25kaXRpb24gYW5kIENoZWNrZWRMb2NrIGFzIGFu
IGV4YW1wbGUgb2YgdGhlCisgICAgICAgIGFkZGVkIGltcGxlbWVudGF0aW9ucy4KKworICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQQzo6Q29ubmVjdGlv
bjo6d2FpdEZvck1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5j
b21pbmdNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENs
b3NlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBD
OjpDb25uZWN0aW9uOjpXVEZfR1VBUkRFRF9CWV9MT0NLKToKKyAgICAgICAgVXNlIENoZWNrZWRD
b25kaXRpb24gKGFzIGFuIGV4YW1wbGUpLgorCisgICAgICAgIE1hcmsgdXAgdmFyaWFibGVzIHBy
b3RlY3RlZCBieQorICAgICAgICBJUEM6OkNvbm5lY3Rpb246Om1fd2FpdEZvck1lc3NhZ2VNdXRl
eAorICAgICAgICB0byB1c2UgdGhyZWFkIHNhZmV0eSBhbmFseXNpcy4KKworICAgICAgICAqIFNo
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok1lZGlhVHJhY2tSZWFkZXI6OmdyZWF0ZXN0UHJlc2VudGF0aW9uVGltZSBjb25z
dCk6CisgICAgICAgIEZpeCB1bmxvY2tlZCBhY2Nlc3MuCisKKyAgICAgICAgKFdlYktpdDo6TWVk
aWFUcmFja1JlYWRlcjo6YWRkU2FtcGxlKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFUcmFja1Jl
YWRlcjo6d2FpdEZvclNhbXBsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhVHJhY2tS
ZWFkZXI6OmZpbmlzaFBhcnNpbmcpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVRyYWNrUmVhZGVy
Ojpjb3B5UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVRyYWNrUmVhZGVyOjpmaW5h
bGl6ZSk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNr
UmVhZGVyLmg6CisgICAgICAgIFVzZSBDaGVja2VkQ29uZGl0aW9uIChhcyBhbiBleGFtcGxlKS4K
KworICAgICAgICBNYXJrIHVwIHZhcmlhYmxlcyBwcm90ZWN0ZWQgYnkKKyAgICAgICAgTWVkaWFU
cmFja1JlYWRlcjo6bV9zYW1wbGVTdG9yYWdlTG9jaworICAgICAgICB0byB1c2UgdGhyZWFkIHNh
ZmV0eSBhbmFseXNpcy4KKwogMjAyMS0wNC0yMSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5G
dWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luXSBHZXREb3VibGVDbGlja1RpbWUoKSByZXR1
cm5zIDAgaW4gdGhlIG5vbi1pbnRlcmFjdGl2ZSB3aW5kb3cgc3RhdGlvbiBvbiBXaW5kb3dzIDEw
IHZlcnNpb24gMjAwNApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMjNjYTU1NmVjMTJiNTdjMjFhYjVmM2UyMGUyZTg2ODgxYmY4YTAwMS4uM2IwMzM3ZjI0ZTEx
MzRjNWYyZTFlMDFmM2M0MzQ5MGQ3ZGM3MGVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00NTYsNiArNDU2LDcgQEAKIAkJN0FGRUM2QjAxRUIyMkI1OTAw
REFERTM2IC8qIFVVSUQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VVVJRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMjczOURDMjYyNERBQUEw
MDQwRjE4MiAvKiBUaHJlYWRTYWZldHlBbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRT
YWZldHlBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjI3MzlERDI2
MjREQUMzMDA0MEYxODIgLyogQ2hlY2tlZExvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2tlZExv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IyNzM5RjAyNjMxNzlDMzAwNDBG
MTgyIC8qIENoZWNrZWRDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2tlZENvbmRpdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNzk0MTIyMjMyNkM3MDBEN0E4
MjQgLyogQVVUSE9SUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBBVVRIT1JTOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzEzNzk0MjIyMjMyNkQ1MDBEN0E4MjQgLyogaWVlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBpZWVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTM3OTQzMjIyMzI2RDUwMEQ3QTgy
NCAvKiBSRUFETUUubWQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBuZXQuZGFyaW5nZmlyZWJhbGwubWFya2Rvd247IHBhdGggPSBSRUFETUUubWQ7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODEsNiArOTgyLDcgQEAKIAkJCQk0MTNGRThG
NTFGOEQyRUFCMDBGNkQ3RDcgLyogQ2FsbGJhY2tBZ2dyZWdhdG9yLmggKi8sCiAJCQkJQThBNDcy
NkExNTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQThBNDcy
NkIxNTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFuLmggKi8sCisJCQkJN0IyNzM5RjAy
NjMxNzlDMzAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb24uaCAqLywKIAkJCQk3QjI3MzlERDI2
MjREQUMzMDA0MEYxODIgLyogQ2hlY2tlZExvY2suaCAqLywKIAkJCQkwRjY2QjI4MDFEQzk3QkFC
MDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLywKIAkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFE
M0YgLyogQ2xvY2tUeXBlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDM4MTFhNTliMDgy
NmEyNDRmZDg4YjE5ZDBiMzQ5MzI5MmZmYTMwNzcuLjA2NmRmYjBlZDhhM2Q0ZDA3OWZhODliODhk
N2Y3YjcxYzAwNGUzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yOCw2ICsyOCw3IEBAIHNl
dChXVEZfUFVCTElDX0hFQURFUlMKICAgICBDYWxsYmFja0FnZ3JlZ2F0b3IuaAogICAgIENoZWNr
ZWRBcml0aG1ldGljLmgKICAgICBDaGVja2VkQm9vbGVhbi5oCisgICAgQ2hlY2tlZENvbmRpdGlv
bi5oCiAgICAgQ2hlY2tlZExvY2suaAogICAgIENsb2NrVHlwZS5oCiAgICAgQ29tbWFQcmludGVy
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRDb25kaXRpb24uaCBiL1NvdXJj
ZS9XVEYvd3RmL0NoZWNrZWRDb25kaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTkwY2ZiZmRkYzI1Y2Iw
NDFjODAxNzE0ZGM5NjNlMWE1NjNiOWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvQ2hlY2tlZENvbmRpdGlvbi5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9DaGVja2VkTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIEEgY29uZGl0aW9uIHZhcmlhYmxlIHR5cGUgZm9yIENoZWNrZWRMb2NrLgor
Y2xhc3MgQ2hlY2tlZENvbmRpdGlvbiBmaW5hbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q2hlY2tlZENvbmRpdGlvbik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgY29uc3RleHByIENoZWNrZWRDb25kaXRpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBib29s
IHdhaXRVbnRpbChDaGVja2VkTG9jayYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlJiB0aW1lb3V0KSBXVEZfUkVRVUlSRVNfTE9DSyhsb2NrKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY29uZGl0aW9uLndhaXRVbnRpbCh1bmNoZWNrZWRDYXN0KGxvY2spLCB0aW1lb3V0KTsK
KyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBib29sIHdhaXRVbnRp
bChDaGVja2VkTG9jayYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1l
b3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpIFdURl9SRVFVSVJFU19MT0NLKGxvY2spCisg
ICAgeworICAgICAgICByZXR1cm4gbV9jb25kaXRpb24ud2FpdFVudGlsKHVuY2hlY2tlZENhc3Qo
bG9jayksIHRpbWVvdXQsIHByZWRpY2F0ZSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgYm9vbCB3YWl0Rm9yKENoZWNrZWRMb2NrJiBsb2NrLCBTZWNvbmRzIHJl
bGF0aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKSBXVEZfUkVRVUlSRVNfTE9D
Syhsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29uZGl0aW9uLndhaXRGb3IodW5jaGVj
a2VkQ2FzdChsb2NrKSwgcmVsYXRpdmVUaW1lb3V0LCBwcmVkaWNhdGUpOworICAgIH0KKyAgICBi
b29sIHdhaXRGb3IoQ2hlY2tlZExvY2smIGxvY2ssIFNlY29uZHMgcmVsYXRpdmVUaW1lb3V0KSBX
VEZfUkVRVUlSRVNfTE9DSyhsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29uZGl0aW9u
LndhaXRGb3IodW5jaGVja2VkQ2FzdChsb2NrKSwgcmVsYXRpdmVUaW1lb3V0KTsKKyAgICB9Cisg
ICAgdm9pZCB3YWl0KENoZWNrZWRMb2NrJiBsb2NrKSBXVEZfUkVRVUlSRVNfTE9DSyhsb2NrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29uZGl0aW9uLndhaXQodW5jaGVja2VkQ2FzdChsb2Nr
KSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCB3YWl0
KENoZWNrZWRMb2NrJiBsb2NrLCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpIFdURl9SRVFVSVJF
U19MT0NLKGxvY2spCisgICAgeworICAgICAgICBtX2NvbmRpdGlvbi53YWl0KHVuY2hlY2tlZENh
c3QobG9jayksIHByZWRpY2F0ZSk7CisgICAgfQorICAgIGJvb2wgbm90aWZ5T25lKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisgICAgdm9p
ZCBub3RpZnlBbGwoKQorICAgIHsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7Cisg
ICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgTG9jayYgdW5jaGVja2VkQ2FzdChDaGVja2VkTG9j
ayYgbG9jaykgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TG9jayY+KGxvY2spOyB9CisgICAgQ29uZGl0
aW9uIG1fY29uZGl0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
Q2hlY2tlZENvbmRpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRMb2Nr
LmggYi9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkTG9jay5oCmluZGV4IGMxOWMxN2U5NDc1MDc0NzY0
ZDIyMWEwZWFkZmYzYjZlZTQyNDQzYmQuLmU5N2I0YTk2OWMxNzhlMTIzNTZhZjlkMWIyMjg4NTNh
YTlkOTZiYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRMb2NrLmgKKysrIGIv
U291cmNlL1dURi93dGYvQ2hlY2tlZExvY2suaApAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzYWZlcG9pbnQoKSB7IExvY2s6OnNhZmVwb2ludCgpOyB9CiAgICAgYm9vbCBpc0hl
bGQoKSBjb25zdCB7IHJldHVybiBMb2NrOjppc0hlbGQoKTsgfQogICAgIGJvb2wgaXNMb2NrZWQo
KSBjb25zdCB7IHJldHVybiBMb2NrOjppc0xvY2tlZCgpOyB9CisgICAgZnJpZW5kIGNsYXNzIENo
ZWNrZWRDb25kaXRpb247CiB9OwogCiB1c2luZyBBZG9wdExvY2tUYWcgPSBzdGQ6OmFkb3B0X2xv
Y2tfdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24u
Y3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKaW5kZXggNjMw
NjNmNDc0MDM3YmVkYzA0OTc5NmVmZjYyODkzNDg5NGFlMmRkOS4uYmExNDExOTc2YTU3ZjQyYTcy
NmJlNTQ4ZTZmZTFkNWY4ZGRjZjM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5jcHAKQEAgLTUyMSw3ICs1MjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4g
Q29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoTWVzc2FnZU5hbWUgbWVzc2FnZU5hbWUsIHVpbgog
ICAgIFdhaXRGb3JNZXNzYWdlU3RhdGUgd2FpdGluZ0Zvck1lc3NhZ2UobWVzc2FnZU5hbWUsIGRl
c3RpbmF0aW9uSUQsIHdhaXRGb3JPcHRpb25zKTsKIAogICAgIHsKLSAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV93YWl0Rm9yTWVzc2FnZU11dGV4IH07CiAKICAgICAgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBoYXZpbmcgbXVsdGlwbGUgY2xpZW50cyB3YWl0aW5nIGZvciBtZXNzYWdlcy4KICAgICAg
ICAgQVNTRVJUKCFtX3dhaXRpbmdGb3JNZXNzYWdlKTsKQEAgLTU3MCw3ICs1NzAsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoTWVzc2FnZU5h
bWUgbWVzc2FnZU5hbWUsIHVpbgogICAgICAgICAvLyBIYW5kbGUgYW55IG1lc3NhZ2VzIHRoYXQg
YXJlIGJsb2NrZWQgb24gYSByZXNwb25zZSBmcm9tIHVzLgogICAgICAgICBTeW5jTWVzc2FnZVN0
YXRlOjpzaW5nbGV0b24oKS5kaXNwYXRjaE1lc3NhZ2VzKCk7CiAKLSAgICAgICAgc3RkOjp1bmlx
dWVfbG9jazxMb2NrPiBsb2NrKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CisgICAgICAgIExvY2tl
ciBsb2NrIHsgbV93YWl0Rm9yTWVzc2FnZU11dGV4IH07CiAKICAgICAgICAgaWYgKG1fd2FpdGlu
Z0Zvck1lc3NhZ2UtPmRlY29kZXIpIHsKICAgICAgICAgICAgIGF1dG8gZGVjb2RlciA9IFdURk1v
dmUobV93YWl0aW5nRm9yTWVzc2FnZS0+ZGVjb2Rlcik7CkBAIC01NzksNyArNTc5LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKE1lc3NhZ2VO
YW1lIG1lc3NhZ2VOYW1lLCB1aW4KICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdyB3ZSB3YWl0
LgotICAgICAgICBib29sIGRpZFRpbWVvdXQgPSAhbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi53
YWl0VW50aWwobG9jaywgdGltZW91dC5kZWFkbGluZSgpKTsKKyAgICAgICAgYm9vbCBkaWRUaW1l
b3V0ID0gIW1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24ud2FpdFVudGlsKG1fd2FpdEZvck1lc3Nh
Z2VNdXRleCwgdGltZW91dC5kZWFkbGluZSgpKTsKICAgICAgICAgLy8gV2UgdGltZWQgb3V0LCBs
b3N0IG91ciBjb25uZWN0aW9uLCBvciBhIHN5bmMgbWVzc2FnZSBjYW1lIGluIHdpdGggSW50ZXJy
dXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzLCBzbyBzdG9wIHdhaXRpbmcuCiAgICAgICAg
IGlmIChkaWRUaW1lb3V0IHx8IG1fd2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VXYWl0aW5nSW50
ZXJydXB0ZWQpIHsKICAgICAgICAgICAgIG1fd2FpdGluZ0Zvck1lc3NhZ2UgPSBudWxscHRyOwpA
QCAtNzQ5LDcgKzc0OSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2Fn
ZShzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gbWVzc2FnZSkKICAgICB9CiAKICAgICAvLyBGSVhN
RTogVGhlc2UgYXJlIHByYWN0aWNhbGx5IHRoZSBzYW1lIG11dGV4LCBzbyBtYXliZSB0aGV5IGNv
dWxkIGJlIG1lcmdlZC4KLSAgICBhdXRvIHdhaXRGb3JNZXNzYWdlc0xvY2tlciA9IGhvbGRMb2Nr
KG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CisgICAgTG9ja2VyIHdhaXRGb3JNZXNzYWdlc0xvY2tl
ciB7IG1fd2FpdEZvck1lc3NhZ2VNdXRleCB9OwogCiAgICAgYXV0byBpbmNvbWluZ01lc3NhZ2Vz
TG9ja2VyID0gaG9sZExvY2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgpOwogICAgIGlmIChhdXRv
KiByZWNlaXZlUXVldWUgPSBtX3JlY2VpdmVRdWV1ZXMuZ2V0KCptZXNzYWdlKSkgewpAQCAtODY3
LDcgKzg2Nyw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKCkKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV93YWl0Rm9yTWVzc2Fn
ZU11dGV4KTsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fd2FpdEZvck1lc3NhZ2VNdXRleCB9
OwogCiAgICAgICAgIEFTU0VSVChtX3Nob3VsZFdhaXRGb3JNZXNzYWdlcyk7CiAgICAgICAgIG1f
c2hvdWxkV2FpdEZvck1lc3NhZ2VzID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9D
b25uZWN0aW9uLmgKaW5kZXggNjJkMGZiNzMzNTgxODNhZWM2OGE2ZWM0NmI5NDJhYWUyNzlkMDUw
NS4uODY0OGRhOWZiYmJlZjcyNjc4YjVhOTI3MWMzNzQ5MjU5ZjRhYjAxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaApAQCAtMzMsOCArMzMsOSBAQAogI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlUXVldWVNYXAuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
ICNpbmNsdWRlICJUaW1lb3V0LmgiCisjaW5jbHVkZSA8d3RmL0NoZWNrZWRDb25kaXRpb24uaD4K
KyNpbmNsdWRlIDx3dGYvQ2hlY2tlZExvY2suaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KLSNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpA
QCAtNDA4LDE4ICs0MDksMTggQEAgcHJpdmF0ZToKICAgICAvLyBPdXRnb2luZyBtZXNzYWdlcy4K
ICAgICBMb2NrIG1fb3V0Z29pbmdNZXNzYWdlc011dGV4OwogICAgIERlcXVlPFVuaXF1ZVJlZjxF
bmNvZGVyPj4gbV9vdXRnb2luZ01lc3NhZ2VzOwotICAgIAotICAgIENvbmRpdGlvbiBtX3dhaXRG
b3JNZXNzYWdlQ29uZGl0aW9uOwotICAgIExvY2sgbV93YWl0Rm9yTWVzc2FnZU11dGV4OworCisg
ICAgQ2hlY2tlZENvbmRpdGlvbiBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uOworICAgIENoZWNr
ZWRMb2NrIG1fd2FpdEZvck1lc3NhZ2VNdXRleDsKIAogICAgIHN0cnVjdCBXYWl0Rm9yTWVzc2Fn
ZVN0YXRlOwotICAgIFdhaXRGb3JNZXNzYWdlU3RhdGUqIG1fd2FpdGluZ0Zvck1lc3NhZ2UgeyBu
dWxscHRyIH07CisgICAgV2FpdEZvck1lc3NhZ2VTdGF0ZSogbV93YWl0aW5nRm9yTWVzc2FnZSBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fd2FpdEZvck1lc3NhZ2VNdXRleCkgeyBudWxscHRyIH07IC8v
IE5PTElOVAogCiAgICAgY2xhc3MgU3luY01lc3NhZ2VTdGF0ZTsKIAogICAgIExvY2sgbV9zeW5j
UmVwbHlTdGF0ZU11dGV4OwogICAgIGJvb2wgbV9zaG91bGRXYWl0Rm9yU3luY1JlcGxpZXM7Ci0g
ICAgYm9vbCBtX3Nob3VsZFdhaXRGb3JNZXNzYWdlczsKKyAgICBib29sIG1fc2hvdWxkV2FpdEZv
ck1lc3NhZ2VzIFdURl9HVUFSREVEX0JZX0xPQ0sobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKICAg
ICBzdHJ1Y3QgUGVuZGluZ1N5bmNSZXBseTsKICAgICBWZWN0b3I8UGVuZGluZ1N5bmNSZXBseT4g
bV9wZW5kaW5nU3luY1JlcGxpZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcAppbmRl
eCBmZWE3OGIwNzhmNTY4NTA5NjBkNjY1YWU4ODFiNTk3MDI4OTMyNGZhLi45YWUzZDA1MDJhZGJk
ZWNmZWRiMmU2Y2JiZjdhZDYyZWUzZmI4ZTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIu
Y3BwCkBAIC04Nyw2ICs4Nyw3IEBAIE1lZGlhVHJhY2tSZWFkZXI6Ok1lZGlhVHJhY2tSZWFkZXIo
QWxsb2NhdG9yJiYgYWxsb2NhdG9yLCBjb25zdCBNZWRpYUZvcm1hdFJlYWRlCiAKIE1lZGlhVGlt
ZSBNZWRpYVRyYWNrUmVhZGVyOjpncmVhdGVzdFByZXNlbnRhdGlvblRpbWUoKSBjb25zdAogewor
ICAgIExvY2tlciBsb2NrZXIgeyBtX3NhbXBsZVN0b3JhZ2VMb2NrIH07CiAgICAgYXV0byYgc2Ft
cGxlTWFwID0gbV9zYW1wbGVTdG9yYWdlLT5zYW1wbGVNYXA7CiAgICAgaWYgKHNhbXBsZU1hcC5l
bXB0eSgpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwpAQCAtOTgs
NyArOTksNyBAQCBNZWRpYVRpbWUgTWVkaWFUcmFja1JlYWRlcjo6Z3JlYXRlc3RQcmVzZW50YXRp
b25UaW1lKCkgY29uc3QKIHZvaWQgTWVkaWFUcmFja1JlYWRlcjo6YWRkU2FtcGxlKFJlZjxNZWRp
YVNhbXBsZT4mJiBzYW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQogewog
ICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIExvY2tlciBsb2NrZXIgeyBtX3NhbXBsZVN0b3Jh
Z2VMb2NrIH07CiAgICAgaWYgKCFtX3NhbXBsZVN0b3JhZ2UpCiAgICAgICAgIG1fc2FtcGxlU3Rv
cmFnZSA9IG1ha2VVbmlxdWU8U2FtcGxlU3RvcmFnZT4oKTsKIApAQCAtMTE2LDEwICsxMTcsMTEg
QEAgdm9pZCBNZWRpYVRyYWNrUmVhZGVyOjphZGRTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNh
bXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmUKIAogdm9pZCBNZWRpYVRyYWNrUmVhZGVyOjp3YWl0
Rm9yU2FtcGxlKEZ1bmN0aW9uPGJvb2woU2FtcGxlTWFwJiwgYm9vbCk+JiYgcHJlZGljYXRlKSBj
b25zdAogewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVTdG9yYWdlTG9jayk7
CisgICAgTG9ja2VyIGxvY2tlciB7IG1fc2FtcGxlU3RvcmFnZUxvY2sgfTsKICAgICBpZiAoIW1f
c2FtcGxlU3RvcmFnZSkKICAgICAgICAgbV9zYW1wbGVTdG9yYWdlID0gbWFrZVVuaXF1ZTxTYW1w
bGVTdG9yYWdlPigpOwogICAgIG1fc2FtcGxlU3RvcmFnZUNvbmRpdGlvbi53YWl0KG1fc2FtcGxl
U3RvcmFnZUxvY2ssIFtwcmVkaWNhdGUgPSBXVEZNb3ZlKHByZWRpY2F0ZSksIHRoaXNdIHsKKyAg
ICAgICAgYXNzZXJ0SXNIZWxkKG1fc2FtcGxlU3RvcmFnZUxvY2spOwogICAgICAgICByZXR1cm4g
cHJlZGljYXRlKG1fc2FtcGxlU3RvcmFnZS0+c2FtcGxlTWFwLCBtX3NhbXBsZVN0b3JhZ2UtPmhh
c0FsbFNhbXBsZXMpOwogICAgIH0pOwogfQpAQCAtMTI5LDcgKzEzMSw3IEBAIHZvaWQgTWVkaWFU
cmFja1JlYWRlcjo6ZmluaXNoUGFyc2luZygpCiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkp
OwogCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIExvY2tlciBsb2NrZXIgeyBtX3NhbXBs
ZVN0b3JhZ2VMb2NrIH07CiAgICAgaWYgKCFtX3NhbXBsZVN0b3JhZ2UpCiAgICAgICAgIG1fc2Ft
cGxlU3RvcmFnZSA9IG1ha2VVbmlxdWU8U2FtcGxlU3RvcmFnZT4oKTsKICAgICBtX3NhbXBsZVN0
b3JhZ2UtPmhhc0FsbFNhbXBsZXMgPSB0cnVlOwpAQCAtMTY1LDggKzE2Nyw5IEBAIE9TU3RhdHVz
IE1lZGlhVHJhY2tSZWFkZXI6OmNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2Nh
dG9yUmVmIGFsbG9jYXRvCiAgICAgICAgIHJldHVybiBub0VycjsKICAgICB9CiAKLSAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIExvY2tlciBsb2Nr
ZXIgeyBtX3NhbXBsZVN0b3JhZ2VMb2NrIH07CiAgICAgbV9zYW1wbGVTdG9yYWdlQ29uZGl0aW9u
LndhaXQobV9zYW1wbGVTdG9yYWdlTG9jaywgWyZdIHsKKyAgICAgICAgYXNzZXJ0SXNIZWxkKG1f
c2FtcGxlU3RvcmFnZUxvY2spOwogICAgICAgICByZXR1cm4gISFtX3NhbXBsZVN0b3JhZ2U7CiAg
ICAgfSk7CiAKQEAgLTE5OCw3ICsyMDEsNyBAQCBPU1N0YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpj
b3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0bwogCiB2
b2lkIE1lZGlhVHJhY2tSZWFkZXI6OmZpbmFsaXplKCkKIHsKLSAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc2FtcGxlU3RvcmFnZUxvY2spOworICAgIExvY2tlciBsb2NrZXIgeyBtX3NhbXBs
ZVN0b3JhZ2VMb2NrIH07CiAgICAgc3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2goW3NhbXBsZVN0b3Jh
Z2UgPSBzdGQ6OmV4Y2hhbmdlKG1fc2FtcGxlU3RvcmFnZSwgbnVsbHB0cildKCkgbXV0YWJsZSB7
CiAgICAgICAgIHNhbXBsZVN0b3JhZ2UgPSBudWxscHRyOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFk
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRy
YWNrUmVhZGVyLmgKaW5kZXggMDMzZTc0NTI1ZjJkNTQ3YzE4YzAzMTgzMzU4NzcwMzA2N2M4NmJh
MS4uYjgzNGI5MDkxZjAzYjdlZTZmY2Y1YTczNmFhYjMwNGIyMTc2ZDZlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVk
aWFUcmFja1JlYWRlci5oCkBAIC0yOSw3ICsyOSw4IEBACiAKICNpbmNsdWRlICJDb3JlTWVkaWFX
cmFwcGVkLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
Q29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0NoZWNrZWRDb25kaXRpb24uaD4KKyNpbmNsdWRl
IDx3dGYvQ2hlY2tlZExvY2suaD4KIAogREVDTEFSRV9DT1JFX01FRElBX1RSQUlUUyhUcmFja1Jl
YWRlcik7CiAKQEAgLTEwNSw5ICsxMDYsOSBAQCBwcml2YXRlOgogICAgIGNvbnN0IENNTWVkaWFU
eXBlIG1fbWVkaWFUeXBlOwogICAgIGNvbnN0IE1lZGlhVGltZSBtX2R1cmF0aW9uOwogICAgIHN0
ZDo6YXRvbWljPEVuYWJsZWQ+IG1faXNFbmFibGVkIHsgRW5hYmxlZDo6VW5rbm93biB9OwotICAg
IG11dGFibGUgQ29uZGl0aW9uIG1fc2FtcGxlU3RvcmFnZUNvbmRpdGlvbjsKLSAgICBtdXRhYmxl
IExvY2sgbV9zYW1wbGVTdG9yYWdlTG9jazsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxT
YW1wbGVTdG9yYWdlPiBtX3NhbXBsZVN0b3JhZ2U7CisgICAgbXV0YWJsZSBDaGVja2VkQ29uZGl0
aW9uIG1fc2FtcGxlU3RvcmFnZUNvbmRpdGlvbjsKKyAgICBtdXRhYmxlIENoZWNrZWRMb2NrIG1f
c2FtcGxlU3RvcmFnZUxvY2s7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2FtcGxlU3Rv
cmFnZT4gbV9zYW1wbGVTdG9yYWdlIFdURl9HVUFSREVEX0JZX0xPQ0sobV9zYW1wbGVTdG9yYWdl
TG9jayk7CiAgICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CiAgICAgY29uc3Qgdm9pZCog
bV9sb2dJZGVudGlmaWVyOwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCBkZTMyZGEzNjlhMjZjYmFlYjU4MTE0NDA4ODRhNjViN2RlYzNmMDli
Li5kYjhhNmEwYzBkOWFmMDkwMGNiMDQzZDg3NDI3Yjg3YjNhMjRhM2M0IDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MjEtMDQtMjIgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgYSBDb25kaXRpb24gdHlwZSB0aGF0IHN1cHBvcnRzIHRocmVhZCBzYWZldHkgYW5hbHlz
aXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDk3
MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEEgc2ltcGxl
IHRlc3QgZm9yIENoZWNrZWRDb25kaXRpb24gdG8gbWFrZSBzdXJlCisgICAgICAgIGl0IGNvbXBp
bGVzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tl
ZENvbmRpdGlvblRlc3QuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9DaGVja2VkTG9ja1Rlc3QuY3BwLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tlZExvY2tUZXN0LmNwcDoK
KwogMjAyMS0wNC0yMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzYzODAgYW5kIHIyNzYzODYuCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGI0ZmIxYWY3YTU1NTliYWYzMWFmZjY4OTE2MmY0ZjA0MjAy
ODU4MjMuLmM4YWNkNWU0OWYyNGE3ZTk4ZGJkYjgwOTc0ZjhiYTZjMDIxNzYwMjUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC01ODEsNiArNTgxLDcgQEAKIAkJN0FFQUQ0N0YxRTIwMTE2QzAw
NDE2RUZFIC8qIENyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRUFENDdDMUUyMDExMzgwMDQxNkVG
RSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MubW0gKi87IH07CiAJCTdBRUFENDgx
MUUyMDEyMjcwMDQxNkVGRSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUVB
RDQ3RDFFMjAxMTRFMDA0MTZFRkUgLyogQ3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1lQWNjZXNzLmh0
bWwgKi87IH07CiAJCTdCMjczOUUwMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVja2VkTG9ja1Rlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IyNzM5
REYyNjI1NzFDQzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrVGVzdC5jcHAgKi87IH07CisJCTdCMjcz
OUVGMjYzMTVFN0UwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uVGVzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjI3MzlFRTI2MzE1RTdEMDA0
MEYxODIgLyogQ2hlY2tlZENvbmRpdGlvblRlc3QuY3BwICovOyB9OwogCQk3QjdEMDk2QTI1MTlG
OEY5MDAxN0EwNzggLyogV2ViR0xOb0NyYXNoT25PdGhlclRocmVhZEFjY2Vzcy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCN0QwOTY5MjUxOUY4Rjkw
MDE3QTA3OCAvKiBXZWJHTE5vQ3Jhc2hPbk90aGVyVGhyZWFkQWNjZXNzLm1tICovOyB9OwogCQk3
QzFBRjc5NTFFOERDQkFCMDAyNjQ1QjkgLyogUHJlcGFyZUZvck1vdmVUb1dpbmRvdy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMUFGNzkzMUU4RENC
QUIwMDI2NDVCOSAvKiBQcmVwYXJlRm9yTW92ZVRvV2luZG93Lm1tICovOyB9OwogCQk3QzM5NjUw
NjFDREQ3NEY5MDA5NERCQjggLyogQ29sb3JUZXN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM5NjUwNTFDREQ3NEY5MDA5NERCQjggLyogQ29s
b3JUZXN0cy5jcHAgKi87IH07CkBAIC0yNDI2LDYgKzI0MjcsNyBAQAogCQk3QUVBRDQ3QzFFMjAx
MTM4MDA0MTZFRkUgLyogQ3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1lQWNjZXNzLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1l
QWNjZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUVBRDQ3RDFFMjAxMTRF
MDA0MTZFRkUgLyogQ3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1lQWNjZXNzLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IG5hbWUgPSBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRtbDsg
cGF0aCA9IFRlc3RzL21hYy9Dcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRtbDsgc291
cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQk3QjI3MzlERjI2MjU3MUNDMDA0MEYxODIgLyog
Q2hlY2tlZExvY2tUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENoZWNrZWRMb2NrVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMjcz
OUVFMjYzMTVFN0QwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uVGVzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGVja2VkQ29uZGl0aW9uVGVzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCN0QwOTY5MjUxOUY4RjkwMDE3QTA3OCAvKiBX
ZWJHTE5vQ3Jhc2hPbk90aGVyVGhyZWFkQWNjZXNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViR0xOb0NyYXNoT25PdGhlclRocmVhZEFjY2Vzcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MxQUY3OTMxRThEQ0JBQjAwMjY0NUI5IC8qIFByZXBhcmVGb3JNb3ZlVG9XaW5k
b3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcmVwYXJlRm9y
TW92ZVRvV2luZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzM5NjUwNTFD
REQ3NEY5MDA5NERCQjggLyogQ29sb3JUZXN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb2xvclRlc3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQzNjYsNiArNDM2OCw3IEBACiAJCQkJOTNBNDI3QUUxODBEQTYwRjAwQ0QyNEQ3IC8qIEJv
eFB0ci5jcHAgKi8sCiAJCQkJMDQ1MUE1QTYyMzVFNDM4RTAwOURGOTQ1IC8qIEJ1bXBQb2ludGVy
QWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tl
ZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLywKKwkJCQk3QjI3MzlFRTI2MzE1RTdEMDA0MEYx
ODIgLyogQ2hlY2tlZENvbmRpdGlvblRlc3QuY3BwICovLAogCQkJCTdCMjczOURGMjYyNTcxQ0Mw
MDQwRjE4MiAvKiBDaGVja2VkTG9ja1Rlc3QuY3BwICovLAogCQkJCUUzMDJCREE5MjQwNEI5MjMw
MDg2NTI3NyAvKiBDb21wYWN0UmVmUHRyVHVwbGUuY3BwICovLAogCQkJCTlCMEMwNTE4MjRGREZC
NzAwMEYyRkUzMSAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwICovLApAQCAtNTEyMiw2ICs1
MTI1LDcgQEAKIAkJCQk3QzgzREYxODFEMEE1OTBDMDBGRUJDRjMgLyogQm94UHRyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTA0REIyMzk2MjM1RTQzRUMwMDMyOEYxNyAvKiBCdW1wUG9pbnRlckFs
bG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVBMDFEMEE1OTBDMDBGRUJDRjMg
LyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdC
MjczOUVGMjYzMTVFN0UwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uVGVzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QjI3MzlFMDI2MjU3MUNDMDA0MEYxODIgLyogQ2hlY2tlZExvY2tUZXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMDJCREFBMjQwNEI5MjQwMDg2NTI3NyAvKiBDb21w
YWN0UmVmUHRyVHVwbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUIwQzA1MTkyNEZERkI3RDAw
RjJGRTMxIC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRDb25kaXRpb25UZXN0
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRDb25kaXRpb25UZXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MjhhYTE5MDNjZGUzNmVhMzJkYzEwMWYyNmJmM2NjOTkyNjliODkz
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tl
ZENvbmRpdGlvblRlc3QuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0NoZWNrZWRDb25kaXRpb24uaD4KKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKFdURl9DaGVja2VkTG9jaywgQ2hlY2tlZENvbmRp
dGlvbkNvbXBpbGVzKQoreworICAgIENoZWNrZWRMb2NrIGxvY2s7CisgICAgQ2hlY2tlZENvbmRp
dGlvbiBjb25kaXRpb247CisgICAgTG9ja2VyIGxvY2tlciB7IGxvY2sgfTsgLy8gQ29tbWVudCB0
aGlzIHRvIGVuc3VyZSB0aGF0IHRocmVhZCBzYWZldHkgYW5hbHlzaXMgY3JlYXRlcyBhIGNvbXBp
bGUgZXJyb3IuCisgICAgYm9vbCByZXN1bHQgPSBjb25kaXRpb24ud2FpdEZvcihsb2NrLCAwX3Mp
OworICAgIEVYUEVDVF9GQUxTRShyZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2Vk
TG9ja1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tlZExvY2tU
ZXN0LmNwcAppbmRleCBhZmY5ODE5ZTkyNTAzYTVjNjY4OGRjMTM2MTVlMzZiY2E5NTQ0ZDVhLi5k
ODJlZTFhMmU1YmRlMGRjYWJmMzVjZTlkYzczMTEyMTEwMjI2MjRhIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkTG9ja1Rlc3QuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRMb2NrVGVzdC5jcHAKQEAgLTI2LDggKzI2
LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvQ2hlY2tlZExvY2suaD4K
IAotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgewogCiBuYW1lc3BhY2Ugewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>