<?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>190819</bug_id>
          
          <creation_ts>2018-10-22 21:37:58 -0700</creation_ts>
          <short_desc>Cleanup: inline constexpr is redundant as constexpr implies inline</short_desc>
          <delta_ts>2018-10-25 15:24:30 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>EasyFix, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1471488</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-10-22 21:37:58 -0700</bug_when>
    <thetext>As per [dcl.constexpr] (2), &quot;constexpr functions and constexpr constructors are implicitly inline&quot; (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf). So, it is sufficient to annotate a function with &quot;constexpr&quot; instead of annotating with &quot;inline constexpr&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471491</commentid>
    <comment_count>1</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-10-22 21:46:38 -0700</bug_when>
    <thetext>Bonus points: teach the style checker to recognize &quot;inline constexpr&quot; and provide an informative diagnostic message that suggests using dropping the &quot;inline&quot; keyword.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472175</commentid>
    <comment_count>2</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-25 13:47:20 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #1)
&gt; Bonus points: teach the style checker to recognize &quot;inline constexpr&quot; and
&gt; provide an informative diagnostic message that suggests using dropping the
&gt; &quot;inline&quot; keyword.

Looks like clang-tidy should support this in the future:
https://reviews.llvm.org/D18914</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472176</commentid>
    <comment_count>3</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-25 13:48:26 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #2)
&gt; (In reply to Daniel Bates from comment #1)
&gt; &gt; Bonus points: teach the style checker to recognize &quot;inline constexpr&quot; and
&gt; &gt; provide an informative diagnostic message that suggests using dropping the
&gt; &gt; &quot;inline&quot; keyword.
&gt; 
&gt; Looks like clang-tidy should support this in the future:
&gt; https://reviews.llvm.org/D18914

Er hmm, I posted that before double-checking the date. Guess it&apos;s kind of stale. 😓</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472183</commentid>
    <comment_count>4</comment_count>
      <attachid>353108</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-25 14:13:21 -0700</bug_when>
    <thetext>Created attachment 353108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472184</commentid>
    <comment_count>5</comment_count>
      <attachid>353108</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-10-25 14:32:16 -0700</bug_when>
    <thetext>Comment on attachment 353108
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Cleanup: inline constexpr is redundant as constexpr implies inline

Are you sure that this is true?  constexpr functions may be called on none const arguments, and therefore produce a non-constexpr value.  Marking a function constexpr only means that it *can* produce a constexpr value, not necessarily that it *will* produce a constexpr value.  Hence, I&apos;m not sure that constexpr necessarily means the function will be inlined.  At least that&apos;s my understanding.  Am I wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472186</commentid>
    <comment_count>6</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-25 14:41:22 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #5)
&gt; Comment on attachment 353108 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=353108&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; +        Cleanup: inline constexpr is redundant as constexpr implies inline
&gt; 
&gt; Are you sure that this is true?  constexpr functions may be called on none
&gt; const arguments, and therefore produce a non-constexpr value.  Marking a
&gt; function constexpr only means that it *can* produce a constexpr value, not
&gt; necessarily that it *will* produce a constexpr value.  Hence, I&apos;m not sure
&gt; that constexpr necessarily means the function will be inlined.  At least
&gt; that&apos;s my understanding.  Am I wrong?

According to https://en.cppreference.com/w/cpp/language/constexpr:
&gt; A constexpr specifier used in a function ... declaration implies inline.

So that&apos;s seems pretty unambiguous... But of course, we wouldn&apos;t want to touch any ALWAYS_INLINE cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472187</commentid>
    <comment_count>7</comment_count>
      <attachid>353108</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-10-25 14:44:21 -0700</bug_when>
    <thetext>Comment on attachment 353108
Patch

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

r=me

&gt;&gt;&gt; Source/JavaScriptCore/ChangeLog:3
&gt;&gt;&gt; +        Cleanup: inline constexpr is redundant as constexpr implies inline
&gt;&gt; 
&gt;&gt; Are you sure that this is true?  constexpr functions may be called on none const arguments, and therefore produce a non-constexpr value.  Marking a function constexpr only means that it *can* produce a constexpr value, not necessarily that it *will* produce a constexpr value.  Hence, I&apos;m not sure that constexpr necessarily means the function will be inlined.  At least that&apos;s my understanding.  Am I wrong?
&gt; 
&gt; According to https://en.cppreference.com/w/cpp/language/constexpr:

Excellent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472198</commentid>
    <comment_count>8</comment_count>
      <attachid>353108</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-25 15:23:33 -0700</bug_when>
    <thetext>Comment on attachment 353108
Patch

Clearing flags on attachment: 353108

Committed r237429: &lt;https://trac.webkit.org/changeset/237429&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472199</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-25 15:23:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472200</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-25 15:24:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/45569008&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353108</attachid>
            <date>2018-10-25 14:13:21 -0700</date>
            <delta_ts>2018-10-25 15:23:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190819-20181025141321.patch</filename>
            <type>text/plain</type>
            <size>25205</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
OWM4YzRhMWZmMzcxYTU0YmFmODA5MTkyNDZlMzBlOTdkNDYyMWYyLi40MDZlYmMyOGFmYzAwMTJk
YmQwMTNmNTE2NjQ0ZGEwZThiZjk3YTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxOC0xMC0yNSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgQ2xlYW51cDogaW5saW5lIGNvbnN0ZXhwciBpcyByZWR1bmRhbnQg
YXMgY29uc3RleHByIGltcGxpZXMgaW5saW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTA4MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5oOgorICAgICAgICAo
SlNDOjphc0FycmF5TW9kZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6Cisg
ICAgICAgIChKU0M6OmlzQ29weU9uV3JpdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aENvbW1v
bi5oOgorICAgICAgICAoSlNDOjptYXhTYWZlSW50ZWdlcik6CisgICAgICAgIChKU0M6Om1pblNh
ZmVJbnRlZ2VyKToKKyAgICAgICAgKiBydW50aW1lL1N0YWNrQWxpZ25tZW50Lmg6CisgICAgICAg
IChKU0M6OnN0YWNrQWxpZ25tZW50Qnl0ZXMpOgorICAgICAgICAoSlNDOjpzdGFja0FsaWdubWVu
dFJlZ2lzdGVycyk6CisKIDIwMTgtMTAtMjQgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBUdXJuIG9uIENvbmljIEdyYWRpZW50cwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAxNTMw
NDMxOGJlYjQ0OWU1YWE3ODFjZjliOTYyMmU3M2FlNTY4NDRhLi44MGRjNTliYmViZDU1OTQ2YTZm
ZjIyYTNlZmQ1ZDdjNzJiNWQ2ZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE4LTEwLTI1ICBS
b3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBDbGVhbnVw
OiBpbmxpbmUgY29uc3RleHByIGlzIHJlZHVuZGFudCBhcyBjb25zdGV4cHIgaW1wbGllcyBpbmxp
bmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDgx
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3Rm
L0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OkJpdG1hcCk6CisgICAgICAgICog
d3RmL0xFQkRlY29kZXIuaDoKKyAgICAgICAgKFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0
aCk6CisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKGRlZmF1bHRNaW5pbXVt
Rm9yQ2xhbXApOgorICAgICAgICAoZGVmYXVsdE1heGltdW1Gb3JDbGFtcCk6CisgICAgICAgIChj
bGFtcFRvQWNjZXB0aW5nNjQpOgorICAgICAgICAoaXNMZXNzVGhhbik6CisgICAgICAgIChpc0xl
c3NUaGFuRXF1YWwpOgorICAgICAgICAoaXNHcmVhdGVyVGhhbik6CisgICAgICAgIChpc0dyZWF0
ZXJUaGFuRXF1YWwpOgorICAgICAgICAoV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKToKKyAgICAg
ICAgKFdURjo6bWFza0ZvclNpemUpOgorICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOgorICAgICAg
ICAqIHd0Zi9QdHJUYWcuaDoKKyAgICAgICAgKFdURjo6dGFnQ29kZVB0cik6CisgICAgICAgIChX
VEY6OnVudGFnQ29kZVB0cik6CisgICAgICAgIChXVEY6OnJldGFnQ29kZVB0cik6CisgICAgICAg
IChXVEY6OnJlbW92ZUNvZGVQdHJUYWcpOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoK
KyAgICAgICAgKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZik6CisgICAgICAgICogd3RmL1Zhcmlh
bnQuaDoKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
IT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8
PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPCk6
CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsU2hhcGU6OlN0cmluZ0ltcGxTaGFwZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0
YXRpY1N0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGwpOgorCiAyMDE4LTEwLTI1ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgSGFzaE1hcCBzaG91bGQgc3Vw
cG9ydCBzZWxlY3RpbmcgYSByYW5kb20gZW50cnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9j
L0NoYW5nZUxvZyBiL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwppbmRleCBhMDQ5NTQyZGNlMTE4
YjQ4ZGQwNzVmNTM0MGFhZWU4NGY1NmQwNzg2Li40ZDgwNGEyNmZmNWFhMWJmZTIxMWE5ZWQyMjkx
NDFmYjBmOGQxMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTgtMTAtMjUgIFJv
c3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIENsZWFudXA6
IGlubGluZSBjb25zdGV4cHIgaXMgcmVkdW5kYW50IGFzIGNvbnN0ZXhwciBpbXBsaWVzIGlubGlu
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwODE5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBibWFs
bG9jL0FsZ29yaXRobS5oOgorICAgICAgICAoYm1hbGxvYzo6bWF4KToKKyAgICAgICAgKGJtYWxs
b2M6Om1pbik6CisgICAgICAgIChibWFsbG9jOjptYXNrKToKKyAgICAgICAgKGJtYWxsb2M6OnRl
c3QpOgorICAgICAgICAoYm1hbGxvYzo6aXNQb3dlck9mVHdvKToKKyAgICAgICAgKGJtYWxsb2M6
OnJvdW5kRG93blRvTXVsdGlwbGVPZik6CisgICAgICAgIChibWFsbG9jOjpzaXplT2YpOgorICAg
ICAgICAoYm1hbGxvYzo6Yml0Q291bnQpOgorICAgICAgICAoYm1hbGxvYzo6bG9nMik6CisgICAg
ICAgICogYm1hbGxvYy9CaXRzLmg6CisgICAgICAgIChibWFsbG9jOjpiaXRzQXJyYXlMZW5ndGgp
OgorICAgICAgICAqIGJtYWxsb2MvU2l6ZXMuaDoKKyAgICAgICAgKGJtYWxsb2M6OlNpemVzOjpt
YXNrU2l6ZUNsYXNzKToKKwogMjAxOC0xMC0yNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgQlBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKaW5kZXggZTM2NGRmNzNmMzRi
MTM2MjgyZGI5YjZiOGFmYjhkZjBjOWY3ZDA4Yi4uM2FiZWIyNjk3ZThiMTIyYTEyODkwZWUzODcx
OWZhNWQxMjkzOGFhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FycmF5UHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaApAQCAtNTgsNyArNTgsNyBAQCBjb25zdCBBcnJheU1vZGVzIFVpbnQzMkFycmF5
TW9kZSA9IDEgPDwgMjc7CiBjb25zdCBBcnJheU1vZGVzIEZsb2F0MzJBcnJheU1vZGUgPSAxIDw8
IDI4OwogY29uc3QgQXJyYXlNb2RlcyBGbG9hdDY0QXJyYXlNb2RlID0gMSA8PCAyOTsKIAotaW5s
aW5lIGNvbnN0ZXhwciBBcnJheU1vZGVzIGFzQXJyYXlNb2RlcyhJbmRleGluZ1R5cGUgaW5kZXhp
bmdNb2RlKQorY29uc3RleHByIEFycmF5TW9kZXMgYXNBcnJheU1vZGVzKEluZGV4aW5nVHlwZSBp
bmRleGluZ01vZGUpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPigxKSA8PCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXhpbmdNb2RlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKaW5kZXggYjlmODk5ZTJmYTU5OTg0YjUxMGFm
YjFjMTVmZTI4NzEzMjA4N2YwMy4uYmVhMDY1YWFlMTAyN2Y2MmUyMGVlZDhiZTRiZGY3ZTI3MTli
OTYxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdU
eXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgK
QEAgLTE5NSw3ICsxOTUsNyBAQCBpbmxpbmUgYm9vbCBzaG91bGRVc2VTbG93UHV0KEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUpCiAgICAgcmV0dXJuIGhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UoaW5k
ZXhpbmdUeXBlKTsKIH0KIAotaW5saW5lIGNvbnN0ZXhwciBib29sIGlzQ29weU9uV3JpdGUoSW5k
ZXhpbmdUeXBlIGluZGV4aW5nTW9kZSkKK2NvbnN0ZXhwciBib29sIGlzQ29weU9uV3JpdGUoSW5k
ZXhpbmdUeXBlIGluZGV4aW5nTW9kZSkKIHsKICAgICByZXR1cm4gaW5kZXhpbmdNb2RlICYgQ29w
eU9uV3JpdGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXRoQ29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoQ29tbW9uLmgK
aW5kZXggYTM5NzY2ZDBjYjRmMmUwZmRjOTg4ZTFkODMzNDRkZTA0NzM4OGY4YS4uZWRhM2ZhNTlm
YjVhNmRlZTYxNGRmNjJiNjc4N2Y1Yjk5OWQ1ODQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWF0aENvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hdGhDb21tb24uaApAQCAtMzUsMTMgKzM1LDEzIEBAIGRvdWJsZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk1hdGhQb3coZG91YmxlIHgsIGRvdWJsZSB5KSBXVEZfSU5URVJOQUw7
CiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbnQzMihkb3VibGUpIFdURl9JTlRF
Uk5BTDsKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93
KGRvdWJsZSkgV1RGX0lOVEVSTkFMOwogCi1pbmxpbmUgY29uc3RleHByIGRvdWJsZSBtYXhTYWZl
SW50ZWdlcigpCitjb25zdGV4cHIgZG91YmxlIG1heFNhZmVJbnRlZ2VyKCkKIHsKICAgICAvLyAy
IF4gNTMgLSAxCiAgICAgcmV0dXJuIDkwMDcxOTkyNTQ3NDA5OTEuMDsKIH0KIAotaW5saW5lIGNv
bnN0ZXhwciBkb3VibGUgbWluU2FmZUludGVnZXIoKQorY29uc3RleHByIGRvdWJsZSBtaW5TYWZl
SW50ZWdlcigpCiB7CiAgICAgLy8gLSgyIF4gNTMgLSAxKQogICAgIHJldHVybiAtOTAwNzE5OTI1
NDc0MDk5MS4wOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Rh
Y2tBbGlnbm1lbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25t
ZW50LmgKaW5kZXggNzRhNTA2NzVjODY4OGQyNzNmNGM2NDVhYTEwY2FhNTg5ZWRjMDg1NC4uNTEw
MjVjMDE3MzUzN2Y5NGYxYTEzMjQxYWY3OWY3MmI0MDJiMDE1MCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1lbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0FsaWdubWVudC5oCkBAIC0zMiw5ICszMiw5IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogLy8gTkIuIERpZmZlcmVudCBwbGF0Zm9ybXMgbWF5IGhhdmUgZGlm
ZmVyZW50IHJlcXVpcmVtZW50cyBoZXJlLiBCdXQgMTYgYnl0ZXMgaXMgdmVyeSBjb21tb24uCi1p
bmxpbmUgY29uc3RleHByIHVuc2lnbmVkIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSB7IHJldHVybiAx
NjsgfQorY29uc3RleHByIHVuc2lnbmVkIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSB7IHJldHVybiAx
NjsgfQogCi1pbmxpbmUgY29uc3RleHByIHVuc2lnbmVkIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCkKK2NvbnN0ZXhwciB1bnNpZ25lZCBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpCiB7CiAgICAg
cmV0dXJuIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0Jp
dG1hcC5oCmluZGV4IDM2MzM1ODcwZjk3MThmYWI3MzQ1ODQ2YTUxYjAxNWZlYzE2OGE4NTUuLmU0
MjMzNDU2YzcyMGMyZjJmMzM0ODBiNTgwMWIyNWFmMmViMGRkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCkBAIC0xMzMs
NyArMTMzLDcgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0
eXBlbmFtZSBXb3JkVHlwZT4KLWNvbnN0ZXhwciBpbmxpbmUgQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPjo6Qml0bWFwKCkKK2NvbnN0ZXhwciBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
OjpCaXRtYXAoKQogewogICAgIGNsZWFyQWxsKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9MRUJEZWNvZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKaW5kZXggZDk0
NDYwMzExNzQwNDI0MWNlYmJkMTZmMDJiNjFkZWVjN2ZhYWYxYy4uMmE1ZjkyODAyMjcyNWZiNDhj
YWQwMGZkNTdmMWNlYTcyYWM3MmUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTEVCRGVj
b2Rlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaApAQCAtMzYsNyArMzYsNyBA
QAogbmFtZXNwYWNlIFdURiB7IG5hbWVzcGFjZSBMRUJEZWNvZGVyIHsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWlubGluZSBjb25zdGV4cHIgc2l6ZV90IG1heEJ5dGVMZW5ndGgoKQorY29uc3Rl
eHByIHNpemVfdCBtYXhCeXRlTGVuZ3RoKCkKIHsKICAgICBjb25zdCBzaXplX3QgbnVtQml0cyA9
IHNpemVvZihUKSAqIENIQVJfQklUOwogICAgIHJldHVybiAobnVtQml0cyAtIDEpIC8gNyArIDE7
IC8vIG51bUJpdHMgLyA3IHJvdW5kaW5nIHVwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TWF0aEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCmluZGV4IDFiNjk3OGQ0
OTFjNzRlMTZhM2QxMjRjMWRlZmY4OGUzN2U5ZjhjOTYuLjA5Njg0M2IwZjQ2MjE4Y2RiODViY2Fm
MTBlMDM0NWJlM2ZjZDM4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKQEAgLTExOCwxMCArMTE4LDEwIEBA
IGlubGluZSBmbG9hdCByYWQyZ3JhZChmbG9hdCByKSB7IHJldHVybiByICogMjAwLjBmIC8gcGlG
bG9hdDsgfQogaW5saW5lIGZsb2F0IGdyYWQycmFkKGZsb2F0IGcpIHsgcmV0dXJuIGcgKiBwaUZs
b2F0IC8gMjAwLjBmOyB9CiAKIC8vIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1pbigpIHJldHVy
bnMgdGhlIHNtYWxsZXN0IHBvc2l0aXZlIHZhbHVlIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGlubGluZSBUIGRlZmF1bHRNaW5pbXVtRm9y
Q2xhbXAoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKTsgfQotdGVtcGxh
dGU8PiBjb25zdGV4cHIgaW5saW5lIGZsb2F0IGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAoKSB7IHJl
dHVybiAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOyB9Ci10ZW1wbGF0ZTw+IGNv
bnN0ZXhwciBpbmxpbmUgZG91YmxlIGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAoKSB7IHJldHVybiAt
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsgfQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3RleHByIGlubGluZSBUIGRlZmF1bHRNYXhpbXVtRm9yQ2xhbXAoKSB7IHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFQgZGVmYXVsdE1pbmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1pbigpOyB9Cit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBmbG9hdCBkZWZhdWx0TWlu
aW11bUZvckNsYW1wKCkgeyByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgo
KTsgfQordGVtcGxhdGU8PiBjb25zdGV4cHIgZG91YmxlIGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAo
KSB7IHJldHVybiAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsgfQordGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFQgZGVmYXVsdE1heGltdW1Gb3JDbGFtcCgpIHsgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBUIGNsYW1wVG8oZG91YmxlIHZhbHVlLCBUIG1pbiA9IGRlZmF1bHRNaW5pbXVt
Rm9yQ2xhbXA8VD4oKSwgVCBtYXggPSBkZWZhdWx0TWF4aW11bUZvckNsYW1wPFQ+KCkpCiB7CkBA
IC0xNzIsNyArMTcyLDcgQEAgaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihUIHgpCiAKIC8vIEV4
cGxpY2l0bHkgYWNjZXB0IDY0Yml0IHJlc3VsdCB3aGVuIGNsYW1waW5nIGRvdWJsZSB2YWx1ZS4K
IC8vIEtlZXAgaW4gbWluZCB0aGF0IGRvdWJsZSBjYW4gb25seSByZXByZXNlbnQgNTNiaXQgaW50
ZWdlciBwcmVjaXNlbHkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgaW5saW5lIFQg
Y2xhbXBUb0FjY2VwdGluZzY0KGRvdWJsZSB2YWx1ZSwgVCBtaW4gPSBkZWZhdWx0TWluaW11bUZv
ckNsYW1wPFQ+KCksIFQgbWF4ID0gZGVmYXVsdE1heGltdW1Gb3JDbGFtcDxUPigpKQordGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFQgY2xhbXBUb0FjY2VwdGluZzY0KGRvdWJsZSB2YWx1
ZSwgVCBtaW4gPSBkZWZhdWx0TWluaW11bUZvckNsYW1wPFQ+KCksIFQgbWF4ID0gZGVmYXVsdE1h
eGltdW1Gb3JDbGFtcDxUPigpKQogewogICAgIHJldHVybiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8
ZG91YmxlPihtYXgpKSA/IG1heCA6ICgodmFsdWUgPD0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtaW4p
KSA/IG1pbiA6IHN0YXRpY19jYXN0PFQ+KHZhbHVlKSk7CiB9CkBAIC0yNTAsMTAgKzI1MCwxMCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBpc0dyZWF0ZXJUaGFuTm9uWmVyb1Bv
d2VyT2ZUd28oVCB2YWx1ZSwgdW5zaWduZQogICAgIHJldHVybiAhISgodmFsdWUgPj4gMSkgPj4g
KHBvd2VyIC0gMSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgaW5saW5l
IGJvb2wgaXNMZXNzVGhhbihjb25zdCBUJiBhLCBjb25zdCBUJiBiKSB7IHJldHVybiBhIDwgYjsg
fQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGlubGluZSBib29sIGlzTGVzc1RoYW5F
cXVhbChjb25zdCBUJiBhLCBjb25zdCBUJiBiKSB7IHJldHVybiBhIDw9IGI7IH0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0dyZWF0ZXJUaGFuKGNvbnN0IFQm
IGEsIGNvbnN0IFQmIGIpIHsgcmV0dXJuIGEgPiBiOyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgaW5saW5lIGJvb2wgaXNHcmVhdGVyVGhhbkVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0
IFQmIGIpIHsgcmV0dXJuIGEgPj0gYjsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHBy
IGJvb2wgaXNMZXNzVGhhbihjb25zdCBUJiBhLCBjb25zdCBUJiBiKSB7IHJldHVybiBhIDwgYjsg
fQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgaXNMZXNzVGhhbkVxdWFsKGNv
bnN0IFQmIGEsIGNvbnN0IFQmIGIpIHsgcmV0dXJuIGEgPD0gYjsgfQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIGJvb2wgaXNHcmVhdGVyVGhhbihjb25zdCBUJiBhLCBjb25zdCBUJiBi
KSB7IHJldHVybiBhID4gYjsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wg
aXNHcmVhdGVyVGhhbkVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIpIHsgcmV0dXJuIGEgPj0g
YjsgfQogCiAjaWZuZGVmIFVJTlQ2NF9DCiAjaWYgQ09NUElMRVIoTVNWQykKQEAgLTMzMyw3ICsz
MzMsNyBAQCBpbmxpbmUgdm9pZCBkb3VibGVUb0ludGVnZXIoZG91YmxlIGQsIHVuc2lnbmVkIGxv
bmcgbG9uZyYgdmFsdWUpCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gRnJvbSBodHRwOi8vZ3JhcGhp
Y3Muc3RhbmZvcmQuZWR1L35zZWFuZGVyL2JpdGhhY2tzLmh0bWwjUm91bmRVcFBvd2VyT2YyCi1p
bmxpbmUgY29uc3RleHByIHVpbnQzMl90IHJvdW5kVXBUb1Bvd2VyT2ZUd28odWludDMyX3QgdikK
K2NvbnN0ZXhwciB1aW50MzJfdCByb3VuZFVwVG9Qb3dlck9mVHdvKHVpbnQzMl90IHYpCiB7CiAg
ICAgdi0tOwogICAgIHYgfD0gdiA+PiAxOwpAQCAtMzQ1LDcgKzM0NSw3IEBAIGlubGluZSBjb25z
dGV4cHIgdWludDMyX3Qgcm91bmRVcFRvUG93ZXJPZlR3byh1aW50MzJfdCB2KQogICAgIHJldHVy
biB2OwogfQogCi1pbmxpbmUgY29uc3RleHByIHVuc2lnbmVkIG1hc2tGb3JTaXplKHVuc2lnbmVk
IHNpemUpCitjb25zdGV4cHIgdW5zaWduZWQgbWFza0ZvclNpemUodW5zaWduZWQgc2l6ZSkKIHsK
ICAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvT3B0aW9uYWwuaCBiL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKaW5kZXggZTQ0Mzlk
YjgxNzM0OWJkODIxODM4ZTY5NTkwYmFlODYyZTIzZjk3Zi4uMWNiM2FhOGU3MTAwMjE5NjdhZWIx
Y2Y0ZjY4YmM0ZmRhNTQ3ZDgzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oCkBAIC0yMTUsMTggKzIxNSwxOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3Mgb3B0aW9uYWw8VCY+OwogbmFtZXNwYWNlIGRldGFpbF8g
ewogCiAvLyB3b3JrYXJvdW5kOiBzdGQgdXRpbGl0eSBmdW5jdGlvbnMgYXJlbid0IGNvbnN0ZXhw
ciB5ZXQKLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgY29uc3RleHByIFQmJiBjb25zdGV4cHJf
Zm9yd2FyZCh0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUmIHQpIF9fTk9F
WENFUFQKK3RlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgVCYmIGNvbnN0ZXhwcl9mb3J3YXJk
KHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYgdCkgX19OT0VYQ0VQVAog
ewogICByZXR1cm4gc3RhdGljX2Nhc3Q8VCYmPih0KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+
IGlubGluZSBjb25zdGV4cHIgVCYmIGNvbnN0ZXhwcl9mb3J3YXJkKHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYmIHQpIF9fTk9FWENFUFQKK3RlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgVCYmIGNvbnN0ZXhwcl9mb3J3YXJkKHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3Jl
ZmVyZW5jZTxUPjo6dHlwZSYmIHQpIF9fTk9FWENFUFQKIHsKICAgICBzdGF0aWNfYXNzZXJ0KCFz
dGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLCAiISEiKTsKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VCYmPih0KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBjb25zdGV4
cHIgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiYgY29uc3RleHByX21v
dmUoVCYmIHQpIF9fTk9FWENFUFQKK3RlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgdHlwZW5h
bWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiYgY29uc3RleHByX21vdmUoVCYmIHQp
IF9fTk9FWENFUFQKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjpyZW1v
dmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiY+KHQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvUHRyVGFnLmggYi9Tb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAppbmRleCA0YWE5N2ZmZTAwYWU3
ZDJkYjQwZDViYmNhMmViNjFmZDVjY2M5MmI0Li42ZThlZjY1YjcxNWVhY2ZkNWJmYzI2NGRmYjU2
YWRiYjdjYTdjNTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9QdHJUYWcuaApAQCAtODIsNDYgKzgyLDQ2IEBAIEZPUl9FQUNIX0FERElU
SU9OQUxfV1RGX1BUUlRBRyhXVEZfREVDTEFSRV9QVFJUQUcpCiBpbmxpbmUgY29uc3QgY2hhciog
dGFnRm9yUHRyKGNvbnN0IHZvaWQqKSB7IHJldHVybiAiPG5vIHRhZz4iOyB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZf
dDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRy
VHlwZT46OnZhbHVlPj4KLWlubGluZSBjb25zdGV4cHIgVCB0YWdDb2RlUHRyKFB0clR5cGUgcHRy
LCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9Citjb25zdGV4cHIgVCB0
YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihw
dHIpOyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFs
dWU+PgogaW5saW5lIFQgdGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9j
YXN0PFQ+KHB0cik7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgotaW5saW5l
IGNvbnN0ZXhwciBQdHJUeXBlIHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1
cm4gcHRyOyB9Citjb25zdGV4cHIgUHRyVHlwZSB0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJU
YWcpIHsgcmV0dXJuIHB0cjsgfQogCiB0ZW1wbGF0ZTxQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZh
bHVlPj4KIGlubGluZSBQdHJUeXBlIHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHB0
cjsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3Rk
Ojppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+Ci1pbmxpbmUgY29uc3RleHByIFQgdW50YWdD
b2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIp
OyB9Citjb25zdGV4cHIgVCB1bnRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgUHRyVGFn
LCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19w
b2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgVCB1bnRhZ0NvZGVQdHIoUHRyVHlwZSBw
dHIpICB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0
clR5cGU+Ojp2YWx1ZT4+Ci1pbmxpbmUgY29uc3RleHByIFB0clR5cGUgdW50YWdDb2RlUHRyKFB0
clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQorY29uc3RleHByIFB0clR5cGUgdW50
YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQogCiB0ZW1wbGF0
ZTxQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBQdHJUeXBlIHVudGFnQ29k
ZVB0cihQdHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Bv
aW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVl
Pj4KLWlubGluZSBjb25zdGV4cHIgVCByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZywg
UHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQorY29uc3RleHByIFQgcmV0
YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9j
YXN0PFQ+KHB0cik7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgUHRyVGFnLCBQdHJUYWcsIHR5
cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50
ZXI8UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBUIHJldGFnQ29kZVB0cihQdHJUeXBlIHB0cikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUHRy
VHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBl
Pjo6dmFsdWU+PgotaW5saW5lIGNvbnN0ZXhwciBQdHJUeXBlIHJldGFnQ29kZVB0cihQdHJUeXBl
IHB0ciwgUHRyVGFnLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQorY29uc3RleHByIFB0clR5cGUg
cmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcsIFB0clRhZykgeyByZXR1cm4gcHRyOyB9
CiAKIHRlbXBsYXRlPFB0clRhZywgUHRyVGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxp
bmUgUHRyVHlwZSByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHB0cjsgfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1l
PFQsIFB0clR5cGU+Ojp2YWx1ZT4+Ci1pbmxpbmUgY29uc3RleHByIFQgcmVtb3ZlQ29kZVB0clRh
ZyhQdHJUeXBlIHB0cikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KK2NvbnN0ZXhw
ciBUIHJlbW92ZUNvZGVQdHJUYWcoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxU
PihwdHIpOyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KLWlubGluZSBjb25z
dGV4cHIgUHRyVHlwZSByZW1vdmVDb2RlUHRyVGFnKFB0clR5cGUgcHRyKSB7IHJldHVybiBwdHI7
IH0KK2NvbnN0ZXhwciBQdHJUeXBlIHJlbW92ZUNvZGVQdHJUYWcoUHRyVHlwZSBwdHIpIHsgcmV0
dXJuIHB0cjsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgVCB0YWdDRnVuY3Rp
b25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oIGIvU291cmNlL1dU
Ri93dGYvU3RkTGliRXh0cmFzLmgKaW5kZXggODczMTViNWY2MjBkZWJkZjVmYzAyYTQ1NmVhNzZl
YWE2NTU4Y2MwNS4uN2U4ODE0NDYxZTc0MDhhM2JjNDY0MjNkODg1NTA1ZDg2ZWJjNjhlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgKQEAgLTE4OSw3ICsxODksNyBAQCBpbmxpbmUgc2l6ZV90IHJvdW5k
VXBUb011bHRpcGxlT2Yoc2l6ZV90IGRpdmlzb3IsIHNpemVfdCB4KQogICAgIHJldHVybiByb3Vu
ZFVwVG9NdWx0aXBsZU9mSW1wbChkaXZpc29yLCB4KTsKIH0KIAotdGVtcGxhdGU8c2l6ZV90IGRp
dmlzb3I+IGlubGluZSBjb25zdGV4cHIgc2l6ZV90IHJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZV90
IHgpCit0ZW1wbGF0ZTxzaXplX3QgZGl2aXNvcj4gY29uc3RleHByIHNpemVfdCByb3VuZFVwVG9N
dWx0aXBsZU9mKHNpemVfdCB4KQogewogICAgIHN0YXRpY19hc3NlcnQoZGl2aXNvciAmJiAhKGRp
dmlzb3IgJiAoZGl2aXNvciAtIDEpKSwgImRpdmlzb3IgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byEi
KTsKICAgICByZXR1cm4gcm91bmRVcFRvTXVsdGlwbGVPZkltcGwoZGl2aXNvciwgeCk7CkBAIC00
NDgsNyArNDQ4LDcgQEAgSXRlcmF0b3JUeXBlRHN0IG1lcmdlRGVkdXBsaWNhdGVkU29ydGVkKEl0
ZXJhdG9yVHlwZUxlZnQgbGVmdEJlZ2luLCBJdGVyYXRvclR5cGUKIC8vIFRoaXMgd29ya2Fyb3Vu
ZCBjYW4gYmUgcmVtb3ZlZCBhZnRlciAyMDE5LTA0IGFuZCBhbGwgdXNlcnMgb2YgV1RGOjp0aWUg
Y2FuIGJlIGNvbnZlcnRlZCB0byBzdGQ6OnRpZQogLy8gRm9yIG1vcmUgaW5mbyBzZWU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA2OTIgYW5kIGh0dHBzOi8vZ2Nj
LmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTY1OTc4CiB0ZW1wbGF0ZSA8Y2xhc3Mg
Li4uQXJncz4KLWlubGluZSBjb25zdGV4cHIgc3RkOjp0dXBsZTxBcmdzJi4uLj4gdGllKEFyZ3Mm
Li4uIHZhbHVlcykKK2NvbnN0ZXhwciBzdGQ6OnR1cGxlPEFyZ3MmLi4uPiB0aWUoQXJncyYuLi4g
dmFsdWVzKQogewogICAgIHJldHVybiBzdGQ6OnR1cGxlPEFyZ3MmLi4uPih2YWx1ZXMuLi4pOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmFyaWFudC5oIGIvU291cmNlL1dURi93dGYv
VmFyaWFudC5oCmluZGV4IGY2NDA1YWExODhkMWVhZjYwYzFlNTU0ZmI1YjJmZTA5YzkzNjgwOWIu
LmY3OWNiMWY1NGI4YWQ5MzBiYTIzOWI1YTA0MDg2MGQyMzBmNGRjMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgKQEAg
LTIwMjcsMTIgKzIwMjcsMTIgQEAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb24KIAogc3RydWN0IE1v
bm9zdGF0ZXt9OwogCi1jb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShNb25vc3RhdGUg
Y29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gdHJ1ZTt9Ci1jb25zdGV4cHIgaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1
cm4gZmFsc2U7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPj0oTW9ub3N0YXRlIGNv
bnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQotY29uc3RleHByIGlubGluZSBi
b29sIG9wZXJhdG9yPD0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJu
IHRydWU7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPihNb25vc3RhdGUgY29uc3Qm
LE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFsc2U7fQotY29uc3RleHByIGlubGluZSBib29s
IG9wZXJhdG9yPChNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFs
c2U7fQorY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShNb25vc3RhdGUgY29uc3QmLCBNb25vc3Rh
dGUgY29uc3QmKSB7IHJldHVybiB0cnVlOyB9Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KE1v
bm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIGZhbHNlOyB9Citjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYp
IHsgcmV0dXJuIHRydWU7IH0KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oTW9ub3N0YXRlIGNv
bnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfQorY29uc3RleHByIGJvb2wg
b3BlcmF0b3I+KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIGZh
bHNlOyB9Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoTW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0
YXRlIGNvbnN0JikgeyByZXR1cm4gZmFsc2U7IH0KIAogc3RydWN0IF9faGFzaF92aXNpdG9yewog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRl
eCA0YzQ1ZjVjM2U1Y2VkYTE5YTljMTQxMjczNzRhNzRiNzNjYjNjYjhhLi5iYjFjMDM0NGVjY2Nk
OTA2OGZlMWMyODA0ODc5MzQxYjAxMzMwZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApA
QCAtNzczLDcgKzc3Myw3IEBAIGlubGluZSBTdHJpbmdJbXBsU2hhcGU6OlN0cmluZ0ltcGxTaGFw
ZSh1bnNpZ25lZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zCiB7CiB9CiAKLXRlbXBs
YXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBpbmxpbmUgY29uc3RleHByIFN0cmluZ0ltcGxT
aGFwZTo6U3RyaW5nSW1wbFNoYXBlKHVuc2lnbmVkIHJlZkNvdW50LCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIHVuc2lnbmVkIGhhc2hB
bmRGbGFncywgQ29uc3RydWN0V2l0aENvbnN0RXhwclRhZykKK3RlbXBsYXRlPHVuc2lnbmVkIGNo
YXJhY3RlckNvdW50PiBjb25zdGV4cHIgU3RyaW5nSW1wbFNoYXBlOjpTdHJpbmdJbXBsU2hhcGUo
dW5zaWduZWQgcmVmQ291bnQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgY2hhciAoJmNoYXJhY3Rl
cnMpW2NoYXJhY3RlckNvdW50XSwgdW5zaWduZWQgaGFzaEFuZEZsYWdzLCBDb25zdHJ1Y3RXaXRo
Q29uc3RFeHByVGFnKQogICAgIDogbV9yZWZDb3VudChyZWZDb3VudCkKICAgICAsIG1fbGVuZ3Ro
KGxlbmd0aCkKICAgICAsIG1fZGF0YThDaGFyKGNoYXJhY3RlcnMpCkBAIC03ODEsNyArNzgxLDcg
QEAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+IGlubGluZSBjb25zdGV4cHIgU3Ry
aW5nSW1wbFNoYXBlOjpTdHJpbmdJbXBsU2gKIHsKIH0KIAotdGVtcGxhdGU8dW5zaWduZWQgY2hh
cmFjdGVyQ291bnQ+IGlubGluZSBjb25zdGV4cHIgU3RyaW5nSW1wbFNoYXBlOjpTdHJpbmdJbXBs
U2hhcGUodW5zaWduZWQgcmVmQ291bnQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgY2hhcjE2X3Qg
KCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIHVuc2lnbmVkIGhhc2hBbmRGbGFncywgQ29u
c3RydWN0V2l0aENvbnN0RXhwclRhZykKK3RlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50
PiBjb25zdGV4cHIgU3RyaW5nSW1wbFNoYXBlOjpTdHJpbmdJbXBsU2hhcGUodW5zaWduZWQgcmVm
Q291bnQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgY2hhcjE2X3QgKCZjaGFyYWN0ZXJzKVtjaGFy
YWN0ZXJDb3VudF0sIHVuc2lnbmVkIGhhc2hBbmRGbGFncywgQ29uc3RydWN0V2l0aENvbnN0RXhw
clRhZykKICAgICA6IG1fcmVmQ291bnQocmVmQ291bnQpCiAgICAgLCBtX2xlbmd0aChsZW5ndGgp
CiAgICAgLCBtX2RhdGExNkNoYXIoY2hhcmFjdGVycykKQEAgLTExNTksMTMgKzExNTksMTMgQEAg
aW5saW5lIHZvaWQgU3RyaW5nSW1wbDo6YXNzZXJ0SGFzaElzQ29ycmVjdCgpIGNvbnN0CiAgICAg
QVNTRVJUKGV4aXN0aW5nSGFzaCgpID09IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNr
VG9wOEJpdHMoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpKTsKIH0KIAotdGVtcGxhdGU8dW5zaWdu
ZWQgY2hhcmFjdGVyQ291bnQ+IGlubGluZSBjb25zdGV4cHIgU3RyaW5nSW1wbDo6U3RhdGljU3Ry
aW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFj
dGVyQ291bnRdLCBTdHJpbmdLaW5kIHN0cmluZ0tpbmQpCit0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFy
YWN0ZXJDb3VudD4gY29uc3RleHByIFN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGw6OlN0YXRp
Y1N0cmluZ0ltcGwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSwgU3Ry
aW5nS2luZCBzdHJpbmdLaW5kKQogICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRGbGFn
SXNTdGF0aWNTdHJpbmcsIGNoYXJhY3RlckNvdW50IC0gMSwgY2hhcmFjdGVycywKICAgICAgICAg
c19oYXNoRmxhZzhCaXRCdWZmZXIgfCBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCB8IHN0cmluZ0tp
bmQgfCBCdWZmZXJJbnRlcm5hbCB8IChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFu
ZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCksIENvbnN0cnVjdFdpdGhD
b25zdEV4cHIpCiB7CiB9CiAKLXRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBpbmxp
bmUgY29uc3RleHByIFN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0lt
cGwoY29uc3QgY2hhcjE2X3QgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIFN0cmluZ0tp
bmQgc3RyaW5nS2luZCkKK3RlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4
cHIgU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbChjb25zdCBj
aGFyMTZfdCAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSwgU3RyaW5nS2luZCBzdHJpbmdL
aW5kKQogICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcs
IGNoYXJhY3RlckNvdW50IC0gMSwgY2hhcmFjdGVycywKICAgICAgICAgc19oYXNoRmxhZ0RpZFJl
cG9ydENvc3QgfCBzdHJpbmdLaW5kIHwgQnVmZmVySW50ZXJuYWwgfCAoU3RyaW5nSGFzaGVyOjpj
b21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291
bnQpLCBDb25zdHJ1Y3RXaXRoQ29uc3RFeHByKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGdvcml0aG0uaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGht
LmgKaW5kZXggZTRlNTFhNTNhM2UxYTBhOTkzNjJiYmJjODNjOGFiNWIwMTBmMWY3Ny4uNjc2NDNi
YWJkZmQzMDRhOTk2OGViNTBkNWZiNWY3ZDA0Mzk3ODZkZiAxMDA2NDQKLS0tIGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
Z29yaXRobS5oCkBAIC0zOCwxNyArMzgsMTcgQEAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogLy8g
VmVyc2lvbnMgb2YgbWluIGFuZCBtYXggdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIGNvbXBpbGUt
dGltZSBjb25zdGFudHMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIFQg
bWF4KFQgYSwgVCBiKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFQgbWF4KFQgYSwg
VCBiKQogewogICAgIHJldHVybiBhID4gYiA/IGEgOiBiOwogfQogICAgIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBUIG1pbihUIGEsIFQgYikKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBUIG1pbihUIGEsIFQgYikKIHsKICAgICByZXR1cm4gYSA8IGIgPyBh
IDogYjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBUIG1hc2so
VCB2YWx1ZSwgdWludHB0cl90IG1hc2spCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
VCBtYXNrKFQgdmFsdWUsIHVpbnRwdHJfdCBtYXNrKQogewogICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFQpID09IHNpemVvZih1aW50cHRyX3QpLCAic2l6ZW9mKFQpIG11c3QgYmUgZXF1YWwgdG8g
c2l6ZW9mKHVpbnRwdHJfdCkuIik7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4odmFsdWUpICYgbWFzayk7CkBAIC01OSwxMyArNTksMTMgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIG1hc2soVCogdmFsdWUsIHVpbnRwdHJfdCBtYXNrKQog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4odmFsdWUpICYgbWFzayk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25z
dGV4cHIgYm9vbCB0ZXN0KFQgdmFsdWUsIHVpbnRwdHJfdCBtYXNrKQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIGJvb2wgdGVzdChUIHZhbHVlLCB1aW50cHRyX3QgbWFzaykKIHsKICAg
ICByZXR1cm4gISEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSAmIG1hc2spOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWlubGluZSBjb25zdGV4cHIgYm9vbCBpc1Bvd2Vy
T2ZUd28oVCBzaXplKQorY29uc3RleHByIGJvb2wgaXNQb3dlck9mVHdvKFQgc2l6ZSkKIHsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiIik7CiAgICAgcmV0
dXJuIHNpemUgJiYgIShzaXplICYgKHNpemUgLSAxKSk7CkBAIC0xMDIsNyArMTAyLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmREb3duVG9NdWx0aXBsZU9mKHNpemVfdCBk
aXZpc29yLCBUIHgpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4obWFzayhyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oeCksIH4oZGl2aXNvciAtIDF1bCkpKTsKIH0KIAotdGVtcGxh
dGU8c2l6ZV90IGRpdmlzb3IsIHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgVCByb3VuZERv
d25Ub011bHRpcGxlT2YoVCB4KQordGVtcGxhdGU8c2l6ZV90IGRpdmlzb3IsIHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBUIHJvdW5kRG93blRvTXVsdGlwbGVPZihUIHgpCiB7CiAgICAgc3RhdGljX2Fz
c2VydChpc1Bvd2VyT2ZUd28oZGl2aXNvciksICInZGl2aXNvcicgbXVzdCBiZSBhIHBvd2VyIG9m
IHR3by4iKTsKICAgICByZXR1cm4gcm91bmREb3duVG9NdWx0aXBsZU9mKGRpdmlzb3IsIHgpOwpA
QCAtMTI5LDEyICsxMjksMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmRV
cFRvTXVsdGlwbGVPZk5vblBvd2VyT2ZUd28oc2l6ZV90IGRpdmlzb3IsIFQKIAogLy8gVmVyc2lv
biBvZiBzaXplb2YgdGhhdCByZXR1cm5zIDAgZm9yIGVtcHR5IGNsYXNzZXMuCiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgc2l6ZV90IHNpemVPZigpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjb25zdGV4cHIgc2l6ZV90IHNpemVPZigpCiB7CiAgICAgcmV0dXJuIHN0ZDo6
aXNfZW1wdHk8VD46OnZhbHVlID8gMCA6IHNpemVvZihUKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIGNvbnN0ZXhwciBzaXplX3QgYml0Q291bnQoKQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIHNpemVfdCBiaXRDb3VudCgpCiB7CiAgICAgcmV0dXJuIHNpemVvZihU
KSAqIDg7CiB9CkBAIC0xNTYsNyArMTU2LDcgQEAgX19mb3JjZWlubGluZSBjb25zdGV4cHIgdW5z
aWduZWQgbG9uZyBfX2J1aWx0aW5fY2x6bCh1bnNpZ25lZCBsb25nIHZhbHVlKQogfQogI2VuZGlm
CiAKLWlubGluZSBjb25zdGV4cHIgdW5zaWduZWQgbG9uZyBsb2cyKHVuc2lnbmVkIGxvbmcgdmFs
dWUpCitjb25zdGV4cHIgdW5zaWduZWQgbG9uZyBsb2cyKHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7
CiAgICAgcmV0dXJuIGJpdENvdW50PHVuc2lnbmVkIGxvbmc+KCkgLSAxIC0gX19idWlsdGluX2Ns
emwodmFsdWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CaXRzLmgg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JpdHMuaAppbmRleCA4YmRkMzQ0NGJmNmJlZTRjNWQw
N2JlZDAwZTJmY2E4NTllMzliZmZjLi5jNzFlZGFmMTlmYmVmYzFhYjIwY2FlZDA2NTEwM2QzYTM4
MGZlZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JpdHMuaAorKysgYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JpdHMuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3Bh
Y2UgYm1hbGxvYyB7CiAKLWNvbnN0ZXhwciBpbmxpbmUgc2l6ZV90IGJpdHNBcnJheUxlbmd0aChz
aXplX3QgbnVtQml0cykgeyByZXR1cm4gKG51bUJpdHMgKyAzMSkgLyAzMjsgfQorY29uc3RleHBy
IHNpemVfdCBiaXRzQXJyYXlMZW5ndGgoc2l6ZV90IG51bUJpdHMpIHsgcmV0dXJuIChudW1CaXRz
ICsgMzEpIC8gMzI7IH0KIAogY2xhc3MgQml0c1dvcmRWaWV3IHsKIHB1YmxpYzoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvU2l6ZXMuaAppbmRleCAwOTRlZTJlOTYzZDJhNmFkOGU5MGYxMTVmMmI1NzJmNzZjMWFiZDAz
Li5mNzVmN2U4ZmNjN2Y2N2RiZDUwM2M3ODljOGZjODU0MGI1MGMxNGM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9TaXplcy5oCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBTaXplcyB7CiAgICAgCiAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBtYXNrU2l6ZUNsYXNzQ291bnQgPSBtYXNrU2l6ZUNsYXNzTWF4
IC8gYWxpZ25tZW50OwogCi0gICAgaW5saW5lIGNvbnN0ZXhwciBzaXplX3QgbWFza1NpemVDbGFz
cyhzaXplX3Qgc2l6ZSkKKyAgICBjb25zdGV4cHIgc2l6ZV90IG1hc2tTaXplQ2xhc3Moc2l6ZV90
IHNpemUpCiAgICAgewogICAgICAgICAvLyBXZSBtYXNrIHRvIGFjY29tbW9kYXRlIHplcm8uCiAg
ICAgICAgIHJldHVybiBtYXNrKChzaXplIC0gMSkgLyBhbGlnbm1lbnQsIG1hc2tTaXplQ2xhc3ND
b3VudCAtIDEpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>