<?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>227203</bug_id>
          
          <creation_ts>2021-06-20 21:53:28 -0700</creation_ts>
          <short_desc>Add ARM64 SBFX and SBFIZ to instruction selector</short_desc>
          <delta_ts>2021-06-29 11:41:38 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yijia Huang">yijia_huang</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1771216</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-20 21:53:28 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773328</commentid>
    <comment_count>1</comment_count>
      <attachid>432454</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-28 23:02:10 -0700</bug_when>
    <thetext>Created attachment 432454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773329</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-28 23:02:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/79899430&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773420</commentid>
    <comment_count>3</comment_count>
      <attachid>432485</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-29 09:24:54 -0700</bug_when>
    <thetext>Created attachment 432485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773437</commentid>
    <comment_count>4</comment_count>
      <attachid>432485</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-29 10:10:54 -0700</bug_when>
    <thetext>Comment on attachment 432485
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +            1. Itroduce a strength reduction rule for sign extending bitfield.
&gt; +            2. Add Signed Bitfield Extract (SBFX) and Signed Bitfield Insert 
&gt; +               in Zero (SBFIZ) to Air opcode to serve intruciton selector.

Two small typos here:

Itroduce -&gt; Introduce
intruciton -&gt; instruction

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        According to Bit Twiddling Hacks, there are two ways to sign extends bitfield.

Typo: 

sign extends bitfield -&gt; sign extend bitfields</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773440</commentid>
    <comment_count>5</comment_count>
      <attachid>432485</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-29 10:20:19 -0700</bug_when>
    <thetext>Comment on attachment 432485
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:35
&gt; +            Turn this: ((bf &amp; mask1) ^ mask2) - mask2 
&gt; +            Into this: (bf &lt;&lt; amount) &gt;&gt; amount

Wow, this is super cool.

You should at some point also add a reduction for bitfield zero-extend  I mean, bitfield zero-extend is a funny way of saying &quot;x &amp; mask&quot; where mask is !(mask &amp; (mask + 1)).  You can also say it by doing &quot;(x &lt;&lt; amount) &gt;&gt; amount&quot;, but that&apos;s not the canonical form.  Totally separate from this patch though.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3036
&gt; +                if (left-&gt;opcode() != SShr || !canBeInternal(left))

A lot of the canBeInternal calls don&apos;t pass my sniff test.  It&apos;s not important for you to change this in this patch, but we should reconsider all of these eventually.

Let&apos;s just take this one as an example.

Say you have a program that does the following (capital letters are constants):

a = x &lt;&lt; C
b = a &gt;&gt; C
c = b &lt;&lt; D

print(a)
print(b)
print(c)

Clearly, the pattern won&apos;t match because of !canBeInternal for a and b.  So, this would emit three separate instructions.  But what if we removed canBeInternal?  It would still be just three separate instructions, and they wouldn&apos;t be any more expensive.  Now imagine if we remove the print(b), above.  Then, with the canBeInternal check, we&apos;re emitting three instructions.  Without the canBeInternal check, we&apos;d emit only two (x &lt;&lt; C and SBFIZ to compute c).  And that would be less expensive.

Basically, to decide if canBeInternal is profitable or not, you want to imagine a program where every internal value is actually used elsewhere, and then ask yourself: would the code I generate with my pattern be worse than without my pattern for that code if I never checked canBeInternal?  If the answer is that the pattern doesn&apos;t cause worst code generation in the all-internals-are-captured case, then you don&apos;t want canBeInternal checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773441</commentid>
    <comment_count>6</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-29 10:22:31 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; Comment on attachment 432485 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432485&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:11
&gt; &gt; +            1. Itroduce a strength reduction rule for sign extending bitfield.
&gt; &gt; +            2. Add Signed Bitfield Extract (SBFX) and Signed Bitfield Insert 
&gt; &gt; +               in Zero (SBFIZ) to Air opcode to serve intruciton selector.
&gt; 
&gt; Two small typos here:
&gt; 
&gt; Itroduce -&gt; Introduce
&gt; intruciton -&gt; instruction
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:16
&gt; &gt; +        According to Bit Twiddling Hacks, there are two ways to sign extends bitfield.
&gt; 
&gt; Typo: 
&gt; 
&gt; sign extends bitfield -&gt; sign extend bitfields

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773442</commentid>
    <comment_count>7</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-29 10:22:51 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; Comment on attachment 432485 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432485&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:35
&gt; &gt; +            Turn this: ((bf &amp; mask1) ^ mask2) - mask2 
&gt; &gt; +            Into this: (bf &lt;&lt; amount) &gt;&gt; amount
&gt; 
&gt; Wow, this is super cool.
&gt; 
&gt; You should at some point also add a reduction for bitfield zero-extend  I
&gt; mean, bitfield zero-extend is a funny way of saying &quot;x &amp; mask&quot; where mask is
&gt; !(mask &amp; (mask + 1)).  You can also say it by doing &quot;(x &lt;&lt; amount) &gt;&gt;
&gt; amount&quot;, but that&apos;s not the canonical form.  Totally separate from this
&gt; patch though.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3036
&gt; &gt; +                if (left-&gt;opcode() != SShr || !canBeInternal(left))
&gt; 
&gt; A lot of the canBeInternal calls don&apos;t pass my sniff test.  It&apos;s not
&gt; important for you to change this in this patch, but we should reconsider all
&gt; of these eventually.
&gt; 
&gt; Let&apos;s just take this one as an example.
&gt; 
&gt; Say you have a program that does the following (capital letters are
&gt; constants):
&gt; 
&gt; a = x &lt;&lt; C
&gt; b = a &gt;&gt; C
&gt; c = b &lt;&lt; D
&gt; 
&gt; print(a)
&gt; print(b)
&gt; print(c)
&gt; 
&gt; Clearly, the pattern won&apos;t match because of !canBeInternal for a and b.  So,
&gt; this would emit three separate instructions.  But what if we removed
&gt; canBeInternal?  It would still be just three separate instructions, and they
&gt; wouldn&apos;t be any more expensive.  Now imagine if we remove the print(b),
&gt; above.  Then, with the canBeInternal check, we&apos;re emitting three
&gt; instructions.  Without the canBeInternal check, we&apos;d emit only two (x &lt;&lt; C
&gt; and SBFIZ to compute c).  And that would be less expensive.
&gt; 
&gt; Basically, to decide if canBeInternal is profitable or not, you want to
&gt; imagine a program where every internal value is actually used elsewhere, and
&gt; then ask yourself: would the code I generate with my pattern be worse than
&gt; without my pattern for that code if I never checked canBeInternal?  If the
&gt; answer is that the pattern doesn&apos;t cause worst code generation in the
&gt; all-internals-are-captured case, then you don&apos;t want canBeInternal checks.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773456</commentid>
    <comment_count>8</comment_count>
      <attachid>432500</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-29 10:48:46 -0700</bug_when>
    <thetext>Created attachment 432500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773475</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-29 11:41:36 -0700</bug_when>
    <thetext>Committed r279378 (239243@main): &lt;https://commits.webkit.org/239243@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432500.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432454</attachid>
            <date>2021-06-28 23:02:10 -0700</date>
            <delta_ts>2021-06-29 09:24:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227203-20210629010208.patch</filename>
            <type>text/plain</type>
            <size>24561</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
YjBlYzcxNzhiNGM3NDI5MzNlYjA3Zjk1MjM4Y2M0MDFjOTZhN2MzLi44NThhZGUzMzkyNDVjNGU2
OTk3MzJiOWEzNGQ0ZDBiOGQyOWYzZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAyMS0wNi0yOCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXNlIFNCWCBhbmQgU0JGSVogc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnNiZml6MzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzYmZpejY0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c2JmeDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6c2JmeDY0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgor
ICAgICAgICAoSlNDOjp0ZXN0U0JGSVozMik6CisgICAgICAgIChKU0M6OnRlc3RTQkZJWjY0KToK
KyAgICAgICAgKEpTQzo6dGVzdFNCRlgzMik6CisgICAgICAgIChKU0M6OnRlc3RTQkZYNjQpOgor
ICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKGFkZEJp
dFRlc3RzKToKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0U0JGSVoz
Mik6CisgICAgICAgICh0ZXN0U0JGSVo2NCk6CisgICAgICAgICh0ZXN0U0JGWDMyKToKKyAgICAg
ICAgKHRlc3RTQkZYNjQpOgorCiAyMDIxLTA2LTI4ICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5n
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0byBpbnN0cnVjdGlvbiBz
ZWxlY3RvciB0byB1c2UgQklDIHN1cHBvcnRlZCBieSBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCAwODkx
NTk1YjRkYWFlMzRkZjdkZmU3MzdmMjA4YjBmMDFiNzIzNWFkLi5jYjI2OTBmNzZjMjQ0YzhiN2Ey
ZDk5MDIyMGFkZDBmMGQ3M2IwNTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtNDQ4LDcgKzQ0OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZGVzdCwgZGVzdCwgZGF0YVRlbXBS
ZWdpc3Rlcik7CiAgICAgfQogCi0gICAgLy8gQml0IE9wZXJhdGlvbnM6CisgICAgLy8gQml0IG9w
ZXJhdGlvbnM6CiAgICAgdm9pZCBleHRyYWN0VW5zaWduZWRCaXRmaWVsZDMyKFJlZ2lzdGVySUQg
c3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnViZng8MzI+KGRlc3QsIHNyYywgbHNiLm1f
dmFsdWUsIHdpZHRoLm1fdmFsdWUpOwpAQCAtNTE5LDYgKzUxOSwyNiBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmJmeGlsPDY0PihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5t
X3ZhbHVlKTsKICAgICB9CiAKKyAgICB2b2lkIHNiZml6MzIoUmVnaXN0ZXJJRCBzcmMsIFRydXN0
ZWRJbW0zMiBsc2IsIFRydXN0ZWRJbW0zMiB3aWR0aCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc2JmaXo8MzI+KGRlc3QsIHNyYywgbHNiLm1fdmFsdWUsIHdp
ZHRoLm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2JmaXo2NChSZWdpc3RlcklEIHNyYywg
VHJ1c3RlZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRoLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zYmZpejw2ND4oZGVzdCwgc3JjLCBsc2IubV92YWx1
ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzYmZ4MzIoUmVnaXN0ZXJJRCBz
cmMsIFRydXN0ZWRJbW0zMiBsc2IsIFRydXN0ZWRJbW0zMiB3aWR0aCwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2JmeDwzMj4oZGVzdCwgc3JjLCBsc2IubV92
YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzYmZ4NjQoUmVnaXN0ZXJJ
RCBzcmMsIFRydXN0ZWRJbW0zMiBsc2IsIFRydXN0ZWRJbW0zMiB3aWR0aCwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2JmeDw2ND4oZGVzdCwgc3JjLCBsc2Iu
bV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfSAgICAKKwogICAgIHZvaWQgY2xlYXJCaXQ2
NChSZWdpc3RlcklEIGJpdFRvQ2xlYXIsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoRm9yTWFzayA9IEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBpZiAoc2NyYXRjaEZv
ck1hc2sgPT0gSW52YWxpZEdQUlJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKaW5kZXggNTg2M2JhNTBmNzY2NWVkOGQ0ZTQyMDkwMmVhN2VjODgzNzI3
NTQ1Yi4uNmQ3MDFlMWU3ZTY1M2Y3ZDc5NzcyYWY5OGY4NjlkMWI2YzBhMGUzOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTE0NTEsNiArMTQ1
MSwxMjUgQEAgdm9pZCB0ZXN0T3JOb3Q2NCgpCiAgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ2
NF90Pih0ZXN0LCAwVUxMLCBtYXNrKSwgfm1hc2spOwogICAgIH0KIH0KKwordm9pZCB0ZXN0U0JG
SVozMigpCit7CisgICAgdWludDMyX3Qgc3JjID0gMHhmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2
NCB9OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0
aCA6IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNi
ICsgd2lkdGggPCAzMikgeworICAgICAgICAgICAgICAgIGF1dG8gc2JmaXozMiA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5zYmZpejMyKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBiZiA9IHNyYzsKKyAgICAgICAgICAg
ICAgICBpbnQzMl90IG1hc2sxID0gKDEgPDwgd2lkdGgpIC0gMTsKKyAgICAgICAgICAgICAgICBp
bnQzMl90IG1hc2syID0gMSA8PCAod2lkdGggLSAxKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90
IGJmc3ggPSAoKGJmICYgbWFzazEpIF4gbWFzazIpIC0gbWFzazI7CisKKyAgICAgICAgICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oc2JmaXozMiwgc3JjKSwgYmZzeCA8PCBsc2IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RTQkZJWjY0KCkK
K3sKKyAgICBpbnQ2NF90IHNyYyA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2
NCB9OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0
aCA6IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNi
ICsgd2lkdGggPCA2NCkgeworICAgICAgICAgICAgICAgIGF1dG8gc2JmaXo2NCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5zYmZpejY0KEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50NjRfdCBiZiA9IHNyYzsKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IGFtb3VudCA9IENIQVJfQklUICogc2l6ZW9mKGJmKSAtIHdpZHRoOworICAg
ICAgICAgICAgICAgIGludDY0X3QgYmZzeCA9IChiZiA8PCBhbW91bnQpID4+IGFtb3VudDsKKwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90PihzYmZpejY0LCBzcmMpLCBi
ZnN4IDw8IGxzYik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
dGVzdFNCRlgzMigpCit7CisgICAgaW50MzJfdCBzcmMgPSAweGYwZjBmMGYwOworICAgIFZlY3Rv
cjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywgMzAsIDMxLCAzMiwgNDIsIDU2LCA2Miwg
NjMsIDY0IH07CisgICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKKyAgICAgICAgZm9yIChhdXRv
IHdpZHRoIDogaW1tcykgeworICAgICAgICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAm
JiBsc2IgKyB3aWR0aCA8IDMyKSB7CisgICAgICAgICAgICAgICAgYXV0byBzYmZ4MzIgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQuc2JmeDMyKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBiZiA9IHNyYyA+PiBsc2I7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBtYXNrMSA9ICgxIDw8IHdpZHRoKSAtIDE7CisgICAgICAg
ICAgICAgICAgaW50MzJfdCBtYXNrMiA9IDEgPDwgKHdpZHRoIC0gMSk7CisgICAgICAgICAgICAg
ICAgaW50MzJfdCBiZnN4ID0gKChiZiAmIG1hc2sxKSBeIG1hc2syKSAtIG1hc2syOworCisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KHNiZngzMiwgc3JjKSwgYmZzeCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFNCRlg2NCgp
Cit7CisgICAgaW50NjRfdCBzcmMgPSAweGYwZjBmMGYwZjBmMGYwZjA7CisgICAgVmVjdG9yPHVp
bnQzMl90PiBpbW1zID0geyAwLCAxLCA1LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2Mywg
NjQgfTsKKyAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgeworICAgICAgICBmb3IgKGF1dG8gd2lk
dGggOiBpbW1zKSB7CisgICAgICAgICAgICBpZiAobHNiID49IDAgJiYgd2lkdGggPiAwICYmIGxz
YiArIHdpZHRoIDwgNjQpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNiZng2NCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5zYmZ4NjQoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGxzYiksIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIod2lkdGgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGJmID0gc3JjID4+IGxzYjsKKyAgICAg
ICAgICAgICAgICBpbnQ2NF90IGFtb3VudCA9IENIQVJfQklUICogc2l6ZW9mKGJmKSAtIHdpZHRo
OworICAgICAgICAgICAgICAgIGludDY0X3QgYmZzeCA9IChiZiA8PCBhbW91bnQpID4+IGFtb3Vu
dDsKKworICAgICAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90PihzYmZ4NjQsIHNy
YyksIGJmc3gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiAjZW5kaWYK
IAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKQEAgLTM2MzYsNiAr
Mzc1NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVB
RF9TQUZFVFlfQU5BTFlTSVMKIAogICAgIFJVTih0ZXN0T3JOb3QzMigpKTsKICAgICBSVU4odGVz
dE9yTm90NjQoKSk7CisKKyAgICBSVU4odGVzdFNCRklaMzIoKSk7CisgICAgUlVOKHRlc3RTQkZJ
WjY0KCkpOworICAgIFJVTih0ZXN0U0JGWDMyKCkpOworICAgIFJVTih0ZXN0U0JGWDY0KCkpOwog
I2VuZGlmCiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDZmMmViNmFmODRmNmI5
MGJjMTExZGM3ZTJmMDljNmMwY2ExMTI1MWYuLjc0Nzk4NDNlZTA4ZDEzNGQ0ZGQzYTQyYTg5Mjc2
Mjg5ODM1OGEwZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CkBAIC0yOTk4LDcgKzI5OTgsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAvLyBVQkZJWiBQ
YXR0ZXJuOiBkID0gKG4gJiBtYXNrKSA8PCBsc2IgCiAgICAgICAgICAgICAvLyBXaGVyZTogbWFz
ayA9ICgxIDw8IHdpZHRoKSAtIDEKLSAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kVUJGWiA9IFsm
XSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kVUJGSVogPSBbJl0gKCkg
LT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9y
VHlwZShJbnNlcnRVbnNpZ25lZEJpdGZpZWxkSW5aZXJvMzIsIEluc2VydFVuc2lnbmVkQml0Zmll
bGRJblplcm82NCwgbV92YWx1ZS0+dHlwZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwgQXJnOjpUbXApKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDI0LDcgKzMwMjQsNDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgIGlmICh0cnlBcHBlbmRVQkZaKCkpCisgICAgICAgICAgICBpZiAodHJ5QXBw
ZW5kVUJGSVooKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIFNC
RklaIFBhdHRlcm46IGQgPSAoKHNyYyA8PCBhbW91bnQpID4+IGFtb3VudCkgPDwgbHNiCisgICAg
ICAgICAgICAvLyB3aGVyZTogYW1vdW50ID0gZGF0YXNpemUgLSB3aWR0aAorICAgICAgICAgICAg
YXV0byB0cnlBcHBlbmRTQkZJWiA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBB
aXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKFNiZml6MzIsIFNiZml6NjQsIG1fdmFs
dWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFy
Zzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBT
U2hyIHx8ICFjYW5CZUludGVybmFsKGxlZnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmNoaWxkKDApLT5vcGNvZGUoKSAhPSBT
aGwgfHwgIWNhbkJlSW50ZXJuYWwobGVmdC0+Y2hpbGQoMCkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogc3JjVmFsdWUgPSBsZWZ0
LT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGFtb3VudDFWYWx1
ZSA9IGxlZnQtPmNoaWxkKDApLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYW1v
dW50MlZhbHVlID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxzYlZh
bHVlID0gcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5zKHNyY1Zh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGlmICghaW1tKGFtb3VudDFWYWx1ZSkgfHwgIWltbShhbW91bnQyVmFsdWUpIHx8ICFpbW0obHNi
VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaWYgKGFtb3VudDFWYWx1ZS0+YXNJbnQoKSA8IDAgfHwgYW1vdW50MlZhbHVlLT5hc0ludCgp
IDwgMCB8fCBsc2JWYWx1ZS0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudDEgPSBhbW91bnQxVmFs
dWUtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgYW1vdW50MiA9IGFtb3VudDJW
YWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JWYWx1ZS0+
YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29kZSA9PSBT
YmZpejMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IGRhdGFz
aXplIC0gYW1vdW50MTsKKyAgICAgICAgICAgICAgICBpZiAoYW1vdW50MSAhPSBhbW91bnQyIHx8
ICF3aWR0aCB8fCBsc2IgKyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoc3JjVmFs
dWUpLCBpbW0obHNiVmFsdWUpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBj
b21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRTQkZJWigpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc0ludDMyKDEpKSB7CkBA
IC0zMDM3LDcgKzMwNzYsNDkgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
U1NocjogewotICAgICAgICAgICAgYXBwZW5kU2hpZnQ8UnNoaWZ0MzIsIFJzaGlmdDY0PihtX3Zh
bHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgVmFsdWUqIGxl
ZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFs
dWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICAvLyBTQkZYIFBhdHRlcm46ICgoc3JjID4+IGxz
YikgPDwgYW1vdW50KSA+PiBhbW91bnQKKyAgICAgICAgICAgIC8vIFdoZXJlOiBhbW91bnQgPSBk
YXRhc2l6ZSAtIHdpZHRoCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZFNCRlggPSBbJl0gKCkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9y
VHlwZShTYmZ4MzIsIFNiZng2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwgQXJn
OjpUbXApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaWYgKGxlZnQtPm9wY29kZSgpICE9IFNobCB8fCAhY2FuQmVJbnRlcm5hbChsZWZ0KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICgobGVm
dC0+Y2hpbGQoMCktPm9wY29kZSgpICE9IFpTaHIgJiYgbGVmdC0+Y2hpbGQoMCktPm9wY29kZSgp
ICE9IFNTaHIpIHx8ICFjYW5CZUludGVybmFsKGxlZnQtPmNoaWxkKDApKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgVmFsdWUqIHNyY1ZhbHVl
ID0gbGVmdC0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBsc2JW
YWx1ZSA9IGxlZnQtPmNoaWxkKDApLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSog
YW1vdW50MVZhbHVlID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGFt
b3VudDJWYWx1ZSA9IHJpZ2h0OworICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZC5jb250YWlu
cyhzcmNWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWltbShsc2JWYWx1ZSkgfHwgIWltbShhbW91bnQxVmFsdWUpIHx8ICFpbW0o
YW1vdW50MlZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIGlmIChsc2JWYWx1ZS0+YXNJbnQoKSA8IDAgfHwgYW1vdW50MVZhbHVlLT5hc0lu
dCgpIDwgMCB8fCBhbW91bnQyVmFsdWUtPmFzSW50KCkgPCAwKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBhbW91bnQxID0gYW1v
dW50MVZhbHVlLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudDIgPSBh
bW91bnQyVmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbHNiID0gbHNi
VmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBvcGNv
ZGUgPT0gU2JmeDMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9
IGRhdGFzaXplIC0gYW1vdW50MTsKKyAgICAgICAgICAgICAgICBpZiAoYW1vdW50MSAhPSBhbW91
bnQyIHx8ICF3aWR0aCB8fCBsc2IgKyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAo
c3JjVmFsdWUpLCBpbW0obHNiVmFsdWUpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1ZSkpOworICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQtPmNoaWxkKDApKTsKKyAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRTQkZYKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBhcHBlbmRTaGlmdDxSc2hpZnQzMiwg
UnNoaWZ0NjQ+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKaW5kZXgg
MjA2NTUxNDc1NzQyN2NhZjgyZmZlYTNkNWY2NTBjYjhlMjk4Y2JhZi4uYzQ3OWUxZjM1MzE3N2Fh
ZjRiNDRmMzM3MmNlZGYxNjcwZjFmYTFhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtNjE5LDYgKzYxOSwzMyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTdWI6CisgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IFN1YihCaXRYb3IoQml0QW5kKHZhbHVlLCBtYXNrMSksIG1hc2syKSwgbWFzazIpCisg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNTaHIoU2hsKHZhbHVlLCBhbW91bnQpLCBhbW91bnQp
CisgICAgICAgICAgICAvLyBDb25kaXRpb25zOiAKKyAgICAgICAgICAgIC8vIDEuIG1hc2sxID0g
KDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAgICAgLy8gMi4gbWFzazIgPSAxIDw8ICh3aWR0aCAt
IDEpCisgICAgICAgICAgICAvLyAzLiBhbW91bnQgPSBkYXRhc2l6ZSAtIHdpZHRoCisgICAgICAg
ICAgICAvLyA0LiAwIDwgd2lkdGggPCBkYXRhc2l6ZQorICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZAorICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAg
ICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKQorICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IG1hc2sxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5jaGls
ZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9IG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBt
YXNrMyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2
NF90IHdpZHRoID0gV1RGOjpiaXRDb3VudChtYXNrMSk7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQ2
NCA/IDY0IDogMzI7CisgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkTWFzazEgPSBtYXNrMSAm
JiAhKG1hc2sxICYgKG1hc2sxICsgMSkpICYmIHdpZHRoIDwgZGF0YXNpemU7CisgICAgICAgICAg
ICAgICAgYm9vbCBpc1ZhbGlkTWFzazIgPSBtYXNrMiA9PSBtYXNrMyAmJiAoKG1hc2syIDw8IDEp
IC0gMSkgPT0gbWFzazE7CisgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRNYXNrMSAmJiBpc1Zh
bGlkTWFzazIpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGFtb3VudCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBk
YXRhc2l6ZSAtIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNobFZhbHVlID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBTaGwsIG1fdmFsdWUtPm9yaWdp
bigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPmNoaWxkKDApLCBhbW91bnQpOworICAg
ICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU1NociwgbV92YWx1ZS0+b3Jp
Z2luKCksIHNobFZhbHVlLCBhbW91bnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogU3ViKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBj
b25zdGFudDEgLSBjb25zdGFudDIKICAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRTdWIg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+c3ViQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgx
KSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CmluZGV4IGY0NGNiZjBmNjZlMDU0NzRkZjU0N2IwMDU1OTcyZmRmMDE0MzY5MWYuLmQxY2I4ZDhh
OGQ4MDAzNDBmM2I5OTI2ZGEzMTE1ZmRkOWQ4YTA5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtODU0LDYgKzg1NCwxOCBAQCBhcm02
NDogRXh0cmFjdEluc2VydEJpdGZpZWxkQXRMb3dFbmQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMy
LCBaRDpHOjMyCiBhcm02NDogRXh0cmFjdEluc2VydEJpdGZpZWxkQXRMb3dFbmQ2NCBVOkc6NjQs
IFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKICAgICBUbXAsIEltbSwgSW1tLCBUbXAKIAorYXJtNjQ6
IFNiZml6MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgSW1tLCBJ
bW0sIFRtcAorCithcm02NDogU2JmaXo2NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQK
KyAgICBUbXAsIEltbSwgSW1tLCBUbXAKKworYXJtNjQ6IFNiZngzMiBVOkc6MzIsIFU6RzozMiwg
VTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBJbW0sIEltbSwgVG1wCisKK2FybTY0OiBTYmZ4NjQg
VTpHOjY0LCBVOkc6MzIsIFU6RzozMiwgRDpHOjY0CisgICAgVG1wLCBJbW0sIEltbSwgVG1wCisK
ICMgVGhlIGZpcnN0IG9wZXJhbmQgaXMgcmF4LgogIyBGSVhNRTogVGhpcyBmb3JtdWxhdGlvbiBt
ZWFucyB0aGF0IHRoZSBib29sZWFuIHJlc3VsdCBjYW5ub3QgYmUgcHV0IGluIGVheCwgZXZlbiB0
aG91Z2ggYWxsIHVzZXJzCiAjIG9mIHRoaXMgd291bGQgYmUgT0sgd2l0aCB0aGF0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IDhlZGJkZWZlODdiN2Y1NWRjZjJkYzUyNGFlYjAwMDZi
OGZkMWZhNGUuLmQyYTZlMDFlZGZlMmUwN2QzZWQ4MmY2OWMzYmEwYWY5MDBjNDQ2M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTQzNiw2ICs0MzYsMTAgQEAgdm9pZCB0ZXN0QklD
MzIoKTsKIHZvaWQgdGVzdEJJQzY0KCk7CiB2b2lkIHRlc3RPck5vdDMyKCk7CiB2b2lkIHRlc3RP
ck5vdDY0KCk7Cit2b2lkIHRlc3RTQkZJWjMyKCk7Cit2b2lkIHRlc3RTQkZJWjY0KCk7Cit2b2lk
IHRlc3RTQkZYMzIoKTsKK3ZvaWQgdGVzdFNCRlg2NCgpOwogdm9pZCB0ZXN0Qml0QW5kWmVyb1No
aWZ0UmlnaHRBcmdJbW1NYXNrMzIoKTsKIHZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJn
SW1tTWFzazY0KCk7CiB2b2lkIHRlc3RCYXNpY1NlbGVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjNfMi5jcHAKaW5kZXggZGQ0MDkwYWIwNGIwMTEzMTgwMGY1ZWE3NTkzZGU2NjEwMzE0
MjkzYi4uYTZjZjFiZDI0YWJjNjEzMDBhMGYwNTI2MjEzNTcxMmYzMmFlNzI5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCkBAIC00NTk5LDYgKzQ1OTksMTAgQEAgdm9pZCBh
ZGRCaXRUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RCSUM2NCgpKTsKICAgICBSVU4odGVzdE9yTm90
MzIoKSk7CiAgICAgUlVOKHRlc3RPck5vdDY0KCkpOworICAgIFJVTih0ZXN0U0JGSVozMigpKTsK
KyAgICBSVU4odGVzdFNCRklaNjQoKSk7CisgICAgUlVOKHRlc3RTQkZYMzIoKSk7CisgICAgUlVO
KHRlc3RTQkZYNjQoKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1h
c2szMigpKTsKICAgICBSVU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkp
OwogICAgIFJVTih0ZXN0Qml0QW5kQXJncyg0MywgNDMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzMuY3BwCmluZGV4IDdiNzZmYTBiZTAwMjQ0NzgwMzY3OGVlN2YxMThjNDA2YjQxZDBk
ZjguLjJmMDc3ZjhlZjI2MjlhYzk0MjYxMGEzMTAxYzkyNTQ3ODVkMjA1OWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMjgsNiArMjgsMTc4IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCit2b2lkIHRlc3RTQkZJWjMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIGludDMyX3Qg
c3JjID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDI5
IH07CisgICAgVmVjdG9yPGludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3LCAyIH07CisKKyAgICAv
LyBUZXN0IFBhdHRlcm46ICgoc3JjICYgbWFzazEpIF4gbWFzazIpIC0gbWFzazIgPDwgbHNiCisg
ICAgLy8gd2hlcmU6IG1hc2sxID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIC8vICAgICAgICBtYXNr
MiA9IDEgPDwgKHdpZHRoIC0gMSkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbHNiLCBp
bnQzMl90IG1hc2sxLCBpbnQzMl90IG1hc2syKSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICAgICAgVmFsdWUqIHNyY1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2sxVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworICAg
ICAgICBWYWx1ZSogbWFzazJWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBtYXNrMik7CisKKyAgICAgICAgVmFsdWUqIGFuZFZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbWFzazFW
YWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYW5kVmFsdWUsIG1hc2syVmFsdWUpOworICAgICAgICBW
YWx1ZSogc3ViVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2lu
KCksIHhvclZhbHVlLCBtYXNrMlZhbHVlKTsKKworICAgICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBzdWJWYWx1ZSwg
bHNiVmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAg
ICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpj
b2RlLCAic2JmaXoiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgc3Jj
KTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGludDMyX3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgaW50MzJfdCB3
aWR0aCA9IHdpZHRocy5hdChpKTsKKyAgICAgICAgaW50MzJfdCBtYXNrMSA9ICgxIDw8IHdpZHRo
KSAtIDE7CisgICAgICAgIGludDMyX3QgbWFzazIgPSAxIDw8ICh3aWR0aCAtIDEpOworICAgICAg
ICBpbnQzMl90IGJmc3ggPSAoKHNyYyAmIG1hc2sxKSBeIG1hc2syKSAtIG1hc2syOworICAgICAg
ICBDSEVDSyh0ZXN0KGxzYiwgbWFzazEsIG1hc2syKSA9PSAoYmZzeCA8PCBsc2IpKTsKKyAgICB9
Cit9CisKK3ZvaWQgdGVzdFNCRklaNjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgaW50NjRfdCBzcmMgPSAw
eGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPGludDY0X3Q+IGxzYnMgPSB7IDEsIDMwLCA2
MiB9OworICAgIFZlY3RvcjxpbnQ2NF90PiB3aWR0aHMgPSB7IDYyLCAzMywgMSB9OworCisgICAg
Ly8gVGVzdCBQYXR0ZXJuOiAoc3JjIDw8IGFtb3VudCkgPj4gYW1vdW50IDw8IGxzYgorICAgIC8v
IHdoZXJlOiBhbW91bnQgPSBkYXRhc2l6ZSAtIHdpZHRoCisgICAgYXV0byB0ZXN0ID0gWyZdIChp
bnQ2NF90IGxzYiwgaW50NjRfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgICAgICBWYWx1ZSogc3JjVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVl
KiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBsc2IpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29u
c3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2ln
bmVkUmlnaHRTaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIFNTaHIsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGFtb3VudFZhbHVlKSwgCisgICAgICAg
ICAgICBhbW91bnRWYWx1ZSk7CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgc2lnbmVkUmlnaHRTaGlmdFZh
bHVlLCBsc2JWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsICJzYmZpeiIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29k
ZSwgc3JjKTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGludDY0X3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgaW50
NjRfdCB3aWR0aCA9IHdpZHRocy5hdChpKTsKKyAgICAgICAgaW50NjRfdCBhbW91bnQgPSBDSEFS
X0JJVCAqIHNpemVvZihzcmMpIC0gd2lkdGg7CisgICAgICAgIGludDY0X3QgYmZzeCA9IChzcmMg
PDwgYW1vdW50KSA+PiBhbW91bnQ7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBhbW91bnQpID09
IChiZnN4IDw8IGxzYikpOworICAgIH0KK30KKwordm9pZCB0ZXN0U0JGWDMyKCkKK3sKKyAgICBp
ZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJu
OworICAgIGludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8aW50MzJfdD4gbHNi
cyA9IHsgMSwgMTQsIDI5IH07CisgICAgVmVjdG9yPGludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3
LCAyIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46ICgoKHNyYyA+PiBsc2IpICYgbWFzazEpIF4g
bWFzazIpIC0gbWFzazIKKyAgICAvLyB3aGVyZTogbWFzazEgPSAoMSA8PCB3aWR0aCkgLSAxCisg
ICAgLy8gICAgICAgIG1hc2syID0gMSA8PCAod2lkdGggLSAxKQorICAgIGF1dG8gdGVzdCA9IFsm
XSAoaW50MzJfdCBsc2IsIGludDMyX3QgbWFzazEsIGludDMyX3QgbWFzazIpIC0+IGludDMyX3Qg
eworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogc3JjVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1
ZSogbWFzazFWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrMlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsKKworICAgICAgICBWYWx1ZSog
c2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCks
IHNyY1ZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIFZhbHVlKiBhbmRWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgbWFzazFW
YWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYW5kVmFsdWUsIG1hc2syVmFsdWUpOworCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1Yiwg
T3JpZ2luKCksIHhvclZhbHVlLCBtYXNrMlZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBj
aGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInNiZngiKTsKKyAgICAgICAgcmV0dXJuIGludm9r
ZTxpbnQzMl90PigqY29kZSwgc3JjKTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGludDMyX3QgbHNiID0gbHNicy5hdChp
KTsKKyAgICAgICAgaW50MzJfdCB3aWR0aCA9IHdpZHRocy5hdChpKTsKKyAgICAgICAgaW50MzJf
dCBtYXNrMSA9ICgxIDw8IHdpZHRoKSAtIDE7CisgICAgICAgIGludDMyX3QgbWFzazIgPSAxIDw8
ICh3aWR0aCAtIDEpOworICAgICAgICBpbnQzMl90IHJlc3VsdCA9ICgoKHNyYyA+PiBsc2IpICYg
bWFzazEpIF4gbWFzazIpIC0gbWFzazI7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrMSwg
bWFzazIpID09IHJlc3VsdCk7CisgICAgfQorfQorCit2b2lkIHRlc3RTQkZYNjQoKQoreworICAg
IGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1
cm47CisgICAgaW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPGlu
dDY0X3Q+IGxzYnMgPSB7IDEsIDMwLCA2MiB9OworICAgIFZlY3RvcjxpbnQ2NF90PiB3aWR0aHMg
PSB7IDYyLCAzMywgMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiAoKHNyYyA+PiBsc2IpIDw8
IGFtb3VudCkgPj4gYW1vdW50CisgICAgLy8gd2hlcmU6IGFtb3VudCA9IGRhdGFzaXplIC0gd2lk
dGgKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbHNiLCBpbnQ2NF90IGFtb3VudCkgLT4g
aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7CisgICAgICAgIFZhbHVlKiBhbW91bnRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91
bnQpOworCisgICAgICAgIFZhbHVlKiByaWdodFNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbHNiVmFsdWUpOworICAgICAg
ICBWYWx1ZSogbGVmdFNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNo
bCwgT3JpZ2luKCksIHJpZ2h0U2hpZnRWYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBWYWx1
ZSogc2lnbmVkUmlnaHRTaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBT
U2hyLCBPcmlnaW4oKSwgbGVmdFNoaWZ0VmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHNpZ25lZFJp
Z2h0U2hpZnRWYWx1ZSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgInNiZngiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUs
IHNyYyk7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7
ICsraSkgeworICAgICAgICBpbnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIGludDY0
X3Qgd2lkdGggPSB3aWR0aHMuYXQoaSk7CisgICAgICAgIGludDY0X3QgYW1vdW50ID0gQ0hBUl9C
SVQgKiBzaXplb2Yoc3JjKSAtIHdpZHRoOworICAgICAgICBpbnQ2NF90IHJlc3VsdCA9ICgoc3Jj
ID4+IGxzYikgPDwgYW1vdW50KSA+PiBhbW91bnQ7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBh
bW91bnQpID09IHJlc3VsdCk7CisgICAgfQorfQorCiB2b2lkIHRlc3RCaXRPckJpdE9yQXJnSW1t
SW1tMzIoaW50IGEsIGludCBiLCBpbnQgYykKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432485</attachid>
            <date>2021-06-29 09:24:54 -0700</date>
            <delta_ts>2021-06-29 10:48:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227203-20210629112452.patch</filename>
            <type>text/plain</type>
            <size>31668</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
YjBlYzcxNzhiNGM3NDI5MzNlYjA3Zjk1MjM4Y2M0MDFjOTZhN2MzLi42NTRmZWFhZTk1MThjOWI3
M2Y2YjU2M2FiYzg0NDIzNTQwNzliMDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTUgQEAKKzIwMjEtMDYtMjggIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHVzZSBTQlggYW5kIFNCRklaIHN1cHBvcnRlZCBieSBBUk02NAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjAzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyB0d28g
bW9kaWZpY2F0aW9uczoKKyAgICAgICAgICAgIDEuIEl0cm9kdWNlIGEgc3RyZW5ndGggcmVkdWN0
aW9uIHJ1bGUgZm9yIHNpZ24gZXh0ZW5kaW5nIGJpdGZpZWxkLgorICAgICAgICAgICAgMi4gQWRk
IFNpZ25lZCBCaXRmaWVsZCBFeHRyYWN0IChTQkZYKSBhbmQgU2lnbmVkIEJpdGZpZWxkIEluc2Vy
dCAKKyAgICAgICAgICAgICAgIGluIFplcm8gKFNCRklaKSB0byBBaXIgb3Bjb2RlIHRvIHNlcnZl
IGludHJ1Y2l0b24gc2VsZWN0b3IuCisgICAgICAgIAorICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMjIyBQYXJ0
IEEgU2lnbiBleHRlbmRpbmcgZnJvbSBhIHZhcmlhYmxlIGJpdC13aWR0aCAjIyMKKyAgICAgICAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgICAgICBBY2NvcmRpbmcgdG8gQml0IFR3aWRkbGluZyBIYWNrcywgdGhlcmUgYXJlIHR3byB3
YXlzIHRvIHNpZ24gZXh0ZW5kcyBiaXRmaWVsZC4KKyAgICAgICAgKGh0dHBzOi8vZ3JhcGhpY3Mu
c3RhbmZvcmQuZWR1L35zZWFuZGVyL2JpdGhhY2tzLmh0bWwjVmFyaWFibGVTaWduRXh0ZW5kKQor
CisgICAgICAgIGludCBiZjsgICAgLy8gc2lnbiBleHRlbmQgdGhpcyB3aWR0aC1iaXQgbnVtYmVy
IHRvIGJmc3gKKyAgICAgICAgaW50IHdpZHRoOyAvLyBudW1iZXIgb2YgYml0cyByZXByZXNlbnRp
bmcgdGhlIG51bWJlciBpbiBiZgorICAgICAgICBpbnQgYmZzeDsgIC8vIHJlc3VsdGluZyBzaWdu
LWV4dGVuZGVkIG51bWJlcgorCisgICAgICAgIEFwcHJvYWNoIDEKKyAgICAgICAgbWFzazEgPSAo
MSA8PCB3aWR0aCkgLSAxCisgICAgICAgIG1hc2syID0gMSA8PCAod2lkdGggLSAxKQorICAgICAg
ICBiZiAgICA9IGJmICYgbWFzazEgICAgICAvLyB6ZXJvIGJpdHMgaW4gYmYgYWJvdmUgcG9zaXRp
b24gd2lkdGggIAorICAgICAgICBiZnN4ICA9IChiZiBeIG1hc2syKSAtIG1hc2syCisKKyAgICAg
ICAgQXBwcm9hY2ggMgorICAgICAgICBhbW91bnQgPSBDSEFSX0JJVCAqIHNpemVvZihiZikgLSB3
aWR0aAorICAgICAgICBiZnN4ICAgPSAoYmYgPDwgYW1vdW50KSA+PiBhbW91bnQKKworICAgICAg
ICBUaGVuLCBhIG5ldyBzdHJlbmd0aCByZWR1Y3Rpb24gcnVsZSBpcyBpbnRyb2R1Y2VkOgorICAg
ICAgICAgICAgVHVybiB0aGlzOiAoKGJmICYgbWFzazEpIF4gbWFzazIpIC0gbWFzazIgCisgICAg
ICAgICAgICBJbnRvIHRoaXM6IChiZiA8PCBhbW91bnQpID4+IGFtb3VudAorCisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyMjIFBhcnQgQiBTQkZYICMjIworICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEdpdmVuIGluc3RydWN0aW9uOgorICAgICAgICBz
YmZ4IFJkLCBSbiwgbHNiLCB3aWR0aAorCisgICAgICAgIFNpZ25lZCBCaXRmaWVsZCBFeHRyYWN0
IChTQkZYKSBleHRyYWN0cyB3aWR0aCBudW1iZXIgb2YgYWRqYWNlbnQgYml0cyBhdCBsc2IgcG9z
aXRpb24gCisgICAgICAgIGZyb20gYSByZWdpc3RlciBSbiwgc2lnbi1leHRlbmRzIHRoZW0gdG8g
dGhlIHNpemUgb2YgdGhlIHJlZ2lzdGVyLCBhbmQgd3JpdGVzIHRoZSAKKyAgICAgICAgcmVzdWx0
IHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBSZC4KKworICAgICAgICBUaGUgZXF1aXZhbGVu
dCBwYXR0ZXJucyBvZiB0aGlzIGluc3RydWN0aW9uIGFyZToKKworICAgICAgICBQYXR0ZXJuIDE6
CisgICAgICAgICAgICBiZiAgICA9IHNyYyA+PiBsc2IKKyAgICAgICAgICAgIGRzdCAgID0gKChi
ZiAmIG1hc2sxKSBeIG1hc2syKSAtIG1hc2syCisgICAgICAgICAgICBtYXNrMSA9ICgxIDw8IHdp
ZHRoKSAtIDEKKyAgICAgICAgICAgIG1hc2syID0gMSA8PCAod2lkdGggLSAxKSAvLyAobWFzazIg
PDwgMSkgLSAxID0gbWFzazEKKworICAgICAgICBQYXR0ZXJuIDI6CisgICAgICAgICAgICBiZiAg
ICAgPSBzcmMgPj4gbHNiCisgICAgICAgICAgICBhbW91bnQgPSBDSEFSX0JJVCAqIHNpemVvZihi
ZikgLSB3aWR0aAorICAgICAgICAgICAgZHN0ICAgID0gKGJmIDw8IGFtb3VudCkgPj4gYW1vdW50
CisgICAgICAgIAorICAgICAgICBUaGVuLCAoYmYgPDwgYW1vdW50KSA+PiBhbW91bnQgaXMgc2Vs
ZWN0ZWQgYXMgdGhlIGNhbm9uaWNhbCBmb3JtIHdpdGggdGhlIHN0cmVuZ3RoIHJlZHVjdGlvbiAK
KyAgICAgICAgcnVsZSBpbnRyb2R1Y2VkIGFib3ZlLgorCisgICAgICAgIEdpdmVuIEIzIElSOgor
ICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IGxzYgor
ICAgICAgICBJbnQgQDIgPSBhbW91bnQKKyAgICAgICAgSW50IEAzID0gWlNocihAMCwgQDEpCisg
ICAgICAgIEludCBANCA9IFNobChAMywgQDIpCisgICAgICAgIEludCBANSA9IFNTaHIoQDQsIEAy
KQorICAgICAgICBWb2lkQDYgPSBSZXR1cm4oQDUsIFRlcm1pbmFsKQorCisgICAgICAgIEJlZm9y
ZSBBZGRpbmcgQklDOgorICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBVcnNo
aWZ0ICV4MCwgICAgbHNiLCAleDAsIEAzCisgICAgICAgIExzaGlmdCAgJXgwLCBhbW91bnQsICV4
MCwgQDQKKyAgICAgICAgUnNoaWZ0ICAleDAsIGFtb3VudCwgJXgwLCBANQorICAgICAgICBSZXQg
ICAgICV4MCwgICAgICAgICAgICAgIEA2CisKKyAgICAgICAgQWZ0ZXIgQWRkaW5nIEJJQzoKKyAg
ICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAgICAgICAgRXh0cmFjdFNpZ25lZEJpdGZpZWxk
ICV4MCwgbHNiLCB3aWR0aCwgJXgwLCBANQorICAgICAgICBSZXQgICAgICAgICAgICAgICAgICAg
JXgwLCAgICAgICAgICAgICAgICAgIEA2CisgICAgCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgICAgICMjIyBQYXJ0IEIgU0JGSVogIyMjCisgICAgICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgICAgIEdpdmVuIGluc3RydWN0aW9uOgorICAgICAgICBzYmZpeiBSZCwgUm4s
IGxzYiwgd2lkdGgKKworICAgICAgICBTaWduZWQgQml0ZmllbGQgSW5zZXJ0IGluIFplcm8gKFNC
RklaKSB6ZXJvZXMgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIFJkIGFuZCBjb3BpZXMgCisgICAg
ICAgIHdpZHRoIG51bWJlciBvZiBjb250aWd1b3VzIGJpdHMgZnJvbSBhIHNvdXJjZSByZWdpc3Rl
ciBSbiBpbnRvIGxzYiBwb3NpdGlvbiBpbiB0aGUgCisgICAgICAgIGRlc3RpbmF0aW9uIHJlZ2lz
dGVyLCBzaWduLWV4dGVuZGluZyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHRyYW5z
ZmVycmVkIHZhbHVlLgorCisgICAgICAgIFRoZSBlcXVpdmFsZW50IHBhdHRlcm5zIG9mIHRoaXMg
aW5zdHJ1Y3Rpb24gYXJlOgorCisgICAgICAgIFBhdHRlcm4gMToKKyAgICAgICAgICAgIGJmc3gg
ID0gKChzcmMgJiBtYXNrMSkgXiBtYXNrMikgLSBtYXNrMgorICAgICAgICAgICAgZHN0ICAgPSBi
ZnN4IDw8IGxzYgorICAgICAgICAgICAgbWFzazEgPSAoMSA8PCB3aWR0aCkgLSAxCisgICAgICAg
ICAgICBtYXNrMiA9IDEgPDwgKHdpZHRoIC0gMSkgLy8gKG1hc2syIDw8IDEpIC0gMSA9IG1hc2sx
CisKKyAgICAgICAgUGF0dGVybiAyOgorICAgICAgICAgICAgYW1vdW50ID0gQ0hBUl9CSVQgKiBz
aXplb2YoYmYpIC0gd2lkdGgKKyAgICAgICAgICAgIGJmc3ggICA9IChzcmMgPDwgYW1vdW50KSA+
PiBhbW91bnQKKyAgICAgICAgICAgIGRzdCAgICA9IGJmc3ggPDwgbHNiCisgICAgICAgIAorICAg
ICAgICBUaGVuLCAoKHNyYyA8PCBhbW91bnQpID4+IGFtb3VudCkgPDwgbHNiIGlzIHNlbGVjdGVk
IGFzIHRoZSBjYW5vbmljYWwgZm9ybSB3aXRoIHRoZSAKKyAgICAgICAgc3RyZW5ndGggcmVkdWN0
aW9uIHJ1bGUgaW50cm9kdWNlZCBhYm92ZS4KKworICAgICAgICBHaXZlbiBCMyBJUjoKKyAgICAg
ICAgSW50IEAwID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJbnQgQDEgPSBsc2IKKyAgICAg
ICAgSW50IEAyID0gYW1vdW50CisgICAgICAgIEludCBAMyA9IFNobChAMCwgQDIpCisgICAgICAg
IEludCBANCA9IFNTaHIoQDMsIEAyKQorICAgICAgICBJbnQgQDUgPSBTaGwoQDQsIEAxKQorICAg
ICAgICBWb2lkQDYgPSBSZXR1cm4oQDUsIFRlcm1pbmFsKQorCisgICAgICAgIEJlZm9yZSBBZGRp
bmcgQklDOgorICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgJXgw
LCBhbW91bnQsICV4MCwgQDMKKyAgICAgICAgUnNoaWZ0ICV4MCwgYW1vdW50LCAleDAsIEA0Cisg
ICAgICAgIExzaGlmdCAleDAsICAgIGxzYiwgJXgwLCBANQorICAgICAgICBSZXQgICAgJXgwLCAg
ICAgICAgICAgICAgQDYKKworICAgICAgICBBZnRlciBBZGRpbmcgQklDOgorICAgICAgICAvLyBO
ZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybyAleDAs
IGxzYiwgd2lkdGgsICV4MCwgQDUKKyAgICAgICAgUmV0ICAgICAgICAgICAgICAgICAgICAgICAg
JXgwLCAgICAgICAgICAgICAgICAgIEA2CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjppbnNlcnRT
aWduZWRCaXRmaWVsZEluWmVybzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6aW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm82NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OmV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk02NDo6ZXh0cmFjdFNpZ25lZEJpdGZpZWxkNjQpOgorICAgICAgICAqIGFz
c2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RJbnNlcnRTaWduZWRCaXRm
aWVsZEluWmVybzMyKToKKyAgICAgICAgKEpTQzo6dGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5a
ZXJvNjQpOgorICAgICAgICAoSlNDOjp0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIpOgorICAg
ICAgICAoSlNDOjp0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkNjQpOgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAg
ICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgor
ICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKGFkZEJpdFRlc3RzKToKKyAgICAg
ICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJ
blplcm8zMik6CisgICAgICAgICh0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm82NCk6Cisg
ICAgICAgICh0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIpOgorICAgICAgICAodGVzdEV4dHJh
Y3RTaWduZWRCaXRmaWVsZDY0KToKKwogMjAyMS0wNi0yOCAgWWlqaWEgSHVhbmcgIDx5aWppYV9o
dWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rp
b24gc2VsZWN0b3IgdG8gdXNlIEJJQyBzdXBwb3J0ZWQgYnkgQVJNNjQKQEAgLTYsNyArMTU4LDcg
QEAKICAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCiAKICAgICAgICAgVGhpcyBwYXRj
aCBpbmNsdWRlcyB0aHJlZSBtb2RpZmljYXRpb25zOgotICAgICAgICAgICAgMS4gQWRkIGJpdCBj
bGVhciAoQklDKSwgb3Igbm90IChPUk4pLCBhbmQgZXh0cmFjdCBhbmQgaW5zZXJ0IGJpdGZpZWxk
IGF0IGxvd2VyIGVuZCAoRkJYSUwpIAorICAgICAgICAgICAgMS4gQWRkIGJpdCBjbGVhciAoQklD
KSwgb3Igbm90IChPUk4pLCBhbmQgZXh0cmFjdCBhbmQgaW5zZXJ0IGJpdGZpZWxkIGF0IGxvd2Vy
IGVuZCAoQkZYSUwpIAogICAgICAgICAgICAgICAgdG8gQWlyIG9wY29kZSB0byBzZXJ2ZSBpbnRy
dWNpdG9uIHNlbGVjdG9yLgogICAgICAgICAgICAgMi4gQWRkIGJpdGZpZWxkIGNsZWFyIChCRkMp
IHRvIE1hY3JvQXNzZW1ibGVyLgogICAgICAgICAgICAgNC4gRG8gcmVmYWN0b3JpbmcgLSByZW5h
bWUgQWlyIG9wY29kZXMgYWRkZWQgaW4gdGhlIHByZXZpb3VzIHBhdGNoZXMuCkBAIC05NywxMyAr
MjQ5LDEzIEBACiAgICAgICAgIFJldCAleDAsICAgICAgICAgICBANQogCiAgICAgICAgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICMjIyBQYXJ0IEEgRkJYSUwgIyMjCisgICAgICAgICMj
IyBQYXJ0IEEgQkZYSUwgIyMjCiAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAg
IEdpdmVuIHRoZSBvcGVyYXRpb246CiAKICAgICAgICAgYmZ4aWwgUmQsIFJuLCBsc2IsIHdpZHRo
CiAKLSAgICAgICAgQml0ZmllbGQgZXh0cmFjdCBhbmQgaW5zZXJ0IGF0IGxvdyBlbmQoRkJYSUwp
IGNvcGllcyBhbnkgbnVtYmVyIG9mIGxvdy1vcmRlciBiaXRzIAorICAgICAgICBCaXRmaWVsZCBl
eHRyYWN0IGFuZCBpbnNlcnQgYXQgbG93IGVuZChCRlhJTCkgY29waWVzIGFueSBudW1iZXIgb2Yg
bG93LW9yZGVyIGJpdHMgCiAgICAgICAgIGZyb20gYSBzb3VyY2UgcmVnaXN0ZXIgaW50byB0aGUg
c2FtZSBudW1iZXIgb2YgYWRqYWNlbnQgYml0cyBhdCB0aGUgbG93IGVuZCBpbiAKICAgICAgICAg
dGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLCBsZWF2aW5nIG90aGVyIGJpdHMgdW5jaGFuZ2VkLgog
CkBAIC0xMzAsNyArMjgyLDcgQEAKICAgICAgICAgNC4gMCA8IHdpZHRoIDwgZGF0YXNpemUKICAg
ICAgICAgNS4gc2hpZnRBbW91bnQgKyB3aWR0aCA8PSBkYXRhc2l6ZQogCi0gICAgICAgIFRoZSBj
YW5vbmljYWwgZm9ybSB0byBtYXRjaCBGQlhJTCBpcyBkID0gKChuID4+IGxzYikgJiBtYXNrMSkg
fCAoZCAmIG1hc2syKS4KKyAgICAgICAgVGhlIGNhbm9uaWNhbCBmb3JtIHRvIG1hdGNoIEJGWElM
IGlzIGQgPSAoKG4gPj4gbHNiKSAmIG1hc2sxKSB8IChkICYgbWFzazIpLgogICAgICAgICAKICAg
ICAgICAgR2l2ZW4gQjMgSVI6CiAgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgKaW5kZXggMDg5MTU5NWI0ZGFhZTM0ZGY3ZGZlNzM3ZjIwOGIwZjAxYjcyMzVhZC4uNTdk
ZGRjYzEzMmE4YjQyYzMzYmQ2YzI2NWI1MWJiZTZjOTVjNTJmNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTQ0
OCw3ICs0NDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGRlc3Qs
IGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIC8vIEJpdCBPcGVyYXRpb25z
OgorICAgIC8vIEJpdCBvcGVyYXRpb25zOgogICAgIHZvaWQgZXh0cmFjdFVuc2lnbmVkQml0Zmll
bGQzMihSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRo
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci51YmZ4PDMyPihk
ZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKQEAgLTUxOSw2ICs1MTksMjYg
QEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5iZnhpbDw2ND4oZGVzdCwgc3JjLCBsc2Iu
bV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CiAgICAgfQogCisgICAgdm9pZCBpbnNlcnRTaWduZWRC
aXRmaWVsZEluWmVybzMyKFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVk
SW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnNiZml6PDMyPihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkIGluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQoUmVnaXN0ZXJJRCBzcmMs
IFRydXN0ZWRJbW0zMiBsc2IsIFRydXN0ZWRJbW0zMiB3aWR0aCwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2JmaXo8NjQ+KGRlc3QsIHNyYywgbHNiLm1fdmFs
dWUsIHdpZHRoLm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgZXh0cmFjdFNpZ25lZEJpdGZp
ZWxkMzIoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBsc2IsIFRydXN0ZWRJbW0zMiB3aWR0
aCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2JmeDwzMj4o
ZGVzdCwgc3JjLCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBleHRyYWN0U2lnbmVkQml0ZmllbGQ2NChSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGxz
YiwgVHJ1c3RlZEltbTMyIHdpZHRoLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5zYmZ4PDY0PihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVl
KTsKKyAgICB9ICAgIAorCiAgICAgdm9pZCBjbGVhckJpdDY0KFJlZ2lzdGVySUQgYml0VG9DbGVh
ciwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2hGb3JNYXNrID0gSW52YWxpZEdQ
UlJlZykKICAgICB7CiAgICAgICAgIGlmIChzY3JhdGNoRm9yTWFzayA9PSBJbnZhbGlkR1BSUmVn
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCA1
ODYzYmE1MGY3NjY1ZWQ4ZDRlNDIwOTAyZWE3ZWM4ODM3Mjc1NDViLi4wM2QwNjFhYzgxNzkwN2Qx
ODA2ODg4YzEwN2Y2NmQxODhhOGRhZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMTQ1MSw2ICsxNDUxLDEyNSBAQCB2b2lkIHRlc3RPck5v
dDY0KCkKICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KHRlc3QsIDBVTEwsIG1hc2sp
LCB+bWFzayk7CiAgICAgfQogfQorCit2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVy
bzMyKCkKK3sKKyAgICB1aW50MzJfdCBzcmMgPSAweGYwZjBmMGYwOworICAgIFZlY3Rvcjx1aW50
MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywgMzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0
IH07CisgICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKKyAgICAgICAgZm9yIChhdXRvIHdpZHRo
IDogaW1tcykgeworICAgICAgICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2Ig
KyB3aWR0aCA8IDMyKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRTaWduZWRCaXRmaWVs
ZEluWmVybzMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaml0Lmluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxz
YiksIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
d2lkdGgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAg
ICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBpbnQzMl90IGJmID0gc3JjOworICAgICAgICAgICAgICAgIGludDMyX3QgbWFz
azEgPSAoMSA8PCB3aWR0aCkgLSAxOworICAgICAgICAgICAgICAgIGludDMyX3QgbWFzazIgPSAx
IDw8ICh3aWR0aCAtIDEpOworICAgICAgICAgICAgICAgIGludDMyX3QgYmZzeCA9ICgoYmYgJiBt
YXNrMSkgXiBtYXNrMikgLSBtYXNrMjsKKworICAgICAgICAgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQzMl90PihpbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyLCBzcmMpLCBiZnN4IDw8IGxz
Yik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEluc2Vy
dFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQoKQoreworICAgIGludDY0X3Qgc3JjID0gMHhmMGYwZjBm
MGYwZjBmMGYwOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywgMzAs
IDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0IH07CisgICAgZm9yIChhdXRvIGxzYiA6IGltbXMp
IHsKKyAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgeworICAgICAgICAgICAgaWYgKGxz
YiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDY0KSB7CisgICAgICAgICAgICAg
ICAgYXV0byBpbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzY0ID0gY29tcGlsZShbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lmluc2VydFNpZ25lZEJpdGZpZWxkSW5a
ZXJvNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0
RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7Cisg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGJmID0gc3JjOwor
ICAgICAgICAgICAgICAgIGludDY0X3QgYW1vdW50ID0gQ0hBUl9CSVQgKiBzaXplb2YoYmYpIC0g
d2lkdGg7CisgICAgICAgICAgICAgICAgaW50NjRfdCBiZnN4ID0gKGJmIDw8IGFtb3VudCkgPj4g
YW1vdW50OworCisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KGluc2Vy
dFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQsIHNyYyksIGJmc3ggPDwgbHNiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxk
MzIoKQoreworICAgIGludDMyX3Qgc3JjID0gMHhmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9
OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6
IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsg
d2lkdGggPCAzMikgeworICAgICAgICAgICAgICAgIGF1dG8gZXh0cmFjdFNpZ25lZEJpdGZpZWxk
MzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQu
ZXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBp
bnQzMl90IGJmID0gc3JjID4+IGxzYjsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sxID0g
KDEgPDwgd2lkdGgpIC0gMTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2syID0gMSA8PCAo
d2lkdGggLSAxKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGJmc3ggPSAoKGJmICYgbWFzazEp
IF4gbWFzazIpIC0gbWFzazI7CisKKyAgICAgICAgICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
MzJfdD4oZXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIsIHNyYyksIGJmc3gpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQ2
NCgpCit7CisgICAgaW50NjRfdCBzcmMgPSAweGYwZjBmMGYwZjBmMGYwZjA7CisgICAgVmVjdG9y
PHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCA1LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2
MywgNjQgfTsKKyAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgeworICAgICAgICBmb3IgKGF1dG8g
d2lkdGggOiBpbW1zKSB7CisgICAgICAgICAgICBpZiAobHNiID49IDAgJiYgd2lkdGggPiAwICYm
IGxzYiArIHdpZHRoIDwgNjQpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGV4dHJhY3RTaWduZWRC
aXRmaWVsZDY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmV4dHJhY3RTaWduZWRCaXRmaWVsZDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsc2IpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdpZHRo
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgaW50NjRfdCBiZiA9IHNyYyA+PiBsc2I7CisgICAgICAgICAgICAgICAgaW50NjRfdCBh
bW91bnQgPSBDSEFSX0JJVCAqIHNpemVvZihiZikgLSB3aWR0aDsKKyAgICAgICAgICAgICAgICBp
bnQ2NF90IGJmc3ggPSAoYmYgPDwgYW1vdW50KSA+PiBhbW91bnQ7CisKKyAgICAgICAgICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oZXh0cmFjdFNpZ25lZEJpdGZpZWxkNjQsIHNyYyks
IGJmc3gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiAjZW5kaWYKIAog
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKQEAgLTM2MzYsNiArMzc1
NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9T
QUZFVFlfQU5BTFlTSVMKIAogICAgIFJVTih0ZXN0T3JOb3QzMigpKTsKICAgICBSVU4odGVzdE9y
Tm90NjQoKSk7CisKKyAgICBSVU4odGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKSk7
CisgICAgUlVOKHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzY0KCkpOworICAgIFJVTih0
ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIoKSk7CisgICAgUlVOKHRlc3RFeHRyYWN0U2lnbmVk
Qml0ZmllbGQ2NCgpKTsKICNlbmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwg
Q1BVKEFSTTY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRl
eCA2ZjJlYjZhZjg0ZjZiOTBiYzExMWRjN2UyZjA5YzZjMGNhMTEyNTFmLi5mMTIwMzFjMWRmNjFi
NjRjNzJhYjRlN2EzOGU3MjIzM2Y5YmI5MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlclRvQWlyLmNwcApAQCAtMjk5OCw3ICsyOTk4LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgLy8gVUJGSVogUGF0dGVybjogZCA9IChuICYgbWFzaykgPDwgbHNiIAogICAgICAgICAg
ICAgLy8gV2hlcmU6IG1hc2sgPSAoMSA8PCB3aWR0aCkgLSAxCi0gICAgICAgICAgICBhdXRvIHRy
eUFwcGVuZFVCRlogPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICBhdXRvIHRyeUFwcGVu
ZFVCRklaID0gWyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9w
Y29kZSA9IG9wY29kZUZvclR5cGUoSW5zZXJ0VW5zaWduZWRCaXRmaWVsZEluWmVybzMyLCBJbnNl
cnRVbnNpZ25lZEJpdGZpZWxkSW5aZXJvNjQsIG1fdmFsdWUtPnR5cGUoKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJ
bW0sIEFyZzo6VG1wKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzAy
NCw3ICszMDI0LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBpZiAodHJ5QXBwZW5kVUJGWigpKQorICAgICAg
ICAgICAgaWYgKHRyeUFwcGVuZFVCRklaKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAvLyBTQkZJWiBQYXR0ZXJuOiBkID0gKChzcmMgPDwgYW1vdW50KSA+PiBhbW91
bnQpIDw8IGxzYgorICAgICAgICAgICAgLy8gd2hlcmU6IGFtb3VudCA9IGRhdGFzaXplIC0gd2lk
dGgKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kU0JGSVogPSBbJl0gKCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShJbnNlcnRT
aWduZWRCaXRmaWVsZEluWmVybzMyLCBJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzY0LCBtX3Zh
bHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBB
cmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0g
U1NociB8fCAhY2FuQmVJbnRlcm5hbChsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5jaGlsZCgwKS0+b3Bjb2RlKCkgIT0g
U2hsIHx8ICFjYW5CZUludGVybmFsKGxlZnQtPmNoaWxkKDApKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgVmFsdWUqIHNyY1ZhbHVlID0gbGVm
dC0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBhbW91bnQxVmFs
dWUgPSBsZWZ0LT5jaGlsZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGFt
b3VudDJWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBsc2JW
YWx1ZSA9IHJpZ2h0OworICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZC5jb250YWlucyhzcmNW
YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWltbShhbW91bnQxVmFsdWUpIHx8ICFpbW0oYW1vdW50MlZhbHVlKSB8fCAhaW1tKGxz
YlZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGlmIChhbW91bnQxVmFsdWUtPmFzSW50KCkgPCAwIHx8IGFtb3VudDJWYWx1ZS0+YXNJbnQo
KSA8IDAgfHwgbHNiVmFsdWUtPmFzSW50KCkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBhbW91bnQxID0gYW1vdW50MVZh
bHVlLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudDIgPSBhbW91bnQy
VmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbHNiID0gbHNiVmFsdWUt
PmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBvcGNvZGUgPT0g
SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8zMiA/IDMyIDogNjQ7CisgICAgICAgICAgICAgICAg
dWludDY0X3Qgd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudDE7CisgICAgICAgICAgICAgICAgaWYg
KGFtb3VudDEgIT0gYW1vdW50MiB8fCAhd2lkdGggfHwgbHNiICsgd2lkdGggPiBkYXRhc2l6ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgYXBw
ZW5kKG9wY29kZSwgdG1wKHNyY1ZhbHVlKSwgaW1tKGxzYlZhbHVlKSwgaW1tKHdpZHRoKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0LT5jaGlsZCgw
KSk7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBw
ZW5kU0JGSVooKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmIChy
aWdodC0+aXNJbnQzMigxKSkgewpAQCAtMzAzNyw3ICszMDc2LDQ5IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIFNTaHI6IHsKLSAgICAgICAgICAgIGFwcGVuZFNoaWZ0PFJz
aGlmdDMyLCBSc2hpZnQ2ND4obV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsK
KyAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gbV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAg
ICBWYWx1ZSogcmlnaHQgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgLy8gU0JG
WCBQYXR0ZXJuOiAoKHNyYyA+PiBsc2IpIDw8IGFtb3VudCkgPj4gYW1vdW50CisgICAgICAgICAg
ICAvLyBXaGVyZTogYW1vdW50ID0gZGF0YXNpemUgLSB3aWR0aAorICAgICAgICAgICAgYXV0byB0
cnlBcHBlbmRTQkZYID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6T3Bj
b2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUoRXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIsIEV4dHJh
Y3RTaWduZWRCaXRmaWVsZDY0LCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlm
ICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6SW1tLCBBcmc6
OlRtcCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gU2hsIHx8ICFjYW5CZUludGVybmFsKGxlZnQpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKChsZWZ0
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgIT0gWlNociAmJiBsZWZ0LT5jaGlsZCgwKS0+b3Bjb2RlKCkg
IT0gU1NocikgfHwgIWNhbkJlSW50ZXJuYWwobGVmdC0+Y2hpbGQoMCkpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogc3JjVmFsdWUg
PSBsZWZ0LT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxzYlZh
bHVlID0gbGVmdC0+Y2hpbGQoMCktPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBh
bW91bnQxVmFsdWUgPSBsZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYW1v
dW50MlZhbHVlID0gcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5z
KHNyY1ZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGlmICghaW1tKGxzYlZhbHVlKSB8fCAhaW1tKGFtb3VudDFWYWx1ZSkgfHwgIWltbShh
bW91bnQyVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaWYgKGxzYlZhbHVlLT5hc0ludCgpIDwgMCB8fCBhbW91bnQxVmFsdWUtPmFzSW50
KCkgPCAwIHx8IGFtb3VudDJWYWx1ZS0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudDEgPSBhbW91
bnQxVmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgYW1vdW50MiA9IGFt
b3VudDJWYWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JW
YWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29k
ZSA9PSBFeHRyYWN0U2lnbmVkQml0ZmllbGQzMiA/IDMyIDogNjQ7CisgICAgICAgICAgICAgICAg
dWludDY0X3Qgd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudDE7CisgICAgICAgICAgICAgICAgaWYg
KGFtb3VudDEgIT0gYW1vdW50MiB8fCAhd2lkdGggfHwgbHNiICsgd2lkdGggPiBkYXRhc2l6ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgYXBw
ZW5kKG9wY29kZSwgdG1wKHNyY1ZhbHVlKSwgaW1tKGxzYlZhbHVlKSwgaW1tKHdpZHRoKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0LT5jaGlsZCgw
KSk7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBw
ZW5kU0JGWCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgYXBwZW5k
U2hpZnQ8UnNoaWZ0MzIsIFJzaGlmdDY0PihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwCmluZGV4IDIwNjU1MTQ3NTc0MjdjYWY4MmZmZWEzZDVmNjUwY2I4ZTI5OGNiYWYu
LmM0NzllMWYzNTMxNzdhYWY0YjQ0ZjMzNzJjZWRmMTY3MGYxZmExYTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTYxOSw2ICs2MTksMzMg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU3ViOgorICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBTdWIoQml0WG9yKEJpdEFuZCh2YWx1ZSwgbWFzazEpLCBt
YXNrMiksIG1hc2syKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTU2hyKFNobCh2YWx1ZSwg
YW1vdW50KSwgYW1vdW50KQorICAgICAgICAgICAgLy8gQ29uZGl0aW9uczogCisgICAgICAgICAg
ICAvLyAxLiBtYXNrMSA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgICAgIC8vIDIuIG1hc2sy
ID0gMSA8PCAod2lkdGggLSAxKQorICAgICAgICAgICAgLy8gMy4gYW1vdW50ID0gZGF0YXNpemUg
LSB3aWR0aAorICAgICAgICAgICAgLy8gNC4gMCA8IHdpZHRoIDwgZGF0YXNpemUKKyAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICAg
ICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQK
KyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPmNoaWxkKDEp
LT5oYXNJbnQoKQorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KS0+aGFzSW50KCkKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50
KCkpIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMSA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3Qg
bWFzazIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgICAg
ICAgICAgdWludDY0X3QgbWFzazMgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQobWFzazEpOworICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
LT50eXBlKCkgPT0gSW50NjQgPyA2NCA6IDMyOworICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxp
ZE1hc2sxID0gbWFzazEgJiYgIShtYXNrMSAmIChtYXNrMSArIDEpKSAmJiB3aWR0aCA8IGRhdGFz
aXplOworICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZE1hc2syID0gbWFzazIgPT0gbWFzazMg
JiYgKChtYXNrMiA8PCAxKSAtIDEpID09IG1hc2sxOworICAgICAgICAgICAgICAgIGlmIChpc1Zh
bGlkTWFzazEgJiYgaXNWYWxpZE1hc2syKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBh
bW91bnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3Zh
bHVlLT5vcmlnaW4oKSwgZGF0YXNpemUgLSB3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBzaGxWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgU2hs
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5jaGlsZCgw
KSwgYW1vdW50KTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KFNT
aHIsIG1fdmFsdWUtPm9yaWdpbigpLCBzaGxWYWx1ZSwgYW1vdW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IFN1Yihjb25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAg
IC8vIEludG8gdGhpczogY29uc3RhbnQxIC0gY29uc3RhbnQyCiAgICAgICAgICAgICBpZiAoVmFs
dWUqIGNvbnN0YW50U3ViID0gbV92YWx1ZS0+Y2hpbGQoMCktPnN1YkNvbnN0YW50KG1fcHJvYywg
bV92YWx1ZS0+Y2hpbGQoMSkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlcwppbmRleCBmNDRjYmYwZjY2ZTA1NDc0ZGY1NDdiMDA1NTk3MmZkZjAx
NDM2OTFmLi5iZTIzZmY4YjczZjhjNWY3ODY4ZmUxMTg2YTY0MTk5MGUzNDNmODc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTg1NCw2
ICs4NTQsMTggQEAgYXJtNjQ6IEV4dHJhY3RJbnNlcnRCaXRmaWVsZEF0TG93RW5kMzIgVTpHOjMy
LCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogYXJtNjQ6IEV4dHJhY3RJbnNlcnRCaXRmaWVsZEF0
TG93RW5kNjQgVTpHOjY0LCBVOkc6MzIsIFU6RzozMiwgRDpHOjY0CiAgICAgVG1wLCBJbW0sIElt
bSwgVG1wCiAKK2FybTY0OiBJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyIFU6RzozMiwgVTpH
OjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIEltbSwgSW1tLCBUbXAKKworYXJtNjQ6IElu
c2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQgVTpHOjY0LCBVOkc6MzIsIFU6RzozMiwgRDpHOjY0
CisgICAgVG1wLCBJbW0sIEltbSwgVG1wCisKK2FybTY0OiBFeHRyYWN0U2lnbmVkQml0ZmllbGQz
MiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBJbW0sIEltbSwgVG1w
CisKK2FybTY0OiBFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMy
LCBEOkc6NjQKKyAgICBUbXAsIEltbSwgSW1tLCBUbXAKKwogIyBUaGUgZmlyc3Qgb3BlcmFuZCBp
cyByYXguCiAjIEZJWE1FOiBUaGlzIGZvcm11bGF0aW9uIG1lYW5zIHRoYXQgdGhlIGJvb2xlYW4g
cmVzdWx0IGNhbm5vdCBiZSBwdXQgaW4gZWF4LCBldmVuIHRob3VnaCBhbGwgdXNlcnMKICMgb2Yg
dGhpcyB3b3VsZCBiZSBPSyB3aXRoIHRoYXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5k
ZXggOGVkYmRlZmU4N2I3ZjU1ZGNmMmRjNTI0YWViMDAwNmI4ZmQxZmE0ZS4uODUwMDM1MzQ5OTVj
MDZkOWE0ZjVjZjZhNmM3YTIyNTM4NzZjMjQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
aApAQCAtNDM2LDYgKzQzNiwxMCBAQCB2b2lkIHRlc3RCSUMzMigpOwogdm9pZCB0ZXN0QklDNjQo
KTsKIHZvaWQgdGVzdE9yTm90MzIoKTsKIHZvaWQgdGVzdE9yTm90NjQoKTsKK3ZvaWQgdGVzdElu
c2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKTsKK3ZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZp
ZWxkSW5aZXJvNjQoKTsKK3ZvaWQgdGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKCk7Cit2b2lk
IHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCgpOwogdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0
UmlnaHRBcmdJbW1NYXNrMzIoKTsKIHZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1t
TWFzazY0KCk7CiB2b2lkIHRlc3RCYXNpY1NlbGVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjNfMi5jcHAKaW5kZXggZGQ0MDkwYWIwNGIwMTEzMTgwMGY1ZWE3NTkzZGU2NjEwMzE0Mjkz
Yi4uZDQ4MjMyNDI3YThiZDkwZTgyZjBiNWFkYjU5MzZlMjFlOTEzZWVmYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCkBAIC00NTk5LDYgKzQ1OTksMTAgQEAgdm9pZCBhZGRC
aXRUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
KT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RCSUM2NCgpKTsKICAgICBSVU4odGVzdE9yTm90MzIo
KSk7CiAgICAgUlVOKHRlc3RPck5vdDY0KCkpOworICAgIFJVTih0ZXN0SW5zZXJ0U2lnbmVkQml0
ZmllbGRJblplcm8zMigpKTsKKyAgICBSVU4odGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJv
NjQoKSk7CisgICAgUlVOKHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQzMigpKTsKKyAgICBSVU4o
dGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDY0KCkpOwogICAgIFJVTih0ZXN0Qml0QW5kWmVyb1No
aWZ0UmlnaHRBcmdJbW1NYXNrMzIoKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdo
dEFyZ0ltbU1hc2s2NCgpKTsKICAgICBSVU4odGVzdEJpdEFuZEFyZ3MoNDMsIDQzKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCA3Yjc2ZmEwYmUwMDI0NDc4MDM2Nzhl
ZTdmMTE4YzQwNmI0MWQwZGY4Li4wNjQxYjg0Y2ZlNjUyNzAyMGJjMDZiZTU1Y2M5ZGVjZGVkZGQz
MTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTI4LDYgKzI4LDE3
OCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAordm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0Zmll
bGRJblplcm8zMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQzMl90IHNyYyA9IDB4ZmZmZmZmZmY7Cisg
ICAgVmVjdG9yPGludDMyX3Q+IGxzYnMgPSB7IDEsIDE0LCAyOSB9OworICAgIFZlY3RvcjxpbnQz
Ml90PiB3aWR0aHMgPSB7IDMwLCAxNywgMiB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiAoKChz
cmMgJiBtYXNrMSkgXiBtYXNrMikgLSBtYXNrMikgPDwgbHNiCisgICAgLy8gd2hlcmU6IG1hc2sx
ID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIC8vICAgICAgICBtYXNrMiA9IDEgPDwgKHdpZHRoIC0g
MSkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbHNiLCBpbnQzMl90IG1hc2sxLCBpbnQz
Ml90IG1hc2syKSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIHNy
Y1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1
ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2sxVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworICAgICAgICBWYWx1ZSogbWFzazJW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNr
Mik7CisKKyAgICAgICAgVmFsdWUqIGFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBCaXRBbmQsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbWFzazFWYWx1ZSk7CisgICAgICAgIFZh
bHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmln
aW4oKSwgYW5kVmFsdWUsIG1hc2syVmFsdWUpOworICAgICAgICBWYWx1ZSogc3ViVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIHhvclZhbHVlLCBtYXNr
MlZhbHVlKTsKKworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBzdWJWYWx1ZSwgbHNiVmFsdWUpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic2JmaXoiKTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgc3JjKTsKKyAgICB9OworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGludDMy
X3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgaW50MzJfdCB3aWR0aCA9IHdpZHRocy5hdChp
KTsKKyAgICAgICAgaW50MzJfdCBtYXNrMSA9ICgxIDw8IHdpZHRoKSAtIDE7CisgICAgICAgIGlu
dDMyX3QgbWFzazIgPSAxIDw8ICh3aWR0aCAtIDEpOworICAgICAgICBpbnQzMl90IGJmc3ggPSAo
KHNyYyAmIG1hc2sxKSBeIG1hc2syKSAtIG1hc2syOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwg
bWFzazEsIG1hc2syKSA9PSAoYmZzeCA8PCBsc2IpKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdElu
c2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRl
ZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgaW50NjRfdCBzcmMg
PSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPGludDY0X3Q+IGxzYnMgPSB7IDEsIDMw
LCA2MiB9OworICAgIFZlY3RvcjxpbnQ2NF90PiB3aWR0aHMgPSB7IDYyLCAzMywgMSB9OworCisg
ICAgLy8gVGVzdCBQYXR0ZXJuOiAoKHNyYyA8PCBhbW91bnQpID4+IGFtb3VudCkgPDwgbHNiCisg
ICAgLy8gd2hlcmU6IGFtb3VudCA9IGRhdGFzaXplIC0gd2lkdGgKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKGludDY0X3QgbHNiLCBpbnQ2NF90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAg
VmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGxzYik7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVl
KiBzaWduZWRSaWdodFNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgU1NociwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBzcmNWYWx1ZSwgYW1vdW50VmFsdWUpLCAKKyAg
ICAgICAgICAgIGFtb3VudFZhbHVlKTsKKworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBzaWduZWRSaWdodFNo
aWZ0VmFsdWUsIGxzYlZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgInNiZml6Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+
KCpjb2RlLCBzcmMpOworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW50NjRfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAg
ICBpbnQ2NF90IHdpZHRoID0gd2lkdGhzLmF0KGkpOworICAgICAgICBpbnQ2NF90IGFtb3VudCA9
IENIQVJfQklUICogc2l6ZW9mKHNyYykgLSB3aWR0aDsKKyAgICAgICAgaW50NjRfdCBiZnN4ID0g
KHNyYyA8PCBhbW91bnQpID4+IGFtb3VudDsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2IsIGFtb3Vu
dCkgPT0gKGJmc3ggPDwgbHNiKSk7CisgICAgfQorfQorCit2b2lkIHRlc3RFeHRyYWN0U2lnbmVk
Qml0ZmllbGQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQzMl90IHNyYyA9IDB4ZmZmZmZmZmY7Cisg
ICAgVmVjdG9yPGludDMyX3Q+IGxzYnMgPSB7IDEsIDE0LCAyOSB9OworICAgIFZlY3RvcjxpbnQz
Ml90PiB3aWR0aHMgPSB7IDMwLCAxNywgMiB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiAoKChz
cmMgPj4gbHNiKSAmIG1hc2sxKSBeIG1hc2syKSAtIG1hc2syCisgICAgLy8gd2hlcmU6IG1hc2sx
ID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIC8vICAgICAgICBtYXNrMiA9IDEgPDwgKHdpZHRoIC0g
MSkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbHNiLCBpbnQzMl90IG1hc2sxLCBpbnQz
Ml90IG1hc2syKSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIHNy
Y1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1
ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2sxVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworICAgICAgICBWYWx1ZSogbWFzazJW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNr
Mik7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFNTaHIsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICBWYWx1
ZSogYW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2lu
KCksIHNoaWZ0VmFsdWUsIG1hc2sxVmFsdWUpOworICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFuZFZhbHVlLCBt
YXNrMlZhbHVlKTsKKworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB4b3JWYWx1ZSwgbWFzazJWYWx1ZSkpOwor
CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNB
Uk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzYmZ4Iik7
CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIHNyYyk7CisgICAgfTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7ICsraSkgeworICAgICAgICBp
bnQzMl90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIGludDMyX3Qgd2lkdGggPSB3aWR0aHMu
YXQoaSk7CisgICAgICAgIGludDMyX3QgbWFzazEgPSAoMSA8PCB3aWR0aCkgLSAxOworICAgICAg
ICBpbnQzMl90IG1hc2syID0gMSA8PCAod2lkdGggLSAxKTsKKyAgICAgICAgaW50MzJfdCByZXN1
bHQgPSAoKChzcmMgPj4gbHNiKSAmIG1hc2sxKSBeIG1hc2syKSAtIG1hc2syOworICAgICAgICBD
SEVDSyh0ZXN0KGxzYiwgbWFzazEsIG1hc2syKSA9PSByZXN1bHQpOworICAgIH0KK30KKwordm9p
ZCB0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkNjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6
OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgaW50NjRfdCBz
cmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPGludDY0X3Q+IGxzYnMgPSB7IDEs
IDMwLCA2MiB9OworICAgIFZlY3RvcjxpbnQ2NF90PiB3aWR0aHMgPSB7IDYyLCAzMywgMSB9Owor
CisgICAgLy8gVGVzdCBQYXR0ZXJuOiAoKHNyYyA+PiBsc2IpIDw8IGFtb3VudCkgPj4gYW1vdW50
CisgICAgLy8gd2hlcmU6IGFtb3VudCA9IGRhdGFzaXplIC0gd2lkdGgKKyAgICBhdXRvIHRlc3Qg
PSBbJl0gKGludDY0X3QgbHNiLCBpbnQ2NF90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAg
IFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworCisgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGxzYik7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZh
bHVlKiByaWdodFNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIs
IE9yaWdpbigpLCBzcmNWYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICBWYWx1ZSogbGVmdFNoaWZ0
VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIHJpZ2h0
U2hpZnRWYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBWYWx1ZSogc2lnbmVkUmlnaHRTaGlm
dFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbGVm
dFNoaWZ0VmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHNpZ25lZFJpZ2h0U2hpZnRWYWx1ZSk7CisK
KyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FS
TTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInNiZngiKTsK
KyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIHNyYyk7CisgICAgfTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7ICsraSkgeworICAgICAgICBp
bnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIGludDY0X3Qgd2lkdGggPSB3aWR0aHMu
YXQoaSk7CisgICAgICAgIGludDY0X3QgYW1vdW50ID0gQ0hBUl9CSVQgKiBzaXplb2Yoc3JjKSAt
IHdpZHRoOworICAgICAgICBpbnQ2NF90IHJlc3VsdCA9ICgoc3JjID4+IGxzYikgPDwgYW1vdW50
KSA+PiBhbW91bnQ7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBhbW91bnQpID09IHJlc3VsdCk7
CisgICAgfQorfQorCiB2b2lkIHRlc3RCaXRPckJpdE9yQXJnSW1tSW1tMzIoaW50IGEsIGludCBi
LCBpbnQgYykKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432500</attachid>
            <date>2021-06-29 10:48:46 -0700</date>
            <delta_ts>2021-06-29 11:41:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227203-20210629124845.patch</filename>
            <type>text/plain</type>
            <size>31661</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
YjBlYzcxNzhiNGM3NDI5MzNlYjA3Zjk1MjM4Y2M0MDFjOTZhN2MzLi40MmUwMmU5OWI2YjM5ZWE3
MjliZTM0MTEwMzE3NDNjNjM3NmQzNWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTUgQEAKKzIwMjEtMDYtMjggIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHVzZSBTQlggYW5kIFNCRklaIHN1cHBvcnRlZCBieSBBUk02NAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjAzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyB0d28g
bW9kaWZpY2F0aW9uczoKKyAgICAgICAgICAgIDEuIEludHJvZHVjZSBhIHN0cmVuZ3RoIHJlZHVj
dGlvbiBydWxlIGZvciBzaWduIGV4dGVuZGluZyBiaXRmaWVsZC4KKyAgICAgICAgICAgIDIuIEFk
ZCBTaWduZWQgQml0ZmllbGQgRXh0cmFjdCAoU0JGWCkgYW5kIFNpZ25lZCBCaXRmaWVsZCBJbnNl
cnQgCisgICAgICAgICAgICAgICBpbiBaZXJvIChTQkZJWikgdG8gQWlyIG9wY29kZSB0byBzZXJ2
ZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4KKworICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMjIyBQYXJ0IEEgU2ln
biBleHRlbmRpbmcgZnJvbSBhIHZhcmlhYmxlIGJpdC13aWR0aCAjIyMKKyAgICAgICAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg
ICBBY2NvcmRpbmcgdG8gQml0IFR3aWRkbGluZyBIYWNrcywgdGhlcmUgYXJlIHR3byB3YXlzIHRv
IHNpZ24gZXh0ZW5kIGJpdGZpZWxkLgorICAgICAgICAoaHR0cHM6Ly9ncmFwaGljcy5zdGFuZm9y
ZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbCNWYXJpYWJsZVNpZ25FeHRlbmQpCisKKyAgICAg
ICAgaW50IGJmOyAgICAvLyBzaWduIGV4dGVuZCB0aGlzIHdpZHRoLWJpdCBudW1iZXIgdG8gYmZz
eAorICAgICAgICBpbnQgd2lkdGg7IC8vIG51bWJlciBvZiBiaXRzIHJlcHJlc2VudGluZyB0aGUg
bnVtYmVyIGluIGJmCisgICAgICAgIGludCBiZnN4OyAgLy8gcmVzdWx0aW5nIHNpZ24tZXh0ZW5k
ZWQgbnVtYmVyCisKKyAgICAgICAgQXBwcm9hY2ggMQorICAgICAgICBtYXNrMSA9ICgxIDw8IHdp
ZHRoKSAtIDEKKyAgICAgICAgbWFzazIgPSAxIDw8ICh3aWR0aCAtIDEpCisgICAgICAgIGJmICAg
ID0gYmYgJiBtYXNrMSAgICAgIC8vIHplcm8gYml0cyBpbiBiZiBhYm92ZSBwb3NpdGlvbiB3aWR0
aCAgCisgICAgICAgIGJmc3ggID0gKGJmIF4gbWFzazIpIC0gbWFzazIKKworICAgICAgICBBcHBy
b2FjaCAyCisgICAgICAgIGFtb3VudCA9IENIQVJfQklUICogc2l6ZW9mKGJmKSAtIHdpZHRoCisg
ICAgICAgIGJmc3ggICA9IChiZiA8PCBhbW91bnQpID4+IGFtb3VudAorCisgICAgICAgIFRoZW4s
IGEgbmV3IHN0cmVuZ3RoIHJlZHVjdGlvbiBydWxlIGlzIGludHJvZHVjZWQ6CisgICAgICAgICAg
ICBUdXJuIHRoaXM6ICgoYmYgJiBtYXNrMSkgXiBtYXNrMikgLSBtYXNrMiAKKyAgICAgICAgICAg
IEludG8gdGhpczogKGJmIDw8IGFtb3VudCkgPj4gYW1vdW50CisKKyAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgICAgICAjIyMgUGFydCBCIFNCRlggIyMjCisgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgICAgR2l2ZW4gaW5zdHJ1Y3Rpb246CisgICAgICAgIHNiZnggUmQs
IFJuLCBsc2IsIHdpZHRoCisKKyAgICAgICAgU2lnbmVkIEJpdGZpZWxkIEV4dHJhY3QgKFNCRlgp
IGV4dHJhY3RzIHdpZHRoIG51bWJlciBvZiBhZGphY2VudCBiaXRzIGF0IGxzYiBwb3NpdGlvbiAK
KyAgICAgICAgZnJvbSBhIHJlZ2lzdGVyIFJuLCBzaWduLWV4dGVuZHMgdGhlbSB0byB0aGUgc2l6
ZSBvZiB0aGUgcmVnaXN0ZXIsIGFuZCB3cml0ZXMgdGhlIAorICAgICAgICByZXN1bHQgdG8gdGhl
IGRlc3RpbmF0aW9uIHJlZ2lzdGVyIFJkLgorCisgICAgICAgIFRoZSBlcXVpdmFsZW50IHBhdHRl
cm5zIG9mIHRoaXMgaW5zdHJ1Y3Rpb24gYXJlOgorCisgICAgICAgIFBhdHRlcm4gMToKKyAgICAg
ICAgICAgIGJmICAgID0gc3JjID4+IGxzYgorICAgICAgICAgICAgZHN0ICAgPSAoKGJmICYgbWFz
azEpIF4gbWFzazIpIC0gbWFzazIKKyAgICAgICAgICAgIG1hc2sxID0gKDEgPDwgd2lkdGgpIC0g
MQorICAgICAgICAgICAgbWFzazIgPSAxIDw8ICh3aWR0aCAtIDEpIC8vIChtYXNrMiA8PCAxKSAt
IDEgPSBtYXNrMQorCisgICAgICAgIFBhdHRlcm4gMjoKKyAgICAgICAgICAgIGJmICAgICA9IHNy
YyA+PiBsc2IKKyAgICAgICAgICAgIGFtb3VudCA9IENIQVJfQklUICogc2l6ZW9mKGJmKSAtIHdp
ZHRoCisgICAgICAgICAgICBkc3QgICAgPSAoYmYgPDwgYW1vdW50KSA+PiBhbW91bnQKKyAgICAg
ICAgCisgICAgICAgIFRoZW4sIChiZiA8PCBhbW91bnQpID4+IGFtb3VudCBpcyBzZWxlY3RlZCBh
cyB0aGUgY2Fub25pY2FsIGZvcm0gd2l0aCB0aGUgc3RyZW5ndGggcmVkdWN0aW9uIAorICAgICAg
ICBydWxlIGludHJvZHVjZWQgYWJvdmUuCisKKyAgICAgICAgR2l2ZW4gQjMgSVI6CisgICAgICAg
IEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAgSW50IEAxID0gbHNiCisgICAgICAg
IEludCBAMiA9IGFtb3VudAorICAgICAgICBJbnQgQDMgPSBaU2hyKEAwLCBAMSkKKyAgICAgICAg
SW50IEA0ID0gU2hsKEAzLCBAMikKKyAgICAgICAgSW50IEA1ID0gU1NocihANCwgQDIpCisgICAg
ICAgIFZvaWRANiA9IFJldHVybihANSwgVGVybWluYWwpCisKKyAgICAgICAgQmVmb3JlIEFkZGlu
ZyBCSUM6CisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIFVyc2hpZnQgJXgw
LCAgICBsc2IsICV4MCwgQDMKKyAgICAgICAgTHNoaWZ0ICAleDAsIGFtb3VudCwgJXgwLCBANAor
ICAgICAgICBSc2hpZnQgICV4MCwgYW1vdW50LCAleDAsIEA1CisgICAgICAgIFJldCAgICAgJXgw
LCAgICAgICAgICAgICAgQDYKKworICAgICAgICBBZnRlciBBZGRpbmcgQklDOgorICAgICAgICAv
LyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBFeHRyYWN0U2lnbmVkQml0ZmllbGQgJXgwLCBs
c2IsIHdpZHRoLCAleDAsIEA1CisgICAgICAgIFJldCAgICAgICAgICAgICAgICAgICAleDAsICAg
ICAgICAgICAgICAgICAgQDYKKyAgICAKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAgICAgIyMjIFBhcnQgQiBTQkZJWiAjIyMKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAgICAgR2l2ZW4gaW5zdHJ1Y3Rpb246CisgICAgICAgIHNiZml6IFJkLCBSbiwgbHNiLCB3
aWR0aAorCisgICAgICAgIFNpZ25lZCBCaXRmaWVsZCBJbnNlcnQgaW4gWmVybyAoU0JGSVopIHpl
cm9lcyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgUmQgYW5kIGNvcGllcyAKKyAgICAgICAgd2lk
dGggbnVtYmVyIG9mIGNvbnRpZ3VvdXMgYml0cyBmcm9tIGEgc291cmNlIHJlZ2lzdGVyIFJuIGlu
dG8gbHNiIHBvc2l0aW9uIGluIHRoZSAKKyAgICAgICAgZGVzdGluYXRpb24gcmVnaXN0ZXIsIHNp
Z24tZXh0ZW5kaW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgdHJhbnNmZXJyZWQg
dmFsdWUuCisKKyAgICAgICAgVGhlIGVxdWl2YWxlbnQgcGF0dGVybnMgb2YgdGhpcyBpbnN0cnVj
dGlvbiBhcmU6CisKKyAgICAgICAgUGF0dGVybiAxOgorICAgICAgICAgICAgYmZzeCAgPSAoKHNy
YyAmIG1hc2sxKSBeIG1hc2syKSAtIG1hc2syCisgICAgICAgICAgICBkc3QgICA9IGJmc3ggPDwg
bHNiCisgICAgICAgICAgICBtYXNrMSA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgICAgIG1h
c2syID0gMSA8PCAod2lkdGggLSAxKSAvLyAobWFzazIgPDwgMSkgLSAxID0gbWFzazEKKworICAg
ICAgICBQYXR0ZXJuIDI6CisgICAgICAgICAgICBhbW91bnQgPSBDSEFSX0JJVCAqIHNpemVvZihi
ZikgLSB3aWR0aAorICAgICAgICAgICAgYmZzeCAgID0gKHNyYyA8PCBhbW91bnQpID4+IGFtb3Vu
dAorICAgICAgICAgICAgZHN0ICAgID0gYmZzeCA8PCBsc2IKKyAgICAgICAgCisgICAgICAgIFRo
ZW4sICgoc3JjIDw8IGFtb3VudCkgPj4gYW1vdW50KSA8PCBsc2IgaXMgc2VsZWN0ZWQgYXMgdGhl
IGNhbm9uaWNhbCBmb3JtIHdpdGggdGhlIAorICAgICAgICBzdHJlbmd0aCByZWR1Y3Rpb24gcnVs
ZSBpbnRyb2R1Y2VkIGFib3ZlLgorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQg
QDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IGxzYgorICAgICAgICBJbnQg
QDIgPSBhbW91bnQKKyAgICAgICAgSW50IEAzID0gU2hsKEAwLCBAMikKKyAgICAgICAgSW50IEA0
ID0gU1NocihAMywgQDIpCisgICAgICAgIEludCBANSA9IFNobChANCwgQDEpCisgICAgICAgIFZv
aWRANiA9IFJldHVybihANSwgVGVybWluYWwpCisKKyAgICAgICAgQmVmb3JlIEFkZGluZyBCSUM6
CisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIExzaGlmdCAleDAsIGFtb3Vu
dCwgJXgwLCBAMworICAgICAgICBSc2hpZnQgJXgwLCBhbW91bnQsICV4MCwgQDQKKyAgICAgICAg
THNoaWZ0ICV4MCwgICAgbHNiLCAleDAsIEA1CisgICAgICAgIFJldCAgICAleDAsICAgICAgICAg
ICAgICBANgorCisgICAgICAgIEFmdGVyIEFkZGluZyBCSUM6CisgICAgICAgIC8vIE5ldyBvcHRp
bWl6ZWQgQUlSCisgICAgICAgIEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvICV4MCwgbHNiLCB3
aWR0aCwgJXgwLCBANQorICAgICAgICBSZXQgICAgICAgICAgICAgICAgICAgICAgICAleDAsICAg
ICAgICAgICAgICAgICAgQDYKKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Omluc2VydFNpZ25lZEJp
dGZpZWxkSW5aZXJvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjppbnNl
cnRTaWduZWRCaXRmaWVsZEluWmVybzY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6ZXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTY0OjpleHRyYWN0U2lnbmVkQml0ZmllbGQ2NCk6CisgICAgICAgICogYXNzZW1ibGVy
L3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5a
ZXJvMzIpOgorICAgICAgICAoSlNDOjp0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm82NCk6
CisgICAgICAgIChKU0M6OnRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQzMik6CisgICAgICAgIChK
U0M6OnRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCk6CisgICAgICAgICogYjMvQjNMb3dlclRv
QWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBi
My9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAg
ICogYjMvdGVzdGIzXzIuY3BwOgorICAgICAgICAoYWRkQml0VGVzdHMpOgorICAgICAgICAqIGIz
L3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMy
KToKKyAgICAgICAgKHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzY0KToKKyAgICAgICAg
KHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQzMik6CisgICAgICAgICh0ZXN0RXh0cmFjdFNpZ25l
ZEJpdGZpZWxkNjQpOgorCiAyMDIxLTA2LTI4ICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5nQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0byBpbnN0cnVjdGlvbiBzZWxl
Y3RvciB0byB1c2UgQklDIHN1cHBvcnRlZCBieSBBUk02NApAQCAtNiw3ICsxNTgsNyBAQAogICAg
ICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KIAogICAgICAgICBUaGlzIHBhdGNoIGluY2x1
ZGVzIHRocmVlIG1vZGlmaWNhdGlvbnM6Ci0gICAgICAgICAgICAxLiBBZGQgYml0IGNsZWFyIChC
SUMpLCBvciBub3QgKE9STiksIGFuZCBleHRyYWN0IGFuZCBpbnNlcnQgYml0ZmllbGQgYXQgbG93
ZXIgZW5kIChGQlhJTCkgCisgICAgICAgICAgICAxLiBBZGQgYml0IGNsZWFyIChCSUMpLCBvciBu
b3QgKE9STiksIGFuZCBleHRyYWN0IGFuZCBpbnNlcnQgYml0ZmllbGQgYXQgbG93ZXIgZW5kIChC
RlhJTCkgCiAgICAgICAgICAgICAgICB0byBBaXIgb3Bjb2RlIHRvIHNlcnZlIGludHJ1Y2l0b24g
c2VsZWN0b3IuCiAgICAgICAgICAgICAyLiBBZGQgYml0ZmllbGQgY2xlYXIgKEJGQykgdG8gTWFj
cm9Bc3NlbWJsZXIuCiAgICAgICAgICAgICA0LiBEbyByZWZhY3RvcmluZyAtIHJlbmFtZSBBaXIg
b3Bjb2RlcyBhZGRlZCBpbiB0aGUgcHJldmlvdXMgcGF0Y2hlcy4KQEAgLTk3LDEzICsyNDksMTMg
QEAKICAgICAgICAgUmV0ICV4MCwgICAgICAgICAgIEA1CiAKICAgICAgICAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgICAgICAgIyMjIFBhcnQgQSBGQlhJTCAjIyMKKyAgICAgICAgIyMjIFBhcnQg
QSBCRlhJTCAjIyMKICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgR2l2ZW4g
dGhlIG9wZXJhdGlvbjoKIAogICAgICAgICBiZnhpbCBSZCwgUm4sIGxzYiwgd2lkdGgKIAotICAg
ICAgICBCaXRmaWVsZCBleHRyYWN0IGFuZCBpbnNlcnQgYXQgbG93IGVuZChGQlhJTCkgY29waWVz
IGFueSBudW1iZXIgb2YgbG93LW9yZGVyIGJpdHMgCisgICAgICAgIEJpdGZpZWxkIGV4dHJhY3Qg
YW5kIGluc2VydCBhdCBsb3cgZW5kKEJGWElMKSBjb3BpZXMgYW55IG51bWJlciBvZiBsb3ctb3Jk
ZXIgYml0cyAKICAgICAgICAgZnJvbSBhIHNvdXJjZSByZWdpc3RlciBpbnRvIHRoZSBzYW1lIG51
bWJlciBvZiBhZGphY2VudCBiaXRzIGF0IHRoZSBsb3cgZW5kIGluIAogICAgICAgICB0aGUgZGVz
dGluYXRpb24gcmVnaXN0ZXIsIGxlYXZpbmcgb3RoZXIgYml0cyB1bmNoYW5nZWQuCiAKQEAgLTEz
MCw3ICsyODIsNyBAQAogICAgICAgICA0LiAwIDwgd2lkdGggPCBkYXRhc2l6ZQogICAgICAgICA1
LiBzaGlmdEFtb3VudCArIHdpZHRoIDw9IGRhdGFzaXplCiAKLSAgICAgICAgVGhlIGNhbm9uaWNh
bCBmb3JtIHRvIG1hdGNoIEZCWElMIGlzIGQgPSAoKG4gPj4gbHNiKSAmIG1hc2sxKSB8IChkICYg
bWFzazIpLgorICAgICAgICBUaGUgY2Fub25pY2FsIGZvcm0gdG8gbWF0Y2ggQkZYSUwgaXMgZCA9
ICgobiA+PiBsc2IpICYgbWFzazEpIHwgKGQgJiBtYXNrMikuCiAgICAgICAgIAogICAgICAgICBH
aXZlbiBCMyBJUjoKICAgICAgICAgSW50IEAwID0gQXJndW1lbnRSZWcoJXgwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApp
bmRleCAwODkxNTk1YjRkYWFlMzRkZjdkZmU3MzdmMjA4YjBmMDFiNzIzNWFkLi41N2RkZGNjMTMy
YThiNDJjMzNiZDZjMjY1YjUxYmJlNmM5NWM1MmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtNDQ4LDcgKzQ0
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZGVzdCwgZGVzdCwg
ZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgLy8gQml0IE9wZXJhdGlvbnM6CisgICAg
Ly8gQml0IG9wZXJhdGlvbnM6CiAgICAgdm9pZCBleHRyYWN0VW5zaWduZWRCaXRmaWVsZDMyKFJl
Z2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnViZng8MzI+KGRlc3QsIHNy
YywgbHNiLm1fdmFsdWUsIHdpZHRoLm1fdmFsdWUpOwpAQCAtNTE5LDYgKzUxOSwyNiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmJmeGlsPDY0PihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVl
LCB3aWR0aC5tX3ZhbHVlKTsKICAgICB9CiAKKyAgICB2b2lkIGluc2VydFNpZ25lZEJpdGZpZWxk
SW5aZXJvMzIoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBsc2IsIFRydXN0ZWRJbW0zMiB3
aWR0aCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2JmaXo8
MzI+KGRlc3QsIHNyYywgbHNiLm1fdmFsdWUsIHdpZHRoLm1fdmFsdWUpOworICAgIH0KKworICAg
IHZvaWQgaW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm82NChSZWdpc3RlcklEIHNyYywgVHJ1c3Rl
ZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRoLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5zYmZpejw2ND4oZGVzdCwgc3JjLCBsc2IubV92YWx1ZSwgd2lk
dGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBleHRyYWN0U2lnbmVkQml0ZmllbGQzMihS
ZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRoLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zYmZ4PDMyPihkZXN0LCBz
cmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGV4dHJh
Y3RTaWduZWRCaXRmaWVsZDY0KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVz
dGVkSW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNiZng8NjQ+KGRlc3QsIHNyYywgbHNiLm1fdmFsdWUsIHdpZHRoLm1fdmFsdWUpOworICAg
IH0gICAgCisKICAgICB2b2lkIGNsZWFyQml0NjQoUmVnaXN0ZXJJRCBiaXRUb0NsZWFyLCBSZWdp
c3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaEZvck1hc2sgPSBJbnZhbGlkR1BSUmVnKQog
ICAgIHsKICAgICAgICAgaWYgKHNjcmF0Y2hGb3JNYXNrID09IEludmFsaWRHUFJSZWcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCmluZGV4IDU4NjNiYTUw
Zjc2NjVlZDhkNGU0MjA5MDJlYTdlYzg4MzcyNzU0NWIuLjAzZDA2MWFjODE3OTA3ZDE4MDY4ODhj
MTA3ZjY2ZDE4OGE4ZGFmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvdGVzdG1hc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
dGVzdG1hc20uY3BwCkBAIC0xNDUxLDYgKzE0NTEsMTI1IEBAIHZvaWQgdGVzdE9yTm90NjQoKQog
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4odGVzdCwgMFVMTCwgbWFzayksIH5tYXNr
KTsKICAgICB9CiB9CisKK3ZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKQor
eworICAgIHVpbnQzMl90IHNyYyA9IDB4ZjBmMGYwZjA7CisgICAgVmVjdG9yPHVpbnQzMl90PiBp
bW1zID0geyAwLCAxLCA1LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2MywgNjQgfTsKKyAg
ICBmb3IgKGF1dG8gbHNiIDogaW1tcykgeworICAgICAgICBmb3IgKGF1dG8gd2lkdGggOiBpbW1z
KSB7CisgICAgICAgICAgICBpZiAobHNiID49IDAgJiYgd2lkdGggPiAwICYmIGxzYiArIHdpZHRo
IDwgMzIpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJv
MzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQu
aW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8zMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3aWR0aCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
ICAgIGludDMyX3QgYmYgPSBzcmM7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtYXNrMSA9ICgx
IDw8IHdpZHRoKSAtIDE7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtYXNrMiA9IDEgPDwgKHdp
ZHRoIC0gMSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCBiZnN4ID0gKChiZiAmIG1hc2sxKSBe
IG1hc2syKSAtIG1hc2syOworCisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMy
X3Q+KGluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIsIHNyYyksIGJmc3ggPDwgbHNiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0SW5zZXJ0U2lnbmVk
Qml0ZmllbGRJblplcm82NCgpCit7CisgICAgaW50NjRfdCBzcmMgPSAweGYwZjBmMGYwZjBmMGYw
ZjA7CisgICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCA1LCA3LCAzMCwgMzEsIDMy
LCA0MiwgNTYsIDYyLCA2MywgNjQgfTsKKyAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgeworICAg
ICAgICBmb3IgKGF1dG8gd2lkdGggOiBpbW1zKSB7CisgICAgICAgICAgICBpZiAobHNiID49IDAg
JiYgd2lkdGggPiAwICYmIGxzYiArIHdpZHRoIDwgNjQpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsK
KworICAgICAgICAgICAgICAgICAgICBqaXQuaW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm82NChH
UFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMih3aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgYmYgPSBzcmM7CisgICAgICAg
ICAgICAgICAgaW50NjRfdCBhbW91bnQgPSBDSEFSX0JJVCAqIHNpemVvZihiZikgLSB3aWR0aDsK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IGJmc3ggPSAoYmYgPDwgYW1vdW50KSA+PiBhbW91bnQ7
CisKKyAgICAgICAgICAgICAgICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oaW5zZXJ0U2lnbmVk
Qml0ZmllbGRJblplcm82NCwgc3JjKSwgYmZzeCA8PCBsc2IpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQzMigpCit7
CisgICAgaW50MzJfdCBzcmMgPSAweGYwZjBmMGYwOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1t
cyA9IHsgMCwgMSwgNSwgNywgMzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0IH07CisgICAg
Zm9yIChhdXRvIGxzYiA6IGltbXMpIHsKKyAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykg
eworICAgICAgICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8
IDMyKSB7CisgICAgICAgICAgICAgICAgYXV0byBleHRyYWN0U2lnbmVkQml0ZmllbGQzMiA9IGNv
bXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5leHRyYWN0
U2lnbmVkQml0ZmllbGQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3aWR0aCksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3Qg
YmYgPSBzcmMgPj4gbHNiOworICAgICAgICAgICAgICAgIGludDMyX3QgbWFzazEgPSAoMSA8PCB3
aWR0aCkgLSAxOworICAgICAgICAgICAgICAgIGludDMyX3QgbWFzazIgPSAxIDw8ICh3aWR0aCAt
IDEpOworICAgICAgICAgICAgICAgIGludDMyX3QgYmZzeCA9ICgoYmYgJiBtYXNrMSkgXiBtYXNr
MikgLSBtYXNrMjsKKworICAgICAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90Pihl
eHRyYWN0U2lnbmVkQml0ZmllbGQzMiwgc3JjKSwgYmZzeCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDY0KCkKK3sK
KyAgICBpbnQ2NF90IHNyYyA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9
OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6
IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsg
d2lkdGggPCA2NCkgeworICAgICAgICAgICAgICAgIGF1dG8gZXh0cmFjdFNpZ25lZEJpdGZpZWxk
NjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQu
ZXh0cmFjdFNpZ25lZEJpdGZpZWxkNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBp
bnQ2NF90IGJmID0gc3JjID4+IGxzYjsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGFtb3VudCA9
IENIQVJfQklUICogc2l6ZW9mKGJmKSAtIHdpZHRoOworICAgICAgICAgICAgICAgIGludDY0X3Qg
YmZzeCA9IChiZiA8PCBhbW91bnQpID4+IGFtb3VudDsKKworICAgICAgICAgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ2NF90PihleHRyYWN0U2lnbmVkQml0ZmllbGQ2NCwgc3JjKSwgYmZzeCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKICNlbmRpZgogCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtMzYzNiw2ICszNzU1LDExIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9B
TkFMWVNJUwogCiAgICAgUlVOKHRlc3RPck5vdDMyKCkpOwogICAgIFJVTih0ZXN0T3JOb3Q2NCgp
KTsKKworICAgIFJVTih0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8zMigpKTsKKyAgICBS
VU4odGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQoKSk7CisgICAgUlVOKHRlc3RFeHRy
YWN0U2lnbmVkQml0ZmllbGQzMigpKTsKKyAgICBSVU4odGVzdEV4dHJhY3RTaWduZWRCaXRmaWVs
ZDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJN
NjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDZmMmVi
NmFmODRmNmI5MGJjMTExZGM3ZTJmMDljNmMwY2ExMTI1MWYuLmYxMjAzMWMxZGY2MWI2NGM3MmFi
NGU3YTM4ZTcyMjMzZjliYjkxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCkBAIC0yOTk4LDcgKzI5OTgsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAv
LyBVQkZJWiBQYXR0ZXJuOiBkID0gKG4gJiBtYXNrKSA8PCBsc2IgCiAgICAgICAgICAgICAvLyBX
aGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKLSAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5k
VUJGWiA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kVUJGSVog
PSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0g
b3Bjb2RlRm9yVHlwZShJbnNlcnRVbnNpZ25lZEJpdGZpZWxkSW5aZXJvMzIsIEluc2VydFVuc2ln
bmVkQml0ZmllbGRJblplcm82NCwgbV92YWx1ZS0+dHlwZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwgQXJn
OjpUbXApKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDI0LDcgKzMw
MjQsNDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH07CiAKLSAgICAgICAgICAgIGlmICh0cnlBcHBlbmRVQkZaKCkpCisgICAgICAgICAgICBp
ZiAodHJ5QXBwZW5kVUJGSVooKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIC8vIFNCRklaIFBhdHRlcm46IGQgPSAoKHNyYyA8PCBhbW91bnQpID4+IGFtb3VudCkgPDwg
bHNiCisgICAgICAgICAgICAvLyB3aGVyZTogYW1vdW50ID0gZGF0YXNpemUgLSB3aWR0aAorICAg
ICAgICAgICAgYXV0byB0cnlBcHBlbmRTQkZJWiA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKEluc2VydFNpZ25lZEJp
dGZpZWxkSW5aZXJvMzIsIEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQsIG1fdmFsdWUtPnR5
cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1w
LCBBcmc6OkltbSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBTU2hyIHx8
ICFjYW5CZUludGVybmFsKGxlZnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmNoaWxkKDApLT5vcGNvZGUoKSAhPSBTaGwgfHwg
IWNhbkJlSW50ZXJuYWwobGVmdC0+Y2hpbGQoMCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogc3JjVmFsdWUgPSBsZWZ0LT5jaGls
ZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGFtb3VudDFWYWx1ZSA9IGxl
ZnQtPmNoaWxkKDApLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYW1vdW50MlZh
bHVlID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0g
cmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5zKHNyY1ZhbHVlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICgh
aW1tKGFtb3VudDFWYWx1ZSkgfHwgIWltbShhbW91bnQyVmFsdWUpIHx8ICFpbW0obHNiVmFsdWUp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYg
KGFtb3VudDFWYWx1ZS0+YXNJbnQoKSA8IDAgfHwgYW1vdW50MlZhbHVlLT5hc0ludCgpIDwgMCB8
fCBsc2JWYWx1ZS0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudDEgPSBhbW91bnQxVmFsdWUtPmFz
SW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgYW1vdW50MiA9IGFtb3VudDJWYWx1ZS0+
YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JWYWx1ZS0+YXNJbnQo
KTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29kZSA9PSBJbnNlcnRT
aWduZWRCaXRmaWVsZEluWmVybzMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICB1aW50NjRf
dCB3aWR0aCA9IGRhdGFzaXplIC0gYW1vdW50MTsKKyAgICAgICAgICAgICAgICBpZiAoYW1vdW50
MSAhPSBhbW91bnQyIHx8ICF3aWR0aCB8fCBsc2IgKyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCB0bXAoc3JjVmFsdWUpLCBpbW0obHNiVmFsdWUpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1
ZSkpOworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQtPmNoaWxkKDApKTsKKyAg
ICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRTQkZJ
WigpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKHJpZ2h0LT5p
c0ludDMyKDEpKSB7CkBAIC0zMDM3LDcgKzMwNzYsNDkgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgU1NocjogewotICAgICAgICAgICAgYXBwZW5kU2hpZnQ8UnNoaWZ0MzIs
IFJzaGlmdDY0PihtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAg
ICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIFZhbHVl
KiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICAvLyBTQkZYIFBhdHRl
cm46ICgoc3JjID4+IGxzYikgPDwgYW1vdW50KSA+PiBhbW91bnQKKyAgICAgICAgICAgIC8vIFdo
ZXJlOiBhbW91bnQgPSBkYXRhc2l6ZSAtIHdpZHRoCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVu
ZFNCRlggPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gb3Bjb2RlRm9yVHlwZShFeHRyYWN0U2lnbmVkQml0ZmllbGQzMiwgRXh0cmFjdFNpZ25l
ZEJpdGZpZWxkNjQsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1Zh
bGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChs
ZWZ0LT5vcGNvZGUoKSAhPSBTaGwgfHwgIWNhbkJlSW50ZXJuYWwobGVmdCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoKGxlZnQtPmNoaWxk
KDApLT5vcGNvZGUoKSAhPSBaU2hyICYmIGxlZnQtPmNoaWxkKDApLT5vcGNvZGUoKSAhPSBTU2hy
KSB8fCAhY2FuQmVJbnRlcm5hbChsZWZ0LT5jaGlsZCgwKSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IGxlZnQt
PmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSBs
ZWZ0LT5jaGlsZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGFtb3VudDFW
YWx1ZSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBhbW91bnQyVmFs
dWUgPSByaWdodDsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29udGFpbnMoc3JjVmFs
dWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
aWYgKCFpbW0obHNiVmFsdWUpIHx8ICFpbW0oYW1vdW50MVZhbHVlKSB8fCAhaW1tKGFtb3VudDJW
YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBpZiAobHNiVmFsdWUtPmFzSW50KCkgPCAwIHx8IGFtb3VudDFWYWx1ZS0+YXNJbnQoKSA8IDAg
fHwgYW1vdW50MlZhbHVlLT5hc0ludCgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgdWludDY0X3QgYW1vdW50MSA9IGFtb3VudDFWYWx1
ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBhbW91bnQyID0gYW1vdW50MlZh
bHVlLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYlZhbHVlLT5h
c0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gb3Bjb2RlID09IEV4
dHJhY3RTaWduZWRCaXRmaWVsZDMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICB1aW50NjRf
dCB3aWR0aCA9IGRhdGFzaXplIC0gYW1vdW50MTsKKyAgICAgICAgICAgICAgICBpZiAoYW1vdW50
MSAhPSBhbW91bnQyIHx8ICF3aWR0aCB8fCBsc2IgKyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCB0bXAoc3JjVmFsdWUpLCBpbW0obHNiVmFsdWUpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1
ZSkpOworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQtPmNoaWxkKDApKTsKKyAg
ICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRTQkZY
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBhcHBlbmRTaGlmdDxS
c2hpZnQzMiwgUnNoaWZ0NjQ+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5j
cHAKaW5kZXggMjA2NTUxNDc1NzQyN2NhZjgyZmZlYTNkNWY2NTBjYjhlMjk4Y2JhZi4uYzQ3OWUx
ZjM1MzE3N2FhZjRiNDRmMzM3MmNlZGYxNjcwZjFmYTFhNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtNjE5LDYgKzYxOSwzMyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTdWI6CisgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFN1YihCaXRYb3IoQml0QW5kKHZhbHVlLCBtYXNrMSksIG1hc2syKSwg
bWFzazIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNTaHIoU2hsKHZhbHVlLCBhbW91bnQp
LCBhbW91bnQpCisgICAgICAgICAgICAvLyBDb25kaXRpb25zOiAKKyAgICAgICAgICAgIC8vIDEu
IG1hc2sxID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAgICAgLy8gMi4gbWFzazIgPSAxIDw8
ICh3aWR0aCAtIDEpCisgICAgICAgICAgICAvLyAzLiBhbW91bnQgPSBkYXRhc2l6ZSAtIHdpZHRo
CisgICAgICAgICAgICAvLyA0LiAwIDwgd2lkdGggPCBkYXRhc2l6ZQorICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZAorICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0lu
dCgpCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJ
bnQoKQorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgewor
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDApLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1
aW50NjRfdCBtYXNrMyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOworICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IHdpZHRoID0gV1RGOjpiaXRDb3VudChtYXNrMSk7CisgICAgICAgICAgICAg
ICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPnR5cGUo
KSA9PSBJbnQ2NCA/IDY0IDogMzI7CisgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkTWFzazEg
PSBtYXNrMSAmJiAhKG1hc2sxICYgKG1hc2sxICsgMSkpICYmIHdpZHRoIDwgZGF0YXNpemU7Cisg
ICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkTWFzazIgPSBtYXNrMiA9PSBtYXNrMyAmJiAoKG1h
c2syIDw8IDEpIC0gMSkgPT0gbWFzazE7CisgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRNYXNr
MSAmJiBpc1ZhbGlkTWFzazIpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGFtb3VudCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9y
aWdpbigpLCBkYXRhc2l6ZSAtIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNo
bFZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBTaGwsIG1fdmFs
dWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPmNoaWxkKDApLCBhbW91
bnQpOworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU1NociwgbV92
YWx1ZS0+b3JpZ2luKCksIHNobFZhbHVlLCBhbW91bnQpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogU3ViKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBjb25zdGFudDEgLSBjb25zdGFudDIKICAgICAgICAgICAgIGlmIChWYWx1ZSogY29u
c3RhbnRTdWIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+c3ViQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVl
LT5jaGlsZCgxKSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCmluZGV4IGY0NGNiZjBmNjZlMDU0NzRkZjU0N2IwMDU1OTcyZmRmMDE0MzY5MWYu
LmJlMjNmZjhiNzNmOGM1Zjc4NjhmZTExODZhNjQxOTkwZTM0M2Y4NzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtODU0LDYgKzg1NCwx
OCBAQCBhcm02NDogRXh0cmFjdEluc2VydEJpdGZpZWxkQXRMb3dFbmQzMiBVOkc6MzIsIFU6Rzoz
MiwgVTpHOjMyLCBaRDpHOjMyCiBhcm02NDogRXh0cmFjdEluc2VydEJpdGZpZWxkQXRMb3dFbmQ2
NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKICAgICBUbXAsIEltbSwgSW1tLCBUbXAK
IAorYXJtNjQ6IEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIgVTpHOjMyLCBVOkc6MzIsIFU6
RzozMiwgWkQ6RzozMgorICAgIFRtcCwgSW1tLCBJbW0sIFRtcAorCithcm02NDogSW5zZXJ0U2ln
bmVkQml0ZmllbGRJblplcm82NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKKyAgICBU
bXAsIEltbSwgSW1tLCBUbXAKKworYXJtNjQ6IEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyIFU6Rzoz
MiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIEltbSwgSW1tLCBUbXAKKworYXJt
NjQ6IEV4dHJhY3RTaWduZWRCaXRmaWVsZDY0IFU6Rzo2NCwgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2
NAorICAgIFRtcCwgSW1tLCBJbW0sIFRtcAorCiAjIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4K
ICMgRklYTUU6IFRoaXMgZm9ybXVsYXRpb24gbWVhbnMgdGhhdCB0aGUgYm9vbGVhbiByZXN1bHQg
Y2Fubm90IGJlIHB1dCBpbiBlYXgsIGV2ZW4gdGhvdWdoIGFsbCB1c2VycwogIyBvZiB0aGlzIHdv
dWxkIGJlIE9LIHdpdGggdGhhdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCA4ZWRi
ZGVmZTg3YjdmNTVkY2YyZGM1MjRhZWIwMDA2YjhmZDFmYTRlLi44NTAwMzUzNDk5NWMwNmQ5YTRm
NWNmNmE2YzdhMjI1Mzg3NmMyNDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC00
MzYsNiArNDM2LDEwIEBAIHZvaWQgdGVzdEJJQzMyKCk7CiB2b2lkIHRlc3RCSUM2NCgpOwogdm9p
ZCB0ZXN0T3JOb3QzMigpOwogdm9pZCB0ZXN0T3JOb3Q2NCgpOwordm9pZCB0ZXN0SW5zZXJ0U2ln
bmVkQml0ZmllbGRJblplcm8zMigpOwordm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblpl
cm82NCgpOwordm9pZCB0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIoKTsKK3ZvaWQgdGVzdEV4
dHJhY3RTaWduZWRCaXRmaWVsZDY0KCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFy
Z0ltbU1hc2szMigpOwogdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQo
KTsKIHZvaWQgdGVzdEJhc2ljU2VsZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18y
LmNwcAppbmRleCBkZDQwOTBhYjA0YjAxMTMxODAwZjVlYTc1OTNkZTY2MTAzMTQyOTNiLi5kNDgy
MzI0MjdhOGJkOTBlODJmMGI1YWRiNTkzNmUyMWU5MTNlZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMi5jcHAKQEAgLTQ1OTksNiArNDU5OSwxMCBAQCB2b2lkIGFkZEJpdFRlc3Rz
KGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0
YXNrcykKICAgICBSVU4odGVzdEJJQzY0KCkpOwogICAgIFJVTih0ZXN0T3JOb3QzMigpKTsKICAg
ICBSVU4odGVzdE9yTm90NjQoKSk7CisgICAgUlVOKHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZElu
WmVybzMyKCkpOworICAgIFJVTih0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm82NCgpKTsK
KyAgICBSVU4odGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKCkpOworICAgIFJVTih0ZXN0RXh0
cmFjdFNpZ25lZEJpdGZpZWxkNjQoKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdo
dEFyZ0ltbU1hc2szMigpKTsKICAgICBSVU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1t
TWFzazY0KCkpOwogICAgIFJVTih0ZXN0Qml0QW5kQXJncyg0MywgNDMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDdiNzZmYTBiZTAwMjQ0NzgwMzY3OGVlN2YxMThj
NDA2YjQxZDBkZjguLjA2NDFiODRjZmU2NTI3MDIwYmMwNmJlNTVjYzlkZWNkZWRkZDMxNjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMjgsNiArMjgsMTc4IEBACiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCit2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVy
bzMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikK
KyAgICAgICAgcmV0dXJuOworICAgIGludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0
b3I8aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDI5IH07CisgICAgVmVjdG9yPGludDMyX3Q+IHdp
ZHRocyA9IHsgMzAsIDE3LCAyIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46ICgoKHNyYyAmIG1h
c2sxKSBeIG1hc2syKSAtIG1hc2syKSA8PCBsc2IKKyAgICAvLyB3aGVyZTogbWFzazEgPSAoMSA8
PCB3aWR0aCkgLSAxCisgICAgLy8gICAgICAgIG1hc2syID0gMSA8PCAod2lkdGggLSAxKQorICAg
IGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBsc2IsIGludDMyX3QgbWFzazEsIGludDMyX3QgbWFz
azIpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogc3JjVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBsc2JW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2Ip
OworICAgICAgICBWYWx1ZSogbWFzazFWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrMlZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsKKwor
ICAgICAgICBWYWx1ZSogYW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dEFuZCwgT3JpZ2luKCksIHNyY1ZhbHVlLCBtYXNrMVZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHhv
clZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBh
bmRWYWx1ZSwgbWFzazJWYWx1ZSk7CisgICAgICAgIFZhbHVlKiBzdWJWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgeG9yVmFsdWUsIG1hc2syVmFsdWUp
OworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFNobCwgT3JpZ2luKCksIHN1YlZhbHVlLCBsc2JWYWx1ZSkpOworCisgICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAg
ICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzYmZpeiIpOworICAgICAgICBy
ZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBzcmMpOworICAgIH07CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW50MzJfdCBsc2Ig
PSBsc2JzLmF0KGkpOworICAgICAgICBpbnQzMl90IHdpZHRoID0gd2lkdGhzLmF0KGkpOworICAg
ICAgICBpbnQzMl90IG1hc2sxID0gKDEgPDwgd2lkdGgpIC0gMTsKKyAgICAgICAgaW50MzJfdCBt
YXNrMiA9IDEgPDwgKHdpZHRoIC0gMSk7CisgICAgICAgIGludDMyX3QgYmZzeCA9ICgoc3JjICYg
bWFzazEpIF4gbWFzazIpIC0gbWFzazI7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrMSwg
bWFzazIpID09IChiZnN4IDw8IGxzYikpOworICAgIH0KK30KKwordm9pZCB0ZXN0SW5zZXJ0U2ln
bmVkQml0ZmllbGRJblplcm82NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIz
T3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQ2NF90IHNyYyA9IDB4ZmZm
ZmZmZmZmZmZmZmZmZjsKKyAgICBWZWN0b3I8aW50NjRfdD4gbHNicyA9IHsgMSwgMzAsIDYyIH07
CisgICAgVmVjdG9yPGludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICAvLyBU
ZXN0IFBhdHRlcm46ICgoc3JjIDw8IGFtb3VudCkgPj4gYW1vdW50KSA8PCBsc2IKKyAgICAvLyB3
aGVyZTogYW1vdW50ID0gZGF0YXNpemUgLSB3aWR0aAorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50
NjRfdCBsc2IsIGludDY0X3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICAgICAgVmFsdWUqIHNyY1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSog
bHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
bHNiKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNpZ25l
ZFJpZ2h0U2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBTU2hyLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFNobCwgT3JpZ2luKCksIHNyY1ZhbHVlLCBhbW91bnRWYWx1ZSksIAorICAgICAgICAg
ICAgYW1vdW50VmFsdWUpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
KyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIHNpZ25lZFJpZ2h0U2hpZnRWYWx1
ZSwgbHNiVmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
KyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCAic2JmaXoiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUs
IHNyYyk7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7
ICsraSkgeworICAgICAgICBpbnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIGludDY0
X3Qgd2lkdGggPSB3aWR0aHMuYXQoaSk7CisgICAgICAgIGludDY0X3QgYW1vdW50ID0gQ0hBUl9C
SVQgKiBzaXplb2Yoc3JjKSAtIHdpZHRoOworICAgICAgICBpbnQ2NF90IGJmc3ggPSAoc3JjIDw8
IGFtb3VudCkgPj4gYW1vdW50OworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgYW1vdW50KSA9PSAo
YmZzeCA8PCBsc2IpKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdEV4dHJhY3RTaWduZWRCaXRmaWVs
ZDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikK
KyAgICAgICAgcmV0dXJuOworICAgIGludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0
b3I8aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDI5IH07CisgICAgVmVjdG9yPGludDMyX3Q+IHdp
ZHRocyA9IHsgMzAsIDE3LCAyIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46ICgoKHNyYyA+PiBs
c2IpICYgbWFzazEpIF4gbWFzazIpIC0gbWFzazIKKyAgICAvLyB3aGVyZTogbWFzazEgPSAoMSA8
PCB3aWR0aCkgLSAxCisgICAgLy8gICAgICAgIG1hc2syID0gMSA8PCAod2lkdGggLSAxKQorICAg
IGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBsc2IsIGludDMyX3QgbWFzazEsIGludDMyX3QgbWFz
azIpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogc3JjVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBsc2JW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2Ip
OworICAgICAgICBWYWx1ZSogbWFzazFWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrMlZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsKKwor
ICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
U1NociwgT3JpZ2luKCksIHNyY1ZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIFZhbHVlKiBhbmRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgc2hp
ZnRWYWx1ZSwgbWFzazFWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYW5kVmFsdWUsIG1hc2syVmFs
dWUpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIHhvclZhbHVlLCBtYXNrMlZhbHVlKSk7CisKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkp
CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInNiZngiKTsKKyAgICAg
ICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgc3JjKTsKKyAgICB9OworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGludDMyX3Qg
bHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgaW50MzJfdCB3aWR0aCA9IHdpZHRocy5hdChpKTsK
KyAgICAgICAgaW50MzJfdCBtYXNrMSA9ICgxIDw8IHdpZHRoKSAtIDE7CisgICAgICAgIGludDMy
X3QgbWFzazIgPSAxIDw8ICh3aWR0aCAtIDEpOworICAgICAgICBpbnQzMl90IHJlc3VsdCA9ICgo
KHNyYyA+PiBsc2IpICYgbWFzazEpIF4gbWFzazIpIC0gbWFzazI7CisgICAgICAgIENIRUNLKHRl
c3QobHNiLCBtYXNrMSwgbWFzazIpID09IHJlc3VsdCk7CisgICAgfQorfQorCit2b2lkIHRlc3RF
eHRyYWN0U2lnbmVkQml0ZmllbGQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQ2NF90IHNyYyA9IDB4
ZmZmZmZmZmZmZmZmZmZmZjsKKyAgICBWZWN0b3I8aW50NjRfdD4gbHNicyA9IHsgMSwgMzAsIDYy
IH07CisgICAgVmVjdG9yPGludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICAv
LyBUZXN0IFBhdHRlcm46ICgoc3JjID4+IGxzYikgPDwgYW1vdW50KSA+PiBhbW91bnQKKyAgICAv
LyB3aGVyZTogYW1vdW50ID0gZGF0YXNpemUgLSB3aWR0aAorICAgIGF1dG8gdGVzdCA9IFsmXSAo
aW50NjRfdCBsc2IsIGludDY0X3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICAgICAgVmFsdWUqIHNyY1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1
ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHJp
Z2h0U2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2lu
KCksIHNyY1ZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIFZhbHVlKiBsZWZ0U2hpZnRWYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgcmlnaHRTaGlmdFZh
bHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiBzaWduZWRSaWdodFNoaWZ0VmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBsZWZ0U2hpZnRW
YWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc2lnbmVkUmlnaHRTaGlmdFZhbHVlKTsKKworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkK
KyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic2JmeCIpOworICAgICAg
ICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgc3JjKTsKKyAgICB9OworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGludDY0X3Qg
bHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgaW50NjRfdCB3aWR0aCA9IHdpZHRocy5hdChpKTsK
KyAgICAgICAgaW50NjRfdCBhbW91bnQgPSBDSEFSX0JJVCAqIHNpemVvZihzcmMpIC0gd2lkdGg7
CisgICAgICAgIGludDY0X3QgcmVzdWx0ID0gKChzcmMgPj4gbHNiKSA8PCBhbW91bnQpID4+IGFt
b3VudDsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2IsIGFtb3VudCkgPT0gcmVzdWx0KTsKKyAgICB9
Cit9CisKIHZvaWQgdGVzdEJpdE9yQml0T3JBcmdJbW1JbW0zMihpbnQgYSwgaW50IGIsIGludCBj
KQogewogICAgIFByb2NlZHVyZSBwcm9jOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>